top 50 core java interview questions
Am häufigsten gestellte Fragen und Antworten zu Java-Interviews mit Beispielen:
In diesem Tutorial haben wir mehr als 50 wichtige Fragen zu Java-Kerninterviews für Erstsemester und erfahrene Kandidaten behandelt.
Dieser Beitrag zu JAVA-Interviewfragen soll Ihnen helfen, die grundlegenden Konzepte der Java-Programmierung für Interviewzwecke zu verstehen. Alle wichtigen JAVA-Konzepte werden hier anhand von Beispielen zum leichteren Verständnis erläutert.
Dieses Tutorial behandelt JAVA-Themen wie grundlegende Java-Definitionen, OOP-Konzepte, Zugriffsspezifizierer, Sammlungen, Ausnahmen, Threads, Serialisierung usw. mit Beispielen, damit Sie sich perfekt vorbereiten können sich jedem JAVA-Interview sicher zu stellen.
Die beliebtesten Fragen und Antworten zu Java-Interviews
Im Folgenden finden Sie eine umfassende Liste der wichtigsten und am häufigsten gestellten Fragen zu grundlegenden und fortgeschrittenen Java-Programmierinterviews mit detaillierten Antworten.
F # 1) Was ist JAVA?
Antworten: Java ist eine Programmiersprache auf hoher Ebene und plattformunabhängig.
Java ist eine Sammlung von Objekten. Es wurde von Sun Microsystems entwickelt. Es gibt viele Anwendungen, Websites und Spiele, die mit Java entwickelt wurden.
F # 2) Was sind die Funktionen von JAVA?
Antwort: Die Funktionen von Java sind wie folgt:
- OOP-Konzepte
- Objektorientierter
- Erbe
- Verkapselung
- Polymorphismus
- Abstraktion
- Plattformunabhängig: Ein einzelnes Programm funktioniert auf verschiedenen Plattformen ohne Änderungen.
- Hochleistung: JIT (Just In Time Compiler) ermöglicht eine hohe Leistung in Java. JIT konvertiert den Bytecode in die Maschinensprache und dann startet JVM die Ausführung.
- Multithreading: Ein Ausführungsfluss wird als Thread bezeichnet. JVM erstellt einen Thread, der als Hauptthread bezeichnet wird. Der Benutzer kann mehrere Threads erstellen, indem er die Thread-Klasse erweitert oder die Runnable-Schnittstelle implementiert.
F # 3) Wie ermöglicht Java eine hohe Leistung?
Antworten: Java verwendet den Just In Time-Compiler, um eine hohe Leistung zu ermöglichen. Es wird verwendet, um die Anweisungen in Bytecodes umzuwandeln.
F # 4) Benennen Sie die Java-IDEs?
Antworten: Eclipse und NetBeans sind die IDEs von JAVA.
F # 5) Was meinst du mit Konstruktor?
Antwort: Der Konstruktor kann mit den eingetragenen Punkten ausführlich erklärt werden:
- Wenn ein neues Objekt in einem Programm erstellt wird, wird ein Konstruktor aufgerufen, der der Klasse entspricht.
- Der Konstruktor ist eine Methode, die denselben Namen wie der Klassenname hat.
- Wenn ein Benutzer keinen Konstruktor implizit erstellt, wird ein Standardkonstruktor erstellt.
- Der Konstruktor kann überladen werden.
- Wenn der Benutzer einen Konstruktor mit einem Parameter erstellt hat, sollte er explizit einen anderen Konstruktor ohne Parameter erstellen.
F # 6) Was ist mit der lokalen Variablen und der Instanzvariablen gemeint?
Antworten:
Lokale Variablen werden in der Methode und im Umfang der Variablen definiert, die in der Methode selbst vorhanden sind.
Instanzvariable wird innerhalb der Klasse und außerhalb der Methode definiert, und der Umfang der Variablen ist in der gesamten Klasse vorhanden.
F # 7) Was ist eine Klasse?
Antworten: Alle Java-Codes sind in einer Klasse definiert. Es hat Variablen und Methoden.
Variablen sind Attribute, die den Status einer Klasse definieren.
Methoden sind der Ort, an dem die genaue Geschäftslogik durchgeführt werden muss. Es enthält eine Reihe von Anweisungen (oder Anweisungen), um die jeweilige Anforderung zu erfüllen.
Beispiel:
public class Addition{ //Class name declaration int a = 5; //Variable declaration int b= 5; public void add(){ //Method declaration int c = a+b; } }
F # 8) Was ist ein Objekt?
Antworten: Eine Instanz einer Klasse wird als Objekt bezeichnet. Das Objekt hat Zustand und Verhalten.
Immer wenn die JVM das Schlüsselwort 'new ()' liest, wird eine Instanz dieser Klasse erstellt.
Beispiel:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
Der obige Code erstellt das Objekt für die Addition-Klasse.
F # 9) Was sind die OOPs-Konzepte?
Antwort: OOPs Konzepte umfassen:
- Erbe
- Verkapselung
- Polymorphismus
- Abstraktion
- Schnittstelle
Empfohlene Lektüre = >> Top OOPs Interview Fragen
F # 10) Was ist Vererbung?
Antworten: Vererbung bedeutet, dass eine Klasse auf eine andere Klasse ausgedehnt werden kann. Damit die Codes von einer Klasse zu einer anderen Klasse wiederverwendet werden können. Die vorhandene Klasse wird als Superklasse bezeichnet, während die abgeleitete Klasse als Unterklasse bezeichnet wird.
Beispiel:
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
Die Vererbung gilt nur für die Öffentlichkeit und geschützte Mitglieder. Private Mitglieder können nicht vererbt werden.
F # 11) Was ist Verkapselung?
Antwort: Zweck der Verkapselung:
- Schützt den Code vor anderen.
- Wartbarkeit des Codes.
Beispiel:
Wir deklarieren 'a' als ganzzahlige Variable und es sollte nicht negativ sein.
public class Addition(){ int a=5; }
Wenn jemand die genaue Variable als „ a = -5 ' dann ist es schlecht.
Um das Problem zu lösen, müssen wir die folgenden Schritte ausführen:
- Wir können die Variable privat oder geschützt machen.
- Verwenden Sie öffentliche Zugriffsmethoden wie set and get.
Damit der obige Code wie folgt geändert werden kann:
public class Addition(){ private int a = 5; //Here the variable is marked as private }
Der folgende Code zeigt den Getter und Setter.
Beim Einstellen der Variablen können Bedingungen angegeben werden.
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
Für die Kapselung müssen wir alle Instanzvariablen privat machen und Setter und Getter für diese Variablen erstellen. Dies wiederum zwingt andere dazu, die Setter anzurufen, anstatt direkt auf die Daten zuzugreifen.
F # 12) Was ist Polymorphismus?
Antworten: Polymorphismus bedeutet viele Formen.
Ein einzelnes Objekt kann sich abhängig vom Referenztyp, der als Polymorphismus bezeichnet wird, auf die Oberklasse oder Unterklasse beziehen.
Beispiel:
Public class Manipulation(){ //Super class public void add(){ } } public class Addition extends Manipulation(){ // Sub class public void add(){ } public static void main(String args()){ Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type addition.add(); } }
Unter Verwendung des Manipulationsreferenztyps können wir die Additionsklasse 'add ()' -Methode aufrufen. Diese Fähigkeit ist als Polymorphismus bekannt. Polymorphismus gilt für überschreiben und nicht für Überlastung .
F # 13) Was ist mit Methodenüberschreibung gemeint?
Antwort: Das Überschreiben von Methoden erfolgt, wenn die Unterklassenmethode die folgenden Bedingungen mit der Superklassenmethode erfüllt:
- Der Methodenname sollte identisch sein
- Das Argument sollte das gleiche sein
- Der Rückgabetyp sollte ebenfalls identisch sein
Der Hauptvorteil des Überschreibens besteht darin, dass die Unterklasse einige spezifische Informationen zu diesem Unterklassentyp als die Oberklasse bereitstellen kann.
Beispiel:
public class Manipulation{ //Super class public void add(){ ……………… } } Public class Addition extends Manipulation(){ Public void add(){ ……….. } Public static void main(String args()){ Manipulation addition = new Addition(); //Polimorphism is applied addition.add(); // It calls the Sub class add() method } }
Addition.add () Die Methode ruft die add () -Methode in der Unterklasse und nicht in der übergeordneten Klasse auf. Es überschreibt also die Super-Class-Methode und wird als Method Overriding bezeichnet.
F # 14) Was ist mit Überladen gemeint?
Antworten: Das Überladen von Methoden erfolgt für verschiedene Klassen oder innerhalb derselben Klasse.
Für das Überladen von Methoden sollte die Unterklassenmethode die folgenden Bedingungen mit den Methoden der Superklasse (oder) der Superklasse in derselben Klasse selbst erfüllen:
- Gleicher Methodenname
- Verschiedene Argumenttypen
- Es kann verschiedene Rückgabetypen geben
Beispiel:
public class Manipulation{ //Super class public void add(String name){ //String parameter ……………… } } Public class Addition extends Manipulation(){ Public void add(){//No Parameter ……….. } Public void add(int a){ //integer parameter } Public static void main(String args()){ Addition addition = new Addition(); addition.add(); } }
Hier hat die add () -Methode unterschiedliche Parameter in der Addition-Klasse und wird in derselben Klasse wie bei der Super-Klasse überladen.
Hinweis: Polymorphismus ist bei Methodenüberladung nicht anwendbar.
F # 15) Was ist mit Schnittstelle gemeint?
Antworten: Mehrfachvererbungen können in Java nicht erreicht werden. Um dieses Problem zu lösen, wird das Schnittstellenkonzept eingeführt.
Eine Schnittstelle ist eine Vorlage, die nur Methodendeklarationen und nicht die Methodenimplementierung enthält.
Beispiel:
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
- Alle Methoden in der Schnittstelle sind intern öffentliche abstrakte Leere .
- Alle Variablen in der Schnittstelle sind intern öffentliches statisches Finale das sind Konstanten.
- Klassen können die Schnittstelle implementieren und nicht erweitern.
- Die Klasse, die die Schnittstelle implementiert, sollte eine Implementierung für alle in der Schnittstelle deklarierten Methoden bereitstellen.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface Public void add(){ …………… } Public void subtract(){ ……………. } }
F # 16) Was ist mit Abstract-Klasse gemeint?
Antworten: Wir können die Abstract-Klasse erstellen, indem wir das Schlüsselwort 'Abstract' vor dem Klassennamen verwenden. Eine abstrakte Klasse kann sowohl 'abstrakte' als auch 'nicht abstrakte' Methoden haben, die eine konkrete Klasse sind.
Abstrakte Methode:
Die Methode, die nur die Deklaration und nicht die Implementierung enthält, wird als abstrakte Methode bezeichnet und hat das Schlüsselwort 'abstract'. Deklarationen enden mit einem Semikolon.
Beispiel:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- Eine abstrakte Klasse kann auch eine nicht abstrakte Methode haben.
- Die konkrete Unterklasse, die die Abstract-Klasse erweitert, sollte die Implementierung für abstrakte Methoden bereitstellen.
F # 17) Unterschied zwischen Array und Array-Liste.
Antworten: Der Unterschied zwischen Array und Array-Liste kann der folgenden Tabelle entnommen werden:
Array | Anordnungsliste |
---|---|
Die Größe sollte zum Zeitpunkt der Array-Deklaration angegeben werden. String () name = neuer String (2) | Größe ist möglicherweise nicht erforderlich. Es ändert die Größe dynamisch. ArrayList name = neue ArrayList |
Um ein Objekt in ein Array einzufügen, müssen wir den Index angeben. name (1) = 'Buch' | Kein Index erforderlich. name.add ('Buch') |
Das Array ist nicht typparametriert | ArrayList in Java 5.0 sind parametrisiert. Beispiel: Diese spitze Klammer ist ein Typparameter, der eine Liste von Zeichenfolgen bedeutet. |
F # 18) Unterschied zwischen String, String Builder und String Buffer.
Antworten:
String: String-Variablen werden in einem „konstanten String-Pool“ gespeichert. Sobald die Zeichenfolgenreferenz den alten Wert ändert, der im „konstanten Zeichenfolgenpool“ vorhanden ist, kann er nicht mehr gelöscht werden.
Beispiel:
String name = 'Buch';
Konstanter String-Pool
.
Wenn sich der Namenswert von 'Buch' zu 'Stift' geändert hat.
Konstanter String-Pool
Dann bleibt der ältere Wert im konstanten String-Pool.
String Buffer:
Standard-Gateway nicht verfügbar Windows 10 2019
- Hier werden Zeichenfolgenwerte in einem Stapel gespeichert. Wenn die Werte geändert werden, ersetzt der neue Wert den älteren Wert.
- Der String-Puffer wird synchronisiert, was threadsicher ist.
- Die Leistung ist langsamer als beim String Builder.
Beispiel:
String Buffer name = ”Buch”;
Sobald der Namenswert in 'Stift' geändert wurde, wird das 'Buch' im Stapel gelöscht.
String Builder:
Dies ist dasselbe wie der String-Puffer, mit Ausnahme des String-Generators, der nicht sicher mit einem Thread versehen ist und nicht synchronisiert ist. Die Leistung ist also offensichtlich schnell.
F # 19) Erläutern Sie die öffentlichen und privaten Zugriffsspezifizierer.
Antworten: Methoden und Instanzvariablen werden als Mitglieder bezeichnet.
Öffentlichkeit:
Öffentliche Mitglieder sind sowohl im selben Paket als auch im externen Paket für andere Pakete sichtbar.
Öffentliche Mitglieder der Klasse A sind sowohl für die Klasse B (dasselbe Paket) als auch für die Klasse C (verschiedene Pakete) sichtbar.
Privat:
Private Mitglieder sind nur in derselben Klasse sichtbar und nicht für die anderen Klassen im selben Paket sowie für die Klassen in den externen Paketen.
Private Mitglieder in Klasse A sind nur in dieser Klasse sichtbar. Es ist sowohl für Klasse B als auch für Klasse C unsichtbar.
F # 20) Unterschied zwischen Standard- und geschützten Zugriffsspezifizierern.
Antworten:
Standard: Methoden und Variablen, die in einer Klasse ohne Zugriffsspezifizierer deklariert sind, werden als Standard bezeichnet.
Standardmitglieder in Klasse A sind für die anderen Klassen innerhalb des Pakets sichtbar und für die Klassen außerhalb des Pakets unsichtbar.
Mitglieder der Klasse A sind also für Klasse B sichtbar und für Klasse C unsichtbar.
Geschützt:
.
Geschützt ist dasselbe wie Standard, aber wenn eine Klasse erweitert wird, ist sie auch dann sichtbar, wenn sie sich außerhalb des Pakets befindet.
Mitglieder der Klasse A sind für Klasse B sichtbar, da sie sich im Paket befinden. Für Klasse C ist es unsichtbar, aber wenn Klasse C Klasse A erweitert, sind die Mitglieder für Klasse C sichtbar, auch wenn sie sich außerhalb des Pakets befinden.
F # 21) Unterschied zwischen HashMap und HashTable.
Antworten: Der Unterschied zwischen HashMap und HashTable ist unten zu sehen:
HashMap | Hash-tabelle |
---|---|
Methoden sind nicht synchronisiert | Schlüsselmethoden werden synchronisiert |
Keine Gewindesicherheit | Gewindesicherheit |
Iterator wird verwendet, um die Werte zu iterieren | Enumerator wird verwendet, um die Werte zu iterieren |
Ermöglicht einen Nullschlüssel und mehrere Nullwerte | Erlaubt nichts, was null ist |
Die Leistung ist höher als bei HashTable | Die Leistung ist langsam |
F # 22) Unterschied zwischen HashSet und TreeSet.
Antworten: Der Unterschied zwischen HashSet und TreeSet ist unten zu sehen:
HashSet | TreeSet |
---|---|
Eingefügte Elemente sind in zufälliger Reihenfolge | Pflegt die Elemente in der sortierten Reihenfolge |
Kann Nullobjekte speichern | Nullobjekte konnten nicht gespeichert werden |
Die Leistung ist schnell | Die Leistung ist langsam |
F # 23) Unterschied zwischen abstrakter Klasse und Schnittstelle.
Antwort: Die Unterschiede zwischen Abstract Class und Interface sind wie folgt:
Abstrakte Klasse:
- Abstrakte Klassen haben einen Standardkonstruktor und werden immer dann aufgerufen, wenn die konkrete Unterklasse instanziiert wird.
- Es enthält sowohl abstrakte als auch nicht abstrakte Methoden.
- Die Klasse, die die Abstract-Klasse erweitert, sollte nicht die Implementierung aller Methoden erfordern, sondern nur Abstract-Methoden müssen in der konkreten Unterklasse implementiert werden.
- Die abstrakte Klasse enthält Instanzvariablen.
Schnittstelle:
- Es hat keinen Konstruktor und konnte nicht instanziiert werden.
- Die abstrakte Methode allein sollte deklariert werden.
- Klassen, die die Schnittstelle implementieren, sollten die Implementierung für alle Methoden bereitstellen.
- Die Schnittstelle enthält nur Konstanten.
Q. # 24) Was bedeuten Sammlungen in Java?
Antworten: Collection ist ein Framework, mit dem die Objekte gespeichert und das Design zum Speichern der Objekte bearbeitet werden kann.
Sammlungen werden verwendet, um die folgenden Vorgänge auszuführen:
- Suchen
- Sortierung
- Manipulation
- Einfügen
- Streichung
Eine Gruppe von Objekten wird als Sammlungen bezeichnet. Alle Klassen und Schnittstellen zum Sammeln sind im Java-Util-Paket verfügbar.
F # 25) Welche Klassen und Schnittstellen sind in den Sammlungen verfügbar?
Antworten: Im Folgenden sind die Klassen und Schnittstellen aufgeführt, die in Sammlungen verfügbar sind:
Schnittstellen:
- Sammlung
- Liste
- einstellen
- Karte
- Sortiertes Set
- Sortierte Karte
- Warteschlange
Klassen:
- Listen:
- Anordnungsliste
- Vektor
- Verknüpfte Liste
Sets:
- Hash gesetzt
- Verknüpftes Hash-Set
- Baumsatz
Karten:
- Hash Map
- Hash-tabelle
- Baumkarte
- Verknüpfte Hashed Map
Warteschlange:
- Prioritätswarteschlange
F # 26) Was versteht man unter Bestellt und Sortiert in Sammlungen?
Antworten:
Bestellt: Dies bedeutet, dass die in einer Sammlung gespeicherten Werte auf den Werten basieren, die der Sammlung hinzugefügt werden. So können wir die Werte aus der Sammlung in einer bestimmten Reihenfolge iterieren.
Sortiert: Sortiermechanismen können intern oder extern angewendet werden, sodass die in einer bestimmten Sammlung sortierte Objektgruppe auf den Eigenschaften der Objekte basiert.
F # 27) Erläutern Sie die verschiedenen in der Sammlung verfügbaren Listen.
Antworten: Die der Liste hinzugefügten Werte basieren auf der Indexposition und sind nach Indexposition geordnet. Duplikate sind erlaubt.
Die Arten von Listen sind:
a) Array-Liste:
- Schnelle Iteration und schneller Direktzugriff.
- Es ist eine geordnete Sammlung (nach Index) und nicht sortiert.
- Es implementiert die Direktzugriffsschnittstelle.
Beispiel:
public class Fruits{ public static void main (String ( ) args){ ArrayList names=new ArrayList (); names.add (“apple”); names.add (“cherry”); names.add (“kiwi”); names.add (“banana”); names.add (“cherry”); System.out.println (names); } }
Ausgabe:
(Apfel, Kirsche, Kiwi, Banane, Kirsche)
In der Ausgabe behält Array List die Einfügereihenfolge bei und akzeptiert die Duplikate. Aber es ist nicht sortiert.
b) Vektor:
Es ist dasselbe wie die Array-Liste.
- Vektormethoden werden synchronisiert.
- Gewindesicherheit.
- Es implementiert auch Direktzugriff.
- Die Gewindesicherheit führt normalerweise zu einem Leistungseinbruch.
Beispiel:
public class Fruit { public static void main (String ( ) args){ Vector names = new Vector ( ); names.add (“cherry”); names.add (“apple”); names.add (“banana”); names.add (“kiwi”); names.add (“apple”); System.out.println (“names”); } }
Ausgabe:
(Kirsche, Apfel, Banane, Kiwi, Apfel)
Vector behält auch die Einfügereihenfolge bei und akzeptiert die Duplikate.
c) Verknüpfte Liste:
- Elemente sind doppelt miteinander verbunden.
- Die Leistung ist langsamer als in der Array-Liste.
- Gute Wahl zum Einfügen und Löschen.
- In Java 5.0 werden gängige Warteschlangenmethoden wie peek (), Pool (), Offer () usw. unterstützt.
Beispiel:
public class Fruit { public static void main (String ( ) args){ Linkedlist names = new linkedlist ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Ausgabe:
(Banane, Kirsche, Apfel, Kiwi, Banane)
Behält die Einfügereihenfolge bei und akzeptiert die Duplikate.
F # 28) Erklären Sie Set und ihre Typen in einer Sammlung.
Antworten: Set kümmert sich um die Einzigartigkeit. Duplikate sind nicht zulässig. Hier wird die Methode 'equals ()' verwendet, um zu bestimmen, ob zwei Objekte identisch sind oder nicht.
a) Hash-Set:
- Ungeordnet und unsortiert.
- Verwendet den Hash-Code des Objekts, um die Werte einzufügen.
- Verwenden Sie diese Option, wenn die Anforderung 'Keine Duplikate und keine Sorge um die Bestellung' lautet.
Beispiel:
public class Fruit { public static void main (String( ) args){ HashSet names = new HashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Ausgabe:
(Banane, Kirsche, Kiwi, Apfel)
Es folgt keiner Einfügereihenfolge. Duplikate sind nicht erlaubt.
b) Verknüpfter Hash-Satz:
- Eine geordnete Version des Hash-Sets wird als Linked Hash Set bezeichnet.
- Pflegt eine doppelt verknüpfte Liste aller Elemente.
- Verwenden Sie diese Option, wenn eine Iterationsreihenfolge erforderlich ist.
Beispiel:
public class Fruit { public static void main (String( ) args){ LinkedHashSet; names = new LinkedHashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Ausgabe:
(Banane, Kirsche, Apfel, Kiwi)
Es behält die Einfügereihenfolge bei, in der sie dem Satz hinzugefügt wurden. Duplikate sind nicht erlaubt.
c) Baumsatz:
- Es ist eine der beiden sortierten Sammlungen.
- Verwendet die Baumstruktur „Read-Black“ und garantiert, dass die Elemente in aufsteigender Reihenfolge vorliegen.
- Wir können mit dem Konstruktor einen Baumsatz erstellen, indem wir einen vergleichbaren (oder) Vergleicher verwenden.
Beispiel:
public class Fruits{ public static void main (String( )args) { Treeset names= new TreeSet( ) ; names.add(“cherry”); names.add(“banana”); names.add(“apple”); names.add(“kiwi”); names.add(“cherry”); System.out.println(names); } }
Ausgabe:
(Apfel, Banane, Kirsche, Kiwi)
TreeSet sortiert die Elemente in aufsteigender Reihenfolge. Und Duplikate sind nicht erlaubt.
F # 29) Erklären Sie die Karte und ihre Typen.
Antwort: Karte kümmert sich um die eindeutige Kennung. Wir können einem bestimmten Wert einen eindeutigen Schlüssel zuordnen. Es ist ein Schlüssel / Wert-Paar. Wir können einen Wert basierend auf dem Schlüssel suchen. Wie die Menge verwendet auch die Karte die Methode „equals ()“, um zu bestimmen, ob zwei Schlüssel gleich oder verschieden sind.
Es gibt folgende Arten von Karten:
a) Hash Map:
- Ungeordnete und unsortierte Karte.
- Hashmap ist eine gute Wahl, wenn uns die Bestellung egal ist.
- Es erlaubt einen Nullschlüssel und mehrere Nullwerte.
Beispiel:
Public class Fruit{ Public static void main(String( ) args){ HashMap names =new HashMap( ); names.put(“key1”,“cherry”); names.put (“key2”,“banana”); names.put (“key3”,“apple”); names.put (“key4”,“kiwi”); names.put (“key1”,“cherry”); System.out.println(names); } }
Ausgabe:
{key2 = Banane, key1 = Kirsche, key4 = Kiwi, key3 = Apfel}
Doppelte Schlüssel sind in Map nicht zulässig.
Es wird keine Einfügereihenfolge beibehalten und ist nicht sortiert.
beste kostenlose Backup-Software für Windows 7 64-Bit
b) Hash-Tabelle:
- Wie der Vektorschlüssel werden die Methoden der Klasse synchronisiert.
- Gewindesicherheit und verlangsamt daher die Leistung.
- Es ist nichts zulässig, was null ist.
Beispiel:
public class Fruit{ public static void main(String( )args){ Hashtable names =new Hashtable( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Ausgabe:
{key2 = Apfel, key1 = Kirsche, key4 = Kiwi, key3 = Banane}
Doppelte Schlüssel sind nicht zulässig.
c) Verknüpfte Hash-Karte:
- Behält die Einfügereihenfolge bei.
- Langsamer als die Hash-Karte.
- Ich kann eine schnellere Iteration erwarten.
Beispiel:
public class Fruit{ public static void main(String( ) args){ LinkedHashMap names =new LinkedHashMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Ausgabe:
{key2 = Apfel, key1 = Kirsche, key4 = Kiwi, key3 = Banane}
Doppelte Schlüssel sind nicht zulässig.
d) TreeMap:
- Sortierte Karte.
- Wie bei Tree Set können wir mit dem Konstruktor eine Sortierreihenfolge erstellen.
Beispiel:
public class Fruit{ public static void main(String( )args){ TreeMap names =new TreeMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“banana”); names.put(“key3”,“apple”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Ausgabe:
{key1 = Kirsche, key2 = Banane, key3 = Apfel, key4 = Kiwi}
Es wird in aufsteigender Reihenfolge nach dem Schlüssel sortiert. Doppelte Schlüssel sind nicht zulässig.
F # 30) Erläutern Sie die Prioritätswarteschlange.
Antwort: Warteschlangenschnittstelle
Prioritätswarteschlange: Die verknüpfte Listenklasse wurde erweitert, um die Warteschlangenschnittstelle zu implementieren. Warteschlangen können mit einer verknüpften Liste behandelt werden. Der Zweck einer Warteschlange ist 'Priority-In, Priority-Out'.
Daher sind die Elemente entweder natürlich oder nach dem Komparator geordnet. Die Reihenfolge der Elemente repräsentiert ihre relative Priorität.
F # 31) Was ist mit Ausnahme gemeint?
Antworten: Eine Ausnahme ist ein Problem, das während des normalen Ausführungsflusses auftreten kann. Eine Methode kann eine Ausnahme auslösen, wenn zur Laufzeit etwas klagt. Wenn diese Ausnahme nicht behandelt werden konnte, wird die Ausführung beendet, bevor die Aufgabe abgeschlossen ist.
Wenn wir die Ausnahme behandelt haben, wird der normale Fluss fortgesetzt. Ausnahmen sind eine Unterklasse von java.lang.Exception.
Beispiel für den Umgang mit Ausnahme:
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
F # 32) Welche Arten von Ausnahmen gibt es?
Antworten: Es gibt zwei Arten von Ausnahmen. Sie werden nachstehend ausführlich erläutert.
a) Überprüfte Ausnahme:
Diese Ausnahmen werden vom Compiler zum Zeitpunkt der Kompilierung überprüft. Klassen, die die Throwable-Klasse mit Ausnahme der Laufzeitausnahme und des Fehlers erweitern, werden als überprüfte Ausnahme bezeichnet.
Überprüfte Ausnahmen müssen entweder die Ausnahme mit dem Schlüsselwort throw (oder) deklarieren, das von einem geeigneten try / catch umgeben ist.
Zum Beispiel, ClassNotFound-Ausnahme
b) Deaktivierte Ausnahme:
Diese Ausnahmen werden während der Kompilierungszeit vom Compiler nicht überprüft. Der Compiler erzwingt keine Behandlung dieser Ausnahmen. Es enthält:
- Arithmetische Ausnahme
- ArrayIndexOutOfBounds-Ausnahme
F # 33) Wie kann mit Ausnahmen umgegangen werden?
Antworten: Im Folgenden werden zwei verschiedene Möglichkeiten zum Behandeln von Ausnahmen erläutert:
a) Verwenden von try / catch:
Der riskante Code ist von einem Try-Block umgeben. Wenn eine Ausnahme auftritt, wird sie vom catch-Block abgefangen, gefolgt vom try-Block.
Beispiel:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
b) Durch Deklarieren des Schlüsselworts throw:
Am Ende der Methode können wir die Ausnahme mit dem Schlüsselwort throw deklarieren.
Beispiel:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
F # 34) Was sind die Vorteile der Ausnahmebehandlung?
Antwort: Die Vorteile sind wie folgt:
- Der normale Ablauf der Ausführung wird nicht beendet, wenn eine Ausnahme behandelt wird
- Wir können das Problem anhand der Fangdeklaration identifizieren
F # 35) Was sind die Schlüsselwörter für die Ausnahmebehandlung in Java?
Antwort: Nachfolgend sind die beiden Schlüsselwörter für die Ausnahmebehandlung aufgeführt:
ein Versuch:
Wenn ein riskanter Code von einem Try-Block umgeben ist. Eine im try-Block auftretende Ausnahme wird von einem catch-Block abgefangen. Auf den Versuch kann entweder catch (oder) finally (oder) beides folgen. Aber jeder der Blöcke ist obligatorisch.
b) fangen:
Darauf folgt ein try-Block. Ausnahmen werden hier gefangen.
c) endlich:
Darauf folgt entweder try block (oder) catch block. Dieser Block wird unabhängig von einer Ausnahme ausgeführt. Daher werden hier im Allgemeinen Bereinigungscodes bereitgestellt.
F # 36) Erklären Sie die Ausbreitung von Ausnahmen.
Antworten: Eine Ausnahme wird zuerst von der Methode ausgelöst, die sich oben im Stapel befindet. Wenn es nicht abfängt, öffnet es die Methode und wechselt zur vorherigen Methode usw., bis sie erhalten sind.
Dies wird als Ausnahmeverbreitung bezeichnet.
Beispiel:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
Im obigen Beispiel sieht der Stapel wie folgt aus:
Wenn eine Ausnahme in der auftritt Zusatz() Methode wird nicht abgefangen, dann wechselt sie zur Methode hinzufügen() . Dann wird es in die verschoben Main() Methode und dann wird der Ausführungsfluss gestoppt. Es heißt Exception Propagation.
F # 37) Was ist das letzte Schlüsselwort in Java?
Antworten:
Variable Endung: Sobald eine Variable als endgültig deklariert wurde, konnte der Wert der Variablen nicht mehr geändert werden. Es ist wie eine Konstante.
Beispiel:
final int = 12;
Endgültige Methode: Ein letztes Schlüsselwort in einer Methode konnte nicht überschrieben werden. Wenn eine Methode als endgültig markiert ist, kann sie von der Unterklasse nicht überschrieben werden.
Abschlussklasse: Wenn eine Klasse als endgültig deklariert ist, kann die Klasse nicht in Unterklassen unterteilt werden. Keine Klasse kann die letzte Klasse erweitern.
F # 38) Was ist ein Thread?
Antworten: In Java heißt der Ausführungsfluss Thread. Jedes Java-Programm hat mindestens einen Thread, der als Hauptthread bezeichnet wird. Der Hauptthread wird von JVM erstellt. Der Benutzer kann seine eigenen Threads definieren, indem er die Thread-Klasse (oder) durch Implementieren der Runnable-Schnittstelle erweitert. Threads werden gleichzeitig ausgeführt.
Beispiel:
public static void main(String() args){//main thread starts here }
F # 39) Wie erstellt man einen Thread in Java?
Antworten: Es gibt zwei Möglichkeiten, einen Thread zu erstellen.
a) Thread-Klasse erweitern: Erweitern einer Thread-Klasse und Überschreiben der Ausführungsmethode. Der Thread ist in java.lang.thread verfügbar.
Beispiel:
Public class Addition extends Thread { public void run () { } }
Der Nachteil der Verwendung einer Thread-Klasse besteht darin, dass wir keine anderen Klassen erweitern können, da wir die Thread-Klasse bereits erweitert haben. Wir können die run () -Methode in unserer Klasse überladen.
b) Führen Sie die Runnable-Schnittstelle aus: Eine andere Möglichkeit besteht darin, die ausführbare Schnittstelle zu implementieren. Dazu sollten wir die Implementierung für die run () -Methode bereitstellen, die in der Schnittstelle definiert ist.
Beispiel:
Public class Addition implements Runnable { public void run () { } }
F # 40) Erklären Sie die Methode join ().
Antworten: Die Join () -Methode wird verwendet, um einen Thread mit dem Ende des aktuell ausgeführten Threads zu verbinden.
Beispiel:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
Basierend auf dem obigen Code hat der Hauptthread die Ausführung gestartet. Wenn es den Code erreicht t.start () dann startet 'thread t' den eigenen Stapel für die Ausführung. JVM wechselt zwischen dem Haupt-Thread und 'Thread t'.
Sobald es den Code erreicht t.join () dann wird 'thread t' alleine ausgeführt und beendet seine Aufgabe, dann startet nur der Hauptthread die Ausführung.
Es ist eine nicht statische Methode. Die Join () -Methode hat eine überladene Version. Daher können wir die Zeitdauer in der join () -Methode auch als '.s' bezeichnen.
F # 41) Was macht die Ertragsmethode der Thread-Klasse?
Antworten: Eine Yield () -Methode versetzt den aktuell ausgeführten Thread in einen ausführbaren Zustand und ermöglicht die Ausführung der anderen Threads. Damit Threads mit gleicher Priorität ausgeführt werden können. Es ist eine statische Methode. Es wird keine Sperre aufgehoben.
Die Yield () -Methode versetzt den Thread nur in den Status 'Runnable' und nicht in den Block 'sleep to) (wait () (or)'.
Beispiel:
public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ Thread.yield(); } }
F # 42) Erklären Sie die wait () -Methode.
Antwort: warte () Methode wird verwendet, um den Thread dazu zu bringen, im Wartepool zu warten. Wenn die wait () -Methode während einer Thread-Ausführung ausgeführt wird, gibt der Thread sofort die Sperre für das Objekt auf und geht zum Wartepool. Die Methode Wait () weist den Thread an, eine bestimmte Zeit zu warten.
Dann wird der Thread aktiviert, nachdem die Methode notify () (oder) notify all () aufgerufen wurde.
Wait () und die anderen oben genannten Methoden sperren das Objekt nicht sofort, bis der aktuell ausgeführte Thread den synchronisierten Code vervollständigt. Es wird hauptsächlich bei der Synchronisation verwendet.
Beispiel:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
F # 43) Unterschied zwischen der notify () -Methode und der notifyAll () -Methode in Java.
Antwort: Die Unterschiede zwischen der notify () -Methode und der notifyAll () -Methode sind nachstehend aufgeführt:
benachrichtigen() | notifyAll () |
---|---|
Diese Methode wird verwendet, um ein Signal zum Aufwecken eines einzelnen Threads im Wartepool zu senden. | Diese Methode sendet das Signal, um alle Threads in einer wartenden Spool aufzuwecken. |
F # 44) Wie stoppe ich einen Thread in Java? Erklären Sie die sleep () -Methode in einem Thread?
Antworten: Wir können einen Thread mithilfe der folgenden Thread-Methoden stoppen:
- Schlafen
- Warten
- verstopft
Schlaf: Die Sleep () -Methode wird verwendet, um den aktuell ausgeführten Thread für die angegebene Zeitspanne in den Ruhezustand zu versetzen. Sobald der Thread aufgeweckt ist, kann er in den ausführbaren Zustand versetzt werden. Daher wird die sleep () -Methode verwendet, um die Ausführung für einige Zeit zu verzögern.
Es ist eine statische Methode.
Beispiel:
Faden. Schlaf (2000)
Der Thread wird also um 2 Millisekunden in den Ruhezustand versetzt. Die Sleep () -Methode löst eine ununterbrochene Ausnahme aus, daher müssen wir den Block mit try / catch umgeben.
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
F # 45) Wann wird die Runnable-Schnittstelle Vs Thread-Klasse in Java verwendet?
Antworten: Wenn unsere Klasse andere Klassen als den Thread erweitern soll, können wir mit der ausführbaren Schnittstelle arbeiten, da wir in Java nur eine Klasse erweitern können.
Wenn wir keine Klasse erweitern wollen, können wir die Thread-Klasse erweitern.
F # 46) Unterschied zwischen start () und run () der Thread-Klasse.
Antworten: Die Methode Start () erstellt einen neuen Thread und der Code in der Methode run () wird im neuen Thread ausgeführt. Wenn wir die run () -Methode direkt aufgerufen haben, wird kein neuer Thread erstellt und der aktuell ausgeführte Thread führt die run () -Methode weiter aus.
F # 47) Was ist Multithreading?
Antworten: Es werden mehrere Threads gleichzeitig ausgeführt. Jeder Thread startet seinen eigenen Stapel basierend auf der Fluss- (oder) Priorität der Threads.
Beispielprogramm:
public class MultipleThreads implements Runnable { public static void main (String() args){//Main thread starts here Runnable r = new runnable (); Thread t=new thread (); t.start ();//User thread starts here Addition add=new addition (); } public void run(){ go(); }//User thread ends here }
Bei der Ausführung in der ersten Zeile ruft JVM die Hauptmethode auf und der Hauptthreadstapel sieht wie unten gezeigt aus.
Sobald die Ausführung erreicht ist, t.start () Zeile wird dann ein neuer Thread erstellt und der neue Stapel für den Thread wird ebenfalls erstellt. Jetzt wechselt JVM zum neuen Thread und der Hauptthread befindet sich wieder im ausführbaren Zustand.
Die beiden Stapel sehen wie unten gezeigt aus.
Jetzt hat der Benutzer-Thread den Code innerhalb der run () -Methode ausgeführt.
Sobald die run () -Methode abgeschlossen ist, wechselt JVM zurück zum Hauptthread und der Benutzerthread hat die Aufgabe abgeschlossen und der Stapel ist verschwunden.
JVM wechselt zwischen den einzelnen Threads, bis beide Threads abgeschlossen sind. Dies wird als Multithreading bezeichnet.
F # 48) Erläutern Sie den Thread-Lebenszyklus in Java.
Antworten: Thread hat die folgenden Zustände:
- Neu
- Runnable
- Laufen
- Nicht lauffähig (blockiert)
- Beendet
- Neu: Im Status Neu wurde eine Thread-Instanz erstellt, die Methode start () wurde jedoch noch nicht aufgerufen. Jetzt wird der Thread nicht als lebendig betrachtet.
- Runnable : Der Thread befindet sich nach dem Aufruf der start () -Methode im ausführbaren Zustand, jedoch bevor die run () -Methode aufgerufen wird. Ein Thread kann aber auch vom Warten / Schlafen in den ausführbaren Zustand zurückkehren. In diesem Zustand wird der Thread als lebendig betrachtet.
- Laufen : Der Thread befindet sich in einem laufenden Zustand, nachdem er die run () -Methode aufgerufen hat. Nun beginnt der Thread mit der Ausführung.
- Nicht lauffähig (Blockiert): Der Thread ist aktiv, kann jedoch nicht ausgeführt werden. Es befindet sich nicht im ausführbaren Zustand, kehrt jedoch nach einiger Zeit in den ausführbaren Zustand zurück. Beispiel: warten, schlafen, blockieren.
- Beendet : Sobald die Ausführungsmethode abgeschlossen ist, wird sie beendet. Jetzt lebt der Thread nicht mehr.
F # 49) Was ist Synchronisation?
Antworten: Durch die Synchronisierung kann jeweils nur ein Thread auf einen Codeblock zugreifen. Wenn mehrere Threads auf den Codeblock zugreifen, besteht am Ende die Möglichkeit ungenauer Ergebnisse. Um dieses Problem zu vermeiden, können wir eine Synchronisierung für den vertraulichen Codeblock bereitstellen.
Das synchronisierte Schlüsselwort bedeutet, dass ein Thread einen Schlüssel benötigt, um auf den synchronisierten Code zugreifen zu können.
Schlösser sind pro Objekt. Jedes Java-Objekt hat eine Sperre. Ein Schloss hat nur einen Schlüssel. Ein Thread kann nur dann auf eine synchronisierte Methode zugreifen, wenn der Thread den Schlüssel zu den zu sperrenden Objekten erhalten kann.
Dazu verwenden wir das Schlüsselwort 'Synchronized'.
Beispiel:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
F # 50) Was ist der Nachteil der Synchronisation?
Jahre: Die Synchronisierung wird nicht empfohlen, um alle Methoden zu implementieren. Denn wenn ein Thread auf den synchronisierten Code zugreift, sollte der nächste Thread warten müssen. Es macht also eine langsame Leistung am anderen Ende.
F # 51) Was ist mit Serialisierung gemeint?
Antworten: Das Konvertieren einer Datei in einen Bytestream wird als Serialisierung bezeichnet. Die Objekte in der Datei werden aus Sicherheitsgründen in Bytes konvertiert. Dazu müssen wir eine java.io.Serializable-Schnittstelle implementieren. Es gibt keine Methode zum Definieren.
Variablen, die als vorübergehend markiert sind, sind nicht Teil der Serialisierung. Daher können wir die Serialisierung für die Variablen in der Datei mithilfe eines vorübergehenden Schlüsselworts überspringen.
Erfahren Sie mehr = >> Serialisierbar und klonbar
F # 52) Was ist der Zweck einer transienten Variablen?
Antworten: Transiente Variablen sind nicht Teil des Serialisierungsprozesses. Während der Deserialisierung werden die Werte der transienten Variablen auf den Standardwert gesetzt. Es wird nicht mit statischen Variablen verwendet.
Beispiel:
Wie viel kostet Toast pos?
vorübergehende int-Zahlen;
F # 53) Welche Methoden werden während des Serialisierungs- und Deserialisierungsprozesses verwendet?
Antworten: Die Klassen ObjectOutputStream und ObjectInputStream sind übergeordnete java.io. Paket. Wir werden sie mit den untergeordneten Klassen FileOutputStream und FileInputStream verwenden.
ObjectOutputStream.writeObject —-> Serialisieren Sie das Objekt und schreiben Sie das serialisierte Objekt in eine Datei.
ObjectInputStream.readObject -> Liest die Datei und deserialisiert das Objekt.
Um serialisiert zu werden, muss ein Objekt die serialisierbare Schnittstelle implementieren. Wenn die Oberklasse Serializable implementiert, wird die Unterklasse automatisch serialisierbar.
F # 54) Was ist der Zweck einer flüchtigen Variablen?
Antworten: Flüchtige Variablenwerte werden immer aus dem Hauptspeicher und nicht aus dem Cache-Speicher des Threads gelesen. Dies wird hauptsächlich während der Synchronisation verwendet. Sie gilt nur für Variablen.
Beispiel:
volatile int number;
F # 55) Unterschied zwischen Serialisierung und Deserialisierung in Java.
Antworten: Dies sind die Unterschiede zwischen Serialisierung und Deserialisierung in Java:
Serialisierung | Deserialisierung |
---|---|
Die Serialisierung ist der Prozess, mit dem die Objekte in einen Bytestream konvertiert werden | Die Deserialisierung ist der entgegengesetzte Prozess der Serialisierung, bei dem wir die Objekte aus dem Bytestream zurückholen können. |
Ein Objekt wird serialisiert, indem ein ObjectOutputStream geschrieben wird. | Ein Objekt wird deserialisiert, indem es aus einem ObjectInputStream gelesen wird. |
F # 56) Was ist SerialVersionUID?
Antworten: Immer wenn ein Objekt serialisiert wird, wird das Objekt mit einer Versions-ID-Nummer für die Objektklasse versehen. Diese ID wird als SerialVersionUID bezeichnet. Dies wird während der Deserialisierung verwendet, um zu überprüfen, ob Sender und Empfänger mit der Serialisierung kompatibel sind.
Fazit
Dies sind einige der wichtigsten JAVA-Interviewfragen, die sowohl die grundlegenden und fortgeschrittenen Java-Konzepte für die Programmierung als auch das Entwicklerinterview abdecken. Diese Fragen wurden von unseren JAVA-Experten beantwortet.
Ich hoffe, dass dieses Tutorial Ihnen einen großartigen Einblick in die JAVA-Kerncodierungskonzepte im Detail gibt. Die oben gegebenen Erklärungen werden Ihr Wissen wirklich bereichern und Ihr Verständnis der JAVA-Programmierung verbessern.
Machen Sie sich bereit, ein JAVA-Interview sicher zu knacken.