Golang
Кадары аз имконоти зерин эҳтимолан ба вуқӯъ мепайвандад вақте ки кӯшиш мекунед, ки шумораи хеле зиёди goroutines (масалан, даҳҳо ҳазор) бе назорати иловагӣ оғоз кунед? - Аслӣ мушкилот аз баста шудани mutex глобалӣ дар runtime пайдо мешавад, ки ба қатъ шудани пурраи иҷрои барнома оварда мерасонад - Плангардони Go goroutines-ро дар гурӯҳҳои хурд ба таври пайдарпай иҷро мекунад, бинобар ин афзоиши шумораи онҳо қариб таъсир ба истифодаи хотира надорад - Таҳкими оммавии goroutines метавонад ба истифодаи назаррас аз хотира ва хароҷоти иловагии плангардон оварда расонад; дар чунин ҳолатҳо, истифодаи пули коргарон мувофиқ аст - Агар шумораи goroutines аз шумораи процессорҳои логикӣ зиёд шавад, 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) }
pgxтин артыкчылыктары жана кемчиликтери кандай?
Kafkaда колдонучу группасы эмне үчүн керек?
Маалыматтар базасына суроолорду оптималдаштыруу жөнүндө айтып бериңиз: көйгөйлүү суроолорду кантип таптыңыз жана эмне кылдыңыз?
Postgres менен так эмне кылдыңыз — суроолор, индекстер?
Эгер системалык чакыру (syscall) бөгөлсө эмне болот?
Goда stop-the-world калдык чогултуучу башкаруу жана жөнгө салуу жолдору барбы?
// товарлар таблицасы: // ID | cnt_view // ----------- // 1 | 100 // эки колдонуучу бир убакта 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() }
Сенин эмне үчүн программалоочу болуп иштегиң келет, эмне сени мотивациялайт?
Goда кайсы линтерлерди колдонуп жатасың жана аларды кайда иштетесиң?
Бул скриншоттон интервью суроолору/тапшырмаларды чыгарыңыз. Түп нуска тилди сактаңыз.
UTF-8-де жолдун узундугу менен байланыштуу нюанстар эмне үчүн пайда болот?
Жазуу брокерлери (Kafka, NATS) менен иш тажрыйбаңыз жөнүндө айтып бериңиз.
Берилген S саптары, бул сапта бардык белгилер кеминде бир жолу камтылган субсаптардын санын эсептөө керек. Мисалдар: "abca" -> 3 // abc, bca, abca "aa" -> 3 // aa, a, a, "ffg" -> 2 // ffg, fg
Элабугага көчүүгө даярсыңбы?
Транзакция деген эмне жана анын мүнөздөмөлөрү (ACID) кандай?
Goroutine'лердин OS жиптеринен артыкчылыктары эмнеде?
Кызматтарды профилирлөө боюнча тажрыйбаңыз барбы?