Jaký byl váš největší projekt s databází, který jste museli realizovat nebo udržovat?
Golang
V jakých fázích pohovoru v různých organizacích se často klade tato otázka?
Jak se provádí dotazy na databázi PostgreSQL?
Můžete vysvětlit princip fungování gRPC a jeho hlavní vlastnosti?
Kolik požadavků na zápis za sekundu přicházelo k datům?
V jaké vrstvě jsou umístěni klienti pro externí služby a systémy?
Na kolika instancích/kontejnerových běžel služba?
Jaké máte zkušenosti s vývojem aplikací využívajících vícenásobné vlákna a paralelní výpočty?
Podle jakého principu snižovat nebo zvyšovat čítač have?
Můžeš se orientovat v hostech? Kolik hostů, kolik kontejnerů běží?
Jak je zajištěno připojení a zobrazení dat v Grafaně?
Jaký byl nejdelší projekt, na kterém jste pracoval?
func maxPlaces(arr []int) int { maxDistance := 0 prev, first := -1, -1 for i := 0; i < len(arr); i++ { if arr[i] == 1 { if first == -1 { first = i maxDistance = max(maxDistance, i) } else { maxDistance = max(maxDistance, (i - prev) / 2) } prev = i } } maxDistance = max(maxDistance, len(arr) - 1 - prev) return maxDistance }
Jak zorganizovat architekturu pro požadavek, který provádí obchodní logiku, volá externí službu (Google) a ukládá výsledek do databáze? Popište vrstvy shora dolů.
""" 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 """
Jak vizuálně nebo algoritmicky určit, že prvek je v datové struktuře Map jedinečný?
/* 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 }
Jaké ukazatele výkonnosti jste použili při hodnocení své práce v posledním projektu?
Pracujete teď nebo ne, a v jakém formátu: kancelář, hybridní, vzdálená?
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 }