Golang
Која од следеће опције је највероватнија да се деси када покушате да покренете веома велики број горутина (на пример, десетине хиљада) без додатне контроле? - Главни проблем ће бити блокирање глобалног mutex-а унутар runtime-а, што ће довести до потпуног заустављања извршавања програма - Планер Go ће извршавати горутине у малим групама секвенцијално, тако да раст њиховог броја скоро да не утиче на потрошњу меморије - Масовно стварање горутина може довести до значајне потрошње меморије и додатних трошкова планера; у таквим случајевима, одговарајуће је коришћење пул-а радника - Ако број горутина пређе број логичких процесора, Go ће аутоматски почети да одбија нове покретање горутина са паником
// Находим максимальное четное число 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("Максимум равен %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 }
// бројеви од 1 до 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) }
Koje su prednosti i mane pgx?
Zašto je potreban consumer group u Kafka?
Ispričajte nam o optimizaciji upita za bazu podataka: kako ste pronašli problematične upite i što ste radili?
Šta tačno radite sa Postgres — upiti, indeksi?
Šta će se desiti ako se sistemski poziv (syscall) blokira?
Postoji li način da upravljate i prilagodite stop-the-world sakupljač smeća u Go?
// таблица с товарами: // ID | cnt_view // ----------- // 1 | 100 // два пользователя начали одновременно просматривать товар с id = 1 // и в нашей базе данных запущены 2 параллельные транзакции // какой будет результат? 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() }
Šta te motiviše, zašto voliš da radiš kao programer?
Koje linters koristiš u Go i gde ih pokrećeš?
Izvadite pitanje/zadatak sa intervjua sa ovog snimka ekrana. Sačuvajte originalni jezik.
Zašto nastaju nijanse sa dužinom niza u UTF-8?
Ispričaj o svom iskustvu sa brokerima poruka (Kafka, NATS).
Дат је стринг S, потребно је пребројати број подстринга у овом стрингу који садрже све карактере из тог стринга бар једном. Примери: "abca" -> 3 // abc, bca, abca "aa" -> 3 // aa, a, a, "ffg" -> 2 // ffg, fg
Да ли си спреман за преселје у Јелабугу?
Знаш ли шта је трансакција и која су њена својства (ACID)?
Koje su prednosti goroutines u odnosu na OS niti?
Да ли имате искуство у профилисању сервиса?