Sobes.tech

Golang

Kako se obrađuju poruke poslata korisnicima u offline režimu?

139

Да ли сте користили јавне облаке? Ако јесте, који провајдери и услуге?

139

Kako proveriti da li prozor sadrži sve potrebne znakove?

139

Реците нам о вашим последњим пројектима и коришћеном технолошком стеку.

138

/* Морамо пренети податке из извора у неку врсту потрошача. Извор даје податке у малим пакетићима (~десет записа), док потрошач ради ефикасније са већим пакетићима (~хиљаду записа). Прави пример је пренос података из 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 { // TODO }

137

4 - брзо прихватање улазних задатака, 5 - враћање резултата задатка по захтеву 6 - ако резултат нема, враћа одговарајући статус /* Процесор - услуга која извршава дуготрајну, ресурсно-интензивну операцију. Већ је реализована Грешке које враћа су искључиво повезане са некоректним улазним подацима, стабилне су и поновно захтевање је безсмислено */ type Processor interface { Process([]byte) ([]byte, error) } /* Претпостављамо да имамо генератор јединствених идентификатора (нпр. UUID). Генератор гарантује да неће бити судара */ type ID string // func NewID() ID /* Планер прихвата задатке од клијената, ставља их у ред и покреће у обраду. Обезбеђује да не више од 'threads' метода обраде ради истовремено Омогућава проверу статуса задатка и добијање резултата не блокира своје јавне методе за обраду */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // логика иницијализације return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // имплементација return "" }

136

Опишите алгоритам за решавање задатка maxSegment

136

Ispričaj šta se na kraju dešava — kako skupljamo bafer?

135

Које су ваши очекивања у погледу плате?

131

Да ли имате искуство у писању програма са мултитредингом или асинхроним операцијама?

128

Које анти-патерне у архитектури микросервиса познајете?

127

[ime] je pitao: čuvajući poziciju elementa manju od X, koja će biti pozicija?

126

Razmotrimo primer: first=[1,1,2], second=[1,2]. Šta bi vaš algoritam trebao da vrati i da li ispravno radi sa duplikatima?

125

Ако вам понуде посао и га прихватите, колико ће вам времена требати да будете спремни да почнете да радите?

125

Balancer mora razumeti da backend odgovara greškama, i pri prelasku praga na određeno vreme, isključiti ga iz balansiranja (Circuit Breaker)

124

Са којим базама података или другим складиштима података сте радили? Колико захтева по секунду (RPS) за запис и читање?

122

Да ли имате искуство у развоју и подршци дистрибуираних система?

122

Da li ste se tokom celog radnog vremena bavili liderskim zadacima?

122

Da ли је тачно да тренутно живите у [град] и да вам је удобно да радите у хибридном формату са излазима у канцеларију?

121

Који је био највећи обим сачуваних података?

119
/11