Golang
Ce framework-uri, standarde și pachete folosești în Go?
Care este diferența dintre fire de execuție și procese?
Vorbește despre MVCC (Controlul Concurenței Multi-Versiune) în PostgreSQL.
Cum se poate implementa suma variantelor de tipuri (type sum) în limbajul Go?
Cum se limitează numărul de apeluri ale worker-ului de polling dacă API-ul este plătit?
Ce nivel de engleză ai?
Vorbește-mi despre Redis
Ați fost nevoit să luați decizii arhitecturale pe cont propriu?
Explicați conceptul de sistem de fișiere virtual și scopul său principal.
Cum se scrie o interogare pentru a obține utilizatorul cu penultimul salariu?
Cum se gestionează în planificator dacă nu este o solicitare de rețea, ci citirea dintr-un fișier?
/* 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 nelimitată. - 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ă, indicată de cookie. Prin urmare, *fiecare* valoare de cookie returnată de Next, după salvarea datelor în receptor, trebuie confirmată cu un apel la Commit, în aceeași ordine în care au fost returnate de Next. Receptor: - Nu poate procesa mai mult de MaxItems odată. Nivel de bază: 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ă. Dificultate: Metodele Next, Process și Commit sunt legate de apeluri de rețea și pot dura destul de mult. Pentru a accelera procesul, trebuie paralelizate procesele de citire, scriere și confirmare a progresului. Astfel, în timpul procesului Process sau Commit, citirea din sursă și formarea noului buffer continuă. */ const MaxItems = 9999 type Producer interface { // Next returnează: // - un lot de items de procesat // - un cookie pentru confirmare după finalizarea procesării // - o eroare Next() (items []any, cookie int, err error) // Commit este folosit pentru a marca un lot de date ca procesat Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
În companie te ocupai în principal de migrarea de la PHP la Go?
Ce niveluri de izolare a tranzacțiilor există?
Spuneți-ne puțin despre dvs. — informații cheie pe care un potențial angajator ar trebui să le știe.
Ce probleme apar în cazul în care există multe coliziuni?
Cum au fost utilizate RabbitMQ și ClickHouse?
Vorbește despre slices în Go.
De ce ai decis să cauți ceva nou, de ce pleci din compania ta actuală?
Ce se întâmplă în INNER JOIN dacă un rând din stânga corespunde mai multor rânduri din dreapta?