Files
tinkoff-career/interview/sections/system-design-web.md
Artur Antonov 37a7f2ecde Fix some typos
2022-07-10 09:45:01 +03:00

33 lines
5.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура веб-приложений
## Как проходит секция
Данную секцию мы проводим для разработчиков уровня middle+ и выше. Цель интервью — узнать твой опыт проектирования и сопровождения веб-приложений, а также твои способности решать задачи связанные с проектированием систем.
Для визуализации процесса проектирования используется онлайн-доска [Sketchboard](https://sketchboard.io). Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching. К сожалению, у данного сервиса нет демо-версии, но если хочется познакомиться с подобными инструментами поближе, можно попробовать [excalidraw.com](https://excalidraw.com/) — он очень близок по функциональности. Шаринг экрана не потребуется.
Постарайся записывать или схематически зарисовывать (если это возможно) всё, что говоришь вслух.
Продолжительность секции — 60 минут.
## Этапы секции
В ходе интервью тебе будет будет предложен набор функциональных требований к системе. Тебе нужно будет:
* Формализовать задачу: уточнить требования, выяснить основные сценарии работы системы. Что требуется от системы? В каких условиях будет существовать система?
* Наглядно описать компоненты системы и их взаимодействие между собой: схематически изобразить компоненты, показать связи между ними. Схема должна наглядно показывать, какие системы будут использованы для того, чтобы пользователь мог увидеть результат в браузере. При этом нет необходимости глубоко погружаться в бекенд.
* Спроектировать компонентную структуру фронтового приложения, формализовать 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) - канал с разбором базовых задач и описанием формата
- Книга "Чистая архитектура. Искусство разработки программного обеспечения | Мартин Роберт"