#vyjasnění #technické
1. Co je na Go skvělé? - gorutiny a plánovač, který umožňuje pracovat bez přemýšlení o tom, jak funguje konkurence.
2. Jaké nevýhody vidíš v Go? - zpracování chyb
3. Jak jsi se dostal k Go?
4. Jak je zajištěna lehkost v Go a proč se gorutiny přepínají rychleji? Proč to nemohlo být uděláno stejně v OS?
5. Čím obětujeme, když místo OS vláken používáme gorutiny?
6. Co je konkurence a paralelismus?
7. Co je rozhraní net.Listener a jaké má metody?
8. Pracoval jsi přímo sítěmi nebo přes frameworky a které?
9. Čím se liší TCP od UDP a co to je a k čemu se používá?
10. Jaká jsou rizika při používání TCP a UDP?
11. Co je bigEndian a littleEndian?
12. Co je TLS?
13. Jaké jsou způsoby přenosu dat mezi mikroservisy (například příkazy/žádosti/odpovědi/přenos souborů)? Jaké vzory nebo vývojové nástroje můžeme zvolit a jaké jsou jejich nuance?
14. Jaké jsou způsoby přenosu dat přes síť a jaké jsou jejich výhody/nevýhody?
15. S jakými databázemi jsi pracoval a jaké nástroje jsi používal?
16. Jakou knihovnu jsi použil pro každou databázi v Go?
17. Jak řešíš růst databáze během vývoje?
18. Pokud se změní schéma databáze, upraví se pole, jak řešíš tento problém, aniž bys ztratil stará data? Jak provádíš migrace a jaké jsou jejich výhody/nevýhody?
19. Jak měníš databázi v produkci? Kdo to dělal?
20. Jak můžeš abstraktně oddělit komponentu pracující s databází od hlavní logiky, aby všechny SQL dotazy a ORM nešířily se v kódu? Umísti ji do samostatného adresáře a používej rozhraní a tagy.
21. Proč jsou potřeba indexy a jaké jsou jejich nevýhody?
22. Dostali jste úkol: napiš kód, který vložíš do projektu, a jak budeš dokumentovat výsledek?
23. Jakou dokumentaci obvykle používáš a proč + kam to směřuje? Například, co je to za rozhraní, k čemu slouží atd.? Měl jsi takovou situaci?
24. Aktivně používáš go doc a je to u vás běžná praxe?
25. Dokumentuješ specifikace nebo markdown a jak to děláš?
26. Jaký byl tvůj pracovní tok, od koho přicházely úkoly a co se stalo potom?
27. Jak podrobné jsou úkoly? Tzn. jen k vstupu nebo je třeba i přemýšlet o architektuře a ptát se někoho?
28. V projektu s mnoha gorutinami, jaké synchronizační prostředky používáš, aby všechny gorutiny bezpečně skončily?
29. Kde v projektu jsi použil gorutiny?
30. Kolik bajtů zabírá rozhraní?
31. Co je to httpHandler, co přijímá a jaká je jeho struktura a co vrací, jaké má argumenty a signaturu? K čemu je potřeba a kde se dále používá?
32. Co je middleware a jak ho používáš? Jak to bylo ve tvém projektu?
33. Jaké vlastnosti jazyka Go umožňují stavět tyto middleware a co to je, co přijímá a co produkuje?
34. Máme funkci, která přijímá funkci a po jejím provedení spustí gorutinu a provede callback, a my jí předáváme metodu struktury, která také nic nepřijímá a nic nevrací - bude chyba kompilace nebo něco jiného? Tzn. její signatura je prázdná a máme nějakou metodu, která žádá takovou funkci, a místo toho, abychom předali čistou funkci, jsme předali metodu, tj. objekt.metoda.
35. Existuje funkce, která přijímá int32 a my se snažíme jí předat int16, co se stane a v jaké fázi?
36. Kolik bajtů zabírá slice v paměti například na amd64? 24 bajtů, a data se do funkce nepředávají?
37. Jak lze implementovat množinu v Go a jaké jsou jejich rozdíly a nuance?
38. Co je UUID a používal jsi ho v projektu, kde a jakou knihovnu jsi použil?
39. Máš mapu s 1 000 000 prvky, co se stane, když přidáš ještě 1 prvek? Jaké jsou možné scénáře a jak se změní rychlost přístupu k datům?
41. Používal jsi Docker (kontejnery/pody)? A jaké služby byly před Dockerem, například "jak nasadit binárku na server"? Jak jsi zabalil kód a jak jsi ho upravil, aby služba startovala při spuštění OS?