30 Soruda Java Geliştirici Mülakatı

Herhangi bir Java geliştiricisine sorabileceğiniz 30 mülakat sorusu

Java, dünyanın en iyi programlama dilleri arasında hüküm süren bir kraldır. Basit, nesne odaklı, platformdan bağımsız, çok iş parçacıklı ve güvenli olan – Android geliştirme için doğal bir seçimden bahsetmeye gerek yok – hem büyük ölçekli işletmelerin (Goldman Sachs, eBay, Google) hem de can atan girişimlerin uzun süredir favorisi olmuştur. zaman içinde test edilmiş bir yığının kararlılığı.

Öyleyse, pazarın Java geliştiricileri tarafından aşırı sular altında kalmasına şaşmamalı – kim bu devasa ve çoğu zaman kazançlı pastadan kendilerine hak iddia etmek istemez ki? Ancak gerçek şu ki, tüm Java mühendisleri eşit derecede kalifiye değildir ve birkaç stratejik soru size bilmeniz gereken her şeyi söyleyebilir.

Sizi başarıya hazırlamak için, yıldız Java geliştiricimiz Artsem Silich, günümüz pazarındaki en iyi yetenekleri seçmenize yardımcı olacak kapsamlı bir rehber hazırlamamıza yardımcı oldu.

1. Java neden %100 nesne yönelimli değil?

Java, nesne olmayan sekiz ilkel veri türü (boolean, byte, char, int, float, double, long ve short) kullandığından% 100 nesne yönelimli değildir.

2. Nesne sınıfının tüm yöntemlerini listeleyin.

Eşittir (), hashCode (), getClass (), notify (), notifyAll (), wait (), clone (), finalize (), toString ()

3. Equals () ve hashCode () arasındaki sözleşme nedir?

Eşittir (Object) yöntemine göre iki nesne eşitse, iki nesnenin her birinde hashcode () yönteminin çağrılması aynı tam sayı sonucunu vermelidir.

4. Aşağıdaki Kullanıcı sınıfı için equals () uygulamasının doğru yolu nedir?

S: genel sınıf Kullanıcı {
özel Dize adı;
özel Doğum tarihi;
özel yurt içi ev numarası;
özel uzun telefon numarası;
// alıcılar ve ayarlayıcılar
}

C: @Override
public boolean equals (Object object) {
// Temel kontroller.
eğer (nesne == bu) doğru döndürür;
eğer (! (Kullanıcının nesnesi)) yanlış döndürür;

// Mülk kontrolleri.
Kullanıcı diğer = (Kullanıcı) nesnesi;
return Objects.equals (ad, diğer.isim)
&& Objects.equals (doğum, diğer.doğum)
&& (ev
numarası == diğer.housenumber) && (telefon numarası == diğer.telefon numarası);
}

5. Eşittir () uygulamasında instanceof yerine getClass () yönteminin kullanımındaki fark nedir?

İnstanceof ve getClass () == … ‘in performansı farklı şeyler yaptıkları için farklıdır. instanceof sol taraftaki (LHS) nesne referansının sağ taraftaki (RHS) tipin bir örneği mi yoksa bazı alt tipler mi olduğunu test ederken getClass () == … türlerin aynı olup olmadığını test eder.

6. Sınıfı nasıl değişmez kılarsınız?

Sınıfı son olarak ilan edin, böylece uzatılamaz. Doğrudan erişime izin verilmemesi için tüm alanları özel yapın. Değişkenler için ayarlayıcı yöntemler sağlamayın. Tüm değiştirilebilir alanları son hale getirin, böylece değeri yalnızca bir kez atanabilir.

7. Java’da Kontrol Edilmiş ve Kontrol Edilmemiş İstisna arasındaki fark nedir?

Kontrol Edilen İstisnalar, try-catch blokları kullanılarak kodda ele alınmalıdır. Veya arayanın yöntemden atılabilecek denetlenen istisnalar hakkında bilgi sahibi olmasını sağlamak için bir anahtar sözcük atan başka bir yöntem kullanabilirsiniz. Kontrolsüz İstisnaların programda ele alınması veya yöntemin atma cümlesinde bunlardan bahsedilmesi gerekmez.

8. Aşağıdaki programla ilgili sorun nedir?

S: genel sınıf TestException {

public static void main (String [] args) {
try {
go ();
} catch (IOException e) {
e.printStackTrace ();
} catch (FileNotFoundException e) {
e.printStackTrace ();
}
}

public static void go (), IOException, FileNotFoundException {

}
} atar

C: FileNotFoundException IOException alt sınıfı olduğundan program derlenmez, bu nedenle FileNotFoundException’ın yakalama bloğu erişilemez ve FileNotFoundException için “Erişilemeyen yakalama bloğu” şeklinde bir hata mesajı alırsınız. Zaten IOException için catch bloğu tarafından işleniyor.”

9. Java’da java.lang.OutOfMemoryError gibi bir hatayı nasıl çözersiniz?

Java’da OutOfMemoryError’ı çözmenin ilk ve kolay yolu, OutOfMemoryError’ınızı hemen çözecek olan JVM seçeneklerini “-Xmx512M” kullanarak maksimum yığın boyutunu artırmaktır.

JVM’nin maksimum yığın boyutunu artırmanın bir örneği, java uygulama dışa aktarmanızda yığın boyutunu ayarlıyorsanız -Xmx – Xms oranını 1: 1 veya 1: 1.5 korumanın daha iyi olduğuna dikkat edin JVM_ARGS = “- Xms1024m -Xmx1024m. “

Java’da OutOfMemoryError’ı çözmenin ikinci yolu oldukça zordur ve çok fazla belleğiniz olmadığında ve maksimum yığın boyutunun artmasından sonra bile java.lang.OutOfMemoryError’ı alıyorsunuz. Bu durumda, muhtemelen uygulamanızın profilini çıkaracak ve bir bellek sızıntısı arayacaksınız.

10. Java Collection Framework için en üst düzey arayüz nedir?

Koleksiyon arayüzü.

11. Koleksiyon arayüzünden genişletilmiş en popüler arayüzleri adlandırın mı?

Queue, Deque, Set, SortedSet ve List.

12. Java’da Queue arayüzünün en popüler uygulaması nedir?

Bağlantılı liste.

13. Liste ve Küme arasındaki fark nedir?

Liste, öğeleri ekleme sırasında tutan sıralı bir koleksiyon türüdür, Set ise öğelerin herhangi bir sırayla tutulmadığı sırasız bir koleksiyon türüdür. Liste yinelemelere izin verirken Set yinelenen öğelere izin vermez.

14. Listenin ortasına sık sık değerler eklemek istersem, hangi uygulama daha performanslı kabul edilmelidir?

LinkedList’te, doğru konuma sahip olduğunuzda, ekleme maliyeti O (1) iken, bir ArrayList’te O (n) değerine kadar gider ve ekleme noktasını geçen tüm öğeler System.arrayCopy () kullanılarak taşınmalıdır. Ancak LinkedList’te, her seferinde baştan sona yineleme maliyetini ödersiniz. Doğal olarak, bu O (n).

Öte yandan, liste ortası eklemenin performans avantajına gerçekten tanık olabilmeniz için listenin oldukça büyük olması gerekir. System.arraycopy, son derece hızlı bir işlemdir ve diğer tarafta, bir LinkedList’e her ekleme, bir düğüm örneğinin tahsis edilmesini gerektirir.

Özetlemek gerekirse, ArrayList% 99 veya daha fazla gerçek durum için daha iyi bir seçimdir ve LinkedList’in dar avantajından yararlanmak büyük özen gerektirir.

15. ArrayList <> içinde hangi System.arraycopy kullanılır?

Java System.arraycopy (), öğeleri kaynak diziden hedef diziye kopyalamak için yerel bir statik yöntemdir. ArrayList’te, öğelerin eklenmesi / silinmesi sırasında öğeleri kaynak konumlarından yenilerine taşımak / kopyalamak için kullanılır.

16. HashSet ile TreeSet arasındaki fark nedir?

Küme, yinelenen öğeler içermeyen genel bir değerler kümesidir. Bir TreeSet, öğelerin sıralandığı bir kümedir. Bir HashSet, öğelerin sıralanmadığı veya sıralanmadığı ve bir TreeSet’ten daha hızlı olduğu bir settir.

17. Bir TreeSet veya HashSet’e boş bir öğe eklenebilir mi?

Add () yönteminde boş denetim yoktur. HashMap bir boş anahtara izin verirken, TreeSet dahili mantık için HashSet ile aynı konsepti kullanır, ancak öğeleri depolamak için NavigableMap kullanır:

özel geçici NavigableMap m;

private static final Object MEVCUT = new Object ();

NavigableMap, null anahtarlara izin vermeyen bir SortedMap alt türü olduğundan, TreeSet ayrıca boş anahtarları desteklemez. TreeSet’e boş bir öğe eklemeye çalışırsanız bir NullPointerException oluşturur.

18. Comparator ve Comparable arayüzlerini ne zaman kullanmalısınız?

Bir nesne, sınıfı sınıflandırmanın açık ve doğal bir yoluysa ve herkes sınıfı bu şekilde sıralayabilirse, Comparable’ı uygulamalıdır. Bununla birlikte, sıralama sınıfın alışılmadık bir kullanımıysa veya sıralama yalnızca belirli bir kullanım durumu için mantıklıysa, Karşılaştırıcı daha iyi bir seçenektir.

19. Hashmap için iyi bir anahtarı nasıl tasarlarsınız?

En önemli kısıtlama, değer nesnesini gelecekte geri getirebilmeniz gerektiğidir. Aksi takdirde böyle bir veri yapısına sahip olmanın bir faydası yoktur. Eğer hashmap’in çalışmasını anlarsanız, büyük ölçüde Anahtar nesnelerin hashCode () ve equals () yöntemine bağlı olduğunu göreceksiniz.

Dolayısıyla, iyi bir anahtar nesnesi, kaç kez getirilirse getirilsin aynı hashCode () öğesini tekrar tekrar sağlamalıdır. Benzer şekilde, aynı anahtarlar equals () yöntemiyle karşılaştırıldığında doğru döndürmelidir ve farklı anahtarlar yanlış döndürmelidir. Bu nedenle, değişmez sınıflar, HashMap anahtarları için en iyi aday olarak kabul edilir.

20. HashMap’teki çarpışmalar nelerdir?

Bir HashMap’teki bir çarpışma veya daha spesifik olarak bir karma kod çarpışması, iki veya daha fazla anahtar nesnenin aynı nihai karma değeri ürettiği ve dolayısıyla aynı kova konumuna veya dizi dizinine işaret ettiği bir durumdur. Bu senaryo, eşittir ve hashCode sözleşmesine göre Java’daki iki eşit olmayan nesnenin aynı karma koda sahip olabileceğinden ortaya çıkabilir. Bu, temeldeki dizinin sınırlı boyutu nedeniyle, yani yeniden boyutlandırmadan önce de olabilir. Bu dizi ne kadar küçükse, çarpışma şansı o kadar yüksek olur.

21. Java’da HashMap ve ConcurrentHashMap arasındaki fark nedir?

1. ConcurrentHashMap iş parçacığı açısından güvenlidir; Bir seferde yalnızca bir iş parçacığı koda erişebilir, oysa HashMap iş parçacığı için güvenli değildir.
2. ConcurrentHashMap anahtarların boş değerler içermesine izin vermezken, HashMap bir boş anahtar içerebilir.

22. Java’da HashMap’te geçiş yapmanın farklı yolları nelerdir?

1.
keySet () ve yineleyici () kullanma 2. entrySet () ve geliştirilmiş döngü
kullanma 3. entrySet () ve iterator ()
kullanma 4. keySet () ve get () yöntemini kullanma

23. HashMap’in performansını nasıl ölçeceksiniz?

Bir HashMap örneğinin performansını etkileyen iki parametresi vardır: yük faktörü ve kapasite.

Yük faktörü, kapasitesi otomatik olarak artırılmadan önce hash tablosunun ne kadar dolu olmasına izin verildiğinin bir ölçüsüdür. Karma tablosundaki giriş sayısı, yük faktörünün ve mevcut kapasitenin çarpımını aştığında, karma tablo yeniden görevlendirilir (yani, dahili veri yapıları yeniden oluşturulur), böylece karma tablo, yaklaşık iki kat daha fazla kova içerir.

Kapasite, hash tablosundaki grupların sayısıdır (HashMap sınıfı, eşitlenmemiş olması ve boş değerlere izin vermesi dışında Hashtable’a kabaca eşdeğerdir) ve başlangıç ​​kapasitesi, hash tablosunun oluşturulduğu andaki kapasitedir.

24. HashMap’te iki anahtar aynı hashCode’a sahipse ne olur?

İki anahtar aynıysa (equals (), bunları karşılaştırdığınızda true değerini döndürürse), hashCode () yöntemi aynı sayıyı döndürmelidir. Anahtarlar bunu ihlal ederse, eşit olan anahtarlar farklı paketlerde saklanabilir ve karma eşleme anahtar / değer çiftlerini bulamayabilir (çünkü aynı gruba bakacaktır).

25. Süreç ve İş Parçacığı arasındaki fark nedir?

Süreç, bağımsız bir yürütme ortamıdır ve bir program veya uygulama olarak görülebilir, oysa Thread, süreç içinde tek bir yürütme görevidir. Java çalışma zamanı ortamı, işlem olarak farklı sınıfları ve programları içeren tek bir işlem olarak çalışır.

Bu arada, İplik hafif bir süreç olarak adlandırılabilir. İş parçacığı oluşturmak için daha az kaynak gerektirir ve süreçte var olur, kaynaklarını paylaşır.26. Java’da geçici anahtar kelime nedir?Cevabı gizle

Değişken ile geçici bir anahtar kelime kullandığımızda, tüm evreler onun değerini doğrudan bellekten okur ve önbelleğe almaz. Bu, okunan değerin bellekteki ile aynı olmasını sağlar.

27. ThreadLocal nedir?

Java ThreadLocal, iş parçacığı yerel değişkenleri oluşturmak için kullanılır. Bir Object’in tüm evrelerinin değişkenlerini paylaştığını biliyoruz, bu nedenle değişken evre güvenli değilse senkronizasyonu kullanabiliriz … ancak senkronizasyondan kaçınmak istiyorsak, ThreadLocal değişkenleri kullanabiliriz.

Her iş parçacığının kendi ThreadLocal değişkeni vardır ve varsayılan değeri almak veya yerel değerini Thread olarak değiştirmek için onun gets () ve set () yöntemlerini kullanabilirler. ThreadLocal örnekleri, durumu bir evre ile ilişkilendirmek isteyen sınıflarda tipik olarak özel statik alanlardır.

28. Kilitlenme nedir? Bir kilitlenme durumunu nasıl analiz eder ve önlersiniz?

Kilitlenme, iki veya daha fazla iş parçacığının sonsuza kadar engellendiği bir programlama durumudur. En az iki iş parçacığı ve iki veya daha fazla kaynakla ortaya çıkar. Bir kilitlenmeyi analiz etmek için, uygulamanın java iş parçacığı dökümüne bakmamız, ardından DURUMDA ENGELLENMİŞ olarak durumdaki iş parçacıklarına ve ardından kilitlenmeyi bekleyen kaynaklara bakmamız gerekir. Her kaynağın, hangi iş parçacığının zaten nesne üzerindeki kilidi tuttuğunu bulmak için kullanabileceğimiz benzersiz bir kimliği vardır. İç İçe Kilitlerden Kaçının, Yalnızca Gerekli Olanları Kilitleyin ve Süresiz Beklemekten Kaçının, kilitlenme durumundan kaçınmanın yaygın yollarıdır.

29. Java’daki JIT derleyicisi nedir?

JIT, Java’da Just-In-Time derleyicisinin kısaltmasıdır. Java bayt kodunu doğrudan işlemciye gönderilen talimatlara dönüştürmeye yardımcı olan bir programdır. Varsayılan olarak, JIT derleyicisi Java’da etkindir ve bir Java yöntemi her çalıştırıldığında etkinleştirilir. JIT derleyicisi daha sonra çağrılan yöntemin bayt kodunu yerel makine koduna derler ve çalıştırmak için “tam zamanında” derler. Yöntem bir kez derlendikten sonra, JVM, bu yöntemin derlenmiş kodunu yorumlamak yerine doğrudan çağırır, bu nedenle Java uygulamalarının çalışma zamanında performans optimizasyonundan genellikle sorumludur.

30. Java’yı bugün yeniden tasarlayabilirseniz, değiştireceğiniz tek şey nedir?

Java ile çalışan herkesin soruya kendi cevabı vardır, bu yüzden ondan geliştiricinin yaratıcılığını ortaya çıkarmasını isteyin!

Dikkatlice incelenen Java mühendisleri, bu güçlü programlama dilinden en iyi şekilde yararlanmanıza ve kullanıcıları çok kısa sürede memnun eden güvenli, iyi test edilmiş bir çözüm oluşturmanıza yardımcı olacaktır.

Ancak Java geliştiricinizin teknik becerilerinin ve bilgisinin bulmacanın yalnızca bir parçası olduğunu unutmayın; onların işbirliği, iletişim ve sağlam bir ekip olarak hareket etme istekleri diğeridir ve eşit derecede değer görmelidir.

Bu makalenin en iyi adayı seçmenize yardımcı olacağını umuyoruz ve ürün hattınızın herhangi bir aşamasında bir kaynak ve danışman olarak hizmet etme fırsatını takdir ediyoruz. İyi şanslar!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.