Как пройти собеседование на позицию Java: советы от Luxoft

22 марта 2021

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

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

Поэтому HR-специалисты компании Luxoft подготовили советы для Java-разработчиков, которые хотят получить работу в их компании, и поделились тем, на что обращает внимание работодатель при техническом собеседовании. Большинство рекомендаций носят универсальный характер и пригодятся при подготовке к собеседованию в большинстве IT-компаний. 

Резюме кандидата должно начинаться с релевантного опыта. В зависимости от сложности проекта, его длительности, обилия используемых технологий (не просто Java Core), руководитель может ожидать от кандидатов релевантный опыт в разработке от 3-5 лет, на более сложных проектах и на Senior-позициях — от 8 лет. 

Иногда на интервью приходят кандидаты с большим заявленным опытом, но в ходе беседы всплывают большие пробелы в понимании работы отдельных компонентов или целых Java-фреймворков. Поэтому к техническому собеседованию лучше подготовиться дополнительно.

Как подготовиться к собеседованию на позицию Java-разработчика

Приведенные ниже темы покрывают лишь часть возможностей языка Java, но они являются основой. В этих вопросах профессиональный Java-программист должен разбираться на 5+, иметь свое мнение и отвечать на вопросы потенциального работодателя. Итак, заранее лучше освежить в памяти следующие темы:

1. Алгоритмы и структуры данных (Algorithms & Data structures)

  1. Типы данных
  2. Виды сортировок
  3. Поиск в бинарном дереве
  4. NP-полный алгоритм
  5. Исправление цикличной зависимости

2. Коллекции (Collection)

  1. Интерфейсы (Collection, Set, Map, Queue)
  2. Сравнение TreeSet и TreeMap
  3. Разница Hashtable и ConcurrentHashMap

3. Исключение (Exceptions)

  1. Различия Error и UncheckedException
  2. Как избегать catch блока
  3. Сравнение NoClassDefFoundError и ClassNotFoundException

4. Управление памятью и сборка мусора (Memory & GC)

  1. Какова структура Java Heap
  2. Что такое метод finalize в Java
  3. Принципы Garbage Collector
  4. Какие есть утилиты для мониторинга JVM
  5. Сравнение Perm Space и Metadata space в Java 8

5. Многопоточность

  1. Сравнение потока и процесса
  2. Что такое volatile
  3. Что такое потокобезопасность (thread safe) и как ее добиться

6. Объектно-ориентированное программирование (OOP)

  1. Различия между перегрузкой и переопределением метода?
  2. Можем ли мы предотвратить переопределение метода без использования модификатора final?
  3. SOLID принципы

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

Базы данных 

Минимум одну базу данных (а лучше больше) необходимо знать в совершенстве. В работе понадобится создавать/модернизировать таблицы, настраивать индексы, писать триггеры, формировать сложные запросы, оптимизировать их по производительности.

Да, у баз данных есть общая часть — SQL, но даже тут есть различия: например, MS SQL или Oracle. Добавим в этот список PostgreSQL и MySQL. Первые две — стандарт больших корпоративных систем, последние две — малых или средних. 

Для доступа к базам данных существует два разных подхода: JDBC и Hibernate. Выделим несколько топиков по этой теме, о которых может зайти речь на собеседовании:

  • Преимущества и недостатки Hibernate по сравнению с JDBC
  • Какие существуют стратегии загрузки данных в Hibernate
  • Назовите аннотации, используемые в Hibernate

Если ваша платформа получает данные в режиме реального времени, то в мире Java без JMS вам не обойтись. Следует четко понимать:

  • Из каких компонентов JMS состоит
  • Основные интерфейсы JMS
  • Стандартные типы JMS-сообщений

Львиная доля мировых систем работает на Unix-подобных операционных системах. Программист, который пишет код на Java и не знает, как запустить свое приложение, просмотреть лог-файлы, настроить демо, явно будет проигрывать. Поэтому здесь уже правильнее говорить не о Java-программисте, а о Java-инженере. Это сотрудник, который умеет писать код, эффективно взаимодействовать с другими участниками команды, следовать SDLC-процессам, инженерным практикам (CI/CD, XP, Scrum/SAFE, Code coverage, BDD). 

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

Рост количества данных и пользователей увеличивает количество точек интеграции, поэтому важно уметь масштабировать решения, увеличивать надежность и производительность. Это все относится к современным и обязательным навыкам Senior Java-разработчика.

Практическая часть 

Ну и напоследок можно порекомендовать некоторые книги, которые помогут освежить знания о Java и лучше подготовиться к собеседованию: 

  1. Джошуа Блох «Эффективная Java» («Effective Java: Programming Language Guide»)
  2. Крейг Уоллс «Spring в действии» («Spring in Action»)
  3. Бауэр Кристиан «Java Persistence API и Hibernate» («Java Persistence with Hibernate»)
  4. Роберт Мартин «Чистый код» («Clean Code»)
  5. Роберт Седжвик «Алгоритмы на Java» («Algorithms In Java»)
  6. Мартин Фаулер «Рефакторинг. Улучшение существующего кода» («Refactoring. Improving the Design of Existing Code»)
  7. Джез Хамбл «Непрерывное развертывание» («Continuous Delivery»)
  8. Майкл Нейгард «Release it! Проектирование и дизайн ПО для тех, кому не все равно» («Release It!»)

Похожие темы