diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 345a726..be3968c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,45 +1,45 @@ -# Внесение изменений в документы - -> Принимаются корректировки опечаток - -- Зарегистрируйтесь на [GitHub](https://github.com/) (если вы еще этого не сделали). - -- Откройте в браузере документ, в который собираетесь внести изменения (например [этот](https://github.com/Tinkoff/career/blob/main/interview/README.md)) - -- Нажмите кнопку редактирования ![кнопку редактирования](http://s.csssr.ru/U2Y7B7QMD/chrome_2021-01-27_11-37-34.png) - -- В открышемся редакторе внесите изменения в файл. Вы всегда можете переключиться между режимом редактирования и предпросмотра кнопками `Edit File` и `Preview Changes` - -> Для написания документов используется облегченный язык разметки [Markdown](https://ru.wikipedia.org/wiki/Markdown). Если Вы с ним не знакомы, ознакомьтесь со специальным [руководством](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) - -- Создайте новую [ветку](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#ветки), дайте ей название и отправьте [изменения](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#коммиты): - -![](http://s.csssr.ru/U2Y7B7QMD/chrome_2021-01-27_12-00-37.png) - -- На открывшейся странице нажмите `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#релиз-изменений) попадут в основную ветку и будут доступны всем. - -## Оформление запросов на изменение - -### Ветки - -Ветки желательно создавать от `main`, в названии ветки укажите файл, в который вносятся изменения. - -### Коммиты - -В описании к коммиту желательно указать краткое резюме о вносимых изменениях. - -## Markdown Style - -Все документы проверяются на существование всех присутствующих ссылок при помощи [markdown-link-check](https://github.com/tcort/markdown-link-check). Проверка происходит при создании Pull Request'а в ветку main, информация о ходе проверки и о её результатах выводится на странице Pull Request'a - -### Если проверка не прошла - -Необходимо проверить все ссылки в изменяемом документе, если хотя бы одна ведёт на несуществующий сайт, проверка не выполнится. - -## Подтверждение - -Чтобы изменения вступили в силу, их должен проверить и одобрить [Игорь Маслов](https://github.com/MaslovIgor) или [Юлия Царева](https://github.com/YuliaTsareva). - -## Релиз изменений - -Происходит автоматически после подтверждения изменений и их попадания в ветку `main` +# Внесение изменений в документы + +> Принимаются корректировки опечаток + +- Зарегистрируйтесь на [GitHub](https://github.com/) (если вы еще этого не сделали). + +- Откройте в браузере документ, в который собираетесь внести изменения (например [этот](https://github.com/Tinkoff/career/blob/main/interview/README.md)) + +- Нажмите кнопку редактирования ![кнопку редактирования](http://s.csssr.ru/U2Y7B7QMD/chrome_2021-01-27_11-37-34.png) + +- В открышемся редакторе внесите изменения в файл. Вы всегда можете переключиться между режимом редактирования и предпросмотра кнопками `Edit File` и `Preview Changes` + +> Для написания документов используется облегченный язык разметки [Markdown](https://ru.wikipedia.org/wiki/Markdown). Если Вы с ним не знакомы, ознакомьтесь со специальным [руководством](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) + +- Создайте новую [ветку](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#ветки), дайте ей название и отправьте [изменения](https://github.com/Tinkoff/career/blob/main/CONTRIBUTING.md#коммиты): + +![](http://s.csssr.ru/U2Y7B7QMD/chrome_2021-01-27_12-00-37.png) + +- На открывшейся странице нажмите `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#релиз-изменений) попадут в основную ветку и будут доступны всем. + +## Оформление запросов на изменение + +### Ветки + +Ветки желательно создавать от `main`, в названии ветки укажите файл, в который вносятся изменения. + +### Коммиты + +В описании к коммиту желательно указать краткое резюме о вносимых изменениях. + +## Markdown Style + +Все документы проверяются на существование всех присутствующих ссылок при помощи [markdown-link-check](https://github.com/tcort/markdown-link-check). Проверка происходит при создании Pull Request'а в ветку main, информация о ходе проверки и о её результатах выводится на странице Pull Request'a + +### Если проверка не прошла + +Необходимо проверить все ссылки в изменяемом документе, если хотя бы одна ведёт на несуществующий сайт, проверка не выполнится. + +## Подтверждение + +Чтобы изменения вступили в силу, их должен проверить и одобрить [Игорь Маслов](https://github.com/MaslovIgor) или [Юлия Царева](https://github.com/YuliaTsareva). + +## Релиз изменений + +Происходит автоматически после подтверждения изменений и их попадания в ветку `main` diff --git a/README.md b/README.md index 3b83c94..3c54ef0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -Привет! Ты зашел в репозиторий, который содержит публичную информацию о внутренней кухне Тинькофф, и о том, что тебя ждет во время интервью. - -## Что такое Тинькофф? - -Тинькофф - это IT-компания, которая предоставляет множество продуктов клиентам в разных странах. Примеры продуктов: банковское направление, инвестиции, услуги для бизнеса, страхование, тревел, мобильная связь, голосовые помощники, внутренние продукты и множество других проектов. В то же время Тинькофф работает не только в России, но еще и в других странах - -## Список разделов в репозитории - -- [ИТ-собеседования в Тинькофф](interview/README.md) -- [Список текущих вакансий в компании](https://www.tinkoff.ru/career/it/) +Привет! Ты зашел в репозиторий, который содержит публичную информацию о внутренней кухне Тинькофф, и о том, что тебя ждет во время интервью. + +## Что такое Тинькофф? + +Тинькофф - это IT-компания, которая предоставляет множество продуктов клиентам в разных странах. Примеры продуктов: банковское направление, инвестиции, услуги для бизнеса, страхование, тревел, мобильная связь, голосовые помощники, внутренние продукты и множество других проектов. В то же время Тинькофф работает не только в России, но еще и в других странах + +## Список разделов в репозитории + +- [ИТ-собеседования в Тинькофф](interview/README.md) +- [Список текущих вакансий в компании](https://www.tinkoff.ru/career/it/) diff --git a/interview/README.md b/interview/README.md index b329242..241695a 100644 --- a/interview/README.md +++ b/interview/README.md @@ -1,8 +1,9 @@ # IT-собеседование в Тинькофф -Рассказываем, как подготовиться к собеседованию на IT-вакансию: https://www.tinkoff.ru/career/it/ +Рассказываем, как подготовиться к собеседованию на 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. Бывает так, что на каком-то этапе интервью мы отказываем кандидату. Отказ не влияет на отношение к кандидату: он может попробовать подать заявку через полгода, а если откроется подходящая вакансия, мы предложим варианты. diff --git a/interview/sections/platform-backend.md b/interview/sections/platform-backend.md index 402c09c..217bec1 100644 --- a/interview/sections/platform-backend.md +++ b/interview/sections/platform-backend.md @@ -1,4 +1,3 @@ # Секция по платформе или языку В рамках секции идет обсуждение различных аспектов платформ, фреймворков и различных языков программирования. Вопросы варьируются от реализации подходов к многопоточности, устройства памяти до взаимодействия с базой в определенном фреймворке. Язык и платформа выбираются исходя из Вашего опыта. - diff --git a/interview/sections/platform-ml.md b/interview/sections/platform-ml.md index 479aed5..8d3afe5 100644 --- a/interview/sections/platform-ml.md +++ b/interview/sections/platform-ml.md @@ -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) ### Книги: + - Глубокое обучение. Погружение в мир нейронных сетей / Сергей Николенко, Артур Кадурин, Екатерина Архангельская diff --git a/interview/sections/platform-qa-theory-and-practice.md b/interview/sections/platform-qa-theory-and-practice.md index 04f3626..6085fb6 100644 --- a/interview/sections/platform-qa-theory-and-practice.md +++ b/interview/sections/platform-qa-theory-and-practice.md @@ -3,6 +3,7 @@ Общаемся на основополагающие темы в области обеспечения качества, документирования дефектов, стратегий проверки функционала. ### Книги: - - Agile-тестирование. Обучающий курс для всей команды. Грегори Джанет, Криспин Лиза - - A Practitioner’s Guide to Software Test Design”. Lee Copeland - - Testing Computer Software. Сэм Канер, Джек Фолк, Енг Кек Нгуен + +- Agile-тестирование. Обучающий курс для всей команды. Грегори Джанет, Криспин Лиза +- A Practitioner’s Guide to Software Test Design”. Lee Copeland +- Testing Computer Software. Сэм Канер, Джек Фолк, Енг Кек Нгуен diff --git a/interview/sections/platform-qa.md b/interview/sections/platform-qa.md index 6d328ac..06e4a1f 100644 --- a/interview/sections/platform-qa.md +++ b/interview/sections/platform-qa.md @@ -3,4 +3,5 @@ Нам важно понять, что специализация кандидата совпадает с нашим потребностями в конкретной предметной области и кандидат обладает специфическими знаниями из предметных областей. ### Книги: - - Hands-On Mobile App Testing: A Guide for Mobile Testers and Anyone Involved in the Mobile App Business \ No newline at end of file + +- Hands-On Mobile App Testing: A Guide for Mobile Testers and Anyone Involved in the Mobile App Business diff --git a/interview/sections/platform-sre-find-fix-problem.md b/interview/sections/platform-sre-find-fix-problem.md index 290f29e..e1e39aa 100644 --- a/interview/sections/platform-sre-find-fix-problem.md +++ b/interview/sections/platform-sre-find-fix-problem.md @@ -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) diff --git a/interview/sections/platform-sre.md b/interview/sections/platform-sre.md index 4ecb744..db6a47f 100644 --- a/interview/sections/platform-sre.md +++ b/interview/sections/platform-sre.md @@ -12,11 +12,14 @@ Вопросы могут предполагать как и односложный ответ, так и детальный рассказ, который интервьюер интерпретирует в виде бальной оценки, опираясь на степень погружения кандидата в тему. Важно отметить, что вопросы не включают в себя тем, касающихся конкретных инструментов и технологий (Docker, Ansible, CI/CD, etc) - мы считаем, что инженер, обладающий достаточной подготовкой, без труда освоит любые современные инструменты. ## Материалы для подготовки + ### Книги для подготовки: + - Таненбаум Э. С., Бос Х. Современные операционные системы. (издание актуальное на момент подготовки) - Таненбаум Э. С. Архитектура компьютера (издание актуальное на момент подготовки) - Таненбаум Э. С., Уэзеролл Д. Компьютерные сети. - Martin Kleppmann. Designing Data-Intensive Applications (для вопросов вокруг баз и хранения состояния) ### Сайты для теоретической подготовки: + - [Подборка материалов по SRE](https://github.com/mxssl/sre-interview-prep-guide) diff --git a/interview/sections/platform-web.md b/interview/sections/platform-web.md index 3a61e3d..5ad467c 100644 --- a/interview/sections/platform-web.md +++ b/interview/sections/platform-web.md @@ -1,6 +1,7 @@ # Секция по Web платформе ## Как проходит секция + В рамках секции идет обсуждение различных аспектов Web платформы и фреймворков. Также на секции проверяем знание JavaScript. На собеседованиях мы стараемся не задавать абстрактных теоретических вопросов. Вместо этого мы предлагаем решить несколько практических задач. Для лайвкодинга мы будем использовать сервис https://codeinterview.io/ — online-IDE с возможностью запуска кода в онлайне. Шаринг экрана не потребуется. @@ -8,13 +9,14 @@ Продолжительность секции — 90 минут. ## Этапы секции + Собеседование состоит из двух частей: 1. [Общие вопросы по Web платформе и JavaScript](#javascript) 2. Вопросы по фреймворку, на котором специализируется кандидат. В Тинькофф используются два основных стека: 1. [Angular](#angular) 2. [React](#react) - + В конце собеседования у тебя будет время, чтобы пообщаться с интервьюером и задать свои вопросы. Фидбек по секции, как правило, предоставляется уже после собеседования через рекрутера. ## Материалы для подготовки diff --git a/interview/sections/programming-basic.md b/interview/sections/programming-basic.md index 24e1fb6..e201adc 100644 --- a/interview/sections/programming-basic.md +++ b/interview/sections/programming-basic.md @@ -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) ### Книги + - Чистый код. Создание анализ и рефакторинг. Мартин Роберт К. diff --git a/interview/sections/programming.md b/interview/sections/programming.md index 40888cf..bae2b77 100644 --- a/interview/sections/programming.md +++ b/interview/sections/programming.md @@ -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 diff --git a/interview/sections/system-design-backend.md b/interview/sections/system-design-backend.md index 1055ad1..565642a 100644 --- a/interview/sections/system-design-backend.md +++ b/interview/sections/system-design-backend.md @@ -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) - интервью по системному дизайну, которое мы провели для того, чтобы показать как оно может выглядеть +- [Публичное System Design Interview на конференции C++ Russia 2022](https://apolomodov.medium.com/example-of-system-design-interview-7790a5569207) - интервью по системному дизайну, которое мы провели для того, чтобы показать как оно может выглядеть ### Книги: + - Высоконагруженные приложения. Программирование, масштабирование, поддержка / Мартин Клеппман. В книге достаточно просто объясняют теорию diff --git a/interview/sections/system-design-ml.md b/interview/sections/system-design-ml.md index 7ff0ef4..8e9ad04 100644 --- a/interview/sections/system-design-ml.md +++ b/interview/sections/system-design-ml.md @@ -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) / Адам Елдаров diff --git a/interview/sections/system-design-perfomance-testing.md b/interview/sections/system-design-perfomance-testing.md index 9fa304a..2136f32 100644 --- a/interview/sections/system-design-perfomance-testing.md +++ b/interview/sections/system-design-perfomance-testing.md @@ -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] diff --git a/interview/sections/system-design-web.md b/interview/sections/system-design-web.md index d42cc03..90c0891 100644 --- a/interview/sections/system-design-web.md +++ b/interview/sections/system-design-web.md @@ -1,6 +1,8 @@ # Архитектура веб-приложений + ## Как проходит секция -Данную секцию мы проводим для разработчиков уровня middle+ и выше. Цель интервью — узнать твой опыт проектирования и сопровождения веб-приложений, а также твои способности решать задачи связанные с проектированием систем. + +Данную секцию мы проводим для разработчиков уровня middle+ и выше. Цель интервью — узнать твой опыт проектирования и сопровождения веб-приложений, а также твои способности решать задачи связанные с проектированием систем. Для визуализации процесса проектирования используется онлайн-доска [Sketchboard](https://sketchboard.io). Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching. К сожалению, у данного сервиса нет демо-версии, но если хочется познакомиться с подобными инструментами поближе, можно попробовать [excalidraw.com](https://excalidraw.com/) — он очень близок по функциональности. Шаринг экрана не потребуется. @@ -9,24 +11,26 @@ Продолжительность секции — 60 минут. ## Этапы секции + В ходе интервью тебе будет будет предложен набор функциональных требований к системе. Тебе нужно будет: -* Формализовать задачу: уточнить требования, выяснить основные сценарии работы системы. Что требуется от системы? В каких условиях будет существовать система? -* Наглядно описать компоненты системы и их взаимодействие между собой: схематически изобразить компоненты, показать связи между ними. Схема должна наглядно показывать, какие системы будут использованы для того, чтобы пользователь мог увидеть результат в браузере. При этом нет необходимости глубоко погружаться в бекенд. -* Спроектировать компонентную структуру фронтового приложения, формализовать API, спроектировать модель данных. По итогу должно быть понятно, как, где и какие данные хранятся и передаются между фронтовым приложением и бекендом. -* Идем глубже: - * Оценить узкие места в системе, рассказать, какие оптимизации можно применить для снижения нагрузки на бекенд, для ускорения доставки данных до клиента, для улучшения performance-метрик. - * Критически оценить систему на предмет безопасности, убедиться, что закрыты все основные уязвимости. - * Прочие моменты — UX, a11y, i18n, поддержка различных устройств и так далее. +- Формализовать задачу: уточнить требования, выяснить основные сценарии работы системы. Что требуется от системы? В каких условиях будет существовать система? +- Наглядно описать компоненты системы и их взаимодействие между собой: схематически изобразить компоненты, показать связи между ними. Схема должна наглядно показывать, какие системы будут использованы для того, чтобы пользователь мог увидеть результат в браузере. При этом нет необходимости глубоко погружаться в бекенд. +- Спроектировать компонентную структуру фронтового приложения, формализовать API, спроектировать модель данных. По итогу должно быть понятно, как, где и какие данные хранятся и передаются между фронтовым приложением и бекендом. +- Идем глубже: + - Оценить узкие места в системе, рассказать, какие оптимизации можно применить для снижения нагрузки на бекенд, для ускорения доставки данных до клиента, для улучшения performance-метрик. + - Критически оценить систему на предмет безопасности, убедиться, что закрыты все основные уязвимости. + - Прочие моменты — UX, a11y, i18n, поддержка различных устройств и так далее. -Как правило, часа не хватает для того, чтобы полностью и всеобъемлюще обсудить задачу — это нормально. +Как правило, часа не хватает для того, чтобы полностью и всеобъемлюще обсудить задачу — это нормально. ## Материалы для подготовки + - Для практики можно разобрать типичные сайты средних/крупных компаний, например, tinkoff.ru, youtube.com, web.telegram.com и другие. Попробуй дайть ответы на следующие вопросы: - - Как устроен такой сайт? - - Какие системы участвуют в том, чтобы конечный пользователь увидел сайт и смог и воспользоваться? - - С какими вызовами могли столкнуться разработчики сайта? Часто можно найти доклады, в которых непосредственные разработчики сайта рассказывают о своем проекте, и как он устроен. - - На какие слои и компоненты разделен сам сайт? Что сделано для того, чтобы его просто было поддерживать? + - Как устроен такой сайт? + - Какие системы участвуют в том, чтобы конечный пользователь увидел сайт и смог и воспользоваться? + - С какими вызовами могли столкнуться разработчики сайта? Часто можно найти доклады, в которых непосредственные разработчики сайта рассказывают о своем проекте, и как он устроен. + - На какие слои и компоненты разделен сам сайт? Что сделано для того, чтобы его просто было поддерживать? - [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/ru/front-end-system-design/) — сайт с описанием похожего формата собеседований, много ссылок на полезные статьи и материалы - [Front-End Engineer](https://www.youtube.com/channel/UC6YpkaZsAcAvPNt4rLiS7dg) - канал с разбором базовых задач и описанием формата - Книга "Чистая архитектура. Искусство разработки программного обеспечения | Мартин Роберт"