Czy używaliście Kafka jako magazynu? Ile ogłoszeń było w Kafka?
Golang
Optymistyczne i pesymistyczne blokady — opowiedz
Czy masz doświadczenie z infrastrukturą? Czy musiałeś coś dotknąć?
Do czego najczęściej służy Consul w architekturze mikroserwisów?
RPS Średnio 4-5 tysięcy RPS, w szczycie do 12k Ale ważne jest, aby zrozumieć, że główne obciążenie spoczywało na Kafka. Ponieważ architektura jest asynchroniczna, przy każdym tworzeniu ogłoszenia mój orkiestrator generował łańcuch 5-7 zdarzeń w różnych usługach weryfikacyjnych. Łącznie przetwarzaliśmy średnio do 30k wiadomości na sekundę.
Jaka jest różnica między seniorem a middle developerem w zespole?
Czy firma zapewnia sprzęt do pracy?
Na jakim poziomie wynagrodzenia rozważasz przy zmianie?
Jakie jest twoje ogólne doświadczenie z infrastrukturą, w tym Docker, Kubernetes, CI/CD i sieciami?
Jak przeprowadzono test obciążeniowy i jakie metryki były monitorowane?
Jak rozwiązywałeś sytuacje, gdy twoje decyzje były odrzucane?
Jak wygodny jest hybrydowy format pracy w Moskwie z wizytą w biurze co najmniej raz w tygodniu?
Dlaczego kolejka (od jakiego słowa Q)?
Ile masz lat komercyjnego doświadczenia w rozwoju w Go?
Dlaczego zdecydowali się wejść na rynek? Co jest nie tak w Magnit teraz?
Jak iterować po uporządkowanej mapie, zachowując kolejność? Implementacja metody iteracji.
Jeśli w AddTask użyjemy RLock, jak będą się zachowywały dwa równoległe wywołania AddTask? Czy będą się blokować nawzajem?
Opowiedz o przypadku, gdy coś zaproponowałeś i musiałeś udowodnić swoją rację.
// Napisać asynchronicznego obsługiwacza zadań jako bibliotekę // Klient przekazuje obiekt (Task) z danymi do wykonania zadania, // w naszym przykładzie użyjemy pustej struktury. // Obsługiwacz może obsługiwać nie więcej niż N zadań jednocześnie, // i nie więcej niż X zadań może być ustawionych w kolejce do przetwarzania. // Jeśli nie ma miejsca w kolejce, od razu zwracamy klientowi błąd. // Zadanie jest pobierane do obsługi, jeśli dostępni są wolni obsługiwacze. // Symulujemy czas trwania obsługi 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ą: uzupełnić strukturę Task i uzyskać statusy zadań przez osobne zapytanie package scheduler type Scheduler interface { AddTask(t Task) error Close() } type Task interface { Do() }
Jak zachowywany jest stan użytkownika podczas wdrożenia bez przestojów?