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 } } }
Golang
Istnieje funkcja `unpredictableFunc()`, którą trzeba opakować tak, aby działała z limitem czasu (np. 1 sekunda) i logowała czas wykonania. // Istnieje funkcja, która działa nieskończenie długo i zwraca liczbę. // Nie można zmieniać jej ciała (załóżmy, że wewnątrz jest żądanie sieciowe). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Należy zmodyfikować funkcję opakowującą, która będzie działać z ustawionym limitem czasu (np. 1 sekunda). // Jeśli "długa" funkcja zakończy się w tym czasie, to świetnie, zwracamy wynik. // Jeśli nie, zwracamy błąd. Wynik działania w tym przypadku nie jest ważny. // // Dodatkowo, trzeba zmierzyć, jak długo ta funkcja była wykonywana (wystarczy wypisać w logu). // Sygnaturę funkcji opakowującej można zmienić. func predictableFunc() int64 { return unpredictableFunc() }
Czego szukasz w pracy, czym chcesz się zajmować?
Jak działa SSL/TLS? Opisz proces nawiązywania połączenia.
Czym jest slice w Go?
W jakim zespole pracowałeś w banku? Czym zajmował się zespół?
Opowiedz o resp.Body.Close() — dlaczego jest to potrzebne i dlaczego ustawiłeś bufor na 10?
Jak działa wewnętrznie context.WithTimeout?
Jak działają mapy w Go?
Co kod wyświetli? 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 }
Jak sprawdzić obciążenie CPU i pamięci w Linux?
Czy pisałeś operatorów dla Kubernetes?
Czym są indeksy w bazach danych? Jakie są rodzaje indeksów?
Czym różnią się goroutines od wątków systemu operacyjnego? Do czego służą goroutines?
Czym są poziomy izolacji transakcji? Które używałeś?
**Warunek** Zapytania do wielu adresów URL powinny być wykonywane równolegle. Należy wyświetlić statusy HTTP i obsłużyć błędy.
Jak znaleźć wolne zapytanie w PostgreSQL i jak je zoptymalizować?
**Warunek** Zapytania do wielu URL powinny być wykonywane równolegle. Wyświetl statusy HTTP, obsłuż błędy. ```go package main func main() { urls := []string{"[link]"} // Zrób coś } ```
Jak rozróżniasz programistów Junior, Middle i Senior? Na podstawie jakich kryteriów uważasz się za Seniora?
Napisz zapytanie SQL, które wyświetli **imię klienta**, jego **miasto** i **łączną sumę** wszystkich jego zamówień. Do końcowego wyniku powinni trafić tylko ci klienci, których łączne wydatki wynoszą **więcej niż 1000** jednostek. --- **Schemat danych:** 1. **Tabela `customers`:** - `customer_id` (int) – unikalny identyfikator klienta. - `customer_name` (varchar) – imię klienta. - `city` (varchar) – miasto zamieszkania. 2. **Tabela `orders`:** - `order_id` (int) – unikalny numer zamówienia. - `customer_id` (int) – ID klienta dokonującego zakupu. - `total_amount` (decimal) – kwota konkretnego zamówienia.