Golang
Какво е протоколът QUIC? Защо е измислен?
Кои патърни на паралелно програмиране знаеш? Дай пример за семафор от стандартната библиотека/практиката на Go и обясни как канал може да се използва като семафор (захват и освобождаване).
Разкажете ни за състава на екипа и процесите на разработка (спринтове, разпределение на задачите, преглед на кода).
Как да оптимизираме търсенето в база данни? Какво представляват индексите и каква е тяхната сложност?
Как обработвахте връщанията и плащанията?
Колко нишки ще стартира планировчикът на Go? И конкретно на AMD EPYC с 64 ядра и 128 нишки?
Какви са предимствата и недостатъците на двата сценария: добавяне на задачи преди стартирането на пула и след стартирането му?
Имаш представа за разликата между поток и процес?
Видове инвалидиране на кеша. Кои знаете, използвали ли сте някой?
Какво е индекс и какви видове индекси има в PostgreSQL?
SELECT u.id, u.name, o.id as order_id, o.amount FROM users u ? JOIN orders o ON u.id = o.user_id;
Какви ключове могат да имат map в Go?
Как бързо да вмъкнете 10 милиарда реда в ClickHouse?
За какво е HAVING?
Каква е разликата между json.Unmarshal и json.Decoder и кога бихте използвали всеки от тях?
Общ въпрос: готовност за интервю и източници на въпроси
Проектиране на мащабируема система за съобщения, която поддържа 150 милиона потребители, 75 милиона DAU, 225 милиона MAU, 1,2 милиона peak QPS за четене / 300k за писане, 5 милиона едновременни потребители, 60 PB нови данни годишно, 30% годишен растеж, SLA 99,95%, p99 <200 ms за четене, <300 ms за писане. КОНТЕКСТ Необходимо е да се проектира разпределена система за съобщения, подобна на WhatsApp, която поддържа 1:1 и групови чатове, осигурява доставка на съобщения, показва онлайн статусите на потребителите и позволява пренос на мултимедийни файлове (снимки, видеа, аудио). Системата трябва да осигурява висока наличност и ниска латентност, да поддържа висок паралелизъм и да се мащабира глобално. ФУНКЦИОНАЛНИ ИЗИСКВАНИЯ - Поддръжка на лични (1:1) и групови чатове с възможност за добавяне/премахване на участници - Изпращане и получаване на текстови съобщения и мултимедийни файлове Не се вижда ясна реализация на механизъм за end-to-end криптиране на ниво услуги или клиенти, освен обща бележка. - Липсва ясно описание на sharding и репликация на бази данни по chat_id или user_id за мащабируемост и отказоустойчивост. - Няма ясен компонент или механизъм за офлайн синхронизация на съобщения и потвърждения за доставка. - Не е ясно как се извършва балансът на натоварването между базите данни и услугите, особено при пикови натоварвания. **Критични точки за разглеждане:**
Какво ще се случи, ако трябва да се откажете от Kafka и да я замените с друг брокер на съобщения? Как да изолирате Kafka от външните услуги?
Защо грешките не се връщат в метода Process? Трябва да се коригира и да се изпрати напълно работещ код.
Разкажете за опита си с бази данни — освен ClickHouse, какви бази и колко дълбоко?