Sobes.tech

Golang

Co było buforowane? Jakieś katalogi?

Senior
МВидео/эльдорадо
166

/* 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 }

Middle
Яндекс
166

Czy może wymienić firmy lub dostawców, z którymi miał do czynienia?

Junior — Middle
166

Opowiedz o ostatnim miejscu pracy: czym się zajmowałeś, jakiego stosu technologicznego używałeś, jakie były trudne zadania?

Middle
OZONOZON
166

Czym jest slice w Go?

Middle
Бюро 1440Бюро 1440
166

Czy możesz wymienić główne typy wywołań używanych w gRPC?

Junior — Middle
СБЕР дейвайсыСБЕР дейвайсы
166

Czy dozwolone jest uzyskiwanie informacji z kanału z ustawionym trybem zamkniętym?

Junior — Middle
ГазпромГазпром
X5 groupX5 group
AvitoAvito
+1
166

Czy można bezpośrednio zapisywać dane do określonej partycji Kafka, pomijając klucz do haszowania?

Junior — Middle
Самокат Тех
166

Czy możesz wyjaśnić mechanizm dodawania elementu na koniec struktury danych, na przykład listy lub tablicy?

Junior — Middle
Lamoda Tech
Startribe
Самокат Тех
+2
166

Jakie dane i w jaki sposób są umieszczane na stosie podczas wykonywania programu?

Junior — Middle
166

Jakie metody buforowania preferujesz używać w swoich projektach i dlaczego?

Junior — Middle
166

Czym różni się widok materializowany od zwykłego widoku?

Middle
RWB
165

Jakie komponenty wchodzą w skład struktury listy powiązanej?

Junior — Middle
165

Jak określa się czas wykonania operacji dodania elementu po kluczu do struktury danych Map?

Junior — Middle
ЯндексЯндекс
165

Dlaczego początkowy rozmiar stosu wątków jest zwykle ustawiany na 2 MB?

Junior — Middle
165

Czy kiedykolwiek używałeś struktury ErrGroup w swoich projektach do zarządzania równoległymi zadaniami?

Junior — Middle
165

Jakie nietypowe lub niestandardowe pakiety używałeś w swojej praktyce?

Junior — Middle
165

Dlaczego wzrost plasterka zwalnia i dlaczego nie można go ciągle podwajać?

Middle
RWB
165

W jakim miejscu wykonywane są polecenia podczas procesu pracy GitLab CI/CD?

Junior — Middle
165

Jakie mogą wystąpić konsekwencje braku przestrzegania zasad SOLID w projektowaniu oprogramowania?

Junior — Middle
Zonatelecom
165
/413