Files
tinkoff-career/interview.md
2021-10-25 16:03:24 +03:00

25 KiB
Raw Blame History

IT-собеседование в Тинькофф

Рассказываем, как подготовиться к собеседованию на IT-вакансию: https://www.tinkoff.ru/career/it/

Этапы собеседования

  1. Предварительное собеседование.
  2. Техническое собеседование.
  3. Знакомство с командой.
  4. Приглашение на работу.

Этап 1: предварительное собеседование

Вы откликнулись на вакансию и отправили резюме — через некоторое время с Вами свяжется рекрутер и проведет предварительное собеседование.

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

Рекрутер запомнит направление и проекты, над которыми хотите работать. В течение двух дней он свяжется с Вами и согласует время для технического собеседования.

Этап 2: техническое собеседование

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

Как проходить секции:

  1. Подготовьте рабочее место: проверьте компьютер и интернет, подготовьте веб-камеру, возьмите пару листков бумаги и ручку. Рекомендуем выспаться и захватить бутылку воды.
  2. Не используйте для созвона телефон: Вы будете много кодить в онлайн-IDE, рисовать схемы и общаться с интервьюером.
  3. Задавайте вопросы и предлагайте разные решения, даже если они кажутся неправильными: интервьюер проверяет не только знания, но и как Вы подходите к решению задач. Обычно нужно пройти 2—4 секции — это зависит от направления и Вашего опыта. Точное количество Вам скажет рекрутер.

Направления и секции в Тинькофф

Backend-разработка

Frontend-разработка

SRE

Для позиций с фокусом на разработку возможно проведение дополнительных секций:

Машинное обучение

Тестирование производительности

В алгоритмической секции, по направлению тестирования производительности, используются задачи по кодированию уровня easy (leetcode), нацеленные на умение использовать простые структуры данных, а не на эффективную реализацию алгоритмов.

Материалы для подготовки к секциям

Рекомендуем ознакомиться с материалами до интервью: в них есть книги и курсы.

Выявление и устранение проблем

В этой секции кандидат вместе с интервьюером разыгрывают гипотетическу ситуацию критического отказа на production. Интервьюер играет роль этакого источника абсолютного знания о системе и происшествии, которому можно задавать вопросы и получать ответы. В рамках данной секции задача интервьюера оценить:

  1. На сколько структурно и системно кандидат умеет двигаться по проблеме: от фактов к гипотезе, от гипотезы к эксперименту и от эксперименту к решению
  2. На сколько быстро и эффективно кандидат способен разобраться в общих принципах построения системы, в проблемах которой необходимо разобраться. Достаточно ли у кандидата кругозора и опыта относительно типовых дизайнов распределенных систем? (Веб сервисов, АПИ, сервисов работы с состоянием и т.д.)
  3. Как хорошо кандидат работает с данными - способен ли верно сформулировать полезные и эффективные для поиска аномалий запросы в телеметрические системы? Хорошо ли получается у кандидата интерпретировать полученные данные?
Книги:
Курсы:
Сайты:

Базовое программирование

Эта секция призвана проверить базовое владение навыками разработки у SRE специалистов. В отличии от секции алгоритмов или языковой мы не проверяем знание сложных алгоритмов или низкоуровневых особенностей работы с языковыми конструкциями/параллелизмом/памятью. От кандидатов ожидается:

  • Уверенное владение синтаксисом, выбранного языка
  • Бзовое понимание того, как оценивается сложность алгоритмов / О-нотация
  • Базовое знакомство с основными структурами данных / плюсом будет умение их имплементировать

В рамках собеседования кандидату могут быть предложены самые базовые задачи по алгоритмам/структурам данных или более практические/прикладные упражнения вроде имплементации несложного API или написания просто теста.

Сайты, которые помогают решать задачи:
  • LeetCode - задачи сложности не выше Easy
Материалы для теоретической подготовки:

Проверка общих инженерных компетенций

Секция представляет из себя небольшой опрос, в рамках которого интервьер проверяет знания кандидата по широкому набору тем связаных с архитектурой компьютерных систем и системной инженерией. Опросник включает, но не ограничивается:

  • Linux
  • Сети
  • Принипы построения и концепции баз данных
  • Протоколы
  • Криптография
  • Файловые системы

Вопросы могу предполагать как и односложный ответ, так и детальный рассказ, который интервьюер интерпретирует в виде бальной оценки, опираясь на степень погружения кандидата в тему. Важно отметить, что вопросы не включают в себя тем, касающихся конкретных инструментов и технологий (Docker, Ansible, CI/CD, etc) - мы считаем, что инженер, обладающий достаточной подготовкой без труда освоит любые современные инструменты.

Книги для подготовки:
  • Таненбаум Э. С., Бос Х. Современные операционные системы. (издание актуальное на момент подготовки)
  • Таненбаум Э. С. Архитектура компьютера (издание актуальное на момент подготовки)
  • Таненбаум Э. С., Уэзеролл Д. Компьютерные сети.
  • Martin Kleppmann. Designing Data-Intensive Applications (для вопросов вокруг баз и хранения состояния)
Сайты для теоретической подготовки:

Секция по платформе или языку

В рамках секции идет обсуждение различных аспектов платформ, фреймворков и различных языков программирования. Вопросы варьируются от реализации подходов к многопоточности, устройства памяти до взаимодействия с базой в определенном фреймворке. Язык и платформа выбираются исходя из Вашего опыта.

Алгоритмы

В рамках секции проверяем знание алгоритмов и структур данных и умение их применять.

Рекомендуем повторить все, что связано с алгоритмами:
  • основные структуры данных — строки, списки, деревья, ассоциативные массивы, векторы;
  • базовые алгоритмы — поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование;
  • понятие сложности алгоритмов, O-нотация.
Сайты, которые помогают решать задачи:
Курсы:
Книги:
  • Алгоритмы. Построение и анализ / Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн
  • Cracking the Coding Interview: 189 Programming Questions and Solutions / Gayle Laakmann McDowell

Системный дизайн

Обсуждаем проектирование системы. Во время секции предложим Вам разработать дизайн системы по набору требований.

Как проходит секция

Вам будет предложен набор функциональных требований к системе. В течение часа Вам предстоит формализовать задачу, спроектировать API системы, оценить нагрузку и необходимые мощности, спроектировать модели и потоки данных.

В зависимости от направления Вашей деятельности, акцент может быть сделан на различные аспекты системы — например, на архитектуру веб-интерфейса в случае, если Вы — фронтенд-разработчик.

Для визуализации процесса проектирования используется онлайн-доска Sketchboard. Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching.

Сайты:
  • System Design Primer — базовые темы и упражнения по дизайну систем, а также упражнения по объектно-ориентированному анализу и проектированию.
  • Architectural Katas — множество примеров архитектурных задач.
Книги:
  • Высоконагруженные приложения. Программирование, масштабирование, поддержка / Мартин Клеппман. В книге достаточно просто объясняют теорию

Секция по ML

Разбираем вопросы по анализу данных: о постановке задачи, выборе и обосновании метрик качества, сборе и валидации данных, ML-алгоритмах. Вопросы разбираем на теоретических и практических кейсах.

Сайты:
Курсы:
Примеры вопросов по машинному обучению:
Книги:
  • Глубокое обучение. Погружение в мир нейронных сетей / Сергей Николенко, Артур Кадурин, Екатерина Архангельская

Секция по дизайну ML систем

Цель этой секции - обсудить подходы к проектированию и декомпозиции сложной ML системы. Во время секции Вам предложат систему, которую необходимо спроектировать. Можно выделить следующий общий дизайн решения: форматизация задачи и требований, декомопозиция на подзадачи, сбор данных, разбор ML архитектур для подзадач, деплой и тестирование итоговой системы.

Книги:
Github:
Блоги:
Доклады:

Секция по дизайну проектов тестирования производительности

Разбираем вопросы, связанные с планированием проектов тестирования производительности, обсуждаем различные подходы на примере определённой архитектуры. Предложим спроектировать проект по набору входных требований. Поговорим про мониторинг, инструменты управления инфраструктурой, необходимую документацию и анализ производительности систем.

Книги:
Github:
Блоги:
Доклады:

Этап 3: знакомство с командой

После технической секции рекрутер подберет подходящие проекты и согласует созвон с командами. Обычно созвон длится полчаса: ребята рассказывают про текущие проекты, отвечают на вопросы и спрашивают о Вашем опыте, любимых задачах, увлечениях. Таких созвонов будет не более трёх.

После созвона с Вами свяжется рекрутер: скажите ему, в какой команде Вы хотели бы работать.

Этап 4: приглашение на работу

В течение нескольких дней мы вернемся с оффером. Если Вам понравятся условия и команда, останется согласовать дату первого рабочего дня.

Дополнение:

  1. Рекрутер отвечает между этапами в течение трех дней, на финальное решение уходит чуть больше времени. Рекрутер на связи: Вы можете связаться с ним, если нужно что-то уточнить.
  2. В беседе с интервьюерами задавайте вопросы и предлагайте разные решения. Интервьюер проверяет не только знания, но и как Вы подходите к решению задач.
  3. Бывает так, что на каком-то этапе интервью мы отказываем кандидату. Отказ не влияет на отношение к кандидату: он может попробовать подать заявку через полгода, а если откроется подходящая вакансия, мы предложим варианты.
  4. Если есть пожелания или что-то не понравилось, напишите нам: interview_issues@tinkoff.ru.