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


Answers

Я нашел эти списки в blog Скотта Хансельмана :

Вот что я думаю, это самые важные вопросы из этих постов, разделенных на категории. Я редактировал и переделывал их. К счастью для большинства этих вопросов уже есть хороший ответ на Stack Overflow. Просто следуйте ссылкам (я обнов их все как можно скорее) .

Независимые платформы .NET

ASP.NET

Question

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

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

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

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




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

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




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

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



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

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

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




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




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

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

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



Что такое поток?

Что такое GC?




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

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

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

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

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




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

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

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

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




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

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

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

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

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




Я не стал бы задавать эти вопросы «знать что-то из учебника», но, скорее, попросить некоторые вещи, такие как:

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

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

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

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




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

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

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




Related



Tags

.net .net