Sobes.tech

Golang

Kas ir pesimistiska bloķēšana?

196

// Atjauninot pasūtījumu, mums jānosūta pasūtījuma dati vairākām pakalpojumiem (trešo pušu API) // pakalpojumu skaits pieaug (var būt tūkstoš+) // mēs uzrakstījām kodu, sākumā viss gāja labi, bet ar laiku mūsu pakalpojums sāka patērēt daudz atmiņas func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Iedomājieties, ka tas ir ilgs tīkla zvans response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "neizdevās nosūtīt", err) return } s.logger.Info(ctx, "veiksmīgi", response) }() } }

Middle+
196

Kas ir kanāli Go? Kādi ir? Kā tie ir uzbūvēti iekšpusē?

194

Kā tika īstenota datu kešošana? Kāda kešatnes politika tika izmantota?

193

Kādi ir veidi, kā savienot virknes Go? Kāda ir atšķirība starp + un strings.Builder?

191

Kas ir konteksts Go? Kāda ir atšķirība starp context.WithTimeout un context.WithDeadline?

191

Kā nodrošināt, lai visi pasūtījuma notikumi nonāktu vienā Kafka daļā?

191

Kas notiks ar Redis un klientiem, ja Redis ir pilns un izslēgtas ir izslēgtas izslēgšanas politika?

189

Kas ir Dead Letter Queue (DLQ)?

184

Kas ir slice? Kas ir zem slice? Kā darbojas append funkcija?

184

// 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() }

Middle+
178

Kas ir Mutex un RWMutex? Ar kāda starpība?

177

Kā darbojas atkritumu savākšanas sistēma Go? Kad tas tiek palaists? Vai to var palaist manuāli?

177

Kā tika aprēķināts 25% skaitlis? Kāpēc ne 20 vai 30?

176

Kas ir virknes Go? Ko tās pārstāv zem motora pārsega?

175

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 }

Middle+
172

Vai Kafka ieviešanā bija nianses un grūtības? Vai tā bija jūsu pirmā ieviešanas pieredze?

168

Kādi profilēšanas rīki ir Go?

167

Kas ir struktūru izlīdzināšana Go? Kā optimizēt struktūras laukus atmiņā?

166
/3