yoklateknik mülakat

Backend Csharp Memory Performance Mülakat Soruları

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

Gerçek simülasyonu dene →

Örnek sorular

Csharp Memory PerformanceZorluk 1
C#'ta aşağıdakilerden hangisi varsayılan olarak bir değer tipi (value type)dir?
  • aclass Point { }
  • bstruct Point { }
  • cstring
  • dobject
Açıklama:struct, C#'ta bir değer tipi tanımlar — instance'lar inline olarak (stack'te ya da içinde bulundukları yerin içinde) saklanır ve atamada değer olarak kopyalanır. class, string ve object ise hepsi referans tipidir: bu tiplerdeki değişkenler heap'teki veriye bir referans tutar.
Csharp Memory PerformanceZorluk 2
struct Point
{
    public int X;
    public int Y;
}

var p1 = new Point { X = 1, Y = 2 };
var p2 = p1;
p2.X = 99;

Console.WriteLine(p1.X);

Bu ne yazdırır?
  • a1
  • b99
  • c0
  • dNullReferenceException fırlatır
Açıklama:Point bir struct'tır (değer tipi), bu yüzden var p2 = p1; tüm değeri p2'ye kopyalar — p2, p1'e bir referans değil, bağımsız bir kopyadır. p2.X'i değiştirmek p1'i etkilemez, dolayısıyla p1.X hâlâ 1'dir.
Csharp Memory PerformanceZorluk 2
class Box
{
    public int Value;
}

var b1 = new Box { Value = 1 };
var b2 = b1;
b2.Value = 99;

Console.WriteLine(b1.Value);

Bu ne yazdırır?
  • a1
  • b99
  • c0
  • dDerlenmez
Açıklama:Box bir class'tır (referans tipi). var b2 = b1; yalnızca referansı kopyalar, bu yüzden b1 ve b2 heap'teki aynı nesneyi işaret eder. b2.Value'i değiştirmek, b1'in de işaret ettiği aynı nesneyi değiştirir, dolayısıyla b1.Value da 99 olur.
Csharp Memory PerformanceZorluk 3
int number = 42;
object boxed = number;
int unboxed = (int)boxed;

Console.WriteLine(unboxed);

object boxed = number; satırı ne yapar?
  • aDoğrudan number'a bir referans oluşturur, kopya alınmaz
  • bint, object'e atanamadığı için derlenmez
  • cHeap'te yeni bir nesne ayırır ve number'ın değerini bu nesneye kopyalar (boxing)
  • dnumber'ı bir string gösterimine dönüştürür
Açıklama:Bir değer tipini object'e (ya da uyguladığı herhangi bir interface'e) atamak boxing'i tetikler: CLR, managed heap'te yeni bir nesne ayırır ve değer tipinin verisini bu nesneye kopyalar. Orijinal number değişkeni ve boxed kopya artık bağımsızdır — boxing'in gerçek bir allocation ve kopyalama maliyeti olmasının nedeni budur.
Csharp Memory PerformanceZorluk 2
C#'ta unboxing nedir?
  • aGarbage collector'ın geri kazanabilmesi için bir değişkeni scope'tan çıkarmak
  • bBir class instance'ını bir struct'a dönüştürmek
  • cBir değişkeni ilklendirmeden bildirmek
  • dBoxed bir object'ten değer tipini geri çıkarmak (ör. object'i tekrar int'e cast'lemek)
Açıklama:Unboxing, boxing'in tersidir: object olarak saklanan (boxed bir değer tipini tutan) bir referansı alıp orijinal değer tipine geri cast'lemektir, ör. int i = (int)boxedObj;. Bu, değeri heap'teki box'tan bir değer-tipi değişkenine kopyalar; geçersiz bir cast InvalidCastException fırlatır.
Csharp Memory PerformanceZorluk 3
Kıdemsiz bir geliştirici, generic olmayan bir System.Collections.ArrayList'e 100.000 int değeri ekleyen bir döngü yazıyor. Kıdemli bir meslektaşı bunun List<int> kullanmaktan çok daha yavaş olacağını söylüyor. Neden?
  • aArrayList, object referansları saklar, bu yüzden her int eklenirken boxed edilir
  • bArrayList'in sabit maksimum 10.000 eleman kapasitesi vardır ve bunun üzerinde exception fırlatır
  • cArrayList varsayılan olarak thread-safe'tir ve bunun getirdiği kilitleme overhead'i her işlemi yavaşlatır
  • dArrayList, her Add çağrısında elemanları otomatik olarak sıralar
Açıklama:ArrayList tipsizdir ve her şeyi object olarak saklar. Bir int eklemek, her Add'de onu boxed eder (heap allocation + kopya) ve geri okurken unbox eder. List<int> generic'tir ve int'leri arka plandaki bir int[] dizisinde doğrudan inline saklar — hiç boxing yoktur. 100.000 eleman için bu allocation ve GC baskısı farkı önemlidir.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla