Golang
Mida vahemällu salvestas? Mõned kataloogid?
/* Meilės reikia perduoti duomenis iš tam tikro šaltinio tam tikram vartotojui. Šaltinis teikia duomenis mažais paketais (~ dešimtys įrašų), o vartotojas efektyviau dirba su didesniais paketais. Reali pavyzdys - duomenų tiekimas iš Kafka tipo eilių į Clickhouse duomenų bazę. Šaltinis: - Sąlyginai begalinis. - Šaltinis niekada negrąžins daugiau nei MaxItems įrašų vienu Next iškvietimu. - Vienoje "sesijoje" (vieno Pipe funkcijos iškvietimo metu) šaltinis kiekvieną kartą grąžina naujus duomenis. - Tačiau, po perkrovimo, šaltinis pradės nuo ankstesnės "patvirtintos" pozicijos, nurodytos cookie. Todėl, *kiekviena* cookie reikšmė, kurią grąžino Next, po duomenų išsaugojimo gavėjui, turi būti patvirtinta Commit, ir tai turi būti atlikta griežtai tokia pačia seka, kaip ir grąžinta. Gavėjas: - Negali apdoroti daugiau nei MaxItems vienu metu. Pagrindinis lygis: Reikia įgyvendinti funkciją func Pipe(p Producer, c Consumer) error, kuri skaito duomenis iš šaltinio, juos grupuoja į buferį, kurio dydis ne didesnis kaip MaxItems, ir saugo gavėjui, po to patvirtina pažangą šaltinyje. */ const MaxItems = 9999 type Producer interface { // Next grąžina: // - duomenų paketą // - cookie patvirtinimui // - klaidą Next() (items []any, cookie int, err error) // Commit žymi, kad duomenų paketas apdorotas 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 }
Kas saaksite loetleda ettevõtteid või tarnijaid, kellega olete kokku puutunud?
Rääkige oma viimatisest töökohast: millega tegeledes, millist tehnoloogiat kasutades, millised olid keerulised ülesanded?
Mis on slice Go keeles?
Kas saaksite loetleda gRPC-s kasutatavate peamisi kõne tüüpe?
Kas on lubatud saada teavet kanalilt, millel on seatud suletud režiim?
Kas on võimalik kirjutada otse Kafka kindlasse partitsiooni, vältides hashimiseks kasutatavat võtit?
Kas saaksite selgitada andmestruktuuri, näiteks nimekirja või massiivi, lõppu elementide lisamise mehhanismi?
Millised andmed ja kuidas neid paigutatakse virna programmi täitmisel?
Milliseid vahemälu meetodeid eelistate oma projektides kasutada ja miks?
Mis vahe on materialiseerunud vaate ja tavalise vaate vahel?
Millised komponendid kuuluvad seotud nimekirja struktuuri?
Kuidas määratakse Map andmestruktuuris võtme järgi elemendi lisamise operatsiooni täitmise aeg?
Miks on tavaliselt niitide algne virna suurus seatud 2 MB-ks?
Kas olete kunagi kasutanud ErrGroup struktuuri oma projektides paralleelsete ülesannete haldamiseks?
Milliseid ebatavalisi või mitte-standardsed pakette olete oma praktikas kasutanud?
Miks viilu kasv aeglustub ja miks seda ei saa pidevalt kahekordistada?
Kus toimuvad käskude käivitamine GitLab CI/CD tööprotsessi ajal?
Millised võivad olla tagajärjed, kui tarkvaraarenduses ei järgita SOLID põhimõtteid?