Как пройти интервью в Luxoft на позицию Java: чек-лист полезных советов
Язык программирования Java считается самым популярным в мире — на этом языке, пишут и сложные финансовые системы для банков, и развлекательные медиа-порталы, и приложения для мобильных телефонов, и трейдинговые платформы.
Популярность Java приводит к сильной конкуренции на ИТ-рынке. На основании опыта рекрутеров компании Luxoft на одну вакансию программиста Java рассматривается в среднем 5 соискателей. Для трудоустройства в подходящую компанию недостаточно прочитать пару книг или просмотреть ролики на YouTube. Требования как к опытным кандидатам, так и новичкам только увеличиваются.
Резюме кандидата начинается с релевантного опыта. В зависимости от сложности проекта, его длительности, обилия используемых технологий (не просто Java Core), руководитель может ожидать от кандидатов релевантный опыт в разработке от 3-5 лет, на более сложных проектах и на senior-позициях — от 8 лет.
Иногда на интервью приходят кандидаты с большим заявленным опытом, но в ходе беседы всплывают большие пробелы в понимании работы отдельных компонент или целых Java-фреймворков. Поэтому к техническому собеседованию лучше подготовиться дополнительно.
Как подготовиться к собеседованию?
Приведенные ниже темы покрывают лишь часть возможностей языка Java, но они являются основой, в этих вопросах профессиональный Java-программист должен разбираться на 5+, иметь свое мнение и отвечать на вопросы потенциального работодателя.
Итак, заранее лучше освежить в памяти следующие темы:
- Алгоритмы и структуры данных (Algorithms & Data structures)
- Типы данных
- Виды сортировок
- Поиск в бинарном дереве
- NP-полный алгоритм
- Исправление цикличной зависимость
- Коллекции (Collection)
- Интерфейсы (Collection, Set, Map, Queue)
- Сравнение TreeSetи TreeMap
- Разница Hashtable и ConcurrentHashMap
- Исключение (Exceptions)
- Различия Errorи UncheckedException
- Как избегать catch блока
- Сравнение NoClassDefFoundErrorи ClassNotFoundException
- Управление памятью и сборка мусора (Memory & GC)
- Какова структура Java Heap?
- Что такое метод finalize в Java?
- Принципы Garbage Collector
- Какие есть утилиты для мониторинга JVM?
- Сравнение Perm Space и Metadata space в Java 8
- Многопоточность
- Сравнение потока и процесса
- Что такое volatile?
- Что такое потокобезопасность (thread safe) и как ее добиться?
- Объектно-ориентированное программирование (OOP)
- Различия между перегрузкой и переопределением метода?
- Можем ли мы предотвратить переопределение метода без использования модификатора final?
- 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 и лучше подготовиться к собеседованию:
- Джошуа Блох «Эффективная Java» («Effective Java: Programming Language Guide»);
- Крейг Уоллс «Spring в действии» («Spring in Action»);
- Бауэр Кристиан «Java Persistence API и Hibernate» («Java Persistence with Hibernate»);
- Роберт Мартин «Чистый код» («Clean Code»);
- Роберт Седжвик «Алгоритмы на Java» («Algorithms In Java»);
- Мартин Фаулер «Рефакторинг. Улучшение существующего кода» («Refactoring. Improving the Design of Existing Code»);
- Джез Хамбл «Непрерывное развертывание» («Continuous Delivery»);
- Майкл Нейгард «Release it! Проектирование и дизайн ПО для тех, кому не все равно» («Release It!»).
Читать на dev.by