Files
tinkoff-career/interview.md
Alexander Iskuskov bd6896796d fix typos
2021-11-05 18:51:04 +03:00

256 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-разработка
* [Алгоритмы](#Алгоритмы)
* [Секция по платформе или языку](#Секция-по-платформе-или-языку)
* [Системный дизайн](#Системный-дизайн) (для кандидатов senior-уровня)
#### SRE
* [Проверка общих инженерных компетенций](#Проверка-общих-инженерных-компетенций)
* [Выявление и устранение проблем](#Выявление-и-устранение-проблем)
* [Базовое программирование](#Базовое-программирование)
Для позиций с фокусом на разработку возможно проведение дополнительных секций:
* [Системный дизайн](#Системный-дизайн)
* [Алгоритмы](#Алгоритмы)
#### Машинное обучение
* [Алгоритмы](#Алгоритмы)
* [Секция по ML](#Секция-по-ML)
* [Дизайн ML-систем](#Секция-по-дизайну-ML-систем)
#### Тестирование производительности
В алгоритмической секции, по направлению тестирования производительности, используются задачи по кодированию уровня easy (leetcode), нацеленные на умение использовать простые структуры данных, а не на эффективную реализацию алгоритмов.
* [Алгоритмы](#Алгоритмы)
* [Секция по дизайну проектов тестирования производительности](#Секция-по-дизайну-проектов-тестирования-производительности)
### Материалы для подготовки к секциям
Рекомендуем ознакомиться с материалами до интервью: в них есть книги и курсы.
#### Выявление и устранение проблем
В этой секции кандидат вместе с интервьюером разыгрывают гипотетическу ситуацию критического отказа на production. Интервьюер играет роль этакого источника абсолютного знания о системе и происшествии, которому можно задавать вопросы и получать ответы. В рамках данной секции задача интервьюера оценить:
1) Насколько структурно и системно кандидат умеет двигаться по проблеме: от фактов к гипотезе, от гипотезы к эксперименту и от эксперименту к решению
2) Насколько быстро и эффективно кандидат способен разобраться в общих принципах построения системы, в проблемах которой необходимо разобраться. Достаточно ли у кандидата кругозора и опыта относительно типовых дизайнов распределенных систем? (Веб сервисов, АПИ, сервисов работы с состоянием и т.д.)
3) Как хорошо кандидат работает с данными - способен ли верно сформулировать полезные и эффективные для поиска аномалий запросы в телеметрические системы? Хорошо ли получается у кандидата интерпретировать полученные данные?
##### Книги:
- [The Site Reliability Workbook](https://sre.google/workbook/table-of-contents/)
- [Site Reliability Engineering](https://sre.google/sre-book/table-of-contents/)
##### Курсы:
- [Слерм SRE](https://slurm.io/sre)
##### Сайты:
- [Ультимативный сборник материалов по SRE-подготовке](https://github.com/mxssl/sre-interview-prep-guide)
#### Базовое программирование
Эта секция призвана проверить базовое владение навыками разработки у SRE специалистов. В отличии от секции алгоритмов или языковой мы не проверяем знание сложных алгоритмов или низкоуровневых особенностей работы с языковыми конструкциями/параллелизмом/памятью. От кандидатов ожидается:
- Уверенное владение синтаксисом, выбранного языка
- Базовое понимание того, как оценивается сложность алгоритмов / О-нотация
- Базовое знакомство с основными структурами данных / плюсом будет умение их имплементировать
В рамках собеседования кандидату могут быть предложены самые базовые задачи по алгоритмам/структурам данных или более практические/прикладные упражнения вроде имплементации несложного API или написания просто теста.
##### Сайты, которые помогают решать задачи:
- [LeetCode](https://leetcode.com/) - задачи сложности не выше Easy
##### Материалы для теоретической подготовки:
- [Подборка материалов по прогрраммированию для SRE](https://github.com/mxssl/sre-interview-prep-guide#programming)
#### Проверка общих инженерных компетенций
Секция представляет из себя небольшой опрос, в рамках которого интервьер проверяет знания кандидата по широкому набору тем связаных с архитектурой компьютерных систем и системной инженерией. Опросник включает, но не ограничивается:
- Linux
- Сети
- Принипы построения и концепции баз данных
- Протоколы
- Криптография
- Файловые системы
Вопросы могут предполагать как и односложный ответ, так и детальный рассказ, который интервьюер интерпретирует в виде бальной оценки, опираясь на степень погружения кандидата в тему. Важно отметить, что вопросы не включают в себя тем, касающихся конкретных инструментов и технологий (Docker, Ansible, CI/CD, etc) - мы считаем, что инженер, обладающий достаточной подготовкой, без труда освоит любые современные инструменты.
##### Книги для подготовки:
- Таненбаум Э. С., Бос Х. Современные операционные системы. (издание актуальное на момент подготовки)
- Таненбаум Э. С. Архитектура компьютера (издание актуальное на момент подготовки)
- Таненбаум Э. С., Уэзеролл Д. Компьютерные сети.
- Martin Kleppmann. Designing Data-Intensive Applications (для вопросов вокруг баз и хранения состояния)
##### Сайты для теоретической подготовки:
- [Подборка материалов по SRE](https://github.com/mxssl/sre-interview-prep-guide)
#### Секция по платформе или языку
В рамках секции идет обсуждение различных аспектов платформ, фреймворков и различных языков программирования. Вопросы варьируются от реализации подходов к многопоточности, устройства памяти до взаимодействия с базой в определенном фреймворке. Язык и платформа выбираются исходя из Вашего опыта.
#### Алгоритмы
В рамках секции проверяем знание алгоритмов и структур данных и умение их применять.
###### Рекомендуем повторить все, что связано с алгоритмами:
- основные структуры данных — строки, списки, деревья, ассоциативные массивы, векторы;
- базовые алгоритмы — поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование;
- понятие сложности алгоритмов, O-нотация.
###### Сайты, которые помогают решать задачи:
- [LeetCode](https://leetcode.com/)
- [HackerRank](https://www.hackerrank.com/)
- [Codeforces](https://codeforces.com/)
- [Topcoder](https://www.topcoder.com/)
- [Timus Online Judge](http://acm.timus.ru/)
###### Курсы:
- [Алгоритмы, часть I](https://www.coursera.org/learn/algorithms-part1)
- [Специализация «Структуры и алгоритмы данных»](https://www.coursera.org/specializations/data-structures-algorithms)
- [Лекции курса «Алгоритмы и структуры данных» от Тинькофф Образование](https://www.youtube.com/playlist?list=PLjCCarnDJNssC82zhyeg8BxfhPG3b8iZ2)
- [Конспекты по продвинутым алгоритмам и структурам данных](https://algorithmica.org/ru/)
###### Книги:
- Алгоритмы. Построение и анализ / Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн
- Cracking the Coding Interview: 189 Programming Questions and Solutions / Gayle Laakmann McDowell
#### Системный дизайн
Обсуждаем проектирование системы. Во время секции предложим Вам разработать дизайн системы по набору требований.
###### Как проходит секция
Вам будет предложен набор функциональных требований к системе. В течение часа Вам предстоит формализовать задачу, спроектировать API системы, оценить нагрузку и необходимые мощности, спроектировать модели и потоки данных.
В зависимости от направления Вашей деятельности, акцент может быть сделан на различные аспекты системы — например, на архитектуру веб-интерфейса в случае, если Вы — фронтенд-разработчик.
Для визуализации процесса проектирования используется онлайн-доска [Sketchboard](https://sketchboard.io). Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching.
###### Сайты:
- [System Design Primer](https://github.com/donnemartin/system-design-primer) — базовые темы и упражнения по дизайну систем, а также упражнения по объектно-ориентированному анализу и проектированию.
- [Architectural Katas](http://nealford.com/katas/) — множество примеров архитектурных задач.
###### Книги:
- Высоконагруженные приложения. Программирование, масштабирование, поддержка / Мартин Клеппман. В книге достаточно просто объясняют теорию
#### Секция по ML
Разбираем вопросы по анализу данных: о постановке задачи, выборе и обосновании метрик качества, сборе и валидации данных, ML-алгоритмах. Вопросы разбираем на теоретических и практических кейсах.
###### Сайты:
- [Elements of statistical learning](https://web.stanford.edu/~hastie/Papers/ESLII.pdf)
- [Pattern Recognition and Machine Learning](https://www.amazon.com/Pattern-Recognition-Learning-Information-Statistics/dp/0387310738)
- [Deep learning book, Goodfellow.](https://www.deeplearningbook.org/)
- [Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf)
- [Подборка блогов по машинному обучению](https://github.com/josephmisiti/awesome-machine-learning/blob/master/blogs.md)
###### Курсы:
- [Yandex Data School: Practical_DL](https://github.com/yandexdataschool/Practical_DL)
- [Yandex Data School: Practical_RL](https://github.com/yandexdataschool/Practical_RL)
- [Yandex Data School: NLP_course](https://github.com/yandexdataschool/nlp_course)
- [Catalyst Team: DL_course](https://github.com/catalyst-team/dl-course)
- [Joseph Misiti: awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning/blob/master/courses.md)
- [Специализация «Машинное обучение и анализ данных»](https://www.coursera.org/specializations/machine-learning-data-analysis)
###### Примеры вопросов по машинному обучению:
- [Quant notes](https://github.com/dingran/quant-notes)
- [Data science interview questions and answers](https://github.com/iamtodor/data-science-interview-questions-and-answers)
- [120 data science interview questions](https://github.com/kojino/120-Data-Science-Interview-Questions)
- [Data-science-interviews](https://github.com/alexeygrigorev/data-science-interviews)
###### Книги:
- Глубокое обучение. Погружение в мир нейронных сетей / Сергей Николенко, Артур Кадурин, Екатерина Архангельская
#### Секция по дизайну ML систем
Цель этой секции - обсудить подходы к проектированию и декомпозиции сложной ML системы. Во время секции Вам предложат систему, которую необходимо спроектировать. Можно выделить следующий общий дизайн решения: форматизация задачи и требований, декомопозиция на подзадачи, сбор данных, разбор ML архитектур для подзадач, деплой и тестирование итоговой системы.
###### Книги:
- Machine Learning Design Patterns / Valliappa Lakshmanan, Sara Robinson, Michael Munn [github](https://github.com/GoogleCloudPlatform/ml-design-patterns) [library](https://www.oreilly.com/library/view/machine-learning-design/9781098115777/) [youtube](https://youtu.be/udXjlvCFusc)
- [Deep Learning Design Patterns](https://www.manning.com/books/deep-learning-design-patterns) / Andrew Ferlitsch
###### Github:
- [Deep Learning In Production](https://github.com/ahkarami/Deep-Learning-in-Production)
- [Production Level Deep Learning](https://github.com/alirezadir/Production-Level-Deep-Learning)
###### Блоги:
- [Monitoring Machine Learning Models in Production](https://christophergs.com/machine%20learning/2020/03/14/how-to-monitor-machine-learning-models/)
###### Доклады:
- [Как в YouDo машинное обучение катится в продакшен](https://www.youtube.com/watch?v=F-j0G0lrjFw&feature=youtu.be) / Адам Елдаров
#### Секция по дизайну проектов тестирования производительности
Разбираем вопросы, связанные с планированием проектов тестирования производительности, обсуждаем различные подходы на примере определённой архитектуры.
Предложим спроектировать проект по набору входных требований. Поговорим про мониторинг, инструменты управления инфраструктурой, необходимую документацию и анализ производительности систем.
###### Книги:
- [Systems Performance 2nd Edition](https://www.amazon.com/Systems-Performance-Brendan-Gregg/dp/0136820158/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=deirdrestraug-20&linkId=815ef3388ba65b674f4f8fd582713f24&language=en_US) / Brendan D. Gregg
- [The Art of Application Performance Testing, 2nd Edition](https://www.oreilly.com/library/view/the-art-of/9781491900536/) / Ian Molyneaux
- [Foundation Level Specialist Syllabus Performance Testing](https://www.istqb.org/documents/ISTQB%20CTFL-PT%20Syllabus%202018%20GA.pdf) / ISTQB
- [Глоссарий терминов тестирования RSTQB](https://www.rstqb.org/ru/istqb-downloads.html?file=files/content/rstqb/downloads/ISTQB%20Downloads/ISTQB%20Глоссарий%20Терминов%20Тестирования%202.3.pdf) / RSTQB
###### Github:
- [Qa Load Telegram Community](https://qaload.github.io/)
- [Awesome Gatling Github Page](https://github.com/aliesbelik/awesome-gatling)
###### Блоги:
- [Brendan Gregg's Blog](http://www.brendangregg.com/overview.html)
- [Denis Bakhvalov's Blog](https://easyperf.net/notes/)
###### Доклады:
- [Воркшоп (часть 1). Встраивание в CI тестирования производительности](https://youtu.be/2wWiud1A7BM) / Сергей Чепкасов (Tinkoff.ru)
- [Воркшоп (часть 2). Встраивание в CI тестирования производительности](https://youtu.be/vbM7lRXLFD8) / Максим Рогожников (Tinkoff.ru)
- [Честное перформанс-тестирование](https://youtu.be/8Mzs3arFGZo) / Дмитрий Пивоваров (ZeroTurnaround) [RU]
- [Сложности performance-тестирования](https://youtu.be/am94iI2assY) / Андрей Акиньшин (JetBrains) [RU]
- [Анализируем перформанс с пользой для себя и окружающих](https://youtu.be/jZ0quqA1Fn8) / Андрей Акиньшин (JetBrains) [RU]
- [Учимся анализировать результаты нагрузочного тестирования](https://youtu.be/gws7L3EaeC0) / Алексей Лавренюк [RU]
- [Performance testing of microservices in action](https://youtu.be/c1xu7W7bqKc) / Alexander Kachur, Ukraine [RU]
## Этап 3: знакомство с командой
После технической секции рекрутер подберет подходящие проекты и согласует созвон с командами. Обычно созвон длится полчаса: ребята рассказывают про текущие проекты, отвечают на вопросы и спрашивают о Вашем опыте, любимых задачах, увлечениях. Таких созвонов будет не более трёх.
После созвона с Вами свяжется рекрутер: скажите ему, в какой команде Вы хотели бы работать.
## Этап 4: приглашение на работу
В течение нескольких дней мы вернемся с оффером. Если Вам понравятся условия и команда, останется согласовать дату первого рабочего дня.
## Дополнение:
1. Рекрутер отвечает между этапами в течение трех дней, на финальное решение уходит чуть больше времени. Рекрутер на связи: Вы можете связаться с ним, если нужно что-то уточнить.
2. В беседе с интервьюерами задавайте вопросы и предлагайте разные решения. Интервьюер проверяет не только знания, но и как Вы подходите к решению задач.
3. Бывает так, что на каком-то этапе интервью мы отказываем кандидату. Отказ не влияет на отношение к кандидату: он может попробовать подать заявку через полгода, а если откроется подходящая вакансия, мы предложим варианты.
4. Если есть пожелания или что-то не понравилось, напишите нам: [interview_issues@tinkoff.ru](mailto:interview_issues@tinkoff.ru).