воскресенье, 18 ноября 2007 г.

Собеседование программистов в Челябинске. Что собственно надо знать.

Так получилось, что предыдущие две недели я был занят активным поиском нового рабочего места. Естественно, что наиболее интересны мне были вакансии Java-разработчика. В Челябинске, кстати, с этим весьма туго, но несколько вакансий есть. Здесь я хочу написать о том, какие вопросы задают потенциальным Java-программистам в городе Че.

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

Особенность платформы Java – ее многоликость и многообразие. Знать назубок всю платформу невозможно, да и не нужно. Поэтому я думаю, будет полезно перечисление тем, которым отдается предпочтение в Челябинске. И как всегда – мои комментарии.

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


Итак, погнали:

Вопросы по языку Java.

Ответы на эти вопросы должны быть заложены на уровне генов у любого java-программиста (заметьте, я не употребляю слово «кодера»).

  1. Длина типа int в байтах на 32-х и 64-х разрядных платформах. Особенность в том, что точного ответа никто не ждет. Важно понимание, что в Java, примитивы имеют одинаковую длину на всех платформаx.

  2. Самый популярный вопрос: в чем отличие Serializable от Externalizable. Не всем программистам на самом деле приходится работать с сериализацией напрямую (минуя средства используемого фреймворка), но знать надо. Замечательная статья на эту тему есть здесь.

  3. Объекты. Алгоритм инициализации объекта. Особенно интересно собеседующим все это дело применительно к наследованию.

  4. Коллекции. Тоже очень популярный вопрос: перечислите все типы коллекций которые вы знаете. Далее начинают спрашивать по интерфейсам, например, в чем отличие списка от коллекции. По реализации было вопросов больше: в чем отличие LinkedList от ArrayList и последнего от Vector. Также очень полезно знать, почему не стоит стремиться сортировать Map.

  5. Синхронизация. Собственно, что такое поток и в чем отличие от процесса. Что такое системная и программная синхронизация. Ключевое слово synсhronized и особенности такой синхронизации в java. Класс Thread и все его методы. Что делает join? Почему sleep – статический метод? В чем отличие синхронизации с помощью sleep и wait? Демоны и не демоны... Замечательная статья про системную синхронизацию.



Сокеты и сетевое взаимодействие


  1. Что такое сокет.

  2. Серверный сокет. Основная задача и метод, который ее решает.

  3. Клиентский сокет. Задачи, которые решает клиентский сокет.



Вопросы по технологиям J2EE.

Так как я претендовал на должность J2EE разработчика, совершенно естественно, что данная группа вопросов стала основной. Сюда я включаю и вопросы по Hibernate, фреймворкам, Spring’у.

  1. Что такое сервлет?

  2. Servlet API. Интересуют фильтры и контекст-листенеры.

  3. Spring – тема очень широкая. Но больше всего собеседующих интересует Spring в качестве IoC-контейнера. Для того, что бы показать, что ты знаешь Spring иногда достаточно ответить на вопрос как создаются объекты, описанные в качестве бинов.

  4. Hibernate – вопросов было гораздо больше. Просят развернуто рассказать все этапы подключения его к системе, начиная с написания POJO. Так же полезно знать, что такое двунаправленная и однонаправленная ассоциации. Как обеспечить ту или иную ассоциацию.

  5. Теория ORM. В чем преимущества и недостатки использования ORM.

  6. По фреймворкам меня не собеседовали, потому что единственный, которым я владею – Tapestry - не используется в данных компаниях.



HTTP

Как каждый охотник желает знать, где сидит фазан, так и любой веб-программист должен знать особенности HTTP-протокола, поэтому неудивительны следующие вопросы:

  1. Типы HTTP-запросов.

  2. Особенности передачи данных каждым типом запросов.

  3. Общая схема взаимодействия клиента и сервера по HTTP-протоколу.

  4. Недостатки HTTP-протокола.



Базы данных

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

  1. Чем отличается внутренний и внешний join.

  2. Индексы. Типы и физическая реализация индексов.

  3. Очень интересный вопрос: в чем разница между SQL и MySQL.

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

  5. Разница между statement и prepared statement.

  6. Хитрый вопрос на проверку знаний о кэшировании запросов в СУБД.



Проектирование.

Любой java-программист должен знать ООП и паттерны, как GOF так и более высокого уровня. Обычно забывается, что "паттерн" - понятие широкое, паттерном является как "Фабрика", так и "MVC", как "Синглтон", так и "Событийная архитектура".

  1. ООП. Основные принципы ООП. Overloading и Overriding.

  2. Паттерны проектирования. Классификация паттернов. Стандартный вопрос: перечислите GOF-паттерны, которые вы знаете.

  3. Архитектура WEB-приложений. Имеется ввиду паттерн MVC. Ну и антипаттерн «волшебный сервлет» полезно знать.

  4. Иногда дают задачки на проектирование различной сложности. Самая простая была: животное, собака, глаз - нарисуйте UML-диаграмму.



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

Понравилось сообщение - подпишитесь на блог или читайте меня в twitter

8 комментариев:

Sergey Rozovik комментирует...

>Важно понимание, что в Java, в отличие от того же .NET, примитивы имеют одинаковую длину на всех платформаx.

Это ты напрасно... В Common Type System базовые типы имеют одинаковые размеры для любых реализаций. В первую очередь это касается языковых реализаций, но учитывая MONO, то и платформенных.

beq комментирует...

Спасибо за крмментарий, я не гуру в дот-нет, поэтому мог ошибиться. Хотя я имел ввиду именно платформенные реализации и сдется мне чло даже в случае моно int на i32 и на Sparc64 будет иметь разные значения.

Анонимный комментирует...

Спасибо, за такой список. Будем изучать :)

Samolisov Pavel комментирует...

Изучайте и помните, что компании Naumen нужны программисты )))

sv комментирует...

>Длина типа int в байтах на 32-х и 64-х
>разрядных платформах.

простите - это концептуальный тест на предмет умеет-ли человек пользоваться гуглём ?

какой смысл спрашивать такие вещи, что вам даст положительный или отрицательный ответ?

>Ключевое слово sinсhronized

synchronized

>перечислите все типы коллекций
>которые вы знаете
опять-же смысл вопроса?


>почему не стоит сортировать Map

хм... а вот есть такой интерфейс java.uril.SortedMap


IMHO - на собеседовании(на позицию программиста) имеет смысл смотреть как умеет думать человек + общий его кругозор и обучаемость

Samolisov Pavel комментирует...

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

sv комментирует...

2Павел - да это не наезд, недоумение скорее :)

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

Иван Веселов комментирует...

Мнения разработчиков о том, что практически нужно знать, чтобы работать с Java.

Отправить комментарий

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