Android | Михаил Белый

Android | Михаил Белый 

Все про Android

43subscribers

46posts

goals1
$15.02 of $1 352 raised
Поплыву на остров Ко Мадсум кормить диких кабанчиков

Как готовиться к собесу по мнению компаний

Корпоративную плотину прорвало и в мои загребущие руки утекла ценнейшая инсайдерская информация. Наконец понятно, что именно учить для успешного прохождения собеса. Больше никакого распыления на роадмапы. Сейчас посмотрим, что сами компании рекомендуют изучить для прохождения своих технических этапов. Под лупой – Озон, Яндекс, Альфа, Т-Банк и Авито.

Ozon Tech

Этапы собеседований
1. Созвон с HR + небольшой техскрининг (до 30 мин).
2. Технический скрининг (от 30 мин до 1 часа).
3. Техническое интервью (2 часа).
4. Знакомство с командами (1 час).
Все этапы интервью проводятся в https://meetzone.o3.ru, это наша внутренняя платформа для видеозвонков. Подключайся к встрече по полученной ссылке и обязательно включай камеру и микрофон. После каждого из этапов интервью, независимо от его исхода, в течение нескольких дней с тобой свяжется HR и сообщит результаты.
https://job.ozon.ru/events/38 – тут можно посмотреть темы для подготовки.
Технический скрининг
На данном этапе вы пообщаетесь с нашим интервьюером на широкий спектр тем, касающихся Android-разработки, и программирования в целом. Здесь не будет вопросов на глубину знаний. В случае необходимости, помимо теоретических вопросов, интервьюер может предложить вам написать код, решающий алгоритмическую задачу. Для решения задачи вам не нужна среда разработки. Транслировать свой экран так же не потребуется. Достаточно будет открыть в браузере ссылку, которую вам пришлют.
Для подготовки к данному этапу рекомендуем повторить:
• Базовые принципы программирования и паттерны проектирования.
• Наиболее популярные структуры данных и их скорость.
• Основы языка Kotlin.
• Компоненты Android, фрагменты, жизненные циклы.
• Основы многопоточности в Android.
Для успешного прохождения алгоритмической секции рекомендуем порешать задачи на коллекции уровня Easy на https://leetcode.com. В процессе решения задачи не стесняйтесь задавать вопросы, если что-то непонятно и проговаривать свое решение вслух. Постарайтесь придумать различные кейсы для проверки получившегося алгоритма. Так как в редакторе не будет автокомплита, мы понимаем, что вы можете допускать незначительные ошибки в синтаксисе. И конечно, не забывайте об алгоритмической сложности, выбирая подход к решению задачи.
Техническое интервью
На данном этапе вам предстоит общение на все те же темы, что и на скрининге, однако спектр вопросов будет значительно шире и глубже. Писать код не потребуется. Помимо тем для скрининга рекомендуем повторить:
• Архитектурные подходы при проектировании приложения.
• Android UI, Custom View.
• Многопоточность.
• Работу с памятью.
В процессе интервью вам может быть предложены задачи на проектирование фичи в приложении и на ревью кода (MVVM + Fragment). Решая задачу на ревью кода, вам предстоит найти сомнительные места, и оставить к ним комментарии.
Материалы для подготовки
• Официальная документация по Kotlin – https://kotlinlang.org/docs/home.html.
• Официальная документация по Android – https://d.android.com.
• Рекомендации по проектированию приложений https://d.android.com/topic/architecture.
• Статьи по многопоточности и Kotlin – https://elizarov.medium.com.
• Java Memory Model – https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html.
• Работа с памятью – https://d.android.com/reference/java/lang/ref/package-summary.
Примеры алгоритмических задач
https://leetcode.com/problems/how-many-numbers-are-smaller-than-the-current-number.
https://leetcode.com/problems/sum-of-unique-elements.

Yandex

Этапы собеседований
1. Platform + Architecture (примерно 1.5 часа).
2. Code Mobile (30 минут).
3. Знакомство с командами.
Platform + Architecture
За полтора часа проверим ваши знания платформы, языка, навыки проектирования частей клиентского приложения. Для этого интервьюер предложит решить несколько задач – написать код или исправить ошибки в уже написанном.
Проверим умение изложить идею решения задачи в корректный код, ждем от кандидата, что он будет делиться ходом своей мысли, давать обратную связь при решении. Корректно, лаконично и понятно для читателя воплощать идею решения в коде. Проверять свое решение перед его финальной сдачей, желательно на нескольких классах примеров. Уделять внимание краевым случаям. Демонстрировать знание и практическое умение корректно работать с массивами, хеш-таблицами, бинарными деревьями. Релевантно применять эти структуры данных при решении задач. При работе с массивом демонстрировать умение итерироваться по индексу, не выходя за его пределы. При работе с деревом демонстрировать умение рекурсивно обходить его, не входя в бесконечную рекурсию. Главный акцент этой части секции делается именно на процессе написания, корректности и качестве кода решения предложенной задачи.
При подготовке рекомендуем вспомнить синтаксис и семантику языка, который вы используете в работе, многопоточность, основные компоненты SDK вашей платформы, работу с UI, паттерны и принципы проектирования.
Мы не ожидаем, что вы сталкивались со всеми возможными технологиями, так что задачи выберем исходя из вашего опыта. Например, Android-разработчику, ещё не освоившему Jetpack Compose, предложим задачу без его использования.
Пишите читаемый код, так интервьюеру будет легче следить за вашей мыслью, и он сможет быстрее дать обратную связь. Обращайте внимание на то, как ваш код будет работать в различных краевых случаях, нет ли потенциальных неприятных кейсов с крашами, вылетом за границы массива или просто с некорректной работой.
Задачки нужно будет решать в онлайн-редакторе. Никто не ждет от вас, что вы помните все сигнатуры нужных функций или без автокомплита и автопроверки пишете идеальный код с чистого листа. Интервьюера интересует прежде всего отсутствие семантических ошибок в реализации, которые могут привести к некорректной работе в каких-то наборах входных данных.
Не стесняйтесь попросить подсказку у интервьюера.
Code Mobile
Будет дана 1 задача с кодом приближенная к мобильной тематике. Интервьюер предложит решить задачу на работу с базовыми структурами данных, чтобы проверить вашу способность придумывать и реализовывать оптимальные решения. Рекомендуем потренироваться на сервисах вроде coderun.yandex.ru.
Ссылки для подготовки:
https://coderun.yandex.ru/problem/hardest-letter
https://coderun.yandex.ru/problem/simple-suggest
https://coderun.yandex.ru/problem/flight
https://coderun.yandex.ru/problem/summ-of-the-various
https://coderun.yandex.ru/problem/palindroming-check
https://coderun.yandex.ru/problem/rle-test
Знакомство с командами
На этой встрече можно познакомиться с интересующими командами, обсудить задачи и познакомиться с продуктом. Можно заранее подготовить пул вопросов.
• Все, что нужно знать про процесс найма – https://yandex.ru/jobs/pages/mobdev-interview.
• Достаточно подробно и доступно про алгоритмическую секцию – https://habr.com/ru/company/yandex/blog/449890.
• Шпаргалка по асимптотической сложности алгоритмов (обязательно к прочтению) – https://habr.com/ru/post/188010.
• Cвежее видео про алгоритмическую секцию для мобильных разработчиков – https://youtu.be/Wdicm1yK23g?t=6623.
• По платформенной секции мы ожидаем от вас знание Android SDK и Java/Kotlin. В конкретные фреймворки углубляться не нужно. Мы хотим узнать, как хорошо вы понимаете core-части языка и платформы.
Материалы для подготовки по Android
Среди широкого спектра тем мы выбрали основные, в которых ожидаем от кандидата хорошего понимания и тщательной подготовки:
• Основные компоненты Android-приложения.
• Activity.
• Сохранение состояния.
• Асинхронность.
• Жизненный цикл.
По Java/Kotlin будет полезно почитать Effective Java. Мы также любим многопоточность, по ней есть очень хорошая книга Concurrency in Practice. Для подготовки также полезно попрактиковаться в решении разных задачек на работу с коллекциями или многопоточностью (например, напишите код для producer/consumer).
По Android будет полезно вспомнить устройство основных компонент (жизненный цикл, процесс отрисовки View, как работает Handler, взаимодействие с файловой системой, IPC и тд), нововведение последних версий Android, отладку и профилирование. Можно потренироваться реализовывать сложный UI и проводить ревью кода.
Материалы для подготовки к алгоритмической секции
Темы и ссылки, где можно подготовиться к алгоритмам:
• prefix sum:
https://leetcode.com/tag/prefix-sum
• linked lists:
https://leetcode.com/problems/merge-k-sorted-lists
https://leetcode.com/problems/linked-list-cycle
https://leetcode.com/problems/add-two-numbers
https://leetcode.com/problems/reverse-linked-list
• binary search:
https://leetcode.com/problems/binary-search
https://leetcode.com/problems/guess-number-higher-or-lower
https://leetcode.com/problems/search-a-2d-matrix
https://leetcode.com/problems/search-in-rotated-sorted-array
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array
https://leetcode.com/problems/search-in-rotated-sorted-array-ii
• hash table:
https://leetcode.com/problems/single-number – решить за O(1) по памяти
https://leetcode.com/problems/two-sum
https://leetcode.com/problems/4sum
https://leetcode.com/problems/group-anagrams
https://leetcode.com/problems/valid-anagram
https://leetcode.com/problems/find-all-anagrams-in-a-string
• queue/stack:
https://leetcode.com/problems/valid-parentheses
• dfs/bfs:
https://leetcode.com/problems/number-of-islands
https://leetcode.com/problems/remove-invalid-parentheses
• sort:
https://leetcode.com/problems/merge-intervals
• heap/hash:
https://leetcode.com/problems/top-k-frequent-words
https://leetcode.com/problems/top-k-frequent-elements
• two pointers:
https://leetcode.com/problems/container-with-most-water
https://leetcode.com/problems/partition-labels
• sliding window:
https://leetcode.com/problems/sliding-window-median
https://leetcode.com/problems/sliding-window-maximum
https://leetcode.com/problems/longest-repeating-character-replacement
• tree:
https://leetcode.com/problems/same-tree
https://leetcode.com/problems/symmetric-tree
https://leetcode.com/problems/balanced-binary-tree
https://leetcode.com/problems/path-sum-ii
• greedy problems:
https://leetcode.com/problems/best-time-to-buy-and-sell-stock
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown
Алгоритмы, которые чаще всего бывают в задачках – сортировки (например, bubble sort или quicksort) – разворота одно/двусвязного списка – разворота строки – обхода дерева.
https://youtu.be/aYuAd-IDigc – здесь ролик про проведение алгоритмической секции. В первом комменте тезисно выписаны основные поинты встречи. Может быть полезным.

Alfa Digital

Этапы собеседований
1. Созвон с HR.
2. Техническое собеседование.
3. Собеседование с командой.
Альфа часто нанимает через вендоров: Sense, Selecty. Сначала собес у вендора, потом боевой этап в Альфе. Результаты первого этапа Альфа всегда знает.
Что повторить перед собеседованием
• Android.
• Архитектура.
• Паттерны.
• Kotlin.
• Java.
• Android SDK.
Алгоритмы, как правило, не спрашивают, они скорее как доп тема, если конкретному интервьюеру захочется спросить, либо кандидат покажет знания по ним и тогда начнут развивать тему.
Будет очень полезным:
• Многопоточка.
• Чистая архитектура.
• MV* паттерны (повторить подходы MVP, MVVM, в чём их плюсы, минусы, как устроены библиотеки под капотом и какую проблему решают).
• Принципы SOLID, все Android-специфичные темы типа кастомных вью, списков, rx, компонентов, их жизненных циклов и тд.
• Вопросы с кодом по типу «скомпилируется ли эта строка кода или нет», «что делает этот блок кода и на что он похож».
Если собесов давно не было, можно посмотреть/послушать пару собесов рандомных на ютубе, погуглить классические вопросы к собесам на андроид, посмотреть какие там темы освещаются, проанализировать какие из этих тем ты хорошо знаешь, а какие надо бы подтянуть.
• Корутины (GlobalScope, Flow и их операторы) могут затронуть операторы RxJava.
• Работа с фрагментами, методы add, replace.
• Часто делают акцент на Dagger.
Хорошо потренироваться в вопросах по типу:
• Почему параметр reified можно использовать только с inline-функциями.
• Отличия sealed-класса от sealed-интерфейса.
• Принцип работы кастомных вью (метод onMeasure и как он работает).
• Стоит повторить Dagger, посмотреть как реализовать зависимости в многомодульном проекте.
• Повторить методы ЖЦ Активити, за счет каких механизмов реализована асинхронность главного потока.
• Повторить приоритеты процессов и как система ведёт себя в зависимости от них.
О работе
• Код полностью пишем на Kotlin.
• 80% фичей покрываем тестами в обязательном порядке.
• У нас многомодульные проекты.
• Выстроенный процесс code-review.
• Автоматизированный релизный цикл.
• Работаем в продуктовых командах по Scrum.
О приложениях
Альфа-Мобайл
• Количество команд – 50+.
• Архитектура – самописный MVP, без использования сторонних библиотек + Clean.
• Используемые фреймворки – Dagger 2, RxJava 2, Retrofit, OkHttp, Gson, Spock.
• Основной язык Kotlin.
• Все слои, кроме View, обязательно покрываем unit-тестами, тесты пишем на Groovy с использованием фреймворка Spock.
• Есть поддержка Huawei без гугл-сервисов.
• Многомодульный проект, каждая фича в отдельном gradle-модуле, 300+ модулей.
Бизнес-Мобайл
• Количество команд – 14.
• Архитектура – MVVM + Clean.
• Используемые фреймворки – Dagger 2, RxJava 2, Thrifts, JUnit.
• Основной язык Kotlin.
• Все покрываем тестами, есть даже тесты на вью.
• Есть поддержка Huawei.
Альфа Инвестиции
• Количество команд – 10+.
• Архитектура – MVVM + Clean.
• Используемые фреймворки – Dagger 2, RxJava, Retrofit, OkHttp, JUnit, Mockk.
• Основной язык Kotlin.
• Есть специфичный модуль для инвестиций на C++, JNI.
• Все слои, кроме View, обязательно покрываем unit-тестами, внедряем UI-тесты.
• Есть поддержка Huawei без гугл-сервисов.

Т-Банк

Этапы собеседований
1. Предварительное собеседование.
2. Техническое собеседование.
3. Знакомство с командой.
4. Приглашение на работу.
Полезные ссылки
• Technology radar – https://radar.tinkoff.ru/android/mb.
• Как проходит интервью по мобильной разработке – https://www.tbank.ru/career/it/interview/mobile.
Книги
• «Совершенный код» – С. Макконнелл.
• «Чистый код» – Р. Мартин.
• «Алгоритмы. Построение и анализ» – Т. Кормен,Ч. Лейзерсон, и др.
• «Приемы объектно-ориентированного проектирования. Паттерны проектирования» – Э. Гамма,Р. Хелм, Р. Джонсон, Д. Влиссидес
• «Программист–прагматик» – Д. Томас, Э. Хант
• «Введение в системы баз данных» – К. Дейт
• «Java Concurrency in Practice» – Brian Goetz, Tim Peierls
• «Java. Полное руководство» – Г. Шилдт
• «Java. Эффективное программирование» – Д. Блох
• «Философия Java» – Б. Эккель
• «Kotlin в действии» – Д. Жемеров, С. Исакова
Сайты
Refactoring.Guru – интерактивный курс по рефакторингу кода.
Developer.android.com – документация для разработчика.
AwesomeAndroidLearning – сборник ресурсов по Kotlin и Android.
Kotlinlang.ru – руководство по Kotlin.
Kotlin Coroutines Guide.
The Busy Coder’s Guide to Android Development.
Видео
Как устроены собеседования в IT.
Проводим собеседование в Android-команду Т‑Банка в прямом эфире.

Avito Tech

Этапы собеседований
1. Технический скрининг.
2. Программирование.
3. Платформа.
4. Встреча с командой.
Технический скрининг
Будут вопросы по основным компонентам Android, Activity, языку программирования, синхронизации, сети, UI и небольшая задачка.
Программирование
На этой секции мы проверяем навыки в написании кода, алгоритмизации задач и понимании сложности написанного кода. Код можно писать на псевдоязыке или языке программирования, который подходит позиции. При этом нельзя использовать библиотечные функции. Для подготовки к этой секции можно использовать leetcode.com.
Интервьюер пришлет ссылку на online-редактор кода с подсветкой синтаксиса и попросит решить 1-2 задачи. Нужно придумать решение, закодить его, оценить алгоритмическую сложность с точки зрения О-нотации, ответить на вопросы по структурам данных (чаще всего мапы и хешмапы).
На этом этапе мы хотим проверить:
• Ваши навыки алгоритмизировать поставленную задачу и умение писать простой код.
• Понимаете ли вы насколько эффективный код вы пишите.
• Ваши знания о простых структурах данных.
Как подготовиться?
• Решить несколько задач уровня easy и medium c hackerrank.com или leetcode.com.
• Вспомнить, как оценивать сложность написанного кода и алгоритмов.
• Освежить знания по основным структурам данных.
Платформа
На этой секции проверяем знания в конкретном языке программирования, понимание разработки в рамках экосистемы своего языка. Секция содержит как практические задачи, так и теоретические вопросы на их базе. Обычно на интервью просят решить задачу с написанием кода, почитать примеры чужого кода и ответить на вопросы, что этот код делает.
Полезные ссылки, которые помогут получше познакомиться с Авито
• Наш плейбук – https://github.com/avito-tech/playbook.
• Манифест – https://manifesto.avito.com.
• Наши бенефиты – https://benefits.avito.com.
• Матрица компетенций и ожидания от разработчиков разных грейдов – https://github.com/avito-tech/playbook/blob/master/developer-profile.md.
• Сайт с котом, который поможет узнать, как у нас все устроено – https://explore.avito.tech.
• Лендинг с этапами отбора, описаниями секций и полезными материалами для подготовки – https://career.avito.com/directions/developer.
Subscription levels1

Жалкий детский уровень

$1.36 per month
• Бесконечный респект и признательность 
• Ранний доступ к видео и воркшопам
• Отдельный топик в телеграм-чате с записями реальных Android-собеседований
• Отдельный топик с автоматическими новостями про Android-разработку
+ chat
Go up