Golang
Kura no šīm iespējām ir visbiežāk sastopama, mēģinot palaist ļoti lielu goroutine skaitu (piemēram, desmitiem tūkstošu) bez papildu kontroles? - Galvenā problēma radīsies, bloķējot globālo mutex iekšā runtime, kas novedīs pie pilnīgas programmas darbības apturēšanas - Go plānotājs izpildīs goroutines mazās grupās secīgi, tāpēc to skaita pieaugums praktiski neietekmēs atmiņas patēriņu - Masveida goroutine radīšana var novest pie ievērojama atmiņas patēriņa un papildu plānotāja izmaksām; šādos gadījumos ir piemērots worker pool - Ja goroutine skaits pārsniedz loģisko procesoru skaitu, Go automātiski sāks noraidīt jaunas goroutine palaišanas ar paniku
// Atrodiet lielāko pāra skaitli package main import "fmt" func main() { var max int for i := 1000; i > 0; i-- { go func() { if i%2 == 0 && i > max { max = i } }() } fmt.Printf("Maksimālais ir %d", max) } func maxEvent(n, workers int) int { var wg sync.WaitGroup results := make(chan int, workers) jobs := make(chan int, workers) for w := 0; w < workers; w++ { wg.Add(1) go func() { defer wg.Done() localMax := -1 for num := range jobs { if num%2 == 0 && num > localMax { localMax = num } } result <- localMax }() } go func() { for i := 1; i <= n; i++ { jobs <- i } close(jobs) }() go func() { wg.Wait() close(results) }() globalMax := -1 for localMax := range results { if localMax > globalMax { globalMax = localMax } } return globalMax }
// skaitļi no 1 līdz 10 func main() { done := make(chan struct{}, 10) for i:=1; i<=10; i++{ go func(){ defer func() {done<-struct{}{}}() printNumber(n) }() } for i:=1; i<=10; i++{ <-done } } func printNumber(n int) { time.Sleep(time.Second) fmt.Println(n) }
Kādi ir pgx plusi un mīnusi?
Kādam mērķim ir nepieciešama consumer grupa Kafka?
Pastāstiet par vaicājumu optimizāciju datu bāzē: kā atradāt problēmjautājumus un ko darījāt?
Ko tieši darījāt ar Postgres — vaicājumi, indeksi?
Kas notiks, ja sistēmas izsaukums (syscall) tiks bloķēts?
Vai ir veids, kā pārvaldīt un pielāgot stop-the-world atkritumu savācēju Go?
// preču tabula: // ID | cnt_view // ----------- // 1 | 100 // divi lietotāji sāka vienlaikus skatīties preces ar ID = 1 // un mūsu datu bāzē tika palaistas 2 paralēlas transakcijas // kāds būs rezultāts? postgresql func IncrementView(ctx context.Context, db *sql.DB, id int64) error { tx, err := db.BeginTx(ctx, nil) if err != nil { return err } defer tx.Rollback() var cnt int err = tx.QueryRowContext(ctx, "SELECT cnt_view FROM goods WHERE id = $1", id, ).Scan(&cnt) if err != nil { return err } cnt++ _, err = tx.ExecContext(ctx, "UPDATE goods SET cnt_view = $1 WHERE id = $2", cnt, id, ) if err != nil { return err } return tx.Commit() }
Kas tevi motivē, kāpēc tev patīk strādāt programmētājam?
Kādus linters izmantojat Go un kur tos palaidjat?
Izņemiet intervijas jautājumu/uzdevumu no šīs ekrānattēla. Saglabājiet oriģinālo valodu.
Kāpēc rodas nianses ar virknes garumu UTF-8?
Pastāstiet par savu pieredzi ar ziņojumu starpniekiem (Kafka, NATS).
Dotā ir S virkne, jāskaita šo virsgrāmatas apakšvirkņu skaits, kas satur visus šīs virsgrāmatas simbolus vismaz vienu reizi. Piemēri: "abca" -> 3 // abc, bca, abca "aa" -> 3 // aa, a, a, "ffg" -> 2 // ffg, fg
Vai esi gatavs pārcelties uz Jelabugu?
Vai zini, kas ir transakcija un kādas ir tās īpašības (ACID)?
Kādi ir goroutines priekšrocības salīdzinājumā ar OS pavedieniem?
Vai jums ir pieredze pakalpojumu profilēšanā?