yoklateknik mülakat

Backend Go Stdlib Http Mülakat Soruları

75 doğrulanmış Backend Go Stdlib Http mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Go Stdlib HttpZorluk 1
net/http paketinde http.HandlerFunc, tanımlı bir fonksiyon tipidir. Bununla ilgili hangi ifade doğrudur?
  • afunc(http.ResponseWriter, *http.Request) imzalı bir fonksiyonu, bir ServeHTTP metoduyla http.Handler'a dönüştürür
  • bSarmalanan fonksiyonun ayrıca Read ve Write metotlarını uygulamasını gerektirir
  • cYalnızca error değeri döndüren fonksiyonlarla çalışır
  • dFonksiyonu otomatik olarak varsayılan ServeMux'a kaydeder
Açıklama:http.HandlerFunc(f), yalnızca f(w, r)'yi çağıran bir ServeHTTP metoduna sahip bir tiptir; sıradan bir fonksiyonu http.Handler'a dönüştürmenin standart yoludur. Read/Write gerektirmez, error dönüşü şart koşmaz ve kendi başına hiçbir şeyi kaydetmez — kayıt işini http.HandleFunc veya mux.HandleFunc yapar.
Go Stdlib HttpZorluk 3
Klasik bir http.ServeMux üzerinde (HTTP metodu içermeyen, 1.22 öncesi tarz pattern'ler), mux.HandleFunc("/users", usersHandler) ve mux.HandleFunc("/", rootHandler) kaydediliyor. "/users/42" path'ine bir istek geliyor. Hangi handler çalışır?
  • ausersHandler çalışır, "/users"ı bir prefix olarak eşleştirerek
  • brootHandler çalışır, "/" catch-all pattern'i üzerinden
  • cHiçbir handler çalışmaz; ServeMux 404 döner
  • dusersHandler çalışır, en uzun eşleşen pattern üzerinden
Açıklama:Klasik ServeMux kuralları: "/" ile biten bir pattern, altındaki her şeyi kapsayan bir subtree eşleşmesidir; sonunda "/" olmayan bir pattern ise yalnızca o tam path'i eşler. "/users" sonunda "/" olmadığı için "/users/42" ile eşleşmez; istek, daha spesifik hiçbir pattern'e uymadığı için kayıtlı "/" pattern'ine düşer.
Go Stdlib HttpZorluk 2
func handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("hello"))
    w.WriteHeader(http.StatusTeapot)
}

Client gerçekte hangi status kodunu alır?
  • a418 I'm a Teapot
  • b500 Internal Server Error
  • c200 OK
  • dHiçbir yanıt gönderilmez; bağlantı status satırı olmadan kapanır
Açıklama:Bir handler, WriteHeader'ı hiç çağırmadan önce Write çağırırsa net/http önce örtük bir WriteHeader(http.StatusOK) gönderir. Header bölümü bir kez yazıldıktan sonra sonraki WriteHeader çağrıları yok sayılır (bir uyarı loglanır), bu yüzden client, sonradan yapılan w.WriteHeader(http.StatusTeapot) çağrısından bağımsız olarak 200 OK görür.
Go Stdlib HttpZorluk 2
func handler(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
    w.Header().Set("X-Custom", "value")
}

Client, X-Custom header'ını alır mı?
  • aEvet, handler içinde herhangi bir anda
  • bEvet, ama yalnızca body boş bırakılırsa
  • cHayır, ama bunun tek nedeni "X-Custom"'ın büyük harfle başlaması
  • dHayır, header bölümü zaten gönderilmişti
Açıklama:w.Header(), response header'larının arkasındaki map'i döndürür; ama bu map yalnızca WriteHeader (veya ilk Write) header'ları gerçekten telin üzerine gönderdiğinde okunur. Bu noktadan sonraki her Header().Set çağrısı artık başvurulmayan bir map'i değiştirir, dolayısıyla değişiklik sessizce kaybolur.
Go Stdlib HttpZorluk 2
Bir http.HandlerFunc döndükten sonra, r.Body.Close()'u açıkça çağırmak handler'ın sorumluluğunda mıdır?
  • aHayır, net/http sunucusu her zaman kapatır
  • bEvet, aksi halde TCP bağlantısı asla serbest bırakılmaz
  • cEvet, aksi halde json.NewDecoder bir sonraki sefer panic verir
  • dHayır, ama yalnızca body'siz GET istekleri için
Açıklama:net/http, handler body'yi okumuş olsun ya da olmasın, handler fonksiyonu döndükten sonra Server'ın request body'sini kapatacağını garanti eder. r.Body.Close()'u açıkça çağırmak zararsızdır ve bazen netlik için yapılır, ama standart sunucuda kaynak sızıntısını önlemek için gerekli değildir.
Go Stdlib HttpZorluk 2
type payload struct {
    Name string `json:"name"`
    age  int    `json:"age"`
}
var p payload
json.NewDecoder(r.Body).Decode(&p)

{"name":"Ali","age":30} request body'si verildiğinde Decode sonrası p.age nedir?
  • a30 olur, json tag'i alanı adreslenebilir yaptığı için
  • b0 olur, zero value'sunda
  • cDecode hata döner
  • d30 olur, ama bunun tek nedeni struct'ın pointer olarak geçirilmesi
Açıklama:encoding/json reflection kullanır ve bu, paket dışından unexported struct alanlarını set edemez. age alanı küçük harfle başladığı (unexported) için Decode onu sessizce atlar — hata vermez ama atama da yapmaz — bu yüzden p.age zero value'su olan 0'da kalır.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla