Sobes.tech

Golang

// Schrijf een asynchrone taakverwerker als bibliotheek // De klant geeft een object (Task) door met gegevens voor het uitvoeren van de taak, // in ons voorbeeld gebruiken we een lege structuur. // De verwerker kan niet meer dan N taken tegelijk verwerken, // en niet meer dan X taken kunnen in de wachtrij worden geplaatst voor verwerking. // Als er geen ruimte in de wachtrij is, geven we onmiddellijk een fout terug aan de klant. // Een taak wordt in behandeling genomen als er vrije verwerkers beschikbaar zijn. // We simuleren de verwerkingstijd met time.Sleep(5*time.Second). // Zodra een taak is voltooid, nemen we de volgende uit de wachtrij. // Als de wachtrij leeg is, wachten we op nieuwe taken van klanten. // Met een sterretje: breid de Task-structuur uit en verkrijg de status van taken via een aparte aanvraag package scheduler type Scheduler interface { AddTask(t Task) error Close() } type Task interface { Do() }

Senior
171

Kun je beschrijven wat je gebruikt om de kanaal te lezen in de worker goroutine?

Senior
170

Heeft u vragen voor mij?

Senior
169

Kan een goroutine rechtstreeks naar een andere goroutine schrijven bij een gebufferd kanaal?

Senior
168

Heb je besloten om WaitGroup te schrijven omdat er een kanaal verscheen of omdat je goroutines voor iets besloot te schrijven?

Senior
168

// De klant geeft een object (Task) door met gegevens voor het uitvoeren van de taak, // in ons voorbeeld gebruiken we een lege structuur. // // De scheduler kan niet meer dan N taken tegelijk verwerken, // en niet meer dan X taken kunnen in de wachtrij staan. // Als er geen ruimte in de wachtrij is, geven we onmiddellijk een fout terug aan de klant. // // Een taak wordt verwerkt als er vrije verwerkers beschikbaar zijn. // We simuleren de verwerkingstijd met time.Sleep(5*time.Second). // Zodra een taak is voltooid, pakken we de volgende uit de wachtrij. // Als de wachtrij leeg is, wachten we op nieuwe taken van klanten. // // Met een sterretje: breid de Task-structuur uit en verkrijg de status van taken via een aparte aanvraag. package scheduler type Scheduler interface { AddTask(t Task) error Close() } type scheduler struct { queue chan Task wg sync.WaitGroup } func New(workers, queue int) Scheduler { // implementatie in afwachting } type Task interface { Do() }

Senior
164

Welke technologie/tool gebruik je?

Senior
164

Welke indexertypes worden gebruikt in PostgreSQL naast B-tree?

Senior
163

Wat was jouw rol bij het nemen van architecturale beslissingen tijdens de ontwikkeling van de zoekservice?

Senior
163

Heb je CTE gebruikt? Vertel wat het is.

Senior
162

func New(workers, queue, int) Scheduler { s := &scheduler { queue := make(chan Task, queue) for i := 0; i < workers; i++ { wg.Add(1) go func() { defer wg.Done() for task := range s.queue { task.Do() } }() } } return s } func (s *scheduler) Close() { close(s.queue) s.wg.Wait() } type Task interface { Do() }

Senior
161

Hoe zouden we extern fouten kunnen afhandelen die in taken optreden, als we dat wilden doen?

Senior
161

Heb je in de praktijk contexten gebruikt? Vertel me.

Senior
160

Kan je een index alleen op de replica maken, maar niet op de master?

Senior
159

Zijn er nog dataraces in de implementatie? Vooral in de methode Keys, die een slice van sleutels retourneert?

Senior
158

Wil je een klassieke worker pool schrijven?

Senior
156

Heeft u ervaring met het schrijven van Kubernetes-operators, het beheren van operators, Helm Chart?

Senior
155

Wat is het verschil tussen SELECT FOR UPDATE en SELECT FOR SHARE?

Senior
155

Soorten replicatie in PostgreSQL

Senior
154

Is werken alleen toegestaan binnen het grondgebied van de Russische Federatie?

Senior
152
/7