Golang
Pastāsti par savu pieredzi Tinkoff — kā tu tika nodarbināts un ar ko nodarbojies?
func collectRTT(ctx context.Context, urls []string) (map[string]time.Duration, error) { pingMap := make(map[string]time.Duration, len(urls)) var mu sync.Mutex var wg sync.WaitGroup errCh := make(chan error, 1) for _, url := range urls { wg.Add(1) go func(u string) { defer wg.Done() dur, err := rtt(ctx, u) if err != nil { select { case errCh <- fmt.Errorf("RTT kļūda %s, %w", u, err): default: } return } mu.Lock() pingMap[u] = dur mu.Unlock() }(url) } wg.Wait() close(errCh) if err := <-errCh; err != nil { return nil, err } return pingMap, nil }
Kāda ir galvenā programmēšanas valoda un kādas citas valodas jūs zināt, ieskaitot nekomerciālo pieredzi?
func (p *Pool) Stop() { p.mu.Unlock() // Tagad ir droši var aizvērt kanālu close(p.tasks) // signāls darbiniekiem: jaunu uzdevumu nebūs, lasiet pārējo p.wg.Wait() // gaidām, līdz visas goroutines pabeigsies p.cancel() // gadījumā atceļam kontekstu fmt.Println("Pool apturēts.") } // ForceStop piespiedu kārtā aptur visus darbiniekus, nesagaidot uzdevumu pabeigšanu. // Darbinieki tiks nekavējoties pārtraukti caur kontekstu. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Piesaistes apturēšana (laika limits: %v)...\n", timeout) // Bloķē jaunu uzdevumu pievienošanu p.mu.Lock() p.isOpen = false p.mu.Unlock() // Aizver kanālu, lai darbinieki neņemtu jaunus uzdevumus close(p.tasks) // Atceļ kontekstu – tas pārtrauks visus pašreizējos uzdevumus p.cancel() // Dod ierobežotu laiku pabeigšanai done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool piespiedu kārtā apturēts (visi darbinieki pabeiguši)") case <-time.After(timeout): fmt.Println("Pool piespiedu kārtā apturēts (laika limits, var palikt pakarēju goroutine)") } }
Kam ir paredzēts HAVING un kāpēc ne WHERE?
Pastāsti man par datu tipus Go.
Kā mainīt kodu, lai rezultāts būtu 456 vietā 123?
Kādus darījumus pazīsti? Kam tie ir paredzēti?
Tu minēji, ka bija problēmas ar indeksiem — vai vari konkrēti pastāstīt?
Kas notiek, lasot no slēgta kanāla Go?
Kādas ir atšķirības starp TCP un UDP? Kāpēc HTTPS izmanto TCP?
Vai esat saskāries ar shardinga jēdzienu?
Vai jūs zināt fan-in/fan-out un pipeline modeļus? Kas tas ir?
Vai evakuācijas laikā ir iespējams pievienot vai noņemt elementus kartē?
Kas ir gorutina? Kā tā atšķiras no OS pavediena? Kas pārvalda gorutinas?
Kādi ir jūsu algu gaidījumi un vēlamais prezentācijas formāts?
Cik daudz goroutine var izveidot vienā mašīnā? Kā skaitīt?
Kāda ir atšķirība starp embedding un composition Go?
Cik maksimāli TCP savienojumu var turēt vienā serverī?
Kāda ir algoritma sarežģītība un kur šeit ir koks?