Golang
// Zadanie 3 // Opisz, jakie zadanie rozwiązuje ten kod // Jakie są problemy w tym rozwiązaniu? // Jak byś przepisał ten kod?
Czy wskaźnik może wskazywać zarówno na stos, jak i na stertę?
Dlaczego potrzebne jest połączenie Load Balancer + API Gateway? Jaka jest rola każdego komponentu?
Maksymalne obciążenie: 25k odczytów / 5k zapisów na sekundę Ilość nowych danych: 10 TB rocznie Maksymalny poziom równoległości: 120k jednoczesnych zapytań Roczny wzrost użytkowników: 30% Docelowa p99 opóźnienia: <150 ms dla odczytów, <400 ms dla zapisów Docelowa dostępność: 99,95% Twoim zadaniem jest opracowanie rozwiązania architektonicznego, które wyeliminuje obecne problemy, zapewni spójność i odporność na awarie, a także wdroży mechanizmy śledzenia dla pełnego monitorowania cyklu życia zamówienia. Opisz mechanizm obsługi awarii, plan migracji z obecnej architektury i wyjaśnij, jak proponowane rozwiązanie poprawi niezawodność i przejrzystość systemu.
Czy masz doświadczenie w projektowaniu systemów — opracowywaniu architektury od podstaw, obronie jej przed zespołem?
Jak będzie przebiegał proces wysyłania i odbierania wiadomości między dwoma klientami? Opisz pełny flow.
Czym są errors.Is i errors.As, do czego służą i jaki problem rozwiązują?
Czy dla każdej gorutyny tworzony jest nowy wątek systemu operacyjnego?
Istnieją 3 encje: użytkownik, czat, wiadomość • Użytkownik ma imię i datę rejestracji • Czat ma nazwę i datę utworzenia • Wiadomość ma tekst, autora i datę utworzenia • Użytkownik może być jednocześnie w kilku czatach • Wiadomość musi należeć do czatu i nie może należeć do więcej niż jednego czatu jednocześnie • Należy opisać dziedzinę w formie tabel
Ile masz lat?
Jaki jest główny język programowania, którego używasz? Czy używasz C++ lub Python?
Kto zaprojektował architekturę projektu — ty jako lider funkcji, wspólnie z zespołem, czy jako lider zespołu?
Gdzie w Go umieszczane są zmienne — na stosie czy na stercie? Czym jest analiza ucieczek?
typ Sem interfejs { Lock() error TryLock() bool Release() Cap() int FreeSpace() int }
func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount partner.Hold -= amount partner.Balance += amount if err := r.save(advertiser); err != nil { return err } if err := r.save(partner); err != nil { return err } r.totalPayouts++ return nil }
Jakie zasady pracy z kanałami należy znać podczas rozwoju (zamknięte, otwarte, kiedy co można robić)?
Czy zdarzyło Ci się robić coś przez długi czas, a ostatecznie nie zostało to wdrożone lub odłożone na stos?
Czy masz pre-offers?
Opowiedz o sytuacji, gdy zauważyłeś nieefektywny proces w firmie. Co zrobiłeś, aby go zmienić i jak uzasadniłeś konieczność zmiany?
func main() { defer func() { if r := recover(); r != nil { fmt.Println("odzyskano") } }() defer func() { fmt.Println("odroczenie") }() go func() { fmt.Println("początek goroutine") panic("bum") fmt.Println("koniec goroutine") }() time.Sleep(time.Second) }