Страшный экзамен по программированию на C # - какой-нибудь совет? [закрыто]

21

У меня есть возможная работа в C # dev, но прежде чем я смогу пройти собеседование, мне нужно пройти тестирование в агентстве по трудоустройству.

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

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

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

Заранее спасибо.

РЕДАКТИРОВАТЬ: Чтобы еще раз оправдать мои опасения по поводу написания таких тестов - рассмотрим следующий вопрос:

12) Событие это:

   a) The result of a users action - correct answer
   b) The esult of a party
   c) code to force users action

Согласно тесту, правильный ответ - A, но, поскольку я занимался разработкой SOA (часто, когда события могут основываться на системных событиях (а не на действиях пользователя), я на 100% уверен, что событие не должно вызываться действие пользователя. Это был также вопрос C # (не вопрос ASP.net). Насколько я понимаю, я не мог найти правильный ответ, но B кажется лучшим из всех (если определение стороны: любой сущность, которая может вызвать событие. Такие вопросы меня пугают.

JL01
источник
4
Если вы «старший разработчик» и ежедневно используете C # в течение трех лет, с вами все будет в порядке. Эти тесты обычно предназначены для отсеивания тех людей, которые не знают язык или его использование. Если вы используете его изо дня в день в течение 3 лет, то вы должны были столкнуться почти со всеми подводными камнями в данном тесте.
Джордж Стокер
11
@ GeorgeStocker - на самом деле, мне пришлось пройти некоторые из этих тестов (нацеленных больше на полную платформу .NET), и они были очень подробными. Я нашел их довольно сложными, потому что сначала они вошли в области фреймворка (такие как WCF), где у меня просто не было большого опыта, плюс вам нужно было что-то знать, например, какой параметр конфигурации вы бы использовали в файле .config для включения какой-то непонятный вариант. Это было то, что вы редко удосужились запомнить, потому что вы, вероятно, когда-либо использовали бы его только один раз и Google в этом. Я нашел опыт немного разочаровывающим.
Скотт Уитлок
7
О, и один из вопросов, которые я ошибся, был: «В VB.NET, какое ключевое слово используется для объявления структуры? А) структура б) структура в) структура г) структура». Я думал, что "Intellisense знает это, поэтому мне не нужно!" Теперь, конечно, ответ запечатлен в моей памяти.
Скотт Уитлок
17
@ ScottWhitlock: Вы не сможете адекватно подготовиться к плохо спланированному интервью. В какой-то момент вы должны верить, что они достаточно компетентны, чтобы задавать вопросы и судить по тем областям, на которых вы действительно претендуете, а также некоторым концептуальным способностям. Если это не так, то вам, вероятно, все равно будет плохо работать на них.
Ааронаут
2
Это тест на языке C # или .NET Framework?
Муравьи

Ответы:

24

Несколько постарше, но, возможно, этот пост полезен для вас: что нужно знать великим разработчикам .NET (дополнительные вопросы для интервью .NET)

Все, кто пишет код

  • Опишите разницу между потоком и процессом?
  • Что такое служба Windows и чем ее жизненный цикл отличается от «стандартного» EXE-файла?
  • Какой максимальный объем памяти может обрабатывать отдельный процесс в Windows? Это отличается от максимальной виртуальной памяти для системы? Как это повлияет на дизайн системы?
  • В чем разница между EXE и DLL?
  • Что такое строгая типизация по сравнению со слабой? Что является предпочтительным? Зачем?
  • Продукт Corillian - это «Контейнер для компонентов». Назовите как минимум 3 контейнера компонентов, которые теперь поставляются вместе с семейством Windows Server.
  • Что такое PID? Как это полезно при устранении неполадок в системе?
  • Сколько процессов может прослушивать один порт TCP / IP?
  • Что такое GAC? Какую проблему это решает?

Среднеуровневый разработчик .NET

  • Опишите разницу между интерфейсно-ориентированным, объектно-ориентированным и аспектно-ориентированным программированием.
  • Опишите, что такое интерфейс и чем он отличается от класса.
  • Что такое отражение?
  • В чем разница между веб-службами XML, использующими ASMX, и .NET Remoting, использующими SOAP?
  • Является ли система типов, представленная XmlSchema и CLS, изоморфной?
  • Концептуально, в чем разница между ранним и поздним связыванием?
  • Является ли использование Assembly.Load статической или динамической ссылкой?
  • Когда будет целесообразно использовать Assembly.LoadFrom или Assembly.LoadFile?
  • Что такое квалифицированное имя ассемблера? Это имя файла? Чем это отличается?
  • Это действительно? Assembly.Load ( "foo.dll");
  • Чем сборка со строгим именем отличается от сборки со строгим именем?
  • Может ли DateTimes быть нулевым?
  • Что такое JIT? Что такое NGEN? Каковы ограничения и преимущества каждого?
  • Как сборщик мусора в .NET CLR управляет временем жизни объекта? Что такое недетерминированное завершение?
  • В чем разница между Finalize () и Dispose ()?
  • Чем полезен шаблон using ()? Что такое IDisposable? Как это поддерживает детерминистическое завершение?
  • Что делает эта полезная командная строка? список задач / м "mscor *"
  • В чем разница между in-proc и out-of-proc?
  • Какая технология обеспечивает связь вне процесса в .NET?
  • Когда вы запускаете компонент в ASP.NET, какой процесс выполняется в Windows XP? Windows 2000? Windows 2003?

Старшие Разработчики / Архитекторы

  • Что не так с такой линией? DateTime.Parse (туЗЬптд);
  • Что такое PDB? Где они должны быть расположены для отладки на работу?
  • Что такое цикломатическая сложность и почему это важно?
  • Напишите стандартную блокировку () плюс «двойную проверку», чтобы создать критическую секцию вокруг доступа к переменной.
  • Что такое FullTrust? У сборок GAC есть FullTrust?
  • Какую выгоду получает ваш код, если вы украшаете его атрибутами, требующими определенных разрешений безопасности?
  • Что это делает? gacutil / л | найти / я "Corillian"
  • Что это делает? sn -t foo.dll
  • Какие порты должны быть открыты для DCOM через брандмауэр? Какова цель порта 135?
  • Контраст ООП и СОА. Каковы принципы каждого?
  • Как работает XmlSerializer? Какие разрешения ACL требуется процессу, использующему его?
  • Почему catch (Exception) почти всегда плохая идея?
  • В чем разница между Debug.Write и Trace.Write? Когда каждый должен использоваться?
  • В чем разница между сборкой Debug и Release? Есть ли значительная разница в скорости? Почему или почему нет?
  • JITting происходит для каждой сборки или для метода? Как это влияет на рабочий набор?
  • Сравните использование абстрактного базового класса с интерфейсом?
  • В чем разница между a.Equals (b) и a == b?
  • В контексте сравнения, что такое идентичность объекта и эквивалентность объекта?
  • Как сделать глубокую копию в .NET?
  • Объясните текущее мышление вокруг IClonable.
  • Что такое бокс?
  • Является ли строка типом значения или ссылочным типом?
  • Каково значение шаблона «PropertySpecified», используемого XmlSerializer? Какую проблему он пытается решить?
  • Почему в .NET плохие параметры? Они?
  • Могут ли атрибуты быть помещены в определенные параметры метода? Почему это полезно?

Разработчики компонентов C #

  • Сопоставьте использование переопределения с новым. Что такое слежка?
  • Объясните использование виртуальных, запечатанных, переопределенных и абстрактных.
  • Объясните важность и использование каждого компонента этой строки: Foo.Bar, версия = 2.0.205.0, культура = нейтральная, PublicKeyToken = 593777ae2d274679d
  • Объясните разницу между публичным, защищенным, частным и внутренним.
  • Какую пользу вы получаете от использования Primary Interop Assembly (PIA)?
  • По какому механизму NUnit знает, какие методы тестировать?
  • В чем разница между: catch (Exception e) {throw e;} и catch (Exception e) {throw;}
  • В чем разница между typeof (foo) и myFoo.GetType ()?
  • Объясните, что происходит в первом конструкторе: public class c {public c (string a): this () {;}; public c () {;}} Чем полезна эта конструкция?
  • Что это ? Можно ли это использовать в статическом методе?

Разработчики ASP.NET (UI)

  • Опишите, как основанная на браузере форма POST становится событием на стороне сервера, например Button1_OnClick ...
Konamiman
источник
1
Все перечисленные здесь ответы были полезны и хороши, однако я рассмотрел все вопросы в вашем списке (это заняло у меня 4 часа), написал онлайн-тест и прошел успешно. Я бы посоветовал любому разработчику .net хотя бы раз прочитать эти вопросы, убедиться, что вы понимаете ответы, и убедитесь, что вы получили 2-е и 3-е мнения. Многие люди отвечают на вопросы (найденные в Google), но многие ответы не являются краткими, иногда даже неправильными. Так что будь осторожен. Перепроверьте, какие ответы вы найдете.
JL01
2
Хорошая ссылка! Я удивлен, сколько из тех, кого я знал. this.Ego ++;
Джастин Селф
@justnS: то же самое случилось со мной, когда я обнаружил пост. :-)
Konamiman
Я ходил на собеседование пару недель назад, и они распечатали это, чтобы я мог ответить. что для меня, отражается на интервьюере.
dbones
1
Когда вы добавите ответы? ;)
Тийс ван Дин
10

Просто уйди, Рене

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

Кевин Клайн
источник
1
Они хороши как минимальный стандарт , то есть необходимое условие, но не достаточное условие.
Sklivvz
4
@Sklivvz: возможно, если бы они были хорошими тестами. Большинство коммерческих тестов - глупые упражнения с пустяками: «Какой класс вы бы использовали для чтения текстового файла?» Хороший разработчик может поговорить в течение десяти минут о различиях между байтовыми потоками и символьными потоками, а также деталями кодировок UTF и все же пропустить этот вопрос. Когда информация доступна, нет смысла ее запоминать.
Кевин Клайн
2
Я согласен с Кевином. В тестах слишком много информации, не имеющей отношения к вашей работе. Вот почему они изобрели Google и IntelliSense - когда нам нужны ответы, мы находим их по мере необходимости
ADNow
2
Это зависит от теста. Есть тесты, от которых я бы ушел, но есть и хорошие тесты. У нас есть простой тест с 3 вопросами по программированию. Первый вопрос - написать простое приложение на C #. Второй просит написать 5 простых SQL-запросов. Это вопрос, на который невозможно ответить, если тестируемый не запросит дополнительную информацию. Первый и второй вопросы исключают совершенно некомпетентных программистов. Это экономит наше время от интервьюирования людей, которые не стоят нашего времени. Третий вопрос дает нам понимание того, как программист подходит к решению проблем. Очень ценные вещи.
Пит
8

Я был в такой ситуации, как твоя в прошлом году. Это было так долго, что я был на интервью, что я боялся его. Я выполнил поиск вопросов для интервью на C # и нашел несколько сайтов (многие из которых перечислены на других плакатах), и я изучил их. К моему большому удивлению, 90% интервью были с того самого сайта, дословно . Я думаю, что интервьюеры также используют Google, чтобы найти вопросы :)

Система не работает
источник
6

Я полностью согласен с вами:

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

... но они являются частью процесса, поэтому мы ничего не можем с этим поделать. Я похож на вас с 10-летним опытом работы, из которых около 5 в .NET C #. Я нашел эти две эти ОЧЕНЬ хорошие книги:

C # в глубине

C # в двух словах

должен охватывать все, что вам нужно знать о C #. Все остальное - ваши собственные навыки и навыки, которые вы приобретаете на конкретных технологиях на основе C #, таких как ASP.NET и т. Д.

TheBoyan
источник
3
но они являются частью процесса, поэтому мы ничего не можем с этим поделать. Как насчет защиты от глупых программных тестов на вашем рабочем месте в процессе найма? Процесс найма должен показать вашу компетентность, а не то, что вы можете запомнить неясные мелочи.
joshin4colours
@ joshin4colours - вот почему я верю в добрую давнюю беседу на собеседовании ... хотя они хороши для исключения
TheBoyan
2
Я фактически взял интервью у автора одной из книг и отклонил его ...
Sklivvz
3

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

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

jfrankcarr
источник
2

Если это тест агентства по трудоустройству, это не должно быть так сложно. У них нет специалистов по языку для разработки теста. Скорее всего, все, что они будут делать, это копировать / вставлять вопросы с веб-сайта.

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

silverCORE
источник
2

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

Тем не менее, поскольку вы используете c # в своей повседневной работе, я бы сосредоточил ваши усилия на решении проблем и логике, а не на изучении книг.

Project Euler - отличное место для практики и оттачивания навыков, которые, скорее всего, стали немного ржавыми.

SetiSeeker
источник