Загрузка…
Загрузка…
mobile / senior / tech_screening
Формат
online
Стадия
tech_screening
Когда
within_quarter
Длительность
—
01
Поведенческий
Расскажите про свой функционал, задачи, которые вы выполняли на последнем месте работы, и проект, в котором принимали участие.
HR-часть (рекрутер Настя). Кандидат рассказал про VPN-приложение в компании Суперан Лимитед.
02
Поведенческий
Помимо андроид-разработчиков, кто ещё состоял в вашей команде?
Follow-up к рассказу о последнем месте работы.
03
Поведенческий
С какими задачами в разработке тебе как андроид-разработчику хотелось бы работать больше всего: платформенные задачи (скрипты, диплинки, пуши), верстка экранов или бизнес-логика?
HR-часть.
04
Поведенческий
На что в первую очередь ты обратишь внимание при выборе компании? Какие основные ожидания от нового места работы?
Заметки
Публичное собеседование в прямом эфире Хабр Карьеры: кандидат Юсуф (сеньор андроид-разработчик, ~7-8 лет опыта, ранее работал в Суперан Лимитед над VPN-приложением) собеседуется в компанию магнит (ИТ-направление Магнит Тек, оформление в аккредитованную ИТ-компанию «Информационные технологии магнита»). Вакансия — сеньор андроид-разработчик в департамент онлайн-разработки, команда мобильного приложения Магнит. В одном эфире совмещены HR-часть (рекрутер Настя, софтовые вопросы) и техническая часть (техлид Иван): собеседование сокращённое. Реальный процесс в компании: техническое собеседование до 1,5 часов, затем софтовое собеседование с рекрутером и лидом. Итог: формального решения нет, но техлид сказал, что есть пробелы в знаниях (корутины и др.), при этом «наверное взял бы в компанию»; вопросы про HashMap не успели задать из-за тайминга.
Подготовка
Из фидбэка интервьюеров и кандидата: подтянуть корутины (Job, join, async/await, lazy-старт), порядок инициализации классов в Kotlin, компиляцию object/companion object в Java, equals/hashCode и HashMap (спрашивают всегда и подробно); завести и вести страничку на GitHub с репозиториями — её часто спрашивают после первого этапа; вести понятное резюме со стеком и ссылками на приложения в сторах; для тестовых заданий/примеров кода на интервью компании зачастую ожидают продвинутые подходы (clean architecture и т.п.); кандидат советует ходить на интервью примерно раз в месяц, чтобы оставаться в тонусе и выявлять пробелы.
Стиль интервьюера
Дружелюбный, поддерживающий стиль. HR задаёт софтовые/поведенческие вопросы (выгорание, конфликты, мотивация) плюс нестандартный вопрос про сверхспособность. Техлид активно подсказывает при затруднениях, докручивает вопросы follow-up'ами, разбирает лайвкодинг-задачу с запуском кода и проверкой ответов, в конце даёт развёрнутый честный фидбэк с указанием пробелов.
HR-часть.
05
Поведенческий
Чем больше всего ты гордишься как андроид-разработчик? Приведи пример сложной задачи, которую удалось выполнить, или достижения.
HR-часть. Кандидат рассказал про починку биллинга и возврат упущенной прибыли.
06
Поведенческий
Был ли в твоей команде код-ревью?
HR-часть.
07
Кейс
Были ли случаи, когда ты не был согласен с оценкой/замечаниями на код-ревью? Что делал, как выходил из ситуации?
Follow-up к вопросу про код-ревью.
08
Поведенческий
Возникали ли у тебя ситуации с выгоранием, когда понимал, что не готов продолжать работать в таком темпе?
HR-часть.
09
Поведенческий
Что послужило причиной этого состояния (выгорания)? Почему оно появлялось на разных местах работы?
Follow-up к вопросу про выгорание.
10
Поведенческий
Что тебя может демотивировать в работе? Назови два-три фактора демотивации.
HR-часть.
11
Поведенческий
Доводилось ли тебе на практике общаться со сложным в общении или конфликтным коллегой?
Follow-up к ответу про демотивацию.
12
Кейс
Если ты пришёл в новую команду и кто-то из коллег ведёт себя некорректно по отношению к тебе (комментарии, высказывания), как лучше поступить: обсудить лично с коллегой или сообщить тимлиду команды?
HR-часть.
13
Поведенческий
Представь, что волшебство существует: ты можешь приобрести любой навык, умение или сверхспособность, не обязательно связанную с разработкой. Что бы ты выбрал?
Завершающий вопрос HR-части. Кандидат ответил: дисциплина.
14
Теория
Что для тебя такое качественный, хорошо написанный код? Чем ты пользуешься, чтобы качество кода на проекте было стабильным и понятным?
Техническая часть (техлид Иван).
15
Теория
Можешь назвать конкретные примеры: смотришь на код и можешь сказать, что это классно написанный код, или наоборот — что плохо написали?
Follow-up к вопросу про качественный код.
16
Теория
Как ты относишься к классам по две-четыре тысячи строк?
Follow-up к теме качества кода.
17
Теория
Расскажи про data class в Kotlin: что ты о нём знаешь, какие у него плюсы и минусы?
Техническая часть.
18
Теория
Какие всё-таки минусы есть у data class, хотя бы условные?
Follow-up: нельзя наследоваться, особенности equals/hashCode по параметрам конструктора.
19
Теория
Data class генерирует довольно много методов (copy, componentN и т.д.) — может ли это нам как-то вредить?
Follow-up. Интервьюер отметил, что приложение увеличивается в объёме примерно на 3–5%.
20
Теория
В Java было двойное равно, в Kotlin появилось ещё и тройное. Чем отличается двойное равно от тройного равно в Kotlin?
Кандидат не вспомнил точно; интервьюер пояснил: == сравнивает через equals, === по ссылкам.
21
Теория
В Kotlin есть несколько видов object — назови, какие знаешь, расскажи, как они работают и во что компилируются в Java.
Обсуждались object, companion object и анонимные объекты (object expression).
22
Теория
Если создать несколько инстансов класса с companion object — companion object будет один на всех или их будет несколько?
Follow-up к вопросу про object.
23
Теория
Во что в итоге компилируется в Java обычный object (object declaration)? Чем он по факту является?
Follow-up. Правильный ответ — синглтон.
24
Теория
В какой момент инициализируется object (синглтон) в Kotlin?
Follow-up: при первом обращении к классу.
25
Теория
Расскажи про inline-функции в Kotlin: что это такое, зачем их придумали, какие у них плюсы и минусы?
Техническая часть.
26
Теория
Чем отличается launch от async/await в корутинах?
Техническая часть.
27
Теория
Что возвращает launch? Что такое Job в корутинах?
Follow-up: кандидат не вспомнил Job, интервьюер подсказал.
28
Теория
В одном методе подряд создаются две корутины через launch: первая идёт в сеть за данными пользователя, вторая — в базу данных. Эти два запроса выполнятся последовательно или параллельно?
Техническая часть.
29
Теория
Можем ли мы сделать так, чтобы второй launch дождался, пока выполнится первый? Если можем, то как?
Follow-up. Кандидат не вспомнил; интервьюер подсказал метод join у Job.
30
Теория
Как работает async/await: если в методе создаются два async (сеть и база данных), в какой момент начнут отрабатывать запросы — при создании async или при вызове await?
Follow-up по корутинам.
31
Теория
Можем ли мы сделать так, чтобы async начал выполняться только в момент вызова await?
Follow-up. Кандидат честно сказал, что не разбирался с этим API.
32
Теория
Какие основные компоненты есть в Android?
Техническая часть.
33
Теория
Можем ли мы какой-то из основных компонентов Android не описывать в манифесте?
Follow-up. Правильный ответ — BroadcastReceiver можно регистрировать динамически.
34
Теория
Есть задача собрать аналитику в приложении непосредственно перед его запуском (до Application). Где бы ты это описал?
Интервьюер указал, что самый надёжный вариант — ContentProvider.
35
Теория
Представь, что к тебе пришёл джуниор: расскажи ему про ключевые моменты работы с фрагментами — на что обратить внимание, чтобы не натворить ошибок?
Техническая часть.
36
Теория
Фрагмент А открывает фрагмент Б, фрагмент Б получает данные (например, из базы данных), затем закрывается. Назови три способа передать эти данные обратно и отобразить их во фрагменте А.
Кандидат назвал: Fragment Result API, shared ViewModel, интерфейс-листенер.
37
Теория
Есть большой список (больше тысячи карточек), например чат с картинками, текстом, эмодзи и payload (лайки, избранное), всё динамически меняется. На что следует обращать внимание, чтобы оптимизировать этот список, чтобы он не глючил и не фризил?
Техническая часть.
38
Теория
Хорошо или плохо подавать в список сразу тысячу элементов? Как это оптимизировать?
Follow-up. Обсуждали ViewHolder pool и пагинацию.
39
Код
Лайвкодинг-задача: есть класс Habr с конструктором, init-блоками (двумя), полем name, companion object со своим init и функцией searchMagnit. Расставь, в каком порядке всё будет инициализировано и вызвано при создании объекта и вызове функции.
Задача с шарингом экрана; код запускали и проверяли ответы.
40
Код
Follow-up к задаче: а если изменить код и вызвать только searchMagnit из companion object без создания объекта — что тогда выведется и в каком порядке?
Кандидат ответил верно: companion init и searchMagnit, конструктор и init не вызовутся.
41
Поведенческий
Есть ли у тебя опыт написания своих библиотек и их публикации?
Завершающий вопрос технической части.
42
Теория
Вы считаете, что код на clean architecture качественный, а если другая архитектура, то читать сложно и код плохой?
Вопрос от зрителей эфира в конце.
43
Поведенческий
Кем ты себя видишь через пять лет?
Вопрос от зрителей эфира в конце.