yoklateknik mülakat

Backend Python Stdlib Http Mülakat Soruları

75 doğrulanmış Backend Python 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

Python Stdlib HttpZorluk 1
from collections import defaultdict

counts = defaultdict(int)
words = ["a", "b", "a", "c", "b", "a"]
for w in words:
    counts[w] += 1

print(dict(counts))

Bu ne yazdırır?
  • a{'a': 3, 'b': 2, 'c': 1}
  • b{'a': 1, 'b': 1, 'c': 1}
  • ccounts["a"]'a ilk erişimde KeyError fırlatır
  • d{'a': 3, 'b': 2, 'c': 1, None: 0}
Açıklama:defaultdict(int), eksik bir key için KeyError fırlatmak yerine int() çağrısının sonucu olan 0'ı sağlar, bu yüzden counts[w] += 1 bir kelime ilk görüldüğünde bile çalışır. None gibi ekstra key'ler asla eklenmez — yalnızca gerçekten erişilen key'ler ortaya çıkar.
Python Stdlib HttpZorluk 2
(kategori, değer) çiftlerinden oluşan bir listeyi, her append'ten önce açık bir "if key not in dict" kontrolü yazmadan, her kategoriyi kendi değer listesine eşleyen bir dict'e gruplaman gerekiyor.
from collections import defaultdict

pairs = [("fruit", "apple"), ("veg", "carrot"), ("fruit", "banana")]
groups = defaultdict(list)
for cat, val in pairs:
    groups[cat].append(val)

defaultdict(list) burada düz bir dict'in yapmayacağı neyi yapar?
  • aDüz bir dict ile aynı davranır; her yeni kategorinin ilk elemanında append yine KeyError fırlatır.
  • bgroups'u çalışan programın herhangi bir yerinde bulunan her kategori adıyla önceden doldurur.
  • cEksik bir key'e ilk erişimde list() çağırıp boş bir liste oluşturur ve onu o key'e bağlar, böylece append hemen çalışır.
  • dgroups oluşturulduğunda zaten mevcut olmayan her kategoriyi sessizce atar.
Açıklama:defaultdict(list), bir key aranıp bulunamadığında __missing__ üzerinden factory'yi (list()) çağırır ve o key'e anında bağlı taze bir boş liste üretir. groups[cat].append(val)'in önceden bir varlık kontrolü olmadan çalışabilmesinin sebebi tam olarak budur — düz bir dict yeni bir kategorinin ilk append'inde KeyError fırlatırdı.
Python Stdlib HttpZorluk 1
from collections import Counter

tally = Counter(["red", "blue", "red", "red", "blue"])
print(tally["red"], tally["green"])

Bu ne yazdırır?
  • a3 None
  • b3 0
  • c"green" hiç sayılmadığı için KeyError fırlatır
  • d2 0
Açıklama:Counter, __getitem__'i eksik key'ler için KeyError fırlatmak yerine 0 döndüren bir dict alt sınıfıdır, bu yüzden tally["green"] hiç eklenmeden 0'dır. "red" kaynak listede 3 kez geçer, dolayısıyla tally["red"] 3'tür.
Python Stdlib HttpZorluk 2
from collections import Counter

tally = Counter({"a": 3, "b": 3, "c": 1})
print(tally.most_common(1))

"a" ve "b" en yüksek sayımda eşit. Sonuçta hangisinin görüneceğini ne belirler?
  • amost_common eşitlikleri her zaman alfabetik olarak çözer, bu yüzden "a"nın önce gelmesi garantidir.
  • bİki sayım eşit olduğunda sıralama belirsiz olacağı için most_common ValueError fırlatır.
  • cPython eşit key'leri her çağrıda rastgele yeniden sıralar, bu yüzden sonuç çalıştırmalar arasında deterministik değildir.
  • dmost_common yalnızca sayıma göre kararlı (stable) bir sıralama yapar, bu yüzden eşitlikler Counter'a ilk eklendikleri göreli sırayı korur.
Açıklama:Counter.most_common() saf olarak sayıma göre kararlı bir sıralama yapar, bu yüzden eşit sayıma sahip elemanlar zaten sahip oldukları göreli sırayı korur (burada dict literal'ından gelen ekleme sırası: önce "a", sonra "b"). Eşitlikleri asla alfabetik ya da rastgele çözmez, eşitlikte asla hata da fırlatmaz.
Python Stdlib HttpZorluk 1
from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(3, 4)
print(p.x, p[1], p.y == p[1])

Bu ne yazdırır?
  • a3 4 False
  • bnamedtuple alanlarına index ile erişilemeyeceği için TypeError fırlatır
  • c3 4 True
  • d4 3 True
Açıklama:Bir namedtuple, isimli erişiciler eklenmiş sıradan bir tuple alt sınıfı olduğu için hem öznitelik erişimini (p.x, p.y) hem de pozisyonel index erişimini (p[0], p[1]) aynı alttaki tuple değerleri için destekler. p.x, 3'tür; p[1], p.y'ye eşit olan 4'tür, bu yüzden eşitlik kontrolü True'dur.
Python Stdlib HttpZorluk 1
from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(3, 4)
p.x = 10

Son satır çalıştığında ne olur?
  • aSessizce başarılı olur, p.x'i 10 yapar, çünkü namedtuple alanları sıradan değiştirilebilir öznitelklerdir.
  • bAttributeError fırlatır, çünkü namedtuple örnekleri altta tuple'dır ve tuple'lar değiştirilemezdir (immutable).
  • cBaşarılı olur, ama yalnızca p.x üzerinden erişilebilen kopya değişir, p[0] değişmez.
  • dPoint ilk tanımlandığında sınıf-tanımlama anında TypeError fırlatır, p.x atandığında değil.
Açıklama:namedtuple, isimli alan erişimi için salt-okunur property'leri olan sıradan bir tuple alt sınıfı üretir; tuple'lar değiştirilemez olduğu için p.x = 10 denemesi AttributeError ("can't set attribute") fırlatır. Güncellenmiş bir örnek elde etmek için p'yi mutasyona uğratmak yerine yeni bir nesne döndüren p._replace(x=10) kullanılmalıdır.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla