Вопросы, на которые должен уметь ответить каждый хороший .NET-разработчик?

Моя компания собирается нанять .NET разработчики. Мы работаем на различных платформах .NET: ASP.NET, Compact Framework, Windowsforms, Web Services. Я хотел бы составить список / каталог хороших вопросов, своего рода минимальный стандарт, чтобы увидеть, имеют ли кандидаты опыт. Итак, мой вопрос:

Какие вопросы как вы думаете, стоит ли хороший Программист .NET сможет ответить?

Я бы также рассматривал это как контрольный список для себя, чтобы увидеть, где мои собственные недостатки (Здесь очень много...).

Вопросы, на которые должен уметь ответить каждый хороший .NET-разработчик?

* ОБНОВЛЕНИЕ: мы хотим прояснить, что мы не тестируем только знания .NET, и что возможности решения проблем и общие навыки программирования для нас даже более важны.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
246
0
530 655
23

Ответы 23

Знайте разницу между ссылочными типами и типами значений.

Знайте, что события хранятся в виде жестких ссылок (т.е. не забудьте отменить регистрацию событий, иначе приложение вызовет утечку памяти).

Строки неизменны.

Вот некоторые из них, которые я использовал для фильтрации программистов, претендующих на работу программистами на C#:

В чем разница между ссылочным типом и типом значения?

Объясните интерфейс IDisposable, для какой конструкции языка C# он требуется и как вы его реализуете.

Какое исключение вы выбрасываете, если в качестве аргумента методу, который имеет контракт, не допускающий пустых значений для этого параметра, передается значение NULL?

Мой код обычно выдает исключение NullReferenceException.

Joshua 07.03.2009 21:01

@Joshua, ArgumentNullException у вас не получилось.

Nicolas Dorier 11.06.2009 01:47

Возможно, это не то, что вы хотите услышать, но я бы рекомендовал не сосредотачиваться на узких технологиях, а на общем программировании и навыках решения проблем. Хорошие разработчики могут быстро выучить все, что вы хотите.

Я, например, не сторонник Compact Framework, поэтому могу провалить ваше собеседование, если вы пойдете в этом направлении. Но если бы мне нужно было его использовать, я мог бы провести небольшое исследование и сразу же приступить к делу.

В книге Джоэла, Умный и добивается цели, есть отличные советы по найму разработчиков, и есть большие интересные разделы о том, какие вопросы следует задавать. Я очень рекомендую это.

Может быть, часть процесса найма должна стать проблемой в Cardspace или чем-то, на что они никогда не обращали внимания !!

Jennifer 13.12.2008 21:00

Может быть, но есть проблема исследования, поэтому я думаю, что это может быть несправедливо. Мне больше интересно увидеть, как они думают о проблемах, и, возможно, увидеть, как они кодируют что-то абстрактное, чтобы я мог узнать, говорят ли они код изначально или нет.

Brian MacKay 13.12.2008 21:08

Если бы я мог выбрать примерно двух человек, которые оба обладают общими навыками программирования и решения проблем, по практическим соображениям я ДОЛЖЕН выбрать одного с лучшими знаниями и опытом в .NET.

splattne 13.12.2008 21:27

Конечно, знание .NET, но когда дело доходит до более узких технологий, я думаю, вы можете пойти с программистом, обладающим навыками решения проблем.

Jennifer 13.12.2008 21:54

Сплаттне: Это правда, но по моему опыту, при проведении интервью не всегда можно встретить хотя бы одного действительно невероятного разработчика!

Brian MacKay 13.12.2008 22:15

Чем больше вы узнаете, тем быстрее вы узнаете, что наш мозг работает следующим образом. Если разработчик не знает каких-то «узких технологий», это может означать, что он многому не научится.

Nicolas Dorier 24.04.2009 13:29

Да, всем нам нужно знать тонны «узких технологий». Но на всех, кого мы знаем, есть группа, о которой мы не знаем (обычно потому, что они нам не нужны). Я говорю, что вы не хотите упускать великого разработчика из-за незнания SharePoint, потому что очень скоро он может стать вашим лучшим парнем по SharePoint.

Brian MacKay 21.10.2009 18:36

Что такое нить?

Что такое GC?

Я всегда сам искал навыки межличностного общения - это не каламбур. Так что хороший объектно-ориентированный дизайн, разработка через тестирование, хороший многоязычный (программирование) опыт и общий ум (и, я полагаю, умение делать дела!).

У интеллектуального разработчика не должно возникнуть проблем с изучением отдельных технологий, которые вам необходимо знать, даже если он никогда раньше не обращал на них внимания - поэтому я бы не стал слишком беспокоиться о конкретных вопросах, касающихся WCF / компактной структуры и тому подобного.

Я бы попросил их написать код - лучший способ узнать, что они знают и как работают. Кто угодно может запомнить ответ на вопрос «В чем разница между ссылочным типом и типом значения?»

Пятно на. Задавать наизусть вопросы - значит создавать проблемы. Компания, в которой я работаю, задает старый вопрос технаря, но в основном он: у меня есть эти проблемы, вот доска, и расскажи, как бы вы их решили. Страшно, но эффективно.

Chris Brooks 17.12.2008 13:29

... но если вы не решите их так, как ожидает интервьюер, вы проиграете.

gbjbaanb 30.12.2008 02:26

@gbjbaanb иногда. Но в таком случае вы все равно не захотите там работать. Помните, вы тоже берете интервью у компании. Я знал несколько компаний, которые не прошли собеседование!

Tony Ennis 17.10.2010 20:12

Еще несколько:

Каковы ограничения сборки мусора.

Знайте о финализаторах и IDisposable.

Помните о пуле потоков и о том, когда его использовать.

Если вы работаете с приложениями с графическим интерфейсом, имейте в виду, что графический интерфейс Windows является однопоточным.

Используйте foreach (я вижу, что многие люди делают MoveNext и т. д.)

Я не знал, поэтому посмотрел ограничения сборки мусора.

MSpeed 03.05.2011 18:49

Мне задали хорошие вопросы:

  • Как вы думаете, что такое хорошо в .NET?
  • Как вы думаете, что такое Плохо в .NET?

Было бы интересно посмотреть, что придумает кандидат, и вы наверняка узнаете немало о том, как он / она использует фреймворк.

Я с парнями, которые ищут способности решать проблемы, а не то, что вы можете найти и запомнить из «101 топовых вопросов и ответов на собеседовании по .NET».

Чтобы привести себя в пример, я склонен «знать» вещи, которые мне нужно использовать изо дня в день. Я часто забываю (а позже мне приходится снова искать) то, что использую редко.

Если бы ты хотел сбить меня с толку на интервью, это было бы очень легко.

Тем не менее, я спроектировал и закодировал большую часть инфраструктуры для системы, которая использует идентичные уровни бизнес-объектов и данных для своих воплощений WinForms и ASP.NET, и наша кодовая база является надежной и достаточно многоразовой, чтобы мы могли поддерживать и разрабатывать 20+ по-разному настроенные версии веб-сайта, а также увеличивающееся количество (в настоящее время 5) приложения WinForms ...

... с командой разработчиков из двух человек.

Раньше я работал в команде техническим руководителем, и моя работа включала в себя довольно много рекрутинга и собеседований. Моя самая вопиющая ошибка заключалась в том, что я нанял человека, который знал о технологиях, которые мы использовали, больше, чем все мы вместе, включая меня, и я считал себя экспертом. Он все знал ...

... кроме того, как писать код, который либо отвечал требованиям, либо мог быть понят любым, кроме него самого. Когда я в конце концов убедил премьер-министра не продлевать контракт, все, что он написал, пришлось переписать.

Разумно структурируйте интервью ...

Это действительно интересное наблюдение. У нас была противоположная ситуация: небольшая группа разработчиков, которые знали меньше, чем другие, но которые убедили руководство, что они знают больше. Они предложили класс абстракции данных, который, как я утверждал, был невозможен (меня критиковали за то, что я не был «командным игроком»).

Mark Brittingham 23.02.2009 17:00

-продолжается - после 4 месяцев работы по "работе скунса" они представили команде .... свои документы о переводе в другой отдел - и НЕТ кода. Остальной команде пришлось собрать осколки.

Mark Brittingham 23.02.2009 17:01

Итог: мне действительно нравится ваше наблюдение о том, что конкретное знание конструкций кодирования не является гарантией способности создавать работающее программное обеспечение, отвечающее потребностям клиентов.

Mark Brittingham 23.02.2009 17:02

Я думаю, что если бы я брал интервью у кого-то, кто имел опыт работы с LINQ, я бы, возможно, просто попросил его объяснить LINQ. Если они могут объяснить отложенное выполнение, потоковую передачу, интерфейсы IEnumerable / IEnumerator, foreach, блоки итераторов, деревья выражений (в любом случае для бонусных баллов), то они, вероятно, справятся с остальным. (По общему признанию, они могут быть «нормальными» разработчиками и еще не «получить» LINQ - я действительно думаю о случае, когда они утверждали, что знают LINQ достаточно, чтобы сделать это справедливым вопросом.)

В прошлом я задавал несколько из уже перечисленных вопросов и еще несколько:

  • Разница между ссылочными типами и типами значений
  • Передача по ссылке vs передача по значению
  • IDisposable и финализаторы
  • Строки, неизменяемость, кодировки символов
  • Плавающая запятая
  • Делегаты
  • Дженерики
  • Обнуляемые типы

Да, я хотел увидеть такой ответ. Хороший кандидат на то, чтобы быть принятым. Кто-нибудь лучше?

splattne 13.12.2008 21:37

@splattne: не говори глупостей, это ответ Джона Скита, так что просто прими его. Это неизбежно.

Steven A. Lowe 16.12.2008 18:12

Я как раз собирался сказать ... черт ... ты не сомневаешься в Ските!

Saif Khan 30.12.2008 02:28

Это гораздо лучший ответ, чем принятый. Это поможет вам понять, обладает ли кто-то глубокими знаниями в области предполагаемого опыта, а также изучить языковые функции, охватывающие довольно широкий диапазон.

Mark Brittingham 23.02.2009 16:55

+1 Я также считаю, что основы должны быть прочными, как ты и предлагал, Джон.

dance2die 24.02.2009 16:26

LINQ - мой любимый вопрос на собеседовании, потому что его можно применить к любому варианту разработки (xml, база данных, ваниль), и он показывает, насколько кто-то заинтересован в изучении новых вещей и выборе лучших инструментов для работы, даже если эти инструменты кажутся сначала немного сложнее.

Rob Fonseca-Ensor 22.01.2010 13:47

Этот ответ превосходит штаны «создайте свой собственный связанный список,« анализируйте HTML с помощью регулярного выражения »или« Как много вы знаете о сборке, GAC и т. д. », Потому что он касается инструментов и концепций, которые вы бы собственно использую во время разработки. Также необходимо доскональное знание LINQ. Я видел много случаев на этом сайте, когда люди пытались развернуть свою собственную версию Union Distinct и Concat для коллекций, потому что они не понимают LINQ.

Evan Plaice 19.06.2010 05:04

Кто такой Джон Скит?

Или лучше: вы Джон Скит? ;-)

splattne 14.12.2008 12:46

это действительно хороший вопрос для позиций C#. Учитывая, что Джон Скит теперь владеет stackoverflow / google, ищет связанные с C#. Если вы не знаете, кто он, значит, вы либо Джон Скит, либо не программируете на C#.

lubos hasko 22.02.2009 15:54

Не обижайся на Джона Скита, но я думаю, что Рик Страл чаще появляется с ответами по тем типам проблем, с которыми я сталкиваюсь ...

Andrew Theken 01.03.2009 04:29

@ [Эндрю Текен]: Я покажу проценты на этом ;-) google для "Rick Strahl" дает 38 500 просмотров, "jon skeet" дает 144 000. Кроме того, Рик Страл не публикует сообщения на ТАК КАК.

Steven A. Lowe 01.03.2009 05:30

оба парня великолепны в том, что они делают ... наша выгода.

GR7 22.01.2010 22:40

Это немного изменчивый вопрос, и на самом деле вы не должны полностью отвечать на него сейчас, но вы должны иметь возможность ответить, когда это необходимо:

«Что предлагает платформа .NET для выполнения задачи X?»

Или более конкретно:

«Включает ли платформа .NET объект, выполняющий X?»

Например, недавно я потратил несколько часов на разработку объекта, оптимизированного для хранения массива логических значений и работы с ним, например, выполнения НЕ, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, И для сбора всех значений и т. д. Это было не так. До тех пор, пока я не закончил писать все свои модульные тесты и настраивал их для обеспечения максимальной производительности, я понял, что мой объект «BoolArray» уже существует в платформе .NET под именем «BitArray».

На этот вопрос может быть сложно ответить, поскольку во многих случаях лучший ответ о том, какой объект / помощники использовать, - это тот, который вы не знаете или полностью понимаете. Каким прекрасным был бы мир .NET, если бы каждый действительно знал хотя бы о простом StringBuilder, базовом инструменте, который может значительно повысить производительность.

Мартин Фаулер предпочитает навыки дизайна, а не знания платформы. С другой стороны, вы можете задать вопрос, который покажет знание шаблонов проектирования и платформы .NET, например:

  • Назовите шаблоны и принципы проектирования, которые вам известны, и как они используются в .NET Framework?

Я предлагаю узнать о блогах, которые они читают регулярно, и о личных проектах по программированию, над которыми они работали, поскольку это покажет их желание учиться и страсть к программированию.

Я бы не стал задавать вопросы типа "знаю кое-что из учебника", а скорее задам кое-какие хитрые вещи вроде:

  • Что делает цикл foreach в простом C#? (Ожидая, что он напишет цикл итератора.)
  • Что такое синглтон?
  • Позвольте ему / ей разобрать String на Datetime (ожидая, что он / она будет использовать TryParse вместо try / catch)
  • Реализация шаблонов синглтона, стратегии и команд
  • Позвольте ему / ей отрефакторить кусок кода для тестирования. Ожидая, что он / она абстрагирует внешние сервисы от тестируемого модуля и реализует свой собственный тестовый двойник сервиса (без использования фреймворка для имитации).

Они не уверены на 100%, в зависимости от человека, которого я могу их спросить:

  • позвольте ему / ей охранять метод от нулевого ввода (ожидая, что он / она будет использовать несколько возвратов для уменьшения вложенности)
  • как работает инициализатор объекта (ожидая, что он / она напишет потокобезопасное назначение)

Также я бы спросил его, как он / она узнал свои вещи и что он / она читает (какие блоги, книги).

Нет, правда. Наверное, есть очень простые вопросы, на которые самые умные люди в мире не знают ответов. Не потому, что они тяжелые, а просто потому, что просто не сталкивались с этим. Вы должны смотреть на весь пакет и навыки разработчика, а не на то, могут ли они ответить на произвольный вопрос.

Если вопрос достаточно прост, чтобы на него можно было ответить одним или двумя короткими предложениями, достаточно просто сказать тому, кто не знает. Вам следует искать их понимание концепций и способности рассуждать, а не их способность отвечать на вопросы, на которые «должен уметь ответить каждый .NET-разработчик».

Я предлагаю несколько вопросов сосредоточиться на понимании концепций программирования с использованием dotnet, таких как

В чем разница между управляемой и неуправляемой средой? GC плюсы и минусы JIT за и против Если нам нужно разработать приложение X, можем ли мы использовать dotnet? Почему? (это определит, как он видит сеть)

Я предлагаю также написать небольшие методы и попросить его переписать их с большей производительностью, используя лучшие классы dotnet или стандартные способы. Также напишите некорректные методы (с точки зрения любых), логические или что-то еще и попросите его исправить их.

Я поклонник следующих вопросов в дополнение к некоторым из уже упомянутых вопросов:

  • Что за делегат?
  • Что за домен приложения?
  • Когда бы вы использовали ключевое слово блокировки?
  • Являются ли универсальные классы коллекций стандартной библиотеки потокобезопасными?
  • Что такое метод расширения?
  • В чем разница между XmlDocument и XmlReader?
  • Как вы читаете параметры конфигурации из файла конфигурации приложения?

Честно?

"Что такое .NET?"

Если они могут дать вам четкий ответ о том, что такое .NET, а что нет, как он используется, из каких элементов он состоит и т. Д ... Если они могут убедить вас, что знают, что это такое, то скорее всего они знаю это довольно хорошо.

Дело в том, что многие люди действительно не знают, что такое .NET. Даже те, кто пишет для него программы.

«Какой из ASP: какие элементы управления вы бы использовали в производстве и почему?»

Это быстро скажет вам, действительно ли ваш объект когда-либо создавал и поддерживал большой проект достаточно долго, чтобы его сожгли DataGrids и LinkButtons, или он все еще находится в фазе перетаскивания «научитесь за 21 день».

(ответ: asp: Repeater, asp: PlaceHolder, asp: Literal и asp: Content)

Еще несколько:

  1. Частичные занятия. И его ограничения?
  2. Запечатанные классы
  3. Как сделать локализацию в .NET?
  4. Связь с базой данных
  5. Различные файлы конфигурации
  6. Делегаты против событий
  7. Неуправляемый доступ к dll
  8. Размышления
  9. Общие классы
  10. Самый популярный в .NET 3.5
  11. Используемые вами фреймворки для модульного тестирования.

Я думаю, что это не должны быть просто вопросы, я знаю нескольких парней, которые великолепны, когда вы берете интервью у них, но как только они доберутся до сути, они станут слишком перфекционистами, я бы сказал, что они плохо кодируют задачу.

Однажды я проходил собеседование, и мне понравился подход, когда первый работодатель дал мне техническую анкету, которую нужно было заполнить за 30 минут. Если один из них добьется успеха, его вызовут на 1-часовое интервью, охватывающее вопросы о суждении личности и поиске характера, а также технические жаргоны.

Затем меня попросили разработать трехстраничное веб-приложение за 6 часов. Ограничения, накладываемые на приложение, грамотно охватывают основные аспекты разработки приложения, такие как небольшой ERD, Layerd Design, согласованность пользовательского интерфейса, контролируют конкретные проблемы, такие как использование переключателей в GridView и выборка и отображение типов изображений из БД на веб-странице, разработка одного алгоритма, безопасность, шифрование, хеширование, представление данных и манипулирование ими.

Затем на следующий день последовало 30-минутное обсуждение разработанного приложения, охватывающее узкие места в производительности, а также улучшения в дизайне и используемых алгоритмах. И 1-часовой дополнительный тест для улучшения вашего алгоритма, разработанного на предыдущем шаге с определенным условием.

Так что это заняло довольно много времени, но таким образом вы можете быть уверены, что человек, которого вы нанимаете, знает хотя бы те концепции, которые необходимы хорошему разработчику.

Это интересно, и я рискую получить отрицательное голосование за то, что высказал свое мнение, поскольку я родился глухим, поэтому для того, чтобы задать такой вопрос, потребовалось бы больше усилий для передачи моих мыслей лично.

Честно говоря, я бы не стал читать слишком много типичных вопросов, поскольку основная парадигма - «Насколько хорошо вы можете озвучивать свои мысли и понимание?», это действительно то, что ищет интервьюер. Общение всегда является моей самой большой слабостью из-за того, что я есть, и довольно легко могу расстроиться.

Было бы идеально иметь знания и быть всезнайкой, но, к сожалению, есть некоторые вещи, которых я не знаю, но не бояться, если вы действительно не знаете ответа и признаете это, а не блефуете. через это. Если бы интервьюер задал мне вопрос, подобный одному из вышеперечисленных, в котором я не был бы уверен или неправильно понял / неверно истолковал вопрос, я бы сказал это заранее, что лично может смущать, но я научился справляться с этим.

Вы были бы удивлены, узнав, сколько людей на самом деле блефуют и блефуют, метафорически выражаясь словами, что в конце дня их поймают со спущенными штанами.

Мои 2 цента, С наилучшими пожеланиями, Том.

Я бы предпочел задать ему проблему и попросить его решить ее, используя возможности .net, которые вы знаете, и почему вы думаете, что это лучшее решение.

Это позволит раскрыть почти все возможности кандидата с точки зрения технических, аналитических навыков и навыков решения проблем, а также его подход к решению проблемы.

Другие вопросы по теме