Java SE 8 Interviewfragen und -antworten (Teil 1)

In diesem Beitrag werden wir einige wichtige Java SE 8 Interviewfragen mit Antworten diskutieren. Ich werde einen weiteren Beitrag verfassen, um die übrigen Java SE 8 Interviewfragen zu besprechen.

Java 8 Interviewfragen

  1. Warum brauchen wir wieder eine Änderung in Java?
  2. Neue Funktionen von Java SE 8?
  3. Vorteile der neuen Funktionen von Java SE 8?
  4. Was ist eine Lambda-Expression?
  5. Was sind die drei Teile einer Lambda-Expression? Welchen Typ hat eine Lambda-Expression?
  6. Was ist ein Funktionales Interface? Was ist ein SAM-Interface?
  7. Ist es möglich, unser eigenes Funktionales Interface zu definieren? Was ist @FunctionalInterface? Welche Regeln gibt es, um ein Funktionales Interface zu definieren?
  8. Ist die @FunctionalInterface-Annotation obligatorisch, um ein Funktionales Interface zu definieren? Was ist der Zweck der @FunctionalInterface-Annotation? Warum benötigen wir Funktionale Interfaces in Java?
  9. Wann verwenden wir die Java 8 Stream-API? Warum müssen wir die Java 8 Stream-API in unseren Projekten verwenden?
  10. Erkläre die Unterschiede zwischen Collection-API und Stream-API?
  11. Was ist ein Spliterator in Java SE 8? Unterschiede zwischen Iterator und Spliterator in Java SE 8?
  12. Was ist Optional in Java 8? Wofür wird Optional verwendet? Vorteile von Java 8 Optional?
  13. Was ist Typinferenz? Ist Typinferenz in älteren Versionen wie Java 7 und vor Java 7 verfügbar oder nur in Java SE 8?

Java 8 Interviewfragen und Antworten

In diesem Abschnitt werden wir jede Frage aus dem vorherigen Abschnitt aufgreifen und mit einer ausführlichen Beschreibung beantworten. Wenn Sie weitere Informationen und Beispiele benötigen, lesen Sie bitte die vorherigen Java SE 8-Beiträge auf JournalDEV.

Warum sollten wir wieder zu Java wechseln?

Oracle Corporation hat in Java SE 8 viele neue Konzepte eingeführt, um folgende Vorteile zu bieten:

  • Um aktuelle Multi-Core CPUs effizient zu nutzen
    In letzter Zeit können wir drastische Veränderungen in der Hardware beobachten. Heutzutage verwenden alle Systeme Multi-Core CPUs (2,4,8,16-Core usw.), um ihre Anwendungen bereitzustellen und auszuführen. Wir benötigen neue Programmierkonstrukte in Java, um diese Multi-Core-Prozessoren effizient zu nutzen, um hochkonkurrierende und hochskalierbare Anwendungen zu entwickeln. Um FP-Funktionen zu nutzen
    Oracle Corporation hat viele FP (Funktionale Programmierung) -Konzepte als Teil von Java SE 8 eingeführt, um die Vorteile von FP zu nutzen.

Neue Funktionen in Java SE 8?

  • Lambda-Ausdrücke
  • Funktionale Schnittstellen
  • Stream-API
  • Datum und Zeit-API
  • Standardmethoden und statische Methoden von Schnittstellen
  • Spliterator
  • Methoden- und Konstruktorreferenzen
  • Verbesserungen der Collections-API
  • Verbesserungen der Concurrency-Utils
  • Verbesserungen des Fork/Join-Frameworks
  • Interne Iteration
  • Parallele Array- und parallele Sammeloperationen
  • Optional
  • Type Annotations und wiederholbare Annotations
  • Reflexion von Methodenparametern
  • Base64-Verschlüsselung und -Entschlüsselung
  • IO- und NIO2-Verbesserungen
  • Nashorn JavaScript Engine
  • javac-Verbesserungen
  • Änderungen an der JVM
  • Java 8 Kompaktprofile: compact1,compact2,compact3
  • JDBC 4.2
  • JAXP 1.6
  • Java DB 10.10
  • Netzwerk
  • Sicherheitsänderungen

Vorteile der neuen Funktionen von Java SE 8?

Von den neuen Funktionen von Java SE 8 können wir folgende Vorteile erzielen:

  • Übersichtlicher und lesbarerer Code
  • Mehr wiederverwendbarer Code
  • Mehr testbarer und wartbarer Code
  • Sehr gleichzeitiger und skalierbarer Code
  • Parallelen Code schreiben
  • Operationen ähnlich einer Datenbank schreiben
  • Bessere Leistungsanwendungen
  • Mehr produktiver Code

Was ist ein Lambda-Ausdruck?

Lambda-Ausdruck ist eine anonyme Funktion, die eine Reihe von Eingabeparametern akzeptiert und Ergebnisse zurückgibt. Ein Lambda-Ausdruck ist ein Codeblock ohne Namen, mit oder ohne Parameter und mit oder ohne Ergebnisse. Dieser Codeblock wird bei Bedarf ausgeführt.

Was sind die drei Teile eines Lambda-Ausdrucks? Welcher Typ von Lambda-Ausdruck ist das?

A Lambda Expression contains 3 parts:

  • Parameterliste
    Ein Lambda-Ausdruck kann null, einen oder mehrere Parameter enthalten. Es ist optional. – Lambda-Pfeiloperator
    „->“ wird als Lambda-Pfeiloperator bezeichnet. Er trennt die Parameterliste und den Körper. – Lambda-Ausdruckskörper

Der Typ von „Journal Dev“ ist java.lang.String. Der Typ von „true“ ist Boolean. In gleicher Weise, was ist der Typ eines Lambda-Ausdrucks? Der Typ eines Lambda-Ausdrucks ist eine Funktionsschnittstelle. Beispiel: – Was ist der Typ des folgenden Lambda-Ausdrucks?

   () -> System.out.println("Hello World");

Dieser Lambda-Ausdruck hat keine Parameter und gibt keine Ergebnisse zurück. Daher ist sein Typ „java.lang.Runnable“ Funktions-Schnittstelle.

Was ist eine Funktions-Schnittstelle? Was ist eine SAM-Schnittstelle?

A Functional Interface is an interface, which contains one and only one abstract method. Functional Interface is also known as SAM Interface because it contains only one abstract method. SAM Interface stands for Single Abstract Method Interface. Java SE 8 API has defined many Functional Interfaces.

Ist es möglich, unsere eigene Funktions-Schnittstelle zu definieren? Was ist @FunctionalInterface? Welche Regeln gelten für die Definition einer Funktions-Schnittstelle?

Ja, es ist möglich, unsere eigenen Funktions-Schnittstellen zu definieren. Wir verwenden die @FunctionalInterface-Annotation von Java SE 8, um eine Schnittstelle als Funktions-Schnittstelle zu kennzeichnen. Wir müssen diese Regeln befolgen, um eine Funktions-Schnittstelle zu definieren:

  • Definieren Sie eine Schnittstelle mit genau einer abstrakten Methode.
  • Es ist nicht möglich, mehr als eine abstrakte Methode zu definieren.
  • Verwenden Sie die @FunctionalInterface-Annotation in der Schnittstellendefinition.
  • Es können beliebig viele andere Methoden wie Standardmethoden, statische Methoden definiert werden.
  • Wenn wir die Methode der Klasse java.lang.Object als abstrakte Methode überschreiben, wird dies nicht als abstrakte Methode gezählt.

Ist @FunctionalInterface-Annotation zwingend erforderlich, um ein Funktionsschnittstellen zu definieren? Wofür wird die @FunctionalInterface-Annotation verwendet? Warum benötigen wir Funktionsschnittstellen in Java?

Es ist nicht zwingend erforderlich, eine Funktionsschnittstelle mit der @FunctionalInterface-Annotation zu definieren. Wenn wir dies nicht möchten, können wir diese Annotation weglassen. Wenn wir sie jedoch in der Definition einer Funktionsschnittstelle verwenden, zwingt uns der Java Compiler dazu, genau eine abstrakte Methode in dieser Schnittstelle zu verwenden. Warum benötigen wir Funktionsschnittstellen? Der Typ eines Lambda-Ausdrucks in Java SE 8 ist eine Funktionsschnittstelle. Überall, wo wir Lambda-Ausdrücke verwenden, verwenden wir Funktionsschnittstellen.

Wann gehen wir zu Java 8 Stream API? Warum sollten wir Java 8 Stream API in unseren Projekten verwenden?

Wenn unser Java-Projekt die folgenden Operationen durchführen möchte, ist es besser, Java 8 Stream API zu verwenden, um viele Vorteile zu erhalten:

  • Wenn wir Datenbankoperationen wie Gruppierung oder Sortierung durchführen möchten.
  • Wenn wir Operationen träge ausführen möchten.
  • Wenn wir in einem funktionalen Stil programmieren möchten.
  • Wenn wir Paralleloperationen durchführen möchten.
  • Wenn wir die interne Iteration verwenden möchten.
  • Wenn wir Pipelining-Operationen durchführen möchten.
  • Wenn wir bessere Leistung erzielen möchten.

Erkläre die Unterschiede zwischen der Collection API und der Stream API?

S.No. Collection API Stream API
1. It’s available since Java 1.2 It is introduced in Java SE 8
2. It is used to store Data (A set of Objects). It is used to compute data (Computation on a set of Objects).
3. We can use both Spliterator and Iterator to iterate elements. We can use forEach to performs an action for each element of this stream. We can’t use Spliterator or Iterator to iterate elements.
4. It is used to store unlimited number of elements. Stream API is used to process on the elements of a Collection.
5. Typically, it uses External Iteration concept to iterate Elements such as Iterator. Stream API uses internal iteration to iterate Elements, using forEach methods.
6. Collection Object is constructed Eagerly. Stream Object is constructed Lazily.
7. We add elements to Collection object only after it is computed completely. We can add elements to Stream Object without any prior computation. That means Stream objects are computed on-demand.
8. We can iterate and consume elements from a Collection Object at any number of times. We can iterate and consume elements from a Stream Object only once.

Was ist ein Spliterator in Java SE 8? Unterschiede zwischen Iterator und Spliterator in Java SE 8?

Spliterator steht für Splitable Iterator und wurde von der Oracle Corporation als Teil von Java SE 8 eingeführt. Wie Iterator und ListIterator gehört er zur Iterator-Schnittstelle.

S.No. Spliterator Iterator
1. It is introduced in Java SE 8. It is available since Java 1.2.
2. Splitable Iterator Non-Splitable Iterator
3. It is used in Stream API. It is used for Collection API.
4. It uses Internal Iteration concept to iterate Streams. It uses External Iteration concept to iterate Collections.
5. We can use Spliterator to iterate Streams in Parallel and Sequential order. We can use Iterator to iterate Collections only in Sequential order.
6. We can get Spliterator by calling spliterator() method on Stream Object. We can get Iterator by calling iterator() method on Collection Object.
7. Important Method: tryAdvance() Important Methods: next(), hasNext()

Was ist Optional in Java 8? Wofür wird Optional verwendet? Vorteile von Java 8 Optional?

Optional: Optional ist eine endgültige Klasse, die als Teil von Java SE 8 eingeführt wurde. Sie ist in dem Paket java.util definiert und dient dazu, optionale Werte darzustellen, die entweder existieren oder nicht existieren. Es kann entweder einen Wert oder keinen Wert enthalten. Wenn es einen Wert enthält, können wir darauf zugreifen. Andernfalls erhalten wir nichts. Es handelt sich um eine begrenzte Sammlung, die heißt, sie enthält höchstens ein Element. Es ist eine Alternative zum „null“-Wert.Hauptvorteil von Optional ist:

  • Es wird verwendet, um Null-Überprüfungen zu vermeiden.
  • Es wird verwendet, um „NullPointerException“ zu vermeiden.

Was ist Typinferenz? Ist Typinferenz auch in älteren Versionen wie Java 7 und vor Java 7 verfügbar oder nur in Java SE 8?

Typinferenz bedeutet, den Typ vom Compiler zur Compile-Zeit bestimmen zu lassen. Es handelt sich nicht um ein neues Feature in Java SE 8. Es ist auch in Java 7 und davor verfügbar. Vor Java 7:- Lassen Sie uns Java-Arrays erkunden. Definieren Sie ein String-Array mit Werten wie unten gezeigt:

String str[] = { "Java 7", "Java 8", "Java 9" };

Hier haben wir einigen String-Werten auf der rechten Seite zugewiesen, aber seinen Typ nicht definiert. Der Java-Compiler erkennt automatisch seinen Typ und erstellt ein String-Array. Java 7: Die Oracle Corporation hat im Java SE 7 die „Diamond Operator“-Funktion eingeführt, um eine unnötige Typdefinition in Generics zu vermeiden.

Map<String,List<Customer>> customerInfoByCity = new HashMap<>();

Hier haben wir keine Typinformationen auf der rechten Seite definiert, sondern einfach den Diamond Operator von Java SE 7 verwendet. Java SE 8: Die Oracle Corporation hat dieses Konzept der Typinferenz in Java SE 8 erheblich verbessert. Wir verwenden dieses Konzept, um Lambda-Ausdrücke, Funktionen, Methodenverweise usw. zu definieren.

ToIntBiFunction<Integer,Integer> add = (a,b) -> a + b;

{
„error“: „Upstream error…“
}

Source:
https://www.digitalocean.com/community/tutorials/javase8-interview-questions-part1