logo

Pytania i odpowiedzi dotyczące rozmowy kwalifikacyjnej w języku Java

Java to jeden z najpopularniejszych języków programowania na świecie, znany ze swojej wszechstronności, przenośności i szerokiego zakresu zastosowań. Java jest najczęściej używanym językiem w czołowych firmach, takich jak Uber, Airbnb, Google, Netflix, Instagram, Spotify, Amazon i wielu innych, ze względu na swoje funkcje i wydajność.

W tym artykule przedstawimy Ponad 200 pytań do wywiadu dotyczącego języka Java dostosowane zarówno dla nowicjuszy, jak i doświadczonych profesjonalistów z 3, 5 i 8-letnim doświadczeniem. Omówimy tutaj wszystko, w tym podstawowe koncepcje języka Java, programowanie obiektowe (OOP), wielowątkowość, obsługę wyjątków, wzorce projektowe, kolekcje Java i wiele innych, które z pewnością pomogą Ci złamać wywiady w języku Java.

Pytania do wywiadu Core-Java



Spis treści

Pytania do rozmowy kwalifikacyjnej Java dla nowicjuszy

1. Czy platforma Java jest niezależna, jeśli w takim razie w jaki sposób?

Tak, Java jest językiem niezależnym od platformy. W przeciwieństwie do wielu języków programowania, kompilator javac kompiluje program do postaci kodu bajtowego lub pliku .class. Plik ten jest niezależny od działającego oprogramowania lub sprzętu, ale wymaga preinstalowanego pliku JVM (Java Virtual Machine) w systemie operacyjnym w celu dalszego wykonania kodu bajtowego.

Chociaż JVM zależy od platformy , kod bajtowy można utworzyć w dowolnym systemie i można go wykonać w dowolnym innym systemie pomimo użycia sprzętu lub oprogramowania, co uniezależnia platformę Java.

2. Jakie są najważniejsze funkcje Java?

Java jest jednym z najbardziej znanych i najczęściej używanych języków w prawdziwym świecie. Java ma wiele funkcji, które czynią ją lepszą niż jakikolwiek inny język. Niektóre z nich są wymienione poniżej:

Funkcje Java-768

  • Prosty : Java jest dość prosta do zrozumienia i składni
  • Niezależny od platformy: Java jest niezależna od platformy, co oznacza, że ​​możemy uruchomić ten sam program na dowolnym oprogramowaniu i sprzęcie, uzyskując ten sam wynik.
  • Zinterpretowane : Java jest interpretowana tak samo jak język oparty na kompilatorze.
  • Solidny : funkcje takie jak usuwanie śmieci, obsługa wyjątków itp., które czynią język solidnym.
  • Zorientowany obiektowo : Java to język zorientowany obiektowo, który obsługuje koncepcje klasy, obiektów, cztery filary OOPS itp.
  • Zabezpieczone : Ponieważ możemy bezpośrednio udostępnić aplikację użytkownikowi bez udostępniania rzeczywistego programu, Java jest bezpiecznym językiem.
  • Wysoka wydajność: szybciej niż inne tradycyjne interpretowane języki programowania.
  • Dynamiczny : obsługuje dynamiczne ładowanie klas i interfejsów.
  • Rozpowszechniane : funkcja Java umożliwia nam dostęp do plików poprzez wywołanie metod z dowolnej podłączonej maszyny.
  • Wielowątkowy : zajmij się wieloma zadaniami jednocześnie, definiując wiele wątków
  • Architektura Neutralna : to nie zależy od architektury.

3. Co to jest JVM?

JVM-768

JVM oznacza wirtualną maszynę Java i jest interpreterem Java. Odpowiada za ładowanie, weryfikację i wykonanie kodu bajtowego utworzonego w Javie.

Chociaż jest to zależne od platformy, co oznacza, że ​​oprogramowanie JVM jest inne dla różnych systemów operacyjnych, odgrywa kluczową rolę w uniezależnianiu platformy Java.

Aby dowiedzieć się więcej na ten temat zob JVM w Javie .

4. Co to jest JIT?

JIT-768

JIT oznacza kompilator (Just-in-Time) i jest częścią JRE (Java Runtime Environment), służy do lepszej wydajności aplikacji Java w czasie wykonywania. Stosowanie JIT opisano krok po kroku w procesie wymienionym poniżej:

  1. Kod źródłowy jest kompilowany za pomocą javac kompilator w celu utworzenia kodu bajtowego
  2. Kod bajtowy jest dalej przekazywany do JVM
  3. JIT jest częścią JVM, JIT jest odpowiedzialny za kompilację kodu bajtowego do natywnego kodu maszynowego w czasie wykonywania.
  4. Kompilator JIT jest włączony przez cały czas i zostaje aktywowany po wywołaniu metody. W przypadku metody skompilowanej JVM bezpośrednio wywołuje skompilowany kod, zamiast go interpretować.
  5. Ponieważ JVM wywołuje skompilowany kod, który zwiększa wydajność i szybkość wykonania.

Aby dowiedzieć się więcej na ten temat zob JIT w Javie .

5. Jakie pamięci są dostępne w JVM?

Obszary JVM-768

JVM składa się z kilku magazynów pamięci, jak wspomniano poniżej:

  1. Obszar klasy (metody): przechowuje dane na poziomie klasy każdej klasy, takie jak pula stałych czasu wykonywania, dane pól i metod oraz kod metod.
  2. Sterta: obiekty są tworzone lub obiekty są przechowywane. Służy do przydzielania pamięci obiektom w czasie wykonywania.
  3. Stos: przechowuje dane i częściowe wyniki, które będą potrzebne podczas zwracania wartości dla metody i wykonywania dynamicznego łączenia
  4. Rejestr licznika programu: przechowuje adres aktualnie wykonywanej instrukcji maszyny wirtualnej Java.
  5. Stos metod natywnych: przechowuje wszystkie metody natywne używane w aplikacji.

Aby dowiedzieć się więcej na ten temat zob Magazyny pamięci JVM .

6. Co to jest moduł ładujący klasy?

Classloader jest częścią JRE (Java Runtime Environment), podczas wykonywania kodu bajtowego lub utworzonego pliku .class classloader odpowiada za dynamiczne ładowanie klas Java i interfejsów do JVM (Java Virtual Machine). Dzięki modułom ładującym klasy system wykonawczy Java nie musi znać się na plikach i systemach plików.

Aby dowiedzieć się więcej na ten temat zob ClassLoader w Javie.

7. Różnica pomiędzy JVM, JRE i JDK.

JVM : JVM, znana również jako wirtualna maszyna Java, jest częścią środowiska JRE. JVM to rodzaj interpretera odpowiedzialnego za konwersję kodu bajtowego na kod czytelny maszynowo. Sama maszyna JVM jest zależna od platformy, ale interpretuje kod bajtowy, co jest niezależnym od platformy powodem, dla którego Java jest niezależna od platformy.

JRE : JRE oznacza Java Runtime Environment, jest to pakiet instalacyjny zapewniający środowisko do uruchamiania programu lub aplikacji Java na dowolnym komputerze.

JDK : JDK oznacza Java Development Kit, który zapewnia środowisko do tworzenia i wykonywania programów Java. JDK to pakiet zawierający dwa narzędzia programistyczne zapewniające środowisko do tworzenia programów Java oraz środowisko JRE do wykonywania programów lub aplikacji Java.

Aby dowiedzieć się więcej na ten temat, zob Różnice między JVM, JRE i JDK .

8. Jakie są różnice pomiędzy Javą a C++?

Podstawa

C++

Jawa

Platforma

C++ jest zależny od platformy

Java jest niezależna od platformy

Aplikacja

C++ jest używany głównie do programowania systemowego

Java jest używana głównie do programowania aplikacji

Sprzęt komputerowy

C++ jest bliżej sprzętu

Java nie jest tak interaktywna ze sprzętem

Zakres globalny

C++ obsługuje zakres globalny i przestrzeń nazw.

Java nie obsługuje zasięgu globalnego.

Nie wspieram

Funkcjonalności obsługiwane w Javie, ale nie w C++ to:

  • obsługa wątków
  • komentarz do dokumentacji
  • niepodpisane przesunięcie w prawo(>>>)

Funkcjonalności obsługiwane w C++, ale nie w Javie to:

  • iść do
  • Wskaźniki
  • Zadzwoń przez referencje
  • Struktury i związki
  • Dziedziczenie wielokrotne
  • Funkcje wirtualne

Ups

C++ jest językiem obiektowym. Nie jest to pojedyncza hierarchia główna.

listy w Javie

Java jest także językiem obiektowym. Jest to pojedyncza hierarchia główna, ponieważ wszystko pochodzi z jednej klasy (java.lang.Object).

Drzewo dziedziczenia

C++ zawsze tworzy nowe drzewo dziedziczenia.

Java używa pojedynczego drzewa dziedziczenia, ponieważ klasy w Javie są dziećmi klas obiektowych w Javie.

9. Wyjaśnij public static void main(String args[]) w Javie.

Główna funkcja

W przeciwieństwie do innych języków programowania, takich jak C, C++ itp. W Javie zadeklarowaliśmy funkcję main jako publiczną statyczną pustą pulę główną (String args[]). Znaczenia terminów podano poniżej:

  1. publiczny : public to modyfikator dostępu odpowiedzialny za wskazanie, kto może uzyskać dostęp do elementu lub metody i jaki jest limit. Odpowiada za udostępnienie głównej funkcji na całym świecie. Jest upubliczniany, aby JVM mógł go wywołać spoza klasy, ponieważ nie jest obecny w bieżącej klasie.
  2. statyczny : static to słowo kluczowe używane, abyśmy mogli użyć elementu bez inicjowania klasy, aby uniknąć niepotrzebnej alokacji pamięci.
  3. próżnia : void jest słowem kluczowym używanym do określenia, że ​​metoda niczego nie zwraca. Ponieważ funkcja main nic nie zwraca, używamy void.
  4. główny : main oznacza, że ​​zadeklarowana funkcja jest funkcją główną. Pomaga JVM zidentyfikować, że zadeklarowana funkcja jest funkcją główną.
  5. Argumenty ciągu[] : Przechowuje argumenty wiersza poleceń Java i jest tablicą klasy java.lang.String.

10. Co to jest pula ciągów Java?

Pula ciągów Java to miejsce w pamięci sterty, w którym przechowywane są wszystkie ciągi zdefiniowane w programie. Oddzielnym miejscem na stosie jest miejsce, w którym przechowywana jest zmienna przechowująca ciąg znaków. Za każdym razem, gdy tworzymy nowy obiekt typu string, JVM sprawdza obecność obiektu w puli String. Jeśli String jest dostępny w puli, to samo odwołanie do obiektu jest udostępniane ze zmienną, w przeciwnym razie tworzony jest nowy obiekt.

Java-String-Pool-768

Przykład:

String str1='Hello'; // 'Hello' will be stored in String Pool // str1 will be stored in stack memory>

11. Co się stanie, jeśli zadeklarujemy, że main nie będzie deklarowany jako statyczny?

Możemy zadeklarować główną metodę bez użycia statyki i bez otrzymywania żadnych błędów. Jednak metoda główna nie będzie traktowana jako punkt wejścia do aplikacji lub programu.

12. Czym są pakiety w Javie?

Pakiety w Javie można zdefiniować jako grupę powiązanych typów klas, interfejsów itp., zapewniającą dostęp do ochrony i zarządzania przestrzenią nazw.

13. Dlaczego używane są Pakiety?

Pakiety są używane w Javie, aby zapobiegać konfliktom nazewnictwa, kontrolować dostęp i ułatwiać wyszukiwanie/lokalizowanie i używanie klas, interfejsów itp.

14. Jakie są zalety pakietów w Javie?

Definiowanie pakietów w Javie ma wiele zalet.

  • Pakiety unikają konfliktów nazw.
  • Pakiet zapewnia łatwiejszą kontrolę dostępu.
  • Możemy również mieć ukryte klasy, które nie są widoczne na zewnątrz i są używane przez pakiet.
  • Łatwiej jest zlokalizować powiązane klasy.

15. Ile typów pakietów występuje w Javie?

W Javie istnieją dwa typy pakietów

  • Pakiety zdefiniowane przez użytkownika
  • Wbuduj pakiety

16. Wyjaśnij różne typy danych w Javie.

W Javie istnieją dwa rodzaje typów danych, o których mowa poniżej:

  1. Pierwotny typ danych
  2. Nieprymitywny typ danych lub obiektowy typ danych

Pierwotny typ danych: Dane pierwotne to pojedyncze wartości bez specjalnych możliwości. Istnieje 8 prymitywnych typów danych:

  • wartość logiczna : przechowuje wartość true lub false
  • bajt : przechowuje 8-bitową liczbę całkowitą z uzupełnieniem do dwóch ze znakiem
  • zwęglać : przechowuje pojedynczy 16-bitowy znak Unicode
  • krótki : przechowuje 16-bitową liczbę całkowitą z uzupełnieniem do dwóch ze znakiem
  • wew : przechowuje 32-bitową liczbę całkowitą z uzupełnieniem do dwóch ze znakiem
  • długi : przechowuje 64-bitową liczbę całkowitą z uzupełnieniem do dwóch
  • platforma : przechowuje 32-bitową liczbę zmiennoprzecinkową IEEE 754 o pojedynczej precyzji
  • podwójnie : przechowuje 64-bitową liczbę zmiennoprzecinkową IEEE 754 o podwójnej precyzji

Nieprymitywny typ danych: Typy danych referencyjnych będą zawierać adres pamięci wartości zmiennej, ponieważ nie są w stanie bezpośrednio przechowywać wartości w pamięci. Rodzaje nieprymitywne są wymienione poniżej:

  • Smyczki
  • Szyk
  • Klasa
  • Obiekt
  • Interfejs

17. Kiedy używany jest typ danych bajtowy?

Bajt to 8-bitowa liczba całkowita z dwoma uzupełnieniami ze znakiem. Minimalna wartość obsługiwana przez bajty to -128, a 127 to wartość maksymalna. Używa się go w sytuacjach, gdy musimy oszczędzać pamięć, a limit potrzebnych liczb mieści się w przedziale od -128 do 127.

18. Czy możemy zadeklarować wskaźnik w Javie?

Nie, Java nie obsługuje wskaźnika. Ponieważ Java musiała być bezpieczniejsza, ponieważ która funkcja wskaźnika nie jest dostępna w Javie.

19. Jaka jest domyślna wartość bajtowego typu danych w Javie?

Domyślna wartość bajtowego typu danych w Javie to 0.

20. Jaka jest domyślna wartość typów danych float i double w Javie?

Domyślna wartość float to 0,0f, a double to 0,0d w Javie.

21. Czym jest klasa Wrapper w Javie?

Ogólnie rzecz biorąc, opakowanie odnosi się do większej jednostki, która zawiera mniejszą jednostkę. Tutaj, w Javie, klasa opakowania jest klasą obiektu, która hermetyzuje prymitywne typy danych.

Pierwotne typy danych to te, z których można utworzyć dalsze typy danych. Na przykład liczby całkowite mogą dalej prowadzić do konstrukcji długich, bajtowych, krótkich itp. Z drugiej strony ciąg znaków nie może, dlatego nie jest prymitywny.

Wracając do klasy opakowania, Java zawiera 8 klas opakowań. Są to wartości logiczne, bajtowe, krótkie, całkowite, znakowe, długie, zmiennoprzecinkowe i podwójne. Co więcej, w Javie można tworzyć niestandardowe klasy wrapperów, co jest podobne do koncepcji Structure w języku programowania C. Tworzymy własną klasę wrapperową z wymaganymi typami danych.

22. Dlaczego potrzebujemy klas opakowań?

Klasa wrapper jest klasą obiektową, która hermetyzuje prymitywne typy danych i potrzebujemy ich z następujących powodów:

  1. Klasy opakowań są ostateczne i niezmienne
  2. Udostępnia metody takie jak valueOf(), parseInt() itp.
  3. Zapewnia funkcję automatycznego pakowania i rozpakowywania.

23. Rozróżnij zmienne instancji i lokalne.

Zmienna instancji

Zmienna lokalna

Deklarowane poza metodą, bezpośrednio wywoływane przez metodę.

Zadeklarowane w ramach metody.

Ma wartość domyślną.

Brak wartości domyślnej

Można z niego korzystać przez całą lekcję.

Zakres jest ograniczony do metody.

24. Jakie są domyślne wartości przypisane zmiennym i instancjom w Javie?

W Javie Jeśli nie zainicjowaliśmy zmiennych instancji, kompilator inicjuje je wartościami domyślnymi. Domyślne wartości instancji i zmiennych zależą od ich typów danych. Niektóre typowe typy domyślnych typów danych to:

  • Wartość domyślna dla typów liczbowych (byte, short, int, long, float i double) to 0.
  • Wartość domyślna typu logicznego to false.
  • Wartość domyślna dla typów obiektów (klas, interfejsów i tablic) to null.
  • Znak null, u0000, jest wartością domyślną dla typu char.

Przykład:

Jawa
// Java Program to demonstrate use of default values import java.io.*; class GFG {  // static values  static byte b;  static int i;  static long l;  static short s;  static boolean bool;  static char c;  static String str;  static Object object;  static float f;  static double d;  static int[] Arr;  public static void main(String[] args)  {  // byte value  System.out.println('byte value' + b);  // short value  System.out.println('short value' + s);  // int value  System.out.println('int value' + i);  // long value  System.out.println('long value' + l);  System.out.println('boolean value' + bool);  System.out.println('char value' + c);  System.out.println('float value' + f);  System.out.println('double value' + d);  System.out.println('string value' + str);  System.out.println('object value' + object);  System.out.println('Array value' + Arr);  } }>

Wyjście
byte value0 short value0 int value0 long value0 boolean valuefalse char value float value0.0 double value0.0 string valuenull object valuenull Array valuenull>

25. Co to jest zmienna klasowa?

W Javie zmienna klasy (znana również jako zmienna statyczna) to zmienna zadeklarowana w klasie, ale poza jakąkolwiek metodą, konstruktorem lub blokiem. Zmienne klasowe deklaruje się za pomocą słowa kluczowego static i są one współdzielone przez wszystkie instancje (obiekty) klasy, a także przez samą klasę. Bez względu na to, ile obiektów wywodzi się z klasy, każda zmienna klasy będzie istnieć tylko raz.

Przykład:

Jawa
// Java program to demonstrate use of Clas Variable class GFG {  public static int ctr = 0;  public GFG() { ctr++; }  public static void main(String[] args)  {  GFG obj1 = new GFG();  GFG obj2 = new GFG();  GFG obj3 = new GFG();  System.out.println('Number of objects created are '  + GFG.ctr);  } }>

Wyjście
Number of objects created are 3>

26. Jaka jest domyślna wartość przechowywana w zmiennych lokalnych?

Nie ma wartości domyślnej przechowywanej ze zmiennymi lokalnymi. Ponadto pierwotne zmienne i obiekty nie mają żadnych wartości domyślnych.

27. Wyjaśnij różnicę pomiędzy zmienną instancji a zmienną klasową.

Zmienna instancji: Zmienna klasy bez statycznego modyfikatora, znana jako zmienna instancji, jest zazwyczaj współdzielona przez wszystkie instancje klasy. Zmienne te mogą mieć różne wartości wśród kilku obiektów. Zawartość zmiennej instancji jest całkowicie niezależna od jednej instancji obiektu od drugiej, ponieważ jest powiązana z konkretną instancją obiektu klasy.

Przykład:

Jawa
// Java Program to demonstrate Instance Variable import java.io.*; class GFG {  private String name;  public void setName(String name) { this.name = name; }  public String getName() { return name; }  public static void main(String[] args)  {  GFG obj = new GFG();  obj.setName('John');  System.out.println('Name ' + obj.getName());  } }>

Wyjście
Name John>

Zmienna klasy: Zmienną klasy można zadeklarować w dowolnym miejscu na poziomie klasy za pomocą słowa kluczowego static. Zmienne te mogą mieć tylko jedną wartość, gdy zostaną zastosowane do różnych obiektów. Zmienne te mogą być współdzielone przez wszystkich członków klasy, ponieważ nie są połączone z żadnym konkretnym obiektem klasy.

Przykład:

Jawa
// Java Program to demonstrate Class Variable import java.io.*; class GFG {  // class variable  private static final double PI = 3.14159;  private double radius;  public GFG(double radius) { this.radius = radius; }  public double getArea() { return PI * radius * radius; }  public static void main(String[] args)  {  GFG obj = new GFG(5.0);  System.out.println('Area of circle: '  + obj.getArea());  } }>

Wyjście
Area of circle: 78.53975>

28. Co to jest zmienna statyczna?

Słowo kluczowe static służy do udostępniania tej samej zmiennej lub metody danej klasy. Zmienne statyczne to zmienne, które po zadeklarowaniu tworzą pojedynczą kopię zmiennej i udostępniają ją wszystkim obiektom na poziomie klasy.

29. Jaka jest różnica pomiędzy System.out, System.err i System.in?

System.out – Jest to PrintStream używany do zapisywania znaków lub można powiedzieć, że może wyprowadzać dane, które chcemy zapisać na konsoli/terminalu interfejsu wiersza poleceń.

Przykład:

Jawa
// Java Program to implement // System.out import java.io.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // Use of System.out  System.out.println('');  } }>


System.err – Służy do wyświetlania komunikatów o błędach.

Przykład:

Jawa
// Java program to demonstrate // System.err import java.io.*; // Driver Class class GFG {  // Main function  public static void main(String[] args)  {  // Printing error  System.err.println(  'This is how we throw error with System.err');  } }>

Wyjście:

This is how we throw error with System.err>

Chociaż System.err ma wiele podobieństw, oba mają również sporo różnic, sprawdźmy je.

System.out System.err

Wydrukuje zgodnie ze standardem z systemu.

Wydrukuje z błędem standardowym.

Służy głównie do wyświetlania wyników na konsoli.

Jest używany głównie do wysyłania tekstów błędów.

Daje wyjście na konsolę w domyślnym (czarnym) kolorze.

Daje również wyjście na konsolę, ale większość IDE nadaje mu czerwony kolor w celu rozróżnienia.

System.in – Jest to strumień wejściowy używany do odczytu danych wejściowych z okna terminala. Nie możemy bezpośrednio używać System.in, dlatego używamy klasy Scanner do pobierania danych wejściowych z System.in.

Przykład:

Jawa
// Java Program to demonstrate // System.in import java.util.*; // Driver Class class Main {  // Main Function  public static void main(String[] args)  {  // Scanner class with System.in  Scanner sc = new Scanner(System.in);  // Taking input from the user  int x = sc.nextInt();  int y = sc.nextInt();  // Printing the output  System.out.printf('Addition: %d', x + y);  } }>

Wyjście:

3 4 Addition: 7>

30. Co rozumiesz przez strumień IO?

2-768

Java udostępnia różne strumienie w swoim pakiecie we/wy, który pomaga użytkownikowi wykonywać wszystkie operacje wejścia-wyjścia. Strumienie te obsługują wszystkie typy obiektów, typów danych, znaków, plików itp., aby w pełni wykonywać operacje we/wy.

31. Jaka jest różnica pomiędzy hierarchią klas Reader/Writer a hierarchią klas InputStream/OutputStream?

Kluczowa różnica między nimi polega na tym, że dane strumienia bajtów są odczytywane i zapisywane przez klasy strumieni wejścia/wyjścia. Znaki są obsługiwane przez klasy Reader i Writer. W przeciwieństwie do klas Reader/Writer, które akceptują tablice znaków jako parametry, metody klas strumieni wejścia/wyjścia akceptują tablice bajtów. W porównaniu do strumieni wejścia/wyjścia klasy Reader/Writer są bardziej wydajne, obsługują wszystkie znaki Unicode i są przydatne do internalizacji. Używaj klas Reader/Writer zamiast danych binarnych, takich jak obrazy, chyba że to zrobisz.

Przykład:

Jawa
// Java Program to demonstrate Reading Writing Binary Data // with InputStream/OutputStream import java.io.*; class GFG {  public static void main(String[] args) {  try {  // Writing binary data to a file using OutputStream  byte[] data = {(byte) 0xe0, 0x4f, (byte) 0xd0, 0x20, (byte) 0xea};  OutputStream os = new FileOutputStream('data.bin');  os.write(data);  os.close();  // Reading binary data from a file using InputStream  InputStream is = new FileInputStream('data.bin');  byte[] newData = new byte[5];  is.read(newData);  is.close();  // Printing the read data  for (byte b : newData) {  System.out.println(b);  }  } catch (IOException e) {  e.printStackTrace();  }  } }>

Wyjście
-32 79 -48 32 -22>

32. Jakie są najliczniejsze klasy we wszystkich strumieniach?

Wszystkie klasy strumieniowe można podzielić na dwa typy klas, którymi są klasy ByteStream i klasy CharacterStream. Klasy ByteStream są dalej podzielone na klasy OutputStream i klasy OutputStream. Klasy CharacterStream dzielą się także na klasy Reader i Writer. Klasy SuperMost dla wszystkich klas InputStream to java.io.InputStream, a dla wszystkich klas strumieni wyjściowych to java.io.OutPutStream. Podobnie w przypadku wszystkich klas czytników najlepszą klasą jest java.io.Reader, a w przypadku wszystkich klas piszących – java.io.Writer.

33. Co to są FileInputStream i FileOutputStream?

Do odczytu i zapisu danych Java oferuje strumienie we/wy. Stream reprezentuje źródło wejściowe lub miejsce docelowe, którym może być plik, urządzenie we/wy, inny program itp. Strumień wejściowy pliku w Javie służy do odczytywania danych z pliku w postaci strumienia bajtów. Jest używany głównie do odczytu danych binarnych, takich jak obrazy, pliki audio lub obiekty serializowane.

Przykład:

File file = new File('path_of_the_file'); FileInputStream inputStream = new FileInputStream(file);>

W Javie tzw Strumień pliku wyjściowego funkcja służy do zapisywania danych bajt po bajcie do danego pliku lub deskryptora pliku. Zwykle surowe dane bajtowe, takie jak obrazy, są zapisywane w pliku za pomocą FileOutputStream.

Przykład:

File file = new File('path_of_the_file'); FileOutputStream outputStream = new FileOutputStream(file);>

34. Jaki jest cel stosowania klas BufferedInputStream i BufferedOutputStream?

Kiedy pracujemy z plikami lub strumieniem, aby zwiększyć wydajność wejścia/wyjścia programu, musimy użyć klas BufferedInputStream i BufferedOutputStream. Obie klasy zapewniają możliwość buforowania, co oznacza, że ​​dane będą przechowywane w buforze przed zapisaniem do pliku lub odczytaniem ich ze strumienia. Zmniejsza także liczbę interakcji naszego systemu operacyjnego z siecią lub dyskiem. Buforowanie umożliwia programom zapisywanie dużej ilości danych zamiast zapisywania ich w małych porcjach. Zmniejsza to również obciążenie związane z dostępem do sieci lub dysku.

BufferedInputStream(InputStream inp); // used to create the bufferinput stream and save the arguments.>
BufferedOutputStream(OutputStream output); // used to create a new buffer with the default size.>

35. Czym są strumienie filtrów?

Filtr strumieniowy lub Filtruj strumienie zwraca strumień składający się z elementów tego strumienia pasujących do podanego predykatu. Podczas pracy filter() w rzeczywistości nie wykonuje ona filtrowania, ale zamiast tego tworzy nowy strumień, który po przejściu zawiera elementy strumieni początkowych pasujących do podanego predykatu.

Przykład:

FileInputStream fis =new FileInoutStream('file_path');  FilterInputStream = new BufferedInputStream(fis);>


36. Co to jest filtr we/wy?

Filtr we/wy, definiowany również jako filtr wejścia/wyjścia, to obiekt, który odczytuje z jednego strumienia i zapisuje dane do źródeł wejściowych i wyjściowych. Do użycia tego filtra użyto pakietu Java.io.

37. Na ile sposobów możesz pobierać dane z konsoli?

Istnieją dwie metody pobierania danych wejściowych z konsoli w Javie, wymienione poniżej:

  1. Używanie argumentu wiersza poleceń
  2. Korzystanie z buforowanej klasy czytnika
  3. Korzystanie z klasy konsoli
  4. Korzystanie z klasy skanera

Poniżej znajduje się program demonstrujący zastosowanie każdej metody.

Przykład:

Jawa
// Java Program to implement input // using Command line argument import java.io.*; class GFG {  public static void main(String[] args)  {  // check if length of args array is  // greater than 0  if (args.length > 0) {  System.out.println(  'The command line arguments are:');  // iterating the args array and printing  // the command line arguments  for (String val : args)  System.out.println(val);  }  else  System.out.println('No command line '  + 'arguments found.');  } } // Use below commands to run the code // javac GFG.java // java Main techcodeview.com>
Jawa
// Java Program to implement // Buffer Reader Class import java.io.*; class GFG {  public static void main(String[] args)  throws IOException  {  // Enter data using BufferReader  BufferedReader read = new BufferedReader(  new InputStreamReader(System.in));  // Reading data using readLine  String x = read.readLine();  // Printing the read line  System.out.println(x);  } }>
Jawa
// Java program to implement input // Using Console Class public class GfG {  public static void main(String[] args)  {  // Using Console to input data from user  String x = System.console().readLine();  System.out.println('You entered string ' + x);  } }>
Jawa
// Java program to demonstrate // working of Scanner in Java import java.util.Scanner; class GfG {  public static void main(String args[])  {  // Using Scanner for Getting Input from User  Scanner in = new Scanner(System.in);  String str = in.nextLine();  System.out.println('You entered string ' + str);  } }>

Wyjście:

techcodeview.com>

38. Różnica w użyciu print, println i printf.

print, println i printf są używane do drukowania elementów, ale print drukuje wszystkie elementy, a kursor pozostaje w tej samej linii. println przesuwa kursor do następnej linii. Dzięki printf możemy również używać identyfikatorów formatu.

39. Czym są operatory?

Operatory to specjalne typy symboli używane do wykonywania niektórych operacji na zmiennych i wartościach.

40. Ile typów operatorów dostępnych jest w Javie?

Wszystkie typy operatorów w Javie są wymienione poniżej:

  1. Operatory arytmetyczne
  2. Operatory jednoargumentowe
  3. Operator przypisania
  4. Operatorzy relacyjni
  5. Operatory logiczne
  6. Operator trójskładnikowy
  7. Operatory bitowe
  8. Operatorzy zmian
  9. instancja operatora

Operatory Postfix są uważane za najwyższy priorytet zgodnie z pierwszeństwem operatorów Java.

41. Wyjaśnij różnicę pomiędzy operatorami>> i>>>.

Operatory takie jak>> i>>> wydają się być takie same, ale działają nieco inaczej. Operator>> przesuwa bity znaku, a operator>>> służy do przesuwania bitów wypełnionych zerami.

Przykład:

Jawa
// Java Program to demostrate //>operatory> i>>> importuj java.io.*; // Klasa sterownika GFG { public static void main(String[] args) { int a = -16, b = 1;  // Użycie>> System.out.println(a >> b);  a = -17;  b = 1;  // Użycie>>> System.out.println(a >>> b);  } }>

Wyjście
-8 2147483639>

42. Który operator Java jest prawoskojarzeniowy?

Istnieje tylko jeden operator prawostronny, czyli operator =.

43. Co to jest operator kropki?

Operator Dot w Javie służy do uzyskiwania dostępu do zmiennych instancji i metod obiektów klas. Służy także do uzyskiwania dostępu do klas i podpakietów z pakietu.

44. Co to jest typ zwrotu kowariantnego?

Kowariantny typ zwracany określa, że ​​typ zwracany może zmieniać się w tym samym kierunku, co podklasa. Możliwe jest posiadanie różnych typów zwracanych metod przesłaniających w klasie podrzędnej, ale typ zwracany przez dziecko powinien być podtypem typu zwracanego przez rodzica i z tego powodu metoda przesłaniająca staje się wariantem w odniesieniu do typu zwracanego.

Używamy typu zwrotu kowariantnego z następujących powodów:

  • Pozwala uniknąć mylących rzutowań typów obecnych w hierarchii klas i sprawia, że ​​kod jest czytelny, użyteczny i łatwy w utrzymaniu.
  • Daje swobodę posiadania bardziej szczegółowych typów zwracanych podczas zastępowania metod.
  • Pomoc w zapobieganiu wyjątkom ClassCastException w czasie wykonywania przy zwrotach.

45. Co to jest słowo kluczowe przejściowe?

Słowo kluczowe transient jest używane podczas serializacji, jeśli nie chcemy zapisywać wartości konkretnej zmiennej w pliku. Kiedy JVM natknie się na przejściowe słowo kluczowe, ignoruje oryginalną wartość zmiennej i zapisuje domyślną wartość tego typu danych zmiennej.

46. ​​Jaka jest różnica pomiędzy metodami Sleep() i Wait()?

Spać()

Czekać()

Metoda Sleep() należy do klasy wątku.

Metoda Wait() należy do klasy obiektu.

Tryb uśpienia nie zwalnia blokady, którą utrzymuje bieżący wątek.

wait() zwalnia blokadę, która pozwala innym wątkom ją przejąć.

Ta metoda jest metodą statyczną.

Ta metoda nie jest metodą statyczną.

Funkcja Sleep() nie zgłasza wyjątku InterruptedException.InterruptedException jest wyświetlany, jeśli wątek zostanie przerwany podczas oczekiwania.

Używane głównie do opóźniania wątku o określony czas.

Używane głównie do wstrzymania wątku do czasu powiadomienia przez inny wątek.

Funkcja Sleep() ma dwie przeciążone metody:

  • sen (długie milis) milis: milisekundy
  • sen (długie milis, int nanos) nanos: Nanosekundy

Wait() ma trzy przeciążone metody:

  • Czekać()
  • czekaj (długi czas oczekiwania)
  • czekaj (długi limit czasu, int nanos)

47. Jakie są różnice pomiędzy Stringiem a StringBufferem?

Strunowy

Bufor ciągów

Przechowywanie sekwencji znaków.Zapewnia funkcjonalność do pracy z ciągami.
Jest niezmienne.Jest zmienny (można go modyfikować i wykonywać na nim inne operacje na łańcuchach).
Brak operacji wątku w ciągu.Jest bezpieczny dla wątków (dwa wątki nie mogą jednocześnie wywoływać metod StringBuffer)

48. Jakie są różnice pomiędzy StringBuffer i StringBuilder?

Bufor ciągów

Konstruktor ciągów

StringBuffer zapewnia funkcjonalność do pracy z ciągami.StringBuilder to klasa używana do budowania modyfikowalnego ciągu.
Jest bezpieczny dla wątków (dwa wątki nie mogą jednocześnie wywoływać metod StringBuffer)Nie jest bezpieczny dla wątków (dwa wątki mogą wywoływać metody jednocześnie)
Stosunkowo powolny, ponieważ jest zsynchronizowany.Brak synchronizacji sprawia, że ​​wdrażanie jest szybsze

49. Który spośród Stringów czy String Buffer powinien być preferowany, gdy wymaganych jest wiele aktualizacji danych?

Łańcuch jest preferowany zamiast StringBuffer, ponieważ StringBuilder jest szybszy niż StringBuffer, ale obiekty StringBuffer są preferowane, ponieważ zapewniają większe bezpieczeństwo wątków.


50. Dlaczego StringBuffer nazywa się mutable?

Klasa StringBuffer w Javie służy do reprezentowania zmiennego ciągu znaków. Oferuje alternatywę dla niezmiennej klasy String, umożliwiając zmianę zawartości ciągu bez ciągłego tworzenia nowych obiektów. Zmienne (modyfikowalne) ciągi znaków tworzone są za pomocą klasy StringBuffer. Klasa StringBuffer w Javie jest identyczna z klasą String, z tą różnicą, że można ją zmieniać.

Przykład:

Jawa
// Java Program to demonstrate use of stringbuffer public class StringBufferExample {  public static void main(String[] args)  {  StringBuffer s = new StringBuffer();  s.append('Geeks');  s.append('for');  s.append('Geeks');  String message = s.toString();  System.out.println(message);  } }>

Wyjście
techcodeview.com>

51. Czym różni się tworzenie ciągu za pomocą metody new() od tworzenia literału?

Łańcuch za pomocą funkcji new() różni się od literału, ponieważ deklarując ciąg przechowuje elementy w pamięci stosu, natomiast gdy jest zadeklarowany za pomocą funkcji new(), przydziela pamięć dynamiczną w pamięci sterty. Obiekt zostaje utworzony w pamięci sterty, nawet jeśli obecny jest ten sam obiekt treści.

Składnia:

String x = new String('ABC');>


3-768

52. Co to jest tablica w Javie?

Tablica w Javie to struktura danych używana do przechowywania sekwencji elementów tego samego typu o stałym rozmiarze. Dostęp do elementów tablicy można uzyskać poprzez ich indeks rozpoczynający się od 0 i kończący się na minus 1. Deklaracja tablicy w Javie odbywa się za pomocą nawiasów kwadratowych, a podczas deklaracji określany jest także jej rozmiar.

Składnia:

int[] Arr = new int[5];>

53. Na jakich tablicach pamięci tworzone są w Javie?

Tablice w Javie tworzone są w pamięci sterty. Kiedy tablica jest tworzona za pomocą nowego słowa kluczowego, na stercie przydzielana jest pamięć w celu przechowywania elementów tablicy. W Javie pamięć sterty jest zarządzana przez wirtualną maszynę Java (JVM) i jest także współdzielona pomiędzy wszystkimi wątkami programu Java. Pamięć, która nie jest już używana przez program, JVM używa modułu zbierającego elementy bezużyteczne w celu odzyskania pamięci. Tablice w Javie tworzone są dynamicznie, co oznacza, że ​​rozmiar tablicy jest ustalany w trakcie działania programu. Rozmiar tablicy określany jest podczas deklaracji tablicy i nie można go zmienić po utworzeniu tablicy.

54. Jakie są typy tablic?

Istnieją dwa typy tablic, tj. tablice pierwotne i tablice referencyjne.

  • Tablice jednowymiarowe: Tablice, które mają tylko jeden wymiar, tj. tablicę liczb całkowitych lub tablicę ciągów znaków, nazywane są tablicami jednowymiarowymi.

4-768

Składnia:

data_type[] Array_Name = new data_type[ArraySize];>
  • Tablice wielowymiarowe: Tablice, które mają dwa lub więcej wymiarów, takie jak tablice dwuwymiarowe lub trójwymiarowe.

55. Dlaczego indeks tablicy Java zaczyna się od 0?

Indeks tablicy oznacza odległość od początku tablicy. Zatem pierwszy element ma odległość 0, dlatego indeks początkowy wynosi 0.

Składnia:

[Base Address + (index * no_of_bytes)]>

56. Jaka jest różnica pomiędzy int array[] i int[] array?

Zarówno int array[], jak i int[] array służą do deklarowania tablicy liczb całkowitych w Javie. Jedyna różnica między nimi polega na ich składni, nie ma między nimi żadnej różnicy funkcjonalnej.

int arr[] is a C-Style syntax to declare an Array.>
int[] arr is a Java-Style syntax to declare an Array.>

Jednak ogólnie zaleca się używanie składni w stylu Java do deklarowania tablicy. Ponieważ jest łatwy do odczytania i zrozumienia, jest również bardziej spójny z innymi konstrukcjami języka Java.

57. Jak skopiować tablicę w Javie?

W Javie istnieje wiele sposobów kopiowania tablicy w zależności od wymagań.

  • metoda clone() w Javie: Ta metoda w Javie służy do tworzenia płytkiej kopii danej tablicy, co oznacza, że ​​nowa tablica będzie korzystać z tej samej pamięci, co tablica oryginalna.
int[] Arr = { 1, 2, 3, 5, 0}; int[] tempArr = Arr.clone();>
  • metoda arraycopy(): Aby utworzyć głęboką kopię tablicy, możemy użyć tej metody, która tworzy nową tablicę z tymi samymi wartościami, co tablica oryginalna.
int[] Arr = {1, 2, 7, 9, 8}; int[] tempArr = new int[Arr.length]; System.arraycopy(Arr, 0, tempArr, 0, Arr.length);>
  • metoda copyOf(): Metoda ta służy do utworzenia nowej tablicy o określonej długości i skopiowania zawartości oryginalnej tablicy do nowej tablicy.
int[] Arr = {1, 2, 4, 8}; int[] tempArr = Arrays.copyOf(Arr, Arr.length);>
  • metoda copyOfRange(): Ta metoda jest bardzo podobna do metody copyOf() w Javie, ale ta metoda pozwala nam również określić zakres elementów do skopiowania z oryginalnej tablicy.
int[] Arr = {1, 2, 4, 8}; int[] temArr = Arrays.copyOfRange(Arr, 0, Arr.length);>

58. Co rozumiesz przez postrzępioną tablicę?

Postrzępiona tablica w Javie to po prostu dwuwymiarowa tablica, w której każdy wiersz tablicy może mieć inną długość. Ponieważ wszystkie wiersze w tablicy 2-d mają tę samą długość, ale postrzępiona tablica zapewnia większą elastyczność w zakresie rozmiaru każdego wiersza. Ta funkcja jest bardzo przydatna w warunkach, w których dane mają różną długość lub gdy należy zoptymalizować wykorzystanie pamięci.

Składnia:

int[][] Arr = new int[][] {  {1, 2, 8},   {7, 5},   {6, 7, 2, 6} };>

59. Czy możliwe jest, aby tablica była ulotna?

W Javie nie można utworzyć zmiennej volatile. Lotne słowa kluczowe w Javie można stosować tylko do pojedynczych zmiennych, ale nie do tablic ani kolekcji. Wartość zmiennej jest zawsze odczytywana i zapisywana w pamięci głównej, jeśli jest zdefiniowana jako ulotna, a nie buforowana w pamięci lokalnej wątku. Ułatwia to upewnienie się, że wszystkie wątki uzyskujące dostęp do zmiennej mogą zobaczyć wprowadzone w niej zmiany.

60. Jakie są zalety i wady tablicy?

5-768

Zalety tablic to:

  • Bezpośredni i efektywny dostęp do dowolnego elementu kolekcji umożliwiają tablice. Dostęp do elementów tablicy można uzyskać za pomocą operacji O(1), co oznacza, że ​​ilość czasu potrzebna na tę operację jest stała i niezależna od rozmiaru tablicy.
  • Dane można skutecznie przechowywać w pamięci za pomocą tablic. Rozmiar tablicy jest znany w czasie kompilacji, ponieważ jej elementy są przechowywane w sąsiadujących obszarach pamięci.
  • Dzięki temu, że dane przechowywane są w sąsiadujących ze sobą obszarach pamięci, tablice zapewniają szybkie ich odtworzenie.
  • Tablice są łatwe do wdrożenia i zrozumienia, co czyni je idealnym wyborem dla początkujących uczących się programowania.

Wady tablic to:

  • Tworzone są tablice o z góry określonym rozmiarze, który jest wybierany w tym momencie. Oznacza to, że jeśli zajdzie potrzeba zwiększenia rozmiaru tablicy, konieczne będzie utworzenie nowej tablicy i skopiowanie danych ze starej tablicy do nowej, co może zająć dużo czasu i pamięci.
  • Jeśli tablica nie jest całkowicie zajęta, w przestrzeni pamięci tablicy może znajdować się niewykorzystana przestrzeń pamięci. Jeśli masz słabą pamięć, może to stanowić problem.
  • W porównaniu z innymi strukturami danych, takimi jak połączone listy i drzewa, tablice mogą być sztywne ze względu na ich stały rozmiar i ograniczoną obsługę wyrafinowanych typów danych.
  • Ponieważ wszystkie elementy tablicy muszą być tego samego typu danych, tablica nie obsługuje złożonych typów danych, takich jak obiekty i struktury.

61. Co to jest paradygmat obiektowy?

Paradygmat dosłownie oznacza wzór lub metodę. Paradygmaty programowania to metody rozwiązywania programu czterech typów, mianowicie imperatywnego, logicznego, funkcjonalnego i obiektowego. Kiedy obiekty są używane jako jednostki podstawowe, na których stosowane są metody, wykonywane są funkcje hermetyzacji lub dziedziczenia, jest to znane jako paradygmat obiektowy.

62. Jakie są główne koncepcje obiektów OOP w Javie?

Główne koncepcje OOP w Javie są wymienione poniżej:

  • Dziedzictwo
  • Wielopostaciowość
  • Abstrakcja
  • Kapsułkowanie

63. Jaka jest różnica pomiędzy obiektowym językiem programowania a obiektowym językiem programowania?

Język programowania obiektowego

Język programowania obiektowego

Obiektowy język programowania obejmuje szersze pojęcia, takie jak dziedziczenie, polimorfizm, abstrakcja itp.Zakres programowania obiektowego ogranicza się do użycia obiektów i enkapsulacji.
Obsługuje wszystkie wbudowane obiektyNie obsługuje wszystkich wbudowanych obiektów
Przykłady: Java, C# itp.Przykłady: skrypt Java, podstawy wizualne itp.

64. Czym różni się operator „new” od operatora „newInstance()” w Javie?

operator new służy do tworzenia obiektów, ale jeśli chcemy określić typ obiektu, który ma zostać utworzony w czasie wykonywania, nie ma możliwości użycia operatora new. W tym wypadku musimy skorzystać z metoda newInstance(). .

65. Czym są klasy w Javie?

W Javie klasy są zbiorem obiektów o podobnych cechach i atrybutach. Klasy reprezentują plan lub szablon, na podstawie którego tworzone są obiekty. Klasy nie są bytami ze świata rzeczywistego, ale pomagają nam tworzyć obiekty, które są bytami ze świata rzeczywistego.

66. Jaka jest różnica pomiędzy metodą statyczną (klasową) a metodą instancji?

Metoda statyczna (klasowa).

Metoda instancji

Metoda statyczna jest powiązana z klasą, a nie z obiektem.

Metoda instancji jest powiązana z obiektem, a nie klasą.

Metody statyczne można wywoływać wyłącznie przy użyciu nazwy klasy, bez tworzenia instancji klasy.

Metodę instancji można wywołać na konkretnej instancji klasy, korzystając z odwołania do obiektu.

Metody statyczne nie mają dostępu Ten słowo kluczowe .

Metody instancji mają dostęp do Ten słowo kluczowe .

Ta metoda umożliwia dostęp tylko do statycznych elementów klasy

Ta metoda może uzyskać dostęp zarówno do statycznych, jak i niestatycznych metod klasy.

67. Co to jest to słowo kluczowe w Javie?

6

„this” to słowo kluczowe używane do odwoływania się do zmiennej odnoszącej się do bieżącego obiektu.

68. Czym są krótkie specyfikatory dostępu i typy specyfikatorów dostępu?

Access_modifiers_in_java-768

Specyfikatory dostępu w Javie pomagają ograniczyć zakres klasy, konstruktora, zmiennej, metody lub elementu danych. W Javie istnieją cztery typy specyfikatorów dostępu, o których mowa poniżej:

  1. Publiczny
  2. Prywatny
  3. Chroniony
  4. Domyślny

69. Jaka będzie wartość początkowa odwołania do obiektu zdefiniowanego jako zmienna instancji?

Początkowa wartość odniesienia do obiektu, która jest zdefiniowana jako zmienna instancji, to wartość NULL.

70. Co to jest przedmiot?

Obiekt to rzeczywisty byt, z którym wiążą się pewne właściwości i metody. Obiekt jest również zdefiniowany jako instancja klasy. Obiekt można zadeklarować za pomocą nowego słowa kluczowego.

71. Jakie są różne sposoby tworzenia obiektów w Javie?

Metody tworzenia obiektów w Javie są wymienione poniżej:

  1. Używanie nowego słowa kluczowego
  2. Korzystanie z nowej instancji
  3. Używanie metody clone().
  4. Korzystanie z deserializacji
  5. Korzystanie z metody newInstance() klasy Constructor

Więcej informacji na temat metod tworzenia obiektów w Javie można znaleźć w artykule Ten artykuł .

72. Jakie są zalety i wady klonowania obiektów?

Istnieje wiele zalet i wad korzystania z klonowania obiektów, jak wspomniano poniżej:

Zalety:

  • W Javie operatora przypisania „=” nie można używać do klonowania, ponieważ tworzy on po prostu kopię zmiennych referencyjnych. Aby przezwyciężyć tę rozbieżność, zamiast operatora przypisania można zastosować metodę clone() klasy Object.
  • Metoda clone() jest metodą chronioną klasy Object, co oznacza, że ​​tylko klasa Employee może klonować obiekty klasy Employee. Oznacza to, że żadna inna klasa niż Pracownik nie może klonować obiektów Pracownika, ponieważ nie zna atrybutów klasy Pracownik.
  • Rozmiar kodu zmniejsza się wraz ze spadkiem liczby powtórzeń.
  • Umożliwia replikację (coś w rodzaju wzorca prototypowego) ręczna inicjalizacja każdego pola tworzy duży kod, jeśli obiekt jest złożony, jest szybszy w przypadku klonowania.

Niedogodności:

  • Ponieważ metoda Object.clone() jest chroniona, należy udostępnić własną metodę clone() i pośrednio wywołać z niej Object.clone().
  • Jeśli nie mamy żadnych metod, musimy zapewnić interfejs Cloneable, ponieważ musimy podać informacje JVM, abyśmy mogli wykonać clone() na naszym obiekcie. Jeśli nie, nie możemy sklonować clone wykonuje płytką kopię pól, jeśli mamy po prostu zwróć super.clone() z metody klonowania, co może być problematyczne.

73. Jakie są zalety przekazania tego do metody zamiast do samego obiektu bieżącej klasy?

Przekazywanie tego do metody zamiast do samego obiektu bieżącej klasy ma kilka zalet:

  • jest to ostatnia zmienna, z powodu której nie można jej przypisać żadnej nowej wartości, podczas gdy bieżący obiekt klasy może nie być ostateczny i można go zmienić.
  • można tego użyć w bloku zsynchronizowanym.

74. Co to jest konstruktor?

Konstruktor to specjalna metoda używana do inicjowania obiektów. Konstruktor wywoływany jest podczas tworzenia obiektu. Nazwa konstruktora jest taka sama jak nazwa klasy.

Przykład:

// Class Created class XYZ{  private int val;    // Constructor  XYZ(){  val=0;  } };>

75. Co się stanie, jeśli w klasie nie udostępnisz konstruktora?

Jeśli nie podasz konstruktora w klasie w Javie, kompilator automatycznie wygeneruje konstruktor domyślny bez argumentów i operacji, który jest konstruktorem domyślnym.

76. Ile typów konstruktorów używanych jest w Javie?

W Javie istnieją dwa typy konstruktorów, o których mowa poniżej:

  1. Domyślny konstruktor
  2. Konstruktor parametryczny

Konstruktor domyślny: Jest to typ, który nie akceptuje wartości parametrów. Służy do ustawienia początkowych wartości atrybutów obiektu.

class_Name(); // Default constructor called>

Konstruktor sparametryzowany: Jest to typ konstruktora, który akceptuje parametry jako argumenty. Służą one do przypisywania wartości zmiennym instancji podczas inicjalizacji obiektów.

class_Name(parameter1, parameter2......); // All the values passed as parameter will be // allocated accordingly>

77. Jaki jest cel konstruktora domyślnego?

Konstruktory pomagają tworzyć instancje klasy lub można powiedzieć, że tworzą obiekty klasy. Konstruktor wywoływany jest podczas inicjalizacji obiektów. Konstruktor domyślny to taki typ konstruktora, który nie akceptuje żadnego parametru. Zatem jakakolwiek wartość przypisana właściwościom obiektów, uważana jest za wartość domyślną.

78. Co rozumiesz przez konstruktor kopiujący w Javie?

Konstruktor kopiujący to typ konstruktora, w którym przekazujemy inny obiekt jako parametr, ponieważ właściwości obu obiektów wydają się takie same, dlatego wydaje się, że konstruktorzy tworzą kopię obiektu.

79. Gdzie i jak można wykorzystać prywatnego konstruktora?

Konstruktor prywatny jest używany, jeśli nie chcesz, aby jakakolwiek inna klasa tworzyła instancję obiektu, aby uniknąć podklas. Konstruktor prywatny use można zobaczyć w przykładzie zaimplementowanym.

Przykład:

Jawa
// Java program to demonstrate implementation of Singleton // pattern using private constructors. import java.io.*; class GFG {  static GFG instance = null;  public int x = 10;  // private constructor can't be accessed outside the  // class  private GFG() {}  // Factory method to provide the users with instances  static public GFG getInstance()  {  if (instance == null)  instance = new GFG();  return instance;  } } // Driver Class class Main {  public static void main(String args[])  {  GFG a = GFG.getInstance();  GFG b = GFG.getInstance();  a.x = a.x + 10;  System.out.println('Value of a.x = ' + a.x);  System.out.println('Value of b.x = ' + b.x);  } }>

Wyjście
Value of a.x = 20 Value of b.x = 20>

80. Jakie są różnice pomiędzy konstruktorami i metodami?

Konstruktory Java służą do inicjowania obiektów. Podczas tworzenia konstruktory są wywoływane w celu ustawienia atrybutów obiektów, poza kilkoma podstawowymi różnicami między nimi:

  1. Konstruktory są wywoływane tylko wtedy, gdy obiekt jest tworzony, ale inne metody można wywoływać wiele razy w ciągu życia obiektu.
  2. Konstruktory niczego nie zwracają, podczas gdy inne metody mogą zwracać wszystko.
  3. Konstruktory służą do ustawiania stanu początkowego, ale metody służą do wykonywania określonych działań.

81. Co to jest interfejs?

Interfejs w Javie to zbiór statycznych zmiennych końcowych i metod abstrakcyjnych, które definiują kontrakt lub umowę dotyczącą zestawu połączonych klas. Każda klasa implementująca interfejs musi implementować określony zestaw metod. Określa zachowanie, które klasa musi wykazywać, ale nie szczegóły dotyczące sposobu jej implementacji.

Składnia:

interface  {  // constant fields  // methds that are abstract by default }>

Przykład:

jak zdobyć gołębia łownego na Androida
Jawa
// Java Program to demonstrate Interface import java.io.*; interface Shape {  double getArea();  double getPerimeter(); } class Circle implements Shape {  private double radius;  public Circle(double radius) { this.radius = radius; }  public double getArea()  {  return Math.PI * radius * radius;  }  public double getPerimeter()  {  return 2 * Math.PI * radius;  } } class GFG {  public static void main(String[] args)  {  Circle circle = new Circle(5.0);  System.out.println('Area of circle is '  + circle.getArea());  System.out.println('Perimeter of circle is'  + circle.getPerimeter());  } }>

Wyjście
Area of circle is 78.53981633974483 Perimeter of circle is31.41592653589793>

82. Podaj kilka funkcji interfejsu.

Interfejs w języku programowania Java definiuje się jako typ abstrakcyjny używany do określenia zachowania klasy. Interfejs w Javie jest planem zachowania. Interfejs Java zawiera stałe statyczne i metody abstrakcyjne.

Funkcje interfejsu są wymienione poniżej:

  • Interfejs może pomóc w osiągnięciu całkowitej abstrakcji.
  • Pozwala nam używać wielu dziedziceń w Javie.
  • Każda klasa może implementować wiele interfejsów, nawet jeśli jedna klasa może rozszerzać tylko jedną klasę.
  • Służy również do uzyskania luźnego połączenia.

83. Co to jest interfejs znacznika?

Interfejs jest rozpoznawany jako pusty interfejs (bez pól i metod) i nazywany jest interfejsem znacznika. Przykładami interfejsów znaczników są interfejsy umożliwiające serializację, klonowanie i zdalne.

84. Jakie są różnice pomiędzy klasą abstrakcyjną a interfejsem?

Klasa abstrakcyjna i interfejs-768

Klasa abstrakcyjna

Klasa interfejsu

W klasie abstrakcyjnej można znaleźć zarówno metody abstrakcyjne, jak i nieabstrakcyjne.

Interfejs zawiera wyłącznie metody abstrakcyjne.

Klasa abstrakcyjna obsługuje metody Final.

Klasa interfejsu nie obsługuje metod Final.

Klasa abstrakcyjna nie obsługuje dziedziczenia wielokrotnego.

Klasa interfejsu obsługuje wielokrotne dziedziczenie.

Słowo kluczowe abstrakcyjne służy do deklarowania klasy abstrakcyjnej.

Słowo kluczowe interfejsu służy do deklarowania klasy interfejsu.

rozszerzyć Słowo kluczowe służy do rozszerzenia klasy abstrakcyjnej. przybory Słowo kluczowe służy do implementacji interfejsu.

Klasa abstrakcyjna ma członków takich jak chronione, prywatne itp.

Domyślnie wszyscy członkowie klasy są publiczni.

85. Co rozumiesz przez enkapsulację danych?

Enkapsulacja w Javie-300

Enkapsulacja danych to koncepcja właściwości OOPS i charakterystyk klas, które interfejs jest ze sobą powiązany. Zasadniczo łączy dane i metody działające na tych danych w ramach jednej jednostki. Hermetyzację osiąga się poprzez zadeklarowanie zmiennych instancji klasy jako prywatnych, co oznacza, że ​​można uzyskać do nich dostęp tylko wewnątrz klasy.

86. Jakie są zalety enkapsulacji w Javie?

Zalety enkapsulacji w Javie są wymienione poniżej:

  1. Ukrywanie danych: jest to sposób na ograniczenie dostępu naszych członków danych poprzez ukrycie szczegółów implementacji. Hermetyzacja umożliwia także ukrywanie danych. Użytkownik nie będzie miał pojęcia o wewnętrznej implementacji klasy.
  2. Większa elastyczność: możemy ustawić zmienne klasy tylko do odczytu lub tylko do zapisu, w zależności od naszych wymagań.
  3. Ponowne użycie: Hermetyzacja poprawia również możliwość ponownego użycia i można ją łatwo zmienić w przypadku nowych wymagań.
  4. Testowanie kodu jest łatwe: Kod jest łatwy do testowania pod kątem testów jednostkowych.

87. Jaka jest główna korzyść z enkapsulacji?

Główną zaletą enkapsulacji w Javie jest jej zdolność do ochrony wewnętrznego stanu obiektu przed zewnętrzną modyfikacją lub dostępem. Jest to sposób na ukrycie szczegółów implementacji klasy przed dostępem z zewnątrz i ujawnienie jedynie publicznego interfejsu, którego można używać do interakcji z klasą. Główną korzyścią jest umożliwienie kontroli i zarządzania stanem oraz zachowaniem obiektu, a jednocześnie zabezpieczenie go przed modyfikacjami i nieuprawnionym dostępem.

Przykład:

Jawa
// Java Program to demonstrate use of Encapsulation import java.io.*; class Person {  private String Name;  private int age;  public String getName() { return Name; }  public void setName(String Name) { this.Name = Name; }  public int getAge() { return age; }  public void setAge(int age) { this.age = age; } } // Driver class class GFG {  // main function  public static void main(String[] args)  {  Person p = new Person();  p.setName('Rohan');  p.setAge(29);  System.out.println('Name is ' + p.getName());  System.out.println('Age is ' + p.getAge());  } }>

Wyjście
Name is Rohan Age is 29>

88. Co rozumiesz przez agregację?

Agregacja w Javie

Agregacja to termin odnoszący się do relacji między dwiema klasami, którą najlepiej opisać jako relację ma-a. Ten rodzaj jest najbardziej wyspecjalizowaną wersją skojarzenia. Jest to skojarzenie jednokierunkowe, co oznacza, że ​​jest to relacja jednokierunkowa. Zawiera odniesienie do innej klasy i mówi się, że jest właścicielem tej klasy.

89. Jaka jest relacja „IS-A” w OOP Java?

„IS-A” to typ relacji w OOP Java, w którym jedna klasa dziedziczy inną klasę.

90. Zdefiniuj dziedziczenie.

Kiedy obiekt należący do podklasy nabywa wszystkie właściwości i zachowanie obiektu nadrzędnego pochodzącego z nadklasy, nazywa się to dziedziczeniem. Klasa w klasie nazywana jest podklasą, a ta druga nazywana jest nadklasą. Mówi się, że podklasa lub klasa potomna jest specyficzna, podczas gdy nadklasa lub klasa nadrzędna jest ogólna. Dziedziczenie zapewnia możliwość ponownego wykorzystania kodu.

91. Jakie są różne typy dziedziczenia w Javie?

Dziedziczenie to metoda, dzięki której klasa Child może dziedziczyć cechy klasy Super lub Parent. W Javie dziedziczenie występuje w czterech typach:

  • Pojedyncze dziedziczenie: Kiedy dziecko lub podklasa rozszerza tylko jedną nadklasę, mówimy o pojedynczym dziedziczeniu. Właściwości klasy pojedynczego rodzica są przekazywane do klasy podrzędnej.
  • Dziedziczenie wielopoziomowe: Kiedy dziecko lub podklasa rozszerza jakąkolwiek inną podklasę, tworzona jest hierarchia dziedziczenia, znana jako dziedziczenie wielopoziomowe. Innymi słowy, jedna podklasa staje się klasą nadrzędną drugiej.
  • Dziedziczenie hierarchiczne: Kiedy wiele podklas wywodzi się z tej samej klasy nadrzędnej, nazywa się to dziedziczeniem hierarchicznym. Innymi słowy, klasa mająca jednego rodzica ma wiele podklas.
  • Dziedziczenie wielokrotne: Kiedy klasa podrzędna dziedziczy z wielu klas nadrzędnych, nazywa się to dziedziczeniem wielokrotnym. W Javie obsługuje tylko wielokrotne dziedziczenie interfejsów, a nie klas.

92. Co to jest dziedziczenie wielokrotne? Czy jest obsługiwany przez Javę?

Składnik koncepcji obiektowej, znany jako wielokrotne dziedziczenie, umożliwia klasie dziedziczenie właściwości z wielu klas nadrzędnych. Gdy metody o tej samej sygnaturze występują zarówno w nadklasach, jak i podklasach, pojawia się problem. Osoba wywołująca metodę nie może określić kompilatorowi, która metoda klasy powinna zostać wywołana ani nawet której metodzie klasowej należy nadać pierwszeństwo.

Notatka: Java nie obsługuje dziedziczenia wielokrotnego

Przykład:

Jawa
// Java Program to show multiple Inheritance import java.io.*; interface Animal {  void eat(); } interface Mammal {  void drink(); } class Dog implements Animal, Mammal {  public void eat() { System.out.println('Eating'); }  public void drink() { System.out.println('Drinking'); }  void bark() { System.out.println('Barking'); } } class GFG {  public static void main(String[] args)  {  Dog d = new Dog();  d.eat();  d.drink();  d.bark();  } }>

Wyjście
Eating Drinking Barking>

93. Czym różni się dziedziczenie w C++ od Java?

Dziedziczenie w C++

Dziedziczenie w Javie

C++ pozwala użytkownikowi dziedziczyć wiele klas.Java nie obsługuje wielokrotnego dziedziczenia.
Kiedy klasa jest tworzona w C++, nie dziedziczy ona po klasie obiektowej, zamiast tego istnieje samodzielnie.Zawsze mówi się, że Java ma jedno dziedziczenie, ponieważ wszystkie klasy dziedziczą w taki lub inny sposób z klasy obiektowej.

94. Czy istnieją jakieś ograniczenia w korzystaniu z Dziedziczenia?

Tak, istnieją ograniczenia w używaniu dziedziczenia w Javie, ponieważ dzięki dziedziczeniu można dziedziczyć wszystko z superklasy i interfejsu, przez co podklasa jest zbyt skupiona i czasami podatna na błędy, gdy w pewnych sytuacjach wykonywane jest dynamiczne nadpisywanie lub dynamiczne przeciążenie.

95. Chociaż dziedziczenie jest popularną koncepcją OOP, jest mniej korzystne niż kompozycja. Wyjaśnić.

Dziedziczenie to popularna koncepcja programowania obiektowego (OOP), w której klasa może dziedziczyć właściwości i metody z dowolnej innej klasy, zwanej klasą nadrzędną lub nadklasą. Z drugiej strony w kompozycji klasa może zawierać instancję innej klasy jako zmienną składową, która jest często określana jako część lub komponent. Poniżej znajduje się kilka powodów, dla których kompozycja jest korzystniejsza niż dziedziczenie:

  • Ciasne sprzęgło: Ilekroć w nadklasie wprowadzane są jakiekolwiek zmiany, zmiany te mogą mieć wpływ na zachowanie wszystkich jej podklas lub podklas. Ten problem sprawia, że ​​kod jest mniej elastyczny, a także stwarza problemy podczas konserwacji. Problem ten prowadzi również do ścisłego powiązania pomiędzy klasami.
  • Problem delikatnej klasy bazowej: Kiedy zmiany w klasie bazowej mogą przerwać funkcjonalność jej klas pochodnych. Ten problem może utrudniać dodawanie nowych funkcji lub modyfikowanie istniejących. Problem ten jest znany jako problem klasy kruchej podstawy.
  • Ograniczone ponowne użycie: Dziedziczenie w Javie może prowadzić do ograniczonego ponownego wykorzystania kodu, a także jego powielania. Ponieważ podklasa dziedziczy wszystkie właściwości i metody swojej nadklasy, czasami może pojawić się niepotrzebny kod, który nie jest potrzebny. Prowadzi to do trudniejszej w utrzymaniu bazy kodu.

96. Czym jest stowarzyszenie?

Stowarzyszenie to relacja pomiędzy dwiema oddzielnymi klasami, ustanowiona poprzez ich Obiekty. Reprezentuje relację Has-A.

97. Co rozumiesz przez agregację?

Kompozycja jest ograniczoną formą agregacji, w której dwa podmioty są od siebie w dużym stopniu zależne. Reprezentuje część związek.

98. Jaki jest skład Javy?

Kompozycja implikuje związek, w którym dziecko nie może istnieć niezależnie rodzica. Na przykład ludzkie serce. Serce nie istnieje oddzielnie od człowieka.

99. Podaj różnicę pomiędzy kompozycją a agregacją.

Zbiór

Kompozycja

Definiuje relację pomiędzy obiektami

Reprezentuje część relacji

Obiekty są od siebie niezależne.

Obiekty są od siebie zależne.

Przedstaw go za pomocą wypełnionego diamentu.

Przedstaw go za pomocą pustego diamentu.

Obiekty podrzędne nie mają życia.

Obiekty podrzędne mają żywotność.

100. Czy konstruktor może być dziedziczony?

Nie, nie możemy dziedziczyć konstruktora.


101. Co to jest polimorfizm?

Polimorfizm definiuje się jako zdolność do przyjmowania więcej niż jednej formy. Jest on dwojakiego rodzaju, mianowicie polimorfizm w czasie kompilacji lub przeciążanie metody - funkcja wywoływana w czasie kompilacji. Weźmy na przykład klasę „obszar”. Na podstawie liczby parametrów może obliczyć pole kwadratu, trójkąta lub koła. Polimorfizm w czasie wykonywania lub nadpisywanie metod – łącza w czasie wykonywania. Metoda wewnątrz klasy zastępuje metodę klasy nadrzędnej.

102. Co to jest polimorfizm czasu wykonywania lub dynamiczne wysyłanie metod?

Dynamiczne wysyłanie metod to mechanizm rozstrzygający zastępowanie metod w czasie wykonywania. Nadpisywanie metod polega na tym, że metoda w podklasie ma tę samą nazwę, parametry i typ zwracany, co metoda w nadklasie. Kiedy przeciążana metoda jest wywoływana poprzez odwołanie do nadklasy, Java określa, która wersja (nadklasa lub podklasa) tej metody ma zostać wykonana, w oparciu o typ obiektu, do którego się odwołuje w momencie wywołania. Zatem decyzja jest podejmowana w czasie wykonywania. Nazywa się to dynamicznym wysyłaniem metod.

103. Co to jest nadpisywanie metod?

Nadpisywanie metod, znane również jako polimorfizm w czasie wykonywania, to takie, w którym klasa potomna zawiera tę samą metodę, co klasa nadrzędna. Na przykład w klasie nadrzędnej mamy metodę o nazwie „gfg()”. W podklasie ponownie zdefiniowano metodę gfg(). Zatem, gdy w podklasie zostanie wywołana funkcja gfg(), zostanie wykonana metoda należąca do klasy id. W tym przypadku funkcja gfg() w klasie zastąpiła metodę zewnętrzną.

104. Co to jest przeciążanie metody?

Przeciążanie w Javie-768

Nadpisywanie metod to metoda pozwalająca osiągnąć polimorfizm w czasie wykonywania w Javie. Nadpisywanie metod to funkcja, która pozwala klasie potomnej zapewnić specyficzną implementację metody, która jest już dostarczona przez jedną z jej klas nadrzędnych. Kiedy metoda w klasie podrzędnej ma tę samą nazwę, te same parametry lub sygnaturę i ten sam typ zwracany (lub podtyp) co metoda w klasie nadrzędnej, wówczas mówi się, że metoda w podklasie zastępuje metodę w superklasa.

105. Czy możemy zastąpić metodę statyczną?

Nie, ponieważ metody statyczne są częścią klasy, a nie obiektu, więc nie możemy ich zastąpić.

106. Czy możemy zastąpić przeciążoną metodę?

Tak, ponieważ przeciążona metoda jest zupełnie inną metodą w oczach kompilatora. Nadpisywanie to wcale nie to samo. Decyzja o tym, którą metodę wywołać, jest odkładana do czasu wykonania.

107. Czy możemy przeciążyć metodę main()?

Tak, w Javie możemy przeciążyć metodę główną, aby wywołać metodę główną za pomocą jej predefiniowanej metody wywołującej.

108. Co to jest przeciążanie i nadpisywanie metod?

Przeciążanie metody: Jest również znany jako polimorfizm czasu kompilacji. W przypadku przeciążania metod dwie lub więcej metod jest współużytkowanych w tej samej klasie z innym podpisem.

Przykład:

Jawa
// Java Program to demonstrate use of Method Overloading import java.io.*; class GFG {  static int multiply(int a, int b) { return a * b; }  static int multiply(int a, int b, int c)  {  return a * b * c;  }  static int multiply(int a, int b, int c, int d)  {  return a * b * c * d;  }  public static void main(String[] args)  {  System.out.println('multiply() with 2 parameters');  System.out.println(multiply(4, 5));  System.out.println('multiply() with 3 parameters');  System.out.println(multiply(2, 3, 4));  System.out.println('multiply() with 4 parameters');  System.out.println(multiply(2, 3, 4, 1));  } }>

Wyjście
multiply() with 2 parameters 20 multiply() with 3 parameters 24 multiply() with 4 parameters 24>

Zastępowanie metody: Przesłonięcie metody ma miejsce, gdy podklasa może zapewnić implementację metody, która jest już zdefiniowana w klasie nadrzędnej lub nadklasie. Zwracany typ, nazwa i argumenty muszą być podobne do metod w nadklasie.

Przykład:

Jawa
// Java Program to demonstrate use of Method Overriding import java.io.*; class Vehicle {  void drive()  {  System.out.println('drive() method of base class');  System.out.println('driving the Car.');  } } class Car extends Vehicle {  void drive()  {  System.out.println(  'drive() method of derived class');  System.out.println('Car is driving.');  } } class GFG {  public static void main(String[] args)  {  Car c1 = new Car();  Vehicle v1 = new Vehicle();  c1.drive();  v1.drive();  Vehicle vehicle = new Car();  // drive() method of Vehicle class is overridden by  // Car class drive()  vehicle.drive();  } }>

Wyjście
drive() method of derived class Car is driving. drive() method of base class driving the Car. drive() method of derived class Car is driving.>

Przeciążenie metody

Zastępowanie metody

Gdy dwie lub wiele metod należy do tej samej klasy z różnymi parametrami, ale o tej samej nazwie.

Gdy podklasa zapewnia własną implementację metody, która jest już zdefiniowana w klasie nadrzędnej.

Przeciążanie metod może mieć miejsce tylko w tej samej klasie lub pomiędzy podklasą lub klasą nadrzędną.

Zastępowanie metod może nastąpić tylko w podklasie.

Jeśli wystąpi błąd, jest on wychwytywany w czasie kompilacji programu.

Gdy wystąpi błąd, jest on wychwytywany w czasie wykonywania programu.

Przykład polimorfizmu czasu kompilacji.

Przykład polimorfizmu czasu wykonania.

Przeciążenie metody może, ale nie musi, wymagać dziedziczenia.

Przesłonięcie metody zawsze wymaga dziedziczenia.

Dzieje się to w ramach zajęć.

Jest ona wykonywana w dwóch klasach z zależnością dziedziczenia.

109. Czy możemy zastąpić metody prywatne?

W Javie nie można zastąpić metod prywatnych. Nadpisywanie metod polega na implementowaniu metody z podklasy zamiast metody z klasy nadrzędnej. Metody prywatne są dostępne tylko w klasie, w której są zadeklarowane. Ponieważ ta metoda nie jest widoczna dla innych klas i nie można uzyskać do niej dostępu, nie można jej zastąpić.

110. Czy w podklasie można zmienić zakres nadpisywanej metody?

W Javie nie można modyfikować zakresu przesłoniętej metody. Zasięg metody podklasy musi być równy lub większy niż zakres nadpisanej metody metody nadklasy. Na przykład przesłonięta metoda w podklasie może mieć zasięg publiczny lub bardziej dostępny, taki jak chroniony lub domyślny, jeśli zastąpiona metoda w nadklasie ma zasięg publiczny. Nie może jednak mieć bardziej ekskluzywnego zakresu, jak prywatny.

111. Czy możemy zmodyfikować klauzulę rzutów metody nadklasy, jednocześnie nadpisując ją w podklasie?

Możemy modyfikować klauzulę rzutów metody nadklasy z pewnymi ograniczeniami, możemy zmieniać klauzulę rzutów metody nadklasy jednocześnie nadpisując ją w podklasie. Metoda nadpisana podklasy może określać niesprawdzone wyjątki tylko wtedy, gdy metoda nadklasy nie deklaruje żadnych wyjątków. Jeśli metoda nadklasy zadeklaruje wyjątek, metoda podklasy może zadeklarować ten sam wyjątek, wyjątek podklasy lub nie zadeklarować żadnego wyjątku. Jednakże metoda podklasy nie może zadeklarować wyjątku nadrzędnego, który jest szerszy niż wyjątek zadeklarowany w metodzie nadklasy.

112. Czy w Javie można mieć funkcje wirtualne?

Tak, Java obsługuje funkcje wirtualne. Funkcje są domyślnie wirtualne i można je uczynić niewirtualnymi za pomocą słowa kluczowego final.

113. Czym jest abstrakcja?

Abstrakcja odnosi się do aktu przedstawiania podstawowych cech bez uwzględnienia szczegółów tła. Szczegółowe informacje lub implementacja są ukryte. Najczęstszym przykładem abstrakcji jest samochód, wiemy jak uruchomić silnik, przyspieszyć i ruszyć, jednak sposób działania silnika, a jego wewnętrzne podzespoły to złożona logika ukryta przed zwykłymi użytkownikami. Zwykle robi się to, aby poradzić sobie ze złożonością.

114. Co to jest klasa abstrakcyjna?

Nie można utworzyć instancji klasy zadeklarowanej jako abstrakcyjna, co oznacza, że ​​nie można utworzyć obiektu. Może zawierać metody abstrakcyjne lub nie, ale jeśli klasa ma co najmniej jedną metodę abstrakcyjną, musi zostać zadeklarowana jako abstrakcyjna.

Przykład klasy abstrakcyjnej z metodą abstrakcyjną:

Jawa
// Java Program to implement // abstract method import java.io.*; // Abstract class abstract class Fruits {  abstract void run(); } // Driver Class class Apple extends Fruits {  void run()  {  System.out.println('Abstract class example');  }  // main method  public static void main(String args[])  {  Fruits obj = new Apple();  obj.run();  } }>

115. Kiedy stosuje się metody abstrakcyjne?

Metodę abstrakcyjną stosujemy, gdy chcemy użyć metody, ale chcemy, aby klasy potomne decydowały o implementacji. W takim przypadku używamy metod abstrakcyjnych z klasami nadrzędnymi.

116. Jak uniknąć serializacji w klasie potomnej, jeśli klasa bazowa implementuje interfejs Serializable?

Serializacja w klasie potomnej, jeśli klasa bazowa implementuje interfejs Serializable, możemy jej uniknąć, definiując metodę writeObject() i zgłaszając NotSerializableException().

117. Co to jest framework zbierania w Javie?

Kolekcje to jednostki obiektów w Javie. Struktura kolekcji to zestaw interfejsów i klas w Javie, które służą do reprezentowania kolekcji obiektów i manipulowania nimi na różne sposoby. Struktura kolekcji zawiera klasy (ArrayList, Vector, LinkedList, PriorityQueue, TreeSet) i wiele interfejsów (Set, List, Queue, Deque), gdzie każdy interfejs służy do przechowywania określonego typu danych.

118. Wyjaśnij różne interfejsy używane w frameworku Collection.

Implementuje strukturę kolekcji

  1. Interfejs kolekcji
  2. Interfejs listy
  3. Ustaw interfejs
  4. Interfejs kolejki
  5. I interfejs
  6. Interfejs mapy

Interfejs kolekcji: Kolekcja to podstawowy dostępny interfejs, który można zaimportować za pomocą Java.util.Collection.

Składnia:

public interface Collection extends iterable>

119. Jak zsynchronizować listę ArrayList w Javie?

ArrayList można synchronizować za pomocą dwóch metod wymienionych poniżej:

  1. Korzystanie z Collections.synchronizedList()
  2. Korzystanie z CopyOnWriteArrayList

Używanie Collections.synchronizedList():

public static List synchronizedList(List list)>

Korzystanie z CopyOnWriteArrayList:

  1. Utwórz pustą listę.
  2. Implementuje interfejs List
  3. Jest to bezpieczny dla wątków wariant ArrayList
  4. T oznacza rodzaj

120. Dlaczego potrzebujemy zsynchronizowanej listy ArrayList, skoro mamy wektory (które są zsynchronizowane) w Javie?

ArrayList jest potrzebna nawet wtedy, gdy mamy wektory z pewnych powodów:

  1. ArrayList jest szybszy niż Vectors.
  2. ArrayList obsługuje wielowątkowość, podczas gdy Vectors obsługuje tylko użycie jednego wątku.
  3. ArrayList jest bezpieczniejszy w użyciu, ponieważ Vectors obsługuje pojedyncze wątki, a poszczególne operacje są mniej bezpieczne i synchronizacja zajmuje więcej czasu.
  4. Wektory są w Javie uważane za przestarzałe ze względu na ich zsynchronizowany charakter.

121. Dlaczego nie możemy stworzyć ogólnej tablicy?

Nie można utworzyć tablic ogólnych, ponieważ an szyk niesie typ informacji o jego elementach w czasie wykonywania, dlatego w czasie wykonywania zgłasza „ArrayStoreException”, jeśli typ elementów nie jest podobny. Ponieważ informacje o typie ogólnym są usuwane w czasie kompilacji przez wymazanie typu, sprawdzenie magazynu tablicowego zostałoby zaliczone tam, gdzie powinno zakończyć się niepowodzeniem.

122. Ciągłe komórki pamięci są zwykle używane do przechowywania rzeczywistych wartości w tablicy, ale nie w ArrayList. Wyjaśnić.

Elementy tablicy przechowywane są w sąsiadujących lokalizacjach pamięci, co oznacza, że ​​każdy element jest przechowywany w oddzielnym bloku, na podstawie którego znajduje się on w tablicy. Ponieważ elementy tablicy są przechowywane w sąsiadujących lokalizacjach, dostęp do dowolnego elementu na podstawie jego indeksu może być stosunkowo łatwy, ponieważ adres elementu można obliczyć na podstawie lokalizacji elementu. Jednak Java implementuje ArrayLists jako tablice dynamiczne, co oznacza, że ​​rozmiar może się zmieniać w miarę usuwania lub dodawania elementów. Elementy ArrayList nie są przechowywane w sąsiadujących lokalizacjach pamięci, aby uwzględnić tę dynamiczną naturę. Zamiast tego ArrayList korzysta z metody znanej jako tablica rozwijalna, w której podstawowa tablica jest rozszerzana do większego rozmiaru w razie potrzeby, a elementy są następnie kopiowane do nowej lokalizacji. W przeciwieństwie do ArrayList, która ma dynamiczny rozmiar i nie przechowuje swoich elementów w sąsiadujących lokalizacjach pamięci, tablica ma stały rozmiar i jej elementy są tam przechowywane.

123. Wyjaśnij metodę konwersji ArrayList na Array i Array na ArrayList.

Konwersja listy na ArrayList

Istnieje wiele metod konwersji listy na ArrayList

Konwertuj tablicę na listę tablic 768

Programiści mogą konwertować tablicę na ArrayList za pomocą metody asList() klasy Arrays. Jest to metoda statyczna klasy Arrays akceptująca obiekt List.

Składnia:

Arrays.asList(item)>

Przykład:

Jawa
// Java program to demonstrate conversion of // Array to ArrayList of fixed-size. import java.util.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  String[] temp = { 'Abc', 'Def', 'Ghi', 'Jkl' };  // Conversion of array to ArrayList  // using Arrays.asList  List conv = Arrays.asList(temp);  System.out.println(conv);  } }>

Wyjście
[Abc, Def, Ghi, Jkl]>

Konwersja ArrayList na Array

Konwertuj-ArrayList-na-Array-768

Programiści Java mogą konwertować ArrayList na

Składnia:

List_object.toArray(new String[List_object.size()])>

Przykład:

Jawa
// Java program to demonstrate working of // Objectp[] toArray() import java.io.*; import java.util.List; import java.util.ArrayList; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // List declared  List<Integer>  arr = new ArrayList<Integer>();  arr.add(1);  arr.add(2);  arr.add(3);  arr.add(2);  arr.add(1);  // Conversion  Object[] objects = arr.toArray();  // Printing array of objects  for (Object obj : objects)  System.out.print(obj + ' ');  } }>

Wyjście
1 2 3 2 1>

124. Jak dynamicznie rośnie wielkość ArrayList? Podaj także, w jaki sposób jest to wdrażane wewnętrznie.

Ze względu na tablicowy charakter ArrayLists, rośnie on dynamicznie, zapewniając, że zawsze jest wystarczająco dużo miejsca na elementy. Kiedy element ArrayList jest tworzony po raz pierwszy, domyślna pojemność wynosi około 10-16 elementów, co zasadniczo zależy od wersji Java. Elementy ArrayList są kopiowane z oryginalnej tablicy do nowej tablicy, gdy pojemność oryginalnej tablicy jest pełna. W miarę dynamicznego wzrostu rozmiaru ArrayList klasa tworzy nową tablicę o większych rozmiarach i kopiuje wszystkie elementy ze starej tablicy do nowej. Teraz odwołanie do nowej tablicy jest używane wewnętrznie. Ten proces dynamicznego powiększania tablicy nazywany jest zmianą rozmiaru.

125. Co to jest wektor w Javie?

Wektory w Javie są podobne i mogą przechowywać w sobie wiele elementów. Wektory podlegają pewnym zasadom wymienionym poniżej:

  1. Wektory można importować za pomocą Java.util.Vector.
  2. Wektor jest implementowany przy użyciu dynamicznej tablicy, gdy rozmiar wektora zwiększa się i zmniejsza w zależności od wstawionych do niego elementów.
  3. Elementy wektora wykorzystujące numery indeksowe.
  4. Wektory mają charakter zsynchronizowany, co oznacza, że ​​wykorzystują tylko jeden wątek (w danym momencie wykonywany jest tylko jeden proces).
  5. Wektor zawiera wiele metod, które nie są częścią struktury kolekcji.

Składnia:

Vector gfg = new Vector(size, increment);>

126. Jak ustawić Java ArrayList jako tylko do odczytu?

ArrayList można przygotować tylko przy użyciu metody dostarczonej przez Kolekcje przy użyciu metody Collections.unmodinateList().

Składnia:

array_readonly = Collections.unmodifiableList(ArrayList);>

Przykład:

Jawa
// Java program to demonstrate // unmodifiableList() method import java.util.*; public class Main {  public static void main(String[] argv) throws Exception  {  try {  // creating object of ArrayList  <Character> ArrayList<Character>  temp  = new ArrayList<Character>();  // populate the list  temp.add('X');  temp.add('Y');  temp.add('Z');  // printing the list  System.out.println('Initial list: ' + temp);  // getting readonly list  // using unmodifiableList() method  List<Character>  new_array  = Collections.unmodifiableList(temp);  // printing the list  System.out.println('ReadOnly ArrayList: '  + new_array);  // Adding element to new Collection  System.out.println('
If add element in '  + ' the ReadOnly ArrayList');  new_array.add('A');  }  catch (UnsupportedOperationException e) {  System.out.println('Exception is thrown : '  + e);  }  } }>

Wyjście
Initial list: [X, Y, Z] ReadOnly ArrayList: [X, Y, Z] If add element in the ReadOnly ArrayList Exception is thrown : java.lang.UnsupportedOperationException>

127. Co to jest kolejka priorytetowa w Javie?

Kolejka priorytetowa-768

Kolejka priorytetowa to abstrakcyjny typ danych podobny do zwykłej struktury danych kolejki lub stosu. Elementy przechowywane w elementach zależą od priorytetu określonego od niskiego do wysokiego. PriorityQueue opiera się na stercie priorytetów.

Składnia:

Jawa
// Java program to demonstrate the // working of PriorityQueue import java.util.*; class PriorityQueueDemo {  // Main Method  public static void main(String args[])  {  // Creating empty priority queue  PriorityQueue<Integer>  var1  = new PriorityQueue<Integer>();  // Adding items to the pQueue using add()  var1.add(10);  var1.add(20);  var1.add(15);  // Printing the top element of PriorityQueue  System.out.println(var1.peek());  } }>

Wyjście
10>

128. Wyjaśnij klasę LinkedList.

Klasa LinkedList to Java, która używa podwójnie połączonej listy do przechowywania elementów. Dziedziczy klasę AbstractList i implementuje interfejsy List i Deque. Właściwości klasy LinkedList są wymienione poniżej:

  1. Klasy LinkedList nie są zsynchronizowane.
  2. Zachowuje kolejność wstawiania.
  3. Można go używać jako listy, stosu lub kolejki.

Składnia:

LinkedList list_name=new LinkedList();>

129. Czym jest klasa Stack w Javie i jakie różne metody udostępnia?

Klasa Stack w Javie to struktura danych LIFO, która implementuje strukturę danych Last In First Out. Wywodzi się z klasy Vector, ale ma funkcje specyficzne dla stosów. Klasa Stack w Javie udostępnia następujące metody:

  • zerkać(): zwraca najwyższy element stosu bez jego usuwania
  • pusty(): zwraca wartość true, jeśli stos jest pusty, i false w przeciwnym razie
  • naciskać(): wypycha przedmiot na górę stosu
  • Muzyka pop(): usuwa i zwraca wierzchni element ze stosu
  • szukaj(): zwraca pozycję obiektu na górze stosu w oparciu o 1. Jeśli obiektu nie ma na stosie, zwraca -1

130. Co jest ustawione w frameworku Java Collections i wypisz jego różne implementacje?

Zestawy to kolekcje, które nie przechowują zduplikowanych elementów. Nie zachowują żadnej kolejności elementów. Struktura Java Collections udostępnia kilka implementacji interfejsu Set, w tym:

  • Zestaw skrótów: HashSet w Javie przechowuje elementy w tabeli has, która zapewnia szybsze wyszukiwanie i szybsze wstawianie. HashSet nie jest uporządkowany.
  • Połączony zestaw Hash: LinkedHashSet to implementacja HashSet, która utrzymuje kolejność wstawiania elementów.
  • Zestaw drzew: TreeSet przechowuje elementy w posortowanej kolejności określonej przez naturalne uporządkowanie elementów lub przez niestandardowy komparator dostarczony w momencie tworzenia.

131. Czym jest klasa HashSet w Javie i jak przechowuje elementy?

Klasa HashSet implementuje interfejs Set w środowisku Java Collections Framework i jest członkiem klasy HashSet. W przeciwieństwie do zduplikowanych wartości przechowuje zbiór odrębnych elementów. W tej implementacji każdy element jest mapowany na indeks w tablicy przy użyciu funkcji skrótu, a indeks służy do szybkiego dostępu do elementu. Tworzy indeks elementu w tablicy, w której jest on przechowywany, na podstawie elementu wejściowego. Zakładając, że funkcja skrótu odpowiednio rozdziela elementy pomiędzy segmenty, klasa HashSet zapewnia stałą wydajność w przypadku podstawowych operacji (dodawanie, usuwanie, zawieranie i rozmiar).

132. Co to jest LinkedHashSet w Java Collections Framework?

LinkedHashSet to uporządkowana wersja Hashset utrzymywana przez podwójnie połączoną listę pomiędzy wszystkimi elementami. Jest to bardzo pomocne, gdy wymagana jest kolejność iteracji. Podczas iteracji w LinkedHashSet elementy są zwracane w tej samej kolejności, w jakiej zostały wstawione.

Składnia:

LinkedHashSet hs = new LinkedHashSet();>

Przykład:

Jawa
// Java Program to implement // LinkedHashSet import java.io.*; import java.util.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // LinkedHashSet declared  LinkedHashSet<Integer>  hs = new LinkedHashSet<Integer>();  // Add elements in HashSet  hs.add(1);  hs.add(2);  hs.add(5);  hs.add(3);  // Print values  System.out.println('Values:' + hs);  } }>

Wyjście
Values:[1, 2, 5, 3]>

133. Co to jest interfejs mapy w Javie?

Interfejs mapy w Javie-660

Interfejs mapy jest obecny w kolekcji Java i może być używany z pakietem Java.util. Interfejs mapy służy do mapowania wartości w formie pary klucz-wartość. Mapa zawiera wszystkie unikalne klucze. Zapewnia także powiązane z nim metody, takie jak zawieraKey(), zawiera wartość () itp.

W interfejsie mapy dostępnych jest wiele typów map, jak wspomniano poniżej:

  1. Posortowana mapa
  2. Mapa Drzewa
  3. HashMapa
  4. Połączona mapa Hash

134. Wyjaśnij mapę drzewa w Javie

TreeMap to typ mapy przechowujący dane w postaci pary klucz-wartość. Jest on realizowany przy użyciu czerwono-czarnego drzewa. Funkcje TreeMap to:

  1. Zawiera wyłącznie unikalne elementy.
  2. Nie może mieć klucza NULL
  3. Może mieć wiele wartości NULL.
  4. Jest niezsynchronizowany.
  5. Zachowuje porządek rosnący.

135. Co to jest EnumSet?

EnumSet to wyspecjalizowana implementacja interfejsu Set do użytku z typem wyliczeniowym. Kilka funkcji EnumSet to:

  1. Jest niezsynchronizowany.
  2. Szybszy niż HashSet.
  3. Wszystkie elementy w EnumSet muszą pochodzić z jednego typu wyliczeniowego.
  4. Nie zezwala na obiekty o wartości null i zgłasza wyjątek NullPointerException w przypadku wyjątków.
  5. Używa iteratora odpornego na awarie.

Składnia:

public abstract class EnumSet>

Parametr: E określa elementy.

136. Co to jest kolejka blokowania?

Blokowanie kolejki-768

Kolejka blokująca to kolejka obsługująca operacje polegające na oczekiwaniu, aż kolejka nie będzie pusta podczas pobierania i usuwania elementu oraz oczekiwaniu na zwolnienie miejsca w kolejce podczas dodawania elementu.

Składnia:

public interface BlockingQueue extends Queue>

Parametry: E to typ elementów przechowywanych w kolekcji

137. Co to jest ConcurrentHashMap w Javie i czy ją implementujesz?

ConcurrentHashMap jest implementowany przy użyciu Hashtable.

Składnia:

public class ConcurrentHashMap  extends AbstractMap  implements ConcurrentMap, Serializable>

Parametry : K jest kluczem Typ obiektu, a V jest wartością Typ obiektu

138. Czy możesz użyć dowolnej klasy jako klucza mapy?

Tak, możemy użyć dowolnej klasy jako klucza mapy, jeśli będzie ona przestrzegać pewnych predefiniowanych zasad wymienionych poniżej:

  1. Klasa przesłaniająca metodę równości() musi także przesłaniać metodę hashCode().
  2. Klasa concurrentHashMap jest bezpieczna dla wątków.
  3. Domyślny poziom współbieżności ConcurrentHashMap to 16.
  4. Wstawianie obiektów null w ConcurrentHashMap nie jest możliwe jako klucz ani jako wartość.

139. Co to jest iterator?

Iterator w Javie-768

Interfejs Iteratora zapewnia metody iteracji po dowolnej kolekcji w Javie. Iterator zastępuje wyliczenie w środowisku Java Collections Framework. Może pobrać instancję iteratora z kolekcji za pomocą metody _iterator()_. Umożliwia także wywołującemu usuwanie elementów z podstawowej kolekcji podczas iteracji.

140. Co to jest wyliczenie?

Wyliczenie to typ danych zdefiniowany przez użytkownika. Stosowany jest głównie do przypisywania nazw stałym całkowitym, nazwy sprawiają, że program jest łatwy do odczytania i utrzymania. Głównym celem wyliczenia jest zdefiniowanie typów danych zdefiniowanych przez użytkownika.

Przykład:

// A simple enum example where enum is declared  // outside any class (Note enum keyword instead of  // class keyword)  enum Color  {   RED, GREEN, BLUE;  }>

141. Jaka jest różnica między kolekcją a kolekcjami?

Kolekcja

Kolekcje

Kolekcja jest interfejsem.

Kolekcje to klasa.

Zapewnia standardową funkcjonalność struktury danych.

Służy do sortowania i synchronizowania elementów kolekcji.

Podaje metody, które można zastosować do struktury danych.

Zapewnia metody statyczne, które można wykorzystać do różnych operacji.

142. Rozróżnij Array i ArrayList w Javie.

Szyk

Lista tablic

Jednowymiarowe lub wielowymiarowe

Jednowymiarowy

Dla i dla każdego użytego do iteracji

Tutaj iterator służy do przechodzenia przez riverArrayList

słowo kluczowe długość zwraca rozmiar tablicy.

size() służy do obliczania rozmiaru ArrayList.

Tablica ma stały rozmiar.

Rozmiar ArrayList jest dynamiczny i w razie potrzeby można go zwiększać lub zmniejszać.

Jest szybszy, jak powyżej widzimy, że ma stały rozmiar

Jest stosunkowo wolniejszy ze względu na swój dynamiczny charakter

Prymitywne typy danych można przechowywać bezpośrednio w nieprawdopodobnych obiektach.

Prymitywne typy danych nie są dodawane bezpośrednio do nieprawdopodobnych tablic, są dodawane pośrednio za pomocą autoboxingu i unboxingu

Nie można ich tutaj dodać, dlatego typ jest niebezpieczny.

Można je tutaj dodać, dzięki czemu ArrayList jest bezpieczny dla typu.

Operator przypisania służy jedynie temu celowi

Tutaj używana jest specjalna metoda znana jako metoda add().

143. Jaka jest różnica między tablicą a kolekcją w Javie?

Szyk

Kolekcje

Tablica w Javie ma stały rozmiar.

Kolekcje w Javie mają dynamiczne rozmiary.

W tablicy elementy są przechowywane w sąsiadujących lokalizacjach pamięci.

W kolekcjach elementy niekoniecznie są przechowywane w sąsiadujących lokalizacjach pamięci.

Obiekty i prymitywne typy danych mogą być przechowywane w tablicy.

Obiekty możemy przechowywać wyłącznie w kolekcjach.

Aby zmienić rozmiar tablicy, wymagana jest ręczna manipulacja.

Zmiana rozmiaru w kolekcjach odbywa się automatycznie.

Tablica posiada podstawowe metody manipulacji.

Kolekcje mają zaawansowane metody manipulacji i iteracji.

Tablica jest dostępna od początków Java.

Kolekcje zostały wprowadzone w Javie 1.2.

144. Różnica pomiędzy ArrayList i LinkedList.

Lista tablic

Połączona lista

ArrayList jest zaimplementowany jako rozwijalna tablica.

LinkedList jest zaimplementowana jako lista podwójnie połączona.

W ArrayList elementy są przechowywane w sąsiadujących lokalizacjach pamięci

Elementy LinkedList są przechowywane w nieciągłych lokalizacjach pamięci, ponieważ każdy element ma odniesienie do następnego i poprzedniego elementu.

ArrayLists są szybsze w przypadku dostępu losowego.

LinkedLists są szybsze w przypadku operacji wstawiania i usuwania

ArrayLists są bardziej wydajne pod względem pamięci.

LinkedList jest mniej wydajny pod względem pamięci

ArrayLists Zużywa więcej pamięci ze względu na utrzymanie rozmiaru tablicy.

LinkedList Zużywa mniej pamięci, ponieważ zawiera tylko odniesienia do elementów

Operacja wyszukiwania jest szybsza w ArrayList.

Operacja wyszukiwania jest wolniejsza w LinkedList

145. Rozróżnij ArrayList od Vector w Javie.

Lista tablic

Wektor

ArrayLists są zaimplementowane jako tablica rozwijalna.

Vector jest zaimplementowany jako tablica z możliwością rozbudowy.

ArrayList nie jest zsynchronizowany.

Wektor jest zsynchronizowany.

ArrayLists są szybsze w przypadku operacji niewspółbieżnych.

Vector jest wolniejszy w przypadku operacji niewspółbieżnych ze względu na dodatkowy narzut związany z synchronizacją.

ArrayLists zostały wprowadzone w Javie 1.2.

Wektor został wprowadzony w JDK 1.0.

Zalecane do stosowania w środowisku jednowątkowym.

Wektory są zalecane do stosowania w środowisku wielowątkowym.

Domyślna początkowa pojemność ArrayLists to 10.

W wektorach domyślna pojemność początkowa wynosi 10, ale domyślny przyrost jest dwukrotnie większy.

Wydajność ArrayList jest wysoka.

Wydajność wektorowa jest niska.

146. Jaka jest różnica między Iteratorem a ListIteratorem?

Iterator

ListIterator

Może przechodzić przez elementy obecne w Kolekcji tylko w kierunku do przodu.

Może przemieszczać się po elementach znajdujących się w Kolekcji zarówno w przód, jak i w tył.

Służy do przeglądania mapy, listy i zestawu.

Można przeglądać tylko Listę, a nie pozostałe dwie.

Indeksów nie można uzyskać za pomocą Iteratora

Posiada metody takie jak nextIndex() i poprzedniIndex(), aby uzyskać indeksy elementów w dowolnym momencie podczas przeglądania listy.

Nie można modyfikować ani zastępować elementów znajdujących się w kolekcji

Potrafi modyfikować lub zastępować elementy za pomocą set(E e)

Nie można dodać elementów, a także zgłasza wyjątek ConcurrentModificationException.

W dowolnym momencie można łatwo dodawać elementy do kolekcji.

Niektóre metody Iteratora to next(), Remove() i hasNext().

Niektóre metody ListIteratora to next(), poprzedni(), hasNext(), hasPrevious(), add(E e).

147. Rozróżnij HashMap od HashTable.

HashMapa

Tabela Hash

HashMap nie jest zsynchronizowany

HashTable jest zsynchronizowany

Jeden klucz może mieć wartość NULL

Wartości NULL są niedozwolone

Iterator służy do przechodzenia przez HashMap.

Można używać zarówno Iteratora, jak i Enumertara

HashMap jest szybszy.

HashTable jest wolniejszy w porównaniu do HashMap.

148. Jaka jest różnica między iteratorem a wyliczeniem?

Iterator

Wyliczenie

losowy w c

Iterator może przechodzić zarówno przez starsze, jak i niestare elementy.

Wyliczenie może przechodzić tylko starsze elementy.

Iterator jest niezawodny.

Wyliczenie nie jest niezawodne.

Iteratory są wolniejsze.

Wyliczenie jest szybsze.

Iterator może wykonać operację usuwania podczas przechodzenia przez kolekcję.

Wyliczenie może wykonywać tylko operacje przechodzenia na kolekcji.

149. Jaka jest różnica między porównywalnym a porównywalnym?

Porównywalny

Komparator

Interfejs znajduje się w pakiecie java.lang.

Interfejs znajduje się w pakiecie java.util.

Udostępnia metodę CompareTo() do sortowania elementów.

Udostępnia metodę Compare() do sortowania elementów.

Zapewnia pojedyncze sekwencje sortowania.

Zapewnia wiele sekwencji sortowania.

Logika sortowania musi należeć do tej samej klasy, której obiekt chcesz sortować.

Logika sortowania powinna znajdować się w osobnej klasie, aby pisać różne sortowanie w oparciu o różne atrybuty obiektów.

Metoda sortuje dane według ustalonego porządku sortowania.

Metoda sortuje dane według dostosowanej kolejności sortowania.

Wpływa na oryginalną klasę.

Nie ma to wpływu na oryginalną klasę.

Często implementowane w interfejsie API przez klasy Calendar, Wrapper, Date i String.

Jest zaimplementowany do sortowania instancji klas innych firm.

150. Jaka jest różnica między zestawem a mapą?

Ustawić

Mapa

Interfejs Set jest zaimplementowany przy użyciu pakietu java.util.

Mapa jest zaimplementowana przy użyciu pakietu java.util.

Może rozszerzyć interfejs kolekcji.

Nie rozszerza interfejsu kolekcji.

Nie pozwala na powielanie wartości.

Pozwala na zduplikowanie wartości.

Zestaw może sortować tylko jedną wartość null.

Mapa może sortować wiele wartości null.

Pytania do rozmowy kwalifikacyjnej na poziomie średnio zaawansowanym w języku Java

151. Wyjaśnij iterator FailFast i FailSafe wraz z przykładami każdego z nich.

Iterator FailFast to iterator, który generuje a Wyjątek ConcurrentModificationException jeśli wykryje, że bazowa kolekcja została zmodyfikowana podczas używania iteratora. Jest to domyślne zachowanie iteratorów w środowisku Java Collections Framework. Na przykład iteratorem dla HashMap jest FailFast.

Przykład:

Jawa
// Java Program to demonstrate FailFast iterator import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; class GFG {  public static void main(String[] args)  {  HashMap<Integer, String> map = new HashMap<>();  map.put(1, 'one');  map.put(2, 'two');  Iterator<Map.Entry<Integer, String> > iterator  = map.entrySet().iterator();  while (iterator.hasNext()) {  Map.Entry<Integer, String> entry  = iterator.next();  // this will throw a  // ConcurrentModificationException  if (entry.getKey() == 1) {  map.remove(1);  }  }  } }>

Wyjście:

Exception in thread 'main' java.util.ConcurrentModificationException>

Iterator FailSafe nie generuje a Wyjątek ConcurrentModificationException jeśli podstawowa kolekcja zostanie zmodyfikowana podczas używania iteratora. Alternatywnie tworzy migawkę kolekcji w momencie tworzenia iteratora i wykonuje iterację po migawce. Na przykład iterator dla ConcurrentHashMap to FailSafe.

Przykład:

Jawa
// Java Program to demonstrate FailSafe import java.io.*; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; class GFG {  public static void main(String[] args)  {  ConcurrentHashMap<Integer, String> map  = new ConcurrentHashMap<>();  map.put(1, 'one');  map.put(2, 'two');  Iterator<Map.Entry<Integer, String> > iterator  = map.entrySet().iterator();  while (iterator.hasNext()) {  Map.Entry<Integer, String> entry = iterator.next();  // this will not throw an exception  if (entry.getKey() == 1) {  map.remove(1);  }  }  } }>

152. Co to jest obsługa wyjątków?

Jakiś Wyjątek to Zdarzenie, które zakłóca normalny przebieg programu i wymaga specjalnego przetwarzania. Podczas wykonywania programu błędy i nieplanowane zdarzenia można rozwiązać, korzystając z mechanizmu obsługi wyjątków Java. Poniżej znajduje się kilka powodów występowania wyjątków w Javie:

  • Awaria urządzenia
  • Utrata połączenia sieciowego
  • Błędy kodu
  • Otwieranie niedostępnego pliku
  • Nieprawidłowe dane wprowadzone przez użytkownika
  • Ograniczenia fizyczne (brak pamięci na dysku)

153. Ile typów wyjątków może wystąpić w programie Java?

Typy wyjątków w Javie-660

Generalnie w Javie istnieją dwa typy wyjątków:

  • Wbudowane wyjątki: Wbudowane wyjątki w Javie są udostępniane przez Biblioteki Java. Wyjątki te można dalej podzielić na dwie podkategorie, tj. wyjątki zaznaczone i niesprawdzone. Poniżej znajdują się niektóre wbudowane wyjątki w Javie:
    • Wyjątki ArrayIndexOutOfBounds
    • Klasa nie znaleziono wyjątku
    • Wyjątek FileNotFoundException
    • Wyjątek IO
    • Wyjątek NullPointer
    • Wyjątek arytmetyczny
    • Przerwany wyjątek
    • Wyjątek czasu wykonania
  • Wyjątki zdefiniowane przez użytkownika: Wyjątki zdefiniowane przez użytkownika są definiowane przez samych programistów w celu obsługi określonych sytuacji lub błędów, które nie są objęte wbudowanymi wyjątkami. Aby zdefiniować wyjątki zdefiniowane przez użytkownika, należy zdefiniować nową klasę rozszerzającą odpowiednią klasę wyjątków. Wyjątki zdefiniowane przez użytkownika w Javie są używane, gdy wbudowane wyjątki są w Javie.

154. Różnica między błędem a wyjątkiem.

Błędy

Wyjątki

Odzyskiwanie po błędach nie jest możliwe.

Odzyskiwanie po wyjątkach, używając bloku try-catch lub zgłaszając wyjątki z powrotem do osoby wywołującej.

Wszystkie błędy w Javie są niesprawdzonymi typami.

Obejmuje zarówno zaznaczone, jak i niesprawdzone typy, które występują.

Błędy są najczęściej spowodowane przez środowisko, w którym program jest uruchomiony.

Program jest głównie odpowiedzialny za powodowanie wyjątków.

Błędy mogą wystąpić zarówno w czasie kompilacji, jak i w czasie wykonywania. Czas kompilacji: błąd składni, czas wykonania: błąd logiczny.

Wszystkie wyjątki występują w czasie wykonywania, ale sprawdzone wyjątki są znane kompilatorowi, podczas gdy niesprawdzone nie.

Są one zdefiniowane w pakiecie java.lang.Error.

Są one zdefiniowane w pakiecie java.lang.Exception

Przykłady : java.lang.StackOverflowError, java.lang.OutOfMemoryError

Przykłady : Zaznaczone Wyjątki: SQLException, IOException Niezaznaczone wyjątki: ArrayIndexOutOfBoundException, NullPointerException, ArithmeticException.

155. Wyjaśnij hierarchię klas wyjątków Java.

Obsługa wyjątków-768

Wszystkie typy wyjątków i błędów w Javie są podklasami klasy rzucalnej, która jest klasą bazową hierarchii. Klasa ta jest następnie używana w przypadku wyjątkowych warunków, które powinny przechwycić programy użytkownika. NullPointerException jest przykładem takiego wyjątku. Kolejna gałąź, błąd jest używany przez system wykonawczy Java do wskazywania błędów związanych ze środowiskiem JRE. StackOverflowError jest przykładem jednego z takich błędów.

156. Wyjaśnij wyjątki w czasie wykonywania.

Wyjątki czasu wykonywania to wyjątki występujące podczas wykonywania kodu, w przeciwieństwie do wyjątków czasu kompilacji, które występują podczas kompilacji. Wyjątki środowiska wykonawczego są wyjątkami niesprawdzonymi, ponieważ nie są uwzględniane przez maszynę JVM.

Przykłady wyjątków wykonawczych w Javie obejmują:

  • NullPointerException: Dzieje się tak, gdy aplikacja próbuje użyć odwołania do obiektu o wartości null.
  • ArrayIndexOutOfBoundsException: Dzieje się tak, gdy aplikacja próbuje uzyskać dostęp do indeksu tablicy, który jest poza dopuszczalnym zakresem.
  • ArithmeticException: Dzieje się tak, gdy aplikacja próbuje podzielić przez zero.
  • IllegalArgumentException: Dzieje się tak, gdy metoda jest przekazywana na podstawie nielegalnego lub niewłaściwego argumentu.

W przeciwieństwie do sprawdzonych wyjątków, wyjątki środowiska wykonawczego nie wymagają deklaracji w klauzuli rzutów ani przechwytywania w bloku try-catch. Zaleca się jednak obsługę wyjątków czasu wykonywania, aby zapewnić zrozumiałe komunikaty o błędach i zapobiec awarii systemu. Ponieważ wyjątki środowiska wykonawczego dostarczają bardziej szczegółowych informacji o problemie niż wyjątki sprawdzone, umożliwiają programistom łatwiejsze i szybsze wykrywanie i korygowanie błędów programistycznych.

157. Co to jest wyjątek NullPointerException?

Jest to rodzaj wyjątku czasu wykonywania, który jest zgłaszany, gdy program próbuje użyć odwołania do obiektu o wartości null. Głównym zastosowaniem wyjątku NullPointerException jest wskazanie, że do zmiennej referencyjnej nie jest przypisana żadna wartość, służy on również do implementowania struktur danych, takich jak połączone listy i drzewa.

158. Kiedy zgłaszany jest wyjątek ArrayStoreException?

ArrayStoreException jest zgłaszany, gdy podejmowana jest próba przechowywania obiektu niewłaściwego typu w tablicy obiektów.

Przykład:

Jawa
// Java Program to implement // ArrayStoreException public class GFG {  public static void main(String args[])  {  // Since Double class extends Number class  // only Double type numbers  // can be stored in this array  Number[] a = new Double[2];  // Trying to store an integer value  // in this Double type array  a[0] = new Integer(4);  } }>

Przykład:

Exception in thread 'main' java.lang.ArrayStoreException: java.lang.Integer  at GFG.main(GFG.java:6)>

159. Jaka jest różnica pomiędzy zaznaczonym wyjątkiem a niesprawdzonym wyjątkiem?

Sprawdzony wyjątek:

Sprawdzone wyjątki to wyjątki sprawdzane podczas kompilacji programu. W programie, jeśli jakiś kod w metodzie zgłasza sprawdzony wyjątek, wówczas metoda musi albo obsłużyć wyjątek, albo musi określić wyjątek za pomocą słowa kluczowego rzuca.

Sprawdzane wyjątki są dwojakiego rodzaju:

  • W pełni sprawdzone wyjątki: sprawdzane są także wszystkie jego klasy podrzędne, takie jak IOException i InterruptedException.
  • Częściowo sprawdzone wyjątki: niektóre z klas podrzędnych nie są zaznaczone, jak wyjątek.

Niesprawdzony wyjątek:

Niezaznaczone są wyjątki, które nie są sprawdzane w czasie kompilacji programu. Wyjątki w klasach Error i RuntimeException są niesprawdzonymi wyjątkami, sprawdzane jest wszystko inne, co można zgłosić.

160. Jaka jest klasa bazowa dla błędów i wyjątków?

Obsługa wyjątków-768

Błąd to nieprawidłowa operacja wykonana przez użytkownika, która powoduje nieprawidłowości w programie. Wyjątkami są nieoczekiwane zdarzenia lub warunki, które pojawiają się podczas działania programu. Wyjątek zakłóca normalny przepływ instrukcji programu.

Zarówno błędy, jak i wyjątki mają wspólną klasę nadrzędną, którą jest klasa java.lang.Throwable.

161. Czy konieczne jest, aby po każdym bloku try następował blok catch?

Nie, nie jest konieczne używanie bloku catch po bloku try w Javie, ponieważ możemy utworzyć inną kombinację z blokiem final. Wreszcie jest blok, który działa pomimo faktu, że wyjątek został zgłoszony, czy nie.

162. Co to jest propagacja wyjątków?

Propagacja wyjątku to proces, podczas którego wyjątek jest usuwany z góry na dół stosu. Jeśli wyjątek nie zostanie złapany ani razu, wyjątek ponownie przejdzie do poprzedniej metody i tak dalej, aż zostanie przechwycony lub dotrze na sam dół stosu wywołań.

163. Co się stanie, jeśli umieścisz System.exit(0) w bloku try lub catch? Czy w końcu blok zostanie wykonany?

System.exit(int) ma możliwość zgłoszenia wyjątku SecurityException. Tak więc, jeśli ze względów bezpieczeństwa zostanie zgłoszony wyjątek, w końcu zostanie wykonany blok, w przeciwnym razie JVM zostanie zamknięty podczas wywoływania System. exit(0), z powodu którego ostatecznie blok nie zostanie wykonany.

164. Co rozumiesz przez klonowanie obiektów i jak to osiągnąć w Javie?

Jest to proces tworzenia dokładnej kopii dowolnego obiektu. Aby to obsłużyć, klasa Java musi zaimplementować interfejs Cloneable pakietu java.lang i zastąpić metodę clone() dostarczoną przez klasę Object, której składnia jest następująca:

Obiekt chroniony clone() zgłasza wyjątek CloneNotSupportedException{ return (Object)super.clone();} W przypadku, gdy interfejs Cloneable nie jest zaimplementowany i sama metoda zostanie zastąpiona, w Javie zostanie wyświetlony wyjątek CloneNotSupportedException.

165. Jak wyjątki wpływają na program, jeśli ich nie obsługuje?

Wyjątki powodują nagłe przerwanie działania programu w trakcie wykonywania i kod napisany po wystąpieniu wyjątku nie jest wykonywany.

166. Jakie jest zastosowanie końcowego słowa kluczowego?

Ostatnie słowo kluczowe służy do uczynienia funkcji niewirtualnymi. Domyślnie wszystkie funkcje są wirtualne, dlatego aby nie były wirtualne, używamy słowa kluczowego final.

167. Jaki cel spełniają słowa kluczowe final, final i finalize?

I). finał:

final to słowo kluczowe używane ze zmienną, metodą lub klasą, tak że nie można ich zastąpić.

Przykład:

Jawa
// Java Program to use final // keyword import java.io.*; // Driver Class class GFG {  // Main function  public static void main(String[] args)  {  final int x = 100;  x = 50;  } }>

Wyjście:

./GFG.java:6: error: cannot assign a value to final variable x  x=50;  ^ 1 error>

II). Wreszcie

wreszcie jest blokiem kodu używanym z funkcją try-catch w obsłudze wyjątków. Kod napisany w końcu działa w bloku pomimo faktu, że wyjątek został zgłoszony lub nie.

Przykład:

Jawa
// Java Program to implement finally import java.io.*; // Driver class class GFG {  // Main function  public static void main(String[] args)  {  int x = 10;  // try block  try {  System.out.println('Try block');  }  // finally block  finally {  System.out.println(  'Always runs even without exceptions');  }  } }>

Wyjście
Try block Always runs even without exceptions>

iii). sfinalizować

Jest to metoda wywoływana tuż przed usunięciem/zniszczeniem obiektów, które kwalifikują się do wyrzucenia śmieci w celu przeprowadzenia czynności czyszczenia.

Przykład:

Jawa
/*package whatever // do not write package name here */ import java.io.*; class GFG {  public static void main(String[] args)  {  System.out.println('Main function running');  System.gc();  }  // Here overriding finalize method  public void finalize()  {  System.out.println('finalize method overridden');  } }>

Wyjście
Main function running>

168. Jaka jest różnica między this() a super() w Javie?

Ten( )

Super( )

Reprezentuje bieżącą instancję klasy.

Reprezentuje bieżącą instancję klasy nadrzędnej.

Wywołuje domyślny konstruktor tej samej klasy.

Wywołuje domyślny konstruktor klasy bazowej.

Uzyskaj dostęp do metod tej samej klasy.

Uzyskaj dostęp do metod klasy nadrzędnej.

Wskazuje bieżącą instancję klasy.

Wskazuje instancję nadklasy.

169. Czym jest wielozadaniowość?

Wielozadaniowość w Javie oznacza zdolność programu do wykonywania kilku zadań jednocześnie. Mogą to zrobić wątki, czyli szybkie operacje zawarte w pojedynczym programie. Wykonywanie wielu rzeczy na raz nazywa się wielozadaniowością.

Przykład:

Jawa
// Java program for multitasking import java.io.*; public class MyThread extends Thread {  public void run()  {  // Code to be executed in this thread  for (int i = 0; i < 10; i++) {  System.out.println(  'Thread ' + Thread.currentThread().getId()  + ': ' + i);  }  } } public class GFG {  public static void main(String[] args)  {  MyThread thread1 = new MyThread();  MyThread thread2 = new MyThread();  // Start the threads  thread1.start();  thread2.start();  } }>

170. Co rozumiesz przez program wielowątkowy?

Programy wielowątkowe w Javie zawierają wątki, które działają współbieżnie, a nie sekwencyjnie. Komputer może efektywniej wykorzystywać swoje zasoby, łącząc wiele zadań jednocześnie. Każdy program obsługujący wielowątkowość umożliwia jednoczesne korzystanie z programu więcej niż jednemu użytkownikowi bez konieczności uruchamiania wielu kopii. Program wielowątkowy przeznaczony jest do jednoczesnego uruchamiania wielu procesów, co może poprawić wydajność programu i umożliwić programowi wykorzystanie wielu procesorów oraz poprawić ogólną przepustowość.

171. Jakie są zalety wielowątkowości?

Korzystanie z wielowątkowości ma wiele zalet, a są one następujące:

  • Responsywność: Responsywność użytkownika wzrasta, ponieważ wielowątkowa aplikacja interaktywna umożliwia uruchamianie kodu nawet wtedy, gdy sekcja jest zablokowana lub wykonuje długotrwały proces.
  • Udostępnianie zasobów: Proces może wykonywać przekazywanie komunikatów i pamięć współdzieloną ze względu na wielowątkowość.
  • Ekonomia: Potrafimy dzielić pamięć, dzięki czemu procesy są ekonomiczne.
  • Skalowalność: wielowątkowość na maszynach z wieloma procesorami zwiększa równoległość.
  • Lepsza komunikacja: Funkcje synchronizacji wątków poprawiają komunikację między procesami.
  • Wykorzystanie architektury wieloprocesorowej
  • Zminimalizowane wykorzystanie zasobów systemowych

172. Jakie są dwa sposoby tworzenia Wątku?

Wielowątkowość to funkcja Java, która umożliwia jednoczesne wykonywanie dwóch lub więcej części programu w celu maksymalnego wykorzystania procesora. Ogólnie rzecz biorąc, wątki to małe, lekkie procesy z oddzielnymi ścieżkami wykonania. Wątki te korzystają z pamięci współdzielonej, ale działają niezależnie, więc jeśli którykolwiek wątek ulegnie awarii, nie ma to wpływu na pozostałe wątki. Istnieją dwa sposoby utworzenia wątku:

  • Rozszerzając klasę Thread
  • Implementując interfejs Runnable.

Rozszerzając klasę Thread

Tworzymy klasę rozszerzającą Klasa java.lang.Thread . Klasa ta zastępuje metodę run() dostępną w klasie Thread. Wątek rozpoczyna swoje życie wewnątrz metody run().

Składnia:

public class MyThread extends Thread { public void run() {  // thread code goes here  } }>

Implementując interfejs Runnable

Tworzymy nową klasę, która implementuje Java.lang.Runnable interfejs i zastąp metodę run(). Następnie tworzymy instancję obiektu Thread i wywołujemy na nim metodę start().

Składnia:

public class MyRunnable implements Runnable { public void run() {  // thread code goes here  } }>

173. Co to jest nić?

Wątki w Javie są podprocesami o niewielkiej wadze i najmniejszej jednostce procesów, a także mają oddzielne ścieżki wykonania. Wątki te korzystają z pamięci współdzielonej, ale działają niezależnie, dlatego też w wątkach występuje wyjątek, który nie wpływa na działanie innych wątków, mimo że dzielą one tę samą pamięć. Wątek ma swój własny licznik programu, stos wykonania i zmienne lokalne, ale dzieli tę samą przestrzeń pamięci z innymi wątkami w tym samym procesie. Java zapewnia wbudowaną obsługę wielowątkowości poprzez Uruchomialny interfejs i Klasa wątku .

174. Rozróżnij proces od wątku?

Proces i wątek są jednostkami wykonawczymi w systemie komputerowym, ale różnią się pod kilkoma względami:

Proces

Nitka

Proces to wykonywany program.

Wątek to pojedyncza sekwencja instrukcji w procesie.

Zakończenie procesu zajmuje więcej czasu.

Zakończenie wątku zajmuje mniej czasu.

Proces przełączania kontekstu zajmuje więcej czasu.

Wątek zajmuje mniej czasu na przełączanie kontekstu.

Proces ten jest mniej efektywny pod względem komunikacyjnym.

Wątek jest bardziej wydajny pod względem komunikacyjnym.

Proces jest izolowany.

Wątki współdzielą pamięć.

Proces ma swój własny blok kontroli procesu, stos i przestrzeń adresową.

Wątek ma PCB rodziców, własny blok kontrolny wątku, stos i wspólną przestrzeń adresową.

Proces nie udostępnia sobie danych.

Wątki dzielą się między sobą danymi.

175. Opisz cykl życia nici?

Cykl wątku-768

A nitka w Javie w dowolnym momencie znajduje się w jednym z następujących stanów. Wątek w danym momencie znajduje się tylko w jednym z pokazanych stanów:

  1. Nowy: Wątek został utworzony, ale jeszcze się nie rozpoczął.
  2. Możliwość uruchomienia: Wątek działa, wykonuje swoje zadanie lub jest gotowy do uruchomienia, jeśli nie ma innych wątków o wyższym priorytecie.
  3. Zablokowany: Wątek jest tymczasowo zawieszony i oczekuje na zasób lub zdarzenie.
  4. Czekanie: Wątek czeka, aż inny wątek wykona zadanie lub upłynie określony czas.
  5. Zakończony: Wątek zakończył swoje zadanie lub został zakończony przez inny wątek.

176. Wyjaśnij metodę zawieszenia() w klasie Thread.

Metoda zawieszania() klasy Thread w Javie tymczasowo wstrzymuje wykonywanie wątku. Gdy wątek zostanie zawieszony, przechodzi w stan zablokowany i nie zostanie zaplanowany przez system operacyjny, co oznacza, że ​​nie będzie mógł wykonać swojego zadania, dopóki nie zostanie wznowione. We współczesnym języku programowania Java istnieją bezpieczniejsze i bardziej elastyczne alternatywy dla metod zawieszenia(). Ta metoda nie zwraca żadnej wartości.

Składnia:

  public final void   suspend();>

Przykład:

Jawa
// Java program to show thread suspend() method import java.io.*; class MyThread extends Thread {  public void run()  {  for (int i = 0; i < 10; i++) {  System.out.println(' Running thread : ' + i);  try {  Thread.sleep(1000);  }  catch (Interrupted_Exception e) {  e.printStackTrace();  }  }  } } class GFG {  public static void main(String[] args)  {  MyThread t1 = new MyThread();  t1.start();  try {  Thread.sleep(3000);  }  catch (InterruptedException e) {  e.printStackTrace();  }  // suspend the execution of the thread  t1.suspend();  System.out.println('Suspended thread ');  try {  Thread.sleep(3000);  }  catch (InterruptedException e) {  e.printStackTrace();  }  // resume the execution of the thread  t1.resume();  System.out.println('Resumed thread');  } }>

Wyjście:

Thread running: 0 Thread running: 1 Thread running: 2 Suspended thread Resumed thread Thread running: 3 Thread running: 4 Thread running: 5 Thread running: 6 Thread running: 7 Thread running: 8 Thread running: 9>

177. Wyjaśnij główny wątek w części Wykonywanie klasy Thread.

Java zapewnia wbudowaną obsługę programowania wielowątkowego. Wątek główny jest uważany za wątek nadrzędny wszystkich pozostałych wątków tworzonych podczas wykonywania programu. Główny wątek jest tworzony automatycznie po uruchomieniu programu. Ten wątek wykonuje główną metodę programu. Odpowiada za wykonywanie głównej logiki programu Java, a także obsługę operacji wejściowych użytkownika. Wątek główny służy jako wątek bazowy, z którego powstają wszystkie inne wątki podrzędne.

Wykonanie klasy wątku-768

178. Co to jest wątek demona?

Wątek demona w Javie to wątek o niskim priorytecie używany do wykonywania operacji w tle lub zadań wykonywanych w sposób ciągły. takie jak wyrzucanie śmieci, wysyłanie sygnałów, odbiorniki akcji itp. Wątki demonów w Javie mają niższy priorytet niż wątki użytkownika, co oznacza, że ​​mogą być wykonywane tylko wtedy, gdy nie są uruchomione żadne wątki użytkownika. Wątki demona w Javie to przydatne funkcje wymagane do wykonywania zadań w tle, które nie wymagają jawnego zamykania ani finalizowania. Umożliwia bardziej efektywne wykorzystanie zasobów systemowych i służy do uproszczenia zasobów oraz może uprościć długotrwałe zadania.

179. W jaki sposób wątek może przejść w stan oczekiwania?

Wątek to lekki proces, który działa równolegle z innym wątkiem w ramach jednego procesu. Każdy wątek może wykonywać inne zadanie i dzielić zasoby w ramach jednego procesu. Wątek w Javie może wejść w stan oczekiwania na wiele różnych sposobów:

  • Metoda Sleep() Wywołanie: Funkcja uśpienia () służy do wstrzymania wykonywania wątku na określony czas. Gdy wątek jest wstrzymany, przechodzi w stan oczekiwania.
  • Metoda Wait(): Ta metoda służy do czekania wątku, aż inny wątek zasygnalizuje mu potrzebę przebudzenia. Wątek przechodzi w stan oczekiwania do czasu otrzymania powiadomienia z innego wątku.
  • Metoda Join(): Metodę Join() można wykorzystać do oczekiwania na zakończenie wykonywania wątku. Wątek wywołujący przechodzi w stan oczekiwania do momentu zakończenia wątku docelowego.
  • Oczekiwanie na operacje we/wy: Jeśli wątek oczekuje na zakończenie operacji wejścia/wyjścia, przechodzi w stan oczekiwania do momentu zakończenia operacji.
  • Problemy z synchronizacją: Jeśli w aplikacji wielowątkowej występują problemy z synchronizacją, wątki mogą przejść w stan oczekiwania do czasu rozwiązania problemów z synchronizacją.

180. Jak przebiega wielowątkowość na komputerze z jednym procesorem?

Java wykorzystuje technikę zwaną współdzieleniem czasu, powszechnie nazywaną dzieleniem czasu, w celu wdrożenia wielowątkowości na komputerach z jednym procesorem. Pozorne wykonanie równoległe jest tworzone przez przełączanie procesora pomiędzy aktywnymi wątkami. System operacyjny odpowiada za przydzielanie czasu procesora każdemu wątkowi sekwencyjnie i planowanie wątków.

Aby zapobiec wzajemnej interakcji wątków i powstawaniu sytuacji wyścigowych lub innych problemów, Java udostępnia wiele sposobów zarządzania zachowaniem wątków, w tym synchronizację i blokowanie. Możliwe jest stworzenie programistów wielowątkowych, które będą działać poprawnie i efektywnie na maszynie z jednym procesorem, regulując interakcję pomiędzy wątkami i dbając o synchronizację kluczowych części kodu. W przeciwieństwie do uruchamiania tego samego programu na komputerze z wieloma procesorami lub rdzeniami, wielowątkowość na jednym procesorze może jedynie sprawiać wrażenie równoległości, a rzeczywisty wzrost wydajności może być niewielki. System operacyjny dzieli czas procesora dostępny, gdy na jednym procesorze działa wiele wątków, na małe wycinki czasu i przydziela każdemu wątkowi wycinek czasu do wykonania. Szybkie przełączanie wątków przez system operacyjny stwarza wrażenie wykonywania równoległego. Przełączanie między wątkami wydaje się być natychmiastowe, ponieważ przedziały czasu są często bardzo małe, rzędu milisekund lub mikrosekund.

Pytania do rozmowy kwalifikacyjnej Java dla doświadczonych

181. Jakie są różne typy priorytetów wątków w Javie? A jaki jest domyślny priorytet wątku przypisanego przez JVM?

Priorytety w wątkach to koncepcja, w której każdy wątek ma priorytet, który w języku laika można powiedzieć, że każdy obiekt ma tutaj priorytet, co jest reprezentowane przez liczby od 1 do 10. Istnieją różne typy właściwości wątków w Javie wymienione poniżej:

  • MIN_PRIORITY
  • MAX_PRIORITY
  • NORM_PRIORITY

Domyślnie wątek ma przypisany NORM_PRIORITY.

182. Dlaczego w Javie konieczne jest zbieranie śmieci?

W przypadku języka Java usuwanie elementów bezużytecznych jest konieczne, aby uniknąć wycieków pamięci, które mogą spowodować awarię programu i jego niestabilność. W Javie nie ma sposobu na uniknięcie zbierania śmieci. W przeciwieństwie do C++, zbieranie śmieci w Javie pomaga programistom skoncentrować się na rozwoju aplikacji, zamiast zarządzać zasobami pamięci i martwić się wyciekami pamięci. Wirtualna maszyna Java (JVM) automatycznie zarządza okresowo pamięcią, uruchamiając moduł wyrzucania elementów bezużytecznych, który zwalnia nieużywaną pamięć w aplikacji. Wyrzucanie elementów bezużytecznych zwiększa wydajność pamięci Java, ponieważ usuwa obiekty, do których nie istnieją odniesienia, z pamięci sterty.

183. Jaka jest wada zbierania śmieci?

Oprócz wielu zalet, Garbage Collector ma pewne wady wymienione poniżej:

  1. Główną wadą usuwania śmieci jest to, że może powodować przerwy w działaniu aplikacji, ponieważ ma ona na celu wyczyszczenie pamięci, co spowalnia działanie aplikacji.
  2. Proces usuwania śmieci jest niedeterministyczny, co utrudnia przewidzenie, kiedy nastąpi wyrzucanie elementów bezużytecznych, co powoduje nieprzewidywalne zachowanie aplikacji. Na przykład, jeśli piszemy dowolny program, programistom trudno jest zdecydować, czy przyczyną problemu jest wyrzucanie elementów bezużytecznych, czy jakiekolwiek inne czynniki w programie.
  3. Wyrzucanie elementów bezużytecznych może również zwiększyć użycie pamięci, jeśli program tworzy i odrzuca wiele krótkotrwałych obiektów.

184. Wyjaśnij różnicę pomiędzy drobnym, głównym i pełnym wywozem śmieci.

Wirtualna maszyna Java (JVM) usuwa obiekty, które nie są już używane, przy użyciu modułu zbierającego elementy bezużyteczne, który okresowo sprawdza i usuwa te obiekty. W maszynie JVM istnieją różne typy zbierania elementów bezużytecznych, każdy z inną charakterystyką i wpływem na wydajność. Główne rodzaje zbierania śmieci to:

  • Drobny wywóz śmieci: Ten typ wyrzucania elementów bezużytecznych, znany również jako wyrzucanie elementów bezużytecznych młodej generacji, służy do zbierania i odzyskiwania pamięci używanej przez obiekty krótkotrwałe (obiekty, które są szybko tworzone i odrzucane).
  • Główny zbiór śmieci: Ten typ wyrzucania elementów bezużytecznych, znany również jako wyrzucanie elementów bezużytecznych starej generacji, służy do zbierania i odzyskiwania pamięci używanej przez obiekty długotrwałe (obiekty, które przetrwały wiele mniejszych wyrzucania elementów bezużytecznych i są promowane do starej generacji).
  • Pełny odbiór śmieci: Podczas pełnej zbiórki śmieci zbierane i odtwarzane są wspomnienia wszystkich pokoleń, w tym wspomnienia młodych i starych. Pełne wyrzucanie elementów bezużytecznych zwykle trwa dłużej niż mniejsze lub większe wyrzucanie elementów bezużytecznych, co powoduje tymczasowe wstrzymanie działania aplikacji.

185. Jak zidentyfikujesz główne i mniejsze zbiory śmieci w Javie?

Główne zbieranie śmieci działa na przestrzeni ocalałych, a mniejsze zbieranie śmieci działa na przestrzeni Edenu, aby wykonać procedurę zaznaczania i zamiatania. I możemy zidentyfikować oba na podstawie danych wyjściowych, w których kolekcja podrzędna drukuje GC, podczas gdy kolekcja główna drukuje Pełne GC w przypadku, gdy rejestrowanie czyszczenia pamięci jest włączone za pomocą opcji -XX:PrintGCDetails lub verbose:gc.

186. Co to jest wyciek pamięci i jaki ma wpływ na zbieranie elementów bezużytecznych?

W Javie wycieki pamięci mogą być spowodowane różnymi czynnikami, takimi jak nieprawidłowe zamykanie zasobów, trzymanie odniesień do obiektów dłużej niż to konieczne lub niepotrzebne tworzenie zbyt wielu obiektów. Są sytuacje, w których moduł zbierający elementy bezużyteczne nie zbiera obiektów, ponieważ istnieje odniesienie do tych obiektów. W takich sytuacjach, gdy aplikacja tworzy wiele obiektów i ich nie używa, a każdy obiekt ma pewne prawidłowe referencje, moduł zbierający elementy bezużyteczne w Javie nie może zniszczyć obiektów. Te bezużyteczne obiekty, które nie wnoszą żadnej wartości do programu, nazywane są wyciekami pamięci. Wycieki pamięci mogą mieć negatywny wpływ na wyrzucanie elementów bezużytecznych, uniemożliwiając modułowi zbierającemu elementy bezużyteczne odzyskanie nieużywanej pamięci. Takie zachowanie spowoduje niską wydajność lub czasami awarię systemu. W programie ważne jest, aby unikać wycieków pamięci poprzez prawidłowe zarządzanie zasobami i odniesieniami do obiektów.

Przykład:

Jawa
// Java Program to demonstrate memory leaks import java.io.*; import java.util.Vector; class GFG {  public static void main(String[] args)  {  Vector a = new Vector(21312312);  Vector b = new Vector(2147412344);  Vector c = new Vector(219944);  System.out.println('Memory Leak in Java');  } }>

Wyjście:

Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space  at java.base/java.util.Vector.(Vector.java:142)  at java.base/java.util.Vector.(Vector.java:155)  at GFG.main(GFG.java:9)>

187. Nazwij niektóre klasy obecne w pakiecie java.util.regex.

Wyrażenia regularne lub Regex w Javie to interfejs API używany do wyszukiwania i manipulowania ciągami znaków w Javie. Tworzy wzorce ciągów, które mogą wyodrębnić potrzebne dane z ciągów lub uogólnić wzorzec.

Istnieją 3 klasy obecne w java.util.regex wymienione poniżej:

  • Klasa wzorców: Potrafi definiować wzorce
  • Klasa Matcher: Potrafi wykonywać operacje dopasowywania tekstu przy użyciu wzorców
  • Klasa PatternSyntaxException: może wskazywać błąd składniowy we wzorcu wyrażenia regularnego.

Poza tym pakiet składający się z 3 klas składa się z pojedynczego interfejsu MatchResult Interface, który może być używany do reprezentowania wyniku operacji dopasowania.

188. Napisz wyrażenie regularne sprawdzające poprawność hasła. Hasło musi zaczynać się od litery, po której następują znaki alfanumeryczne; Jego długość musi mieścić się w przedziale od 8 do 20.

regex = ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&-+=()])(?=S+$).{8, 20}$>

Wyjaśnienie:

  • ^ używany jako znak początkowy ciągu.
  • (?=.*[0-9]) użyte dla cyfry musi wystąpić co najmniej raz.
  • (?=.*[a-z]) użyte dla małych liter musi wystąpić co najmniej raz.
  • (?=.*[A-Z]) używane dla wielkich liter, które muszą wystąpić co najmniej raz w podciągu.
  • (?=.*[@#$%^&-+=()] używane dla znaku specjalnego, który musi wystąpić co najmniej raz.
  • (?=S+$) białe spacje nie pozwalają na umieszczenie całego ciągu znaków.
  • .{8, 20} używane przez co najmniej 8 i maksymalnie 20 znaków.
  • $ używany na końcu ciągu.

189. Co to jest JDBC?

JDBC standardowy interfejs API służy do łączenia aplikacji Java i relacyjnych baz danych. Zapewnia zbiór klas i interfejsów, które pozwalają programistom używać języka programowania Java do komunikacji z bazą danych. Klasy i interfejs JDBC umożliwiają aplikacji wysyłanie żądań użytkowników do określonej bazy danych. Generalnie istnieją cztery komponenty JDBC, za pomocą których współdziała ono z bazą danych:

  • API JDBC
  • Menedżer sterowników JDBC
  • Zestaw testów JDBC
  • Sterowniki mostu JDBC-ODBC

JDBC-768

190. Co to jest sterownik JDBC?

Sterownik JDBC to komponent oprogramowania umożliwiający interakcję aplikacji Java z bazą danych. JDBC zapewnia implementację API JDBC dla konkretnego systemu zarządzania bazami danych, co pozwala na podłączenie bazy danych, wykonywanie instrukcji SQL i pobieranie danych. Istnieją cztery typy sterowników JDBC:

  • Sterownik mostu JDBC-ODBC
  • Natywny sterownik API
  • Sterownik protokołu sieciowego
  • Cienki kierowca

Sterownik JDBC-660

191. Jakie są kroki, aby połączyć się z bazą danych w Javie?

Aby połączyć bazę danych z programem Java, należy wykonać pewne kroki, jak opisano poniżej:

  • Zaimportuj pakiety
  • Załaduj sterowniki za pomocą metody forName().
  • Zarejestruj sterowniki za pomocą DriverManager
  • Nawiąż połączenie za pomocą obiektu klasy Connection
  • Utwórz oświadczenie
  • Wykonaj zapytanie
  • Zamknij połączenia

192. Jakie są komponenty API JDBC?

Komponenty JDBC API zapewniają różne metody i interfejsy ułatwiające komunikację z bazami danych, a także pakiety takie jak Java Se i Java EE, które zapewniają możliwość zapisu po uruchomieniu w dowolnym miejscu (WORA).

Składnia:

java.sql.*;>

193. Co to jest interfejs połączenia JDBC?

Interfejs łączności z bazami danych Java (JDBC) to komponent oprogramowania umożliwiający aplikacjom Java interakcję z bazami danych. Aby usprawnić połączenie, JDBC wymaga sterowników dla każdej bazy danych.

194. Jaki jest interfejs JDBC ResultSet?

Interfejs JDBC ResultSet służy do przechowywania danych z bazy danych i wykorzystania ich w naszym programie Java. Możemy również użyć ResultSet do aktualizacji danych za pomocą metod updateXXX(). Obiekt ResultSet wskazuje kursor przed pierwszym wierszem danych wynikowych. Używając metody next() możemy iterować po zestawie ResultSet.

195. Co to jest zestaw wierszy JDBC?

Zestaw wierszy JDBC umożliwia przechowywanie danych w formie tabelarycznej. RowSet to interfejs w Javie, którego można używać w pakiecie java.sql. Połączenie pomiędzy obiektem RowSet a źródłem danych jest utrzymywane przez cały cykl jego życia. Zestawy wierszy są podzielone na pięć kategorii w zależności od implementacji wymienionej poniżej:

  1. Zestaw JdbcRow
  2. Zestaw buforowanych wierszy
  3. Zestaw WebRow
  4. Filtrowany zestaw wierszy
  5. JoinRowSet

196. Jaka jest rola klasy JDBC DriverManager?

Klasa JDBC DriverManager pełni rolę interfejsu dla użytkowników i sterowników. Jest używany na wiele sposobów, jak wspomniano poniżej:

  • Służy do tworzenia połączenia pomiędzy aplikacją Java a bazą danych.
  • Pomaga śledzić dostępne sterowniki.
  • Może pomóc w ustanowieniu połączenia pomiędzy bazą danych a odpowiednimi sterownikami.
  • Zawiera wszystkie metody umożliwiające rejestrację i wyrejestrowanie klas sterowników bazy danych.
  • Metoda DriverManager.registerDriver() może przechowywać listę klas kierowców, które same się zarejestrowały.

Pytania do rozmowy kwalifikacyjnej dotyczące różnic w Javie

197. Rozróżnij iterację i iterator.

Iterowalne

Iterator

Iterable umożliwia iterację po sekwencji elementów.

Iterator pomaga w sekwencyjnym iterowaniu zbioru elementów.

iterator() Metoda zwraca Iterator. maNastępny() I Następny() metody są wymagane.
usunąć() metoda jest opcjonalna. usunąć() metoda jest wymagana w iteratorze.

Przykładami są Lista, kolejka i zestaw.

Przykładami są ListIterator, wyliczenie i ArrayIterator.

198. Rozróżnij listę od zbioru.

Lista

Ustawić

Zamówione

Niezamówiony

Lista pozwala na duplikaty.

Zestaw nie pozwala na powielanie wartości.

Dostęp do listy możliwy jest poprzez indeks.

Dostęp do zestawu uzyskuje się poprzez hashcode.

Można przechowywać wiele elementów zerowych.

Element null można zapisać tylko raz.

Przykładami są ArrayList, LinkedList itp.

Przykładami są HashSet i TreeSet. LinkedHashSet itp.

199. Odróżnij listę od mapy.

Lista

Mapa

Interfejs listy umożliwia duplikowanie elementów.

Mapa nie pozwala na powielanie elementów.

Lista zachowuje kolejność wstawiania.

Mapa nie zachowuje kolejności wstawiania.

Można przechowywać wiele elementów zerowych.

Mapa dopuszcza maksymalnie jeden klucz zerowy i dowolną liczbę wartości zerowych.

Lista udostępnia metodę get(), która umożliwia pobranie elementu o określonym indeksie.

Mapa nie udostępnia metody get umożliwiającej pobranie elementów o określonym indeksie.

Lista jest implementowana przez ArrayList itp.

Mapa jest implementowana przez HashMap, TreeMap, LinkedHashMap

200. Rozróżnij kolejkę i stos.

Kolejka

Stos

Struktura danych kolejki służy do przechowywania elementów i służy do wykonywania operacji takich jak umieszczanie w kolejce, usuwanie z kolejki z tyłu lub na koniec kolejki.

Struktura danych stosu służy do przechowywania elementów i służy do wykonywania operacji takich jak push, pop ze szczytu stosu.

Struktura danych kolejki Implementuje porządek FIFO.

Struktura danych stosu Implementuje porządek LIFO.

Wstawianie i usuwanie w kolejkach odbywa się z przeciwnych końców listy. Usunięcie następuje z przodu listy, a wstawienie z tyłu listy.

Wstawianie i usuwanie na stosach odbywa się tylko z jednego końca listy zwanego górą.

Operację wstawiania nazywa się operacją umieszczania w kolejce.

Operację wstawiania nazywa się operacją Push.

Kolejka jest powszechnie używana do rozwiązywania problemów związanych z przetwarzaniem sekwencyjnym.

Stos jest powszechnie używany do rozwiązywania problemów związanych z rekurencją.

201. Rozróżnij kolejkę priorytetową i zestaw drzew.

Kolejka priorytetowa

Zestaw drzew

ipconfig dla Ubuntu

Używa kolejki jako podstawowej struktury danych.

Używa zestawu jako podstawowej struktury danych.

Ta struktura danych pozwala na powielanie elementów

Ta struktura danych nie pozwala na powielanie elementów

Kolejka priorytetowa jest implementowana przez klasę PriorityQueue.

TreeSet jest implementowany przez klasę TreeSet.

PriorityQueue jest dostępny w JDK 1.5.

TreeSet jest dostępny w JDK 1.4.

Kolejka Priorytetów pq = nowa Kolejka Priorytetów();

reeSet ts = nowy TreeSet();

202. Rozróżnij listę pojedynczo połączoną i listę podwójnie połączoną.

Lista pojedynczo połączona

Lista podwójnie połączona

Lista pojedynczo połączona zawiera tylko dwa segmenty, tj. Dane i Łącze.

Lista podwójnie połączona zawiera trzy segmenty, tj. Dane i dwa wskaźniki.

Poruszanie się po pojedynczo połączonej liście jest możliwe tylko w kierunku do przodu.

Poruszanie się po podwójnie połączonej liście jest możliwe tylko w obu kierunkach do przodu i do tyłu.

Zużywa mniej pamięci, ponieważ każdy pojedynczy węzeł ma tylko jeden wskaźnik.

Wymaga więcej pamięci niż pojedynczo połączona lista, ponieważ każdy węzeł ma dwa wskaźniki.

Łatwy w użyciu i wstawia węzły na początku listy.

Nieco bardziej skomplikowany w użyciu i łatwy do wstawienia na końcu listy.

Złożoność czasowa wstawiania i usuwania wynosi O(n).

Złożoność czasowa wstawiania i usuwania wynosi O(1).

Lista pojedynczo połączona-660

Podwójnie połączona lista-660

203. Rozróżnij tryb Failfast i Failsafe.

Szybkość awarii

Bezpieczny

Failsfast kończy się niepowodzeniem natychmiast po wykryciu równoczesnych modyfikacji w czasie iteracji.

Failsafe kontynuuje iterację oryginalnej kolekcji, a także tworzy kopię do modyfikacji.

Failfast jest zwykle używany w środowiskach jednowątkowych.

Failsafe jest używany w środowiskach wielowątkowych.

Failfast nie pozwala na żadne modyfikacje podczas iteracji.

Failsafe umożliwia modyfikację w czasie iteracji.

Failfast jest szybki w porównaniu do Failsafe, ponieważ nie wymaga kopiowania kolekcji.

Funkcja Failsafe jest generalnie powolna w porównaniu z funkcją Failsafe.

FailFast rzuca Wyjątek ConcurrentModificationException jeśli kolekcja zostanie zmodyfikowana podczas iteracji.


FailSafe nie zgłasza żadnego wyjątku, ale zamiast tego tworzy kopię kolekcji do iteracji.

204. Rozróżnij HashMap od TreeMap.

HashMapa

Mapa Drzewa

Hasmap używa tablicy mieszającej do przechowywania par klucz-wartość.

Mapa drzewa używa drzew czerwono-czarnych do przechowywania pary klucz-wartość.

Hashmap nie utrzymuje żadnej określonej kolejności par klucz-wartość.

Treemap utrzymuje naturalny porządek oparty na kluczach.

Kolejność iteracji nie jest gwarantowana w hashmapie.

Iteracja ma porządek posortowany na podstawie kluczy.

Hashmapy są szybsze do pobrania w porównaniu do Treemap.

Pobieranie w Treemap jest wolniejsze, ponieważ wykorzystuje przechodzenie przez drzewo w celu znalezienia kluczy.

Hashmap jest implementowany przy użyciu tablicy połączonej listy.

TreeMap jest zaimplementowany przy użyciu czerwono-czarnego drzewa.

Hashmap używa metody równości() klasy Object do porównywania kluczy.

TreeMap używa metody CompareTo() do porównywania kluczy.

205. Rozróżnij kolejkę i deque.

Kolejka

O czym

Kolejka jest liniową strukturą danych służącą do przechowywania kolekcji elementów.

Deque, znana również jako kolejka dwustronna, to także liniowa struktura danych, która przechowuje zbiór elementów z operacjami usuwania i dodawania z obu końców.

Elementy w kolejce można wstawiać jedynie na końcu struktury danych.

Elementy można wstawiać z obu końców struktury danych.

Kolejkę można zaimplementować przy użyciu tablicy lub listy połączonej.

Usuwanie z kolejki można wdrożyć za pomocą tablicy kołowej lub listy podwójnie połączonej.

Kolejki są zwykle używane do implementowania listy oczekujących lub kolejki zadań.

Deque służy do implementowania stosu lub usuwania elementów z obu końców.

Kolejka-660

Kolejka z podwójnym zakończeniem 660

206. Rozróżnij HashSet od TreeSet.

Zestaw skrótów

Zestaw drzew

HashSet jest nieuporządkowany.

TreeSet opiera się na naturalnym porządku.

HashSet dopuszcza elementy zerowe.

TreeSet nie zezwala na elementy zerowe.

HashSet jest implementowany przez klasę HashSet.

TreeSet jest implementowany przez klasę TreeSet.

HashSet hs = nowy HashSet();

TreeSet ts = nowy TreeSet();

Pytania do rozmowy kwalifikacyjnej w języku Java – często zadawane pytania

Pytanie 1. Jaka jest pensja programisty Java w Indiach?

Według różnych źródeł średnia pensja programisty Java Backend Developer wynosi ponad 14 lakhs rocznie, czyli o 30% więcej niż w przypadku jakiejkolwiek innej roli programisty . Tutaj możesz również sprawdzić nasz najnowszy kurs na Portal ćwiczeń GeekforGeeks może być również pomocne.

Pytanie 5. Jak wyróżnić się na rozmowie kwalifikacyjnej w języku Java?

Aby wyróżnić się podczas rozmowy kwalifikacyjnej w języku Java, wykaż się głębokim zrozumieniem koncepcji i praktycznych zastosowań języka Java. Zaprezentuj swoje umiejętności rozwiązywania problemów, wyjaśniając swoje podejście do złożonych scenariuszy i zapewniając skuteczne rozwiązania. Dodatkowo wyróżnij wszelkie istotne projekty lub wkład, jaki wniosłeś do społeczności Java. Okazywanie entuzjazmu, dobrej komunikacji i chęci do nauki może również wywrzeć pozytywne wrażenie.