Java List ve Set Arasındaki Farklar
- List, elemanları belirli bir sıraya göre ekler. Set sırasızdır. List elemanlarına belirli bir indeks ile ulaşılabilirken set elemanlarında indeksleme olmaz.
- List, aynı elemanın birden fazla eklenmesine izin verirken Set buna izin vermez.
- List, verilere ulaşma konusunda daha iyi performans sunabilir ancak elemanların unique olması kontrol edilmez.
- Elemanların eklenme sırasının korunmasını ve aynı zamanda unique olmasını istiyorsak LinkedHashSet kullanmalıyız.
HashSet ile LinkedHashSet Arasındaki Farklar
- HashSet, elemanları sırasız şekilde saklar ve elemanlar unique olarak eklenir.
- LinkedHashSet elemanları sıralı şekilde saklar ve elemanlar unique olarak eklenir.
- Elemanların eklenme sırasının önemli olduğu ve unique olması gerektiği durumlarda LinkedHashSet kullanılır. Sıranın önemsiz olduğu, elemanlara erişimin (ekleme, görüntüleme) daha hızlı (sırasız oldukları için) olmasının istendiği durumlarda HashSet kullanılır.
Java’da Stack ve Heap farkı
- Java’da bellek yönetimi iki ayrı bölgeye ayrılır. Stack ve heap.
- Stack yerel değişkenler gibi kısa ömürlü veriler için kullanılır.
- Heap daha uzun ömürlü verilerin saklanması için kullanılır. Bir sınıfa ait bir nesne heap’te oluşturulur. Bu nesneyi işaret eden referans stack’te saklanır.
Java’da Unit Test ve Integration Test
- Unit test bir yazılımın bir parçasını, bir method ya da sınıfı daha doğrusu küçük bileşenlerin test edilmesi için kullanılır. Yazılımın her bir parçasının beklendiği gibi çalışıp çalışmadığını kontrol etmek için kullanılır.
public class Hesaplama {
public static int topla(int a, int b) {
return a + b;
}
public static int cikar(int a, int b) {
return a - b;
}
}
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class HesaplamaTestTest {
@Test
public void testTopla() {
assertEquals(5, Hesaplama.topla(2, 3));
}
@Test
public void testCikar() {
assertEquals(2, Hesaplama.cikar(5, 3));
}
}
Integration test ise birden fazla bileşenin biraraya gelerek bir süreci doğru şekilde gerçekleştirdiğini doğrulamak için yapılır. Bir uygulamada önce bir rapor girişi ardından da ilgili yerlerin mail ile bilgilendirilmeleri süreci olsun. Bu sürecin doğru bir şekilde uygulanıp uygulanmadığını görmek için integration test yapılır.
Kafka Stream ve Kafka Topic
- Kafka Topic:
- Kafka’nın temel veri saklama birimidir.
- Kafka Topic, verilerin bir araya toplandığı ve depolandığı bir konsepttir. Veriler, bir veya daha fazla Kafka Topic içinde saklanır.
- Bir Kafka Topic, bir kaynaktan gelen verilerin saklandığı bir veri akışını temsil eder. Her bir Kafka Topic belirli bir konsepte veya veri türüne atanan bir adla tanımlanır.
- Kafka Topic’ler, sürekli olarak yeni veri eklemek ve mevcut verileri okumak için kullanılır. Veriler, genellikle bir süresi olan bir kaynağın (örneğin, bir sensörün) sürekli akışını temsil eder.
- Kafka Stream:
- Kafka Stream, Kafka’nın bir üst düzey API’si olarak düşünülebilir. Kafka’dan gelen verileri işlemek ve analiz etmek için kullanılır.
- Kafka Stream, Kafka Topic’lerden gelen verileri okur, bu veriler üzerinde hesaplamalar yapar ve sonuçları başka Kafka Topic’lerine yazabilir.
- Bu, verilerin gerçek zamanlı olarak işlenmesi ve analiz edilmesi için kullanılır. Özellikle veri işleme, sorgulama, dönüşüm ve akış analizi gibi görevler için kullanışlıdır.
- Kafka Stream, verilerin işlenmesini ve sonuçlarının Kafka Topic’lerine yazılmasını kolaylaştırır. Böylece diğer uygulamalar veya hizmetler bu sonuçlara erişebilir.
Özetle, Kafka Topic, verilerin saklandığı ve kaydedildiği bir yerdir, ve verilerin sürekli akışını temsil eder. Kafka Stream ise Kafka’dan gelen verileri işleyen ve sonuçları yönlendiren bir işleme katmanıdır. Kafka Stream, veri akışlarını analiz etmek ve işlemek için kullanılır.
Spring Singleton Bean – Prototype Bean
Bir bean oluşturulurken hangi scope’ta tutulmalıdır? Spring bean’ler default olarak singleton olarak oluşturulur. Sınıfa ait bir örnek oluşturulur ve uygulama boyunca o kullanılır. Autowired işlemi aynı instance üzerinden gerçekleşir. Kaynak tüketimi daha düşüktür. Bean içinde mutable(değiştirilebilir) değişkenler, durumlar bilinmelidir çünkü yapılan bir değişiklik bean’i kullanan diğer kullanıcıları etkiler. Prototype bean’ler ise her talep edildiklerinde yeni bir instance oluştururlar. ShoppingCart örnek bir kullanım alanıdır. Her bir kullanıcının kendine özel durumu olabilir ve bu prototype bean ile yönetilir. Bir sınıf ve bu sınıfa ait sınıf değişkenleri olsun. Kullanım esnasında bu değişkenlerde değişiklik oluyorsa yani bu bean stateful ise prototype kullanılır, diğer durumlarda singleton kullanılır.
@Component
@Scope("singleton")
public class MySingletonBean {
}
@Configuration
public class AppConfig {
@Bean
@Scope("prototype")
public ShoppingCartService shoppingCartService() {
return new ShoppingCartService();
}
}
Checked / Unchecked Exception
Checked exception compile time’da kontrol edilir. Derleyici yazılımcıya burada bir exception fırlatılabileceğini bildirir ve bunun için try-catch mekanizmasını kurmasını ister. Kurulmazsa derleme sırasında hata alınır. Checked exception’lar Exception sınıfının alt sınıflarıdır (RuntimeException hariç). Exception sınıfı Throwable sınıfından türer.
- ClassNotFoundException
- CloneNotSupportedException
- InterruptedException
- NoSuchMethodException
- SQLException
- IOExceptin ( Bunun altında FileNotFoundException)
Unchecked Exception’lar ise çalışma zamanında kontrol edilirler. RuntimeException sınıfı ve alt sınıflarından oluşur. Derleyici tarafından kontrol edilmez. Yazılımcı bu exceptionlar için try-catch mekanizması kurmak zorunda değildir.
- NullPointerException
- IllegalArgumentException
- ArithmeticException
- ArrayOutOfBoundsException
- NumberFormatException
- IllegalStateException