Литкод-собесы vs собесы по языку
Довольно холиварная тема. Литкод-собесы у многих вызывают бурную реакцию - непонимание, раздражение и вопрос: зачем всё это, если в реальной работе никто не пишет алгоритмы при создании API?
Справедливо, но тогда и собесы, заточенные под язык, тоже выглядят спорно. На практике редко возникает необходимость разбираться, как устроены хэшмапа, сборщик мусора и так далее.
На работе решаются бизнес-задачи, иногда с использованием LLM.
Единственный плюс у литкод-собесов - предсказуемость.
Есть структура, понятен формат, известны ожидания. Это всё же лучше, чем рандом: когда интервью превращается в проверку внутренностей языков/фреймворков.
Навык прохождения интервью и работы никак не связаны.
Цель - попасть в FAANG: гриндишь литкод, систем дизайн.
Цель - СНГ-бигтехи: изучаешь язык (литкод, системный дизайн - опционально).
Сейчас, на рынке работодателя, нужно быть готовым ко всему, если хочешь оставаться конкурентоспособным.
Довольно холиварная тема. Литкод-собесы у многих вызывают бурную реакцию - непонимание, раздражение и вопрос: зачем всё это, если в реальной работе никто не пишет алгоритмы при создании API?
Справедливо, но тогда и собесы, заточенные под язык, тоже выглядят спорно. На практике редко возникает необходимость разбираться, как устроены хэшмапа, сборщик мусора и так далее.
На работе решаются бизнес-задачи, иногда с использованием LLM.
Единственный плюс у литкод-собесов - предсказуемость.
Есть структура, понятен формат, известны ожидания. Это всё же лучше, чем рандом: когда интервью превращается в проверку внутренностей языков/фреймворков.
Навык прохождения интервью и работы никак не связаны.
Цель - попасть в FAANG: гриндишь литкод, систем дизайн.
Цель - СНГ-бигтехи: изучаешь язык (литкод, системный дизайн - опционально).
Сейчас, на рынке работодателя, нужно быть готовым ко всему, если хочешь оставаться конкурентоспособным.
👍11🔥3💯3💩1🤣1
Странные вопросы/моменты на скрининге/интервью
Сейчас в поиске работы, и недавно на скрининге от компании прилетел такой вопрос:
Назовите книги (для Junior, Middle, Senior), которые сформировали вас как профессионала — и объясните, как именно.
Возможно, у кого-то есть такой список на все уровни.
У меня - нет и не думаю, что путь джун -> мидл -> сеньор прокладывается книжками.
Я ответил книга - кабанчик и лекции от CMU Database Group
Компания прислала отказ🍴
Другая история: интервью с тимлидом.
На первом интервью он сказал что уволил 1 человек(мол он халявил), а на втором уже 6, норм прогрессия
Какие у вас были странные вопросы на скрининге или на собесе?
P.S.
Из интересного - недавно спросили про реализацию приоритетной очереди в Go. Ответил - через хип и как его можно реализовать. Знания по алгосам дают свои плоды 🙃
Сейчас в поиске работы, и недавно на скрининге от компании прилетел такой вопрос:
Назовите книги (для Junior, Middle, Senior), которые сформировали вас как профессионала — и объясните, как именно.
Возможно, у кого-то есть такой список на все уровни.
У меня - нет и не думаю, что путь джун -> мидл -> сеньор прокладывается книжками.
Я ответил книга - кабанчик и лекции от CMU Database Group
Компания прислала отказ
Другая история: интервью с тимлидом.
На первом интервью он сказал что уволил 1 человек(мол он халявил), а на втором уже 6, норм прогрессия
Какие у вас были странные вопросы на скрининге или на собесе?
P.S.
Из интересного - недавно спросили про реализацию приоритетной очереди в Go. Ответил - через хип и как его можно реализовать. Знания по алгосам дают свои плоды 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7🔥5❤2
Всем привет💚, давно не было постов.
Во-первых, нас уже 100+ спасибо всем, кто подписался👉
Во-вторых, как вы поняли я вышел на рынок собесов. Пока идёт тяжеловато - рынок сейчас на стороне работодателя.
Из недавнего: получил отказ от Wolt после HR-интервью — указали “недостаточные business communication skills”.
Что забавно - был созвон с другим стартапом с нейтивом (hiring manager), где мы спокойно пообщались. Дали положительный фидбэк🤨 . Рандом сейчас очень высок
Хотел у вас спросить о чем хочется читать в этом канале, проголосуйте в опроснике
Во-первых, нас уже 100+ спасибо всем, кто подписался
Во-вторых, как вы поняли я вышел на рынок собесов. Пока идёт тяжеловато - рынок сейчас на стороне работодателя.
Из недавнего: получил отказ от Wolt после HR-интервью — указали “недостаточные business communication skills”.
Что забавно - был созвон с другим стартапом с нейтивом (hiring manager), где мы спокойно пообщались. Дали положительный фидбэк
Хотел у вас спросить о чем хочется читать в этом канале, проголосуйте в опроснике
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥2👍1
О чем интересно читать?
Anonymous Poll
50%
Давай про текущие собесы
18%
Больше про алгосы/систем дизайн
23%
Делай как чувствуешь
9%
Где гайд на тимбера?
0%
Свой вариант в комментариях
Вы проголосовали за текущие собесы, а так как у нас демократия (хоть где-то) - расскажу что по собесам
Сейчас общаюсь с ~10 компаниями: стартапы, аутсорсы.
Большинство пока ограничилось HR-интервью, техсобесы намечены на следующую неделю.
1) Две компании просто загостили
2) Стартап Zerion - литкод-собес(отказ)
Первая задача - отсортировать массив возрастов. Решил через bucket sort, но оказалось, это был counting sort
Вторая задача - Random Pick with Weight - часто даёт Meta. Не решил
В фидбэке сказали про хорошие навыки коммуникации и dry run, но я перепутал сортировки и не решил вторую задачу
3) Аутсорс-проект на Reddit
Собес был довольно лайтовый: немного Go + валидация скобок
Если прошел, дальше должно быть тестовое и ещё один этап
4) Стартап, который мэчит посты по эмоциям
Сказал, что провожу алгомоки
- Какая высота сбалансированных деревьев?
- Логарифмическая
- А какая разница в высоте между поддеревьями?
- Не больше одного
- В красно-черных деревьях не так
Знаете эти собесы из серии умный интервьюер, глупый интервьюемый. Я не против узнать что-то новое, но можно подать это в другой форме. Прислали отказ - нерелевантный опыт
Из интересного:
Сейчас часто HR делают запись на интервью, особенно если в нём есть элемент техскрининга
Большая часть собесов - на русском.
Если компании важен английский - будут и англоблоки.
Здесь неожиданно помогла подготовка к AWS: некоторые кейсы рассказываются на англе уже машинально - про интересные проекты, конфликты, взаимодействие с продактами
Сейчас общаюсь с ~10 компаниями: стартапы, аутсорсы.
Большинство пока ограничилось HR-интервью, техсобесы намечены на следующую неделю.
1) Две компании просто загостили
2) Стартап Zerion - литкод-собес(отказ)
Первая задача - отсортировать массив возрастов. Решил через bucket sort, но оказалось, это был counting sort
Вторая задача - Random Pick with Weight - часто даёт Meta. Не решил
В фидбэке сказали про хорошие навыки коммуникации и dry run, но я перепутал сортировки и не решил вторую задачу
3) Аутсорс-проект на Reddit
Собес был довольно лайтовый: немного Go + валидация скобок
Если прошел, дальше должно быть тестовое и ещё один этап
4) Стартап, который мэчит посты по эмоциям
Сказал, что провожу алгомоки
- Какая высота сбалансированных деревьев?
- Логарифмическая
- А какая разница в высоте между поддеревьями?
- Не больше одного
- В красно-черных деревьях не так
Знаете эти собесы из серии умный интервьюер, глупый интервьюемый. Я не против узнать что-то новое, но можно подать это в другой форме. Прислали отказ - нерелевантный опыт
Из интересного:
Сейчас часто HR делают запись на интервью, особенно если в нём есть элемент техскрининга
Большая часть собесов - на русском.
Если компании важен английский - будут и англоблоки.
Здесь неожиданно помогла подготовка к AWS: некоторые кейсы рассказываются на англе уже машинально - про интересные проекты, конфликты, взаимодействие с продактами
❤4🔥3👏1🌭1
Рекомендации по тг-каналам, в комментах присылайте свои
1) Влад Тен с канала Влад Тен @tenfoundation
Просто goat. У него крутой курс по алгосам, сейчас идет по сис дизу. Работал во многих в бигтехах включая майкрософт
2) Лена @lenka_ne_work работала и проводила алгособесы в гугле, написала пост в твиттере как проходить алгосы. Рассказывает про сис диз, в том числе делает моки по нему
3) @MicroservicesThoughts топ канал по микросервисам, оттуда узнаете про микросервисные паттерны, как работает repeatable read в постгрес и так далее
1) Влад Тен с канала Влад Тен @tenfoundation
Просто goat. У него крутой курс по алгосам, сейчас идет по сис дизу. Работал во многих в бигтехах включая майкрософт
2) Лена @lenka_ne_work работала и проводила алгособесы в гугле, написала пост в твиттере как проходить алгосы. Рассказывает про сис диз, в том числе делает моки по нему
3) @MicroservicesThoughts топ канал по микросервисам, оттуда узнаете про микросервисные паттерны, как работает repeatable read в постгрес и так далее
🔥6❤4✍1👍1😁1
Продолжаю гриндить собесы
1) Было второе интервью в аутсорс-компанию на проект Reddit
Пока это валидация со стороны подрядчика, дальше 2-4 собеса уже с Reddit.
На интервью дали задачу: есть лимит (деньги) и набор монет. Нужно перебирать монеты, пока сумма не превышает лимит. Как только превышаем - это считается одной попыткой "размена", даже если сумма меньше самого лимита. Типичная задача на DP. Разложил top-down решение, на что интервьюер сказал "ай донт андерстенд", попросил после интервью скинуть решение через HR😧 и мы просто перешли к другой задаче.
2) Собес в компанию FYST — они пилят API gateway на Go
Формат стандартный: live coding + вопросы по базам.
Первое интервью которое мне реально понравилось - нормальный темп, адекватные интервьюеры
Узнал что создание индекса через CONCURRENTLY в PostgreSQL не гарантирует что индекс создатся полностью(он может быть помечен как не валидный - не используется, но обновляется)
Потом было финальное интервью - немного странные вайбы, есть шанс что завалил
Отдельно - в LinkedIn начали стучаться рекрутеры из англоязычных стартапов/компаний.
Где-то выдали тестовое, где-то сразу позвали на техраунд.
Буду держать в курсе, что из этого выйдет😘
1) Было второе интервью в аутсорс-компанию на проект Reddit
Пока это валидация со стороны подрядчика, дальше 2-4 собеса уже с Reddit.
На интервью дали задачу: есть лимит (деньги) и набор монет. Нужно перебирать монеты, пока сумма не превышает лимит. Как только превышаем - это считается одной попыткой "размена", даже если сумма меньше самого лимита. Типичная задача на DP. Разложил top-down решение, на что интервьюер сказал "ай донт андерстенд", попросил после интервью скинуть решение через HR
2) Собес в компанию FYST — они пилят API gateway на Go
Формат стандартный: live coding + вопросы по базам.
Первое интервью которое мне реально понравилось - нормальный темп, адекватные интервьюеры
Узнал что создание индекса через CONCURRENTLY в PostgreSQL не гарантирует что индекс создатся полностью(он может быть помечен как не валидный - не используется, но обновляется)
Потом было финальное интервью - немного странные вайбы, есть шанс что завалил
Отдельно - в LinkedIn начали стучаться рекрутеры из англоязычных стартапов/компаний.
Где-то выдали тестовое, где-то сразу позвали на техраунд.
Буду держать в курсе, что из этого выйдет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6❤4🌭2🤯1
Апдейты по собесам
В прошлом посте писал про интервью в Reddit через аутсорс
Пришёл фидбэк - отказ Причина: нерешённая первая задача и какие-то техвопросы, на которые я не дал ответа🤨
Написал эйчарше про некомпетентность интервьюера и готовность пройти собес еще раз с другим интервьюером. Не думаю что это к чему-то приведет, но хотя бы подсветил непрофессионализм интервьюера
На этой неделе было три собеса: два system design, один Go на английском
Последний по деньгам ~5k, не топ, но радует что такие собесы появляются
System design #1 - Uzum
Есть существующая система (см. картинку), модифицировать нельзя
Задача - прокинуть локацию курьера клиенту через long-polling и вписаться в SLA
Это собес прошел хоть и со сложностями, моей ошибкой было прикручивать PostgreSQL и select for update при скейлинге сервиса предрассчитывающего геолокацию курьера - чтобы не обрабатывать один и тот же order-id в разных инстансах
В результате держались транзакции, пока шли запросы к другим сервисам
Изначально хотел прикрутить Redis-локи, но не знал, как они устроены - поэтому от идеи отказался
System design #2 - крипто-стартап (на англе)
Задизайнить фичу: подписка на изменение цены криптовалюты
Пользователь получает email, если цена превысила/упала ниже заданной
Тут прям зафейлил
Придумал отдельный matcher-сервис, который поллит БД: ищет подписки и пытается смэтчить с текущими ценами
Когда вместо этого можно консьюмить цены по криптовалютам -> подписки хранить в памяти консьюмера и там же мэтчить
В прошлом посте писал про интервью в Reddit через аутсорс
Пришёл фидбэк - отказ Причина: нерешённая первая задача и какие-то техвопросы, на которые я не дал ответа
Написал эйчарше про некомпетентность интервьюера и готовность пройти собес еще раз с другим интервьюером. Не думаю что это к чему-то приведет, но хотя бы подсветил непрофессионализм интервьюера
На этой неделе было три собеса: два system design, один Go на английском
Последний по деньгам ~5k, не топ, но радует что такие собесы появляются
System design #1 - Uzum
Есть существующая система (см. картинку), модифицировать нельзя
Задача - прокинуть локацию курьера клиенту через long-polling и вписаться в SLA
Это собес прошел хоть и со сложностями, моей ошибкой было прикручивать PostgreSQL и select for update при скейлинге сервиса предрассчитывающего геолокацию курьера - чтобы не обрабатывать один и тот же order-id в разных инстансах
В результате держались транзакции, пока шли запросы к другим сервисам
Изначально хотел прикрутить Redis-локи, но не знал, как они устроены - поэтому от идеи отказался
System design #2 - крипто-стартап (на англе)
Задизайнить фичу: подписка на изменение цены криптовалюты
Пользователь получает email, если цена превысила/упала ниже заданной
Тут прям зафейлил
Придумал отдельный matcher-сервис, который поллит БД: ищет подписки и пытается смэтчить с текущими ценами
Когда вместо этого можно консьюмить цены по криптовалютам -> подписки хранить в памяти консьюмера и там же мэтчить
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍5🍓2❤1
#leetcode
Апдейты по собесам - на следующей неделе, а пока камбэк в leetcode и захотелось немного нагнать литкодной духоты
Все знают про binary search, а есть такой поц - binary search on answer
Это когда нужно найти мин/макс возможный ответ, и есть функция feasible, которая проверяет, подходит ли кандидат. Главное, чтобы условие было монотонным: если подходит x, то всё большее (или меньшее) тоже подойдёт.
Иногда входной массив нужно отсортировать, иногда нет - зависит от задачи. Если, например, значения возрастают линейно (время), сортировка не нужна.
Нужно определить границы left и right, и паттерн выглядит так:
Классическая задача на такой паттерн:
https://leetcode.com/problems/koko-eating-bananas/description/
Апдейты по собесам - на следующей неделе, а пока камбэк в leetcode и захотелось немного нагнать литкодной духоты
Все знают про binary search, а есть такой поц - binary search on answer
Это когда нужно найти мин/макс возможный ответ, и есть функция feasible, которая проверяет, подходит ли кандидат. Главное, чтобы условие было монотонным: если подходит x, то всё большее (или меньшее) тоже подойдёт.
Иногда входной массив нужно отсортировать, иногда нет - зависит от задачи. Если, например, значения возрастают линейно (время), сортировка не нужна.
Нужно определить границы left и right, и паттерн выглядит так:
L, R = lower_bound, upper_bound
ans = None
while L <= R:
mid = (L + R) // 2
if feasible(mid):
ans = mid
R = mid - 1 # ищем минимум
else:
L = mid + 1
return ans
Классическая задача на такой паттерн:
https://leetcode.com/problems/koko-eating-bananas/description/
🔥7🤓4👍3❤1🍓1
Во-первых спасибо что подписываетесь, всех обнял 👉
Во-вторых я начал делать посты в линкедин, коннектитесь если интересно
В третьих апдейты по собесам
1) Uzum - прошло хорошо, выбрали другого кандидата
2) InDrive - ответил на все вопросы, но по ощущениям занизили грейд до мидла. Процесс на этом я закончил
3) Criteo - ворвался чисто по фану. У них нет привязки к языку - два литкод-собеса, один систем дизайн
- Первый литкод собес - sliding window
- Второй как эта задача только с бизнесовым контекстом
- Третий систем дизайн - tinyUrl
По ощущениям было изи, только в первом алгособесе интервьюер прерывал меня и не дал довести оптимальное решение. Задачку приложу в коммент, если интересно
Продолжаю дальше бежать по собесам, написали из plata и еще из пары аутсорсов
Во-вторых я начал делать посты в линкедин, коннектитесь если интересно
В третьих апдейты по собесам
1) Uzum - прошло хорошо, выбрали другого кандидата
2) InDrive - ответил на все вопросы, но по ощущениям занизили грейд до мидла. Процесс на этом я закончил
3) Criteo - ворвался чисто по фану. У них нет привязки к языку - два литкод-собеса, один систем дизайн
- Первый литкод собес - sliding window
- Второй как эта задача только с бизнесовым контекстом
- Третий систем дизайн - tinyUrl
По ощущениям было изи, только в первом алгособесе интервьюер прерывал меня и не дал довести оптимальное решение. Задачку приложу в коммент, если интересно
Продолжаю дальше бежать по собесам, написали из plata и еще из пары аутсорсов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍6❤4🍓2🌭1
Апдейты по собесам
1) Финал в Criteo. Общался с двумя русскоязычными продактами.
Проект - система реального аукциона для показа рекламы. Показывается реклама с большим bid_id. Нагрузка - 1k rps, бэк на Lua и движок на плюсах.
Сделали предоффер, в понедельник выложу сам оффер и цифры. Финал был чиловым, один из лидов заценил мои посты в LinkedIn
2) Plata. На следующей неделе систем дизайн. Готовлюсь. Хочу закрыть неделю двумя офферами
Как приму офер, выложу табличку со статистикой, веду ее с начала лета.
Недавно общался с эйчаршей. Рассказывала, что у них в компании очень умные разработчики, потому что у всех есть вышка💀 . После, попросила рекомендацию с прошлого места работы, очень странно, переписку приложу в коммент. Это ред флаг или нет, что думаете?
1) Финал в Criteo. Общался с двумя русскоязычными продактами.
Проект - система реального аукциона для показа рекламы. Показывается реклама с большим bid_id. Нагрузка - 1k rps, бэк на Lua и движок на плюсах.
Сделали предоффер, в понедельник выложу сам оффер и цифры. Финал был чиловым, один из лидов заценил мои посты в LinkedIn
2) Plata. На следующей неделе систем дизайн. Готовлюсь. Хочу закрыть неделю двумя офферами
Как приму офер, выложу табличку со статистикой, веду ее с начала лета.
Недавно общался с эйчаршей. Рассказывала, что у них в компании очень умные разработчики, потому что у всех есть вышка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤4👏2🍓1
Оффер от Criteo
Я пока живу в Ереване, поэтому сумма в драмах (AMD). На руки выходит около $4k😢
Плюс отсыпали акции на $15600(Скрины в комментах)
В мае ещё будет бонус.
По классике - компания делает всё, чтобы удерживать сотрудников
Просчитался, но где😔
Я пока живу в Ереване, поэтому сумма в драмах (AMD). На руки выходит около $4k
Плюс отсыпали акции на $15600(Скрины в комментах)
В мае ещё будет бонус.
По классике - компания делает всё, чтобы удерживать сотрудников
Просчитался, но где
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥9🎉7🍓2😁1
Систем-дизайн в Plata
Есть вендорское API для проверки клиента по санкционным спискам.
Input: фото клиента (base64) -> Output: true/false
SLA: 5 минут, History: 1 месяц
Задача - сделать backend api для проверки клиента(апи вызывают другие бэкенды)
Подсвечу основные моменты:
1) API
Сначала думал про две ручки: POST - check (загрузить фото) и GET - check/{id} (поллинг результата).
Свелось все к отправке в кафку (клиенты - бэкенды), ключ - user_id для маршрутизации
GET оставили как фолбэк
2) Большие фото через Kafka
Вопрос - как передавать фото 2 GB через кафку(есть лимиты)
Сначала предложил использовать presigned url, а в кафку кидать ссылку, но ссылка может протухнуть, дали подсказку - решил на стороне продьюсера сохранять в s3 вместе с uuid и в кафку отправлять сгенеренный uuid
3) Доставка и идемпотентность
Producer - idempotency key + transactional outbox
Косяк - при проверки дублей только по user_id - если первый запрос зафейлился, второй можно случайно скипнуть. Решение - idempotency_key на стороне клиента(бэкенда)
На стороне check-service джоба которая ретраит записи со статусом failed
P.S
Фидбэк положительный, завтра финал
Есть вендорское API для проверки клиента по санкционным спискам.
Input: фото клиента (base64) -> Output: true/false
SLA: 5 минут, History: 1 месяц
Задача - сделать backend api для проверки клиента(апи вызывают другие бэкенды)
Подсвечу основные моменты:
1) API
Сначала думал про две ручки: POST - check (загрузить фото) и GET - check/{id} (поллинг результата).
Свелось все к отправке в кафку (клиенты - бэкенды), ключ - user_id для маршрутизации
GET оставили как фолбэк
2) Большие фото через Kafka
Вопрос - как передавать фото 2 GB через кафку(есть лимиты)
Сначала предложил использовать presigned url, а в кафку кидать ссылку, но ссылка может протухнуть, дали подсказку - решил на стороне продьюсера сохранять в s3 вместе с uuid и в кафку отправлять сгенеренный uuid
3) Доставка и идемпотентность
Producer - idempotency key + transactional outbox
Косяк - при проверки дублей только по user_id - если первый запрос зафейлился, второй можно случайно скипнуть. Решение - idempotency_key на стороне клиента(бэкенда)
На стороне check-service джоба которая ретраит записи со статусом failed
P.S
Фидбэк положительный, завтра финал
🔥28👍11❤4🍓2
Оффер в plata(принял)
По бабкам - 4850 евро гросс(ип армении), после релокации в Барсу - 5335 евро гросс, годовой бонус 1,5 оклада(скрины в комментах). Есть компенсация рело, дмс, курсов
Проект банкоматы, делается с нуля, команда только сформировалась
По бабкам - 4850 евро гросс(ип армении), после релокации в Барсу - 5335 евро гросс, годовой бонус 1,5 оклада(скрины в комментах). Есть компенсация рело, дмс, курсов
Проект банкоматы, делается с нуля, команда только сформировалась
🔥43👍10❤5👏3🎉1🤡1🍓1
Как и обещал моя стата по собесам (с начала лета)
Сперва думал, что дело только в конкуренции, но потом понял - я просто лоу-скилл.
Первая ошибка - не возвращался к вопросам на которые не смог ответить - либо забывал их, либо вспоминал сильно позже. Мастхэв - записывать собесы или хотя бы фиксировать вопросы прямо во время интервью.
Вторая ошибка - неуверенность. Было пару ситуаций, когда интервьюер ошибался, но я сомневался и просто соглашался с ним и только потом что был прав. Будто это все равно влияет на представление о тебе, интервьемый который смог переубедить интервьюера, но это довольно скользкая дорожка
Это не отменяет того что рынок действительно сложный, на собесах спрашивают всё подряд, готовиться приходится ко всему, важно и другое - отсеивать дерьмовые собесы и не париться о них
Сперва думал, что дело только в конкуренции, но потом понял - я просто лоу-скилл.
Первая ошибка - не возвращался к вопросам на которые не смог ответить - либо забывал их, либо вспоминал сильно позже. Мастхэв - записывать собесы или хотя бы фиксировать вопросы прямо во время интервью.
Вторая ошибка - неуверенность. Было пару ситуаций, когда интервьюер ошибался, но я сомневался и просто соглашался с ним и только потом что был прав. Будто это все равно влияет на представление о тебе, интервьемый который смог переубедить интервьюера, но это довольно скользкая дорожка
Это не отменяет того что рынок действительно сложный, на собесах спрашивают всё подряд, готовиться приходится ко всему, важно и другое - отсеивать дерьмовые собесы и не париться о них
❤28🔥15🍓2
Спасибо за тёплые слова и поздравления - всех обнял 😘
Мой забег по собесам пока закончился. Иногда буду ходить, но уже на суммы от $10k+ (если такие вакансии вообще существуют💸 )
Сейчас пробую зачилиться как мой кот на картинке, но у меня шило в одном месте, поэтому хочется двигаться и чем-то заниматься. Начал решать дейлики на литкоде, также думаю взять подписку на csprimer и закрыть пробелы по "базе", плюс подтянуть матан через mathacademy
Мой забег по собесам пока закончился. Иногда буду ходить, но уже на суммы от $10k+ (если такие вакансии вообще существуют
Сейчас пробую зачилиться как мой кот на картинке, но у меня шило в одном месте, поэтому хочется двигаться и чем-то заниматься. Начал решать дейлики на литкоде, также думаю взять подписку на csprimer и закрыть пробелы по "базе", плюс подтянуть матан через mathacademy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤24🔥11👍1🤩1🍓1
Я тут весь в делах - с кайфом залетел в мини-стартап(парт-тайм). Постараюсь писать стабильно, чтобы не было больших пауз🤑
В прошлом посте забыл упомянуть полезный ресурс - codecrafters. Позволяет разобраться как работают бд, редис и другие штуки через реализацию с нуля, язык можно выбрать любой
В прошлом посте забыл упомянуть полезный ресурс - codecrafters. Позволяет разобраться как работают бд, редис и другие штуки через реализацию с нуля, язык можно выбрать любой
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤3🍓2
Решил составить список моих личных ошибок на систем дизайне, делаю это исходя исключительно из своего опыта
1) Забывать возвращаться к функциональным требованиям. У меня такое часто было что я определил функ.требования -> сделал api и дальше забыл про них, хотя они могут натолкнуть, дать подсказку касательно метрик, ttl, sla и так далее. В общем главное держать это в голове, либо вообще выделить красным чтобы было на виду
2) Как только ворвался в сис диз - старался уделять большое внимание расчетам. Хотя глобально это штуку можно скипнуть, если сервис с большим кол-вом пользователей типа твиттера, ютуба, то очевидно что будет большая нагрузка. Для себя расчёты оставил только как инструмент, чтобы понять тип нагрузки - read/write, и уже от этого строить дизайн
Пишите в комменты свои ошибки(не только по сис дизу)
1) Забывать возвращаться к функциональным требованиям. У меня такое часто было что я определил функ.требования -> сделал api и дальше забыл про них, хотя они могут натолкнуть, дать подсказку касательно метрик, ttl, sla и так далее. В общем главное держать это в голове, либо вообще выделить красным чтобы было на виду
2) Как только ворвался в сис диз - старался уделять большое внимание расчетам. Хотя глобально это штуку можно скипнуть, если сервис с большим кол-вом пользователей типа твиттера, ютуба, то очевидно что будет большая нагрузка. Для себя расчёты оставил только как инструмент, чтобы понять тип нагрузки - read/write, и уже от этого строить дизайн
Пишите в комменты свои ошибки(не только по сис дизу)
🔥8❤4🍓1
У меня начались флэшбэки с собесов и задач которые мне давали, буду по-тихоньку их разбирать. На интервью по гошке часто просят реализовать кэш. Звучит несложно, hashmap + mutex/rwmutex
И тут всплывает главное отличие между data race и race condition.
Data race - это непредсказуемое поведение при одновременном доступе к памяти без синхронизации. У нас используется mutex, всё безопасно.
Race condition - это логическая гонка.
Даже если синхронизация есть, результат может зависеть от порядка выполнения горутин. Что если 1000 горутин будут обновлять значение по одному и тому же ключу(cache stampede). Сжигаем cpu и создаём лишнюю нагрузку - все конкурируют за один и тот же mutex, хотя данные у всех одинаковые. Важно, нижеперечисленные оптимизации работают только если значения одинаковые и важен первый write, который затирает остальные.
Если же бизнесу важен последний апдейт - эти оптимизации не помогут, нужен совсем другой подход
1) Double checking
Просто и понятно, в put мы добавляем две проверки на наличие ключа. Тем самым горутина внутри мьютекса не будет перезаписывать значение если оно уже есть. Но все равно есть конкурентный доступ к мапе
2) Сын маминой подруги - single-flight😎 . Реализуется через киллер-фичу гошки - каналы. Вкратце - создается еще одна мапа calls, ключ любой key и value - канал, через который другие горутины будут ждать результат. Первая горутина, которая успела захватить мьютекс, создаёт канал и кладёт его в calls. Все остальные, кто пришел с этим ключом, ждут значение через канал
P.S
Эта задача была в индрайв - я разложил эту задачу до атомов, упомянув все перечисленные выше оптимизации, на сеньора не прошел😧
get(key)
mx.RLock()
defer mx.RUnlock()
val, ok := data[key]
return val, ok
put(key, val)
mx.Lock()
defer mx.Unlock()
data[key] = val
И тут всплывает главное отличие между data race и race condition.
Data race - это непредсказуемое поведение при одновременном доступе к памяти без синхронизации. У нас используется mutex, всё безопасно.
Race condition - это логическая гонка.
Даже если синхронизация есть, результат может зависеть от порядка выполнения горутин. Что если 1000 горутин будут обновлять значение по одному и тому же ключу(cache stampede). Сжигаем cpu и создаём лишнюю нагрузку - все конкурируют за один и тот же mutex, хотя данные у всех одинаковые. Важно, нижеперечисленные оптимизации работают только если значения одинаковые и важен первый write, который затирает остальные.
Если же бизнесу важен последний апдейт - эти оптимизации не помогут, нужен совсем другой подход
1) Double checking
Просто и понятно, в put мы добавляем две проверки на наличие ключа. Тем самым горутина внутри мьютекса не будет перезаписывать значение если оно уже есть. Но все равно есть конкурентный доступ к мапе
put(key, val)
mx.RLock()
val, ok := data[key]
mx.RUnlock()
if ok {
return
}
mx.Lock()
defer mx.Unlock()
_, ok := data[key] // second check
if ok {
return
}
data[key] = val
2) Сын маминой подруги - single-flight
getOrput(key, val)
mx.RLock()
val, ok := data[key]
mx.RUnlock()
if ok {
return
}
mx.Lock()
if _, ok = calls[key]; ok {
mx.Unlock()
return <- calls[key] // читаем из канала
}
ch := make(chan value, 1) // буф. канал чтобы не блокировать писателя
calls[key] = ch
data[key] = val
delete(calls, key) // удаляем чтобы горутины не блокировались вечно на чтение и не читали старое значение
mx.Unlock()
ch <- val
close(ch)
return val
P.S
Эта задача была в индрайв - я разложил эту задачу до атомов, упомянув все перечисленные выше оптимизации, на сеньора не прошел
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤6🍓2
Собес в яндекс
Наверно после этого поста меня занесут в черный список яндекса, пу-пу-пу😧 . Мое отношение к этой компании больше негативное чем позитивное, я считаю они требуют на собесе очень много и платят меньше рынка. Также я сталкивался с сильной нехваткой софт скиллов у интервьюеров.
С начала года яндекс изменили процесс интервью(не везде), теперь у них есть секция по коду, для Go обычно это имплементация load balancer. Два раза я ходил на собес и два раза мне попалась эта задача. Накидываем слайс бэкендов и атомик для round robin.
Далее идет follow up, нужно отправлять запросы только на живые backend, health check никто не гарантирует.
Я не нашел ничего лучше как в Invoke маркировать живые бэкенды и в GetBackend это учитывать. Но я переусложнил потому что неживым бэкендам нужно давать "второй шанс" и пытаться отправлять на них запросы. Будет мапа которая маркирует живые, неживые и спустя какое-то окно мы будем давать неживым "второй шанс".
В общем самое простое решение - отправлять запрос до тех пор пока не получим ok от бэкенда
Задачка я бы сказал слишком дрочная, еще есть плюс баллы за код и минус за подсказки
Наверно после этого поста меня занесут в черный список яндекса, пу-пу-пу
С начала года яндекс изменили процесс интервью(не везде), теперь у них есть секция по коду, для Go обычно это имплементация load balancer. Два раза я ходил на собес и два раза мне попалась эта задача. Накидываем слайс бэкендов и атомик для round robin.
type Request interface {
}
type Response interface{}
type Backend interface {
Invoke(req Request) (Response, error)
}
type LoadBalancer struct {
backends []Backend
index int64
}
func (lb *LoadBalancer) GetBackend() Backend {
idx := atomic.AddInt64(&lb.index, 1)
return lb.backends[(idx - 1) % int64(len(lb.backends))]
}
func (lb *LoadBalancer) Invoke(req Request) (Response, error) {
backend := lb.GetBackend()
return backend.Invoke(req)
}
Далее идет follow up, нужно отправлять запросы только на живые backend, health check никто не гарантирует.
Я не нашел ничего лучше как в Invoke маркировать живые бэкенды и в GetBackend это учитывать. Но я переусложнил потому что неживым бэкендам нужно давать "второй шанс" и пытаться отправлять на них запросы. Будет мапа которая маркирует живые, неживые и спустя какое-то окно мы будем давать неживым "второй шанс".
В общем самое простое решение - отправлять запрос до тех пор пока не получим ok от бэкенда
func (lb *LoadBalancer) Invoke(req Request) (Response, error) {
for i := 0; i < len(lb.backends); i++ {
backend := lb.GetBackend()
response, err := backend.Invoke(req)
if err == nil {
return response, nil
}
}
return nil, fmt.Errorf("no live backend available")
}
Задачка я бы сказал слишком дрочная, еще есть плюс баллы за код и минус за подсказки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13😁4❤2🤯1🍓1