Inception
Каждый год весной, когда окно тесного опенспейса начинает пригревать солнышко, начинаешь думать о хорошем и вечном: открываешь сайты с вакансиями и ищешь свое новое место в жизни. При поиске куда сходить поговорить с умными людьми всегда стараешься максимально учесть опыт уже посещенных собеседований и универсально подготовиться к предстоящей схватке встрече.
Данная публикация содержит краткое изложение опыта прохождения более десятка собеседований на позицию java developer в Минске в течение последних пару лет. Формат изложения — преимущественно тезисное перечисление вопросов по выбранным темам.
Предфильтрация
Вы каким-то образом дали о себе знать HR-у понравившейся конторы, и вот она/он, сбиваясь со своих красивых ног, звонит вам, ага. Здесь HR в ходе недолгой устной беседы осуществляет проверку вас на адекватность, уточняет пару пунктов резюме, иногда просит выслать резюме с более полной информацией. У меня обычно интересовались «пропущенными» в таймлайне годами, либо опытом в конкретном фреймоворке.
Итак, вы договорились о конкретном времени и явились куда надо за 5-10 минут до времени Х.
Комитет по встрече
Вас встретит HR, проведет на место собеседования, по дороге (случайно или преднамеренно) проведет мимо знаковых точек, если такие есть в офисе (тренажерка, кухня, душ, «рабочие места производственного персонала»). Здесь вам что-то скажут про бенефиты и как тут всем хорошо и счастливо. Может быть, вы увидите нарезанный торт и печеньки.
Предложили воду/чай, пришли технические специалисты: это обычно Leads (1-3 голов) и возможно кто-то из начальства (или еще кто-либо, заведующий именно зарплатным вопросом). Иногда эту зарплатоопределяющую функцию может исполнять и один из лидов. Тут главное быстро определить, по какой схеме они играют и кого валить первым. Все познакомились и поехали.
Расскажите о себе
Вам предлагают самому рассказать о себе, иногда похвалить себя. При этом идет некоторая сверка информации с написанным в резюме, задаются уточняющие вопросы.
Вопросы по нюансам использования различных упомянутых в резюме фреймворков могуть быть заданы как до, так и в ходе собеседования. Тут резюме играет против вас, если вы присочинили/дописали.
ООП
Человек, пишущий на Java, очевидно должен писать структурированный код с использованием объектного подхода. Поэтому собеседование начинается с простых вопросов с целью проверки базовых знаний в этой области: понятие объекта, основные принципы ООП (их 3, 5 или 7, как написано в книжках «отцов-основателей»?), собственными словами объяснить свое понимание принципов. Интерфейс vs абстрактный класс. Множественное наследование и т.п. К вопросам по ООП вы еще, возможно, вернетесь в ходе собеседования.
Базовые структуры данных, алгоритмы
Виды структур данных, сортировки, O-нотация. Сортировка в Java — каким методом реализована; здесь возможно удивление — оказывается, там есть глютен! не quicksort, хотя практически все так считают. Да, это печально. Написать имплементацию одной из сортировок. Деревья.
Core Java
Базовые типы, их границы, откуда они берутся, autoboxing/unboxing, equals/hashcode, immutable, String и их интернирование, итераторы. Final/finally/finalize. Потоки, различные способы запуска/остановки потоков. Quartz. Коллекции и их внутреннее устройство, потокобезопасные коллекции, нюансы коллекций в «новых» Java-х. Знаете ли «фишки» Java 8, расскажите. Задачка на порядок инициализации различных блоков класса. Перегрузка/переопределение. Параллели с C++, если он мелькнул в резюме. Deadlock, написать код, гарантированно приводящий к deadlock. Исключения, их виды, задачка на «какой catch стоит раньше», всегда ли работает finally.
Будьте готовы к конкретным вопросам, например: «как происходит вставка null в HashMap». Тут надо знать, логика не поможет.
Методологии разработки ПО
Какие знаете, в каких участвовали? Сравнить их. «А можно ли брать новые истории в итерацию посреди итерации» и прочие тесты на проверку идеологической верности принципам Agile. Если у вас есть майка Аджайла — обязательно напяльте.
БД, SQL
Реляционные и нереляционные БД. Задачки на написание запросов. Обязательно задачка с использованием джоинов. Индексы, prepared statements, result set, jdbc. Транзакции, уровни их изоляции. Что, кем и где откатывается при exception-е.
Spring
Концепция IoC. Beans scope. Аспекты. Spring MVC. Что лучше: аннотации или xml или еще что.
Hibernate
Необходимость ORM фреймворков. Кэши разных уровней, кэш запросов, как это работает, провайдеры кэшей. Criteria. get vs load
VCS
Тут мир вращается вокруг Git/Mercurial/SVN. Вы рассказываете, что вы использовали, вам говорят, что вы будете использовать у них. Могут проверить правдивость ваших слов — попросить вспомнить какую-либо консольную команду для определенного действия.
CI
Jenkins. Как сделано в текущем проекте? Как часто выпускаете релизы? Как построен процесс выпуска релиза?
Тесты
JUnit, matchers, mockito. Интеграционные и юнит-тесты. Задачка на «перечислить cases».
Архитектура, паттерны
Нарисуйте архитектуру приложения, над которым вы работали ранее. При рисовании хватит знания UML диаграмм классов и временных диаграмм. Вопросы по паттернам. Паттерны GoF, написать имплементацию одного из них. «Правильные» и «неправильные» синглтоны. Сравнить два предложенных похожих паттерна.
IDE
Поделитесь предпочтениями. Могут спросить хоткей.
Linux
Просмотр/редактирование permissions на файловой системе. Просмотр списка процессов и их параметров. Определение под кем запущен процесс. Сколько свободного места в оперативной памяти и на диске. Поиск в логах. Перемещение файлов. Команды curl, wget. Навыки написания скриптов, деплоймента.
Платформа
Что такого в Java хорошего? А что плохого? Параметры JVM, области памяти JVM, менеджмент памяти. JMX. Мониторинг продакшна: способы, как лучше? Что сам использовал? Ну-ка расскажи, как спас PROD.
А она не пришла...
Чего не спрашивали вообще — так это regexp и xsl трансформаций. Можно было не тратить время
English
Побеседовать на вольные темы: хобби, фильмы и т.п. В бой может пойти HR, опасносте!
Почему ищешь работу? Что не нравится в текущей?
Ну тут надо что-то отвечать. Лучше правду, а то, думаю, история повторится.
Стоит быть готовым к тому, что вы описываете ситуацию, «из-за которой уходите», а вам говорят: «так у нас тут — то же самое!». Ждите веселья: здесь обычно ходят HR и/или «директор».
Зарплата
Думаю, тут стоит аппелировать лишь к двум числам: ваша текущая з/п, и средняя з/п по рынку для должности, на которую вы идете. Все остальные числа и ваши «хотелки» очень субъективны. Также, на мой взгляд, переход в другое место на позицию с повышением з/п менее чем на несколько десятков % нецелесообразен из-за «потерь на трение» (адаптация к новому стеку и т.п.). В остальном — вам решать.
Воздух свободы
Собеседование закончилось, оно заняло (у меня) от 40 мин до 2 час 20 мин. Вы едете на работу, всё ещё плохо соображая, потому что напряг был немаленький. А на работе — уже QA стучится в скайп — баг нашла. Ну что же — ей можно, у нее в голове только ветер одни баги. Настя, привет!
Вы делаете свое дело, в фоне осмысливая/оценивая происшедшее.
Какие выводы я сделал
Суровая реальность вынуждает в одностороннем порядке утверждать о необходимости непрерывного самообразования прямо на рабочем месте. Стоит читать специализированную литературу (мне нравятся К. Бек и М. Фаулер). Времени на это мало, поэтому стоит тщательно подойти к её выбору.
Надо стремиться, чтобы в вашей работе было как можно меньше «магии». То, что происходит «само собой», должно быть понято. Надо контролировать ситуацию: использовать дебаг и читать логи, смотреть код core java и используемых библиотек.
По возможности на текущей работе стоит выбирать такие таски, чтобы осваивать новые технологии/фреймворки. Не стоит распыляться, можно просто провести анализ контор Минска (или города/страны куда вам надо) и выявить набор фреймворков, используемых практически повсеместно. Этот джентльментский набор и стоит «качать» — в нем у вас должна быть исчерпывающая экспертиза. Остальной шлейф приобретается в процессе работы по месту.
В общем, будьте лучше, что бы это не значило!
Автор: andd3dfx