# 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).