Czy teraz pracujesz, czy nie, i w jakim formacie: biuro, hybrydowy, zdalny?
Golang
Jakie języki programowania używasz oprócz Go?
/* 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 }
Jakie wskaźniki wydajności użyłeś do oceny swojej pracy w ostatnim projekcie?
Jakie masz doświadczenie w implementacji i konfiguracji systemów uwierzytelniania i autoryzacji?
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) n := len(s) for right := 0; right < n; right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
Czym różni się balansujący L4 od L7?
""" Miejsca w kinie są ułożone w jeden rząd. Nowo przybyły widz wybiera miejsce, aby siedzieć jak najdalej od innych widzów w rzędzie. To znaczy, odległość od tego miejsca, na którym usiądzie widz, do najbliższego widza powinna być maksymalna. Gwarantuje się, że w rzędzie zawsze są wolne miejsca i że już siedzi co najmniej jeden widz. Napisz funkcję, która na podstawie podanego rzędu miejsc (tablicy zer i jedynek) zwróci odległość (liczbę przerw między fotelami) od wybranego miejsca do najbliższego widza. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }
""" Miejsca w kinie są ustawione w jednym rzędzie. Nowo przybyły widz wybiera miejsce, aby siedzieć jak najdalej od innych widzów w rzędzie. To znaczy, odległość od tego miejsca do najbliższego widza powinna być maksymalna. Gwarantuje się, że zawsze są wolne miejsca i że już siedzi co najmniej jeden widz. Napisz funkcję, która na podstawie podanego rzędu miejsc (tablicy zer i jedynek) zwróci odległość (liczbę przerw między fotelami) od wybranego miejsca do najbliższego widza. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
/* * Dany jest tablica liczb całkowitych i liczba X, * należy znaleźć najdłuższy niepusty podprzedział, którego minimum jest równe X. * Zwróć długość takiego podprzedziału lub -1, jeśli takich nie ma. */
Jaki projekt wybrać na rozmowę techniczną i jak go opisać?
Jak określa się czas wykonania operacji dodania elementu po kluczu do struktury danych Map?
Dlaczego potrzebne są dwie sprawdzenia if (w linii 79 i w linii z len(buf)==MaxItems), a nie jedno?
Jak wizualnie lub algorytmicznie określić, że element jest unikalny w strukturze danych Map?
Jaki wskaźnik zapytań na sekundę został osiągnięty podczas zapisywania danych?
// Dla dwóch tablic liczb całkowitych o długości N, // dla wszystkich K od 1 do N, policz liczbę wspólnych liczb na prefiksach długości K. // Liczby w tablicy mogą się powtarzać, przecięcie jest liczone bez uwzględniania wielokrotności. // Prefiks długości K tablicy A to pierwszych K elementów tablicy A // A [1, 1] => [1], [1, 1] // B [1, 1] => [1], [1, 1] // R [1, 1] // [1, 2, 5] => [1], [1, 2], [1, 2, 5] // [1, 5, 4] => [1], [1, 5], [1, 5, 4] // [1, 1, 2]
[imię] wskazał: w linii 20, uniq nie zawiera liczby unikalnych znaków, lecz coś innego. Co dokładnie?
// Dane są dwie posortowane sekwencje liczb całkowitych w porządku nierosnącym. // Należy zwrócić wszystkie elementy z pierwszej sekwencji, których nie ma w drugiej. // 0 <= N <= 10^6 // -10^9 <= a[i] <= 10^9 // [1] // [2, 3, 4, 5, 6] // [1] // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...] // [1] // [2, 3, 4, 5, 6, 7, 8] func filter(first []int, second []int) []int { res := make([]int, 0, len(first)) i, j := 0, 0 for i < len(first) && j < len(second) { if first[i] < second[j] { result = append(result, first[i]) i++ } else if first[i] > second[j] { j++ } else { i++ j++ } } for i < len(first) { result = append(result, first[i]) i++ } return result }
Opowiedz o najtrudniejszym i najbardziej interesującym zadaniu, które rozwiązałeś, szczególnie w zakresie doświadczenia architektonicznego.
Jak przesuwać okno w algorytmie sliding window?