Mis on idempotentsus?
Golang
Mis on kanalid Go-s? Millised on? Kuidas need sisemiselt toimivad?
// Kui tellimus uuendatakse, peame saatma tellimuse andmed mitmele teenusele (kolmanda osapoole API-d) // teenuste arv kasvab (võib olla tuhanded+) // kirjutasime koodi, alguses läks kõik hästi, kuid aja jooksul hakkas meie teenus palju mälu kasutama func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Kujutage ette, et see on pikk võrgukutse response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "saata ebaõnnestus", err) return } s.logger.Info(ctx, "edu", response) }() } }
Mis on kontekst Go-s? Milles erineb context.WithTimeout ja context.WithDeadline?
Millised on stringide ühendamise viisid Go-s? Mis vahe on + ja strings.Builder vahel?
Mis on pessimistic locking?
Kuidas tagada, et kõik tellimuse sündmused jõuavad ühte Kafka partitsiooni?
Mis juhtub Redis ja kliendid, kui Redis on täis ja väljaheitmise poliitikad on välja lülitatud?
Kuidas andmete vahemällu salvestamine toimus? Millist vahemällu poliitikat kasutati?
Mis on Dead Letter Queue (DLQ)?
Mis on slice? Mis on slice'i kapoti all? Kuidas töötab funktsioon append?
// kaupade tabel: // ID | cnt_view // ----------- // 1 | 100 // kaks kasutajat alustasid samaaegselt toote vaatamist ID = 1 // ja meie andmebaasis käivitusid 2 paralleelset tehingut // mis saab olema tulemus? 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() }
Kuidas arvutati 25% number? Miks mitte 20 või 30?
Mis on Mutex ja RWMutex? Millised on nende erinevused?
Kuidas töötab Go prügikorjaja? Millal see käivitub? Kas seda saab käsitsi käivitada?
func (r *OrderRepository) GetActiveOrderIDs(ctx context.Context, offset, limit int) ([]uint32, error) { var ( res []uint32 args []interface{} ) query := `SELECT id FROM "order" WHERE is_terminated = false LIMIT $1 OFFSET $2;` args = append(args, limit, offset) rows, err := r.slave.Query(ctx, query, args...) if err != nil { return nil, err } for rows.Next() { var orderID uint32 if err = rows.Scan(&orderID); err != nil { return nil, err } res = append(res, orderID) } return res, nil }
Mis on stringid Go-s? Mida need kapoti all tähistavad?
Millised profiili tööriistad on Go-s olemas?
Kas Kafka juurutamisel oli nüansse ja raskusi? Kas see oli teie esimene juurutamiskogemus?
Mis on struktuuride joondamine Go-s? Kuidas optimeerida struktuuri välju mälu?