Sobes.tech

Golang

func Copy(src io.Reader, dst io.Writer) error { //... } import gocopy s := file.Open() err := gocopy.Copy(s, d) func Copy(src io.Reader, dst io.Writer) (statusCh, error) { //... go func() { statusCh }() } func Read() { select { case status := <-statusCh: } } type Stat struct { status string err error } func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) go func() { statusCh{ } } return statusCh } func Read() { select { case status := <-statusCh: } } import gocopy s := file.Open() err := gocopy.Copy(s, d) func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) buf := make([]byte, 1024) var total int64 go func() { for { n, err := src.Read(buf) if n > 0 { writen, err := dst.Write(buf[:n]) total += int64(writen) if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } if err == io.EOF { statusCh <- Stat{ bCopy: total, status: "done", err: nil, } return } if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } } return statusCh } func Read() { select { case status := <-statusCh: if status.err != nil { return } } } func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) buf := make([]byte, 1024) var total int64 go func() { for { select { case : n, err := src.Read(buf) if n > 0 { writen, err := dst.Write(buf[:n]) total += int64(writen) if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } if err == io.EOF { statusCh <- Stat{ bCopy: total, status: "done", err: nil, } return } if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } default: statusCh <- Stat{ bCopy: total, status: "pending", err: nil, } } } } return statusCh } func Read() { select { case status := <-statusCh: if status.err != nil { return } } }

246

Existuje funkce `unpredictableFunc()`, kterou je třeba obalit tak, aby běžela s časovým limitem (například 1 sekunda) a zaznamenávala dobu běhu. // Existuje funkce, která běží nekonečně dlouho a vrací číslo. // Tělo této funkce nelze měnit (představme si, že uvnitř je síťový požadavek). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Je třeba upravit obalovací funkci, která bude pracovat s daným časovým limitem (například 1 sekunda). // Pokud "dlouhá" funkce doběhne v tomto čase, je to skvělé, vracíme výsledek. // Pokud ne, vracíme chybu. Výsledek této funkce nás v tomto případě nezajímá. // // Navíc je třeba změřit, jak dlouho tato funkce běžela (stačí vypisovat do logu). // Signatura obalovací funkce může být změněna. func predictableFunc() int64 { return unpredictableFunc() }

240

Jak funguje SSL/TLS? Popište proces navázání spojení.

201

V jakém týmu jsi pracoval v bance? Čím se tým zabýval?

192

Co zobrazí kód? package main import "fmt" func main() { nums := make([]int, 1, 2) fmt.Println(nums) // appendSlice(nums, 1024) fmt.Println(nums) // mutateSlice(nums, 1, 512) fmt.Println(nums) // } func appendSlice(sl []int, val int) { sl = append(sl, val) } func mutateSlice(sl []int, idx, val int) { sl[idx] = val }

170

Jak zkontrolovat zatížení CPU a paměti v Linuxu?

166

Co jsou indexy v databázích? Jaké jsou typy indexů?

164

V čem se liší gorutiny od vláken operačního systému? K čemu jsou gorutiny potřeba?

163

Jaké jsou úrovně izolace transakcí? Které jste použili?

161

Pověz mi o resp.Body.Close() — proč je to potřeba a proč jsi nastavil buffer na 10?

160

**Podmínka** Požadavky na více URL by měly být prováděny paralelně. Zobrazit HTTP stavy a zpracovat chyby.

156

Jak najít pomalý dotaz v PostgreSQL a jak ho optimalizovat?

154

**Podmínka** Požadavky na více URL by měly být prováděny paralelně. Zobrazit HTTP stavy, zpracovat chyby. ```go package main func main() { urls := []string{"[link]"} // Udělej něco } ```

153

Jak rozlišuješ juniory, middlery a seniory vývojáře? Podle jakých kritérií se považuješ za seniora?

149

Napište SQL dotaz, který zobrazí **jméno zákazníka**, jeho **město** a **celkovou částku** všech jeho objednávek. Do finálního výběru patří pouze ti zákazníci, jejichž celkové výdaje přesahují **1000** jednotek. --- **Datový schéma:** 1. **Tabulka `customers`:** - `customer_id` (int) – unikátní identifikátor zákazníka. - `customer_name` (varchar) – jméno zákazníka. - `city` (varchar) – město bydliště. 2. **Tabulka `orders`:** - `order_id` (int) – unikátní číslo objednávky. - `customer_id` (int) – ID zákazníka, který objednávku provedl. - `total_amount` (decimal) – částka konkrétní objednávky.

145
/3