Вопросы с собеседования на Principal Java Developer в немецкую компанию
IldarНа днях я собеседовался в немецкий стартап на позицию Principal Java Developer. Это было уже второе собеседование в эту компанию. Первым был разговор с Head of Development.
Второе интервью было с чуваком, по сути исполняющим задачи как Principal-разработчика, так и CTO. И его хотят поставить заниматься только задачами техдира, поэтому ищут нового принципала.
Зарплатная вилка была озвучена "до 90к евро в год", что меня не устраивало, но я очень хотел посмотреть какие вопросы задают на таких собеседованиях.
Да и вообще пора бы уже задуматься о переходе на следующий уровень.

Сначала мы как обычно представились, рассказали оба о своем опыте. Я рассказал о текущей работе.
Первым техническим вопросом было описать архитектуру нашей системы. Дальше мы ушли в обсуждение архитектуры аналитического дашборда по отправленным и возвращенным заказам.
Вопросы были из разряда какую БД использовал бы и какой техстек.
Дальше был вопрос о стоимости хостинга этого всего в AWS. Я изначально сказал, что AWS не пользовался несколько лет - на работе используем Azure. Поэтому могу рассуждать только с этим облачным провайдером.
Мы в процессе обсуждений выбрали Postgres в качестве базы данных. Так как доступность БД нам не критична (клиенты не пользуются дашбордом, он для внутренней команды), можно обойтись без штук типа high availability. Я помню, что подходящий по параметрам нам инстанс постгреса в Azure обходится в 200 с чем-то евро в месяц (могу ошибаться, кстати, давно не смотрел).
Про контейнер для приложения честно сказал, что не знаю. Но предположил, что все вместе сможем уложить в 500 евро.

Дальше перешли к вопросам по Java. Спросили общий принцип работы сборщиков мусора.

Если вкратце тут рассказал о стеке и Heap памяти, о разных поколениях (generations), minor GC, full GC и о Stop-the-world.
Дальше меня спросили какой дефолтный сборщик используется сейчас. Ответил, что G1. Но рассказал о Generational ZGC из Java 21 (благо относительно недавно делал доклад на работе о ней). Добавил немного о Epsilon GC, про который как-то читал в статьях. Про него не знал даже интервьюер.
Следующим меня спросили какую concurrent структуру данных я бы использовал для обработки большого количество запросов на запись и чтение из мапы? Какие варианты есть и какие плюсы и минусы. Тут я немного загнался. Пару лет назад читал про такое, но без применения на практике уже забыл в чем разница.
Упомянул про ConcurrentHashMap и что у него не блокируются get операции, а при записи блокируются только определенные сегменты.
Еще упомянул про Collections.synchronizedMap обертку и что в этом случае блокируем мапу полностью, то есть в этом случае мапа будет низкопроизводительна для нас.
Последним был вопрос о чтении из текстового файла и что бы я использовал в Java для чтения файла размером в 10Гб. Я не помню когда вообще в последний раз читал из файла, а те, кто знаком с IO пакетом джавы, знают сколько там всего. Поэтому лишь объяснил принцип, что читать будем по частям. Это можно сделать используя BufferedReader. На вопрос можно ли с помощью BufferedReader читать с произвольного места файла предположил, что да, раз можно читать по частям. Рассуждал так, что раз читаем по частям, значит есть какие-либо offset и limit параметры. Тогда возможно их можно задать и читать определенное место в файле.
Как оказалось позже, так делать нельзя (в комментариях поправили, что можно)
Пока фидбека по собеседованию не дали (предположу, что не прошел), но я получил немного практики, освежил некоторые знания и потренировал себя не волноваться на собеседованиях.
Если было полезно, подписывайтесь на канал, буду стараться чаще радовать вас полезным техническим контентом