Android-разработка в Яндекс Вертикалях

Здесь вы узнаете о сервисах Яндекс Вертикалей и про стек, с которым у нас работают Android-разработчики. Также мы расскажем про этапы собеседования, условия работы и бонусы для сотрудников.

Что такое Яндекс Вертикали?

Яндекс Вертикали — это сервисы объявлений Авто.ру, Яндекс Недвижимость, Аренда и Путешествия, которые призваны помочь найти что-то очень важное: машину или новый дом, а также организовать отпуск или командировку.

Стек разработки

Пишем на Kotlin, используем чистую архитектуру, Architecture Components.  Мы делим приложение на модули и совместно с дизайнерами ведём библиотеку UI-компонентов. Стараемся делать релизы раз в неделю по заветам Release Train, многие продуктовые решения внедряем через А/В тестирование. Часть фичей реализуем на Backend-Driven UI, что позволяет быть независимыми от релиза приложения. 

Используем средства статического анализа кода Android Lint и Detekt для поддержания кодовой базы в актуальном состоянии. Гибко подходим к процессу разработки, используя по необходимости Feature Toggles.

Большое внимание уделяем тестам: пишем как unit-тесты, так и espresso-тесты с использованием скриншотов. Стараемся выпускать все новые задачи сразу с тестами. Процессы CI/CD на Teamcity интегрированы с Telegram, поэтому можно максимум времени уделять коду, а все ненужные телодвижения сделает за вас бот. Для генерация тестовых отчетов используем фреймворк Allure.

Команды

— Архитектура MVVM с использованием ViewModel и LiveData
— Kotlin Coroutines/Flow пришли на смену RxJava
— Dagger 2 для инъекции зависимостей
— Сетевой слой на Retrofit и GraphQL
— Решаем задачи по работе с картой
— The Elm Architecture и функциональное программирование помогают нам легко писать сложную логику, а также хорошо совмещается с Compose

— Много интересных задач и технологий: мы снимаем панорамы (со всеми тонкостями работы с видео) и обрабатываем их через ML (Firebase ML Kit, Tensor Flow)
— Код разделен на разные модули, а общение между частями строим через Dagger2. Мы можем легко отдавать часть модулей, чтобы команды других сервисов могли добавлять их в своё приложение
— У нас объёмный поток сетевых данных. Мы держим планку и используем Protobuf. Proto имеет ряд преимуществ перед JSON (быстрее за счёт своей «человеко-не-читаемости»)
— Для асинхронной работы используем корутины 
— Язык разработки — Kotlin
— Настроен автоматический экспорт из Figma. Больше не нужно конвертировать картинки из SVG в XML или скачивать PNG разного разрешения. И «увастутцветнетот» фиксит дизайнер, а не разработчик
— Списков много, поэтому нужно много работать с RecyclerView, мы постоянно улучшаем работу реализации адаптера, часто пишем ViewHolder-ы и максимально выносим подготовку данных из UI потока
Как выбрать команду? Поможет буткемп!
Стеки технологий в Авто.ру, Яндекс.Недвижимости, Аренде и Путешествиях отличаются. Чтобы вы могли познакомиться с двумя командами и выбрать подходящую, мы запустили Буткемп. 

В рамках этой программы сотрудник три недели проводит с командой Авто.ру, три недели — с командой Недвижимости и Аренды и три недели — с командой Путешествий, чтобы лучше понять процессы и подходы к разработке. Через девять недель Буткемпа вы сможете определиться, в какой команде вам интереснее и комфортнее работать.

Как будем общаться?
Этапы собеседования

Вас ждут 2 этапа интервью: секция-знакомство с базовыми техническими вопросами и расширенная секция с решением задач и написанием кода. После прохождения секций подробно обсудим наши продукты, проекты, стек, задачи и ответим на ваши вопросы.
  1. Техническое интервью по Zoom

На первом этапе мы задаем несколько несложных задач в Zoom, чтобы убедиться, что кандидат может писать код. Задачи без подвоха, но мы ждём, что кандидат знает, что такое сложность выполнения, выделение памяти и может это посчитать в написанном им же решении.

Примеры задач: пример 1, пример 2, пример 3.

Длительность: около 1 часа.
  1. Очное техническое собеседование

На втором этапе мы даём задачи, которые связаны с Android-фреймворком, чтобы увидеть, как кандидат пишет и как думает.
Пример задачи: написать XML и реализацию для какого-либо экрана.

1. Секция по написанию кода

2. Платформа

Длительность: 1,5 часа.
  1. Финальная очная встреча с тимлидами команд
На этой встрече мы рассказываем про себя, про наши проекты, задачи, стек, технологии и процессы. Спрашиваем про опыт, обсуждаем кейсы.  

Длительность: около 1 часа.
Фидбэк
Промежуточный фидбэк между этапами даём в среднем через неделю. Фидбэк после финального интервью — через 1–2 дня (иногда это занимает чуть больше времени).
  1. Согласование оффера
После успешного прохождения всех этапов мы запрашиваем
у кандидата контакты рекомендателей и запускаем процесс согласования оффера.

На первом этапе мы задаем несколько несложных задач в Zoom, чтобы убедиться, что кандидат может писать код. Задачи без подвоха, но мы ждём, что кандидат знает, что такое сложность выполнения, выделение памяти и может это посчитать в написанном им же решении.

Примеры задач: пример 1, пример 2, пример 3.

Длительность: около 1 часа.

Что мы предлагаем?

Удобный график и хорошая зарплата
Нам важен результат, а не время в офисе. Зарплату регулярно пересматриваем.
Социальный 
пакет
ДМС со стоматологией, оплата питания, скидки от компаний-партнёров и многое другое.
Мощное оборудование
Каждому сотруднику выдаём удобный ноутбук с нужной ему ОС.
Крутой офис в центре Москвы,  Санкт-Петербурга или Екатеринбурга
У нас комфортно работать и приятно находиться: переговорки, зоны для отдыха, игр и хобби, врач и массажист
в офисе. А ещё есть возможность работать из своего города удалённо.
Бесплатное 
обучение
Можно учиться на внутренних курсах Яндекса и участвовать в российских и международных конференциях.
Работа в сильной команде
У нас много нестандартных задач и культура экспериментов. Можно расти и развиваться.
Ресурсы для подготовки
LeetCode «Cracking the Coding Interview», Gayle Laakmann McDowell «Introduction to Algorythms», Thomas H. Cormen «Hackerank cracking coding interview»

Удачи!