Sobes.tech

Golang

Vai jūs šobrīd strādājat vai nē, un kādā formātā: birojs, hibrīds, attālināti?

246

Kuras programmēšanas valodas jūs izmantojat papildus Go?

246

/* Mums nepieciešams pārsūtīt datus no noteikta avota noteiktam patērētājam. Šajā procesā avots sniedz datus mazās partijās (~ desmitiem ierakstu), bet patērētājs efektīvāk strādā ar lielākiem batčiem. Reāls piemērs - datu piegāde no Kafka tipa rindām uz Clickhouse datubāzi. Avots: - Nosacīti bezgalīgs. - Avots nekad neatgriezīs vairāk par MaxItems ierakstiem vienā Next izsaukumā. - Vienā "sesijā" (viena Pipe funkcijas izsaukuma laikā) avots katru reizi atgriež jaunus datus. - Tomēr, pēc pārstartēšanas, avots sāk no iepriekšējās "apstiprinātās" pozīcijas, kas norādīta ar cookie. Tādēļ, *katra* cookie vērtība, ko atgrieza Next, pēc datu saglabāšanas saņēmējā, jāapstiprina ar Commit, un tas jāizdara stingri tādā pašā secībā, kā tie tika atgriezti. Saņēmējs: - Nevar apstrādāt vairāk par MaxItems vienlaikus. Pamatlīmenis: Jāimplementē funkcija func Pipe(p Producer, c Consumer) error, kura lasa datus no avota, tos grupē buferī, kura lielums nepārsniedz MaxItems, un saglabā saņēmējā, pēc tam apstiprina progresu avotā. */ const MaxItems = 9999 type Producer interface { // Next atgriež: // - datu partiju // - cookie apstiprināšanai // - kļūdu Next() (items []any, cookie int, err error) // Commit apzīmē, ka datu partija ir apstrādāta 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 }

242

Kādus efektivitātes rādītājus izmantojāt, novērtējot savu darbu pēdējā projektā?

Junior — Middle
242

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 }

240

Kāda ir jūsu pieredze autentifikācijas un autorizācijas sistēmu ieviešanā un konfigurēšanā?

Junior — Middle
240

Kāda ir atšķirība starp L4 un L7 slodzes līdzsvarotājiem?

239

""" Kinoteātra vietas ir izvietotas vienā rindā. Jauns skatītājs izvēlas vietu, lai sēdētu pēc iespējas tālāk no citiem skatītājiem rindā. Tas ir, attālums no šīs vietas, kur viņš sēdēs, līdz tuvākajam skatītājam, ir jābūt maksimālam. Ir garantēts, ka rindā vienmēr ir brīvas vietas un ka jau ir vismaz viens skatītājs. Uzrakstiet funkciju, kas, pamatojoties uz dotu vietu rindu (nulles un vienības masīvs), atgriezīs attālumu (starp sēdvietām skaitu) no izvēlētās vietas līdz tuvākajam skatītājam. [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 { }

239

""" Kinoteātra vietas ir izvietotas vienā rindā. Jauns apmeklētājs, kurš tikko ieradies, izvēlas vietu, lai sēdētu pēc iespējas tālāk no citiem apmeklētājiem rindā. Tas ir, attālums no šīs vietas, līdz tuvākajam apmeklētājam, ir jābūt maksimālam. Tiek garantēts, ka vienmēr ir brīvas vietas un jau ir sēdējis vismaz viens apmeklētājs. Uzrakstiet funkciju, kas, dodot vietu rindu (masīvu no nullēm un vieniniekiem), atgriezīs attālumu (skaitu starp sēdvietām) no izvēlētās vietas līdz tuvākajam apmeklētājam. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

238

/* * Dotais veselu skaitļu masīvs un skaitlis X, * jāatrod garākais ne tukšais apakšsērija, kura minimums ir X. * Atgrieziet šīs apakšsērijas garumu vai -1, ja tāda nav. */

236

Kuru projektu izvēlēties tehniskajai intervijai un kā to aprakstīt?

234

Kā tiek noteikts laiks, kas nepieciešams, lai veiktu elementa pievienošanas operāciju pēc atslēgas Map datu struktūrā?

Junior — Middle
233

Kā vizuāli vai algoritmiski noteikt, ka elements ir unikāls Map datu struktūrā?

Junior — Middle
231

Kāpēc ir nepieciešami divi if pārbaudes (79. rindā un rindā ar len(buf)==MaxItems), nevis viena?

230

Kāds bija pieprasījumu skaits sekundē, ierakstot datus?

Junior — Middle
230

// Diviem veselu skaitļu masīviem ar garumu N, // visiem K no 1 līdz N, saskaitiet kopīgo skaitļu skaitu prefiksos ar garumu K. // Skaitļi masīvā var atkārtoties, kopība tiek skaitīta bez daudzuma reizinājumiem. // Prefikss ar garumu K no masīva A ir pirmie K elementu no masīva 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]

228

[vārds] norādīja: 20. rindā uniq nesatur unikālo rakstzīmju skaitu, bet kaut ko citu. Kas tieši?

227

// Dotas ir saskaņotas secības ar veseliem skaitļiem, kas ir sakārtotas augošā secībā. // Jāatgriež visi pirmās secības elementi, kuri nav otrajā secībā. // 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 }

226

Pastāstiet par visgrūtāko un interesantāko uzdevumu, ko jūs risinājāt, īpaši arhitektūras pieredzes kontekstā.

225

Kā pārvietot logu slīdēšanas loga algoritmā?

225
/11