Skip to content

Temel Veri Yapıları ve Algoritmalar - Sistem Tasarımı Bağlamı

Veri Yapıları Diyagramı

Veri Yapıları (Üretim Kullanım Senaryoları)

Dizi/List

  • Spring Framework'te dependency injection container
  • @Autowired List<Service> ile birden fazla bean enjeksiyonu
  • Sabit boyutlu ve dinamik diziler
  • Bellek yakınlığı avantajları

Bağlı Liste

  • LRU önbellek uygulaması
  • Mesajlaşma sistemlerinde kuyruk yapıları
  • Spring Cloud Stream mesaj işleme
  • O(1) ekleme/silme

Hash Tablosu/Map

  • Spring önbellek soyutlamaları
  • Thread-safe işlemler için ConcurrentHashMap
  • Redis ile dağıtık önbellekleme
  • Ortalama O(1) arama süresi

Ağaç Yapıları

  • Veritabanlarında B-tree indeksleri
  • Otomatik tamamlama için trie yapıları
  • İş kurallarında karar ağaçları
  • Dengeli ağaçlar ile garanti edilen performans

Grafik Yapıları

  • Spring IoC container'da bağımlılık grafikleri
  • Sosyal ağlar
  • Öneri sistemleri
  • Circuit breaker durum makineleri

Algoritmalar (Gerçek Dünya Uygulamaları)

Arama Algoritmaları

Sıralama Algoritmaları

Önbellekleme Algoritmaları

  • LRU/LFU tahliye politikaları
  • Write-through/write-back stratejileri
  • Dağıtık önbellek tutarlılığı
  • Önbellek değiştirme politikaları

Yük Dengeleme

  • Round-robin algoritması
  • Ağırlıklı round-robin
  • Spring Cloud LoadBalancer'da en az bağlantı algoritmaları
  • Dağıtık sistemler için tutarlı karma

Uzlaşma Algoritmaları

  • Dağıtık sistemlerde Raft
  • Dağıtık uzlaşma için Paxos
  • Mikroservislerde lider seçimi
  • Bizans hata toleransı

Performans Sonuçları

Zaman Karmaşıklığı

  • Önbellek sistemlerinde O(1) hash aramaları
  • Veritabanı indeks aramalarında O(log n)
  • Sıralama işlemlerinde O(n log n)
  • Kaçınılması gereken O(n²) iç içe döngüler

Alan Karmaşıklığı

  • Bellek verimli veri yapıları
  • Çöp toplama (garbage collection) dikkate alınması
  • Heap dışı depolama stratejileri
  • Bellek havuzları ve nesne tekrar kullanımı

Dağıtık Sistemler

  • CAP teoremi dengeleri
  • Sonunda tutarlılık modelleri
  • Bölümlendirme stratejileri
  • Ağ gecikmesi dikkate alınması

Dağıtık Sistem Desenleri

Lider Seçimi

  • ZooKeeper tabanlı lider seçimi
  • Servis koordinasyonu için etcd
  • Özel uygulama desenleri
  • Split-brain önleme

Dağıtık Kilitleme

  • Süreli Redis tabanlı kilitler
  • Tutarlılık için veritabanı kilitleri
  • İyimser ve kötümser kilitleme
  • Deadlock tespiti ve önlenmesi

Sonunda Tutarlılık

  • CRDT'ler (Çakışmasız çoğaltılmış veri tipleri)
  • Nedensellik takibi için vektör saatler
  • Çakışma çözümü için sürüm vektörleri
  • Veri yayılımı için gossip protokolleri

Hata Tespiti

  • Canlılık tespiti için heartbeat mekanizması
  • Hata tespiti için zaman aşımı stratejileri
  • Phi accrual hata dedektörü
  • Uyarlanabilir zaman aşımı algoritmaları

Ölçeklenebilirlik Desenleri

Yatay Ölçekleme

  • Durumsuz servis tasarımı
  • Paylaşımsız mimari
  • Mikroservis ayrıştırması
  • Veritabanı parçalama stratejileri

Dikey Ölçekleme

  • Kaynak optimizasyonu teknikleri
  • JVM ayarları parametreleri
  • Donanım yükseltme stratejileri
  • Performans darboğazı tespiti

Önbellekleme Stratejileri

  • Çok katmanlı önbellek hiyerarşisi
  • Önbellek geçersiz kılma stratejileri
  • Write-through ve write-behind karşılaştırması
  • Önbellek baskını önleme

Veritabanı Ölçekleme

  • Okuma ölçekleme için okuma kopyaları
  • Yazma ölçekleme için parçalama
  • Bölümlendirme stratejileri
  • Parçalar arası sorgu zorlukları

Mesaj Kuyruğu

  • Asenkron işleme desenleri
  • Backpressure yönetimi mekanizmaları
  • Mesaj sıralama garantileri
  • Dead letter queue yönetimi

Algoritma Karmaşıklık Analizi

Yaygın İşlemler

Veri YapısıErişimAramaEklemeSilme
DiziO(1)O(n)O(n)O(n)
Bağlı ListeO(n)O(n)O(1)O(1)
Hash TablosuO(1)O(1)O(1)O(1)
İkili AğaçO(log n)O(log n)O(log n)O(log n)
B-TreeO(log n)O(log n)O(log n)O(log n)

Sıralama Algoritmaları

AlgoritmaEn İyi DurumOrtalama DurumEn Kötü DurumAlan
Quick SortO(n log n)O(n log n)O(n²)O(log n)
Merge SortO(n log n)O(n log n)O(n log n)O(n)
Heap SortO(n log n)O(n log n)O(n log n)O(1)
Tim SortO(n)O(n log n)O(n log n)O(n)

Üretim Ortamı Uygulama Örnekleri

LRU Önbellek Uygulaması

java
@Component
public class LRUCache<K, V> {
    private final int capacity;
    private final Map<K, Node<K, V>> cache;
    private final Node<K, V> head, tail;
    
    public LRUCache(int capacity) {
        this.capacity = capacity;
        this.cache = new ConcurrentHashMap<>();
        this.head = new Node<>();
        this.tail = new Node<>();
        head.next = tail;
        tail.prev = head;
    }
    
    // Implementation details...
}

Yük Dengeleme için Tutarlı Karma

java
@Component
public class ConsistentHashLoadBalancer {
    private final SortedMap<Integer, String> circle = new TreeMap<>();
    private final int virtualNodes = 100;
    
    public void addServer(String server) {
        for (int i = 0; i < virtualNodes; i++) {
            circle.put(hash(server + i), server);
        }
    }
    
    public String getServer(String key) {
        int hash = hash(key);
        SortedMap<Integer, String> tailMap = circle.tailMap(hash);
        return tailMap.isEmpty() ? circle.firstEntry().getValue() : tailMap.firstEntry().getValue();
    }
}

Bellek Yönetimi

JVM Bellek Optimizasyonu

  • Heap boyutu ayarı (-Xmx, -Xms)
  • Çöp toplama algoritması seçimi
  • Büyük veri kümeleri için heap dışı depolama
  • Bellek sızıntısı tespiti ve önlenmesi

Dağıtık Bellek

  • Dağıtık önbellek için Redis kümeleme
  • Bellek içi veri ızgarası için Hazelcast
  • Dağıtık hesaplama için Apache Ignite
  • Tutarlılık ve performans dengesi

Güvenlik Dikkatleri

Algoritma Güvenliği

  • Kriptografik hash fonksiyonları
  • Güvenli rastgele sayı üretimi
  • Zamanlama saldırısı önleme
  • Yan kanal saldırısı azaltma

Veri Yapısı Güvenliği

  • Veri yapıları için giriş doğrulama
  • Dizilerde sınır kontrolü
  • Hash çakışma saldırısı önleme
  • Yerel kodda bellek güvenliği

Eren Demir tarafından oluşturulmuştur.