Sobes.tech

Golang

Ի՞նչ է կեշավորվել: Որոշ գրացուցակներ?

Senior
МВидео/эльдорадо
166

/* Մեզ անհրաժեշտ է փոխանցել տվյալներ որոշ աղբյուրից որոշ սպառողի: Աղբյուրը փոքր խմբերով է տալիս տվյալներ (~ տասնյակ գրառումներ), իսկ սպառողը ավելի արդյունավետ է աշխատում մեծ խմբերով: Օրինակ՝ Kafka տիպի հերթերից տվյալների փոխանցումը Clickhouse բազա: Աղբյուր: - Կանխամտածված անսահմանափակ: - Աղբյուրը երբեք չի վերադարձնի ավելի քան MaxItems գրանցամատյան մեկ կանչով Next: - Միևնույն "սեսիայի" շրջանակում (մեկ Pipe ֆունկցիայի կանչում) աղբյուրը յուրաքանչյուր Next-ով նոր տվյալներ է վերադարձնում: - Սակայն, վերագործարկումից հետո աղբյուրը սկսում է նախորդ "հաստատված" դիրքից, որը նշված է cookie-ով: Այդ պատճառով, յուրաքանչյուր cookie արժեք, որը վերադարձվել է Next-ով, պետք է հաստատվի Commit-ով, և դա պետք է կատարվի նույն հերթականությամբ, ինչպես վերադարձվել է: Սպառող: - Չի կարող մշակել ավելի քան MaxItems միանգամից: Հիմնական մակարդակ: Պետք է իրականացնել func Pipe(p Producer, c Consumer) error ֆունկցիան՝ որոնք կկարդա տվյալները աղբյուրից, կկազմեն դրանք բուֆեր, որի չափը չի գերազանցի MaxItems-ը, և կպահեն սպառողում, հետո կստորագրեն առաջընթացը աղբյուրում: */ const MaxItems = 9999 type Producer interface { // Next վերադարձնում է՝ // - խմբաքանակ տվյալների // - cookie հաստատելու համար // - սխալ Next() (items []any, cookie int, err error) // Commit-ը նշում է, որ տվյալ խմբաքանակը մշակված է 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 }

Middle
Яндекс
166

Կարող եք նշել ընկերություններ կամ մատակարարներ, որոնց հետ գործ եք ունեցել?

Junior — Middle
166

Խոսեք ձեր վերջին աշխատանքային վայրի մասին: ինչ եք անում, ինչ տեխնոլոգիաներ եք օգտագործում, ինչ դժվար խնդիրներ ունեք?

Middle
OZONOZON
166

Ի՞նչ է slice-ը Go-ում։

Middle
Бюро 1440Бюро 1440
166

Կարող եք նշել gRPC-ում օգտագործվող հիմնական զանգերի տեսակները?

Junior — Middle
СБЕР дейвайсыСБЕР дейвайсы
166

Արդյոք թույլատրելի է փակ ռեժիմով կարգավորված ալիքից տեղեկություններ ստանալը?

Junior — Middle
ГазпромГазпром
X5 groupX5 group
AvitoAvito
+1
166

Կարո՞ղ է ուղիղ գրանցել Kafka-ի որոշակի բաժնում, շրջանցելով հեշավորման համար բանալի։

Junior — Middle
Самокат Тех
166

Կարող եք բացատրել տվյալների կառուցվածքի, օրինակ, ցանկի կամ զանգվածի վերջում տարր ավելացնելու մեխանիզմը?

Junior — Middle
Lamoda Tech
Startribe
Самокат Тех
+2
166

Ի՞նչ տվյալներ և ինչպե՞ս են տեղադրվում ստեկում ծրագրի կատարման ժամանակ։

Junior — Middle
166

Ի՞նչ մեթոդներ եք նախընտրում օգտագործել ձեր նախագծերում և ինչու՞:

Junior — Middle
166

Ի՞նչն է տարբերությունը մատակարարված տեսքի և սովորական տեսքի միջև։

Middle
RWB
165

Ի՞նչ բաղադրիչներ են մտնում կապակցված ցանկի կառուցվածքին։

Junior — Middle
165

Ինչպե՞ս է որոշվում Map տվյալների կառուցվածքում բանալիով տարր ավելացնելու գործողության կատարման ժամանակը։

Junior — Middle
ЯндексЯндекс
165

Ինչու է սովորաբար թելերի սկզբնական ստեկի չափը սահմանվում է 2 ՄԲ-ով?

Junior — Middle
165

Կարո՞ղ եք երբևէ օգտագործել ErrGroup կառուցվածքը ձեր նախագծերում՝ հոսքային առաջադրանքները կառավարելու համար։

Junior — Middle
165

Ի՞նչ անսովոր կամ ոչ ստանդարտ փաթեթներ եք օգտագործել ձեր պրակտիկայում:

Junior — Middle
165

Ինչու է սլայսի աճը դանդաղում և ինչու չի կարելի մշտապես կրկնապատկել?

Middle
RWB
165

Որտե՞ղ է կատարվում հրահանգների գործարկումը GitLab CI/CD-ի աշխատանքային գործընթացում։

Junior — Middle
165

Ի՞նչ հետևանքներ կարող են առաջանալ ծրագրային ապահովման նախագծման ժամանակ SOLID սկզբունքների պահպանման բացակայության դեպքում։

Junior — Middle
Zonatelecom
165
/413