Sobes.tech

Golang

Իդեմպոտենտություն ինչ է?

201

Ի՞նչ է պессիմիստական արգելափակումը։

196

// Երբ թարմացնում եք պատվերը, մենք պետք է ուղարկենք պատվերի տվյալները մի քանի ծառայությունների (երրորդ կողմի API-ներ) // ծառայությունների թիվը աճում է (կարող է լինել հազար+) // մենք գրել ենք կոդը, սկզբում ամեն ինչ լավ էր, բայց ժամանակի ընթացքում մեր ծառայությունը սկսեց շատ հիշողություն սպառել func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Կարծում ենք, որ սա երկար ժամանակային ցանցային կանչ է response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "չհաջողվեց ուղարկել", err) return } s.logger.Info(ctx, "հաջողություն", response) }() } }

Middle+
196

Ի՞նչ են Go-ի մեջ ալիքները: Որոնք կան: Ինչպե՞ս են կառուցված ներքևում:

194

Ինչպես իրականացվեց տվյալների կեշավորումը: Ի՞նչ քաղաքականություն էր կիրառվում կեշավորման համար։

193

Ինչպե՞ս ապահովել, որ բոլոր իրադարձությունները մեկ պատվերի համար մտնեն մեկ Kafka բաժնում։

193

Ի՞նչ եղանակներ կան տողերը միացնելու համար Go-ում: Ի՞նչ տարբերություն կա + և strings.Builder-ի միջև։

191

Ի՞նչ է context-ը Go-ում: Ինչո՞վ է տարբերվում context.WithTimeout-ը from context.WithDeadline-ը։

191

Եթե Redis լցված է և քաղաքականությունները անջատված են, ինչ կլինի Redis և հաճախորդների հետ?

189

Ինչ է Dead Letter Queue (DLQ)-ը։

184

Ի՞նչ է սլայսը։ Ի՞նչ է սլայսի տակ։ Ինչպե՞ս է աշխատում append ֆունկցիան։

184

// ապրանքների աղյուսակ: // 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() }

Middle+
178

Ի՞նչ են Mutex և RWMutex-ը: Ինչո՞վ են տարբերվում։

177

Ինչպես է աշխատում գարշահոտ հավաքողը Go-ում: Երբ է սկսվում: Կարող եք ձեռքով սկսել:

177

Ինչպես հաշվվեց 25%-ը: Ինչու ոչ 20 կամ 30?

176

Ի՞նչ են տողերը Go-ում: Ի՞նչ են ներկայացնում ապակու տակ:

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

Կա՞ն նրբություններ և դժվարություններ Kafka-ն ներդնելիս: Սա՞ ձեր առաջին փորձը:

169

Ի՞նչ պրոֆայլավորման գործիքներ կան Go-ում։

167

Ինչ է կառուցվածքների հարթեցումը Go-ում: Ինչպես օպտիմալացնել կառուցվածքի դաշտերը հիշողության մեջ?

166
/3