Golang
Kā notiek signālu apmaiņa ar kanāliem programmēšanas sistēmā?
Kā Go valodā tiek īstenota panikas stāvokļu pārvaldība un avārijas situācijās radušos kļūdu apstrāde?
Ko tieši darīja ar dublētiem pēc to atklāšanas? Kur tie tika tīrīti?
Kādiem metodiem un rīkiem jūs analizējāt un noteicāt slodzes problēmu cēloņus sistēmās?
Kādus komandas parasti izmanto Linux operētājsistēmā?
Kādus pieejas var izmantot, lai nodrošinātu pavedienu drošību, strādājot ar slices daudzprocesu vidē?
Kādas operācijas ir atļautas, strādājot ar nil sagriezienu programmēšanas valodā?
Pastāstiet par sarežģītu uzdevumu, kuru jūs spējāt atrisināt, rakstot skriptu Linux sistēmai
Kā var regulēt kešatmiņā saglabāto datu apjomu?
Gatavība darboties kā vienīgais Backend speciālists komandā
Kāda ir galvenā iemesls, kāpēc izmanto sync.Map tipu Go?
Kādi ir labas prakses un antipatterns vienību testēšanā? Kā saprast, vai testi ir labi?
Kādi ir kešatmiņas izmantošanas priekšrocības un trūkumi sistēmās?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Kompiliācijas kļūda # command-line-arguments ./main.go:39:32: sintakses kļūda: negaidīts jauns rinda, gaidīts { pēc if nosacījuma
Vai jums kādreiz ir nācies saskarties ar grūtībām, īstenojot mijiedarbību starp dažādiem pakalpojumiem?
Kā tiek nodots šķēle (slice) funkcijai programmēšanas valodā?
Kas ir Saga paraugs?
Kāpēc nepaņēma Testcontainers?
/* 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 }
Vai tabula ar (id PRIMARY KEY, data JSON) ir pietiekami laba PostgreSQL indekss meklēšanai pēc atslēgas?