Итак, я только что опросил двух человек сегодня и дал им «тесты», чтобы увидеть, каковы их навыки. Оба поступают на начальный уровень, один из которых на самом деле все еще учится в колледже. Ни один из заявителей не заметил ничего плохого в следующем коде.
Конечно, да, иначе я бы не взял эти примеры. Как вы думаете, эти вопросы слишком резкие для начинающих программистов?
Думаю, я должен также отметить, что ни один из них не имел большого опыта работы с C# ... но я не думаю, что проблемы с ними зависят от языка.
//For the following functions, evaluate the code for quality and discuss. E.g.
//E.g. could it be done more efficiently? could it cause bugs?
public void Question1()
{
int active = 0;
CheckBox chkactive = (CheckBox)item.FindControl("chkactive");
if (chkactive.Checked == true)
{
active = 1;
}
dmxdevice.Active = Convert.ToBoolean(active);
}
public void Question2(bool IsPostBack)
{
if (!IsPostBack)
{
BindlistviewNotification();
}
if (lsvnotificationList.Items.Count == 0)
{
BindlistviewNotification();
}
}
//Question 3
protected void lsvnotificationList_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
ListViewDataItem item = lsvnotificationList.Items[e.ItemIndex];
string Email = ((TextBox)item.FindControl("txtEmailAddress")).Text;
int id = Convert.ToInt32(((HiddenField)item.FindControl("hfID")).Value);
ESLinq.ESLinqDataContext db = new ESLinq.ESLinqDataContext();
var compare = from N in db.NotificationLists
where N.ID == id
select N;
if (compare.Count() > 0)
{
lblmessage.Text = "Record Already Exists";
}
else
{
ESLinq.NotificationList Notice = db.NotificationLists.Where(N => N.ID == id).Single();
Notice.EmailAddress = Email;
db.SubmitChanges();
}
lsvnotificationList.EditIndex = -1;
BindlistviewNotification();
}
@ MetroidFan2002 Вопрос 2 имеет мало общего с .NET framework, и его недостатки должны быть очевидны любому, кто знает язык на основе C.
Лично я считаю, что на самом деле вопросы были слишком простыми. Думаю, я не знаю наверняка, что получил правильные ответы, но довольно быстро заметил пару недостатков (и что с ними делать). И я учусь на бакалавра по программе Prog.
Вопрос 2, да, я понимаю вашу точку зрения о логическом, но прошло довольно много времени с тех пор, как я видел параметр, написанный с заглавной буквы, и читая ваш код, мои глаза не заметили этого. Но вопрос 1, мне нужно знать, что такое контракт Convert.toBoolean, № 3, что такое ListViewDataItem и т. д. Специфично для C#.
Вместо теста, возможно, вам следовало бы спросить (лично): «Если бы вы проверяли код для коллеги, какие области вы бы назвали проблемными?» что позволяет им по крайней мере идентифицировать и начинать диалог вместо того, чтобы знать, чего вы ожидаете.





Вопрос 1
boolean active = true;
Вопрос 2
if ((!IsPostBack) || (lsvnotificationList.Items.Count == 0))
Вопрос №3:
Сделайте тотальное переписывание и добавляйте комментарии. После 30-секундного чтения я все еще не могу сказать, что пытается сделать код.
Я не спрашивал, какими должны быть ответы ... я спрашивал, не слишком ли это сложно, чтобы давать в интервью.
Последний вопрос - просто хороший пример того, как писать код очень плохо. Если бы я получил этот вопрос на собеседовании, я был бы рад не получить работу, так как мне не хотелось бы работать с таким кодом изо дня в день.
Преобразуя переменную int в логическое значение, это устраняет необходимость приведения в логическое значение позже в коде. Как именно это неправильно?
Юссидж, посмотри на мой ответ выше.
jussij: Очень близко к ответу, который мне бы очень понравился! Весь этот код исходит от индийской компании, которой мы передали проект на аутсорсинг. Меня это совсем не устраивает ... Q1 можно преобразовать в 1 строчку, но удаление приведений - хорошее начало!
Джонатан, я мог бы заявить, что ваш вопрос 2 неверен, потому что это можно сделать следующим образом, сохранив 2 строки: dmxdevice.Active = (chkActive! = Null)? chkActive.Checked: false; Но такая критика просто глупа, поскольку сейчас мы говорим о стандарте кодирования, а не об ошибках кодирования.
Как новичок, я ожидал, что работодатели будут больше заботиться о том, каков мой мыслительный процесс, а не о том, был ли ответ «правильным» или нет. Я мог бы дать какие-то ответы на эти вопросы, но они, вероятно, будут неправильными. :)
Итак, с учетом сказанного, я думаю, вы могли бы справиться с этими вопросами, но вам определенно следует быть немного более либеральным с тем, что является «правильным» ответом.
Пока эти условия были прояснены, я думаю, что получить чистый лист без мыслей - плохо. Это означает, что они либо искренне считают код идеальным (что, как мы знаем, почти никогда не бывает правдой), либо слишком застенчивы, чтобы поделиться своими мыслями (что тоже плохо).
Проблема в том, что я действительно не получил ответов. Я хотел, чтобы они записали свои мысли, но мне только что вернули чистый лист бумаги ...
Я понимаю, о чем вы говорите. Я обновил свой пост по этому поводу.
Я младший программист, поэтому могу попробовать:
"активный" не нужен:
CheckBox chkactive = (CheckBox)item.FindControl("chkactive");
dmxdevice.Active = chkactive.Checked
Вы должны использовать безопасное приведение для приведения к объекту CheckBox. Конечно, вы все равно сможете найти флажок по имени его переменной:
CheckBox chkactive = item.FindControl("chkactive") as CheckBox;
Вторая функция могла бы быть более лаконичной:
public void Question2(bool IsPostBack)
{
if (!IsPostBack || lsvnotificationList.Items.Count == 0)
{
BindlistviewNotification();
}
}
Успейте только на этих двоих, работа зовет!
Обновлено: Я только что понял, что не ответил на ваш вопрос. Я не думаю, что это вообще сложно. Я ни в коем случае не эксперт, и я легко вижу здесь недостатки. Однако я считаю, что в целом это неправильный подход. На мой взгляд, эти языковые тесты не очень полезны. Постарайтесь понять, как они будут атаковать и решать проблему. Любой, кто сможет пройти этот тест, сможет легко выучить язык и учиться на своих ошибках.
1) Также в № 1 сравнение не требуется, но сравнение сравнивает логическую переменную с истиной. Почему бы просто не оценить логическое значение? Я бы сказал, что только №3 зависит от языка, и я думаю, что языки можно подобрать достаточно легко.
Не зная C#, мне потребовалось немного больше времени, но я предполагаю, что # 1 можно выразить как
dmxdevice.Active = ((CheckBox) item.FindControl ("chkactive")). Проверено == true
А в пункте 2 эти два условия могут быть объединены как оператор A ИЛИ B?
Если это то, что вы ищете, тогда нет, это не так уж сложно. Я думаю, что №1 - это то, чему вы можете научиться только после небольшого времени программирования, но №2 кажется проще. Вы ищете, чтобы они также перехватывали исключения с нулевым указателем?
Не беспокойтесь об исключениях с нулевым указателем. Кроме того, первое утверждение можно сократить еще больше. .Checked уже является логическим, так зачем его тестировать? (Вы все равно справились лучше, чем любой из моих кандидатов ...)
Вы пропустили реальную проблему, заключающуюся в том, что FindControl ('chkactive') на самом деле может не вернуть флажок, он может (и очень вероятно) вернуть RadioButton, или текстовое поле, или что-то еще в зависимости от глупости программиста.
Для этого потребуется знание C#, которого у меня нет. Я не знаю этих конкретных библиотек.
Думаю, первые два хороши. Третий вариант может быть немного сложным для собеседования на уровне выпускника, но, возможно, и нет, это зависит от того, занимались ли они ранее кодированием .net.
В нем есть операторы LINQ, и это довольно ново. Тем более, что многие университеты / колледжи немного отстают в преподавании новейших технологий. Поэтому я бы сказал, запустите с 1 и 2 и либо упростите 3, либо сильно прокомментируйте его, как упоминали другие.
Ни один уважаемый университет не собирается знакомить студентов с C# (как ни странно, общественные колледжи и школы низшего уровня). Студенты из уважаемого университета почти на 100% владеют C / C++ на Unix, с добавлением 1 Java и 1 функционального языка, такого как LISP или Ocaml. Никаких IDE для этих людей, только Emacs или vi.
Я должен согласиться. Я обнаружил, что слишком часто IDE просто сбивает студентов с толку, когда они рассказывают о компиляторах, компоновщиках, редакторах, системах тегов, виртуальных машинах и прочем.
@Tony - Но студенты / выпускники, которых вы хотите, будут развивать больше, чем то, что им дает Uni. Ответ Гленна больше всего напоминает то, что я написал. Первые два вопроса довольно простые. Возможно, уберите материал asp.net и сделайте вопросы более абстрактными.
Q1 также имеет потенциальное исключение InvalidCastException в строке item.FindControl().
Я не думаю, что Q1 или Q2 выходят за рамки того, чтобы быть слишком сложным, даже для не-пользователей C#. Код любого уровня должен иметь возможность видеть, что вы должны использовать логическое значение для активного и использовать только один оператор if.
Q3, хотя, по крайней мере, нуждается в комментариях, как заметил кто-то другой. Это не базовый код, особенно если вы тоже нацеливаетесь на пользователей, не использующих C#.
Я удивлен, что вы первый, кто поймал InvalidCastexception. Я сразу понял это.
Я не программист на C#. На Q1 вроде бы есть необъявленные объекты dmxdevice и item, что меня смущает. Однако в остальной части кода, похоже, много запутывания. В Q2 lsvnotificationList не объявляется, и мне непонятно, почему один тест сокращен до! а другой с == 0 - но тесты, кажется, можно комбинировать с ||. В третьем квартале lsvnotificationList снова не объявляется само собой разумеющимся. В остальном, похоже, он выполняет поиск в базе данных с помощью LINQ. Я бы по крайней мере ожидал, что это будет учтено в функции, которая более прозрачно проверяет идентификатор скрытого поля. Но если у вас есть другие идеи, что ж ... Я все еще не программист на C#.
Это частные члены, привязанные к классу, а не к методу. Было бы более очевидно, если бы вы были программистом .NET.
Кандидатами были программисты на C++, я ожидал, что они просто предположат, что все, что не объявлено в функции, было членом класса или чем-то еще. По сути, это просто не важно для вопроса ... может быть, я постараюсь сделать такие вещи более явными в будущем ...
Первые два кажутся скорее проверкой, чтобы увидеть, может ли человек следовать логике и понимать, что есть дополнительный код. Я не уверен, что разработчик начального уровня поймет, что «меньше значит больше». Однако, если бы вы объяснили ответ на вопрос 1, а они не экстраполировали этот ответ на вопрос 2, я бы забеспокоился.
По сути, это была передача им вопросов, и я уехал на час. Идея в том, что у них будет время подумать и доступ в Интернет, чтобы что-то найти. Так что у них нет возможности вычислить 2 после обсуждения 1 ...
Тогда вы можете пересмотреть свою методологию. Бессмысленно заставлять их «разобраться» без вас. Если вы там, вы можете скормить им указатели и т. д. И посмотреть, сколько времени займет момент AHA. Они юниоры, их нужно будет учить.
Я согласен; прохождение этого с ними позволит вам увидеть, насколько быстро они улавливают вещи, и в этом случае тот факт, что они, вероятно, еще не знают linq, будет преимуществом. Если вас там нет, это кажется пустой тратой времени.
Вопрос 3, похоже, представляет собой большой шар грязи. Почти ожидается, что это будет стиль младшего разработчика прямо из колледжа. Я помню, что большинство моих профессионалов / технических специалистов в колледже никогда не читали мой код - они только запускали исполняемый файл, а затем вставляли наборы тестов. Я не ожидал, что новый разработчик поймет, что с этим не так ...
Да я понимаю, что с этим не так. Вы просили меня сказать вам, что с этим не так, или сказать, думаю ли я, что это применимо к недавнему выпускнику колледжа?
Нет, это звучало так, будто вы ожидали неработающего кода от программистов младшего уровня.
Нет, я ожидаю, что код будет работать, но будет неэлегантным, неструктурированным и сложным в обслуживании - это большой комок грязи. Я не думаю, что большинство колледжей стараются изо всех сил преподавать правильную структуру, элегантность или программирование для удобства обслуживания.
Обычно я не бросаю код на собеседника на должность и не говорю «что не так?», Главным образом потому, что я не уверен, что он действительно находит меня лучшим кандидатом. Интервью иногда бывает стрессовым и немного утомительным, а кодеры не всегда в своей игре.
Что касается вопросов, честно говоря, я думаю, что если бы я не знал C#, мне было бы сложно ответить на вопрос 3. Вопрос № 2 тоже немного забавный. Да, я понимаю, что вы там собираетесь, но что, если идея заключалась в том, что BindlistviewNotification () должен был вызываться дважды? Это неясно, и можно утверждать, что информации недостаточно. Вопрос 1 достаточно легко исправить, но я не уверен, что даже он что-то доказывает для разработчика начального уровня без опыта работы с C#.
Думаю, я бы предпочел, чтобы что-нибудь объяснило мне, как они будут атаковать проблему (в псевдокоде или другом языке, который им удобен), и оценить их на основе этого. Впрочем, это личное мнение.
Итак, вы спросили об этом кого-то, кто не знает C#, .net, asp.net или linq? Я бы ничего не ожидал от бумаги?
Я видел, как №3 заставляет кого-то задуматься (это был сложный вопрос). Я думаю, что первый довольно простой,
Если вы никогда не работали с findcontrol, как бы вы узнали его возможные подводные камни? В C++ истина равна 1, ложь 0. И я не уверен, что они научатся защитному программированию в школе? Насколько зеленые где они?
FindControl ни в коем случае не был проблемой. Я знаю, что C++ использует 1/0 для истины / ложи, но когда вы действительно видите что-то преобразованное из int в логическое, когда оно уже было логическим, разве это не должно вас удивлять? Один раньше проработал 2 года программистом, другой все еще учился в колледже без опыта.
С двухлетним опытом ваше право. Они должны были что-то увидеть.
Я думаю, вы не то тестируете. Очевидно, вы ищете программиста на C#, а не талантливого программиста (не то чтобы вы не могли быть талантливым программистом на C#). Например, ребята могут быть отличными программистами на C++. C# можно выучить, умный - нет. Я предпочитаю запрашивать код во время собеседования, а не представлять код на определенном языке (пример: реализовать ArrayList и LinkedList на любом языке). Когда в начале этого года я искал трех программистов для работы в основном с C#, Java, PL / SQL, Javascript и Delphi, я искал программистов на C / C++ и не был разочарован. Выучить Java может любой, но не каждый имеет представление о хорошей архитектуре, структуре данных и понимании новых сложных проблем. C++ сложен, поэтому он действует как хороший фильтр. Если бы я попросил найти ошибки в этом Java-коде, я бы их потерял. Кстати, я являюсь руководителем группы, занимаюсь программированием в течение 20 лет с десятками крупных проектов, разработанных вовремя и в рамках бюджета, и я понятия не имел, что не так с вопросом 2 или 3, имея лишь мимолетное знакомство с C# и, конечно же, не с Linq, Не то, чтобы я не мог его изучить .... Я понял это через пару минут, но не ожидал, что недавний выпускник поймет это, весь код LINQ в вопросе 3 - это отвлечение, которое скрывает настоящие проблемы .
Я не думаю, что 1 и 2 слишком сложны, № 3 требует приличного понимания того, как привязка данных и LINQ работает в .NET, поэтому это может быть несколько сложно для человека начального уровня. Я думаю, что это довольно хорошие вопросы для разработчиков младшего уровня, которые имеют некоторый опыт работы с .NET.
Какова его ценность, мои заметки:
Моя ревизия:
public void Question1()
{
CheckBox chkactive = item.FindControl("chkactive") as CheckBox;
if (chkActive != null)
dmxdevice.Active = chkActive.Checked;
else
dmxdevice.Active = false;
}
Моя ревизия:
public void Question2(bool IsPostBack)
{
if (!IsPostBack || lsnotificationList.Items.Count == 0)
{
BindlistviewNotification();
}
}
Хотите подробно рассказать, как можно оптимизировать запросы LINQ? В противном случае хороший ответ +1.
Вместо использования Contains () выберите соответствующий идентификатор, а затем проверьте, получили ли вы элемент обратно. Если да, значит, у вас уже есть совпадение, это предотвращает дорогостоящее сканирование и сокращает одно обращение к базе данных.
Я искал и искал Contains (), но не вижу. Может вы имеете в виду графа? Счетчик фильтруется по идентификатору, так что все должно быть в порядке. Вы также ошибаетесь насчет двойного путешествия туда и обратно. DataContext знает запись, которая соответствует этому фильтру, и не будет возвращаться, чтобы получить ее снова. Дублирование кода - единственный грех.
На самом деле, вы упустили реальную проблему в 3. Большая проблема в том, что в методе UPDATE он проверяет, существует ли уже запись, и показывает ошибку, если она существует. В методе UPDATE. Думаю об этом.
Я действительно подумал об этом, Телос, что, если это распределенное приложение, и кто-то другой уже сделал и обновил эту строку до того, как это было обновлено. Хм?
Ну и что? Если вы предотвратите обновление, потому что строка уже существует, вы никогда не сможете выполнить обновление. Распространяется или нет.
Отказ от ответственности: у меня 4-летняя степень и годичный опыт работы в Java.
Первые два вопроса довольно просты, и если кандидат не видит лучшего подхода, я подозреваю, что это потому, что он не обращал внимания в классе ;-)
Большинство ответов на второй вопрос, представленные до сих пор, изменяют поведение функций. Функция вполне могла быть оценена дважды в исходном коде, хотя я не могу сказать, является ли это целью функции. Побочные эффекты важны.
Я бы, вероятно, сам однострочил первую функцию.
Вопросы в значительной степени не зависят от языка, но они не зависят от библиотеки, что, как я считаю, не менее важно. Если вы специально ищете знания .NET, хорошо и хорошо, но без Google я не мог бы сказать вам, что такое ESLinq.DataContext, и мой ответ на третий вопрос страдает соответственно. Как бы то ни было, мне это почти непонятно.
Я думаю, вы также должны быть осторожны при постановке вопросов. По сути, в первых двух методах нет ничего неверный. Они просто немного более подробны, чем должны быть.
Я бы просто показал им лист и сказал: «Что вы думаете об этом коде?» Сделайте его открытым, таким образом, если они хотят вызвать обработку ошибок / протоколирование / комментирование или другие вещи, это не ограничивает обсуждение.
Итак, вы заявляете, что первые два вопроса довольно просты - я предполагаю, что вы знаете, что такое «dmxdevice.Active = Convert.ToBoolean (active);» делает? Вы знаете, что за этим, вероятно, стоит свойство C#, например, "метод установки Java"? За этим объявлением может стоять метод на C#. ржу не могу
Георгий: Вы серьезно не уверены, что могут делать оператор присваивания и Convert.ToBoolean?
Я не программист на C#, поэтому не знаю, что делает BindlistviewNotification, но меняю
public void Question2(bool IsPostBack)
{
if (!IsPostBack)
{
foo();
}
if (lsvnotificationList.Items.Count == 0)
{
foo();
}
}
к
public void Question2(bool IsPostBack)
{
if (!IsPostBack || lsvnotificationList.Items.Count == 0)
{
foo();
}
}
изменяет функцию! Если IsPostBack имеет значение false, выполняется foo. Если lsvnotificationList.Items.Count == 0, то выполняется foo очередной раз. В измененном коде будет выполняться только foo однажды.
Вы можете утверждать, что BindlistviewNotification может выполняться несколько раз без побочных эффектов или что IsPostBack никогда не может быть ложным, а lsvnotificationList.Items.Count одновременно равен 0, но они зависят от языка и реализации, которые не могут быть решены с помощью данного кода. фрагмент.
Кроме того, если это ошибка, которую «предполагается» выявить в ходе интервью, это вообще не зависит от языка. Нет ничего, что могло бы сказать мне, что это должна быть ошибка.
Можно с уверенностью сказать, что вы не хотите дважды связывать данные в .NET. Но да, этот вопрос можно было бы задать во время собеседования ... "Вы хотели связать это дважды?"
Но, увы, этот вопрос не стоит задавать в таком контексте. Опрашивающий полностью упустил суть imho.
ИЛИ, если указано иное: вы действительно уверены, что делает "lsvnotificationList.Items.Count"? Хм...
Что вы ожидали получить от этого интервью? Вашим сотрудникам приходится отлаживать код без отладчика или чего-то подобного? Вы нанимаете кого-то, кто будет заниматься только программированием технического обслуживания?
На мой взгляд, эти вопросы мало способствуют пониманию способностей кандидатов.
Я хотел посмотреть, распознают ли они это как плохой / неэффективный код. На самом деле, если кто-то говорит, что Q1 хорош, это меня немного беспокоит ... Я не хочу, чтобы они писали проекты с таким кодом!
Беглый взгляд показывает, что большая часть остального кода страдает плохой структурой, ненужными условными операторами и т. д. В этом нет ничего "неправильного" по своей сути, особенно если программа работает так, как ожидалось. Может стоит поменять вопрос?
С другой стороны, кастинг вообще не выглядит корректным, например. (приведение) object.Method () vs (cast) (object.Method ()) vs ((cast) object) .Method (). В первом случае это не проблема языковой независимости - это зависит от правил приоритета.
Не думаю, что это было так сложно, но все зависит от того, что вы хотели протестировать. ИМО, умный кандидат должен был задать много вопросов о функциях программы и структуре классов, прежде чем пытаться ответить. например. Как они должны узнать, является ли "item" глобальной переменной или переменной-членом, если они не спрашивают? Как они узнают его тип? Они вообще знают, поддерживает ли он метод FindControl? А как насчет возвращаемого типа FindControl?
Я не уверен, сколько колледжей преподают Linq, так что, возможно, вам стоит удалить эту часть.
Я не получил особо много вопросов, хотя обоим сказали, чтобы они задавали мне все, что им было нужно. Может, боялись задавать вопросы из-за боязни плохо выглядеть?
Do you think these questions are too harsh for newbie programmers?
Да, IMO они слишком резкие.
Neither applicant saw anything wrong with the following code.
Хотя существует множество «возможных проблем», таких как отсутствие проверки на нулевые указатели, приведение типов и т. д., Похоже, что «реальных проблем» нет. (например: при разумном вводе программа выглядит так, как будто она действительно запускается) .
Я предполагаю, что начинающий программист заинтересуется этим.
Поскольку linq является довольно новым и еще не широко используется, он собирается обойти путь ваших новичков.
Что такое ESLinqDataContext? Если люди понятия не имеют, что это за объект и как он себя ведет, как им узнать, правильно он используется или нет?
evaluate the code for quality and discuss
Вы действительно учитесь подбирать такие вещи, как недопустимые исключения приведения (не говоря уже о возможности судить и комментировать «качество кода»), только на разумном опыте работы с кодом, аналогичным тому, что перед вами.
Возможно, я неправильно понимаю, но для меня должность «начального уровня» по определению не предполагает предварительного опыта, поэтому не кажется справедливым оценивать их по критериям, требующим опыта.
Пожалуйста, не вдавайтесь в технические подробности - в этом случае вопрос уходит слишком далеко на задний план. Это немного технического мышления, просто чтобы ответить, что не так в коде. Реальный вопрос, а именно то, что он слишком резкий, таким образом уходит на второй план.
ммм хороший момент. Я удалил технические ответы (поскольку дело не в этом) и оставил там свой исходный ответ.
Однако это не лучший тест для определения хорошего программиста. Хороший программист, конечно же, выдержит этот тест, но многие не очень хорошие программисты также пройдут его.
Если вам нужен хороший программист, вам нужно определить тест, который может пройти только хороший программист. Хороший программист обладает отличными навыками решения проблем и знает, как задавать вопросы, чтобы добраться до сути проблемы до того, как они начнут работать, что экономит время и им, и вам.
Хороший программист может программировать на множестве разных языков с небольшой кривой обучения, поэтому ваш «кодовый» тест может состоять из псевдокода. Скажите им, что вы хотите, чтобы они решили проблему, и попросите их написать решение в псевдокоде - что означает, что у них нет доступа ко всем этим изящным библиотекам. Хороший программист знает, как работают библиотеки, и при необходимости может их воссоздать.
Итак ... да, вы, по сути, задаете вопросы о знаниях из учебников - предметы, которые показывают запоминание и знание языка, но не навыки, необходимые для решения проблемы.
-Адам
В вопросе 2 для лучшей модульности я бы предложил передать количество lsvnotificationList.Items в качестве параметра:
public void Question2(bool IsPostBack, int listItemsCount)
{
if (!IsPostBack || listItemsCount == 0)
BindlistviewNotification();
}
Мой единственный совет - убедитесь, что ваши тестовые вопросы действительно скомпилированы.
Я думаю, что ценность вопросов типа FizzBuzz состоит в том, чтобы наблюдать, КАК кто-то решает ваши проблемы.
Наблюдать за тем, как они загружают решение в IDE, компилируют его, проходят через код с пошаговым выполнением отладчика, пишут тесты для очевидного предполагаемого поведения, а затем реорганизуют код, чтобы он был более правильным / поддерживаемым, более ценно, чем знать, что они может читать код и понимать его.
К сожалению, эти фрагменты взяты из гораздо более крупного проекта. Я думаю, что предоставление им решения для пошагового выполнения устранит любую возможность их понимания ... хотя, возможно, я мог бы придумать приложение-песочницу ...
Извините, я не уточнил, но да, я использую или придумываю приложение, которое является репрезентативным, но достаточно маленьким, чтобы его можно было понять за один присест.
Никто не отвечает на №3 кодом. Это должно указывать на то, как люди к этому относятся. Обычно stackoverflowers сталкиваются с этим в первую очередь.
Вот мой удар. Мне пришлось искать EventArgs на msdn, чтобы узнать свойства. Я знаю LINQ, потому что внимательно изучал его последние 8 месяцев. У меня мало опыта работы с пользовательским интерфейсом, поэтому я не могу сказать, является ли вызов привязки в обработчике событий плохим (или другие подобные вещи, которые были бы очевидны для кодировщика пользовательского интерфейса).
protected void lsvnotificationList_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
string Email = e.NewValues["EmailAddress"].ToString();
int id = Convert.ToInt32(e.NewValues["ID"]);
using (ESLinq.ESLinqDataContext db = new ESLinq.ESLinqDataContext(connectionString))
{
List<NotificationList> compare = db.NotificationLists.Where(n => n.ID = id).ToList();
if (!compare.Any())
{
lblmessage.Text = "Record Does Not Exist";
}
else
{
NotificationList Notice = compare.First();
Notice.EmailAddress = Email;
db.SubmitChanges();
}
}
lsvnotificationList.EditIndex = -1;
BindlistviewNotification();
}
В то время как у людей здесь, очевидно, нет проблем с вводом этого кода в свободное время, как человек, который прошел весь процесс поиска работы / собеседования около года назад, не выходя из коллажа, я думаю, вы должны помнить, насколько напряженными могут быть подобные вопросы. Я понимаю, что вы просто искали мыслительный процесс, но я думаю, что вы получите больше от людей, если будете задавать подобные вопросы в разговоре и вскользь после того, как успокоите собеседника. Это может звучать как отговорка, но вопросы о коде, который технически будет работать, но требует некоторой обрезки, могут быть намного сложнее, чем исправление кода, который не компилируется, потому что люди будут предполагать, что примеры не компилируются, и будут загонять себя в стену, пытаясь понять трюк с вашими вопросами. Некоторые люди никогда не испытывают стресса из-за вопросов на собеседовании, но многие делают это, даже некоторые талантливые программисты, которых вы, вероятно, не хотите исключать, если только вы не готовите их к ситуации, когда им придется программировать с заряженным пистолетом к голове.
Сам код в вопросе 3 кажется очень специфичным для C#. Я знаю это как LINQ только потому, что кто-то указал на это в ответах здесь, но, войдя в качестве разработчика Java, я бы вообще этого не узнал. Я имею в виду, действительно ли вы ожидаете, что колледжи будут преподавать функцию, которая только недавно была представлена в .net 3.5?
Я также хотел бы указать, как много людей здесь были сбиты с толку вопросом 2, упростив код, они случайно изменили поведение кода. Это должно вам многое рассказать о сложности ваших вопросов.
Собственно, оптимизация / изменение поведения во втором квартале - это то, что я искал. В третьем квартале linq не имел никакого отношения к проблеме. Думаю, я понял, что он произвел слишком много "шума" и скрыл настоящую проблему с функцией ...
Хорошо, так что после того, как я долго ложился спать, чтобы прочитать все ответы и прокомментировать большинство из них ...
Похоже, что общее мнение заключается в том, что вопросы не так уж и плохи, но, особенно для Q3, их можно было бы лучше решить, используя псевдокод или какой-либо другой метод, чтобы скрыть некоторые специфические для языка вещи.
Думаю, сейчас я просто не буду вдаваться в подробности этих вопросов.
(Конечно, их нехватка знаний SQL по-прежнему беспокоит ... хотя бы потому, что у них обоих был SQL в своем резюме. :()
Недостаток знаний SQL - это обычное явление. Следует определить, что нужно знать программистам SQL, и явно это протестировать.
Я задал им несколько вопросов, начиная с написания запроса, требующего простого соединения. Ни то, ни другое ...
Я должен сказать, что мой ответ на эти проблемы состоит в том, что без комментариев (или документации), объясняющих, что ЗНАЧИТ делать код, нет особых причин даже смотреть на код. Код делает ТОЧНО то, что делает. Если вы измените его так, чтобы он выполнял что-то еще, даже изменив его, чтобы предотвратить выброс исключения, вы можете заставить его сделать что-то непреднамеренное и сломать большую программу.
Проблема со всеми тремя вопросами в том, что у них нет намерения. Если вы изменяете код, вы предполагаете, что знаете намерение исходного кодировщика. И это предположение часто бывает неверным.
И ответить на вопрос: да, это слишком сложно для большинства начинающих программистов, потому что документированию кода никогда не учат.
Забавно видеть, как все прыгают, чтобы изменить или исправить код. Вопросы были нацелены на «эффективно? Может ли это вызвать ошибки?» Ответы: если у вас будет достаточно времени и денег, каждый из них, вероятно, станет более эффективным. Ошибки, пожалуйста, избегайте кастинга и написания трудного для чтения кода (код должен быть самодокументированным). Если в нем нет ошибок, это может произойти после того, как следующий младший программист попытается его изменить ... Кроме того, избегайте написания кода, который, кажется, полагается на состояние, находящееся за пределами области метода / функции, эти неприятные глобальные переменные. Если бы я получил какие-то проницательные комментарии, возможно, уместно было бы использовать это как инструмент для создания хорошего разговора. Но я думаю, что существуют лучшие инструменты для определения того, подходят ли человеку навыки критического мышления и подходят ли они к остальной команде. Я не думаю, что игра в пень с программистом очень эффективна.
Хорошо, я не собираюсь отвечать на вопросы C# из того, что я вижу здесь, у вас достаточно кандидатов, которые отлично подойдут на собеседовании с вами.
Я действительно думаю, что тесты не дадут вам хорошего представления о навыках программирования. Взгляните на Руководство Джоэла по собеседованию:
http://www.joelonsoftware.com/articles/fog0000000073.html
Когда речь идет о возможных кандидатах, он говорит о двух вещах: умны ли они И выполняют ли они свою работу (теперь это мощная комбинация). Позвольте вашим кандидатам немного рассказать о проектах, которые они сделали, или о том, с чем они теребятся дома. . Узнайте, увлечены ли они программированием. Некоторый опыт, конечно, хорош, только не просите их делать трюки.
Я использовал Java и C++, но не C#, и мне нужно было знать особенности частей C# API, которые вы используете, чтобы разобраться в любом из этих вопросов. Другими словами, они сильно зависят от языка.