CodeBlanks Logo Icon CodeBlanks

Rate limiter

Rate limiter deseni öğrenirsin.

Rate limiter

Bir rate limiter, bir işlemi belirli bir oranda sınırlar. En basit biçimi, bir sayaç ile belli sayıda isteğe izin verir; sonraki istekleri reddeder.

Örnek: class RateLimiter(val max: Int) { var count = 0; fun tryAcquire(): Boolean { if (count >= max) return false; count++; return true } }. tryAcquire her çağrıda sayaç artar; max'a ulaşınca false döner. Bu kalıp, API kotaları ve Flood koruması için kullanılır.

tryAcquire ve sayaç

tryAcquire bir permit ister; sayaç max'tan küçükse true döner ve sayaç artar. Aksi halde false döner; istek reddedilir.

Örnek: val rl = RateLimiter(2). rl.tryAcquire() iki kez true döner; üçüncü çağrıda false verir. Bu kalıp, eşzamanlı olarak paylaşılan bir kaynağı korumak için Mutex ile birleştirilebilir.

Uygulama RateLimiter sınıfını yaz

class RateLimiter(val max: Int) tanımla; var count = 0 ve fun tryAcquire(): Boolean metodu olsun. Metot, count max'tan küçükse true döndürüp count'u artırsın; değilse false döndürsün. main içinde RateLimiter(2) ile üç tryAcquire çağrısının sonuçlarını println ile yazdır.

Başlangıç kodu

Main.kt
// RateLimiter sınıfı: max ve count
// tryAcquire: count<max ise true, değilse false
// main'de üç çağrı sonucunu yazdır

Örnek çözüm

Main.kt
class RateLimiter(val max: Int) {
    var count = 0
    fun tryAcquire(): Boolean {
        if (count >= max) return false
        count++
        return true
    }
}

fun main() {
    val rl = RateLimiter(2)
    println(rl.tryAcquire())
    println(rl.tryAcquire())
    println(rl.tryAcquire())
}

Beklenen çıktı

true
true
false

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir rate limiter'ın temel amacı nedir?

  • İstek sayısını sınırlamak Doğru cevap
  • Veriyi sıkıştırmak
  • Cache'lemek
  • Hızı artırmak

Açıklama: Rate limiter istek sayısını sınırlar.

2 Rate limiter parçalarını eşle

Kavram Anlamı
class RateLimiter Sınıf tanımı
max İzin sınırı
tryAcquire() Permit iste
count >= max Ret koşulu

3 tryAcquire çağrısını tamamla

Soru
val rl = RateLimiter(2)
val ok = rl.____()
Cevap
val rl = RateLimiter(2)
val ok = rl.tryAcquire()

Açıklama: tryAcquire bir permit ister.

İleri seviye bölümündeki tüm dersler