Prettified Code!

This commit is contained in:
Tom910
2022-08-01 12:35:54 +00:00
committed by GitHub Action
parent 138127fa1c
commit 938e677001
16 changed files with 158 additions and 99 deletions

View File

@@ -3,6 +3,7 @@
Рассказываем, как подготовиться к собеседованию на IT-вакансию: https://www.tinkoff.ru/career/it/
## Этапы собеседования
1. Предварительное собеседование.
2. Техническое собеседование.
3. Знакомство с командой.
@@ -17,60 +18,72 @@
Рекрутер запомнит направление и проекты, над которыми хотите работать. В течение двух дней он свяжется с Вами и согласует время для технического собеседования.
## Этап 2: техническое собеседование
Техническое собеседование состоит из нескольких отдельных тем — секций. Созвон по каждой секции длится 1-1.5 часа и проходит в Zoom с отдельным интервьюером. Вы можете пройти все секции сразу или в течение нескольких дней — скажите рекрутеру, как удобнее.
Как проходить секции:
1. Подготовьте рабочее место: проверьте компьютер и интернет, подготовьте веб-камеру, возьмите пару листков бумаги и ручку. Рекомендуем выспаться и захватить бутылку воды.
2. Не используйте для созвона телефон: Вы будете много кодить в онлайн-IDE, рисовать схемы и общаться с интервьюером.
3. Задавайте вопросы и предлагайте разные решения, даже если они кажутся неправильными: интервьюер проверяет не только знания, но и как Вы подходите к решению задач.
Обычно нужно пройти 2—4 секции — это зависит от направления и Вашего опыта. Точное количество Вам скажет рекрутер.
Обычно нужно пройти 2—4 секции — это зависит от направления и Вашего опыта. Точное количество Вам скажет рекрутер.
### Направления и секции в Тинькофф
#### Backend-разработка
* [Секция по платформе или языку](./sections/platform-backend.md)
* [Секция программирования](./sections/programming.md)
* [Системный дизайн](./sections/system-design-backend.md)
- [Секция по платформе или языку](./sections/platform-backend.md)
- [Секция программирования](./sections/programming.md)
- [Системный дизайн](./sections/system-design-backend.md)
#### Frontend-разработка
* [Секция по Web платформе и фреймворкам](./sections/platform-web.md)
* [Секция программирования](./sections/programming.md)
* [Архитектурная секция](./sections/system-design-web.md) (для кандидатов уровня middle+ и выше)
- [Секция по Web платформе и фреймворкам](./sections/platform-web.md)
- [Секция программирования](./sections/programming.md)
- [Архитектурная секция](./sections/system-design-web.md) (для кандидатов уровня middle+ и выше)
#### SRE
* [Проверка общих инженерных компетенций](./sections/platform-sre.md)
* [Выявление и устранение проблем](./sections/platform-sre-find-fix-problem.md)
* [Базовое программирование](./sections/programming-basic.md)
- [Проверка общих инженерных компетенций](./sections/platform-sre.md)
- [Выявление и устранение проблем](./sections/platform-sre-find-fix-problem.md)
- [Базовое программирование](./sections/programming-basic.md)
Для позиций с фокусом на разработку возможно проведение дополнительных секций:
* [Системный дизайн](./sections/system-design-backend.md)
* [Секция программирования](./sections/programming.md)
- [Системный дизайн](./sections/system-design-backend.md)
- [Секция программирования](./sections/programming.md)
#### Машинное обучение
* [Секция программирования](./sections/programming.md)
* [Секция по ML](./sections/platform-ml.md)
* [Дизайн ML-систем](./sections/system-design-ml.md)
- [Секция программирования](./sections/programming.md)
- [Секция по ML](./sections/platform-ml.md)
- [Дизайн ML-систем](./sections/system-design-ml.md)
#### Quality Assurance (QA Fullstack)
* [Профильная секция тестирования (backend, mobile, web)](./sections/platform-qa.md)
* [Теория и практика QA](./sections/platform-qa-theory-and-practice.md)
* [Программирование для QA](./sections/programming-basic.md)
- [Профильная секция тестирования (backend, mobile, web)](./sections/platform-qa.md)
- [Теория и практика QA](./sections/platform-qa-theory-and-practice.md)
- [Программирование для QA](./sections/programming-basic.md)
#### Тестирование производительности
В секции программирования, по направлению тестирования производительности, используются задачи по кодированию уровня easy (leetcode), нацеленные на умение использовать простые структуры данных, а не на эффективную реализацию алгоритмов.
* [Программирование для QA](./sections/programming-basic.md)
* [Секция по дизайну проектов тестирования производительности](./sections/system-design-perfomance-testing.md)
- [Программирование для QA](./sections/programming-basic.md)
- [Секция по дизайну проектов тестирования производительности](./sections/system-design-perfomance-testing.md)
## Этап 3: знакомство с командой
После технической секции рекрутер подберет подходящие проекты и согласует созвон с командами. Обычно созвон длится полчаса: ребята рассказывают про текущие проекты, отвечают на вопросы и спрашивают о Вашем опыте, любимых задачах, увлечениях. Таких созвонов будет не более трёх.
После созвона с Вами свяжется рекрутер: скажите ему, в какой команде Вы хотели бы работать.
## Этап 4: приглашение на работу
В течение нескольких дней мы вернемся с оффером. Если Вам понравятся условия и команда, останется согласовать дату первого рабочего дня.
## Дополнение:
1. Рекрутер отвечает между этапами в течение трех дней, на финальное решение уходит чуть больше времени. Рекрутер на связи: Вы можете связаться с ним, если нужно что-то уточнить.
2. В беседе с интервьюерами задавайте вопросы и предлагайте разные решения. Интервьюер проверяет не только знания, но и как Вы подходите к решению задач.
3. Бывает так, что на каком-то этапе интервью мы отказываем кандидату. Отказ не влияет на отношение к кандидату: он может попробовать подать заявку через полгода, а если откроется подходящая вакансия, мы предложим варианты.

View File

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

View File

@@ -3,7 +3,9 @@
Разбираем вопросы по анализу данных: о постановке задачи, выборе и обосновании метрик качества, сборе и валидации данных, 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/)
@@ -11,6 +13,7 @@
- [Подборка блогов по машинному обучению](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)
@@ -19,10 +22,12 @@
- [Специализация «Машинное обучение и анализ данных»](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)
### Книги:
- Глубокое обучение. Погружение в мир нейронных сетей / Сергей Николенко, Артур Кадурин, Екатерина Архангельская

View File

@@ -3,6 +3,7 @@
Общаемся на основополагающие темы в области обеспечения качества, документирования дефектов, стратегий проверки функционала.
### Книги:
- Agile-тестирование. Обучающий курс для всей команды. Грегори Джанет, Криспин Лиза
- A Practitioners Guide to Software Test Design”. Lee Copeland
- Testing Computer Software. Сэм Канер, Джек Фолк, Енг Кек Нгуен
- Agile-тестирование. Обучающий курс для всей команды. Грегори Джанет, Криспин Лиза
- A Practitioners Guide to Software Test Design”. Lee Copeland
- Testing Computer Software. Сэм Канер, Джек Фолк, Енг Кек Нгуен

View File

@@ -3,4 +3,5 @@
Нам важно понять, что специализация кандидата совпадает с нашим потребностями в конкретной предметной области и кандидат обладает специфическими знаниями из предметных областей.
### Книги:
- Hands-On Mobile App Testing: A Guide for Mobile Testers and Anyone Involved in the Mobile App Business
- Hands-On Mobile App Testing: A Guide for Mobile Testers and Anyone Involved in the Mobile App Business

View File

@@ -2,20 +2,25 @@
В этой секции кандидат вместе с интервьюером разыгрывают гипотетическую ситуацию критического отказа на production. Интервьюер играет роль этакого источника абсолютного знания о системе и происшествии, которому можно задавать вопросы и получать ответы. В рамках данной секции задача интервьюера оценить:
1) Насколько структурно и системно кандидат умеет двигаться по проблеме: от фактов к гипотезе, от гипотезы к эксперименту и от эксперимента к решению
2) Насколько быстро и эффективно кандидат способен разобраться в общих принципах построения системы, в проблемах которой необходимо разобраться. Достаточно ли у кандидата кругозора и опыта относительно типовых дизайнов распределенных систем? (Веб сервисов, АПИ, сервисов работы с состоянием и т.д.)
3) Как хорошо кандидат работает с данными - способен ли верно сформулировать полезные и эффективные для поиска аномалий запросы в телеметрические системы? Хорошо ли получается у кандидата интерпретировать полученные данные?
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:
- [Собеседование SRE: Troubleshooting и System Design](https://apolomodov.medium.com/troubleshooting-interview-3690b40a3d77)

View File

@@ -12,11 +12,14 @@
Вопросы могут предполагать как и односложный ответ, так и детальный рассказ, который интервьюер интерпретирует в виде бальной оценки, опираясь на степень погружения кандидата в тему. Важно отметить, что вопросы не включают в себя тем, касающихся конкретных инструментов и технологий (Docker, Ansible, CI/CD, etc) - мы считаем, что инженер, обладающий достаточной подготовкой, без труда освоит любые современные инструменты.
## Материалы для подготовки
### Книги для подготовки:
- Таненбаум Э. С., Бос Х. Современные операционные системы. (издание актуальное на момент подготовки)
- Таненбаум Э. С. Архитектура компьютера (издание актуальное на момент подготовки)
- Таненбаум Э. С., Уэзеролл Д. Компьютерные сети.
- Martin Kleppmann. Designing Data-Intensive Applications (для вопросов вокруг баз и хранения состояния)
### Сайты для теоретической подготовки:
- [Подборка материалов по SRE](https://github.com/mxssl/sre-interview-prep-guide)

View File

@@ -1,6 +1,7 @@
# Секция по Web платформе
## Как проходит секция
В рамках секции идет обсуждение различных аспектов Web платформы и фреймворков. Также на секции проверяем знание JavaScript.
На собеседованиях мы стараемся не задавать абстрактных теоретических вопросов. Вместо этого мы предлагаем решить несколько практических задач. Для лайвкодинга мы будем использовать сервис https://codeinterview.io/ — online-IDE с возможностью запуска кода в онлайне. Шаринг экрана не потребуется.
@@ -8,6 +9,7 @@
Продолжительность секции — 90 минут.
## Этапы секции
Собеседование состоит из двух частей:
1. [Общие вопросы по Web платформе и JavaScript](#javascript)

View File

@@ -9,18 +9,24 @@
Кандидату будут предложены самые базовые задачи по алгоритмам/структурам данных или более практические/прикладные упражнения вроде имплементации несложного API или написания простого теста.
## Пример задачи
Даны три неубывающих массива чисел. Найти число, которое присутствует во всех трех массивах.
```
Input: [1,2,4,5], [3,3,4], [2,3,4,5,6]
Output: 4
```
## Материалы для подготовки
### Сайты, которые помогают решать задачи:
- [LeetCode](https://leetcode.com/) - задачи сложности не выше Easy
### Материалы для теоретической подготовки:
- [Подборка материалов по программированию для SRE](https://github.com/mxssl/sre-interview-prep-guide#programming)
### Книги
- Чистый код. Создание анализ и рефакторинг. Мартин Роберт К.

View File

@@ -3,20 +3,26 @@
В рамках секции мы проверяем умение мыслить и искать решения для абстрактных задач, способность ясно выражать свои мысли в коде, знание базовых алгоритмов и структур данных, умение оценивать сложность полученного решения.
## Материалы для подготовки
### Рекомендуем повторить все, что связано с алгоритмами:
- основные структуры данных — строки, списки, деревья, ассоциативные массивы, векторы;
- базовые алгоритмы — поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование;
- понятие сложности алгоритмов, O-нотация.
### Пример задачи
Даны три неубывающих массива чисел. Найти число, которое присутствует во всех трех массивах.
```
Input: [1,2,4,5], [3,3,4], [2,3,4,5,6]
Output: 4
```
Целевое решение работает за O(p + q + r), где p, q, r длины массивов, доп. память O(1), но эту информацию интервьюер не сообщает.
### Сайты, которые помогают решать задачи:
- [LeetCode](https://leetcode.com/)
- [HackerRank](https://www.hackerrank.com/)
- [Codeforces](https://codeforces.com/)
@@ -24,11 +30,13 @@ Output: 4
- [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

View File

@@ -3,6 +3,7 @@
Обсуждаем проектирование системы. Во время секции предложим Вам разработать дизайн системы по набору требований.
## Как проходит секция
Вам будет предложен набор функциональных требований к системе. В течение часа Вам предстоит формализовать задачу, спроектировать API системы, оценить нагрузку и необходимые мощности, спроектировать модели и потоки данных.
Для визуализации процесса проектирования используется онлайн-доска [Sketchboard](https://sketchboard.io). Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching.
@@ -12,10 +13,12 @@
## Материалы для подготовки
### Сайты:
- [System Design Primer](https://github.com/donnemartin/system-design-primer) — базовые темы и упражнения по дизайну систем, а также упражнения по объектно-ориентированному анализу и проектированию.
- [Architectural Katas](http://nealford.com/katas/) — множество примеров архитектурных задач.
- [System Design Interview и как к ним подготовиться](https://apolomodov.medium.com/preparation-for-system-design-interview-66489d7a0af6) - описание ожиданий от позиций и дополнительные материалы, которые помогут подготовиться
- [Публичное System Design Interview на конференции C++ Russia 2022](https://apolomodov.medium.com/example-of-system-design-interview-7790a5569207) - интервью по системному дизайну, которое мы провели для того, чтобы показать как оно может выглядеть
### Книги:
- Высоконагруженные приложения. Программирование, масштабирование, поддержка / Мартин Клеппман. В книге достаточно просто объясняют теорию

View File

@@ -5,15 +5,19 @@
## Материалы для подготовки
### Книги:
- 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) / Адам Елдаров

View File

@@ -1,23 +1,28 @@
# Секция по дизайну проектов тестирования производительности
Разбираем вопросы, связанные с планированием проектов тестирования производительности, обсуждаем различные подходы на примере определённой архитектуры.
Предложим спроектировать проект по набору входных требований. Поговорим про мониторинг, инструменты управления инфраструктурой, необходимую документацию и анализ производительности систем.
## Материалы для подготовки
### Книги:
- [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
- [Глоссарий терминов тестирования 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](https://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]

View File

@@ -1,5 +1,7 @@
# Архитектура веб-приложений
## Как проходит секция
Данную секцию мы проводим для разработчиков уровня middle+ и выше. Цель интервью — узнать твой опыт проектирования и сопровождения веб-приложений, а также твои способности решать задачи связанные с проектированием систем.
Для визуализации процесса проектирования используется онлайн-доска [Sketchboard](https://sketchboard.io). Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching. К сожалению, у данного сервиса нет демо-версии, но если хочется познакомиться с подобными инструментами поближе, можно попробовать [excalidraw.com](https://excalidraw.com/) — он очень близок по функциональности. Шаринг экрана не потребуется.
@@ -9,19 +11,21 @@
Продолжительность секции — 60 минут.
## Этапы секции
В ходе интервью тебе будет будет предложен набор функциональных требований к системе. Тебе нужно будет:
* Формализовать задачу: уточнить требования, выяснить основные сценарии работы системы. Что требуется от системы? В каких условиях будет существовать система?
* Наглядно описать компоненты системы и их взаимодействие между собой: схематически изобразить компоненты, показать связи между ними. Схема должна наглядно показывать, какие системы будут использованы для того, чтобы пользователь мог увидеть результат в браузере. При этом нет необходимости глубоко погружаться в бекенд.
* Спроектировать компонентную структуру фронтового приложения, формализовать API, спроектировать модель данных. По итогу должно быть понятно, как, где и какие данные хранятся и передаются между фронтовым приложением и бекендом.
* Идем глубже:
* Оценить узкие места в системе, рассказать, какие оптимизации можно применить для снижения нагрузки на бекенд, для ускорения доставки данных до клиента, для улучшения performance-метрик.
* Критически оценить систему на предмет безопасности, убедиться, что закрыты все основные уязвимости.
* Прочие моменты — UX, a11y, i18n, поддержка различных устройств и так далее.
- Формализовать задачу: уточнить требования, выяснить основные сценарии работы системы. Что требуется от системы? В каких условиях будет существовать система?
- Наглядно описать компоненты системы и их взаимодействие между собой: схематически изобразить компоненты, показать связи между ними. Схема должна наглядно показывать, какие системы будут использованы для того, чтобы пользователь мог увидеть результат в браузере. При этом нет необходимости глубоко погружаться в бекенд.
- Спроектировать компонентную структуру фронтового приложения, формализовать API, спроектировать модель данных. По итогу должно быть понятно, как, где и какие данные хранятся и передаются между фронтовым приложением и бекендом.
- Идем глубже:
- Оценить узкие места в системе, рассказать, какие оптимизации можно применить для снижения нагрузки на бекенд, для ускорения доставки данных до клиента, для улучшения performance-метрик.
- Критически оценить систему на предмет безопасности, убедиться, что закрыты все основные уязвимости.
- Прочие моменты — UX, a11y, i18n, поддержка различных устройств и так далее.
Как правило, часа не хватает для того, чтобы полностью и всеобъемлюще обсудить задачу — это нормально.
## Материалы для подготовки
- Для практики можно разобрать типичные сайты средних/крупных компаний, например, tinkoff.ru, youtube.com, web.telegram.com и другие. Попробуй дайть ответы на следующие вопросы:
- Как устроен такой сайт?
- Какие системы участвуют в том, чтобы конечный пользователь увидел сайт и смог и воспользоваться?