yoklateknik mülakat

Backend Go Interfaces Generics Mülakat Soruları

75 doğrulanmış Backend Go Interfaces Generics 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 Interfaces GenericsZorluk 1
Go'da interface memnuniyeti (satisfaction) ile ilgili hangi ifade doğrudur?
  • aBir tipin method set'i interface'in tüm metotlarını içeriyorsa, o tip otomatik olarak o interface'i karşılar.
  • bBir tip, hangi interface'leri implemente ettiğini implements anahtar kelimesiyle belirtmek zorundadır.
  • cBir tip, yalnızca interface'in tanımlandığı paketi import ederse o interface'i karşılar.
  • dBir tip, metotları interface ile aynı dosyada tanımlıysa o interface'i karşılar.
Açıklama:Go'da interface'ler örtük (implicit) olarak karşılanır; yapısal tipleme (structural typing) uygulanır ve implements diye bir anahtar kelime yoktur. Bir tipin method set'i, bir interface'de tanımlı tüm metotları içeriyorsa, paket ya da dosya konumundan bağımsız olarak o tip otomatik olarak o interface'i karşılar.
Go Interfaces GenericsZorluk 2
type Animal interface { Speak() string }
type Dog struct{}
func (d *Dog) Speak() string { return "Woof" }

func main() {
    var a Animal = Dog{}
    fmt.Println(a.Speak())
}

Bu kod derlendiğinde ne olur?
  • aDerlenir ve "Woof" yazdırır.
  • bDerlenmez: Dog, Animal'ı implemente etmez.
  • cDerlenir ama Speak çağrıldığında runtime'da panic verir.
  • dDerlenir ve boş string yazdırır.
Açıklama:Speak, pointer receiver ile tanımlı; bu yüzden Dog'un değil (*Dog)'un method set'ine ait. Dog değerinin (&Dog{} değil) Animal değişkenine atanması, "Dog does not implement Animal (Speak method has pointer receiver)" benzeri bir hatayla derlenmeyi başarısız kılar.
Go Interfaces GenericsZorluk 3
Tüm metotları value receiver ile tanımlanmış bir T tipi için, T ve *T'nin method set'leri hakkında hangi ifade doğrudur?
  • aT'nin method set'i yalnızca pointer receiver'lı metotları içerir.
  • b*T'nin method set'i yalnızca pointer receiver'lı metotları içerir, T'nin value receiver'lı metotlarını içermez.
  • c*T'nin method set'inde hem value hem pointer receiver'lı metotlar vardır; T'ninkinde yalnız value'lular.
  • dT ve *T'nin method set'i, istisnasız her zaman birebir aynıdır.
Açıklama:T'nin method set'i, T üzerinde tanımlanan value receiver ve pointer receiver metotlarının birleşimidir; T'nin method set'i ise yalnızca value receiver'lı metotları içerir. Bu asimetri yüzünden T, çoğu zaman yalnızca T'nin karşılayamadığı interface'leri karşılayabilir.
Go Interfaces GenericsZorluk 1
type Status int

const Active Status = 1

func (s Status) String() string {
    return "active"
}

func main() {
    var s Status = Active
    fmt.Printf("status: %v\n", s)
}

Bu ne yazdırır?
  • astatus: 1
  • bDerlenmez.
  • cRuntime'da panic verir.
  • dstatus: active
Açıklama:Status, String() metoduyla fmt.Stringer'ı sağlar. %v, fmt.Stringer'ı sağlayan bir değeri biçimlendirirken altındaki int yerine String()'i çağırır; bu yüzden çıktı dönen string'i kullanır.
Go Interfaces GenericsZorluk 1
Go'da any nedir ve tiplerle ilişkisi nasıldır?
  • aYalnızca tip parametre listelerinde kullanılabilen özel, generic'e özgü bir anahtar kelime.
  • bBoş interface olan interface{} için bir alias'tır; hiçbir metodu yoktur ve her tip tarafından karşılanır.
  • cYalnızca sayısal değerleri tutabilen yerleşik bir tip.
  • dBir değişkenin tipinin bir kez çıkarılıp sonsuza dek sabitleneceğini belirten bir anahtar kelime.
Açıklama:any, interface{} için eklenmiş bir alias'tır. Boş interface hiçbir metot bildirmediğinden, her tipin method set'i onu otomatik olarak karşılar; bu yüzden any tipindeki bir değişken herhangi bir tipteki değeri tutabilir.
Go Interfaces GenericsZorluk 2
var i any = "hello"
n := i.(int)
fmt.Println(n)

Bu kod çalıştırıldığında ne olur?
  • a0 yazdırır.
  • bDerlenir ve n, nil olur.
  • c"hello"yu int'e çevirip yazdırır.
  • dÇalışma zamanında panic eder.
Açıklama:Type assertion'ın tek değerli formu (i.(int)) başarısız olursa panic verir. i'nin dinamik tipi string olduğundan, int'e assert etmeye çalışmak "interface conversion: interface {} is string, not int" benzeri bir mesajla panic'e yol açar.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla