Golang
Milyen funkciót készítettél, amiben büszke vagy? Mesélj a legutóbbi érdekes feladatról.
Mesélj a legemlékezetesebb hibáról a produkcióban: mi volt, hogyan javítottad ki, és milyen következtetéseket vontál le?
Mesélj a legutóbbi munkatapasztalatodról
Hogyan működik a garbage collector a Go-ban? Írja le a fázisokat és az algoritmust.
Sok technikai feladatot írtál le. Kérlek, mesélj, mely termékfeladatokat segítettek megoldani.
Milyen metrikák? Milyen eszközökkel fogjuk ezeket a metrikákat írni?
Általános benyomás az interjúról, a jelölt szintje, ajánlások
Mi a probák (probes) a Kubernetesben, hogyan állítsuk be őket és milyen típusai vannak?
Mesemegosítók, amelyeken dolgozott, meséljen.
Most szeretnénk a HeadHunter-re menni és szűrők szerint keresni jelölteket — hogyan építsük fel ezt az architektúrát?
Mit fog a kód megjeleníteni szeletekkel és azok függvénybe való átadásával? Hogyan működik a szeletek átadása egy függvénynek?
Milyen feladatokhoz használtál goroutine-okat és csatornákat?
Van tapasztalata technikai szűrésekben vagy interjúkban való részvételhez?
Feladat: van egy callback, amely másodpercenként 100 000 alkalommal aktiválódik, és bináris adatokat szolgáltat. Ezeket a központi szerverre kell szállítani. Milyen csapdák és jó gyakorlatok vannak?
Valósítson meg egy olyan függvényt, amely []any és delta int típusokat fogad. Csak az egyedi számok (int) első előfordulásait kell növelni delta értékkel. Más típusokat és ismétlődő számokat változatlanul hagyjon. A függvénynek vissza kell adnia a frissített listát és 2 számot: updated – hány egyedi szám változott, duplicates – hány numerikus elem volt duplikátum func IncrementUniqueIntsInMixed(xs []any, delta int) ([]any, int, int) { // a kódja } // Példa: xs := []any{1, "a", 5, "b", 1, 0, 5} u, d, s := IncrementUniqueIntsInMixed(xs, 3) // xs == []any{4, "a", 8, "b", 1, 3, 5} // u == 3 // egyedi számok: 1, 5, 0 // d == 2 // duplikátumok: második 1, második 5
Mi az a goroutine? Miben rejlik a könnyedsége?
// Van egy Backend interfész a Execute metódussal // Egy load balancer írása szükséges // A load balancer megfelel a Backend interfésznek // A load balancer feladata, hogy elfogadjon egy kérést és delegálja azt az elérhető backendek egyikének // A load balancer tartalmaz egy backend gyűjteményt // A kérés végrehajtásakor a load balancer kiválaszt egy backendet egy algoritmus szerint // // Least Connection algoritmus, egészségügyi ellenőrzés és automatikus helyreállítás, thread safety atomic segítségével, kontextus átadása a megszakításhoz, hibahatár a backend kikapcsolásához // A Request a bemeneti kérés a Backend számára. type Request struct { // Payload – a kérés tetszőleges adatai. Payload []byte } // Response a Backend válaszát reprezentálja. type Response struct { // Payload – a válasz tetszőleges adatai. Payload []byte } // Backend – interfész, amely meghatározza a kérés végrehajtásának módját type Backend interface { Execute(ctx context.Context, req Request) (Response, error) } type Balancer struct { backends []Backend } func NewBalancer(backends []Backend) *Balancer { return &Balancer{backends: backends} } func (b *Balancer) Execute(ctx context.Context, req Request) (Response, error) { // todo: implementálja a load balancer logikáját return Response{}, nil } type TestBackend struct { }
Hogyan számoltad ki, hogy a p95 16%-kal csökkent?
Mindenki számára ugyanakkora a timeout? Hogyan fogják kiszámítani ezt az időtartamot?
// A megadott s sztring. Meg kell találni a leghosszabb olyan részsztring hosszát, amelyben nincsenek ismétlődő karakterek. // Példák: // s = "abcabcbb", válasz: 3 ("abc") // s = "cccccccc", válasz: 1 ("c") // s = "pwwkew", válasz: 3 ("wke") // s = "", válasz: 0 // Az s sztring angol betűkből, számokból, szimbólumokból és szóközökből áll func lengthOfLongestSubstring(s string) int { return 0 }