Информация
- В рейтинге
- 1 339-й
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Фулстек разработчик
Ведущий
Git
SQL
PostgreSQL
Docker
Английский язык
Алгоритмы и структуры данных
Многопоточность
Высоконагруженные системы
Проектирование архитектуры приложений
Kubernetes
Еще от коллег из российского бигтеха я часто слышу "партиции" вместо "разделов".
Если кому то это не режет слух - я не против, но, пожалуйста, без меня.
Никакого категоричного "или" и никто не мешает. Сразу после упомянутой вами цитаты в статье объясняются сценарии использования Kafka и их категоризация для того чтобы менее посвященному читателю было легче понять, что для чего нужно.
А я бы (и надеюсь многие другие интервьюеры) продолжил бы разговор с кандидатом, который не удовлетворил вашим требованиям. Kafka - лишь один из компонентов, который может использоваться при построении систем на System Design интервью.
Хороший интервьер проверяет как кандидат мыслит и как подходит к решению возникающих вопросов.
Понятно.
Если прочитать статью, то в ней рассказывается какие проблемы, возникающие в распределенных системах решает Kafka, а так же для каких сценариев (и каких примеров задач) ее стоит рассмотреть на интервью:
Если на собеседовании вы можете спроектировать систему без Kafka, решив иным образом те проблемы, для решения которых она предназначена - имеете полное право на это.
Но будьте готовы к ситуации, когда интервьюер хочет услышать от вас именно понимание того зачем нужна эта технология (она с высокой вероятностью может использоваться в их компании). Поэтому если вы упорно полчаса решали задачи обеспечения обработки сообщений по порядку или обработки пиков нагрузки своими силами, у интервьюера может сложиться впечатление, что вы не слышали о Kafka и не знаете об общепринятых в индустрии способах решения этих проблем.
Запрос на получение presigned URL - это обычный HTTPS запрос, который под SSL. При генерации presigned URL в открытом виде есть только на сервере в момент генерации и на клиенте, как ответ на клиентский запрос. "В дороге" presigned URL зашифрован SSL.
Что касается похода с клиента уже в облачное хранилище, то
при прямом запросе в S3 presigned URL тоже защищён TLS, если ссылка c https. Query string с X-Amz-Signature не передаётся открытым текстом. Риск bearer URL не в пассивном сниффинге HTTPS-трафика, а в утечке самой ссылки из логов, истории, Referer, XSS, malware или TLS-inspection proxy.
Подменить presigned URL подписанный HMAC с секретным ключом? Я надеюсь вы шутите
Мне кажется вы не очень хорошо понимаете как устроен, как работает и что можно сделать с presigned URL. Вы меня извините, но это тема отдельной статьи.
Presigned URL в данном случае - стандарт индустрии, используемый в реальном Dropbox.
Впрочем, вы, конечно, в праве произвести революцию, если такое состояние дел вас не устраивает.
Данный вопрос подробно рассмотрен в статье, давайте я вам скопирую сюда
Настоящий Dropbox использует presigned URL. Я не встречал, если честно, таких обсуждений, где требования к безопасности для проектируемой на интервью системы должны быть выше чем у реального Dropbox. Если только это очень конкретная роль Security Engineer, и интервьюер хочет углубиться в эту часть.
Распишите подробнее векторы атаки, что вы делаете с перехваченными в url криптографически подписанными данными, с учетом того, что сами файлы в хранилище зашифрованы?
Да, вполне, интервьюера могут интересовать вопросы аудита и версионирования, особенно если кандидату придется иметь дело с чем-то похожим в реальной работе. Именно поэтому очень важно очертить требования на этапе их сбора в начале интервью и согласовать с интервьюером. В данном случае, мы явно проговорили, что версионирование за рамками задачи.
Смежный тут очень интересный вопрос - разрешение конфликтов. В данной статье рассмотрена простая стратегия "last write wins". Интервьюер может попросить вас углубиться в этом направлении, и в данной статье это не рассматривается.
Не хочется втюхивать вам рекламу платного ресурса, уж извините, но если вдруг интересно - тема разрешения конфликтов через операциональное преобразование или через CRDT рассмотрена в задаче Google Docs на NowInterview.
Лучшим решением будет реализовать и загрузку, и скачивание напрямую из/в S3 используя presigned URL, то есть с авторизацией.
Обычно на интервью достаточно сказать presigned URL и интервьюеру все понятно про суть решения и как обеспечивается авторизация. В статье 3 раздел "Погружений в детали" полностью посвящен обсуждению безопасности файлов, прочитайте, пожалуйста, еще раз.
Это распространненый паттерн, используемый во многих продуктах, подробнее про него есть в статье "Работа с большими файлами" на NowInterview, но она, к сожалению в Premium подписке.
А вот это хороший вопрос, и в статье он не рассмотрен явно.
Действительно, фактически у нас есть основная БД (на наших серверах) которая хранит источник истины для системы в целом, и вероятно, на клиенте есть небольшая БД этого клиента, которая все знает о локальных папках и файлах. Наша задача - поддерживать эти БД в согласованном состоянии, но при попытках делать это в режиме реального времени (постоянной синхронизации), из-за багов, разрывов сети и прочих причин может возникать несогласованность, которую сложно подфиксить теми же механизамами.
Хорошим решением тут будет иметь отдельный фоновый процесс сверки (reconciliation), который запускается раз в день или раз в неделю, и работает не с дифами, как синхронизация, а с полным представлением обеих БД, и пытается привести их к общему виду. Если это возможно автоматически - приводит, если невозможно - показывает уведомление пользователю: в локальной папке - так, в облаке - так, выбирай, где истина.
Я и видео на ютуб записываю как нейронка. Да и вообще стоит признать, что я, в известном смысле, нейронка.
Вам спасибо за комментарий, рад, что было полезно!
Здесь я с вами соглашусь лишь частично. Умение все это считать - требование для Middle кандидата. Неопытные кандидаты очень часто тратят на оценки слишком много времени, игнорируя большую часть результатов этих оценок. Staff+ кандидаты не тратят время на оценки, если они не имеют прямого непосредственного влияния на конкретную часть дизайна, которая сейчас рассматривается. Если прямо сейчас кандидат обсуждает нужно ли шардировать базу - самое время сделать оценки масштаба для принятия этого решения, это разумно. Но если кандидат просто посмотрел 10+ шаблонных видео на ютуб, в которых все так делают в начале интервью и поэтому он сделает так же - чтобы выглядеть "как архитектур" - это бесполезно, опытный интервьюер легко это считает.
Вы правы, требования зависят от роли, на которую вы претендуете. В конце данной статьи подробно рассказываются примерные требования для Middle, Senior и Staff кандидатов (не буду цитировать, чтобы не перепечатывать в комментарии всю статью).
Конечно в разных компаниях (и даже у разных интервьюеров) они могут отличаться. Если у вас есть возможность узнать детали того как проходит System Design интервью именно в вашу целевую компанию - я всегда рекомендую кандидатам так делать. Это хорошо и для кандидата: он будет лучше готов, для него меньше неожиданностей. И для интервьюера: не нужно тратить время на объяснения, интервьюер за часовое интервью успевает собрать все сигналы по областям компетенций, которые необходимы для роли. Конечно в рамках того, что в принципе возможно собрать за час (но тут интервьюер находится в рамках процесса найма, установленных в компании).
Что касается функциональных, нефункциональных требований, структуры интервью, шаблонных и нешаблонных решений и их обоснований - это большая тема для обсуждения, ее невозможно рассказать в комментариях.
Хороший набор статей о том, как правильно готовиться и проходить интервью, как выбирать по-настоящему важные, интересные и нешаблонные темы для детальной проработки можно найти на платформе NowInterview.
Здравствуйте, спасибо за комментарий!
Я не знаю, что вам ответить кроме цитаты из статьи относящейся к CDN:
Я полностью с вами согласен. Лично мне, чтобы полноценно оценить коллегу нужно тесно проработать с ним 6 месяцев. При этом процесс найма в крупных технологических компаниях устроен так, как устроен - мне дают 1 час на интервью и я должен после этого заполнить scorecard по кандидату по всем областям компетенций, фактически лично определившись с ответом на вопрос hire / no hire. И ошибиться тут в обе стороны (нанять того, кого не следовало бы, или отказать хорошему кандидату) - очень просто.
При этом я понимаю и компании - другого способа определить кого нанимать, а кого нет кроме как 3-6 часовых секций с разными интервьюерами никто пока не придумал.
Поэтому мы работаем в тех условиях, которые есть - имеем часовую секцию System Design и пытаемся к ней готовиться так хорошо, как можем.
Мне кажется, что не стоит воспринимать интервью как соревнование кто умнее, интервьюер или кандидат. Конечно интервьюер давал эту задачу десятки раз, слышал разные идеи и знает ее вдоль и поперек. Хороший интервьюер - это peer, коллега, который помогает кандидату если тот застревает, теряет фокус или уходит не туда. Цель интервьюера - за один час собрать как можно больше сигналов по тем компетенциям, которые ожидаются от роли на которую собеседуется кандидат.
Это обучающая статья, ее цель - дать максимально полное представление о том, что важно\интересно\сложно в этой задаче по System Design.
Я надеюсь что после ознакомления и проработки кандидаты будут увереннее чувствовать себя на интервью, если им попадется эта или похожая задача.
Я провел десятки интервью и могу сказать из личного опыта - если кандидат хотя бы немного подготовился к интервью по тем материалам, которые ему дал рекрутер - это хороший кандидат. Как минимум это показывает, что кандидат обучаем, ответственен и сознателен настолько, чтобы немного поресерчить компанию, в которую идет. Я бы сказал что это уже выше среднего.
Я плохо знаю концепцию "осознанных меркантилов" и "волков", не могу сказать ничего по существу.
Но я твердо уверен, что готовиться к интервью (в том числе по System Design, узнавая с какими инженерными сложностями столкнулись разработчики популярных систем) - лучше, чем не готовиться.
Это обучающая статья, ее цель - дать максимально полное представление о том, что важно\интересно\сложно в этой задаче по System Design.
Я надеюсь что после ознакомления и проработки кандидаты будут увереннее чувствовать себя на интервью, если им попадется эта или похожая задача.
Да, интервью по System Design обычно длится 1 час (конечно, есть вариации в разных компаниях).
Приблизительные требования для разных уровней кандидата описаны в конце статьи.
Для Middle кандидата ожидается High-Level дизайн, закрывающий функциональные требования + знание концепций и технологий + способность ответить на вопросы интервьюера.
Для Staff+ кандидата ожидается самостоятельная проработка 3+ из 6 рассмотренных в статье погружений в детали.
Не берусь судить странные они или нет.
Но большинство из них занимает менее 100 строк кода. Еще 100 — на CodeFix.
Мне кажется нужно сильно постараться, чтобы потратить на это больше одного человекодня.
Не спорю, что могут быть более сложные диагностики, анализирующие dataflow/controlflow, references, type inference и так далее, но даже на такие у нас уходило максимум 2-3 дня на один язык (С#).