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
Жұмыста не іздейсің, не істеуді қалайсың?
`unpredictableFunc()` функциясын орау керек, оны тайм-аутпен (мысалы, 1 секунд) орындап, орындалу уақытын логтау керек. // Белгілі бір ұзақ уақыт жұмыс істейтін және санды қайтаратын функция бар. // Оның денесін өзгертуге болмайды (ішінде желілік сұрау бар деп ойлаңыз). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Тайм-аутпен жұмыс істейтін орау функциясын өзгерту керек (мысалы, 1 секунд). // Егер "ұзақ" функция осы уақыт ішінде жұмыс істеп үлгерсе - жақсы, нәтижесін қайтару керек. // Егер жоқ болса - қате қайтару керек. Бұл жағдайда жұмыс нәтижесі маңызды емес. // // Сонымен қатар, бұл функция қанша уақыт жұмыс істегенін өлшеу керек (просто логқа шығару). // Орау функциясының сигнатурасын өзгертуге болады. func predictableFunc() int64 { return unpredictableFunc() }
Банкте қандай командада жұмыс істедіңіз? Команда қандай міндеттерді атқарды?
SSL/TLS қалай жұмыс істейді? Қосылу орнату процесін сипаттаңыз.
Go-да карталар қалай құрылымдалған?
Go тілінде слайс дегеніміз не?
Сіз Kubernetes үшін операторлар жаздыңыз ба?
context.WithTimeout ішкі құрылымы қалай?
Транзакция оқшаулау деңгейлері дегеніміз не? Қандай қолдандыңыз?
Linux-те CPU және жад жүктемесін қалай тексеруге болады?
//код не қандай нәтиже береді? 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 }
**Шарт** Бірнеше URL мекенжайларына сұраулар бір уақытта орындалуы керек. HTTP-статустарды шығарып, қателерді өңдеу керек. ```go package main func main() { urls := []string{"[link] "[link] // Бір нәрсе жасаңыз } ```
Жүктемені азайту үшін Elasticsearch орнына деректерді ыстық (соңғы 3 ай) және суық деп бөлу туралы ойладыңыз ба?
Goroutine-тер мен операциялық жүйе ағындары қалай ерекшеленеді? Неге goroutine-тер қажет?
PostgreSQL-да баяу сұрауларды қалай табуға және оларды қалай оңтайландыруға болады?
resp.Body.Close() туралы айта аласыз ба — ол не үшін қажет және неге 10 буферін қойдыңыз?
Сіз қалай Junior, Middle және Senior әзірлеушілерін ажырата аласыз? Өзіңізді Senior деп санайтын критерийлер қандай?
Деректер қорында неше жол болды?
Дерекқорлардағы индекстер дегеніміз не? Қандай түрлері бар?