Не для кого не секрет, что практически все разработчики .Net ходят по собеседованиям несколько раз в год (а то и в месяц), причем это касается даже тех, кто полностью доволен своей текущей работой. Оно и понятно, нам всем интересно «чего же мы стоим» и получаем ли мы то, чего заслуживаем.
На данных момент я имею стаж в 3,5 года работы .Net разработчиком. Я не являюсь «ярым» любителем походов на собеседования, т.е. посещаю «другие» компании не чаще нескольких раз за год. За весь мой опыт таких мероприятий я ни разу не проявлял к данному вопросу должного внимания, считая вроде того, что я слишком ценен чтобы этим заморачиваться, пусть заморачиваются они. Но всему приходит конец. Я пересмотрел свою позицию, задавшись вопросами вроде:
«Кто может быть лучше меня?»
Как многие могли догадаться: "Да кто угодно ".
Если я хочу работать в действительно хорошей компании, в которой бы я и получал бы огромное удовольствие и, что очень важно, огромный опыт, мне нужно как то «выделяться». Ведь такая компания не станет за мной «бегать», потому что есть ребята, которые могут быть «хуже» меня, но у них есть огромное желание работать в компании, а главное, они готовятся к собеседованиям.
Итак, начнем.
Этапы собеседования
Исходя из моего личного опыта, собеседование можно разделить на следующие этапы:
- 1) Проверка адекватности
- 2) Рассказ о компании работодателем
- 3) Рассказ о личном опыте и разговоры «о жизни»
- 4) Технические вопросы
- 5) Окончание собеседования и заключения
Проверка адекватности
Первый этап, как правило, начинается с телефонного разговора с менеджером по персоналу (ашар менеджером:) ), который соответствующими вопросами пытается выяснить на сколько Вы «адекватны» и на сколько Вам интересно его|её предложение. Иногда разговор поверхностно перетекает во второй пункт.
В крупных компаниях, которые за день собеседуют огромное количество людей, «ашары» частенько задают технические вопросы, чтобы не пропустить к техническому собеседованию «не подходящих» людей.
Примеры таких вопросов:
1) Что такое ООП
2) Какие бывают индексы SQL
3) Как изменить контекст в функции jquery
… и т.д.
Не стоит давать глубоких ответов на вопросы такого рода, потому что «ашар» технически не готов к обсуждению, у него есть вопрос и напротив готовый ответ. Если Вы знаете ответ, постарайтесь ответить коротко и ясно, если же не знаете, лучше так и сказать — это покажет вашу «адекватность».
Кстати, бывают вопросы не касающиеся предметной области. К примеру, не так давно мне звонил «ашар» блабла компании с нестандартными вопросами:
1) Определение производной
2) Сколько будет 2^10
Я не был готов к таким вопросам, да и спросони сложно отвечать на такие «нестандартные» вопросы, поэтому первый вопрос я благополучно завалил(в попытках вспомнить это определение я выставил себя глуповато, не вспомнив, что лучше ответить что не знаю). На второй вопрос, после 5 секунд подсчета я все же ответил.
На следующий день мне пришел «отказ».
Опять же, я не готовился к собеседованию и отнесся к нему «несерьезно», в этом вся причина.
Рассказ о компании работодателем
Рассказ о личном опыте и разговоры «о жизни
Данные 2 пункта не буду „освещать“, потому что они не являются целью данной статьи.
Итак, самое главное.
Технические вопросы
Здесь рассмотрим типичные вопросы, которые задают на техническом собеседовании.
CLR — что это?
Common Language Runtime (англ. CLR — общеязыковая исполняющая среда) — виртуальная машина, интерпретирующая и исполняющая код на языке CIL, в который компилируются программы, написанные, в частности, на .NET-совместимых языках программирования (C#, Managed C++, Visual Basic .NET, Visual J# и т. п.); компонент пакета Microsoft .NET Framework.
CLR интерпретирует и исполняет код на языке CIL (реализация компиляции которого компанией Microsoft называется MSIL), а также предоставляет MSIL-программам (а следовательно, и программам, написанным на языках высокого уровня, поддерживающих .NET Framework) доступ к библиотекам классов .NET Framework, или так называемой .NET FCL
Управляемый код
Управляемый код (managed code) — это код, работающий в среде CLR. Содержит метаданные, в которых находится информация для среды выполнения — о типах, членах и ссылках, используемых в коде.
Какие бывают типы данных?
-типы значения
-ссылочные типы
В чем их отличие?
Типы значения находятся в стеке, а ссылочные типы в куче.
Когда объект удаляется сборщиком мусора?
Когда на него не остается ссылок. Не всегда это происходит, высоконагруженных системах лучше за этим следить.
В чем различие между Finalize и Dispose?
Dispose — обеспечивает явный контроль над ресурсами, используемыми объектом, а Finalize — неявный, используемый сборщиком мусора.
Что такое Reflection?
Reflection — это механизм, предоставляющий коду информацию о самом себе.
Рефлексия необходима для того, чтобы выполнять определенную логику всоответствии с тем, откуда метод был запущен.
Boxing — unboxing
При упаковке объекта типа значения выделяется память в управляемой куче, далее совершается копирование полей ссылочного типа в память, которая была выделена в куче и возвращается адрес объекта.
В отличие от упаковки при распаковке не происходит никакого копирования. Однако обычно вслед за распаковкой следует копирование полей, поэтому обе операции (распаковка и копирование) являются противоположностью операции упаковки.
Пример:
int a = 10;
Object b = a; // boxing
IComparable c = a; // boxing
int d = (int)a; // unboxing
Поддерживается ли в c# множественное наследование?
Да, но есть ограничение на классы — не более одного. На интерфейсы это ограничение не распространяется.
Алгоритм поиска в сортированном списке
Делением объектов по полам и сравнением к какой половине относится элемент.
Будет ли выполнен блок finally если произойдет исключение?
Да.
Есть ли отличие catch(Exception) от catch() ?
Да, catch() ловит все исключения, даже те, которые падают со библиотек, написанных на не .Net языке.
Что такое делегат? И чем он отличается от события
— Делегат – это объект, инкапсулирующий ссылку на метод.
Иными словами это тип, который ссылается на метод. Как только делегату назначен метод, он начинает работать точно также как и этот метод. Метод делегата, может быть использован точно также как и любой другой метод с параметрами и возвращать значение.
Событие: Класс публикует событие, которое он может инициировать и любые классы могут подписаться на это событие.
System.String что будет в результате „s“ + „s2“?
В результате выделится новая переменная в стеке со значением „ss2“
Могут ли типы значения иметь значение null?
Нет
В чем отличие abstract класса от interface?
Отличие в том, что abstract class может иметь дополнительную логику.
Какой тип является базовым для всех остальных типов?
System.Object.
Все типы получают четыре открытых метода: bool Equals(), int GetHashCode(), Type GetType(), string ToString.
Ну вот, вообщем, и все основные вопросы по .Net.
Несомненно, в разных компаниях могут спрашивать дополнительные к этим вопросам, а также более подробные. Все зависит от интервьюера.
Окончание собеседования и заключения
После вопросов по .Net, а также других интересных для компании платформах и языках следует прощание, а там уже отказ либо оффер.
Подытожим:
— готовиться к собеседованию следует всегда, на сколько бы лень это ни было(от этого зависит, как минимум, Ваша самооценка);
— нужно серьезнее относиться к собеседованию с „ашарами“;
— для успешной подготовки необходимо держать под рукой список вопросов с ответами (память изменчива, может подвести)
Спасибо за внимание. Также интересно было бы в комментариях увидеть нестандартные вопросы, которые Вам когда либо задавали на собеседованиях по .Net.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Я не согласел с вашим ответом на вопрос "Могут ли типы значения иметь значение null?"...я считаю что могу, можно использовать nullable значимые типы int?. Nullable это структура.
ОтветитьУдалить