Sobes.tech

Golang

Czy zdecydowałeś się napisać WaitGroup, ponieważ pojawił się kanał, czy dlatego, że zdecydowałeś się napisać goroutines do czegoś?

Senior
166

Co mówi konwencja Go na temat używania WaitGroup i typów zwracanych (przyjmując interfejsy, zwracając konkretne typy)?

Senior
164

// Klient przekazuje obiekt (Task) z danymi do wykonania zadania, // w naszym przykładzie użyjemy pustej struktury. // // Menedżer może obsługiwać nie więcej niż N zadań jednocześnie, // i nie więcej niż X zadań może być w kolejce. // Jeśli nie ma miejsca w kolejce, od razu zwracamy klientowi błąd. // // Zadanie jest pobierane do przetwarzania, jeśli dostępni są wolni obsługujący. // Symulujemy czas trwania przetwarzania za pomocą time.Sleep(5*time.Second). // Gdy jedno zadanie się zakończy, pobieramy następne z kolejki. // Jeśli kolejka jest pusta, oczekujemy na nowe zadania od klientów. // // Z gwiazdką: rozbudować strukturę Task i uzyskać statusy zadań przez osobne zapytanie. 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 { // implementacja w oczekiwaniu } type Task interface { Do() }

Senior
164

Jakie typy indeksów w PostgreSQL, oprócz B-tree, używałeś?

Senior
163

Jak moglibyśmy obsługiwać zewnętrznie błędy, które występują w zadaniach, jeśli chcielibyśmy to zrobić?

Senior
161

Jaką technologię/narzędzie używasz?

Senior
160

Czy używałeś CTE? Opowiedz, czym to jest.

Senior
160

Jaka była Twoja rola w podejmowaniu decyzji architektonicznych podczas rozwoju usługi wyszukiwania?

Senior
159

Czy używałeś kontekstów w praktyce? Opowiedz.

Senior
158

Czy można utworzyć indeks tylko na repliki, ale nie na masterze?

Senior
156

Czy w implementacji są jeszcze wyścigi danych? Szczególnie w metodzie Keys, która zwraca fragment kluczy?

Senior
156

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
155

Chcesz napisać klasyczny pool workerów?

Senior
152

Czym różni się SELECT FOR UPDATE od SELECT FOR SHARE?

Senior
151

Czy używałeś funkcji okienkowych?

Senior
150

Czy masz doświadczenie w pisaniu operatorów Kubernetes, administrowaniu operatorami, Helm Chart?

Senior
149

Rodzaje replikacji w PostgreSQL

Senior
148

Dlaczego nie użyliście Redis zamiast przechowywania w bazie?

Senior
148

Jakie dokumenty były przechowywane w ELK?

Senior
146

Optymistyczne i pesymistyczne blokady — opowiedz

Senior
143
/7