├── .gitignore ├── tinkoff-growth ├── images │ └── tinkoff-growth-main-steps.png └── README.md ├── interview ├── sections │ ├── platform-backend.md │ ├── platform-qa.md │ ├── platform-qa-theory-and-practice.md │ ├── platform-sre.md │ ├── system-design-ml.md │ ├── programming-basic.md │ ├── platform-sre-find-fix-problem.md │ ├── programming.md │ ├── platform-ml.md │ ├── system-design-web.md │ ├── system-design-perfomance-testing.md │ ├── system-design-backend.md │ └── platform-web.md └── README.md ├── README.md ├── .github └── workflows │ └── linter.yml └── CONTRIBUTING.md /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE 2 | .DS_Store 3 | .vscode 4 | .idea 5 | -------------------------------------------------------------------------------- /tinkoff-growth/images/tinkoff-growth-main-steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tinkoff/career/HEAD/tinkoff-growth/images/tinkoff-growth-main-steps.png -------------------------------------------------------------------------------- /interview/sections/platform-backend.md: -------------------------------------------------------------------------------- 1 | # Секция по платформе или языку 2 | 3 | В рамках секции идет обсуждение различных аспектов платформ, фреймворков и различных языков программирования. Вопросы варьируются от реализации подходов к многопоточности, устройства памяти до взаимодействия с базой в определенном фреймворке. Язык и платформа выбираются исходя из Вашего опыта. 4 | -------------------------------------------------------------------------------- /interview/sections/platform-qa.md: -------------------------------------------------------------------------------- 1 | # Профильная секция тестирования (backend, mobile, web) 2 | 3 | Нам важно понять, что специализация кандидата совпадает с нашим потребностями в конкретной предметной области и кандидат обладает специфическими знаниями из предметных областей. 4 | 5 | ### Книги: 6 | 7 | - Hands-On Mobile App Testing: A Guide for Mobile Testers and Anyone Involved in the Mobile App Business 8 | -------------------------------------------------------------------------------- /interview/sections/platform-qa-theory-and-practice.md: -------------------------------------------------------------------------------- 1 | # Теория и практика QA 2 | 3 | Общаемся на основополагающие темы в области обеспечения качества, документирования дефектов, стратегий проверки функционала. 4 | 5 | ### Книги: 6 | 7 | - Agile-тестирование. Обучающий курс для всей команды. Грегори Джанет, Криспин Лиза 8 | - A Practitioner’s Guide to Software Test Design”. Lee Copeland 9 | - Testing Computer Software. Сэм Канер, Джек Фолк, Енг Кек Нгуен 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Привет! Ты зашел в репозиторий, который содержит публичную информацию о внутренней кухне Тинькофф, и о том, что тебя ждет во время интервью. 2 | 3 | ## Что такое Тинькофф? 4 | 5 | Тинькофф - это IT-компания, которая предоставляет множество продуктов клиентам в разных странах. Примеры продуктов: банковское направление, инвестиции, услуги для бизнеса, страхование, тревел, мобильная связь, голосовые помощники, внутренние продукты и множество других проектов. В то же время Тинькофф работает не только в России, но еще и в других странах 6 | 7 | ## Список разделов в репозитории 8 | 9 | - [ИТ-собеседования в Тинькофф](interview) 10 | - [Тинькофф рост - как происходит повышение роли сотрудников](tinkoff-growth) 11 | - [Список текущих вакансий в компании](https://www.tinkoff.ru/career/it/) 12 | -------------------------------------------------------------------------------- /.github/workflows/linter.yml: -------------------------------------------------------------------------------- 1 | name: linter 2 | 3 | # Controls when the action will run. 4 | on: 5 | # Triggers the workflow on push or pull request events but only for the main branch 6 | push: 7 | branches: [ main ] 8 | pull_request: 9 | branches: [ main ] 10 | 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | 14 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 15 | jobs: 16 | # This workflow contains a single job called "build" 17 | lint: 18 | # The type of runner that the job will run on 19 | runs-on: ubuntu-latest 20 | 21 | # Steps represent a sequence of tasks that will be executed as part of the job 22 | steps: 23 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 24 | - uses: actions/checkout@v3 25 | with: 26 | # Make sure the actual branch is checked out when running on pull requests 27 | ref: ${{ github.head_ref }} 28 | fetch-depth: 0 29 | 30 | - name: Install npm v8 31 | run: npm i -g npm@8 32 | 33 | - name: Prettier Action 34 | uses: creyD/prettier_action@v4.2 35 | with: 36 | prettier_options: --write **/*.{js,md} 37 | dry: true 38 | 39 | -------------------------------------------------------------------------------- /interview/sections/platform-sre.md: -------------------------------------------------------------------------------- 1 | # Проверка общих инженерных компетенций 2 | 3 | Секция представляет из себя небольшой опрос, в рамках которого интервьюер проверяет знания кандидата по широкому набору тем связанных с архитектурой компьютерных систем и системной инженерией. Опросник включает, но не ограничивается: 4 | 5 | - Linux 6 | - Сети 7 | - Принципы построения и концепции баз данных 8 | - Протоколы 9 | - Криптография 10 | - Файловые системы 11 | 12 | Вопросы могут предполагать как и односложный ответ, так и детальный рассказ, который интервьюер интерпретирует в виде бальной оценки, опираясь на степень погружения кандидата в тему. Важно отметить, что вопросы не включают в себя тем, касающихся конкретных инструментов и технологий (Docker, Ansible, CI/CD, etc) - мы считаем, что инженер, обладающий достаточной подготовкой, без труда освоит любые современные инструменты. 13 | 14 | ## Материалы для подготовки 15 | 16 | ### Книги для подготовки: 17 | 18 | - Таненбаум Э. С., Бос Х. Современные операционные системы. (издание актуальное на момент подготовки) 19 | - Таненбаум Э. С. Архитектура компьютера (издание актуальное на момент подготовки) 20 | - Таненбаум Э. С., Уэзеролл Д. Компьютерные сети. 21 | - Martin Kleppmann. Designing Data-Intensive Applications (для вопросов вокруг баз и хранения состояния) 22 | 23 | ### Сайты для теоретической подготовки: 24 | 25 | - [Подборка материалов по SRE](https://github.com/mxssl/sre-interview-prep-guide) 26 | -------------------------------------------------------------------------------- /interview/sections/system-design-ml.md: -------------------------------------------------------------------------------- 1 | # Секция по дизайну ML систем 2 | 3 | Цель этой секции - обсудить подходы к проектированию и декомпозиции сложной ML системы. Во время секции Вам предложат систему, которую необходимо спроектировать. Можно выделить следующий общий дизайн решения: форматизация задачи и требований, декомопозиция на подзадачи, сбор данных, разбор ML архитектур для подзадач, деплой и тестирование итоговой системы. 4 | 5 | ## Материалы для подготовки 6 | 7 | ### Книги: 8 | 9 | - 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) 10 | - [Deep Learning Design Patterns](https://www.manning.com/books/deep-learning-design-patterns) / Andrew Ferlitsch 11 | 12 | ### Github: 13 | 14 | - [Deep Learning In Production](https://github.com/ahkarami/Deep-Learning-in-Production) 15 | - [Production Level Deep Learning](https://github.com/alirezadir/Production-Level-Deep-Learning) 16 | 17 | ### Блоги: 18 | 19 | - [Monitoring Machine Learning Models in Production](https://christophergs.com/machine%20learning/2020/03/14/how-to-monitor-machine-learning-models/) 20 | 21 | ### Доклады: 22 | 23 | - [Как в YouDo машинное обучение катится в продакшен](https://www.youtube.com/watch?v=F-j0G0lrjFw&feature=youtu.be) / Адам Елдаров 24 | -------------------------------------------------------------------------------- /interview/sections/programming-basic.md: -------------------------------------------------------------------------------- 1 | # Секция базового программирования в Тинькофф 2 | 3 | Эта секция призвана проверить базовое владение навыками разработки у SRE/QA специалистов. В отличие от секции алгоритмов или языковой мы не проверяем знание сложных алгоритмов или низкоуровневых особенностей работы с языковыми конструкциями/параллелизмом/памятью. От кандидатов ожидается: 4 | 5 | - Уверенное владение синтаксисом выбранного языка 6 | - Базовое понимание того, как оценивается сложность алгоритмов / О-нотация 7 | - Базовое знакомство с основными структурами данных / плюсом будет умение их имплементировать 8 | 9 | Кандидату будут предложены самые базовые задачи по алгоритмам/структурам данных или более практические/прикладные упражнения вроде имплементации несложного API или написания простого теста. 10 | 11 | ## Пример задачи 12 | 13 | Даны три неубывающих массива чисел. Найти число, которое присутствует во всех трех массивах. 14 | 15 | ``` 16 | Input: [1,2,4,5], [3,3,4], [2,3,4,5,6] 17 | Output: 4 18 | ``` 19 | 20 | ## Материалы для подготовки 21 | 22 | ### Сайты, которые помогают решать задачи: 23 | 24 | - [LeetCode](https://leetcode.com/) - задачи сложности не выше Easy 25 | 26 | ### Материалы для теоретической подготовки: 27 | 28 | - [Подборка материалов по программированию для SRE](https://github.com/mxssl/sre-interview-prep-guide#programming) 29 | 30 | ### Книги 31 | 32 | - Чистый код. Создание анализ и рефакторинг. Мартин Роберт К. 33 | -------------------------------------------------------------------------------- /interview/sections/platform-sre-find-fix-problem.md: -------------------------------------------------------------------------------- 1 | # Выявление и устранение проблем 2 | 3 | В этой секции кандидат вместе с интервьюером разыгрывают гипотетическую ситуацию критического отказа на production. Интервьюер играет роль этакого источника абсолютного знания о системе и происшествии, которому можно задавать вопросы и получать ответы. В рамках данной секции задача интервьюера оценить: 4 | 5 | 1. Насколько структурно и системно кандидат умеет двигаться по проблеме: от фактов к гипотезе, от гипотезы к эксперименту и от эксперимента к решению 6 | 2. Насколько быстро и эффективно кандидат способен разобраться в общих принципах построения системы, в проблемах которой необходимо разобраться. Достаточно ли у кандидата кругозора и опыта относительно типовых дизайнов распределенных систем? (Веб сервисов, АПИ, сервисов работы с состоянием и т.д.) 7 | 3. Как хорошо кандидат работает с данными - способен ли верно сформулировать полезные и эффективные для поиска аномалий запросы в телеметрические системы? Хорошо ли получается у кандидата интерпретировать полученные данные? 8 | 9 | ## Материалы для подготовки 10 | 11 | ### Книги: 12 | 13 | - [The Site Reliability Workbook](https://sre.google/workbook/table-of-contents/) 14 | - [Site Reliability Engineering](https://sre.google/sre-book/table-of-contents/) 15 | 16 | ### Курсы: 17 | 18 | - [Слерм SRE](https://slurm.io/sre) 19 | 20 | ### Сайты: 21 | 22 | - [Ультимативный сборник материалов по SRE-подготовке](https://github.com/mxssl/sre-interview-prep-guide) 23 | 24 | ### Выступления про наш процесс найма SRE: 25 | 26 | - [Собеседование SRE: Troubleshooting и System Design](https://apolomodov.medium.com/troubleshooting-interview-3690b40a3d77) 27 | -------------------------------------------------------------------------------- /interview/sections/programming.md: -------------------------------------------------------------------------------- 1 | # Секция программирования в Тинькофф 2 | 3 | В рамках секции мы проверяем умение мыслить и искать решения для абстрактных задач, способность ясно выражать свои мысли в коде, знание базовых алгоритмов и структур данных, умение оценивать сложность полученного решения. 4 | 5 | ## Материалы для подготовки 6 | 7 | ### Рекомендуем повторить все, что связано с алгоритмами: 8 | 9 | - основные структуры данных — строки, списки, деревья, ассоциативные массивы, векторы; 10 | - базовые алгоритмы — поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование; 11 | - понятие сложности алгоритмов, O-нотация. 12 | 13 | ### Пример задачи 14 | 15 | Даны три неубывающих массива чисел. Найти число, которое присутствует во всех трех массивах. 16 | 17 | ``` 18 | Input: [1,2,4,5], [3,3,4], [2,3,4,5,6] 19 | Output: 4 20 | ``` 21 | 22 | Целевое решение работает за O(p + q + r), где p, q, r – длины массивов, доп. память O(1), но эту информацию интервьюер не сообщает. 23 | 24 | ### Сайты, которые помогают решать задачи: 25 | 26 | - [LeetCode](https://leetcode.com/) 27 | - [HackerRank](https://www.hackerrank.com/) 28 | - [Codeforces](https://codeforces.com/) 29 | - [Topcoder](https://www.topcoder.com/) 30 | - [Timus Online Judge](http://acm.timus.ru/) 31 | 32 | ### Курсы: 33 | 34 | - [Алгоритмы, часть I](https://www.coursera.org/learn/algorithms-part1) 35 | - [Специализация «Структуры и алгоритмы данных»](https://www.coursera.org/specializations/data-structures-algorithms) 36 | - [Лекции курса «Алгоритмы и структуры данных» от Тинькофф Образование](https://www.youtube.com/playlist?list=PLjCCarnDJNssC82zhyeg8BxfhPG3b8iZ2) 37 | - [Конспекты по продвинутым алгоритмам и структурам данных](https://algorithmica.org/ru/) 38 | 39 | ### Книги: 40 | 41 | - Алгоритмы. Построение и анализ / Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн 42 | - Cracking the Coding Interview: 189 Programming Questions and Solutions / Gayle Laakmann McDowell 43 | -------------------------------------------------------------------------------- /interview/sections/platform-ml.md: -------------------------------------------------------------------------------- 1 | # Секция по ML 2 | 3 | Разбираем вопросы по анализу данных: о постановке задачи, выборе и обосновании метрик качества, сборе и валидации данных, ML-алгоритмах. Вопросы разбираем на теоретических и практических кейсах. 4 | 5 | ## Материалы для подготовки 6 | 7 | ### Сайты: 8 | 9 | - [Elements of statistical learning](https://web.stanford.edu/~hastie/Papers/ESLII.pdf) 10 | - [Pattern Recognition and Machine Learning](https://www.amazon.com/Pattern-Recognition-Learning-Information-Statistics/dp/0387310738) 11 | - [Deep learning book, Goodfellow.](https://www.deeplearningbook.org/) 12 | - [Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf) 13 | - [Подборка блогов по машинному обучению](https://github.com/josephmisiti/awesome-machine-learning/blob/master/blogs.md) 14 | 15 | ### Курсы: 16 | 17 | - [Yandex Data School: Practical_DL](https://github.com/yandexdataschool/Practical_DL) 18 | - [Yandex Data School: Practical_RL](https://github.com/yandexdataschool/Practical_RL) 19 | - [Yandex Data School: NLP_course](https://github.com/yandexdataschool/nlp_course) 20 | - [Catalyst Team: DL_course](https://github.com/catalyst-team/dl-course) 21 | - [Joseph Misiti: awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning/blob/master/courses.md) 22 | - [Специализация «Машинное обучение и анализ данных»](https://www.coursera.org/specializations/machine-learning-data-analysis) 23 | 24 | ### Примеры вопросов по машинному обучению: 25 | 26 | - [Quant notes](https://github.com/dingran/quant-notes) 27 | - [Data science interview questions and answers](https://github.com/iamtodor/data-science-interview-questions-and-answers) 28 | - [120 data science interview questions](https://github.com/kojino/120-Data-Science-Interview-Questions) 29 | - [Data-science-interviews](https://github.com/alexeygrigorev/data-science-interviews) 30 | 31 | ### Книги: 32 | 33 | - Глубокое обучение. Погружение в мир нейронных сетей / Сергей Николенко, Артур Кадурин, Екатерина Архангельская 34 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Внесение изменений в документы 2 | 3 | > Принимаются корректировки опечаток 4 | 5 | - Зарегистрируйтесь на [GitHub](https://github.com/) (если вы еще этого не сделали). 6 | 7 | - Откройте в браузере документ, в который собираетесь внести изменения (например [этот](https://github.com/Tinkoff/career/blob/main/interview/README.md)) 8 | 9 | - Нажмите кнопку редактирования ![кнопку редактирования](http://s.csssr.ru/U2Y7B7QMD/chrome_2021-01-27_11-37-34.png) 10 | 11 | - В открышемся редакторе внесите изменения в файл. Вы всегда можете переключиться между режимом редактирования и предпросмотра кнопками `Edit File` и `Preview Changes` 12 | 13 | > Для написания документов используется облегченный язык разметки [Markdown](https://ru.wikipedia.org/wiki/Markdown). Если Вы с ним не знакомы, ознакомьтесь со специальным [руководством](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) 14 | 15 | - Создайте новую [ветку](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#ветки), дайте ей название и отправьте [изменения](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#коммиты): 16 | 17 | ![](http://s.csssr.ru/U2Y7B7QMD/chrome_2021-01-27_12-00-37.png) 18 | 19 | - На открывшейся странице нажмите `Create pull request`, после чего создастся запрос на изменение. В рамках запроса будет проведена автоматическая [проверка](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#markdown-style) корректности получившейся разметки и доступности всех ссылок. После [подтверждения](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#подтверждение) запроса [изменения](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#релиз-изменений) попадут в основную ветку и будут доступны всем. 20 | 21 | ## Оформление запросов на изменение 22 | 23 | ### Ветки 24 | 25 | Ветки желательно создавать от `main`, в названии ветки укажите файл, в который вносятся изменения. 26 | 27 | ### Коммиты 28 | 29 | В описании к коммиту желательно указать краткое резюме о вносимых изменениях. 30 | 31 | ## Markdown Style 32 | 33 | Все документы проверяются на существование всех присутствующих ссылок при помощи [markdown-link-check](https://github.com/tcort/markdown-link-check). Проверка происходит при создании Pull Request'а в ветку main, информация о ходе проверки и о её результатах выводится на странице Pull Request'a 34 | 35 | ### Если проверка не прошла 36 | 37 | Необходимо проверить все ссылки в изменяемом документе, если хотя бы одна ведёт на несуществующий сайт, проверка не выполнится. 38 | 39 | ## Подтверждение 40 | 41 | Чтобы изменения вступили в силу, их должен проверить и одобрить [Игорь Маслов](https://github.com/MaslovIgor) или [Юлия Царева](https://github.com/YuliaTsareva). 42 | 43 | ## Релиз изменений 44 | 45 | Происходит автоматически после подтверждения изменений и их попадания в ветку `main` 46 | -------------------------------------------------------------------------------- /interview/sections/system-design-web.md: -------------------------------------------------------------------------------- 1 | # Архитектура веб-приложений 2 | 3 | ## Как проходит секция 4 | 5 | Данную секцию мы проводим для разработчиков уровня middle+ и выше. Цель интервью — узнать твой опыт проектирования и сопровождения веб-приложений, а также твои способности решать задачи связанные с проектированием систем. 6 | 7 | Для визуализации процесса проектирования используется онлайн-доска [Sketchboard](https://sketchboard.io). Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching. К сожалению, у данного сервиса нет демо-версии, но если хочется познакомиться с подобными инструментами поближе, можно попробовать [excalidraw.com](https://excalidraw.com/) — он очень близок по функциональности. Шаринг экрана не потребуется. 8 | 9 | Постарайся записывать или схематически зарисовывать (если это возможно) всё, что говоришь вслух. 10 | 11 | Продолжительность секции — 60 минут. 12 | 13 | ## Этапы секции 14 | 15 | В ходе интервью тебе будет будет предложен набор функциональных требований к системе. Тебе нужно будет: 16 | 17 | - Формализовать задачу: уточнить требования, выяснить основные сценарии работы системы. Что требуется от системы? В каких условиях будет существовать система? 18 | - Наглядно описать компоненты системы и их взаимодействие между собой: схематически изобразить компоненты, показать связи между ними. Схема должна наглядно показывать, какие системы будут использованы для того, чтобы пользователь мог увидеть результат в браузере. При этом нет необходимости глубоко погружаться в бекенд. 19 | - Спроектировать компонентную структуру фронтового приложения, формализовать API, спроектировать модель данных. По итогу должно быть понятно, как, где и какие данные хранятся и передаются между фронтовым приложением и бекендом. 20 | - Идем глубже: 21 | - Оценить узкие места в системе, рассказать, какие оптимизации можно применить для снижения нагрузки на бекенд, для ускорения доставки данных до клиента, для улучшения performance-метрик. 22 | - Критически оценить систему на предмет безопасности, убедиться, что закрыты все основные уязвимости. 23 | - Прочие моменты — UX, a11y, i18n, поддержка различных устройств и так далее. 24 | 25 | Как правило, часа не хватает для того, чтобы полностью и всеобъемлюще обсудить задачу — это нормально. 26 | 27 | ## Материалы для подготовки 28 | 29 | - Для практики можно разобрать типичные сайты средних/крупных компаний, например, tinkoff.ru, youtube.com, web.telegram.com и другие. Попробуй дайть ответы на следующие вопросы: 30 | - Как устроен такой сайт? 31 | - Какие системы участвуют в том, чтобы конечный пользователь увидел сайт и смог и воспользоваться? 32 | - С какими вызовами могли столкнуться разработчики сайта? Часто можно найти доклады, в которых непосредственные разработчики сайта рассказывают о своем проекте, и как он устроен. 33 | - На какие слои и компоненты разделен сам сайт? Что сделано для того, чтобы его просто было поддерживать? 34 | - [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/ru/front-end-system-design/) — сайт с описанием похожего формата собеседований, много ссылок на полезные статьи и материалы 35 | - [Front-End Engineer](https://www.youtube.com/channel/UC6YpkaZsAcAvPNt4rLiS7dg) - канал с разбором базовых задач и описанием формата 36 | - Книга "Чистая архитектура. Искусство разработки программного обеспечения | Мартин Роберт" 37 | -------------------------------------------------------------------------------- /interview/sections/system-design-perfomance-testing.md: -------------------------------------------------------------------------------- 1 | # Секция по дизайну проектов тестирования производительности 2 | 3 | Разбираем вопросы, связанные с планированием проектов тестирования производительности, обсуждаем различные подходы на примере определённой архитектуры. 4 | Предложим спроектировать проект по набору входных требований. Поговорим про мониторинг, инструменты управления инфраструктурой, необходимую документацию и анализ производительности систем. 5 | 6 | ## Материалы для подготовки 7 | 8 | ### Книги: 9 | 10 | - [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 11 | - [The Art of Application Performance Testing, 2nd Edition](https://www.oreilly.com/library/view/the-art-of/9781491900536/) / Ian Molyneaux 12 | - [Глоссарий терминов тестирования RSTQB](https://www.rstqb.org/ru/istqb-downloads.html?file=files/content/rstqb/downloads/ISTQB%20Downloads/ISTQB%20Глоссарий%20Терминов%20Тестирования%202.3.pdf) / RSTQB 13 | 14 | ### Github: 15 | 16 | - [Qa Load Telegram Community](https://qaload.github.io/) 17 | - [Awesome Gatling Github Page](https://github.com/aliesbelik/awesome-gatling) 18 | - [Awesome k6 Github Page](https://github.com/grafana/awesome-k6) 19 | 20 | ### Блоги: 21 | 22 | - [Brendan Gregg's Blog](https://www.brendangregg.com/overview.html) 23 | - [Denis Bakhvalov's Blog](https://easyperf.net/notes/) 24 | 25 | ### Доклады: 26 | 27 | - [Наши космические пути](https://www.youtube.com/watch?v=xxv83JfyuAg&ab_channel=IT%27sTinkoff) / Ахальцев Иоанн (Tinkoff.ru) [RU] 28 | - [Как сделать простое НТ, если никогда его не делал?](https://dump-ekb.ru/kak-sdelat-prostoe-nt-esli-nikogda-ego-ne-delal) / Максим Рогожников (Tinkoff.ru) [RU] 29 | - [Нагружаем банки](https://www.youtube.com/watch?v=129pEryyHQY&t=3s&ab_channel=Heisenbug) / Максим Рогожников (Tinkoff.ru) и Смирнов Вячеслав (ВТБ) [RU] 30 | - [Воркшоп (часть 1). Встраивание в CI тестирования производительности](https://youtu.be/2wWiud1A7BM) / Сергей Чепкасов (Tinkoff.ru) [RU] 31 | - [Воркшоп (часть 2). Встраивание в CI тестирования производительности](https://youtu.be/vbM7lRXLFD8) / Максим Рогожников (Tinkoff.ru) [RU] 32 | - [Честное перформанс-тестирование](https://youtu.be/8Mzs3arFGZo) / Дмитрий Пивоваров (ZeroTurnaround) [RU] 33 | - [Сложности performance-тестирования](https://youtu.be/am94iI2assY) / Андрей Акиньшин (JetBrains) [RU] 34 | - [Анализируем перформанс с пользой для себя и окружающих](https://youtu.be/jZ0quqA1Fn8) / Андрей Акиньшин (JetBrains) [RU] 35 | - [Учимся анализировать результаты нагрузочного тестирования](https://youtu.be/gws7L3EaeC0) / Алексей Лавренюк [RU] 36 | - [Performance testing of microservices in action](https://youtu.be/c1xu7W7bqKc) / Alexander Kachur, Ukraine [RU] 37 | 38 | ### Статьи 39 | 40 | - [Введение в Gatling](https://habr.com/ru/company/tinkoff/blog/655341/) 41 | - [Использование Gatling. Разбираемся в тестировании HTTP](https://habr.com/ru/company/tinkoff/blog/658479/) 42 | - [Использование Gatling. Разбираемся в тестировании JDBC](https://habr.com/ru/company/tinkoff/blog/663718/) 43 | - [Использование Gatling. Разбираемся в тестировании gRPC](https://habr.com/ru/company/tinkoff/blog/664674/) 44 | - [Использование Gatling. Разбираемся в тестировании kafka](https://habr.com/ru/company/tinkoff/blog/666886/) 45 | - [Использование Gatling. Разбираемся в тестировании AMQP](https://habr.com/ru/company/tinkoff/blog/670768/) 46 | - [Анализ результатов нагрузочного тестирования](https://habr.com/ru/company/tinkoff/blog/514314/) 47 | -------------------------------------------------------------------------------- /interview/sections/system-design-backend.md: -------------------------------------------------------------------------------- 1 | # Секция системного дизайна в Тинькофф 2 | 3 | Обсуждаем проектирование системы. Во время секции предложим Вам разработать дизайн системы по набору требований. 4 | 5 | ## Как проходит секция 6 | 7 | Вам будет предложен набор функциональных требований к системе. В течение часа Вам предстоит формализовать задачу, спроектировать API системы, оценить нагрузку и необходимые мощности, спроектировать модели и потоки данных. 8 | 9 | Для визуализации процесса проектирования вам предоставят ссылку на онлайн-доску, такую как Miro, Sketchboard, Excalidraw. 10 | 11 | Один из наших сотрудников [выступил](https://www.youtube.com/watch?v=Cth-B4r_pf4) на конференции ArchDays 2021 с докладом "Дизайн секции как проверка навыков проектирования систем на собеседованиях", в котором он подробно рассказал про то, как выглядит интервью по дизайну систем, что на нем оценивается и зачем все это надо. Расшифровка выступления доступна в [статье](https://tellmeabout.tech/system-design-interview-at-tinkoff-7bd97c20d082) на Medium. 12 | 13 | ## Материалы для подготовки 14 | 15 | ### Сайты: 16 | 17 | - [System Design Primer](https://github.com/donnemartin/system-design-primer) — базовые темы и упражнения по дизайну систем, а также упражнения по объектно-ориентированному анализу и проектированию. 18 | - [Architectural Katas](http://nealford.com/katas/) — множество примеров архитектурных задач. 19 | - [System Design Interview и как они оцениваются](https://tellmeabout.tech/preparation-for-system-design-interview-66489d7a0af6) - описание ожиданий от кандидатов на разные уровни проектирования, шаблон задачи и материалы для самобучения 20 | - [Публичное System Design Interview на конференции C++ Russia 2022](https://tellmeabout.tech/example-of-system-design-interview-7790a5569207) - интервью по системному дизайну на проектирование Youtube. Это открытое собеседование похоже на то, как мы проводим свои собеседования кандидатов 21 | - [Публичное System Design Interview на конференции ArchDays 2022](https://tellmeabout.tech/public-system-design-interview-at-archdays-2022-2a7ea02175af) - интервью по системному дизайну на проектирование системы бронирования номеров в отелях. Это открытое собеседование похоже на то, как мы проводим свои собеседования кандидатов 22 | 23 | - [Как подготовиться и пройти System Design Interview](https://tellmeabout.tech/how-to-prepare-for-and-pass-the-system-design-interview-78b820589e8) - описание фреймворка прохождения System Design Interview, ожиданий на каждом шаге, от сбора требований до масштабирования под нагрузку. И самое приятное - материалы для самообучения для каждого из шагов в рамках этого фреймворка 24 | 25 | ### Книги: 26 | 27 | - Wiegers "Software Requirements. Third Edition" - про требования к ПО 28 | - Eyskens "Software Architecture for Busy Developers" - про trade-offs в архитектуре 29 | - Tannenbaum "Computer Networks" - про компьютерные сети и как система связана с пользователям, а ее компоненты между собой 30 | - Tannenbaum "Distributed Systems" - классика по распределенным системам и тому, зачем они нужны и как с ними быть 31 | - Hohpe "Enterprise Integration Patterns" - классика про подходы к интеграции приложений между собой 32 | - Kleppmann "Designing Data-Intensive Applications" - классика про приложения, интенсивно работающие с данными 33 | - Khononov ""Learning DDD"" - про подход к пониманию того, а что ПО собственно делает и как разделить зоны ответственности 34 | - Petrov "Database Internals" - про то, как работают базы данных 35 | - Ibryam "K8s Patterns" - про орекстрацию рабочих нагрузок (преимущественно stateless) 36 | - Google "Building secure and reliable systems" - про то, как проектировать надежные и безопасные системы и дальше с ними жить долго и счастливо 37 | - Google "SRE Book" - про подходы к эксплуатации систем и обеспечению их надежности 38 | - Google "SRE Workbook" - про подходы к эксплуатации систем и обеспечению их надежности 39 | -------------------------------------------------------------------------------- /interview/sections/platform-web.md: -------------------------------------------------------------------------------- 1 | # Секция по Web платформе 2 | 3 | ## Как проходит секция 4 | 5 | В рамках секции идет обсуждение различных аспектов Web платформы и фреймворков. Также на секции проверяем знание JavaScript. 6 | 7 | На собеседованиях мы стараемся не задавать абстрактных теоретических вопросов. Вместо этого мы предлагаем решить несколько практических задач. Для лайвкодинга мы будем использовать сервис https://codeinterview.io/ — online-IDE с возможностью запуска кода в онлайне. Шаринг экрана не потребуется. 8 | 9 | Продолжительность секции — 90 минут. 10 | 11 | ## Этапы секции 12 | 13 | Собеседование состоит из двух частей: 14 | 15 | 1. [Общие вопросы по Web платформе и JavaScript](#javascript) 16 | 2. Вопросы по фреймворку, на котором специализируется кандидат. В Тинькофф используются два основных стека: 17 | 1. [Angular](#angular) 18 | 2. [React](#react) 19 | 20 | В конце собеседования у тебя будет время, чтобы пообщаться с интервьюером и задать свои вопросы. Фидбек по секции, как правило, предоставляется уже после собеседования через рекрутера. 21 | 22 | ## Материалы для подготовки 23 | 24 | ### Javascript 25 | 26 | 1. [Современный учебник JavaScript](https://learn.javascript.ru/). Состоит из трех больших частей: 27 | 1. Язык JavaScript. 28 | 1. Браузер: документ, события, интерфейсы. 29 | 1. Тематические разделы. Содержат важные темы, например, про сетевые запросы и хранение данных в браузере. 30 | 2. [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS). Серия книг про deep diving в JS. 31 | 3. [Asynchronous JavaScript](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous) 32 | 33 | ### Angular 34 | 35 | В рамках обсуждения Angular часть задач будет посвящена знанию RxJS. 36 | 37 | 1. [Официальная документация](https://angular.io/docs) 38 | 2. Change Detection: 39 | - [NgZone](https://angular.io/guide/zone) 40 | - [Все, что вам нужно знать об обнаружении изменений в Angular](https://habr.com/ru/post/327004/) 41 | - [Faster Angular Applications](https://blog.mgechev.com/2017/11/11/faster-angular-applications-onpush-change-detection-immutable-part-1/) 42 | 3. Dependency Injection: 43 | - [Dependency injection in Angular](https://angular.io/guide/dependency-injection) 44 | - [Что можно положить в механизм Dependency Injection в Angular?](https://habr.com/ru/company/tinkoff/blog/516622/) 45 | - [Возможности Angular DI, о которых почти ничего не сказано в документации](https://habr.com/ru/company/tinkoff/blog/523160/) 46 | - [Используем DI в Angular по максимуму — концепция частных провайдеров](https://habr.com/ru/company/tinkoff/blog/507906/) 47 | - [Глобальные объекты в Angular](https://habr.com/ru/company/tinkoff/blog/548510/) 48 | 4. RxJS: 49 | - [Learn RxJS](https://www.learnrxjs.io/) 50 | - [RxJS Subjects](https://aalexeev239.github.io/rxjs-subjects/) 51 | - [Strongbrew: Примеры решения практических задач](https://blog.strongbrew.io/tag/RxJS/) 52 | - [Hot vs Cold Observables](https://benlesh.medium.com/hot-vs-cold-observables-f8094ed53339#.8x9uam5rg) 53 | 54 | ### React 55 | 56 | 1. [Официальная документация](https://reactjs.org/docs/getting-started.html) 57 | 1. [React as a UI Runtime](https://overreacted.io/react-as-a-ui-runtime/) 58 | 1. [Index as a key is an anti-pattern](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318) 59 | 1. [React Fiber Architecture](https://github.com/acdlite/react-fiber-architecture) - здесь неплохо написано про reconciliation в целом, часть про детали реализации (fiber) опциональна. 60 | 1. [React events in depth w/ Kent C. Dodds, Ben Alpert, & Dan Abramov](https://www.youtube.com/watch?v=dRo_egw7tBc) 61 | 1. [Getting to know React DOM's event handling system inside out](https://medium.com/the-guild/getting-to-know-react-doms-event-handling-system-inside-out-378c44d2a5d0) 62 | 1. [Новый контекст React в деталях](https://blog.csssr.ru/2018/04/06/new-react-context) 63 | -------------------------------------------------------------------------------- /tinkoff-growth/README.md: -------------------------------------------------------------------------------- 1 | # Процесс повышение роли сотрудника 2 | 3 | Тинькофф использует общий процесс для повышения роли сотрудника. Это позволяет понять инженеру, что ему нужно, чтобы повысить свою роль и какие у нас есть ожидания от роли инженера. 4 | 5 | ## Зачем появился Тинькофф рост 6 | 7 | До появления этого фреймворка не было общедоступного процесса для руководителей/лидов которые бы включали текущие HR инструменты и практики по развитию сотрудников. Лиды команд тратили большое количество времени, чтобы разработать свою систему роста сотрудников и донести для всех. Как итог - в среднем лидам не хватало времени, а текущие готовые HR инструменты использовались мало. Тратилось время лидов и сотрудников, не давая взамен результата, поскольку инструменты использовались формально. Тинькофф рост был сделан для решения этих проблем, так и для того, чтобы сделать процесс прозрачным и понятным как для инженеров, так и лидов. 8 | 9 | ## Основные инструменты 10 | 11 | - Матрицы уровней - описание наших ожиданий от роли сотрудника, при этом учитывая большой набор качеств, например - уровень влияние, сложность закрытых задач/проектов, коммуникации, дополнительные активности и множество других факторов 12 | - One-to-One - в рамках этого процесса, позволяет помогать сотруднику с выполнением новых задач со следующего уровня, так и давать фидбек 13 | - Сервис для подачи заявки - внутренний сервис в котором сотрудники могу сами оставить заявку на повышение 14 | - Держатели профессии - группа инженеров которые ответственны за развитие стека внутри компании. Занимаются улучшением комьюнити, процессов собеседований, так и разбором заявок на повышения 15 | 16 | ## Процесс 17 | 18 | ![Картинка процесса](images/tinkoff-growth-main-steps.png) 19 | 20 | ### Шаг 0 21 | 22 | 0 шаг самый продолжительный в этом процессе, когда сотрудник постепенно прокачивается, выполняя необходимые требования с текущего уровня и со следующего уровня. При этом, у сотрудника остается возможность остановиться на своем уровне и не идти выше, все это происходит по желанию сотрудника 23 | 24 | - Сотрудник вместе с лидом смотрят на матрицы уровней и вместе планируют необходимые задачи и активности 25 | - Лид корректирует и помогает сотруднику выполнять задачи 26 | - Происходит постепенный переход к следующей роли, без созданий стрессовых ситуаций когда резко прилетают все обязанности и требования от следующего уровня 27 | 28 | Этот этап заканчивается, когда сотрудник уже выполняет 50%+ требований от следующего уровня и сам готов к повышению 29 | 30 | ### Шаг 1 31 | 32 | Сотрудник составляет кейс по себе, где отражает задачи/проекты/активности которые показывают, что уже выполняется 50%+ от новой роли 33 | 34 | - Сотрудник заходит в сервис заявок. Создает новую заявку на повышение роли. Описывает задачи/проекты/активности смотря на матрицу уровней и отправляет заявку на ревью лиду 35 | - Лид ревьюит заявку на повышение, помогает улучшить оформление или добавляет дополнительных пунктов. И переводит заявку на следующий этап 36 | - Собираются отзывы по заявке от других сотрудников 37 | 38 | Этот этап заканчивается, когда заявка полностью оформлена и по ней собраны отзывы 39 | 40 | ### Шаг 2 41 | 42 | Заявка переходит на этап, на котором рассматривается сама заявка, так и проводится по процессам 43 | 44 | - Заявка попадает на держателей профессии, которые калибруют заявку относительно других направлений и нашего понимания, кто должен быть на определенном уровне 45 | - Происходит голосование по заявке и выносится итоговое решение + пишется фидбек 46 | - Заявка попадает к HRBP, которые проводят заявку по процессам, договориваются о изменениях и каждый квартал изменения вносятся в систему 47 | 48 | ### Шаг 3 49 | 50 | Заявка уже имеет итоговый результат 51 | 52 | - Решение приходит к руководителю, который может задать дополнительные вопросы 53 | - Лид собирает встречу с сотрудником, при необходимости приглашая держателей профессии 54 | - Результат оглашается сотруднику 55 | -------------------------------------------------------------------------------- /interview/README.md: -------------------------------------------------------------------------------- 1 | # IT-собеседование в Тинькофф 2 | 3 | Рассказываем, как подготовиться к собеседованию на IT-вакансию: https://www.tinkoff.ru/career/it/ 4 | 5 | ## Этапы собеседования 6 | 7 | 1. Предварительное собеседование. 8 | 2. Техническое собеседование. 9 | 3. Знакомство с командой. 10 | 4. Приглашение на работу. 11 | 12 | ## Этап 1: предварительное собеседование 13 | 14 | Вы откликнулись на вакансию и отправили резюме — через некоторое время с Вами свяжется рекрутер и проведет предварительное собеседование. 15 | 16 | На предварительном собеседовании знакомимся друг с другом. Беседа займет полчаса: рекрутер спросит Вас об интересах, опыте и мотивации, а затем расскажет о работе и вакансиях в Тинькофф. Не стесняйтесь задавать вопросы. 17 | 18 | Рекрутер запомнит направление и проекты, над которыми хотите работать. В течение двух дней он свяжется с Вами и согласует время для технического собеседования. 19 | 20 | ## Этап 2: техническое собеседование 21 | 22 | Техническое собеседование состоит из нескольких отдельных тем — секций. Созвон по каждой секции длится 1-1.5 часа и проходит по видеосвязи с отдельным интервьюером. Вы можете пройти все секции сразу или в течение нескольких дней — скажите рекрутеру, как удобнее. 23 | 24 | Как проходить секции: 25 | 26 | 1. Подготовьте рабочее место: проверьте компьютер и интернет, подготовьте веб-камеру, возьмите пару листков бумаги и ручку. Рекомендуем выспаться и захватить бутылку воды. 27 | 2. Не используйте для созвона телефон: Вы будете много кодить в онлайн-IDE, рисовать схемы и общаться с интервьюером. 28 | 3. Задавайте вопросы и предлагайте разные решения, даже если они кажутся неправильными: интервьюер проверяет не только знания, но и как Вы подходите к решению задач. 29 | Обычно нужно пройти 2—4 секции — это зависит от направления и Вашего опыта. Точное количество Вам скажет рекрутер. 30 | 31 | ### Направления и секции в Тинькофф 32 | 33 | #### Backend-разработка 34 | 35 | - [Секция по платформе или языку](./sections/platform-backend.md) 36 | - [Секция программирования](./sections/programming.md) 37 | - [Системный дизайн](./sections/system-design-backend.md) 38 | 39 | #### Frontend-разработка 40 | 41 | - [Секция по Web платформе и фреймворкам](./sections/platform-web.md) 42 | - [Секция программирования](./sections/programming.md) 43 | - [Архитектурная секция](./sections/system-design-web.md) (для кандидатов уровня middle+ и выше) 44 | 45 | #### SRE 46 | 47 | - [Проверка общих инженерных компетенций](./sections/platform-sre.md) 48 | - [Выявление и устранение проблем](./sections/platform-sre-find-fix-problem.md) 49 | - [Базовое программирование](./sections/programming-basic.md) 50 | 51 | Для позиций с фокусом на разработку возможно проведение дополнительных секций: 52 | 53 | - [Системный дизайн](./sections/system-design-backend.md) 54 | - [Секция программирования](./sections/programming.md) 55 | 56 | #### Машинное обучение 57 | 58 | - [Секция программирования](./sections/programming.md) 59 | - [Секция по ML](./sections/platform-ml.md) 60 | - [Дизайн ML-систем](./sections/system-design-ml.md) 61 | 62 | #### Quality Assurance (QA Fullstack) 63 | 64 | - [Профильная секция тестирования (backend, mobile, web)](./sections/platform-qa.md) 65 | - [Теория и практика QA](./sections/platform-qa-theory-and-practice.md) 66 | - [Программирование для QA](./sections/programming-basic.md) 67 | 68 | #### Тестирование производительности 69 | 70 | В секции программирования, по направлению тестирования производительности, используются задачи по кодированию уровня easy (leetcode), нацеленные на умение использовать простые структуры данных, а не на эффективную реализацию алгоритмов. 71 | 72 | - [Программирование для QA](./sections/programming-basic.md) 73 | - [Секция по дизайну проектов тестирования производительности](./sections/system-design-perfomance-testing.md) 74 | 75 | ## Этап 3: знакомство с командой 76 | 77 | После технической секции рекрутер подберет подходящие проекты и согласует созвон с командами. Обычно созвон длится полчаса: ребята рассказывают про текущие проекты, отвечают на вопросы и спрашивают о Вашем опыте, любимых задачах, увлечениях. Таких созвонов будет не более трёх. 78 | 79 | После созвона с Вами свяжется рекрутер: скажите ему, в какой команде Вы хотели бы работать. 80 | 81 | ## Этап 4: приглашение на работу 82 | 83 | В течение нескольких дней мы вернемся с оффером. Если Вам понравятся условия и команда, останется согласовать дату первого рабочего дня. 84 | 85 | ## Дополнение: 86 | 87 | 1. Рекрутер отвечает между этапами в течение трех дней, на финальное решение уходит чуть больше времени. Рекрутер на связи: Вы можете связаться с ним, если нужно что-то уточнить. 88 | 2. В беседе с интервьюерами задавайте вопросы и предлагайте разные решения. Интервьюер проверяет не только знания, но и как Вы подходите к решению задач. 89 | 3. Бывает так, что на каком-то этапе интервью мы отказываем кандидату. Отказ не влияет на отношение к кандидату: он может попробовать подать заявку через полгода, а если откроется подходящая вакансия, мы предложим варианты. 90 | 4. Если есть пожелания или что-то не понравилось, напишите нам: [interview_issues@tinkoff.ru](mailto:interview_issues@tinkoff.ru). 91 | --------------------------------------------------------------------------------