Golang
Имаш ли въпроси относно процесите, условията на работа и следващите стъпки?
Имате ли в момента други интервюта или оферти?
Проектирайте мащабируема система за съобщения, която поддържа 150 милиона потребители, 75 милиона DAU, 225 милиона MAU, 1.2M четения / 300k писания QPS, 5 милиона едновременни потребители, 60 PB нови данни годишно, растеж от 30% годишно, P99 <200 ms за четене, <300 ms за писане, SLA 99.95%. КОНТЕКСТ Необходимо е да проектирате разпределена система за съобщения, подобна на WhatsApp, която поддържа 1:1 и групови чатове, осигурява доставка на съобщения, показва онлайн статусите на потребителите и предава мултимедийни файлове (снимки, видеа, аудио). Системата трябва да осигурява висока наличност и ниска латентност, да поддържа висок паралелизъм и да се мащабира глобално. ФУНКЦИОНАЛНИ ИЗИСКВАНИЯ - Поддръжка на лични (1:1) и групови чатове с възможност за добавяне/премахване на участници - Изпращане и получаване на текстови съобщения и мултимедийни файлове Нефункционални изисквания: - Няма явна реализация на механизъм за end-to-end криптиране на ниво услуги или клиенти, освен обща бележка. - Липсва ясно описание на sharding и репликация на бази данни по chat_id или user_id за мащабируемост и отказоустойчивост. - Няма явен компонент или механизъм за офлайн синхронизация на съобщения и потвърждения за доставка. - Не е ясно как се извършва балансировката на натоварването между базите данни и услугите, особено при пикови натоварвания. **Критични точки за внимание:** (Диаграмата показва архитектура с Load Balancer, API Gateway, Message Queue, Service, Cache, Database, Object Storage и CDN.)
Работили ли сте някога с транзакции в PostgreSQL? С кои нива на изолация на транзакциите сте се срещали, в кои случаи се използват?
Реализирайте функция, която приема []any и delta int. Необходимо е да увеличите с delta само първите срещания на уникални числа (int). Други типове и повтарящи се числа оставете без промяна. Функцията трябва да върне актуализирания слайс и 2 числа: updated — колко уникални числа са били променени, duplicates — колко числови елемента са се оказали дублирани func IncrementUniqueIntsInMixed(xs []any, delta int) ([]any, int, int) { // вашият код }
Как да синхронизираме работниците чрез PostgreSQL (разпределена блокировка в базата данни)?
На 7-мия ред се прави извод, че вътрешният масив ще бъде препълнен и ще бъде създаден нов. Защо си решил така?
Какво е Outbox модел и как се реализира?
Как рендерира браузърът страниците? Какво е compositing?
Ако такова задача сега попадне в спринт, откъде би започнал и как би работил с несигурността?
Как работихте с Kubernetes във вашия предишен екип?
Защо са необходими две проверки if (на ред 79 и на реда с len(buf)==MaxItems), а не една?
Каква е мотивацията за промяната? Защо решихте да излезете на пазара?
Какъв тип да използвате за реализиране на set в Go?
Вие сами писахте услуги с висок товарооборот или ги поддържахте?
Разкажи за своя опит, с какво си се занимавал, по кой проект си работил и каква роля си играл?
Колко често обикновено пристигат ясни изисквания?
Какви са нивата на изолация на транзакциите? Кои сте използвали?
Какви са разликите между HTTP/1, HTTP/2 и HTTP/3?
Разкажи за патърна Fan-In, за какво е нужен?