Golang
Jakimi poleceniami zwykle korzystasz w systemie Linux?
Jakie podejścia można zastosować, aby zapewnić bezpieczeństwo wątków podczas pracy z slice'ami w środowisku wielowątkowym?
Jakie operacje są dozwolone podczas pracy z nil slice w języku programowania?
Jakie metody projektowania systemów preferujesz przy tworzeniu rozwiązań?
Opowiedz o trudnym zadaniu, które udało ci się rozwiązać, pisząc skrypt dla systemu Linux
Jak można regulować ilość danych przechowywanych w pamięci podręcznej?
Gotowość do pełnienia roli jedynego specjalisty Backend w zespole
Jaki jest główny powód używania typu sync.Map w Go?
Jakie są dobre praktyki i antipatterny w testach jednostkowych? Jak rozpoznać, że testy są dobre?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Błąd kompilacji # command-line-arguments ./main.go:39:32: błąd składni: nieoczekiwany nowy wiersz, oczekiwano { po klauzuli if
Czy kiedykolwiek miałeś trudności z realizacją interakcji między różnymi usługami?
Jak przekazywany jest wycinek (slice) do funkcji w języku programowania?
Czym jest wzorzec Saga?
Dlaczego nie wzięli Testcontainers?
/* Musimy przesłać dane z pewnego źródła do odbiorcy. Źródło dostarcza dane w małych partiach (~dziesięć rekordów), podczas gdy odbiorca działa bardziej efektywnie z większymi partiami. Przykład rzeczywisty to przesyłanie danych z kolejek typu Kafka do bazy danych Clickhouse. Źródło: - Praktycznie nieskończone. - Źródło nigdy nie zwraca więcej niż MaxItems rekordów w jednym wywołaniu Next. - W ramach jednej "sesji" (jednego wywołania funkcji Pipe), źródło zwraca nowe dane przy każdym Next. - Jednak po restarcie, źródło zacznie od poprzedniej "potwierdzonej" pozycji, wskazywanej przez cookie. Dlatego *każda* wartość cookie zwrócona przez Next, po zapisaniu danych w odbiorniku, musi być potwierdzona wywołaniem Commit, w tej samej kolejności, w jakiej zostały zwrócone przez Next. Odbiornik: - Nie może przetworzyć więcej niż MaxItems naraz. Podstawowy poziom: Wymaga zaimplementowania funkcji func Pipe(p Producer, c Consumer) error która czyta dane ze źródła, grupuje je w bufor o rozmiarze nie większym niż MaxItems i zapisuje do odbiornika, a następnie potwierdza postęp w źródle. */ const MaxItems = 9999 type Producer interface { // Next zwraca: // - pakiet elementów do przetworzenia // - cookie do potwierdzenia po zakończeniu przetwarzania // - błąd Next() (items []any, cookie int, err error) // Commit służy do oznaczenia pakietu danych jako przetworzony Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Czy tabela z (id PRIMARY KEY, data JSON) jest dość dobrym indeksem PostgreSQL do wyszukiwania po kluczu?
Czym różni się wirtualizacja od konteneryzacji?
Czy można wstawić kolejny blok kodu z nawiasami klamrowymi wewnątrz istniejącej funkcji?
Jak określałeś i formułowałeś zadania na swoim poprzednim stanowisku?
Jak końcowy kod został wdrożony w środowisku produkcyjnym w Twoim ostatnim projekcie?