System Design. Mobile — как вкатиться?
Публичный постПриветики!
О чем речь
Интересен опыт соклубчан по теме System Design для мобилок. В сети тонны материалов по классическому System Design, но если начинаешь искать в контексте мобильной разработки - понимаешь что находишься в поисках экзотики. К сожалению помимо базовых принципов пересечений с классическим System Design не так много - констрейнты другие, loadbalancer'ы втыкать некуда, шардировать нечего и тд.
Что нашел
Если покопать то находится следующее:
- Канал на ютьюбчике от staff инженера гугла у которого висит в открытом доступе большая пачка моковых интервью. Довольно полезно, но пока не обнаружил такого интервью чтобы хотелось сказать "топ, вот так я и хочу" - в основном кандидаты довольно потерянные и/или акцент/уровень языка такой, что сложно воспринимать (при всем уважении к ребятам, собесится под запись перед аудиторией это искренний респект). Ну и фидбек у него в конце довольно разносящий, не видел пока ни одного видоса где он бы позитивно отозвался (понятно что output этого вида собесов небинарный, но тем не менее).
- Репозиторий от вышеупомянутого чувака, где он довольно четко и красиво разложил как он это видит. Довольно интересный подход, но ключевой момент "как он это видит" - есть спорные моменты, а никакой альтернативы найти не удалось.
- Всратые видосы по 10-15 минут на ютьюбчике в которых предлагают выучить тонну базвордов или другие сомнительные советы.
Погулял по клубу поиском, кажется все что есть опять же про классический System Design.
Что ищу
Со всем вышеперечисленным я ознакомился и уже не чувствую себя без штанов (грядет собес как раз по System Design Mobile), но все равно получается какая то довольно однобокая картина - по сути все хорошие материалы которые удалось найти это виденье одного (пусть явно очень квалифицированного) чувака.
Интересно послушть про опыт других - как вкатывались в данную тему, как готовились к подобным собесам, по каким граблям ходили и тд.
Если вдруг в клубе есть кто-то с опытом проведения данных собесов и желанием помочь в формате мокового интервью - буду дьявольски благодарен!
Свой опыт
К сожалению опыта прохождения System Design в контексте мобилок у меня нет. Собес к которому готовлюсь и который сподвиг на написание этого текста - через полторы недели (panic). При этом по работе регулярно занимаюсь дизайном приложений, довольно много разных приложений запущено и шишек набито. К сожалению одна из проблем собеседований это то, что наличие опыта это хорошо, но важно умение правильно этот опыт преподнести, а это уже упирается в отсутствие опыта такого типа собесов.
Заранее спасибо господа и госпожи!
Я не то, чтобы слишком сильно вкатывался в эту тему. Но из моего текущего опыта по таким видам интервью:
Еще вот этого парня читал когда-то для упорядочения мышления на интервью https://medium.com/geekculture/system-design-interview-for-mobile-engineers-ce712d6ac2c1
Источники для подготовки (сам я читал не все из этого и список тоже не мой, да и сисдиз мобильный я ни разу не проходил):
Общее описание процесса - https://themobileinterview.com/cracking-the-mobile-system-design-interview/
Более подробно с примерами ответов (хотя со многими пунктами не согласен, некоторые ответы все же из мира бэкенда) - https://davescommutebloghome.wpcomstaging.com/category/interviewing/
Примерный список тем, которые нужно затронуть - https://www.shashankthakur.dev/2021/10/system-design-interview-for-mobile.html
Репозиторий с кучей инфы по теме - https://github.com/weeeBox/mobile-system-design
В этом же репозитории есть упражнения (хотя можно и самому себе придумывать "спроектируй 2гис на iOS") - https://github.com/weeeBox/mobile-system-design/tree/master/exercises
Пример ответа - задизайнить ленту фб -
На mobile engineer достаточно условный system design спрашивают, даже в компаниях типа Meta, Doordash и Reddit. Как правило, все упрощается в том числе тем, что интервью длится 45-60 минут, за которые ну очень сложно много что спроектировать. В половине случаев меня на интевью просили накидать архитектуру экрана списка и подробной информации. Здесь же можно предложить целевое REST API, если его нет в условии.
Сначала объясняешь по слоям, какие подходы, паттерны собираешься использовать, как происходит передача данных, какие объекты. Далее более детально все или частично, что успеешь или на чем будут основные вопросы интервьюера. Обычно в таких задачах есть какие-то предыусловия, например, что данные могут измениться в случайный момент и нужно поддержать их актуальность, или что делать, в случае если надо приложение работает в оффлайне и пользователь может изменить данные, как их потом отправить на сервер?
Думаю, тут где-то 80% опыта + 20% приобретенных знаний (в том числе разные обсуждения/статьи как в каком-то приложении реализована какая-то фича).
Слышал, что в некоторых компаниях из MANGA могут задать более расплывчатые вопросы по типу "спроектируй приложение музыка" или читалку книг.
В текущей ситуации, когда у тебя есть реальный опыт, советую идти с наиболее абстрактных уровней вниз, разбивать крупную задачу на более мелкие и задавать уточняющие вопросы по API, кэшу, оффлайн-работе и учитывать все крайние условия. Если начнешь опускаться слишком глубоко в детали с самого начала, есть риск слишком там завязнуть и упустить задачу в целом.
https://proandroiddev.com/a-simple-framework-for-mobile-system-design-interviews-89f6f4134b84 вот очень хорошая серия статей про mobile system design
Мобилка же в контексте системного дизайна является просто клиентом, может быть весьма жирным и нажористым, но клиентом.
Просто взять из обычного системного дизайна всё что касается клиентов?
Я бы ещё serverless поглядел.
Сам нахожусь на пороге предстоящих интервью. И пока что наткнулся на книжку : Building Mobile Apps at Scale. И у автора есть интересный блог с Ютуб-каналом
https://www.mobileatscale.com/
По System Design рекомендую этот проект https://bytebytego.com/.
Чем он интересен:
-Инвайт линк https://discord.com/invite/kdjq9psJb8 (вроде работает еще).
О, я всегда думал, что на собесах спрашивают какой-то общий system design)
У нас в компании второй этап чем-то напоминает system design, есть кейс и вы проектируете прилу. Описываешь архитектуру, стек и вот это всё. В некоторых моментах углубляетесь и надо пояснить почему такое решение принято.
Типо MV(что-то) не просто потому что нравится, а потому что отлично заходит под этот кейс. Room не потому что я только этот варик работы с бд знаю. А вот так будет выглядеть какая-нибудь моделька итд.
PS я в итоге просто перефразировал @Stenopolz =)