Golang
Jakie będą konsekwencje, jeśli dane przesłane przez kanał pozostaną nieczytane?
Na czym polega przewaga gorutyn w porównaniu do wątków pod względem wydajności i wygody użytkowania?
Co określa zakres dostępu do zmiennej zadeklarowanej ze modyfikatorem prywatnym?
Jakie parametry można ustawić dla działania harmonogramu zadań?
Jakie metody można zastosować, aby zapewnić obsługę Kafka do 100 tysięcy wiadomości na sekundę?
Jak postrzegasz sytuację, gdy w kodzie nie jest wyraźnie wskazane użycie interfejsu?
Opowiedz o aktualnym projekcie, nad którym pracujesz lub pracowałeś niedawno
Jakie operacje istnieją na slices w Go?
Jak nazywa się proces przenoszenia elementów z jednej Mapy do drugiej?
/* Musimy przesłać dane z pewnego źródła do pewnego odbiorcy. Źródło zwraca dane w małych partiach (~dziesięć rekordów), podczas gdy odbiorca działa efektywniej z dużymi partiami (~tysiąc rekordów). 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 na jedno wywołanie Next. - W ramach jednej "sesji" (jednego wywołania funkcji Pipe), źródło za każdym razem zwraca nowe dane na każde wywołanie Next. - Jednak po restarcie, źródło zaczyna 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. Poziom podstawowy: 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. Utrudnienie: Metody Next, Process i Commit są powiązane z wywołaniami sieciowymi i mogą działać dość długo. Aby przyspieszyć proces, konieczne jest równoległe wykonywanie procesów czytania, zapisywania i potwierdzania postępu. Tak, aby podczas Process lub Commit, czytanie ze źródła i tworzenie nowego bufora kontynuowało. */ const MaxItems = 9999 type Producer interface { // Next zwraca: // - partię 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 partii danych jako przetworzonych Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Jak jest zaimplementowana operacja select w języku Go i jak działa z kanałami?
Czy można wstrzymać wykonanie goroutine tak, aby zablokowała się na konkretnym wątku systemowym?
Czy język Go ma wbudowane wsparcie dla tablic?
Jaki mechanizm abstrakcji w języku Go służy do reprezentowania znaków lub tokenów?
Co oznacza wartość zerowa dla wycinka w języku programowania?
Jak w języku Go realizowana jest równoległa i sekwencyjna obsługa zadań?
Jakie mechanizmy i metody są używane do ochrony danych podczas nawiązywania połączeń HTTPS?
Jakie typy danych nadają się do użycia jako klucz w strukturze danych Map?
Czy możesz wyjaśnić mechanizm działania planisty zadań w systemie operacyjnym?
Czy możesz wyjaśnić wewnętrzną strukturę i działanie tablicy haszującej?