JAVA MÜLAKAT SORULARI 15

Serdar Arslan
4 min readAug 5, 2022

--

Java Mülakat Soruları yazımızın on beşinci bölümünde iyi okumalar ve mülakatlarda bol şans diliyorum.

68.coupling nedir?

  • Yazılım tasarlanırken sınıflar arası ilişki ile sınıf içi veri kullanımının doğru ve sade bir şekilde yapılmalıdır. Bir yazılım tasarlanırken, yazılımda bulunan her bir sınıfın modüler olması ve tek bir amaca hizmet etmesi gerekir. Bu gereklilikle;
  • Sınıfın modülerliği, sınıf içerisinde yapılacak bir değişikliğin diğer sınıflara olabildiğinde sıçramaması gerektiğidir. Örneğin bir sınıf içerisindeki bir metoda yeni bir parametre eklendiğinde, bu durumunun diğer bir çok sınıfta problem çıkarmaması gerekir. Sınıflar/Nesneler arası ilişki coupling(bağlama) kavramını yansıtır. İyi bir yazılımda coupling düşük(low) tutulmalıdır. Yani nesneler arasındaki ilişki sıkı sıkıya bağlı olmamalıdır.
  • Özetle Coupling(bağlama) kavramı sınıflar-arası düzen olarak değerlendirilir ve bağlılık düşük tutulmaya çalışılır.

69.Cohesion nedir ?

  • Sınıfın sorumluluğunun tek olması, içerisinde bulunan metotların ve üyelerin, birbirinden alakasız olmaması, kullanılan verilerin ortak olmasını gerektirir. Örneğin sınıf içerisinde bulunan bir verinin, yalnızca tek bir metot tarafından kullanılırken, öbürlerinin bunun farkında bile olmaması yanlış bir tutumdur. Öte yandan her bir metodun yaptığı iş aynı amaca hizmet etmelidir. Yapılan işlerin alakasız olması yine yanlış bir tutum olarak görülür. Sınıf içinde verilerin ortak olarak kullanılması ve metotların aynı amaca hizmet etmesi cohesion(yapışma) kavramını yansıtır. İyi bir yazılımda cohesion yüksek(high) tutulmalıdır. Yani sınıf içi metot ve veriler yapışık bir şekilde kullanılmalıdır.
  • cohesion(yapışma) kavramı kısaca sınıf-içi düzen olarak değerlendirilir.

70.Spring de kullanilan temel annotasyonlar nelerdir?

  • @Component : oluşturduğumuz bean’in spring bean olduğunu ve spring container tarafından yönetildiğini belirtir.
  • @Service : Bean’imizin business katmanında çalışacağını belirtmiş oluyoruz.
  • @Repository: Bean’in dao yada percistance sınıfı olduğunu belirtiyoruz.
  • @RestController: RestController aynı zamanda Controller ı da içeren bir interfacedir.Herhangi bir template engine gerek kalmaz.Dönüş tipi KSON nesnesidir.
  • @ResponseBody: response’ları JSON veya XML gibi uygun formata dönüştürülmesini sağlar.
  • @RequestBody :JSON veya XML formatındaki requestleri nesneye dönüştürmek için kullanılır.
  • @RequestMapping :URL’lerin bir sınıf veya metod tarafından map edilmesini sağlar.
  • @Autowired : anotasyonu sayesinde bir bean içerisindeki değerleri başka beanin içerisine enjekte ederek değerlerini koruyarak kullanabiliriz.
  • @Import : classları import etmek için kullanılır.
  • @ImportResource : Xml leri dahil etmek için kullanılır.
  • @Controller : Spring mvc sınıflarında kullanılmaktadır.

71. Java Reflection Nedir, Nasil Kullanilir?

  • Reflection(Yansıma), Java Sanal Makinesinde(Java Virtual Machine, JVM) çalışan uygulamaların, çalışma zamanındaki(runtime) davranışlarını inceleme ve bu davranışlara yön verme imkanı sağlayan bir özelliktir. java.lang.reflect API’ sinde tanımlanan yansıma özelliği, hata ayıklama(debugging) ve test araçlarında, görsel yazılım geliştirme ortamlarında kullanılmaktadır.
  • Java Reflection bir uygulama geliştirme arayüzü olup, o anki Java Sanal Makinesindeki sınıfları, arayüzleri ve nesneleri yansıtan, temsil eden kütüphanedir. Özellikle geliştirme araçları yazarken yansıtma kütüphanesine ihtiyaç duyarız. Yansıtma kütüphanesini kullanarak;
  • Bir nesnenin sınıfını belirleriz
  • Sınıfın sahaları, metodları, yapıcıları, üst sınıfları ve değişkenleri hakkında bilgiler alabiliriz
  • Bir arayüze ait olan sabit ve metod tanımlamalarını tespit ederiz.
  • Çalışma zamanına kadar ismi bilinmeyen bir sınıf örneği yaratabiliriz (Bir bakıma çalışma zamanında yeni sınıflar yaratabilirsiniz)
  • Çalışma zamanına kadar ismi bilinmese de sahaların değerini ayarlar ve alabiliriz.
  • Aynen çalışma zamanına kadar bilinmeyen metodları çalıştırabiliriz.
  • Çalışma zamanına kadar bileşenleri ve boyutu bilinmeyen diziler yaratabilir, daha sonra bu dizinin bileşenlerini değiştirebiliriz.
  • Temel olarak yapmak istediğimiz ilk işlem bir nesnenin hangi sınıfa ait olduğunu bulmaktır. Sınıfı bulduktan sonra bu sınıf yardımıyla yansıtma kütüphanesinin tüm nimetlerinden faydalanabiliriz. Bunu yapmak için nesne.getClass() (Class döndürmektedir) çağrımında bulunuruz. Bu aldığımız Class tipinde nesneyi kullanarak nesnemizin metodlarını listeleyebilir, sahalarını listeleyebilir, istediğimiz sahanın get ve set metodlarını bulup çalıştırabiliriz.

72.Singleton tasarim deseni nedir?

  • SINGLETON, isminden de anlaşılacağı üzere, bir sınıfa ait tek bir instance yaratma ve bu instance’ı global yapmaktır. Mesela yaratmış olduğunuz bir sınıf olsun, bu sınıfın sadece ve sadece bir tane olması gerektiği bir sisteminiz var. Bu durumda SINGLETON kalıbı ile bu koşulu garanti altına almış olursunuz.
  • SINGLETON ayrıca, bu tek olan sınıfa her yerden erişimin sağlandığını da garanti eder.
  • Gercek hayattan örneklememiz gerekirse, bir muhasebe sisteminde, ay sonu hesap kesimini yapan bir sınıf, kredi kartı ile ödeme yapılan bir sistemdeki kredi kartı para çekme işlemini yapan bir sınıf, uçak iniş kalkışlarının ayarlandığı uçuş yönetimini sağlayan sınıf ,veritabanı bağlantılarında kullanılan sınıf, port bağlantılarında kullanılan sınıflar yada dosya işlemleri gibi tek bir nesneye ihtiyaç duyduğumuz sınıflarda bu deseni kullanıyoruz .
  • Singleton Desen Kullanımı

public class SingletonObject

{

// Nesnemizin daha önceden oluşturulmadığını anlayabilmemiz için statik instance özelliği tanımlıyoruz.

private static SingletonObject instance = null;

//Sınıfımızın construct (kurucu) metodunu private yada protected tanımlıyoruz.

private SingletonObject()

{

// oluşturulma sırasında kullanacağımız kodlar

}

// Dışarıdan sınıfımızı çağıracağımız metodumuz.

public static SingletonObject getInstance()

{

// eğer daha önce örnek oluşturulmamış ise sınıfın tek örneğini oluştur.

if(instance == null)

{

instance = new SingletonObject();

}

return instance;

}

}

--

--