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 }
Golang
Aké programovacie jazyky používate okrem Go?
Pracujete teraz alebo nie, a v akom formáte: kancelária, hybrid, vzdialený?
/* Potrebujeme preniesť údaje z určitého zdroja na určitého spotrebiteľa. Pri tom zdroj odovzdáva údaje v malých balíčkoch (~ desiatky záznamov), a spotrebiteľ efektívnejšie pracuje s väčšími dávkami. Reálny príklad - dodávka údajov z frontov typu Kafka do databázy Clickhouse. Zdroj: - Podmienečne nekonečný. - Zdroj nikdy nevracia viac ako MaxItems záznamov v jednom volaní Next. - V rámci jednej "relácie" (jedného volania funkcie Pipe) zdroj vždy vráti nové údaje pri každom volaní Next. - Avšak, po reštarte začne zdroj od predchádzajúcej "potvrdenej" pozície, určené cookie. Preto, *každá* hodnota cookie, ktorú vrátil volanie Next, po uložené údajov v prijímači, musí byť fixovaná volaním Commit, a to prísne v rovnakom poradí, v akom ich vrátil Next. Prijímateľ: - Nemôže spracovať viac ako MaxItems naraz. Základná úroveň: Je potrebné implementovať funkciu func Pipe(p Producer, c Consumer) error ktorá číta údaje zo zdroja, skupinu ich do bufferu veľkosti najviac MaxItems a uloží ich do prijímateľa, a následne fixuje pokrok v zdroji. */ const MaxItems = 9999 type Producer interface { // Next vracia: // - dávku položiek na spracovanie // - cookie na potvrdenie po ukončení spracovania // - chybu Next() (items []any, cookie int, err error) // Commit sa používa na označenie dávky údajov ako spracovanej 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 }
Aké ukazovatele výkonnosti ste použili pri hodnotení svojej práce v poslednom projekte?
""" Miesta v kine sú usporiadané v jednom rade. Nový divák si vyberá miesto, aby sedel čo najďalej od ostatných divákov v rade. To znamená, že vzdialenosť od tohto miesta, kam sadne, k najbližšiemu divákovi, musí byť maximálna. Je zaručené, že v rade sú vždy voľné miesta a že už sedí aspoň jeden divák. Napíšte funkciu, ktorá na základe daného radu miest (pole núl a jednotiek) vráti vzdialenosť (počet medzier medzi sedadlami) od zvoleného miesta k najbližšiemu 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 { }
Aký je rozdiel medzi L4 a L7 vyvažovačom záťaže?
/* * Máte pole celých čísel a číslo X, * je potrebné nájsť najdlhší neprázdny podsegment, ktorého minimum je X. * Vráťte dĺžku tohto podsegmentu alebo -1, ak taký neexistuje. */
""" Miesta v kine sú usporiadané v jednom rade. Nový divák, ktorý práve prišiel, si vyberá miesto, aby sedel čo najďalej od ostatných divákov v rade. To znamená, že vzdialenosť od tohto miesta, po ktorom bude sedieť, k najbližšiemu divákovi, musí byť maximálna. Je zaručené, že vždy sú voľné miesta a že už sedí aspoň jeden divák. Napíšte funkciu, ktorá na základe zadaného radu miest (pole nul a jednotiek) vráti vzdialenosť (počet medzier medzi sedadlami) od vybraného miesta k najbližšiemu divákovi. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
Aké máte skúsenosti s implementáciou a konfiguráciou systémov overovania a autorizácie?
Ako sa určuje čas vykonávania operácie pridania prvku podľa kľúča do dátovej štruktúry Map?
Ako vizuálne alebo algoritmicky určiť, že prvok je jedinečný v dátovej štruktúre Map?
Aký projekt si vybrať na technický pohovor a ako ho opísať?
Aký ukazovateľ počtu operácií za sekundu pri čítaní dát ste dosiahli alebo analyzovali?
Prečo sú potrebné dve kontroly if (na riadku 79 a na riadku s len(buf)==MaxItems), namiesto jednej?
[ime] uviedol: na riadku 20 uniq ne obsahuje počet unikátnych znakov, ale niečo iné. Čo presne?
// Pre dvoch polí celých čísel dĺžky N, // pre všetky K od 1 do N, spočítajte počet spoločných čísel v prefixoch dĺžky K. // Čísla v poli sa môžu opakovať, prienik sa počíta bez ohľadu na násobky. // Prefix dĺžky K poľa A sú prvé K prvkov poľa 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]
Aký ukazovateľ požiadaviek za sekundu sa dosiahol pri zápise údajov?
Ako posunúť okno v algoritme posuvného okna?
// Zadané sú dve zoradené sekvencie celých čísel v nerastúcim poradí. // Je potrebné vrátiť všetky prvky z prvej sekvencie, ktoré nie sú v druhej. // 0 <= N <= 10^6 // -10^9 <= a[i] <= 10^9 // [1] // [2, 3, 4, 5, 6] // [1] // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...] // [1] // [2, 3, 4, 5, 6, 7, 8] func filter(first []int, second []int) []int { res := make([]int, 0, len(first)) i, j := 0, 0 for i < len(first) && j < len(second) { if first[i] < second[j] { result = append(result, first[i]) i++ } else if first[i] > second[j] { j++ } else { i++ j++ } } for i < len(first) { result = append(result, first[i]) i++ } return result }