Так получилось, что предыдущие две недели я был занят активным поиском нового рабочего места. Естественно, что наиболее интересны мне были вакансии Java-разработчика. В Челябинске, кстати, с этим весьма туго, но несколько вакансий есть. Здесь я хочу написать о том, какие вопросы задают потенциальным Java-программистам в городе Че.
Начнем, пожалуй, с того, что у каждой фирмы свое представление о том, какими навыками и знаниями должен владеть Ява-программист и, возможно, вас никогда не спросят что-либо упомянутое в данном посте, но следует быть во всеоружии.
Особенность платформы Java – ее многоликость и многообразие. Знать назубок всю платформу невозможно, да и не нужно. Поэтому я думаю, будет полезно перечисление тем, которым отдается предпочтение в Челябинске. И как всегда – мои комментарии.
Помните, что прежде всего вас спросят все те темы, которые перечислены в резюме. Поэтому не увлекайтесь.
Итак, погнали:
Вопросы по языку Java.
Ответы на эти вопросы должны быть заложены на уровне генов у любого java-программиста (заметьте, я не употребляю слово «кодера»).
Сокеты и сетевое взаимодействие
Вопросы по технологиям J2EE.
Так как я претендовал на должность J2EE разработчика, совершенно естественно, что данная группа вопросов стала основной. Сюда я включаю и вопросы по Hibernate, фреймворкам, Spring’у.
HTTP
Как каждый охотник желает знать, где сидит фазан, так и любой веб-программист должен знать особенности HTTP-протокола, поэтому неудивительны следующие вопросы:
Базы данных
Для разработчика Enterprise-систем не уметь работать ни с одной СУБД по меньшей мере странно. При этом, чтобы работать эффективно необходимо знать и теорию. На собеседованиях дают различные задания на проектирование несложной структуры БД и запросов к ней, а также спрашивают эту самую теорию:
Проектирование.
Любой java-программист должен знать ООП и паттерны, как GOF так и более высокого уровня. Обычно забывается, что "паттерн" - понятие широкое, паттерном является как "Фабрика", так и "MVC", как "Синглтон", так и "Событийная архитектура".
В заключение хочется сказать: чем больше вы знаете и умеете, тем лучше. Собеседование - это экзамен позволяющий выявить реальные пробелы в знаниях. Важно только зафиксировать пробелы и работать над их устранением. Лично я уже составил для себя список тем, которые надо изучить или с нуля или просто более тщательно.
Понравилось сообщение - подпишитесь на блог или читайте меня в twitter
Начнем, пожалуй, с того, что у каждой фирмы свое представление о том, какими навыками и знаниями должен владеть Ява-программист и, возможно, вас никогда не спросят что-либо упомянутое в данном посте, но следует быть во всеоружии.
Особенность платформы Java – ее многоликость и многообразие. Знать назубок всю платформу невозможно, да и не нужно. Поэтому я думаю, будет полезно перечисление тем, которым отдается предпочтение в Челябинске. И как всегда – мои комментарии.
Помните, что прежде всего вас спросят все те темы, которые перечислены в резюме. Поэтому не увлекайтесь.
Итак, погнали:
Вопросы по языку Java.
Ответы на эти вопросы должны быть заложены на уровне генов у любого java-программиста (заметьте, я не употребляю слово «кодера»).
- Длина типа int в байтах на 32-х и 64-х разрядных платформах. Особенность в том, что точного ответа никто не ждет. Важно понимание, что в Java, примитивы имеют одинаковую длину на всех платформаx.
- Самый популярный вопрос: в чем отличие Serializable от Externalizable. Не всем программистам на самом деле приходится работать с сериализацией напрямую (минуя средства используемого фреймворка), но знать надо. Замечательная статья на эту тему есть здесь.
- Объекты. Алгоритм инициализации объекта. Особенно интересно собеседующим все это дело применительно к наследованию.
- Коллекции. Тоже очень популярный вопрос: перечислите все типы коллекций которые вы знаете. Далее начинают спрашивать по интерфейсам, например, в чем отличие списка от коллекции. По реализации было вопросов больше: в чем отличие LinkedList от ArrayList и последнего от Vector. Также очень полезно знать, почему не стоит стремиться сортировать Map.
- Синхронизация. Собственно, что такое поток и в чем отличие от процесса. Что такое системная и программная синхронизация. Ключевое слово synсhronized и особенности такой синхронизации в java. Класс Thread и все его методы. Что делает join? Почему sleep – статический метод? В чем отличие синхронизации с помощью sleep и wait? Демоны и не демоны... Замечательная статья про системную синхронизацию.
Сокеты и сетевое взаимодействие
- Что такое сокет.
- Серверный сокет. Основная задача и метод, который ее решает.
- Клиентский сокет. Задачи, которые решает клиентский сокет.
Вопросы по технологиям J2EE.
Так как я претендовал на должность J2EE разработчика, совершенно естественно, что данная группа вопросов стала основной. Сюда я включаю и вопросы по Hibernate, фреймворкам, Spring’у.
- Что такое сервлет?
- Servlet API. Интересуют фильтры и контекст-листенеры.
- Spring – тема очень широкая. Но больше всего собеседующих интересует Spring в качестве IoC-контейнера. Для того, что бы показать, что ты знаешь Spring иногда достаточно ответить на вопрос как создаются объекты, описанные в качестве бинов.
- Hibernate – вопросов было гораздо больше. Просят развернуто рассказать все этапы подключения его к системе, начиная с написания POJO. Так же полезно знать, что такое двунаправленная и однонаправленная ассоциации. Как обеспечить ту или иную ассоциацию.
- Теория ORM. В чем преимущества и недостатки использования ORM.
- По фреймворкам меня не собеседовали, потому что единственный, которым я владею – Tapestry - не используется в данных компаниях.
HTTP
Как каждый охотник желает знать, где сидит фазан, так и любой веб-программист должен знать особенности HTTP-протокола, поэтому неудивительны следующие вопросы:
- Типы HTTP-запросов.
- Особенности передачи данных каждым типом запросов.
- Общая схема взаимодействия клиента и сервера по HTTP-протоколу.
- Недостатки HTTP-протокола.
Базы данных
Для разработчика Enterprise-систем не уметь работать ни с одной СУБД по меньшей мере странно. При этом, чтобы работать эффективно необходимо знать и теорию. На собеседованиях дают различные задания на проектирование несложной структуры БД и запросов к ней, а также спрашивают эту самую теорию:
- Чем отличается внутренний и внешний join.
- Индексы. Типы и физическая реализация индексов.
- Очень интересный вопрос: в чем разница между SQL и MySQL.
- JDBC. Просили перечислить все классы и интерфейсы JDBC. Вообще вопрос «перечислить что либо» очень мало может сказать о разработчике, но в некоторых компаниях его задают.
- Разница между statement и prepared statement.
- Хитрый вопрос на проверку знаний о кэшировании запросов в СУБД.
Проектирование.
Любой java-программист должен знать ООП и паттерны, как GOF так и более высокого уровня. Обычно забывается, что "паттерн" - понятие широкое, паттерном является как "Фабрика", так и "MVC", как "Синглтон", так и "Событийная архитектура".
- ООП. Основные принципы ООП. Overloading и Overriding.
- Паттерны проектирования. Классификация паттернов. Стандартный вопрос: перечислите GOF-паттерны, которые вы знаете.
- Архитектура WEB-приложений. Имеется ввиду паттерн MVC. Ну и антипаттерн «волшебный сервлет» полезно знать.
- Иногда дают задачки на проектирование различной сложности. Самая простая была: животное, собака, глаз - нарисуйте UML-диаграмму.
В заключение хочется сказать: чем больше вы знаете и умеете, тем лучше. Собеседование - это экзамен позволяющий выявить реальные пробелы в знаниях. Важно только зафиксировать пробелы и работать над их устранением. Лично я уже составил для себя список тем, которые надо изучить или с нуля или просто более тщательно.
Понравилось сообщение - подпишитесь на блог или читайте меня в twitter
8 комментариев:
>Важно понимание, что в Java, в отличие от того же .NET, примитивы имеют одинаковую длину на всех платформаx.
Это ты напрасно... В Common Type System базовые типы имеют одинаковые размеры для любых реализаций. В первую очередь это касается языковых реализаций, но учитывая MONO, то и платформенных.
Спасибо за крмментарий, я не гуру в дот-нет, поэтому мог ошибиться. Хотя я имел ввиду именно платформенные реализации и сдется мне чло даже в случае моно int на i32 и на Sparc64 будет иметь разные значения.
Спасибо, за такой список. Будем изучать :)
Изучайте и помните, что компании Naumen нужны программисты )))
>Длина типа int в байтах на 32-х и 64-х
>разрядных платформах.
простите - это концептуальный тест на предмет умеет-ли человек пользоваться гуглём ?
какой смысл спрашивать такие вещи, что вам даст положительный или отрицательный ответ?
>Ключевое слово sinсhronized
synchronized
>перечислите все типы коллекций
>которые вы знаете
опять-же смысл вопроса?
>почему не стоит сортировать Map
хм... а вот есть такой интерфейс java.uril.SortedMap
IMHO - на собеседовании(на позицию программиста) имеет смысл смотреть как умеет думать человек + общий его кругозор и обучаемость
Ваши вопросы имеют право на жизнь, но они не совсем по адресу. Не я проводил собеседование, а меня собеседовали, причем в нескольких конторах задавали эти вопросы.
2Павел - да это не наезд, недоумение скорее :)
IMHO если при собеседовании задают такие вопросы - то это уже сигнал о том что делать там нечего, т.е. нет вопросов которые проверяют то как думает индивидум
Мнения разработчиков о том, что практически нужно знать, чтобы работать с Java.
Отправить комментарий
Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!