Golang
Kam byly zprávy odeslány? Ty, které byly duplicitní.
Musel jsi v práci používat gorutiny? Pokud ano, v jaké funkčnosti?
Stojí za to vrátit rozhraní místo struktury? Kdy to může být výhodné?
// Je nutné implementovat funkci, // která by vracela chybu bez importu balíčků ze standardní knihovny nebo třetích stran. func Handle() (err error) { return }
Pověz mi podrobněji o svém současném místě práce: společnost, tým, role, oblast odpovědnosti, úkoly, technologický stack.
Jak jste generovali kód z proto-souborů? Použili jste Makefile?
Povězte mi o úrovních izolace transakcí
S jakými relačními databázemi jsi pracoval? Musel jsi řešit problémy sharding a partitioning?
Proč jsou data zapisována přes Kafka a ne přímo do ClickHouse?
Jaká jsou omezení, když několik instancí spotřebitele čte z Kafka?
Jaké typy gRPC interakcí jste použili? Můžete je pojmenovat?
func main() { defer func() { if r := recover(); r != nil { fmt.Println("obnoven") } }() defer func() { fmt.Println("odložené") }() go func() { fmt.Println("uvnitř gorutiny začátek") panic("boom") fmt.Println("uvnitř gorutiny konec") }() time.Sleep(time.Second) }
Jak je u vás organizováno code review? Musíte se účastnit vydání?
Může index zpomalit čtení (SELECT)?
Jaké primitives synchronizace znáš?
Co je to volume v Dockeru?
Co se stane se slice při jeho předání do funkce, přidání prvku a změně existujícího?
Co je to escape analýza? Jak určuje, kde bude proměnná umístěna (zásobník nebo halda)?
Analyzujte následující úryvek kódu v jazyce Go a vysvětlete, co bude program tisknout a proč: ```go func main() { type User struct { Name string } m := map[string]User{ "a": {Name: "Alice"}, } u := m["a"] u.Name = "Bob" fmt.Println(m["a"].Name) } ```
/* Existuje aplikace s architekturou mikroservisů. Mikroservis lze abstrahovat pomocí rozhraní Backend. Pro přístup k jedné instanci mikroservisu lze použít typ BackendImpl, který je již implementován. Každý mikroservis má několik desítek spuštěných instancí, každá dostupná na své adrese addr. Nicméně jednotlivé instance mikroservisu nejsou spolehlivé: mohou selhat, být nedostupné nebo přetížené. Proto je třeba implementovat typ Balancer, který také implementuje rozhraní Backend a provádí vyvažování zátěže mezi instancemi mikroservisu, volbou **nejméně zatížené** instance při každém volání. */ type Request interface{} type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr obsahuje ip:port konkrétní instance func NewBackend(addr string) *BackendImpl type Balancer struct { //TODO } var _ Backend = &Balancer{} // addrs obsahují adresy všech vyvažovaných instancí func NewBalancer(addrs []string) *Balancer { //TODO }