Kas praegu elate Moskvā? Kuru pilsētu apsverat? Vai apsverat hibrīdu darba formātu? Kurā meklēšanas posmā atrodaties?
Golang
Kas teil on teisi aktiivseid intervjuuprotsesse?
Kas saaksite nimetada oma praegust sissetuleku taset?
Kuidas neid metrikandmeid Grafanas integreeritakse ja kuvatakse?
Hajutatava sõnumside süsteemi projekteerimine, mis toetab 150 miljonit kasutajat, 75 miljonit DAU-d, 225 miljonit MAU-d, 1,2 miljonit lugemist / 300 000 kirjutamist QPS, 5 miljonit samaaegset kasutajat, 60 PB uusi andmeid aastas, aastane kasv 30%, P99 <200 ms lugemiseks, <300 ms kirjutamiseks, SLA 99,95%. KONTEKST Vajalik on projekteerida hajutatud sõnumside süsteem, sarnane WhatsApp-ile, mis toetab 1:1 ja grupivestlusi, tagab sõnumite kohaletoimetamise, kuvab kasutajate online-olekuid ning edastab multimeediumifaile (pildid, videod, helid). Süsteem peab tagama kõrge kättesaadavuse ja madala latentsi, toetama kõrget paralleelsust ning skaleeruma globaalselt. FUNKTSIONAALSED NÕUDED - Toetab isiklikke (1:1) ja grupivestlusi koos osalejate lisamise/eemaldamise võimalusega - Tekstisõnumite ja multimeediumifailide saatmine ja vastuvõtt NENFUNKTSIONAALSED NÕUDED - End-to-end krüpteerimise rakendamine teenuste või klientide tasandil puudub, välja arvatud üldine märge. - Ei ole selgelt kirjeldatud sharding ja replikatsiooni andmebaasides chat_id või user_id järgi, skaleeritavuse ja tõrkekindluse tagamiseks. - Puudub selge komponent või mehhanism offline-sõnumite sünkroniseerimiseks ja kohaletoimetamise kinnitusmeetmed. - Ei ole selge, kuidas toimub koormuse jaotamine andmebaaside ja teenuste vahel, eriti tipptundidel. **Olulised punktid, mida arvestada:** (Diagramm näitab arhitektuuri Load Balancer, API Gateway, Message Queue, Service, Cache, Database, Object Storage ja CDN abil)
Milline on andmete lugemise ajal saavutatud või analüüsitud operatsioonide arv sekundis?
Milline oli viimati töötanud meeskonna koosseis?
Kas sul on aktiivne GitHub või LinkedIn?
Racontre brièvement ce que tu as fait dans tes emplois précédents et quelles fonctionnalités tu as implémentées.
/* Meil on vaja edastada andmeid kindlast allikast kindlale tarbijale. Sel juhul annab allikas väikeseid partii (~ kümneid kirjeid), kuid tarbija töötab optimaalselt suuremate partiidega (~ tuhat kirjet). Tõeline näide - andmete edastamine Kafka tüüpi järjekordadest Clickhouse andmebaasi. Allikas: - Tinglikult lõpmatu. - Allikas ei tagasta kunagi rohkem kui MaxItems kirjeid ühe Next-kutse kohta. - Ühes "sessioonis" (ühe Pipe funktsiooni väljakutse jooksul) tagastab allikas iga kord uued andmed. - Kuid, taaskäivitamisel algab allikas eelmisest "kinnitust" saanud positsioonist, mis on määratletud cookie-ga. Seetõttu peab iga Next-kutse poolt tagastatud väärtus, andmete salvestamise järel vastuvõtjale, olema kinnitatud Commit-kutsega, ja see peab toimuma täpselt samas järjekorras, milles need olid Next-i poolt tagastatud. Vastuvõtja: - Ei saa töödelda rohkem kui MaxItems korraga. Põhitasand: Vajalik on rakendada funktsioon func Pipe(p Producer, c Consumer) error, mis loeb andmeid allikast, grupeerib need buferisse suurusega mitte rohkem kui MaxItems ning salvestab vastuvõtjale, ning uuendab edusamme allikas. Raskused: Next, Process ja Commit meetodid on seotud võrgupäringutega ning võivad töötada üsna kaua. Andmeedastuse kiirendamiseks tuleb lugemis-, kirjutamis- ja kinnitamisprotsessid teha paralleelselt. Nii, et Process või Commit väljakutse ajal jätkub lugemine allikast ning uue buferi koostamine. */
Kuidas on meeskonnas testid üles ehitatud — kes mida kirjutab, milline katvus, kas on E2E?
Kuidas parandada elementide otsingu tõhusust Map andmestruktuuris?
/ * On kaks PostgreSQL serverit: * PROD - OLTP server, * STATS - server for long analytical queries. Current serveris on the prod database there is a large (10Tb) table of the following form: CREATE TABLE profiles( id SERIAL, data JSONB ) Table may have "holes", i.e., some `id`s may be missing. You need to write a program to copy the profiles table from PROD to STATS. The following interfaces are assumed for working with databases: type Row []interface{} type Database interface { // The implementation of the Database interface can reset connections // Call SaveRows is idempotent io.Closer GetMaxID(ctx context.Context) (uint64, error) LoadRows(ctx context.Context, minID, maxID uint64) ([]Row, error) // [minID, maxID] SaveRows(ctx context.Context, rows []Row) error } func Connect(ctx context.Context, dbname string) (Database, error) // CopyTable // If full=false, then continue data transfer from the last error point // If full=true, then transfer all data func CopyTable(fromName string, toName string, full bool) error { // ... your code } If the `full=false` option is passed, then the program should continue data transfer from the last error point. If `full=true`, then it should transfer all data. **Basic level**: - sequential data transfer in 1 thread - recovery after failures (option `full=false`) Additional information: - if necessary, you can extend the interface by adding your methods - if necessary, you can use the **database/sql** package directly
/* Antud on tähemärkide jada. Leidke indeksipaaride i ja j arv (i <= j), mille vahel ei ole korduvaid tähemärke. Sõne "aba" puhul on vastus 5: võivad olla mitte ainult ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
Antud on tähemärkide jada. Leidke indeksite i ja j paar (i <= j), mille vahel, kaasa arvatud, ei ole korduvaid tähemärke. Jada "aba" puhul on vastus 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") Jada "abcb" puhul on vastus ?: aba 3 + 2 = 5 abcb 4 (a, b, c, d) + 1 (ab) + 1 (bc) + 1 (cb) + 1 (abc) = 8
/* On olemas rakendus mikroteenuste arhitektuuriga. Mikroteenust saab abstraktselt kirjeldada Backend-liidese abil. Mikroteenuse eksemplarile juurdepääsuks saab kasutada juba rakendatud BackendImpl tüüpi. Igal mikroteenusel on mitu tosinat töötavat eksemplari, millest igaüks on kättesaadav oma aadressi addr kaudu. Kuid mikroteenuse üksikud eksemplarid ei ole usaldusväärsed: need võivad kokku kukkuda, olla kättesaamatud või ülekoormatud. Seetõttu peate rakendama tüübi Balancer, mis samuti rakendab Backend-liidest ja teostab kliendi poolel koormuse jaotamist mikroteenuse eksemplarite vahel, valides iga kord **vähemkoormatud** eksemplari. */ type Request interface{} type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr sisaldab konkreetse eksemplari ip:port aadressi func NewBackend(addr string) *BackendImpl type Balancer struct { // TODO } var _ Backend = &Balancer{} // addrs sisaldavad kõigi tasakaalustatud eksemplaride aadresse func NewBalancer(addrs []string) *Balancer { // TODO }
Kuidas töötab WebSocket-ühendus arhitektuuris — millal see luuakse ja kes kellega suhtleb?
Kas teil on kogemusi jaotatud süsteemidega töötamisel?
Skaleeritava sõnumside süsteemi projekteerimine, mis toetab 150 miljonit kasutajat, 75 miljonit DAU, 225 miljonit MAU, 1,2 miljonit peak QPS lugemiseks / 300k kirjutamiseks, 5 miljonit samaaegset kasutajat, 60 PB uusi andmeid aastas, 30% aastast kasvu, SLA 99,95%, p99 <200 ms lugemiseks, <300 ms kirjutamiseks. KONTEKST Vajalik on projekteerida jaotatud sõnumside süsteem, sarnane WhatsApp-ile, mis toetab 1:1 ja grupivestlusi, tagab sõnumite kohaletoimetamise, kuvab kasutajate online-olekuid ning võimaldab edastada multimeediafaile (pildid, videod, helid). Süsteem peab tagama kõrge kättesaadavuse ja madala latentsi, toetama kõrget paralleelsust ning skaleeruma globaalselt. FUNKTSIONAALSED NÕUDED - Toetab isiklikke (1:1) ja grupivestlusi koos osalejate lisamise/eemaldamise võimalusega - Tekstisõnumite ja multimeediafailide saatmine ja vastuvõtt End-to-end krüpteerimismehhanismi rakendamine tasemel teenused või kliendid ei ole selgelt nähtav, välja arvatud üldine märkus. - Puudub selge kirjeldus shardingust ja replikatsioonist andmebaasides chat_id või user_id järgi, skaleeritavuse ja tõrkekindluse tagamiseks. - Puudub selge komponent või mehhanism offline sõnumite ja kohaletoimetamise kinnituside sünkroniseerimiseks. - Ei ole selge, kuidas toimub koormuse jaotamine andmebaaside ja teenuste vahel, eriti tipptundidel. **Kriitilised punktid, mida arvestada:**
Kas teil on meeskonna juhtimise kogemust?