top 40 java 8 interview questions answers
Bu Eğitimde, Kod Örnekleri ve Açıklamalarıyla En Önemli Java 8 Görüşme Sorularını ve Cevaplarını sağladık:
Bu eğitimde listelenen tüm önemli sorular Java 8'e özeldir. Java, yeni sürümlerin tanıtımıyla birlikte (zaman içinde) çok gelişti. Her sürümde, Java ile ilişkili yeni özelliklerimiz var. Tüm bu önemli özellikler bu eğitimde ele alınacaktır.
Bunlar, ileri düzey beceriler gerektiren herhangi bir Java röportajında size sorulacak çok yaygın sorulardır. Oracle Certified Associate (OCA) gibi herhangi bir standart Java Sertifikasyon Sınavına katılacaksanız, bu kavramlara sahip olmanız gerekir.
=> Java Yeni Başlayanlar Kılavuzuna Bir Göz Atın.
Bu makale, hem Java Geliştiricileri hem de Java Testçileri / Otomasyon Test Uzmanları veya gelişmiş Java becerileri gerektirdiği için aynı alanda daha yüksek ücret arayan herkes için çok uygun olacaktır.
En Sık Sorulan Java 8 Mülakat Soruları
S # 1) Java 8'de sunulan yeni özellikleri listeleyin?
Cevap: Java 8'de tanıtılan yeni özellikler aşağıda listelenmiştir:
- Lambda İfadeleri
- Yöntem Referansları
- Opsiyonel Sınıf
- Fonksiyonel Arayüz
- Varsayılan yöntemler
- Rhinoceros, JavaScript motoru
- Akış API'si
- Tarih API
S # 2) Fonksiyonel Arayüzler nedir?
Cevap: Fonksiyonel Arayüz, yalnızca bir soyut yöntemi olan bir arayüzdür. Bu arayüzlerin uygulanması bir Lambda İfadesi kullanılarak sağlanır; bu, Lambda İfadesini kullanmak için yeni bir işlevsel arayüz oluşturmanız gerektiği veya önceden tanımlanmış olanı kullanabileceğiniz anlamına gelir. Java 8'in işlevsel arayüzü .
Yeni bir İşlevsel Arayüz oluşturmak için kullanılan açıklama ' @FunctionalInterface ”.
S # 3) İsteğe bağlı sınıf nedir?
Cevap: İsteğe bağlı sınıf, NullPointerExceptions'ı önlemek için kullanılan Java 8'de tanıtılan özel bir sarmalayıcı sınıfıdır. Bu son sınıf java.util paketi altında mevcuttur. NullPointerExceptions, Null kontrollerini gerçekleştiremediğimizde oluşur.
S # 4) Varsayılan yöntemler nelerdir?
Cevap: Varsayılan yöntemler, bir gövdeye sahip olan Arayüzün yöntemleridir. Bu yöntemler, adından da anlaşılacağı gibi, varsayılan anahtar kelimeleri kullanır. Bu varsayılan yöntemlerin kullanımı 'Geriye Dönük Uyumluluk' dur, yani JDK herhangi bir Arabirimi değiştirirse (varsayılan yöntem olmadan) bu Arabirimi uygulayan sınıflar bozulacaktır.
Öte yandan, varsayılan yöntemi bir Arayüze eklerseniz, varsayılan uygulamayı sağlayabilirsiniz. Bu, uygulama sınıflarını etkilemeyecektir.
Sözdizimi:
public interface questions{ default void print() { System.out.println('www.softwaretestinghelp.com'); } }
S # 5) Lambda İşlevinin temel özellikleri nelerdir?
Cevap: Lambda İşlevinin temel özellikleri aşağıdaki gibidir:
- Lambda Expression olarak tanımlanan bir yöntem, başka bir yönteme parametre olarak aktarılabilir.
- Bir yöntem, bir sınıfa ait olmadan bağımsız olarak var olabilir.
- Parametre türünü bildirmeye gerek yoktur çünkü derleyici türü parametrenin değerinden alabilir.
- Birden fazla parametre kullanırken parantez kullanabiliriz ancak tek bir parametre kullandığımızda parantez kullanmamıza gerek yoktur.
- İfade gövdesi tek bir ifadeye sahipse, kaşlı ayraçlar eklemeye gerek yoktur.
S # 6) Eski tarih ve saatin nesi vardı?
Cevap: Aşağıda, eski tarih ve saatin dezavantajları listelenmiştir:
- Java.util.Date değiştirilebilir ve iş parçacığı açısından güvenli değildir, oysa yeni Java 8 Tarih ve Saat API'si iş parçacığı açısından güvenlidir.
- Java 8 Tarih ve Saat API'si ISO standartlarını karşılarken eski tarih ve saat kötü tasarlanmıştı.
- LocalDate, LocalTime, LocalDateTime, vb. Gibi bir tarih için birkaç API sınıfı tanıttı.
- İkisi arasındaki performanstan bahseden Java 8, eski tarih ve saat rejiminden daha hızlı çalışıyor.
S # 7) Collection API ile Stream API arasındaki fark nedir?
Cevap: Stream API ile Collection API arasındaki fark aşağıdaki tablodan anlaşılabilir:
Akış API'si | Koleksiyon API'si |
---|---|
Java 8 Standard Edition sürümünde tanıtıldı. | Java sürüm 1.2'de tanıtıldı |
Yineleyici ve Bölücülerin kullanımı yoktur. | ForEach'in yardımıyla, öğeleri yinelemek ve her öğe veya öğe üzerinde bir eylem gerçekleştirmek için Yineleyici ve Ayırıcıları kullanabiliriz. |
Sonsuz sayıda özellik saklanabilir. | Sayılabilir sayıda öğe saklanabilir. |
Akış nesnesindeki öğelerin tüketimi ve yinelemesi yalnızca bir kez yapılabilir. | Koleksiyon nesnesindeki öğelerin tüketimi ve yinelemesi birden çok kez yapılabilir. |
Verileri hesaplamak için kullanılır. | Verileri saklamak için kullanılır. |
S # 8) Nasıl İşlevsel Arayüz oluşturabilirsiniz?
Cevap: Java bir İşlevsel Arabirimi tanımlayabilse de, açıklama ile bir tane tanımlayabilirsiniz.
@FunctionalInterface
İşlevsel arayüzü tanımladıktan sonra, yalnızca bir soyut yönteme sahip olabilirsiniz. Yalnızca bir soyut yönteme sahip olduğunuz için, birden çok statik yöntem ve varsayılan yöntem yazabilirsiniz.
Aşağıda, iki sayının çarpımı için yazılmış FunctionalInterface programlama örneği bulunmaktadır.
@FunctionalInterface // annotation for functional interface interface FuncInterface { public int multiply(int a, int b); } public class Java8 { public static void main(String args()) { FuncInterface Total = (a, b) -> a * b; // simple operation of multiplication of 'a' and 'b' System.out.println('Result: '+Total.multiply(30, 60)); } }
Çıktı:
S # 9) SAM Arayüzü nedir?
Cevap: Java 8, yalnızca bir soyut yönteme sahip olabilen FunctionalInterface kavramını tanıttı. Bu Arabirimler yalnızca bir soyut yöntem belirttiğinden, bazen SAM Arabirimleri olarak adlandırılırlar. SAM, 'Tek Soyut Yöntem' anlamına gelir.
S # 10) Yöntem Referansı nedir?
Aşağıdakilerden hangisi bir test senaryosunu açıklayan bir koşul değildir?
Cevap: Java 8'de, Yöntem Referansı olarak bilinen yeni bir özellik tanıtıldı. Bu, fonksiyonel arayüz yöntemine atıfta bulunmak için kullanılır. Bir yönteme atıfta bulunulurken Lambda İfadesinin yerini almak için kullanılabilir.
Örneğin: Lambda İfadesi şöyle görünüyorsa
num -> System.out.println(num)
Daha sonra karşılık gelen Yöntem Referansı,
System.out::println
burada “::”, sınıf adını yöntem adından ayıran bir operatördür.
S # 11) Aşağıdaki Sözdizimini açıklayın
String:: Valueof Expression
Cevap: Statik bir yöntem referansıdır. Değeri yöntemi Dize sınıf. System.out :: println, System sınıfının dış nesnesinin println yöntemine statik bir yöntem başvurusudur.
Aktarılan bağımsız değişkenin karşılık gelen dize temsilini döndürür. Bağımsız değişken, Karakter, Tamsayı, Boole vb. Olabilir.
S # 12) Dayanak nedir? Dayanak ve İşlev arasındaki farkı belirtin?
Cevap: Predicate, önceden tanımlanmış bir İşlevsel Arayüzdür. Java.util.function.Predicate paketi altındadır. Aşağıdaki formda olan tek bir argümanı kabul eder,
Dayanak
Dayanak | Fonksiyon |
---|---|
Boolean olarak dönüş tipine sahiptir. | Object olarak dönüş tipine sahiptir. |
Şeklinde yazılmıştır Dayanak tek bir argümanı kabul eden. | Şeklinde yazılmıştır Fonksiyon bu da tek bir argümanı kabul eder. |
Lambda İfadelerini değerlendirmek için kullanılan Fonksiyonel bir Arayüzdür. Bu, bir Yöntem Referansı için bir hedef olarak kullanılabilir. | Ayrıca, Lambda İfadelerini değerlendirmek için kullanılan İşlevsel bir Arayüzdür. Function'da T, girdi türü içindir ve R, sonuç türü içindir. Bu ayrıca bir Lambda İfadesi ve Yöntem Referansı için bir hedef olarak kullanılabilir. |
S # 13) Aşağıdaki kodda bir sorun var mı? Derleyecek mi veya herhangi bir belirli hata verecek mi?
@FunctionalInterface public interface Test { public C apply(A a, B b); default void printString() { System.out.println('softwaretestinghelp'); } }
Cevap: Evet. Kod, yalnızca tek bir soyut yöntemi tanımlayan işlevsel arayüz spesifikasyonunu takip ettiği için derlenecektir. İkinci yöntem olan printString (), soyut bir yöntem olarak sayılmayan varsayılan bir yöntemdir.
S # 14) Stream API nedir? Neden Stream API'ye ihtiyacımız var?
Cevap: Stream API, Java 8'de eklenen yeni bir özelliktir. Koleksiyon gibi bir kaynaktan gelen nesneleri işlemek için kullanılan özel bir sınıftır.
Stream API'ye ihtiyacımız var çünkü,
- İşlemeyi basitleştiren toplu işlemleri destekler.
- Functional-Style programlamayı destekler.
- Daha hızlı işlem yapar. Bu nedenle, daha iyi performans için uygundur.
- Paralel işlemlere izin verir.
S # 15) Limit ve skip arasındaki fark nedir?
Cevap: Limit () yöntemi, belirtilen boyuttaki Akışı döndürmek için kullanılır. Örneğin, Limit (5) 'den bahsettiyseniz, çıktı elemanlarının sayısı 5 olacaktır.
Aşağıdaki örneği ele alalım. Buradaki çıktı, sınır 'altı' olarak ayarlandığı için altı öğe döndürür.
import java.util.stream.Stream; public class Java8 { public static void main(String() args) { Stream.of(0,1,2,3,4,5,6,7,8) .limit(6) /*limit is set to 6, hence it will print the numbers starting from 0 to 5 */ .forEach(num->System.out.print('
'+num)); } }
Çıktı:
Oysa, öğeyi atlamak için skip () yöntemi kullanılır.
Aşağıdaki örneği ele alalım. Çıktıda, elemanlar 6, 7, 8'dir, yani elemanları 6. dizine kadar (1'den başlayarak) atlamıştır.
import java.util.stream.Stream; public class Java8 { public static void main(String() args) { Stream.of(0,1,2,3,4,5,6,7,8) .skip(6) /* It will skip till 6th index. Hence 7th, 8th and 9th index elements will be printed */ .forEach(num->System.out.print('
'+num)); } }
Çıktı:
S # 16) Java 8 Tarih ve Saat API'sini kullanarak güncel tarih ve saati nasıl elde edeceksiniz?
Cevap: Aşağıdaki program Java 8'de tanıtılan yeni API yardımı ile yazılmıştır. Güncel tarih ve saati almak için LocalDate, LocalTime ve LocalDateTime API'yi kullandık.
Birinci ve ikinci print deyiminde, saat dilimi varsayılan olarak ayarlanmış sistem saatinden geçerli tarih ve saati aldık. Üçüncü print deyiminde, hem tarihi hem de saati yazdıracak LocalDateTime API'yi kullandık.
class Java8 { public static void main(String() args) { System.out.println('Current Local Date: ' + java.time.LocalDate.now()); //Used LocalDate API to get the date System.out.println('Current Local Time: ' + java.time.LocalTime.now()); //Used LocalTime API to get the time System.out.println('Current Local Date and Time: ' + java.time.LocalDateTime.now()); //Used LocalDateTime API to get both date and time } }
Çıktı:
S # 17) Java 8'de limit () yönteminin amacı nedir?
Cevap: Stream.limit () yöntemi, öğelerin sınırını belirtir. Sınırda (X) belirttiğiniz boyut, 'X' boyutundaki Akışı döndürür. Bir java.util.stream.Stream yöntemidir.
Sözdizimi:
bittorrent dosyası nasıl açılır
limit(X)
'X' öğenin boyutudur.
S # 18) Java 8'de forEach kullanarak rastgele 5 sayı yazdırmak için bir program yazın?
Cevap: Aşağıdaki program forEach in Java 8 yardımı ile 5 rasgele sayı üretir. Sınır değişkenini, kaç tane rasgele sayı oluşturmak istediğinize bağlı olarak herhangi bir sayıya ayarlayabilirsiniz.
import java.util.Random; class Java8 { public static void main(String() args) { Random random = new Random(); random.ints().limit(5).forEach(System.out::println); /* limit is set to 5 which means only 5 numbers will be printed with the help of terminal operation forEach */ } }
Çıktı:
S # 19) Java 8'de forEach kullanarak sıralı sırayla 5 rastgele sayı yazdırmak için bir program yazın?
Cevap: Aşağıdaki program forEach in Java 8 yardımı ile 5 rasgele sayı üretir. Kaç tane rasgele sayı oluşturmak istediğinize bağlı olarak sınır değişkenini herhangi bir sayıya ayarlayabilirsiniz. Buraya eklemeniz gereken tek şey sıralı () yöntemidir.
import java.util.Random; class Java8 { public static void main(String() args) { Random random = new Random(); random.ints().limit(5).sorted().forEach(System.out::println); /* sorted() method is used to sort the output after terminal operation forEach */ } }
Çıktı:
S # 20) Stream'de Ara ve Terminal Operasyonları arasındaki fark nedir?
Cevap: Tüm Akış işlemleri Terminal veya Orta düzeydedir. Ara İşlemler, o Akış üzerinde diğer bazı işlemlerin gerçekleştirilebilmesi için Akışı geri döndüren işlemlerdir. Ara işlemler, Arama sitesinde Akışı işlemez, bu nedenle bunlara tembel denir.
Bu tür işlemler (Ara İşlemler), gerçekleştirilen bir Terminal işlemi olduğunda verileri işler. Örnekler Ara operasyonlar harita ve filtredir.
Terminal İşlemleri, Akış işlemeyi başlatır. Bu görüşme sırasında Stream tüm Intermediate işlemlerinden geçer. Örnekler Terminal Operasyonunun toplamı, Topla ve Her biri içindir.
Bu programda ilk olarak Ara işlemi Terminal işlemi olmadan gerçekleştirmeye çalışıyoruz. Gördüğünüz gibi ilk kod bloğu çalışmıyor çünkü destekleyen Terminal işlemi yok.
İkinci blok, Terminal işlem sum () nedeniyle başarıyla yürütüldü.
import java.util.Arrays; class Java8 { public static void main(String() args) { System.out.println('Intermediate Operation won't execute'); Arrays.stream(new int() { 0, 1 }).map(i -> { System.out.println(i); return i; // No terminal operation so it won't execute }); System.out.println('Terminal operation starts here'); Arrays.stream(new int() { 0, 1 }).map(i -> { System.out.println(i); return i; // This is followed by terminal operation sum() }).sum(); } }
Çıktı:
S # 21) Bir listede bulunan tüm sayıların toplamını almak için bir Java 8 programı mı yazıyorsunuz?
Cevap: Bu programda, elemanları saklamak için ArrayList'i kullandık. Daha sonra sum () yönteminin yardımıyla ArrayList'de bulunan tüm elemanların toplamını hesapladık. Daha sonra Stream'e dönüştürülür ve mapToInt () ve sum () yöntemleri yardımıyla her bir öğe eklenir.
import java.util.*; class Java8 { public static void main(String() args) { ArrayList list = new ArrayList(); list.add(10); list.add(20); list.add(30); list.add(40); list.add(50); // Added the numbers into Arraylist System.out.println(sum(list)); } public static int sum(ArrayList list) { return list.stream().mapToInt(i -> i).sum(); // Found the total using sum() method after // converting it into Stream } }
Çıktı:
S # 22) Sayılar listesinin karesini almak için bir Java 8 programı yazın ve 100'den büyük sayıları filtreleyin ve sonra kalan sayıların ortalamasını bulun.
Cevap: Bu programda, bir Tamsayılar Dizisi aldık ve bunları bir listede sakladık. Daha sonra mapToInt () yardımıyla, elemanların karesini aldık ve 100'den büyük sayıları filtreledik. Son olarak, kalan sayının (100'den büyük) ortalaması hesaplandı.
import java.util.Arrays; import java.util.List; import java.util.OptionalDouble; public class Java8 { public static void main(String() args) { Integer() arr = new Integer() { 100, 100, 9, 8, 200 }; List list = Arrays.asList(arr); // Stored the array as list OptionalDouble avg = list.stream().mapToInt(n -> n * n).filter(n -> n > 100).average(); /* Converted it into Stream and filtered out the numbers which are greater than 100. Finally calculated the average */ if (avg.isPresent()) System.out.println(avg.getAsDouble()); } }
Çıktı:
S # 23) Akışın findFirst () ve findAny () arasındaki fark nedir?
Cevap: Adından da anlaşılacağı gibi, akıştan ilk öğeyi bulmak için findFirst () yöntemi kullanılırken, akıştaki herhangi bir öğeyi bulmak için findAny () yöntemi kullanılır.
FindFirst () doğası gereği predestinaryizmdir, oysa findAny () deterministik değildir. Programlamada, Belirleyici, çıkışın sistemin girişine veya başlangıç durumuna bağlı olduğu anlamına gelir.
S # 24) Iterator ve Spliterator arasındaki fark nedir?
Cevap: Aşağıda, Iterator ve Spliterator arasındaki farklar bulunmaktadır.
Yineleyici | Ayırıcı |
---|---|
Java sürüm 1.2'de tanıtıldı | Java SE 8'de tanıtıldı |
Koleksiyon API'si için kullanılır. | Stream API için kullanılır. |
Yineleme yöntemlerinden bazıları, öğeleri yinelemek için kullanılan next () ve hasNext () yöntemidir. | Spliterator yöntemi tryAdvance (). |
Collection Object üzerinde iterator () yöntemini çağırmamız gerekiyor. | Stream Object üzerinde spliterator () yöntemini çağırmamız gerekiyor. |
Yalnızca sırayla yinelenir. | Paralel ve sıralı sırayla yineler. |
S # 25) Tüketici İşlevsel Arayüzü nedir?
Cevap: Tüketici İşlevsel Arabirimi aynı zamanda tek bir bağımsız değişken arabirimidir (Öngörü ve İşlev gibi). Java.util.function.Consumer altında gelir. Bu herhangi bir değer döndürmez.
Aşağıdaki programda, String nesnesinin değerini almak için kabul yöntemini kullandık.
import java.util.function.Consumer; public class Java8 { public static void main(String() args) Consumer str = str1 -> System.out.println(str1); str.accept('Saket'); /* We have used accept() method to get the value of the String Object */ } }
Çıktı:
S # 26) Tedarikçi İşlevsel Arayüzü nedir?
Cevap: Tedarikçi İşlevsel Arayüzü, giriş parametrelerini kabul etmez. Java.util.function.Supplier altında gelir. Bu, get yöntemini kullanarak değeri döndürür.
Aşağıdaki programda, String nesnesinin değerini almak için get yöntemini kullandık.
import java.util.function.Supplier; public class Java8 { public static void main(String() args) { Supplier str = () -> 'Saket'; System.out.println(str.get()); /* We have used get() method to retrieve the value of String object str. */ } }
Çıktı:
S # 27) Nashorn Java 8'de nedir?
Cevap: Nashorn Java 8, JavaScript kodunu yürütmek ve değerlendirmek için Java tabanlı bir motordur.
S # 28) Bir Akışın en düşük ve en yüksek sayısını bulmak için bir Java 8 programı mı yazıyorsunuz?
Cevap: Bu programda, bir Akışın en yüksek ve en düşük sayısını elde etmek için min () ve max () yöntemlerini kullandık. Öncelikle Tamsayılara sahip bir Stream'i başlattık ve Comparator.comparing () metodu yardımıyla Stream'in elemanlarını karşılaştırdık.
Bu yöntem max () ve min () ile birleştirildiğinde, size en yüksek ve en düşük sayıları verecektir. Dizeleri karşılaştırırken de çalışacaktır.
import java.util.Comparator; import java.util.stream.*; public class Java8{ public static void main(String args()) { Integer highest = Stream.of(1, 2, 3, 77, 6, 5) .max(Comparator.comparing(Integer::valueOf)) .get(); /* We have used max() method with Comparator.comparing() method to compare and find the highest number */ Integer lowest = Stream.of(1, 2, 3, 77, 6, 5) .min(Comparator.comparing(Integer::valueOf)) .get(); /* We have used max() method with Comparator.comparing() method to compare and find the highest number */ System.out.println('The highest number is: ' + highest); System.out.println('The lowest number is: ' + lowest); } }
Çıktı:
S # 29) Map ve flatMap Stream İşlemi Arasındaki Fark Nedir?
Cevap: Map Stream işlemi, giriş değeri başına bir çıkış değeri verirken, flatMap Stream işlemi, giriş değeri başına sıfır veya daha fazla çıkış değeri verir.
Harita Örneği- Harita Akışı işlemi genellikle Akarsu üzerinde aşağıda bahsedildiği gibi basit işlem için kullanılır.
Bu programda “Adlar” ın karakterlerini bir Akışta depoladıktan sonra harita işlemini kullanarak büyük harfe dönüştürdük ve forEach Terminal işlemi yardımıyla her bir elemanı yazdırdık.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Map { public static void main(String() str) { List Names = Arrays.asList('Saket', 'Trevor', 'Franklin', 'Michael'); List UpperCase = Names.stream().map(String::toUpperCase).collect(Collectors.toList()); // Changed the characters into upper case after converting it into Stream UpperCase.forEach(System.out::println); // Printed using forEach Terminal Operation } }
Çıktı:
flatMap Örneği- flatMap Stream işlemi, daha karmaşık Akış işlemi için kullanılır.
Burada “List of List of String” üzerinde flatMap işlemini gerçekleştirdik. Giriş adlarını liste olarak verdik ve ardından bunları, 'S' ile başlayan adları filtrelediğimiz bir Akışta sakladık.
Son olarak, forEach Terminal operasyonunun yardımıyla, her bir öğeyi yazdırdık.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class flatMap { public static void main(String() str) { List Names = Arrays.asList(Arrays.asList('Saket', 'Trevor'), Arrays.asList('John', 'Michael'), Arrays.asList('Shawn', 'Franklin'), Arrays.asList('Johnty', 'Sean')); /* Created a “List of List of type String” i.e. List Stored names into the list */ List Start = Names.stream().flatMap(FirstName -> FirstName.stream()).filter(s -> s.startsWith('S')) .collect(Collectors.toList()); /* Converted it into Stream and filtered out the names which start with 'S' */ Start.forEach(System.out::println); /* Printed the Start using forEach operation */ } }
Çıktı:
S # 30) Java 8'de MetaSpace nedir?
Cevap: Java 8'de, sınıfları depolamak için yeni bir özellik tanıtıldı. Java 8'de depolanan tüm sınıfların MetaSpace olarak adlandırıldığı alan. MetaSpace, PermGen'in yerini aldı.
Java 7'ye kadar, PermGen sınıfları depolamak için Java Virtual Machine tarafından kullanıldı. MetaSpace dinamik olarak büyüyebildiği ve herhangi bir boyut sınırlaması olmadığı için dinamik olduğundan, Java 8, PermGen'i MetaSpace ile değiştirdi.
S # 31) Java 8 Dahili ve Harici Yineleme arasındaki fark nedir?
Cevap: Dahili ve Harici Yineleme arasındaki fark aşağıda listelenmiştir.
Dahili Yineleme | Dış Yineleme |
---|---|
Java 8'de (JDK-8) tanıtıldı. | Java'nın önceki sürümünde (JDK-7, JDK-6 vb.) Tanıtıldı ve uygulandı. |
Koleksiyon gibi birleştirilmiş nesneler üzerinde dahili olarak yinelenir. | Birleştirilmiş nesneler üzerinde harici olarak yinelenir. |
Fonksiyonel programlama stilini destekler. | OOPS programlama stilini destekler. |
Dahili Yineleyici pasiftir. | Harici Yineleyici etkin. |
Daha az hatalıdır ve daha az kodlama gerektirir. | Biraz daha kodlama gerektirir ve hataya daha açıktır. |
S # 32) JJS nedir?
Cevap: JJS, konsolda JavaScript kodunu yürütmek için kullanılan bir komut satırı aracıdır. Java 8'de JJS, bir JavaScript motoru olan yeni yürütülebilir dosyadır.
S # 33) Java 8'de ChronoUnits nedir?
Cevap: ChronoUnits, eski API'de ayı, günü vb. Temsil etmek için kullanılan Tamsayı değerlerinin yerini almak için sunulan enumdur.
S # 34) Java 8'de StringJoiner Sınıfını açıklar mısınız? StringJoiner Sınıfını kullanarak birden çok Dizeyi birleştirmeyi nasıl başarabiliriz?
Cevap: Java 8'de, StringJoiner olarak bilinen java.util paketinde yeni bir sınıf tanıtıldı. Bu sınıf aracılığıyla, sınırlayıcılarla ayrılmış birden çok dizeyi bunlara önek ve son ek sağlayarak birleştirebiliriz.
Aşağıdaki programda, StringJoiner Sınıfını kullanarak birden çok Dizeyi birleştirme hakkında bilgi edineceğiz. Burada, iki farklı dizge arasında sınırlayıcı olarak ',' var. Daha sonra add () yöntemi ile ekleyerek beş farklı dizgeyi birleştirdik. Son olarak, String Joiner'ı yazdırdı.
Bir sonraki soru # 35'te, dizeye önek ve sonek eklemeyi öğreneceksiniz.
import java.util.StringJoiner; public class Java8 { public static void main(String() args) { StringJoiner stj = new StringJoiner(','); // Separated the elements with a comma in between. stj.add('Saket'); stj.add('John'); stj.add('Franklin'); stj.add('Ricky'); stj.add('Trevor'); // Added elements into StringJoiner “stj” System.out.println(stj); } }
Çıktı:
S # 35) Dizeye önek ve sonek eklemek için bir Java 8 programı yazılsın mı?
Cevap: Bu programda, iki farklı dizge arasında sınırlayıcı olarak ',' var. Ayrıca önek ve sonek olarak “(” ve “)” parantezleri verdik. Daha sonra beş farklı dizge add () yöntemi yardımıyla eklenerek birleştirilir. Son olarak, String Joiner'ı yazdırdı.
import java.util.StringJoiner; public class Java8 { public static void main(String() args) { StringJoiner stj = new StringJoiner(',', '(', ')'); // Separated the elements with a comma in between. //Added a prefix '(' and a suffix ')' stj.add('Saket'); stj.add('John'); stj.add('Franklin'); stj.add('Ricky'); stj.add('Trevor'); // Added elements into StringJoiner “stj” System.out.println(stj); } }
Çıktı:
S # 36) ForEach yöntemini kullanarak bir Akışı yinelemek için bir Java 8 programı mı yazıyorsunuz?
Cevap: Bu programda, 'sayı = 2' den başlayan bir Akışı yineliyoruz, ardından her yinelemeden sonra '1' artan sayma değişkenini takip ediyoruz.
ürünleri şirketler için test etmek istiyorum
Ardından, kalanı sıfır olmayan sayıyı 2 sayısına bölündüğünde filtreliyoruz. Ayrıca limiti? Bu, yalnızca 5 kez yineleneceği anlamına gelir. Son olarak, forEach kullanarak her bir öğeyi yazdırıyoruz.
import java.util.stream.*; public class Java8 { public static void main(String() args){ Stream.iterate(2, count->count+1) // Counter Started from 2, incremented by 1 .filter(number->number%2==0) // Filtered out the numbers whose remainder is zero // when divided by 2 .limit(5) // Limit is set to 5, so only 5 numbers will be printed .forEach(System.out::println); } }
Çıktı:
S # 37) Bir diziyi sıralamak ve ardından sıralanan diziyi Akış'a dönüştürmek için bir Java 8 programı yazın?
Cevap: Bu programda, bir Tamsayılar dizisini sıralamak için paralel sıralamayı kullandık. Sonra sıralanan diziyi Stream'e dönüştürdük ve forEach'in yardımıyla, bir Stream'in her bir öğesini yazdırdık.
import java.util.Arrays; public class Java8 { public static void main(String() args) { int arr() = { 99, 55, 203, 99, 4, 91 }; Arrays.parallelSort(arr); // Sorted the Array using parallelSort() Arrays.stream(arr).forEach(n -> System.out.print(n + ' ')); /* Converted it into Stream and then printed using forEach */ } }
Çıktı:
S # 38) Uzunluğu 5'ten büyük olan bir listedeki Dizelerin sayısını bulmak için bir Java 8 programı yazın?
Cevap: Bu programda add () yöntemi kullanılarak listeye dört String eklenmiş ve daha sonra Stream ve Lambda ifadesi yardımıyla 5'ten büyük uzunluğa sahip olan stringleri saydık.
import java.util.ArrayList; import java.util.List; public class Java8 { public static void main(String() args) { List list = new ArrayList(); list.add('Saket'); list.add('Saurav'); list.add('Softwaretestinghelp'); list.add('Steve'); // Added elements into the List long count = list.stream().filter(str -> str.length() > 5).count(); /* Converted the list into Stream and filtering out the Strings whose length more than 5 and counted the length */ System.out.println('We have ' + count + ' strings with length greater than 5'); } }
Çıktı:
S # 39) İki Akışı birleştirmek için bir Java 8 programı mı yazıyorsunuz?
Cevap: Bu programda, önceden oluşturulmuş iki listeden iki Akış oluşturduk ve ardından iki listenin bağımsız değişken olarak iletildiği bir concat () yöntemini kullanarak bunları birleştirdik. Son olarak, birleştirilmiş akışın öğelerini yazdırdı.
import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Java8 { public static void main(String() args) { List list1 = Arrays.asList('Java', '8'); List list2 = Arrays.asList('explained', 'through', 'programs'); Stream concatStream = Stream.concat(list1.stream(), list2.stream()); // Concatenated the list1 and list2 by converting them into Stream concatStream.forEach(str -> System.out.print(str + ' ')); // Printed the Concatenated Stream } }
Çıktı:
S # 40) Yinelenen öğeleri listeden kaldırmak için bir Java 8 programı yazılsın mı?
Cevap: Bu programda, elemanları bir dizi halinde sakladık ve bir listeye dönüştürdük. Daha sonra 'Collectors.toSet ()' metodu yardımıyla stream'i kullandık ve 'Set' olarak topladık.
import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class Java8 { public static void main(String() args) { Integer() arr1 = new Integer() { 1, 9, 8, 7, 7, 8, 9 }; List listdup = Arrays.asList(arr1); // Converted the Array of type Integer into List Set setNoDups = listdup.stream().collect(Collectors.toSet()); // Converted the List into Stream and collected it to “Set” // Set won't allow any duplicates setNoDups.forEach((i) -> System.out.print(' ' + i)); } }
Çıktı:
Sonuç
Bu makalede, Java 8'de tanıtılan yeni özellikleri anladık. Tüm önemli Java 8 mülakat sorularını ve bunların cevaplarını ayrıntılı olarak ele aldık.
Bu öğreticiyi okuduktan sonra, tarih-saat manipülasyonu için yeni API'ler, Java 8'in yeni özellikleri, yeni Akış API'leri ve konsepte göre uygun programlama örnekleri hakkında bilgi edinmiş olmalısınız. Bu yeni kavramlar veya özellikler, daha zorlu Java Pozisyonlarına hazır olduğunuzda mülakat sürecinin bir parçasıdır.
Herşey gönlünce olsun!!
=> TÜM Java Öğreticilerini Buradan Kontrol Edin.
Önerilen Kaynaklar
- Mülakat Soruları ve Cevapları
- ETL Test Mülakat Soruları ve Cevapları
- Bazı Zor Manuel Test Soruları ve Cevapları
- En İyi 40 C Programlama Mülakat Soruları ve Cevapları
- En Popüler 40 J2EE Mülakat Sorusu ve Okumanız Gereken Cevapları
- Spock Mülakat Soruları ve Cevapları (En Popüler)
- 25 En İyi Çevik Test Mülakat Soruları ve Cevapları
- En İyi 32 Datastage Mülakat Soruları ve Cevapları