// kód pre funkciu best() // s obsluhou chýb, ak backend nie je dostupný
Golang
V akom programovacom jazyku pracujete? Prečo vznikli ťažkosti so syntaxou?
/* Musíme preniesť údaje z nejakého zdroja k nejakému spotrebiteľovi. Zdroj poskytuje údaje v malých dávkach (~desať záznamov), zatiaľ čo spotrebiteľ pracuje efektívnejšie s väčšími dávkami (~tisíc záznamov). Reálny príklad je prenos údajov z front typu Kafka do databázy Clickhouse. Zdroj: - Takmer nekonečný. - Zdroj nikdy nevráti viac ako MaxItems záznamov v jednom volaní Next. - V rámci jednej "seansy" (jedného volania funkcie Pipe) zdroj pri každom Next vracia nové údaje. - Avšak, po reštarte, zdroj začne od predchádzajúcej "potvrdenej" pozície, určené cookie. Preto *každá* hodnota cookie, ktorú Next vráti, po uložené údajov do príjemcu, musí byť potvrdená volaním Commit, v rovnakej poradí, v akom boli vrátené od Next. Prijímateľ: - Nemôže spracovať viac ako MaxItems naraz. Je potrebné implementovať funkciu func Pipe(p Producer, c Consumer) error, ktorá číta údaje zo zdroja, ich skupinu v bufferi veľkosti nie väčšej ako MaxItems a uloží ich do príjemcu, až po tom potvrdí pokrok v zdroji. */ const MaxItems = 9999 type Producer interface { // Next vracia: // - dávku položiek na spracovanie // - cookie na potvrdenie, keď je spracovanie dokončené // - chybu Next() (items []any, cookie int, err error) // Commit sa používa na označenie dávky dát ako spracovanej Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Pojdimo govoriti o mikroservisnej architektúre. Čo bolo v poslednom čase viac: podpora alebo vývoj?
Ste ochotný prejsť na iný programovací jazyk, ak je to potrebné alebo z osobných dôvodov?
4 - rýchle prijímanie prichádzajúcich úloh, 5 - vrátenie výsledku úlohy na požiadanie 6 - ak nie je výsledok, vrátenie príslušného stavu /* Procesor - služba, ktorá vykonáva dlhú, zdrojovo náročnú operáciu. Už je implementovaná Chyby, ktoré vracia, sú výlučne spojené s nesprávnymi vstupnými údajmi, sú stabilné a opätovné požiadanie je zbytočné */ type Processor interface { Process([]byte) ([]byte, error) } /* Predpokladáme, že máme generátor jedinečných identifikátorov (napríklad UUID). Generator garantuje, že nedôjde ku kolíziám */ type ID string // func NewID() ID /* Plánovač prijíma úlohy od klientov, ich pridáva do fronty a začína ich spracovávať. Zabezpečuje, že súčasne beží najviac 'threads' metód spracovania Umožňuje skontrolovať stav úlohy a získať výsledok neblokuje svoje verejné metódy na spracovanie */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // inicializačná logika return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // implementácia return "" }
Ako skontrolovať, či okno obsahuje všetky potrebné znaky?
Použili ste verejné cloudové služby? Ak áno, akí poskytovatelia a služby?
Máte skúsenosti s písaním programov s viacvláknovým spracovaním alebo asynchrónnymi operáciami?
Povedzte nám o svojich posledných projektoch a použitom technologickom stacku.
// kód pre funkciu best() // s obsluhou chýb, ak backend nie je dostupný
Je správne, že momentálne bývate v [mesto] a bolo by vám pohodlné pracovať v hybridnom formáte s návštevami v kancelárii?
Povedz mi, čo sa nakoniec deje — ako akumulujeme buffer?
Upoštevajmo primer: first=[1,1,2], second=[1,2]. Kaj naj vrne vaš algoritem in ali pravilno deluje z duplikati?
Aké sú vaše očakávania ohľadom platu?
Ako obmedziť počet gorútin, aby súčasne ne bežalo viac ako 'threads' metód Process? Kto bude ťahať úlohy z kanála?
Aké anti-vzory v architektúre mikroservisov poznáte?
// kód pre funkciu best() // s obsluhou chýb, ak backend nie je dostupný
[meno] sa opýtal: pri zachovaní pozície prvku menšieho ako X, aká bude pozícia?
Zabývali ste sa vedúcimi úlohami počas celej doby práce?