Sobes.tech

Golang

/* Potřebujeme přenést data z nějakého zdroje k nějakému příjemci. Zdroj dodává data v malých dávkách (~desítky záznamů), zatímco příjemce pracuje efektivněji s většími dávkami. Reálný příklad je přenos dat z front typu Kafka do databáze Clickhouse. Zdroj: - Téměř nekonečný. - Zdroj nikdy nevrátí více než MaxItems záznamů v jednom volání Next. - V rámci jedné "seance" (jedno volání funkce Pipe) zdroj při každém Next vrací nová data. - Po restartu však zdroj začne od předchozí "potvrzené" pozice, kterou určuje cookie. Proto musí být každá hodnota cookie, kterou Next vrátí, po uložení dat do příjemce potvrzena voláním Commit, a to ve stejném pořadí, v jakém byla vrácena. Příjemce: - Nedokáže zpracovat více než MaxItems najednou. Základní úroveň: Je třeba implementovat funkci func Pipe(p Producer, c Consumer) error, která čte data ze zdroje, seskupuje je do bufferu o velikosti nejvýše MaxItems a ukládá je do příjemce, později potvrzuje pokrok ve zdroji. */ const MaxItems = 9999 type Producer interface { // Next vrací: // - dávku položek k zpracování // - cookie k potvrzení po dokončení zpracování // - chybu Next() (items []any, cookie int, err error) // Commit slouží k označení dávky dat jako zpracované Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }

240

Čím se liší vyvažovač zátěže L4 od L7?

239

""" Místa v kině jsou uspořádána v jednom řádku. Nově příchozí divák si vybírá místo, aby seděl co nejdále od ostatních diváků v řadě. To znamená, že vzdálenost od tohoto místa, kam sedne, k nejbližšímu divákovi, musí být maximální. Je zaručeno, že v řadě jsou vždy volná místa a že již sedí alespoň jeden divák. Napište funkci, která na základě daného řady míst (pole nul a jedniček) vrátí vzdálenost (počet mezer mezi sedadly) od zvoleného místa k nejbližšímu divákovi. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }

237

""" A mozi helyei egy sorban vannak elrendezve. Egy éppen érkező néző kiválaszt egy helyet, hogy a lehető legtávolabb üljön a többi nézőtől a sorban. Vagyis, a helytől, ahol ülni fog, a legközelebbi nézőig tartó távolságnak maximálisnak kell lennie. Garantált, hogy mindig vannak szabad helyek, és már ül legalább egy néző. Írjon egy függvényt, amely a helyek sorát (nullák és egyesek tömbje) bemenetként kapva, visszaadja a kiválasztott helytől a legközelebbi nézőig tartó távolságot. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

237

/* * Máte pole celých čísel a číslo X, * je třeba najít nejdelší neprázdný podsegment, ktorého minimum je X. * Vráťte dĺžku tohto podsegmentu alebo -1, ak také neexistuje. */

236

Jaký projekt vybrat pro technickou pohovor a jak ho popsat?

234

Čím se služba liší od případu užití v vrstvé architektuře? Uveďte konkrétní příklady.

234

func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) n := len(s) for right := 0; right < n; right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }

232

Jaký počet požadavků za sekundu byl dosažen při zápisu dat?

Junior — Middle
230

Jak je určena doba provádění operace přidání prvku podle klíče do datové struktury Map?

Junior — Middle
229

Jak vizuálně nebo algoritmicky určit, že prvek je v datové struktuře Map jedinečný?

Junior — Middle
229

Proč jsou potřeba dvě kontroly if (na řádku 79 a na řádku s len(buf)==MaxItems), místo jedné?

224

Žijete momentálně v Moskvě? Jaké město zvažujete? Zvažujete hybridní formát práce? V jaké fázi hledání se nacházíte?

223

Povězte nám o nejnáročnější a nejzajímavější úloze, kterou jste řešili, zejména o architektonických zkušenostech.

221

Jak posunout okno v algoritmu posuvného okna?

221

// Pro dva pole celých čísel délky N, // pro všechna K od 1 do N, spočítejte počet společných čísel v prefixech délky K. // Čísla v poli se mohou opakovat, průnik se počítá bez ohledu na násobky. // Prefix délky K pole A jsou prvních K prvků pole A // A [1, 1] => [1], [1, 1] // B [1, 1] => [1], [1, 1] // R [1, 1] // [1, 2, 5] => [1], [1, 2], [1, 2, 5] // [1, 5, 4] => [1], [1, 5], [1, 5, 4] // [1, 1, 2]

220

Jaké bylo složení týmu, se kterým jste naposledy pracoval?

Junior — Middle
219

Jak jsou tyto metriky integrovány a zobrazovány v Grafaně?

Junior — Middle
219

Návrh škálovatelného systému pro zasílání zpráv, který podporuje 150 milionů uživatelů, 75 milionů DAU, 225 milionů MAU, 1,2 milionu čtení / 300 tisíc zápisů QPS, 5 milionů současných uživatelů, 60 PB nových dat ročně, růst o 30 % ročně, P99 <200 ms pro čtení, <300 ms pro zápis, SLA 99,95 %. KONTEKST Je třeba navrhnout distribuovaný systém zasílání zpráv, podobný WhatsAppu, který podporuje 1:1 a skupinové chaty, zajišťuje doručení zpráv, zobrazuje online status uživatelů a přenáší multimediální soubory (fotky, videa, audia). Systém musí zajistit vysokou dostupnost a nízkou latenci, podporovat vysoký paralelismus a škálovat na globální úrovni. FUNKČNÍ POŽADAVKY - Podpora osobních (1:1) a skupinových chatů s možností přidávat/odstraňovat účastníky - Odesílání a přijímání textových zpráv a multimediálních souborů Nefunkční požadavky: - Neexistuje explicitní implementace end-to-end šifrování na úrovni služeb nebo klientů, kromě obecné poznámky. - Není jasně popsáno sharding a replikace databází podle chat_id nebo user_id pro škálovatelnost a odolnost vůči chybám. - Neexistuje žádná explicitní komponenta nebo mechanismus pro offline synchronizaci zpráv a potvrzení doručení. - Není jasné, jak je realizováno vyvažování zátěže mezi databázemi a službami, zejména při špičkových zatíženích. **Důležité body k zvážení:** (Diagram ukazuje architekturu s Load Balancerem, API Gateway, Message Queue, Service, Cache, Database, Object Storage a CDN)

218

Jaký ukazatel počtu operací za sekundu při čtení dat jste dosáhli nebo analyzovali?

Middle — Middle+
218
/11