Lucrezi acum sau nu, și în ce format: birou, hibrid, remote?
Golang
Care este complexitatea algoritmului în timp și memorie?
/* Trebuie să transferăm date dintr-o sursă către un consumator. Sursa oferă date în loturi mici (~zeci de înregistrări), în timp ce consumatorul funcționează mai eficient cu loturi mari. Un exemplu real este transferul de date din cozi de tip Kafka în baza de date Clickhouse. Sursa: - Practic infinită. - Sursa nu returnează niciodată mai mult de MaxItems în cadrul unei singure apelări Next. - În cadrul unei "sesiuni" (un apel al funcției Pipe), sursa returnează date noi la fiecare Next. - Cu toate acestea, după repornire, sursa va începe de la poziția "confirmată" anterioară, indicată de cookie. Prin urmare, *fiecare* valoare de cookie returnată de Next, după salvarea datelor în receptor, trebuie confirmată cu o apelare la Commit, în aceeași ordine în care au fost returnate de Next. Receptor: - Nu poate procesa mai mult de MaxItems odată. Nivel de bază: Este necesar să implementați funcția func Pipe(p Producer, c Consumer) error care citește date din sursă, le grupează într-un buffer de dimensiune maximă MaxItems și le salvează în receptor, apoi confirmă progresul în sursă. */ const MaxItems = 9999 type Producer interface { // Next returnează: // - un lot de elemente de procesat // - un cookie pentru a fi confirmat după finalizarea procesării // - o eroare Next() (items []any, cookie int, err error) // Commit este folosit pentru a marca lotul de date ca fiind procesat 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 }
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 }
Ce indicatori de performanță ați folosit pentru a evalua munca dvs. în ultimul proiect?
""" Locurile din cinematograf sunt aranjate într-un singur rând. Un spectator care tocmai a venit alege un loc, pentru a sta cât mai departe de ceilalți spectatori din rând. Adică, distanța de la acel loc, unde va sta spectatorul, până la cel mai apropiat spectator trebuie să fie maximă. Se garantează că întotdeauna există locuri libere în rând și că cel puțin un spectator deja stă. Scrieți o funcție care, dat fiind un rând de locuri (un array de zerouri și unu), să returneze distanța (numărul de spații între scaune) de la locul ales până la cel mai apropiat spectator. [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 { }
Care este diferența dintre un echilibrator de sarcină L4 și unul L7?
""" Locurile din cinematograf sunt aranjate într-un rând. Un spectator care tocmai a sosit alege un loc, pentru a sta cât mai departe de ceilalți spectatori din rând. Adică, distanța de la acel loc, până la cel mai apropiat spectator, trebuie să fie maximă. Se garantează că există întotdeauna locuri libere și că cel puțin un spectator este deja așezat. Scrieți o funcție care, dat fiind un rând de locuri (un array de zerouri și unu), va returna distanța (numărul de spații între scaune) de la locul ales până la cel mai apropiat spectator. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
/* * Se dă un array de numere întregi și un număr X, * trebuie să găsești cel mai lung subsegment nenul care are minimul egal cu X. * Returnează lungimea acestui subsegment sau -1 dacă nu există. */
Ce proiect să alegi pentru un interviu tehnic și cum să-l descrii?
Cum se determină timpul de execuție al operației de adăugare a unui element după cheie în structura de date Map?
Cum se determină vizual sau algoritmic că un element este unic în structura de date Map?
Care a fost indicatorul de solicitări pe secundă atins în timpul scrierii datelor?
De ce sunt necesare două verificări if (pe linia 79 și pe linia cu len(buf)==MaxItems), în loc de una singură?
// Se dau două secvențe sortate în ordine non-descrescătoare de numere întregi. // Este necesar să returnați toate elementele din prima secvență care nu sunt în a doua. // 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 }
// Pentru două array-uri de numere întregi de lungime N, // pentru toate K de la 1 la N, numărați numărul de numere comune în prefixele de lungime K. // Numerele din array pot fi repetate, intersecția se calculează fără a ține cont de multiplicări. // Un prefix de lungime K al array-ului A este primele K elemente ale array-ului 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]
Povestiți-ne despre cea mai dificilă și interesantă sarcină pe care ați rezolvat-o, în special despre experiența arhitecturală.
[nume] a indicat: pe linia 20, uniq nu conține numărul de caractere unice, ci altceva. Ce anume?
Locuiești în prezent în Moscova? Ce oraș iei în considerare? Te gândești la un format de lucru hibrid? În ce etapă a căutării ești?
Cum se mută fereastra în algoritmul de fereastră glisantă?