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
Bir fonksiyon var `unpredictableFunc()`, onu zaman aşımına uğrayacak şekilde (örneğin 1 saniye) sarmak ve çalışma süresini kaydetmek gerekiyor. // Sonsuz süre çalışan ve sayı döndüren bir fonksiyon var. // Gövdesini değiştirmemize izin yok (içinde bir ağ isteği olduğunu varsayalım). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Sarma fonksiyonunu değiştirmemiz gerekiyor, bu fonksiyon belirli bir zaman aşımıyla çalışacak (örneğin 1 saniye). // Eğer "uzun" fonksiyon bu süre içinde tamamlandıysa, mükemmel, sonucu döndürürüz. // Aksi takdirde, hata döndürürüz. Bu durumda çalışma sonucunun önemi yok. // // Ayrıca, bu fonksiyonun ne kadar süre çalıştığını ölçmemiz gerekiyor (sadece log'a yazdırmak yeterli). // Sarma fonksiyonunun imzasını değiştirebiliriz. func predictableFunc() int64 { return unpredictableFunc() }
İşten ne arıyorsun, ne yapmak istiyorsun?
SSL/TLS nasıl çalışır? Bağlantı kurma sürecini açıklayın.
Go'da dilim nedir?
Bankada hangi takımda çalıştın? Takım ne yapıyordu?
resp.Body.Close() hakkında konuş — neden gerekli ve neden 10'luk bir tampon koydun?
context.WithTimeout iç yapısı nasıl çalışır?
Go'da haritalar nasıl yapılandırılmıştır?
Kodu ne gösterecek? 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 }
Linux'ta CPU ve bellek kullanımını nasıl kontrol edilir?
Kubernetes için operatörler yazdın mı?
Veritabanlarında indeksler nedir? Hangi indeks türleri vardır?
Goroutine'ler işletim sistemi thread'lerinden nasıl farklıdır? Goroutine'ler ne işe yarar?
İşlem izolasyon seviyeleri nelerdir? Hangi seviyeleri kullandınız?
**Koşul** Birden fazla URL'ye yapılan istekler paralel olarak gerçekleştirilmelidir. HTTP durum kodlarını göstermek ve hataları işlemek.
PostgreSQL'de yavaş sorguyu nasıl buluruz ve nasıl optimize ederiz?
**Koşul** Birden fazla URL'ye yapılan istekler paralel olarak yapılmalı. HTTP durum kodlarını göster, hataları işle. ```go package main func main() { urls := []string{"[link]"} // Bir şeyler yap } ```
Junior, Middle ve Senior geliştiricileri nasıl ayırt ediyorsun? Kendini Senior olarak hangi kriterlere göre değerlendiriyorsun?
Tüm siparişlerin **müşteri adını**, **şehrini** ve **toplam tutarını** gösterecek bir SQL sorgusu yazın. Toplam harcamaları **1000** birimi aşan müşteriler yalnızca sonuçlara dahil edilmelidir. --- **Veri şeması:** 1. **`customers` tablosu:** - `customer_id` (int) – müşterinin benzersiz kimliği. - `customer_name` (varchar) – müşterinin adı. - `city` (varchar) – ikamet ettiği şehir. 2. **`orders` tablosu:** - `order_id` (int) – benzersiz sipariş numarası. - `customer_id` (int) – satın alma işlemini yapan müşterinin kimliği. - `total_amount` (decimal) – belirli bir siparişin tutarı.