HR-блог про IT рекрутинг от ИТ Кадрового агентства

10 вопросов и ответов на собеседовании старшего разработчика Java

Вопросы для собеседования IT рекрутинг
Хотим поделиться с вами нашим опытом проведения собеседования с Джава программистами. В составление вопросов нам помог СТО компании hh.ru, которым наше Кадровое ИТ агентство помогло закрыть джавистов!

1. ArrayList против LinkedList

ArrayList и LinkedList — одни из наиболее часто используемых структур Java (начиная с Java 1.2) для повседневных задач разработки. Как старший разработчик Java , вы должны быть в состоянии понять, как работают эти структуры и чем они отличаются.
Прежде всего, вы должны знать, что они оба реализуют интерфейс List, абстрактную структуру, созданную для поддержания порядка вставленных элементов. Основное отличие состоит в том, что LinkedList дополнительно реализует интерфейс Deque, поэтому разработчики могут использовать его как стандартную структуру, подобную FIFO.
Внутренности двух коллекций сильно различаются. В то время как ArrayList основан на массиве с автоматическим изменением размера, LinkedList использует указатели на следующий и предыдущий элементы, создавая цепочку элементов для предоставления доступа к данным. Это означает, что выбор правильной структуры зависит от варианта использования, так как производительность может сильно варьироваться в зависимости от этого.
Один из лучших вопросов на собеседовании со старшим разработчиком Java, который я получил за годы работы разработчиком программного обеспечения, заключался в том, чтобы реализовать ArrayList и LinkedList с нуля, используя только стандартные примитивы Java и никаких причудливых коллекций Java. Лучший способ подготовиться к этому вопросу — декомпилировать код JDK и посмотреть, что внутри, своими глазами.
Вы можете быть уверены, что JDK имеет наилучшую реализацию для языка Java. Не зацикливайтесь только на том, какая уже сделанная структура лучше всего подходит для конкретной задачи. Алгоритмы и структуры данных — основа нашей работы, так что будьте готовы углубиться в них.

2. REST против SOAP

Я раскрою один из моих любимых вопросов, которые я задаю во время собеседований, особенно с опытными кандидатами, которые, вероятно, использовали SOAP в старых проектах.
Эти две технологии веб-сервисов можно сравнить с разных сторон. Теоретические различия, такие как «SOAP — это протокол, а REST — нет», хотя, безусловно, интересны, не имеют большой ценности, когда дело доходит до проверки реального опыта кандидата. Кое-что, что обычно не упоминается во время сравнений и что может помочь определить, есть ли у кандидата реальный опыт работы с обоими, — это использование файлов языка определения веб-служб (WSDL).
Файлы WSDL обычно используются для создания заглушек связи в Java. Есть ли какой-либо инструмент или технология, которые помогут нам сделать то же самое с конечными точками REST? Ответ положительный, и это называется OpenAPI. Документирование веб-сервисов — одна из самых важных вещей при предоставлении функциональности. Убедитесь, что вы знаете, как документировать свои API с конечными точками Rest и SOAP!

3. Слияние или перебазирование

Я до сих пор вспоминаю первые годы программирования как кошмар, когда мы использовали SVN в команде из 10 человек. Использование Git улучшило игру, но нам всем нужен был некоторый опыт работы с ним. Вначале недостаток знаний усугублял ситуацию.
Когда невозможно объединить две ветки из-за конфликтов, у разработчиков есть два варианта: слияние или перебазирование. Перебазирование может потребоваться, когда важно сохранить чистую историю Git. Перебазирование означает перемещение основания ветки поверх листа другой. Вместо многократного пересечения веток вы можете иметь чистую историю Git, если все следуют золотому правилу перебазирования: никогда не перебазируйте общедоступную ветку.
Сохранение — это мощный инструмент для откладывания кода, который вы только что написали, без отправки его в какую-либо удаленную отслеживаемую ветку. Хотя можно создать несколько тайников одновременно, дав им разные имена, обычно лучше не иметь более одного тайника, так как восстановление может стать сложным. Есть ли разница между созданием локальной ветки git и тайником git? Поиск ответа может стать отличным упражнением для кандидатов.

4. Определите пирамиду тестирования и ее уровни

Пирамида тестирования — это концепция, позволяющая проверить несколько уровней знаний кандидата. Способности идентифицировать все уровни (модульное тестирование, интеграционное тестирование, тестирование пользовательского интерфейса) должно быть достаточно для начинающего разработчика, но для более опытных кандидатов лучше убедиться, что они также реализовали некоторые из них с использованием различных инструментов или технологий.
Рядом с этой пирамидой обычно можно разместить вторую меньшую структуру, состоящую из компонентов, нагрузочных тестов или тестов производительности. Не забудьте упомянуть и их, чтобы получить дополнительные баллы на техническом собеседовании.

5. Как сортировать HashSet целых чисел?

Это сложный вопрос, так как Set по умолчанию является неупорядоченной структурой. Так что ответ просто нет, если мы не используем дополнительную структуру данных.
Исходя из этого вопроса, можно:
  1. Изучите знания кандидата о коллекциях Java. TreeSet, LinkedHashSet и List — это лишь некоторые из возможных решений.
  2. Продолжайте внутренние проверки HashSet. Как вы думаете, почему множества неупорядочены? Почему он называется набором HASH?

6. Опишите иерархию исключений

Знание иерархии исключений необходимо, когда речь идет об использовании таких фреймворков, как Spring или Spring Boot. Подавляющее большинство библиотек Java определяют и документируют как можно точнее иерархию исключений для различных решаемых вариантов использования.
Эта абстракция полезна несколькими способами: во-первых, можно перехватывать исключения на различных уровнях иерархии, а во-вторых, можно дополнительно расширить семейство исключений с помощью специфических и специальных вариантов использования.
Еще один связанный с этим вопрос касается концепции «барьеров ошибок», которую я рекомендую каждому старшему разработчику Java понять, если он еще не знаком с этой конструкцией.

7. Как выявить проблемы с производительностью в приложении?

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

8. Как обрабатывать огромные данные в кеше Redis?

Первой реакцией кандидата на этот вопрос должно быть: «Есть ли смысл иметь огромные данные на Redis?» Распределенный кеш создается в первую очередь для повышения производительности приложения распределенной микрослужбы. Вместе с физическим ограничением оперативной памяти, доступной для хоста Redis, существует ограничение программного обеспечения на один элемент в 512 МБ. Чтобы хранить огромные объемы данных, мы должны иметь возможность разбивать их на фрагменты и извлекать результаты, например, с помощью команды HGETALL. Сжатие перед сохранением данных также может быть вариантом. Вообще говоря, Redis не был создан для достижения этой цели. Извлечение больших объемов данных считается одной из наихудших практик . Лучшим решением может быть хранение объекта данных в стандартной базе данных NoSQL.
Цель этого вопроса для собеседования — проверить предыдущий опыт старших кандидатов в Java-разработчики, уделив особое внимание тому, как они предлагают новые решения, а не придерживаются плана.

9. Определить АОП и его самую большую ловушку

Аспектно-ориентированное программирование (АОП) — это мощная функция, реализованная в среде Spring. Это позволяет разработчикам определять поперечные уровни для бизнес-логики приложения. Его наиболее распространенные варианты использования — ведение журнала, авторизация и кэширование.
Самая распространенная ошибка, о которой должен знать кандидат, — вероятное падение производительности при использовании АОП, так как он использует отражение под капотом, а отражение в Java не бесплатно (прямой вызов методов намного быстрее). Это может затруднить чтение бизнес-логики тому, кто имеет опыт программирования.

10. Каковы ограничения GET?

Метод GET в HTTP следует использовать только для получения ресурсов с веб-сервера без какого-либо изменения состояния приложения. Исключением является случай, когда у нас есть кэширование. В этом случае допустимо незначительное изменение состояния приложения.
Ограничения GET обычно связаны с тем, что метод теоретически не может иметь тело запроса, поэтому каждый параметр должен быть включен в URL-адрес, а URL-адрес имеет ограниченную длину (~ 2 тыс. символов). На практике можно отправить тело с помощью метода GET, даже если это не рекомендуется и его следует избегать.
Имея 2К символов, мы уверены, что у нас есть все входные данные, необходимые для получения ресурса с веб-сервера.

Где найти Java разработчика?

Наше ИТ кадровое агентство предлагает вам найти разработчиков менее чем за 2 недели. Свяжитесь с нами сегодня, чтобы узнать больше о том, как мы можем помочь масштабировать ваш следующий проект до новых высот. Мы гарантируем поиск самого сильного, а не самого дорого кандидата. За 10 лет в подборе it специалистов, мы закрыли 5500+ вакансий и собрали 25+ команд с нуля. Убедитесь сами и ознакомьтесь с отзывами клиентов о нашем рекрутинговом агентстве! Нужно больше референсов? Напишите нам в телеграмм.