Пособие для будущего Java разработчика. Собеседование
По большому счету, вы можете найти это всё в интернете или поспрашивать у знакомых, но я считаю, что лишним не будет. Внизу пример собеседования на junior Java разработчика таким, каким был бы он сейчас, если бы интервьюером был я. Вопросы могут быть какими угодно, я лишь попробовал собрать что-то среднее по больнице. Представим, что вам повезло.
Стандартная схема
Шаг 1. Вам звонит рекрутер, и вы договариваетесь с ней об интервью, к примеру, завтра на 11:00.
Шаг 2. Вы приходите раньше, так как 11:00 — скорее всего, время не для вас, а для разработчиков, у которых зарезервирована какая то комната, в которой вас будут пытать. Хорошим тоном любого рекрутера будет предупредить об этом.
Шаг 3. На самом деле, начиная с шага 3, все пункты можно перемешивать, потому что собеседования могут проходить по-разному. К примеру, здесь вас могут спросить о базовых вещах, откуда вы родом, почему у нас, и так далее. Не исключено, что это может сделать сам HR, и конечно же, не исключено, что на английском. Право, это зависит от компании.
Шаг 4. Вас приглашают в митинг-рум, где у вас будет разговор с одним, двумя, тремя людьми, один из которых будет либо сеньор, либо техлид, который в будущем будет работать с вами, среди остальных могут быть Scrum-мастер, другие разработчики либо HR’ы. Вас собеседуют какое-то время, затем жмут руку и отпускают.
Шаг 5. Возможно, это будет на следующий день, а возможно, сразу же после шага 4 — у вас будет разговор с иностранным заказчиком (если такой имеется), а может, он сам и проведет интервью.
Как видите, вариантов много. Где-то есть заказчики, где-то есть еще телефонное интервью. Это просто пример.
Пример технического собеседования для Junior Java разработчика
Мне очень жалко недоразработчиков, которые читают что-то умное с целью утопить/задавить/попонтоваться перед соискателем на интервью. Если вы видите, что перед вами такой человек, и чувствуете давление и напряжение с его стороны, незамедлительно посылайте его на три веселых, потому что после успешного прохождения с этим кретином придется работать. Не тратьте свои драгоценные нервы.
Интервью, в первую очередь, должно проходить с целью узнать, что знает кандидат, а не то, чего он не знает. Естественно, если вам нужен человек, который знает что-то конкретное — спрашивайте его, не мучайте бесполезными вещами, которые не используете в проекте.
Будьте людьми, в конце концов!
Внизу приблизительные вопросы, которые могут попасться на интервью. По 5 вопросов для каждой технологии.
OOP
1. Приведите пример полиморфизма из реальной жизни? В чем преимущества? Недостатки? Напишите простенький код.
2. Что такое интерфейс? Абстрактный класс? Зачем нужны интерфейсы, если можно тупо всё классами писать (немного провокации)?. То же самое — и про абстрактный класс. Что такое default методы в Java 8?
3. Постройте иерархию классов на конкретном примере воображаемой базы данных или программы (там список разных классов рабочих из базы данных) и взаимодействие между ними (aggregation, composition).
4. Чем composition отличиается от aggregation (is-a, has-a)?
5. Как можно обойти запрет на множественное наследование в Java?
JDK/JRE
1. Чем JDK отличается от JRE? Что такое JVM?
2. Что такое classpath и для чего он нужен? Как, к примеру, загрузить другие классы в classpath?
3. Что вы знаете о classloader?
4. Расскажите о javadoc? Для чего он нужен?
5. Что такое JAR, WAR?
Java Common
1. В чем отличие статических методов от не статических? Что такое final?
2. Что такое boxing-unboxing? byte b = 127, b++, какой результат и почему?
3. Что такое wrapper’ы, для чего это?
4. Что мне нужно сделать, чтобы создать свою аннотацию? Что такое overriding/overloading?
5. Почему класс String final? Что делает метод intern()?
Data Structures
1. Расскажите о структуре Collections API в Java? Вы уже успели поработать с Stream API?
2. В чем отличие между ArrayList и LinkedList? Где лучше использовать ArrayList, а где LinkedList?
3. Расскажите как устроена HashMap? В чем особенности работы с TreeSet, HashSet? Имеете опыт с Guava коллекциями?
4. Массивы в Java, пример двумерного массива.
5. hashCode, equals на примере HashMap?
Concurrency
1. Что такое процесс? Поток? Как создать поток? Что такое syncronized? Как понять этот или тот кусок кода thread-safe?
2. Что такое Thread.sleep, а также wait, notify, yield?
3. Приведите пример deadlock?
4. Коллекции при работе с многопоточностью.
5. ThreadLocal и Atomic операции
SQL/JDBC
1. На конкретном примере достаньте из базы Users того, у которого salary больше, чем 5000.
2. Примеры INNER JOIN, OUTER JOIN, Order By, Group By.
3. Зачем нужен JDBC Driver? Примеры.
4. Расскажите всё, что знаете о ResultSet, парочка примеров.
5. Напишите простенькое DAO c применением RS.
JPA/Hibernate
1. В чем недостатки и преимущества JPA?
2. Что такое EntityManager? Entity?
3. Критерии в JPA/Hibernate.
4. One-To-One, Many-To-Many в JPA/Hibernate
5. Как бы вы сделали JOIN в Hibernate? HQL?
Spring
1. Что такое DI/IoC? Преимущества.
2. Что такое Application Context? Bean?
3. Как бывают типы IoC инициализации?
4. Singleton, Prototype в Spring? Annotation-based Spring?
5. Жизненный цикл бинов? Init-method, destroy-method? @PostConstruct, @PostDeploy?
Maven
1. Основные фазы maven, жизненный цикл.
2. Как запускать maven с тестами, без тестов? Что такое archetype, mvn dependency?
3. Профайлы в maven, как создавать, как запускать.
4. Что такое snapshot в maven? Central/Remote репозитории?
5. Плагины в mvn, принцип работы, пару примеров.
Algo
1. Понятие алгоритма, его скорость, Big-O-Notation.
2. Как найти средний елемент в LinkedList в один заход?
3. Напишите примитивный Stack? В чем разница между Stack и Queue? LIFO, FIFO?
4. Quick Sort, Merge Sort.
5. Напишите програмку, которая проверяет, является ли число палиндромом.
Согласен, может, планка загнута чуть больше в сторону миддла, чем джуниора, но я думаю, что такая подготовочка вам точно не помешает. Старайтесь углубляться в каждый вопрос. Кстати, тут не указаны многие направления в Java, прошу учесть.