Files
tinkoff-career/interview.md
2021-02-12 12:51:10 +03:00

156 lines
15 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: техническое собеседование
Техническое собеседование состоит из нескольких отдельных тем — секций. Созвон по каждой секции длится час и проходит в Zoom с отдельным интервьюером. Вы можете пройти все секции сразу или в течение нескольких дней — скажите рекрутеру, как удобнее.
Как проходить секции:
1. Подготовьте рабочее место: проверьте компьютер и интернет, подготовьте веб-камеру, возьмите пару листков бумаги и ручку. Рекомендуем выспаться и захватить бутылку воды.
2. Не используйте телефон: вы будете много кодить в онлайн-IDE, рисовать схемы и общаться с интервьюером.
3. Задавайте вопросы и предлагайте разные решения, даже если они кажутся неправильными: интервьюер проверяет не только знания, но и как вы подходите к решению задач.
Обычно нужно пройти 2—4 секции — это зависит от направления и вашего опыта. Точное количество вам скажет рекрутер.
### Направления и секции в Тинькофф
#### Backend-разработка
* [Алгоритмы](#Алгоритмы)
* [Секция по платформе или языку](#Секция-по-платформе-или-языку)
* [Дизайн распределенных систем](#Дизайн-распределенных-систем)
#### Frontend-разработка
* [Алгоритмы](#Алгоритмы)
* [Секция по платформе или языку](#Секция-по-платформе-или-языку)
#### SRE
* [Алгоритмы](#Алгоритмы)
* [Выявление и устранение проблем](#Выявление-и-устранение-проблем)
* [Дизайн распределенных систем](#Дизайн-распределенных-систем)
#### Машинное обучение
* [Алгоритмы](#Алгоритмы)
* [Дизайн распределенных систем](#Дизайн-распределенных-систем)
* [Секция по общему ML](#Секция-по-общему-ML)
* [Дизайн ML-систем](#Секция-по-дизайну-ML-систем)
### Материалы для подготовки к секциям
Рекомендуем ознакомиться с материалами до интервью: в них есть книги и курсы
#### Выявление и устранение проблем
Цель секции понять как вы мыслите в режиме неопределенности и стресса в сбойной ситуации. Каков Ваш опыт, как много приемов и инструментов поиска причин технических проблем вы знаете. Вам предложат описание архитектуры решения и наблюдаемые признаки сбоя (обращения пользователей или текст пришедшего алерта). Задавая вопросы интервьюверу, наподобие, "Вижу ли я в логах сообщения о такой то проблеме?", "Перезагружаю сервер, исчезла ли проблема?" Вы должны выявить исходную проблему в системе и предложить способы устранения и защиты от нее в дальнейшем.
#### Секция по платформе или языку
В рамках секции идет обсуждение различных аспектов платформ, фреймворков и различных языков программирования. Вопросы варьируются от реализации подходов к многопоточности, устройства памяти до взаимодействия с базой в определенном фреймворке. Язык и платформа выбираются исходя из Вашего опыта.
#### Алгоритмы
В рамках секции проверяем знания по алгоритмам и структурам данных. Иногда предлагаем решить задачу на реализацию, например сделать клиент с бизнес-логикой для сетевых API.
###### Рекомендуем повторить все, что связано с алгоритмами:
- основные структуры данных — строки, списки, деревья, ассоциативные массивы, векторы;
- базовые алгоритмы — поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование;
- понятие сложности алгоритмов. 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)
###### Книги:
- Алгоритмы. Построение и анализ / Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн
- Cracking the Coding Interview: 189 Programming Questions and Solutions / Gayle Laakmann McDowell
#### Дизайн распределенных систем
Обсуждаем, как проектировать распределенные системы. Во время секции предложим разработать дизайн системы по набору требований.
###### Сайты:
- [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 системы. Во время секции вам предложат систему, которую необходимо спроектировать. Можно выделить следующий общий дизайн решения: форматизация задачи и требований, декомопозиция на подзадачи, сбор данных, разбор 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) / Адам Елдаров
## Этап 3: знакомство с командой
После технической секции рекрутер подберет подходящие проекты и согласует созвон с командами. Обычно созвон длится час: ребята рассказывают про текущие проекты, отвечают на вопросы и спрашивают о вашем опыте, любимых задачах, увлечениях.
После созвона с вами свяжется рекрутер: скажите ему, в какой команде вы хотели бы работать.
## Этап 4: приглашение на работу
В течение нескольких дней мы вернемся с оффером. Если вам нравятся условия и команда, останется согласовать дату первого рабочего дня.
## Дополнение:
1. Рекрутер отвечает между этапами в течение трех дней, на финальное решение уходит чуть больше времени. Рекрутер на связи: вы можете связаться с ним, если нужно что-то уточнить.
2. В беседе с интервьюерами задавайте вопросы и предлагайте разные решения. Интервьюер проверяет не только знания, но и как вы подходите к решению задач.
3. Бывает так, что на каком-то этапе интервью мы отказываем кандидату. Отказ не влияет на отношение к кандидату: он может попробовать подать заявку через полгода, а если откроется подходящая вакансия, мы предложим варианты.
4. Если есть пожелания или что-то не понравилось, напишите нам: [apply@tinkoff.ru](mailto:apply@tinkoff.ru).