Hai să vorbim despre arhitectura microserviciilor. Ce a fost mai mult în ultima vreme: suportul sau dezvoltarea?
Golang
Cum sunt procesate mesajele trimise utilizatorilor offline?
Cum verifici dacă fereastra conține toate caracterele necesare?
4 - acceptă rapid sarcinile de intrare, 5 - returnează rezultatul sarcinii la cerere 6 - dacă nu există rezultat, returnează starea corespunzătoare /* Procesor - un serviciu care efectuează o operație lungă și consumatoare de resurse. Este deja implementat Eroarea pe care o returnează este exclusiv legată de datele de intrare incorecte, sunt stabile și re-rezolvarea lor este inutilă */ type Processor interface { Process([]byte) ([]byte, error) } /* Presupunem că avem un generator de identificatori unici (de exemplu, UUID). Generatorul garantează că nu vor exista coliziuni */ type ID string // func NewID() ID /* Scheduler acceptă sarcini de la clienți, le pune în coadă și le pornește în procesare. Asigură că nu sunt în execuție simultan mai mult de 'threads' metode de procesare Oferă posibilitatea de a verifica starea sarcinii și de a obține rezultatul nu blochează metodele sale publice pentru procesare */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // logică de inițializare return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // implementare return "" }
/* Trebuie să transferăm date dintr-o sursă către un consumator. Sursa oferă date în loturi mici (~zece înregistrări), în timp ce consumatorul funcționează mai eficient cu loturi mari (~o mie de înregistrări). Un exemplu real este transferul de date din cozi de tip Kafka către o bază de date Clickhouse. Sursa: - Practic infinită. - Sursa nu returnează niciodată mai mult de MaxItems înregistrări într-un singur apel Next. - În cadrul unei "sesiuni" (un apel al funcției Pipe), sursa returnează date noi la fiecare apel Next. - Cu toate acestea, după repornire, sursa va începe de la poziția "confirmată" anterioară, definită de cookie. Prin urmare, *fiecare* valoare de cookie returnată de Next, după salvarea datelor în receptor, trebuie confirmată cu un apel Commit, în aceeași ordine în care au fost returnate de Next. Receptorul: - Nu poate procesa mai mult de MaxItems odată. Este necesar să implementați funcția func Pipe(p Producer, c Consumer) error care citește date din sursă, le grupează într-un buffer de dimensiune cel mult MaxItems și le salvează în receptor, după care confirmă progresul în sursă. */ const MaxItems = 9999 type Producer interface { // Next returnează: // - un lot de items de procesat // - cookie pentru a fi confirmat când procesarea este terminată // - eroare Next() (items []any, cookie int, err error) // Commit este folosit pentru a marca lotul de date ca procesat Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Ați folosit cloud-uri publice? Dacă da, care furnizori și servicii?
Spune-ne despre proiectele tale recente și despre tehnologia utilizată.
Descrieți algoritmul pentru rezolvarea problemei maxSegment
Spune-mi, ce se întâmplă în final — cum acumulăm bufferul?
Este corect că în prezent locuiți în [oraș] și ar fi convenabil pentru dumneavoastră să lucrați în format hibrid cu vizite la birou?
Care sunt așteptările tale salariale?
Ai experiență în scrierea de programe cu multithreading sau operații asincrone?
Să luăm un exemplu: first=[1,1,2], second=[1,2]. Ce ar trebui să returneze algoritmul tău și funcționează corect cu duplicate?
Ce anti-modeluri în arhitectura microserviciilor cunoști?
Ați avut sarcini de conducere pe tot parcursul carierei?
[nume] a întrebat: păstrând poziția unui element mai mic decât X, care va fi poziția?
Cum să limitezi numărul de goroutines astfel încât nu mai mult de 'threads' metode de Process să ruleze simultan? Cine va extrage sarcinile din canal?
Dacă ți se face o ofertă de muncă și o accepți, cât timp ți-ar lua să fii gata să începi să lucrezi?
Cu ce baze de date sau alte depozite de date ai lucrat? Câte solicitări pe secundă (RPS) pentru scriere și citire?
Ai experiență în dezvoltarea și suportul sistemelor distribuite?