#claruey #technik
1. Co jest w Go świetne? - goroutines i scheduler, który pozwala na pracę bez myślenia o tym, jak obsługuje konkurencyjność.
2. Jakie wady widzisz w Go? - obsługa błędów
3. Jak trafiłeś na Go?
4. Co zapewnia lekkość Go i dlaczego goroutines przełączają się szybciej? Dlaczego nie można tego zrobić w OS?
5. Na co tracimy, używając goroutines zamiast wątków OS?
6. Czym jest konkurencyjność i równoległość?
7. Czym jest interfejs net.Listener i jakie ma metody?
8. Czy pracowałeś bezpośrednio z sieciami lub przez frameworki i jakie?
9. Czym TCP różni się od UDP i do czego są ogólnie używane?
10. Jakie są ryzyka przy używaniu TCP i UDP?
11. Czym są bigEndian i littleEndian?
12. Czym jest TLS?
13. Jakie są sposoby przesyłania danych między mikroserwisami (np. komendy/żądania/odpowiedzi/przesyłanie plików)? Jakie wzorce lub narzędzia programistyczne możemy wybrać i jakie mają niuanse?
14. Jakie są metody przesyłania danych przez sieć i ich zalety/wady?
15. Z jakimi systemami zarządzania bazami danych pracowałeś i jakie narzędzia używałeś?
16. Jaką bibliotekę używałeś dla każdej bazy danych w Go?
17. Jak radzisz sobie z rozwojem bazy danych podczas pracy nad projektem?
18. Jeśli schemat bazy danych się zmieni, jak sobie z tym radzisz, nie niszcząc starych danych? Co z migracjami, ich zalety i wady?
19. Jak zmieniasz bazę danych w produkcji? Kto to robił?
20. Jak najlepiej abstrahować komponent bazy danych od głównej logiki, aby zapytania SQL i metody nie rozpraszały się po kodzie? Umieścić to w osobnym katalogu, przekazać interfejs i używać tagów?
21. Dlaczego indeksy są potrzebne i jakie są ich wady?
22. Zostałeś poproszony o napisanie kodu, który umieściłbyś w projekcie i jak byś dokumentował wyniki?
23. Jaką dokumentację zwykle używasz i w jakim celu + dokąd ona trafia? Na przykład, czym jest ten interfejs i do czego służy?
24. Czy aktywnie korzystasz z go doc i czy to jest praktyka w twoim zespole?
25. Towarzyszysz specyfikacje lub dokumentację markdown? Jak to robisz?
26. Jaki był twój workflow, kto przydzielał zadania i jaki był następny krok?
27. Jak szczegółowe są twoje zadania? Czy tylko musisz do nich dotrzeć, czy też myśleć architektonicznie i pytać innych?
28. Mamy projekt z wieloma goroutines. Jakie narzędzia synchronizacji używasz, aby wszystkie goroutines zakończyły się elegancko i bezpiecznie?
29. Gdzie w projekcie używałeś goroutines?
30. Gdy przekazujesz interfejs do funkcji, ile bajtów on zajmuje?
31. Czym jest httpHandler, co otrzymuje, jaka jest jego struktura, co zwraca, jakie są argumenty i sygnatura? Do czego służy i gdzie jest dalej używany?
32. Czym jest middleware i jak go używać? Jak było to w twoim projekcie?
33. Jakie właściwości języka Go pozwalają na budowanie middleware i co to za funkcja, którą przyjmuje i co zwraca?
34. Jeśli masz funkcję, która przyjmuje inną funkcję i po jej wykonaniu uruchamia goroutine i wykonuje callback, a przekazujesz tam metodę struktury, która też nic nie przyjmuje i nic nie zwraca - czy będzie błąd kompilacji lub coś innego? Ma podpis pusty, a mamy metodę, która wymaga takiej funkcji, ale zamiast przekazać czystą funkcję, przekazaliśmy metodę, czyli obiekt.metoda.
35. Jest funkcja, która przyjmuje int32, a próbujesz przekazać jej int16, co się stanie i na którym etapie?
36. Ile bajtów zajmuje w pamięci slice na amd64? 24 bajty, a dane same nie są przekazywane do funkcji?
37. Jak można zaimplementować zbiór w Golang i jakie są różnice i niuanse?
38. Czym jest UUID i czy używałeś go w projekcie, gdzie i jaką bibliotekę?
39. Masz mapę z 1 000 000 elementów, co się stanie, jeśli dodasz jeszcze jeden? Jakie są możliwe scenariusze i jak zmieni się szybkość dostępu do danych?
41. Używałeś Dockera (kontenery/pody)? Jakie inne usługi używałeś przed Dockerem, np. "jak wdrożyć binarkę na serwerze"? Po skompilowaniu kodu, w co musi się przekształcić, aby usługa uruchomiła się przy starcie systemu?