Golang
Чӣ кэш карда шуд? Баъзе директорияҳо?
/* Морате пренети податке из извора одређеном потрошачу. При томе извор испоручује податке у малим пакетићима (~ десетине записа), а потрошач ради ефикасније са већим батчевима. Реалан пример - испорука података из редова типа Kafka у базу података Clickhouse. Извор: - Условно бесконачан. - Извор никада не враћа више од MaxItems записа у једном позиву Next. - У оквиру једне "сесије" (једног позива функције Pipe), извор сваки пут враћа нове податке за сваки позив Next. - Међутим, након поновног покретања, извор почиње од претходне "потврђене" позиције, одређене cookie-јем. Стога, *свака* вредност cookie-а коју је вратио позив Next, након чувања података у примаоцу, мора бити фиксирана позивом Commit, и то строго у истом редоследу у којем су враћени од стране Next. Прималац: - Не може обрадити више од 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 }
Оё шумо метавонед ширкатҳо ё таъминкунандагонро, ки бо онҳо кор кардаед, номбар кунед?
Дар бораи ҷойи охирини корӣ: чӣ кор мекардед, кадом стекро истифода мебурдед, вазифаҳои душвор буд?
Слайс дар Go чист?
Оё метавонед намудҳои асосии зангҳоро, ки дар gRPC истифода мешаванд, номбар кунед?
Оё гирифтани маълумот аз канал бо режими пӯшида иҷозат дорад?
Оё имкон дорад, ки ба партисияи муайяни Kafka мустақиман нависед, бидуни калид барои хешинг?
Оё шумо метавонед механизмии илова кардани унсур ба охири сохтори додаҳоро, масалан, рӯйхат ё массив, шарҳ диҳед?
Дар кадом ҳолатҳо ва чӣ гуна маълумотҳо дар стеки иҷро мешаванд?
Кадом усулҳои кешгириро дар лоиҳаҳои худ истифода мебаред ва чаро?
Вижати материализатсия чӣ гуна аз вижати оддӣ фарқ мекунад?
Компонентҳои структураи рӯйхати пайвастшуда кадомҳоянд?
Вақти иҷрои амалиёти илова кардани унсур бо калид дар структураи додаҳои Map чӣ гуна муайян карда мешавад?
Чаро одатан андозаи ибтидоии стеки сӯрохҳо 2 МБ муқаррар карда мешавад?
Оё шумо то ҳол сохтори ErrGroup-ро дар лоиҳаҳои худ барои идоракунии вазифаҳои параллелӣ истифода бурдаед?
Кадом бастаи ғайриодатӣ ё ғайриодатии бастаҳоро дар амалияатон истифода бурдед?
Чаро афзоиши ломика суст мегзарад ва чаро наметавонем ҳамеша ду баробар кардан?
Дар кадом ҷойи фармони дар раванди кории GitLab CI/CD иҷро мешаванд?
Кадом, ки принсипҳои SOLID дар тарҳрезии нармафзор риоя нашаванд, чӣ оқибатҳо метавонанд ба вуҷуд оянд?