yoklateknik mülakat

Mobil Kt Kotlin Coroutines Flow Mülakat Soruları

75 doğrulanmış Mobil Kt Kotlin Coroutines Flow mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Kt Kotlin Coroutines FlowZorluk 1
Kotlin'de bir fonksiyonu suspend ile işaretlemek gerçekte ne anlama gelir?
  • aFonksiyonun, çağıranı bloklamadan duraklamasına izin verir.
  • bFonksiyonu otomatik olarak bir arka plan thread'inde çalıştırır.
  • cFonksiyonun dönüş değerini nullable yapar.
  • dFonksiyonu diğer koddan önce senkron çalışmaya zorlar.
Açıklama:suspend bir derleyici işaretidir: fonksiyonun başka suspend fonksiyonları çağırmasına ve coroutine altyapısı tarafından duraklatılıp devam ettirilmesine izin verir. Hangi thread'de çalışacağını söylemez — bunu dispatcher belirler.
Kt Kotlin Coroutines FlowZorluk 1
Bir suspend fonksiyon neden doğrudan sıradan (suspend olmayan) koddan çağrılamaz?
  • aÇünkü suspend fonksiyonlar senkron çağrıldığında her zaman exception fırlatır.
  • bÇünkü duraklatma, duraklat/devam mekanizmasını yönetecek bir coroutine bağlamı gerektirir.
  • cÇünkü Kotlin derleyicisi suspend fonksiyonları release build'lerden fiziksel olarak kaldırır.
  • dÇünkü suspend fonksiyonlar sadece object bildirimleri içinde var olabilir.
Açıklama:Bir suspend fonksiyonun gerçekten duraklayıp devam edebilmesi için bir Continuation ve coroutine scope'a ihtiyacı vardır; sıradan kodda böyle bir mekanizma yoktur, bu yüzden derleyici çağıranın bir coroutine builder'ı (launch, runBlocking vb.) ya da başka bir suspend fonksiyon olmasını ister.
Kt Kotlin Coroutines FlowZorluk 2
Coroutine builder'ları olarak launch ile async arasındaki temel fark nedir?
  • alaunch sonuçsuz bir Job döndürür; async await edilebilir bir Deferred<T> döndürür.
  • basync her zaman Dispatchers.IO'da, launch her zaman Dispatchers.Main'de çalışır.
  • claunch sadece runBlocking içinde çağrılabilir, async çağrılamaz.
  • dGerçek bir fark yoktur; aynı fonksiyonun takma adlarıdır.
Açıklama:İkisi de yeni bir coroutine başlatır, ama launch fire-and-forget'tir (Job'u sadece tamamlanma/iptali izler), async ise daha sonra await() ile alacağınız bir değeri hesaplamak içindir.
Kt Kotlin Coroutines FlowZorluk 2
Bir coroutineScope { ... } bloğu içinde, eşzamanlı başlatılmış iki child coroutine'den biri exception fırlatıyor. Kardeş coroutine'e ve scope'a ne olur?
  • aKardeş etkilenmeden tamamlanana kadar çalışmaya devam eder; sadece başarısız olan child'ın sonucu kaybolur.
  • bScope'un parent fonksiyonu dönene kadar hiçbir şey olmaz.
  • ccoroutineScope tüm child exception'larını yakaladığı için exception sessizce yutulur.
  • dKardeş iptal edilir ve exception coroutineScope bloğunun dışına yayılır.
Açıklama:coroutineScope, fail-fast semantiğiyle structured concurrency kullanır: yakalanmamış bir child hatası tüm kardeş child'ları iptal eder ve scope'un kendisinden yeniden fırlatılır. Bu, kardeşlerin izole olduğu supervisorScope'tan farklıdır.
Kt Kotlin Coroutines FlowZorluk 1
Android coroutine'lerinde Dispatchers.Main genel olarak ne için kullanılır?
  • aDisk ya da network I/O işlemlerini çalıştırmak için.
  • bCPU-yoğun arka plan hesaplamasını çalıştırmak için.
  • cUI thread'ine dokunması gereken kodu çalıştırmak için.
  • dAsla iptal edilmemesi gereken kodu çalıştırmak için.
Açıklama:Dispatchers.Main çalışmayı UI (ana) thread'ine sınırlar — herhangi bir View/UI güncellemesi için gereklidir — Dispatchers.IO ve Dispatchers.Default ise sırasıyla bloklayan I/O ve CPU-yoğun iş içindir.
Kt Kotlin Coroutines FlowZorluk 2
Dispatchers.IO, Dispatchers.Default'a göre neden tipik olarak çok daha büyük bir thread pool'u kullanır?
  • aÇünkü I/O görevleri hesaplama görevlerinden daha fazla CPU çekirdeği gerektirir.
  • bÇünkü Dispatchers.IO UI thread'inde çalışır ve bunun için ekstra kapasiteye ihtiyaç duyar.
  • cÇünkü I/O çoğunlukla CPU kullanmak yerine dış kaynakları bekler.
  • dİkisi arasında pool boyutu açısından gerçek bir fark yoktur.
Açıklama:Dispatchers.Default, CPU çekirdek sayısına göre boyutlandırılır (hesaplama-ağırlıklı iş), Dispatchers.IO ise I/O işinin çoğu zamanını CPU tüketmeden beklemekle geçirdiği için çok daha fazla eşzamanlı bloklanmış thread'e izin verir.

2400 soruluk Mobil bankasında kendini sına.

Mülakata başla