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
Ko meklē darba vietā, ar ko vēlies nodarboties?
Ir ir funkcija `unpredictableFunc()`, kuru nepieciešams ietīt tā, lai tā darbotos ar laika ierobežojumu (piemēram, 1 sekundi) un reģistrētu tās izpildes laiku. // Ir funkcija, kas darbojas bezgalīgi ilgi un atgriež skaitli. // Tās ķermeni nevar mainīt (iedomājieties, ka iekšā ir tīkla pieprasījums). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Jāmaina ietverošā funkcija, kas darbosies ar noteiktu laika limitu (piemēram, 1 sekundi). // Ja "garā" funkcija pabeidzas šajā laikā, tas ir lieliski, atgriežam rezultātu. // Ja nē, atgriežam kļūdu. Rezultāts šajā gadījumā nav svarīgs. // // Turklāt, jāizmēra, cik ilgi šī funkcija darbojās (vienkārši izvadiet logā). // Ietverošās funkcijas paraksts var tikt mainīts. func predictableFunc() int64 { return unpredictableFunc() }
Kurā komandā tu strādāji bankā? Kāds bija komandas uzdevums?
Kā darbojas SSL/TLS? Aprakstiet savienojuma izveides procesu.
Kā darbojas kartes Go?
Kas ir slice Go valodā?
Vai jūs rakstījāt operatorus Kubernetes?
Kā iekšēji darbojas context.WithTimeout?
Vai ir apsvērta datu sadalīšana karstajos (pēdējie 3 mēneši) un aukstajos, lai samazinātu slodzi vietā Elasticsearch?
Kas ir transakciju izolācijas līmeņi? Kurus jūs izmantojāt?
Kāds kods parādīsies? 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 }
Kā pārbaudīt CPU un atmiņas slodzi Linux?
**Nosacījums** Pieprasījumi uz vairākām URL jāveic paralēli. Rādīt HTTP statusus, apstrādāt kļūdas. ```go package main func main() { urls := []string{"[link]"} // Darīt kaut ko } ```
Kā atrast lēnu vaicājumu PostgreSQL un kā to optimizēt?
Kā atšķiras goroutines no OS pavedieniem? Kam tās ir nepieciešamas?
Kā atšķirīsi Junior, Middle un Senior izstrādātājus? Saskaņā ar kādiem kritērijiem uzskatāt sevi par Senior?
Pastāsti par resp.Body.Close() — kāpēc tas ir nepieciešams un kāpēc iestatīji buferi uz 10?
Kas ir indeksi datu bāzēs? Kādi ir indeksu veidi?
Uzrakstiet SQL vaicājumu, kas parādīs **klienta vārdu**, **pilsētu** un **kopējo visu viņa pasūtījumu summu**. Galīgajā rezultātā iekļauti tikai tie klienti, kuru kopējās izdevumi pārsniedz **1000** vienības. --- **Datu shēma:** 1. **`customers` tabula:** - `customer_id` (int) – unikāls klienta identifikators. - `customer_name` (varchar) – klienta vārds. - `city` (varchar) – dzīvesvietas pilsēta. 2. **`orders` tabula:** - `order_id` (int) – unikāls pasūtījuma numurs. - `customer_id` (int) – klienta ID, kurš veica pirkumu. - `total_amount` (decimal) – konkrētā pasūtījuma summa.