Язык программирования Java считается самым популярным в мире — на этом языке, пишут и сложные финансовые системы для банков, и развлекательные медиа-порталы, и приложения для мобильных телефонов, и трейдинговые платформы.
Популярность этого языка приводит к сильной конкуренции на IT-рынке. На основании опыта рекрутеров компании Luxoft на одну вакансию программиста Java рассматривается в среднем 5 соискателей. Для трудоустройства в подходящую компанию недостаточно прочитать пару книг или просмотреть ролики на YouTube. Требования как к опытным кандидатам, так и новичкам только увеличиваются.
Директор филиала Luxoft в Санкт-Петербурге Михаил Гедзберг подготовил советы для Java-разработчиков, которые хотят получить работу в проектах компании Luxoft и поделился тем, на что обращают внимание работодатель при техническом собеседовании. Конечно, большинство рекомендаций носят универсальный характер и пригодятся при подготовке к собеседованию в большинстве IT-компаний.
Резюме кандидата начинается с релевантного опыта. В зависимости от сложности проекта, его длительности, обилия используемых технологий (не просто Java Core), руководитель может ожидать от кандидатов релевантный опыт в разработке от 3-5 лет, на более сложных проектах и на senior-позициях — от 8 лет.
Иногда на интервью приходят кандидаты с большим заявленным опытом, но в ходе беседы всплывают большие пробелы в понимании работы отдельных компонент или целых Java фреймворки. Поэтому к техническому собеседованию лучше подготовиться дополнительно.
Как подготовиться к собеседованию
Приведенные ниже темы покрывают лишь часть возможностей языка Java, но они являются основой, в этих вопросах профессиональный Java-программист должен разбираться на 5+, иметь свое мнение и отвечать на вопросы потенциального работодателя. Итак, заранее лучше освежить в памяти следующие темы:
1. Алгоритмы и структуры данных (Algorithms & Data structures)
a. Типы данных
b. Виды сортировок
c. Поиск в бинарном дереве
d. NP-полный алгоритм
e. Исправление цикличной зависимость
2. Коллекции (Collection)
a. Интерфейсы (Collection, Set, Map, Queue)
b. Сравнение TreeSet и TreeMap
c. Разница Hashtable и ConcurrentHashMap
3. Исключение (Exceptions)
a. Различия Error и UncheckedException
b. Как избегать catch блока
c. Сравнение NoClassDefFoundError и ClassNotFoundException
4. Управление памятью и сборка мусора (Memory & GC)
a. Какова структура Java Heap?
b. Что такое метод finalize в Java?
c. Принципы Garbage Collector
d. Какие есть утилиты для мониторинга JVM?
e. Сравнение Perm Space и Metadata space в Java 8
5. Многопоточность
a. Сравнение потока и процесса
b. Что такое volatile?
c. Что такое потокобезопасность (thread safe) и как ее добиться?
6. Объектно-ориентированное программирование (OOP)
a. Различия между перегрузкой и переопределением метода?
b. Можем ли мы предотвратить переопределение метода без использования модификатора final?
c. 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!»).
Специально даже зарегистрируюсь ради такого.
Не знаю уж как работа в Люксофте, но собеседование туда в СПБ было самым худшим опытом из всех что был в жизни.
Плохо всё, абсолютно всё, на всех этапах, начиная с разговорами с HR, которая перезванивает через месяц с приглашением на следующий этап интервью, заканчивая собеседованием с лидом, где человек вёл себя непрофессионально и по хамски, и по итогу даже не перезванивают и никакого фидбэка.
Ходил пару раз и по ощущениям, после того как компанию купили всё стало только хуже, хотя может быть мне так не повезло.
Впустую потраченное время и нервы.
А что за сказки про фидбэк? Не было ни разу ни одного фидбэка, кроме случаев:
1. Прохожу на следующий этап, если не прохожу то связь обрывается
2. Рекомендация была по знакомству - собственно только в таком случае был тот фидбэк который я бы ожидал и сам всем давал.
За некорректный отказ как минимум можно в суд подать на работодателя, а второе это время работодателя - представьте себя вы приходите в магазин и комментируйте все что вы делаете, берете молоко? Сразу вопрос - почему не другие марки, а среди одной марки почему именно эту бутылку когда там 10 стоит, и по каждой дайте обоснованный ответ.
Собеседование в люксофт было самым ужасным, зачем вы набираете разработчиков вообще???
обычная галера, коих десятки
статья странная, не создан дух элитарности собеседования в такой великой компании
А я, наоборот, слышал отзывы о том, что в Питерском Luxoft было самое адекватное интервью, и все вопросы были по теме, а не "что вы помните с университета", "докажите, что вы достойны N денег", или вопросы из теста на IQ. Чаще всего это слышал от тех, кто уже в Luxoft.
Ну как можно обижаться на вопросы по теме, про ООП, про синглтон? Вы хотите, чтобы сразу спросили сложный вопрос? Никто не ответит, а время потратится. Вообще это все субъективно, как и оценки в школе. Это техническое интервью, если знаете, то просто ответьте, не знаете - скажите, что не знаете, не приходилось иметь дело, забыл. Есть много других тем для разговора. Если спрашивают про многопоточность, значит это нужно в проекте, а не потому, что хотят завалить.
Мне лично приходилось сталкиваться, когда кандидат с большим опытом, не ответив на какой-то простой вопрос, начинает оправдываться, а потом тыкать сертификатами, которые он указал в резюме и упрекать в тупых вопросах. Интервью — это в том числе и тест на адекватность. На определенном уровне профессионализма есть консенсус, что все знать или помнить невозможно, и это нормально. Часть вопросов вообще ничего не значат, например, чем left join от left outer join отличается, но показывают присутствие или отсутствие чувства юмора)
В общем, интервью — это игра, и в нее надо играть чтобы выиграть.
Собеседовался как-то, спросили что такое ООП - чуть не поперхнулся, когда спросили как создать Синглтон, хотелось положить трубку, в 2020 году, когда везде используется Spring. Не советую тратить время на это.
Комментарий удален
Комментарий удален
Комментарий удален
Комментарий удален
Комментарий удален
Комментарий удален
Комментарий удален
Комментарии