10 млн разработчиков по всему миру используют Java для создания приложений под 15 млрд. устройств. Синтаксис этого языка прост и поддерживается всеми операционными системами. На этом преимущества программирования на Java не заканчиваются, узнать о них вы можете из нашей статьи. В условиях жесткой конкуренции организации нуждаются в профессионалах, обладающих знаниями, навыками и опытом в области Java, и способных эффективно проектировать, кодировать, разрабатывать и разворачивать приложения различного типа.
Отличия в интервью по Java Core и Java EE
Поскольку Java в основном используется как язык прикладного программирования, основное внимание уделяется вопросам, касающимся API, концепций и шаблонов проектирования.
Собеседования по Java меняются в зависимости от опыта кандидата. Например, младшие разработчики с опытом от 1 до 4 лет увидят больше вопросов по таким темам, как основы языка, API, структура данных и алгоритмы.
Более опытные разработчики, с опытом от 5 до 6 лет, получат вопросы о параллельном программировании, API, параллелизме Java, внутреннем устройстве JVM, настройке сборщика мусора и производительности Java.
Собеседования по Java EE сильно отличаются от собеседований по Java Core, поскольку последние в основном сосредоточены на основных концепциях Java, таких, как параллелизм, коллекции и внутреннее устройство JVM. Собеседования по Java EE основаны на JSF, Spring, Hibernate и других.
План подготовки к собеседованию
Существует общий список тем, с которыми стоит ознакомиться, или освежить их в памяти перед собеседованием:
- основы Java;
- ООП;
- Java core;
- структура данных;
- многопоточность;
- сборка мусора;
- базы данных;
- фреймворки;
- сетевые протоколы;
- устройство JVM;
- архитектура;
- паттерны;
- алгоритмические задачи;
Стоит учитывать, что приведенные ниже примеры вопросов – лишь варианты, наиболее часто встречающиеся на собеседовании. Список конкретных вопросов будет в значительной степени зависеть от вакансии и вашего опыта. Для подготовки к интервью стоит внимательно изучить должностную инструкцию, если работодатель предоставит вам такую возможность.
Вы не обязаны знать наизусть все аспекты программирования на Java по учебнику. Достаточно рассказать про опыт работы, но основные понятия и термины все же стоит освежить в памяти, особенно если с ними будет связана ваша деятельность в компании.
Основы Java
Для самопроверки рекомендуем пройти тест на общие знания для Java-разработчика.
Примеры часто задаваемых вопросов:
- В чем важность метода main()?
- В чем разница между переменными path и classpath?
- Какие есть модификаторы доступа?
- Что такое классы-оболочки?
- В чем разница между equals () и ==?
- Что такое JIT-компилятор?
- В чем заключаются особенности языка программирования Java?
- Что такое статический импорт?
- Что такое Enum?
- Что такое композиция?
Java core
Часто на собеседованиях задают вопросы про коллекции, дженерики, функциональные интерфейсы, многопоточность:
- Как устроена HashMap?
- Чем отличается LinkedList от ArrayList?
- Разница между String, StringBuffer и StringBuilder?
- Разница между интерфейсом Runnable и Callable?
- Разница между TreeSet и TreeMap?
- Напишите программу на Java, чтобы проверить, является ли число простым или нет?
- Как проверить, содержит ли связанный список цикл в Java?
- Написать Java-программу для обратного преобразования String без использования API?
- Разница между переходным процессом и изменчивым в Java?
- Разница между абстрактным классом и интерфейсом?
ООП
Классические вопросы, вроде разницы между интерфейсом и абстрактным классом, присутствуют всегда. В последние пару лет на собеседованиях задают и более сложные вопросы, основанные на передовых принципах и шаблонах проектирования:
- Что такое перегрузка методов в ООП или Java?
- Какой метод скрытия используется в Java?
- Является ли Java чистым объектно-ориентированным языком?
- Каковы правила перегрузки и переопределения методов в Java?
- Какова разница между перегрузкой метода и переопределением?
- Можем ли мы предотвратить переопределение метода без использования модификатора final?
- Что такое ковариантный метод переопределения в Java?
- Можем ли мы изменить возвращаемый тип метода на подкласс при переопределении?
- Как вы вызываете суперклассовую версию метода переопределения в подклассе?
- В чем разница между абстракцией и полиморфизмом в Java?
Структура данных
Подробнее о структурах данных мы рассказывали в статье «Алгоритмы и структуры данных: развернутый видеокурс».
Примеры часто задаваемых вопросов:
- Чем дерево отличается от графа?
- Что такое АВЛ-деревья?
- Чем стек отличается от очереди?
- Какие классы в Java реализуют стек или очередь?
- Чем LinkedList отличается от ArrayList?
- Что такое HashSet?
- Чем HashSet отличается от TreeSet?
- Как работает HashMap?
- Найдите средний элемент односвязного списока за один проход.
- Как реализовать бинарное дерево поиска?
Многопоточность
Не все программисты работают с многопоточностью, но базовые вещи стоит знать хотя бы в теории.
Примеры часто задаваемых вопросов:
- Что такое поток?
- В чем разница между потоком и процессом?
- Как реализовать потоки?
- Когда нужно использовать Runnable vs Thread?
- В чем разница между методами start () и run () класса Thread?
- Что такое модель памяти Java?
- Что такое volatile?
- Что такое изменчивая переменная в Java?
- Что такое потокобезопасность? Vector – это потокобезопасный класс?
- Что происходит, когда в потоке возникает исключение?
Сборка мусора
Вопросы по сбору мусора очень популярны как в базовых, так и в продвинутых собеседованиях:
- Какова структура Java Heap? Что такое пространство Perm Gen в куче?
- Как определить незначительную и основную сборку мусора в Java?
- В чем разница между сборщиками мусора ParNew и DefNew Young Generation?
- Как вы обнаружите, что сборщик мусора привел к вызову System.gc ()?
- В чем разница между последовательным и пропускным сборщиками мусора?
- Когда объект получает право на сборку мусора в Java?
- Что такое метод finalize в Java? Когда сборщик мусора вызывает метод finalize?
- Как отслеживать действия по сбору мусора?
- Можно ли принудительно запустить сборщик мусора в любое время?
- Происходит ли сборка мусора в постоянном пространстве генерации в JVM?
Базы данных
Освежите в памяти ваши знания по SQL и JPQL.
Примеры часто задаваемых вопросов:
- Реляционные и нереляционные БД – в чем разница? Что и когда использовать?
- Как строится запрос SQL?
- Какие виды join-ов существуют?
- Чем having отличается от where?
- Были ли у вас в практике случаи оптимизации запросов?
- Приходилось ли смотреть план выполнения запроса?
- Что такое entity manager?
- Что такое persistence context?
- Что такое JPQL и чем он отличается от SQL?
- Что означает полиморфизм в запросах JPQL и как его «выключить»?
Фреймворки
В большинстве случаев требуется Spring.
Примеры часто задаваемых вопросов:
- Transactional – как она работает? Что в ней можно дополнительно настроить?
- Назовите различные модули фреймворка Spring.
- Перечислите некоторые важные аннотации в конфигурации Spring на основе аннотаций.
- Объясните Bean в Spring и перечислите различные области применения Spring bean.
- Объясните роль DispatcherServlet и ContextLoaderListener.
- В чем разница между внедрением конструктора и внедрением установщика?
- Как обрабатывать исключения в Spring MVC Framework?
- Какие важные аннотации Spring вы использовали?
- Как интегрировать Spring и Hibernate Frameworks?
- Назовите типы управления транзакциями, которые поддерживает Spring.
Сетевые протоколы
Повторите уровни модели OSI и основные протоколы: tcp, udp, https:
- Что такое IP-адрес?
- Что такое веб-сервис?
- Какие существуют типы веб-сервисов?
- В чем отличие host и domain?
- Какие методы в HTTP вы знаете?
- Чем отличаются методы GET, POST и HEAD?
- Что такое REST?
- Зачем нужен класс Calendar в Java?
- Как преобразовать дату в Java к нужному формату?
- Отличие классов Socket и URL?
JVM
Одна из многих черт хорошего программиста – хорошее понимание основ. Если вы хотите проверить основы программирования на Java, вопрос о разнице между кучей и стековой памятью – хороший выбор. Несмотря на то, что оба являются частью JVM и выделенной для процесса Java памятью потребителя, между ними есть много различий.
Примеры часто задаваемых вопросов:
- Что такое куча и стек?
- Как хранятся объекты в JVM?
- Что такое string pool?
- Что обеспечивает принцип happens before?
- Как работает сборщик мусора?
- В чем разница между потоком пользователя и потоком демона?
- Что такое OutOfMemoryError в Java?
- Можно/нужно ли обрабатывать ошибки JVM?
- В чем разница между ошибкой и исключением?
- Объясните что такое JDK, JRE и JVM.
Архитектура
- Когда нужно использовать микросервисы, а когда монолит?
- Использовали ли вы eureka или consul?
- В чем разница между Hibernate и JDBC?
- Каковы преимущества использования Hibernate перед JDBC?
- Выгодно ли использование среды Spring для разработчиков Java?
- Если у вас есть приложение Java с подключением к базе данных, которое необходимо улучшить, как бы вы его улучшили?
- Как избежать тупика базы данных?
- Что такое шардинг и насколько он полезен?
- Что такое масштабируемость?
- Что такое балансировка нагрузки?
Паттерны
Никто не потребует перечислять все существующие паттерны, но некоторые, используемые в Java или Spring, знать надо. Например Immutable, Singleton, Prototype, Builder, Proxy, Abstract factory, Wrapper.
Разное
На интервью могут поинтересоваться, знакомы ли вы с Agile, Git или Gitflow, REST/SOAP, Docker, и Kubernetes. Также встречаются вопросы об использовании в работе функциональных и интеграционных тестов.
Практическая часть
На собеседованиях приходится решать и практические задачи. Будьте готовы, что код придется писать без использования привычной среды разработки. Часто соискателям дают стандартные алгоритмические задачи, поэтому перед интервью стоит обратить внимание на нашу статью по их решению, а также изучить небольшое руководство. Подробнее про распространенные алгоритмы и структуры данных можно почитать в еще одном материале «Библиотеки программиста».
Про себя
Работодателя наверняка заинтересует практический опыт кандидата, поэтому даже самые простые ответы стоит иллюстрировать примерами из решенных вами задач. Интервью может включать вопросы о мотивации, степени ответственности, амбициях и поведенческих особенностях соискателя. Их цель – побольше узнать о том, как вы работаете в коллективе, справляетесь с нестандартными задачами и авралами. Подготовиться к ним поможет статья «Как легко пройти собеседование».
В конце собеседования не забудьте проявить инициативу и задайте интересующие вас вопросы работодателю. Кандидат тоже решает, насколько компания ему подходит. К тому же это хороший способ получить обратную связь от интервьюера о вашей реальной ценности как программиста.
Хочу научиться программировать с нуля, но не знаю, с чего начать. Что делать?
Можно учиться самостоятельно (долго) или пойти на курсы с преподавателями (быстро). Плюс нужно учитывать, что джунов много, конкуренция выше и работодатели повышают порог вхождения при найме на работу. Чтобы получить актуальные знания, мы в proglib.academy запустили курсы:
- Основы программирования на Python.
- Профессия Python-разработчик.
- Алгоритмы и структуры данных.
- Математика для Data Science.
- Профессия Data Science.
- Frontend Basic: принцип работы современного веба.
- Профессия Фронтенд-разработчик.
- Обработка естественного языка. Полный курс.
На подходе еще больше 10 курсов для взрослых и детей.
Комментарии