4 - kiiresti vastu võtta sisenevad ülesanded, 5 - tagastada ülesande tulemus päringu korral 6 - kui tulemust pole, tagasta sobiv staatus /* Protsessor - teenus, mis teostab pikka aega kestvat, ressursimahukat operatsiooni. See on juba rakendatud Tagastatavad vead on ainult seotud vale sisendandmetega, on stabiilsed ja nende korduv taotlemine on mõttetu */ type Processor interface { Process([]byte) ([]byte, error) } /* Oletame, et meil on unikaalsete identifikaatorite (näiteks UUID) generaator. Generator tagab, et kokkupõrkeid ei toimu */ type ID string // func NewID() ID /* Ajakava võtab klientidelt ülesandeid, paneb need järjekorda ja alustab töötlemist. Tagab, et samaaegselt töötab mitte rohkem kui 'threads' meetodit Võimaldab kontrollida ülesande staatust ja saada tulemust Ei blokeeri oma avalikke töötlusmeetodeid */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // algusloogika return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // teostamine return "" }
Golang
Rääkigem mikroteenuste arhitektuurist. Mis on viimasel ajal olnud rohkem: tugi või arendus?
Kuidas töödeldakse kasutajatele offline saadetud sõnumeid?
Kuidas kontrollida, kas aken sisaldab kõiki vajalikke märke?
/* Meil tuleb andmed edastada ühest allikast ühe tarbijani. Allikas tagastab andmeid väikestes osades (~kümme kirjet), samas kui tarbija töötab tõhusamalt suuremate osadega (~tuhat kirjet). Reaalne näide on andmete edastamine Kafka-tüüpi järjekordadest Clickhouse andmebaasi. Allikas: - Peaaegu lõpmatu. - Allikas ei tagasta kunagi rohkem kui MaxItems kirjet ühes Next-kutses. - Ühes "sessioonis" (ühe Pipe funktsiooni kutses) tagastab allikas iga Next-kutses uusi andmeid. - Kuid pärast taaskäivitust algab allikas eelmisest "kinnitust" saanud positsioonist, mis on määratud cookie-ga. Seetõttu, *iga* cookie väärtus, mille Next tagastab, pärast andmete salvestamist vastuvõtjasse, tuleb kinnitada Commit-kutsuga, samas järjekorras, nagu need on tagastatud Next poolt. Vastuvõtja: - Ei saa töödelda rohkem kui MaxItems korraga. Vajalik on implementeerida funktsioon func Pipe(p Producer, c Consumer) error, mis loeb andmeid allikast, rühmitab need mahuni, mis ei ületa MaxItems, ja salvestab vastuvõtjasse, pärast mida kinnitab edusamme allikas. */ const MaxItems = 9999 type Producer interface { // Next tagastab: // - partii elemente töötlemiseks // - cookie, mida tuleb kinnitada, kui töötlemine on lõppenud // - viga Next() (items []any, cookie int, err error) // Commit kasutatakse andmepartii märkimiseks töödelduks Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Kas te olete kasutanud avalikke pilvemooduleid? Kui jah, millised teenusepakkujad ja teenused?
Rääkige meile oma viimastest projektidest ja kasutatud tehnoloogilisest virnast.
Kirjeldage algoritmi maxSegment ülesande lahendamiseks
Rääkige, mis lõpuks toimub — kuidas me kogume pufferit?
Kas see õige, et te praegu elate [linnas] ja teile oleks mugav töötada hübriidformaadis koos kontorisse minekuga?
Millised on teie palgaootused?
Kuidas piirata goroutine'ide arvu nii, et samaaegselt ei tööta rohkem kui 'threads' meetodit Process? Kes tõmbab ülesandeid kanalist?
// kood funktsioonile best() // vigade käsitlemine, kui backend ei ole saadaval
Kas teil on kogemusi mitme lõimega või asünkroonsete operatsioonidega programmide kirjutamisel?
Vaatame näidet: first=[1,1,2], second=[1,2]. Mida peaks teie algoritm tagastama ja kas töötab õigesti duplikaatidega?
Milliseid anti-mustreid teate mikroteenuste arhitektuuris?
[nimi] küsis: säilitades elemendi positsiooni, mis on väiksem kui X, mis positsioon saab olema?
Kas kogu tööaja jooksul teinud juhtimisülesandeid?
// kood funktsioonile best() // vigade käsitlemine, kui backend ei ole saadaval
Kui teile pakutakse tööd ja te seda acceptite, kui kiiresti olete valmis tööle asuma?