top 50 core java interview questions
가장 자주 묻는 Java 인터뷰 질문 및 답변 예제 :
이 튜토리얼에서는 신입생과 경험 많은 후보자를위한 거의 50 개 이상의 중요한 Java 인터뷰 질문을 다루었습니다.
JAVA 인터뷰 질문에 대한이 게시물은 인터뷰 목적으로 Java 프로그래밍의 기본 개념을 이해하는 데 도움이되도록 준비되었습니다. 모든 중요한 JAVA 개념은 이해하기 쉽도록 예제와 함께 여기에 설명되어 있습니다.
이 튜토리얼에서는 기본 Java 정의, OOP 개념, 액세스 지정자, 컬렉션, 예외, 스레드, 직렬화 등과 같은 JAVA 주제를 완벽하게 준비 할 수있는 예제와 함께 다룹니다. 모든 JAVA 인터뷰를 자신있게 직면합니다.
가장 인기있는 자바 인터뷰 질문 및 답변
다음은 가장 중요하고 자주 묻는 기본 및 고급 Java 프로그래밍 인터뷰 질문의 포괄적 인 목록과 자세한 답변입니다.
Q # 1) JAVA 란?
대답: Java는 고급 프로그래밍 언어이며 플랫폼에 독립적입니다.
Java는 개체 모음입니다. Sun Microsystems에서 개발했습니다. Java를 사용하여 개발 된 많은 응용 프로그램, 웹 사이트 및 게임이 있습니다.
Q # 2) JAVA의 기능은 무엇입니까?
답변 : Java의 기능은 다음과 같습니다.
- OOP 개념
- 객체 지향
- 계승
- 캡슐화
- 다형성
- 추출
- 플랫폼 독립적 : 단일 프로그램은 수정없이 다른 플랫폼에서 작동합니다.
- 고성능 : JIT (Just In Time 컴파일러)는 Java에서 고성능을 지원합니다. JIT는 바이트 코드를 기계어로 변환 한 다음 JVM이 실행을 시작합니다.
- 다중 스레드 : 실행 흐름을 스레드라고합니다. JVM은 메인 스레드라는 스레드를 생성합니다. 사용자는 스레드 클래스를 확장하거나 Runnable 인터페이스를 구현하여 여러 스레드를 만들 수 있습니다.
Q # 3) Java는 어떻게 고성능을 가능하게합니까?
대답: Java는 Just In Time 컴파일러를 사용하여 고성능을 지원합니다. 명령어를 바이트 코드로 변환하는 데 사용됩니다.
Q # 4) Java IDE의 이름을 지정 하시겠습니까?
대답: Eclipse와 NetBeans는 JAVA의 IDE입니다.
Q # 5) Constructor는 무엇을 의미합니까?
답변 : 생성자는 참여 포인트로 자세히 설명 할 수 있습니다.
- 프로그램에서 새 객체가 생성되면 생성자가 클래스에 해당하는 호출을받습니다.
- 생성자는 클래스 이름과 동일한 이름을 가진 메서드입니다.
- 사용자가 생성자를 암시 적으로 생성하지 않으면 기본 생성자가 생성됩니다.
- 생성자는 오버로드 될 수 있습니다.
- 사용자가 매개 변수가있는 생성자를 만든 경우 매개 변수없이 명시 적으로 다른 생성자를 만들어야합니다.
Q # 6) 로컬 변수와 인스턴스 변수는 무엇을 의미합니까?
대답:
지역 변수 메서드 자체 내에 존재하는 변수의 메서드 및 범위에 정의됩니다.
인스턴스 변수 클래스 내부 및 메서드 외부에서 정의되며 변수의 범위는 클래스 전체에 존재합니다.
Q # 7) 수업이란 무엇입니까?
대답: 모든 Java 코드는 클래스에 정의됩니다. 변수와 메서드가 있습니다.
변수 클래스의 상태를 정의하는 속성입니다.
행동 양식 정확한 비즈니스 로직이 수행되어야하는 곳입니다. 특정 요구 사항을 충족하기위한 일련의 명령문 (또는) 지침이 포함되어 있습니다.
예:
public class Addition{ //Class name declaration int a = 5; //Variable declaration int b= 5; public void add(){ //Method declaration int c = a+b; } }
Q # 8) 개체 란 무엇입니까?
대답: 클래스의 인스턴스를 객체라고합니다. 개체에는 상태와 동작이 있습니다.
JVM이 'new ()'키워드를 읽을 때마다 해당 클래스의 인스턴스를 만듭니다.
예:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
위의 코드는 Addition 클래스에 대한 개체를 만듭니다.
Q # 9) OOP의 개념은 무엇입니까?
답변 : OOP 개념에는 다음이 포함됩니다.
- 계승
- 캡슐화
- 다형성
- 추출
- 상호 작용
추천 읽기 = >> 상위 OOP 인터뷰 질문
Q # 10) 상속이란 무엇입니까?
대답: 상속은 한 클래스가 다른 클래스로 확장 될 수 있음을 의미합니다. 따라서 한 클래스에서 다른 클래스로 코드를 재사용 할 수 있습니다. 기존 클래스를 Super 클래스라고하는 반면 파생 클래스를 하위 클래스라고합니다.
예:
자바는 배열에서 요소를 제거
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
상속은 일반 회원과 보호 대상 회원에게만 적용됩니다. 비공개 회원은 상속 할 수 없습니다.
Q # 11) 캡슐화 란 무엇입니까?
답변 : 캡슐화의 목적 :
- 다른 사람으로부터 코드를 보호합니다.
- 코드 유지 관리.
예:
'a'를 정수 변수로 선언하고 있으며 음수가 아니어야합니다.
public class Addition(){ int a=5; }
누군가 정확한 변수를“ a = -5 ' 그러면 나쁘다.
문제를 극복하려면 아래 단계를 따라야합니다.
- 변수를 private 또는 protected로 만들 수 있습니다.
- set 및 get과 같은 공용 접근 자 메서드를 사용합니다.
위의 코드를 다음과 같이 수정할 수 있습니다.
public class Addition(){ private int a = 5; //Here the variable is marked as private }
아래 코드는 getter 및 setter를 보여줍니다.
변수를 설정하는 동안 조건을 제공 할 수 있습니다.
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
캡슐화를 위해 모든 인스턴스 변수를 비공개로 만들고 해당 변수에 대한 setter 및 getter를 만들어야합니다. 그러면 다른 사람들이 데이터에 직접 액세스하는 대신 setter를 호출하게됩니다.
Q # 12) 다형성이란 무엇입니까?
대답: 다형성은 다양한 형태를 의미합니다.
단일 객체는 다형성이라고하는 참조 유형에 따라 수퍼 클래스 또는 하위 클래스를 참조 할 수 있습니다.
예:
Public class Manipulation(){ //Super class public void add(){ } } public class Addition extends Manipulation(){ // Sub class public void add(){ } public static void main(String args()){ Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type addition.add(); } }
Manipulation 참조 유형을 사용하여 Addition 클래스 'add ()'메서드를 호출 할 수 있습니다. 이 능력을 다형성이라고합니다. 다형성은 다음에 적용 가능합니다. 재정의 그리고 아닙니다 과부하 .
Q # 13) 메서드 재정의는 무엇을 의미합니까?
답변 : 하위 클래스 메서드가 Super-class 메서드와 함께 아래 조건을 충족하면 메서드 재정의가 발생합니다.
- 메서드 이름은 동일해야합니다.
- 인수는 동일해야합니다.
- 반환 유형도 동일해야합니다.
재정의의 주요 이점은 하위 클래스가 수퍼 클래스보다 해당 하위 클래스 유형에 대한 특정 정보를 제공 할 수 있다는 것입니다.
예:
public class Manipulation{ //Super class public void add(){ ……………… } } Public class Addition extends Manipulation(){ Public void add(){ ……….. } Public static void main(String args()){ Manipulation addition = new Addition(); //Polimorphism is applied addition.add(); // It calls the Sub class add() method } }
추가 .add () 메서드는 부모 클래스가 아닌 하위 클래스에서 add () 메서드를 호출합니다. 따라서 수퍼 클래스 메서드를 재정의하고 메서드 재정의라고합니다.
Q # 14) 오버로딩이란 무엇입니까?
대답: 메서드 오버로딩은 다른 클래스 또는 동일한 클래스 내에서 발생합니다.
메서드 오버로딩의 경우 하위 클래스 메서드는 동일한 클래스 자체의 Super-class 메서드 (또는) 메서드로 아래 조건을 충족해야합니다.
- 동일한 방법 이름
- 다른 인수 유형
- 다른 반환 유형이있을 수 있습니다.
예:
public class Manipulation{ //Super class public void add(String name){ //String parameter ……………… } } Public class Addition extends Manipulation(){ Public void add(){//No Parameter ……….. } Public void add(int a){ //integer parameter } Public static void main(String args()){ Addition addition = new Addition(); addition.add(); } }
여기서 add () 메서드에는 Addition 클래스의 다른 매개 변수가 있으며 수퍼 클래스와 동일한 클래스에서 오버로드됩니다.
노트 : 메서드 오버로딩에는 다형성이 적용되지 않습니다.
Q # 15) 인터페이스 란 무엇입니까?
대답: Java에서는 다중 상속을 얻을 수 없습니다. 이 문제를 극복하기 위해 인터페이스 개념이 도입되었습니다.
인터페이스는 메서드 구현이 아닌 메서드 선언 만있는 템플릿입니다.
예:
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
- 인터페이스의 모든 메소드는 내부적으로 공개 추상 무효 .
- 인터페이스의 모든 변수는 내부적으로 공개 정적 결승 그것은 상수입니다.
- 클래스는 인터페이스를 구현할 수 있으며 확장 할 수 없습니다.
- 인터페이스를 구현하는 클래스는 인터페이스에 선언 된 모든 메소드에 대한 구현을 제공해야합니다.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface Public void add(){ …………… } Public void subtract(){ ……………. } }
Q # 16) 추상 클래스는 무엇을 의미합니까?
대답: 클래스 이름 앞에 'Abstract'키워드를 사용하여 Abstract 클래스를 만들 수 있습니다. 추상 클래스는 구체적인 클래스 인“Abstract”메서드와“Non-abstract”메서드를 모두 가질 수 있습니다.
추상 방법 :
구현이 아닌 선언 만있는 메서드를 추상 메서드라고하며 'abstract'라는 키워드가 있습니다. 선언은 세미콜론으로 끝납니다.
예:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- 추상 클래스는 비추 상 메서드도 가질 수 있습니다.
- Abstract 클래스를 확장하는 구체적인 Subclass는 추상 메서드에 대한 구현을 제공해야합니다.
Q # 17) Array와 Array List의 차이점.
대답: 어레이와 어레이 목록의 차이점은 아래 표에서 이해할 수 있습니다.
정렬 | 어레이 목록 |
---|---|
크기는 배열 선언시 제공되어야합니다. 문자열 () 이름 = 새 문자열 (2) | 크기가 필요하지 않을 수 있습니다. 크기를 동적으로 변경합니다. ArrayList 이름 = 새 ArrayList |
객체를 배열에 넣으려면 인덱스를 지정해야합니다. 이름 (1) =“책” | 색인이 필요하지 않습니다. name.add ( 'book') |
배열이 매개 변수화 된 유형이 아닙니다. | Java 5.0의 ArrayList는 매개 변수화됩니다. 예 :이 꺾쇠 괄호는 문자열 목록을 의미하는 유형 매개 변수입니다. |
Q # 18) String, String Builder, String Buffer의 차이점.
대답:
끈: 문자열 변수는 '상수 문자열 풀'에 저장됩니다. 문자열 참조가 '상수 문자열 풀'에 존재하는 이전 값을 변경하면 지울 수 없습니다.
예:
문자열 이름 =“book”;
상수 문자열 풀
.
이름-값이 'book'에서 'pen'으로 변경된 경우.
상수 문자열 풀
그러면 이전 값이 상수 문자열 풀에 남아 있습니다.
문자열 버퍼 :
- 여기서 문자열 값은 스택에 저장됩니다. 값이 변경되면 새 값이 이전 값을 대체합니다.
- 스레드로부터 안전한 문자열 버퍼가 동기화됩니다.
- 성능은 String Builder보다 느립니다.
예:
문자열 버퍼 이름 =”book”;
이름 값이 'pen'으로 변경되면 스택에서 'book'이 지워집니다.
문자열 작성기 :
이것은 동기화되지 않고 안전하게 쓰레드되지 않는 String Builder를 제외하고는 String Buffer와 동일합니다. 그래서 분명히 성능이 빠릅니다.
Q # 19) 공용 및 개인 액세스 지정자에 대해 설명하십시오.
대답: 메서드와 인스턴스 변수를 멤버라고합니다.
공공의:
공용 멤버는 동일한 패키지 및 다른 패키지 용 외부 패키지에서 볼 수 있습니다.
클래스 A의 공용 멤버는 클래스 B (동일한 패키지)와 클래스 C (다른 패키지)에 표시됩니다.
은밀한:
Private 멤버는 동일한 클래스에서만 볼 수 있으며 동일한 패키지의 다른 클래스와 외부 패키지의 클래스에서는 볼 수 없습니다.
클래스 A의 개인 멤버는 해당 클래스에서만 볼 수 있습니다. 클래스 B와 클래스 C에는 보이지 않습니다.
Q # 20) 기본 및 보호 된 액세스 지정자의 차이점.
대답:
기본: 액세스 지정자가없는 클래스에서 선언 된 메서드와 변수를 기본값이라고합니다.
클래스 A의 기본 멤버는 패키지 내부에있는 다른 클래스에는 표시되고 패키지 외부에있는 클래스에는 표시되지 않습니다.
따라서 클래스 A 멤버는 클래스 B에 표시되고 클래스 C에는 표시되지 않습니다.
보호됨 :
.
Protected는 Default와 동일하지만 클래스가 확장되면 패키지 외부에 있어도 표시됩니다.
클래스 A 멤버는 패키지 내부에 있기 때문에 클래스 B에 표시됩니다. 클래스 C의 경우 보이지 않지만 클래스 C가 클래스 A를 확장하면 멤버가 패키지 외부에 있더라도 클래스 C에 표시됩니다.
Q # 21) HashMap과 HashTable의 차이점.
대답: HashMap과 HashTable의 차이점은 다음과 같습니다.
HashMap | HashTable |
---|---|
방법이 동기화되지 않음 | 주요 방법이 동기화 됨 |
스레드 안전성이 아님 | 스레드 안전성 |
반복자는 값을 반복하는 데 사용됩니다. | 열거자는 값을 반복하는 데 사용됩니다. |
하나의 null 키와 여러 개의 null 값을 허용합니다. | null 인 것은 허용하지 않습니다. |
성능이 HashTable보다 높습니다. | 성능이 느립니다 |
Q # 22) HashSet과 TreeSet의 차이점.
대답: HashSet과 TreeSet의 차이점은 다음과 같습니다.
HashSet | TreeSet |
---|---|
삽입 된 요소는 무작위 순서입니다. | 정렬 된 순서로 요소를 유지합니다. |
null 개체를 저장할 수 있음 | null 개체를 저장할 수 없습니다. |
빠른 성능 | 성능이 느립니다 |
Q # 23) 추상 클래스와 인터페이스의 차이점.
답변 : 추상 클래스와 인터페이스의 차이점은 다음과 같습니다.
초록 클래스 :
- 추상 클래스에는 기본 생성자가 있으며 구체적인 하위 클래스가 인스턴스화 될 때마다 호출됩니다.
- 그것은 추상 메서드와 비추 상 메서드를 포함합니다.
- Abstract 클래스를 확장하는 클래스는 모든 메서드를 구현할 필요가 없으며, 구체적인 하위 클래스에서 Abstract 메서드 만 구현하면됩니다.
- 추상 클래스는 인스턴스 변수를 포함합니다.
상호 작용:
- 생성자가 없으며 인스턴스화 할 수 없습니다.
- 추상 메서드 만 선언해야합니다.
- 인터페이스를 구현하는 클래스는 모든 메소드에 대한 구현을 제공해야합니다.
- 인터페이스에는 상수 만 포함됩니다.
큐 # 24) Java에서 컬렉션의 의미는 무엇입니까?
대답: 컬렉션은 개체를 저장하고 디자인을 조작하여 개체를 저장하도록 설계된 프레임 워크입니다.
컬렉션은 다음 작업을 수행하는 데 사용됩니다.
- 수색
- 정렬
- 시장 조작
- 삽입
- 삭제
개체 그룹을 컬렉션이라고합니다. 수집을위한 모든 클래스와 인터페이스는 Java util 패키지에서 사용할 수 있습니다.
Q # 25) 컬렉션에서 사용할 수있는 모든 클래스와 인터페이스는 무엇입니까?
대답: 컬렉션에서 사용할 수있는 클래스와 인터페이스는 다음과 같습니다.
인터페이스 :
- 수집
- 명부
- 세트
- 지도
- 정렬 된 세트
- 정렬 된지도
- 열
클래스:
- 기울기:
- 어레이 목록
- 벡터
- 연결된 목록
세트 :
- 해시 세트
- 연결된 해시 세트
- 트리 세트
지도 :
- 해시 맵
- 해시 테이블
- TreeMap
- 연결된 해시 맵
열:
- 우선 순위 대기열
Q # 26) 컬렉션에서 정렬 및 정렬은 무엇을 의미합니까?
대답:
주문 : 이는 컬렉션에 저장된 값이 컬렉션에 추가 된 값을 기반으로 함을 의미합니다. 따라서 컬렉션의 값을 특정 순서로 반복 할 수 있습니다.
정렬 : 특정 컬렉션에서 정렬 된 개체 그룹이 개체의 속성을 기반으로하도록 정렬 메커니즘을 내부 또는 외부에 적용 할 수 있습니다.
Q # 27) 컬렉션에서 사용할 수있는 다른 목록을 설명하십시오.
대답: 목록에 추가 된 값은 인덱스 위치를 기준으로하며 인덱스 위치별로 정렬됩니다. 중복이 허용됩니다.
목록 유형은 다음과 같습니다.
a) 어레이 목록 :
- 빠른 반복 및 빠른 랜덤 액세스.
- 정렬 된 컬렉션 (인덱스 기준)이며 정렬되지 않습니다.
- 랜덤 액세스 인터페이스를 구현합니다.
예:
public class Fruits{ public static void main (String ( ) args){ ArrayList names=new ArrayList (); names.add (“apple”); names.add (“cherry”); names.add (“kiwi”); names.add (“banana”); names.add (“cherry”); System.out.println (names); } }
산출:
(사과, 체리, 키위, 바나나, 체리)
출력에서 배열 목록은 삽입 순서를 유지하고 중복을 허용합니다. 하지만 정렬되지 않았습니다.
b) 벡터 :
Array List와 동일합니다.
- 벡터 방법은 동기화됩니다.
- 스레드 안전성.
- 또한 임의 액세스를 구현합니다.
- 스레드 안전성은 일반적으로 성능 저하를 유발합니다.
예:
public class Fruit { public static void main (String ( ) args){ Vector names = new Vector ( ); names.add (“cherry”); names.add (“apple”); names.add (“banana”); names.add (“kiwi”); names.add (“apple”); System.out.println (“names”); } }
산출:
(체리, 사과, 바나나, 키위, 사과)
벡터는 또한 삽입 순서를 유지하고 중복을 허용합니다.
c) 연결 목록 :
- 요소는 서로 이중으로 연결됩니다.
- 성능이 어레이 목록보다 느립니다.
- 삽입 및 삭제를위한 좋은 선택입니다.
- Java 5.0에서는 공통 큐 메소드 peek (), Pool (), Offer () 등을 지원합니다.
예:
public class Fruit { public static void main (String ( ) args){ Linkedlist names = new linkedlist ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
산출:
(바나나, 체리, 사과, 키위, 바나나)
게재 신청서를 유지하고 중복을 허용합니다.
Q # 28) 컬렉션에서 세트와 그 유형에 대해 설명하십시오.
대답: 세트는 독창성을 중요시합니다. 중복을 허용하지 않습니다. 여기서 'equals ()'방법은 두 개체가 동일한 지 여부를 결정하는 데 사용됩니다.
a) 해시 세트 :
- 정렬되지 않고 정렬되지 않았습니다.
- 개체의 해시 코드를 사용하여 값을 삽입합니다.
- 요구 사항이 '중복이없고 주문에 대해 신경 쓰지 않음'일 때 사용하십시오.
예:
public class Fruit { public static void main (String( ) args){ HashSet names = new HashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
산출:
(바나나, 체리, 키위, 사과)
게재 신청서를 따르지 않습니다. 중복은 허용되지 않습니다.
b) 연결된 해시 세트 :
- 해시 세트의 정렬 된 버전을 링크 된 해시 세트라고합니다.
- 모든 요소의 이중 링크 목록을 유지합니다.
- 반복 순서가 필요할 때 사용합니다.
예:
public class Fruit { public static void main (String( ) args){ LinkedHashSet; names = new LinkedHashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
산출:
(바나나, 체리, 사과, 키위)
세트에 추가 된 삽입 순서를 유지합니다. 중복은 허용되지 않습니다.
c) 트리 세트 :
- 두 개의 정렬 된 컬렉션 중 하나입니다.
- 'Read-Black'트리 구조를 사용하고 요소가 오름차순이되도록 보장합니다.
- 비교 가능한 (또는) 비교기를 사용하여 생성자로 트리 세트를 구성 할 수 있습니다.
예:
public class Fruits{ public static void main (String( )args) { Treeset names= new TreeSet( ) ; names.add(“cherry”); names.add(“banana”); names.add(“apple”); names.add(“kiwi”); names.add(“cherry”); System.out.println(names); } }
산출:
(사과, 바나나, 체리, 키위)
TreeSet은 요소를 오름차순으로 정렬합니다. 그리고 중복은 허용되지 않습니다.
Q # 29)지도와 그 종류에 대해 설명해주세요.
답 :지도 고유 식별자에 관심이 있습니다. 고유 키를 특정 값에 매핑 할 수 있습니다. 키 / 값 쌍입니다. 키를 기반으로 값을 검색 할 수 있습니다. 세트와 마찬가지로 맵은 'equals ()'방법을 사용하여 두 키가 동일한 지 다른지 확인합니다.
지도의 유형은 다음과 같습니다.
a) 해시 맵 :
- 정렬되지 않고 정렬되지 않은지도.
- Hashmap은 주문에 관심이 없을 때 좋은 선택입니다.
- 하나의 null 키와 여러 개의 null 값을 허용합니다.
예:
Public class Fruit{ Public static void main(String( ) args){ HashMap names =new HashMap( ); names.put(“key1”,“cherry”); names.put (“key2”,“banana”); names.put (“key3”,“apple”); names.put (“key4”,“kiwi”); names.put (“key1”,“cherry”); System.out.println(names); } }
산출:
{key2 = banana, key1 = cherry, key4 = kiwi, key3 = apple}
중복 키는지도에서 허용되지 않습니다.
게재 신청서를 유지하지 않으며 정렬되지 않습니다.
b) 해시 테이블 :
- 벡터 키와 마찬가지로 클래스의 메서드가 동기화됩니다.
- 스레드 안전성으로 인해 성능이 저하됩니다.
- null 인 것은 허용되지 않습니다.
예:
public class Fruit{ public static void main(String( )args){ Hashtable names =new Hashtable( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
산출:
{key2 = 사과, key1 = cherry, key4 = kiwi, key3 = banana}
중복 키는 허용되지 않습니다.
씨) 연결된 해시 맵 :
- 게재 신청서를 유지합니다.
- 해시 맵보다 느립니다.
- 더 빠른 반복을 기대할 수 있습니다.
예:
public class Fruit{ public static void main(String( ) args){ LinkedHashMap names =new LinkedHashMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
산출:
{key2 = 사과, key1 = cherry, key4 = kiwi, key3 = banana}
중복 키는 허용되지 않습니다.
d) 트리 맵 :
- 정렬 된지도.
- 트리 세트와 마찬가지로 생성자로 정렬 순서를 구성 할 수 있습니다.
예:
public class Fruit{ public static void main(String( )args){ TreeMap names =new TreeMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“banana”); names.put(“key3”,“apple”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
산출:
{key1 = 체리, key2 = 바나나, key3 = 사과, key4 = kiwi}
키를 기준으로 오름차순으로 정렬됩니다. 중복 키는 허용되지 않습니다.
Q # 30) 우선 순위 대기열을 설명하십시오.
답변 : 대기열 인터페이스
우선 순위 대기열 : 연결된 목록 클래스가 큐 인터페이스를 구현하도록 향상되었습니다. 큐는 연결 목록으로 처리 할 수 있습니다. 대기열의 목적은“우선 순위 입력, 우선 순위 출력”입니다.
따라서 요소는 자연스럽게 또는 비교기에 따라 정렬됩니다. 요소 순서는 상대적 우선 순위를 나타냅니다.
Q # 31) 예외 란 무엇입니까?
대답: 예외는 정상적인 실행 흐름 중에 발생할 수있는 문제입니다. 메서드는 런타임에 무언가가 울릴 때 예외를 throw 할 수 있습니다. 해당 예외를 처리 할 수없는 경우 작업이 완료되기 전에 실행이 종료됩니다.
예외를 처리하면 정상적인 흐름이 계속됩니다. 예외는 java.lang.Exception의 하위 클래스입니다.
예외 처리의 예 :
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
Q # 32) 예외의 유형은 무엇입니까?
대답: 두 가지 유형의 예외가 있습니다. 아래에서 자세히 설명합니다.
a) 확인 된 예외 :
이러한 예외는 컴파일시 컴파일러에서 확인합니다. 런타임 예외 및 오류를 제외하고 Throwable 클래스를 확장하는 클래스를 확인 된 예외라고합니다.
확인 된 예외는 throws 키워드를 사용하여 (또는) 적절한 try / catch로 둘러싸인 예외를 선언해야합니다.
예를 들어, ClassNotFound 예외
b) 확인되지 않은 예외 :
이러한 예외는 컴파일러가 컴파일 시간 동안 확인하지 않습니다. 컴파일러는 이러한 예외를 강제로 처리하지 않습니다. 다음이 포함됩니다.
- 산술 예외
- ArrayIndexOutOfBounds 예외
Q # 33) 예외를 처리하는 다른 방법은 무엇입니까?
대답: 예외를 처리하는 두 가지 다른 방법이 아래에 설명되어 있습니다.
a) try / catch 사용 :
위험한 코드는 try 블록으로 둘러싸여 있습니다. 예외가 발생하면 try 블록이 뒤 따르는 catch 블록에 의해 포착됩니다.
예:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
b) throws 키워드를 선언하여 :
메서드의 끝에서 throws 키워드를 사용하여 예외를 선언 할 수 있습니다.
예:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
Q # 34) 예외 처리의 장점은 무엇입니까?
답변 : 장점은 다음과 같습니다.
- 예외가 처리되면 정상적인 실행 흐름이 종료되지 않습니다.
- catch 선언을 사용하여 문제를 식별 할 수 있습니다.
Q # 35) Java에서 예외 처리 키워드는 무엇입니까?
답변 : 다음은 두 가지 예외 처리 키워드입니다.
시도:
위험한 코드가 try 블록으로 둘러싸 일 때. try 블록에서 발생하는 예외는 catch 블록에서 포착됩니다. Try 뒤에 catch (또는) finally (또는) 둘 다 올 수 있습니다. 그러나 블록 중 하나는 필수입니다.
b) 잡기 :
그 뒤에 try 블록이 나옵니다. 여기에 예외가 있습니다.
c) 마지막으로 :
그 다음에는 try 블록 (또는) catch 블록이옵니다. 이 블록은 예외에 관계없이 실행됩니다. 따라서 일반적으로 정리 코드가 여기에 제공됩니다.
Q # 36) 예외 전파에 대해 설명하십시오.
대답: 예외는 스택의 맨 위에있는 메소드에서 먼저 발생합니다. 잡히지 않으면 메서드를 팝업하고 이전 메서드로 이동하는 식으로 얻을 때까지 계속합니다.
이를 예외 전파라고합니다.
예:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
위의 예에서 스택은 다음과 같습니다.
예외가 발생하는 경우 부가() 메서드가 잡히지 않으면 메서드로 이동합니다. 더하다() . 그런 다음 본관() 메서드를 사용하면 실행 흐름이 중지됩니다. 이를 예외 전파라고합니다.
Q # 37) Java의 최종 키워드는 무엇입니까?
대답:
변수 결말 : 변수가 final로 선언되면 변수 값을 변경할 수 없습니다. 상수와 같습니다.
예:
최종 정수 = 12;
최종 방법 : 메서드의 최종 키워드는 재정의 할 수 없습니다. 메서드가 final로 표시되면 하위 클래스에서 재정의 할 수 없습니다.
최종 수업 : 클래스가 final로 선언되면 클래스를 하위 클래스로 만들 수 없습니다. 어떤 클래스도 최종 클래스를 확장 할 수 없습니다.
Q # 38) 스레드 란 무엇입니까?
대답: Java에서는 실행 흐름을 Thread라고합니다. 모든 Java 프로그램에는 주 스레드라는 스레드가 하나 이상 있으며 주 스레드는 JVM에 의해 생성됩니다. 사용자는 Runnable 인터페이스를 구현하여 Thread 클래스 (또는)를 확장하여 자신의 스레드를 정의 할 수 있습니다. 스레드는 동시에 실행됩니다.
예:
public static void main(String() args){//main thread starts here }
Q # 39) Java로 스레드를 어떻게 만드나요?
대답: 스레드를 만드는 데는 두 가지 방법이 있습니다.
a) 스레드 클래스 확장 : Thread 클래스를 확장하고 run 메서드를 재정의합니다. 스레드는 java.lang.thread에서 사용할 수 있습니다.
예:
Public class Addition extends Thread { public void run () { } }
스레드 클래스 사용의 단점은 이미 스레드 클래스를 확장했기 때문에 다른 클래스를 확장 할 수 없다는 것입니다. 클래스에서 run () 메서드를 오버로드 할 수 있습니다.
b) 실행 가능한 인터페이스 구현 : 또 다른 방법은 실행 가능한 인터페이스를 구현하는 것입니다. 이를 위해 인터페이스에 정의 된 run () 메서드에 대한 구현을 제공해야합니다.
예:
Public class Addition implements Runnable { public void run () { } }
Q # 40) join () 방법에 대해 설명해주세요.
대답: Join () 메서드는 현재 실행중인 스레드의 끝과 하나의 스레드를 결합하는 데 사용됩니다.
예:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
위의 코드를 기반으로 메인 스레드가 실행을 시작했습니다. 코드에 도달하면 t.start () 그런 다음‘thread t’는 실행을 위해 자체 스택을 시작합니다. JVM은 주 스레드와 '스레드 t'사이를 전환합니다.
코드에 도달하면 t.join () 그러면 'thread t'만 실행되어 작업을 완료하면 메인 스레드 만 실행을 시작합니다.
비 정적 방법입니다. Join () 메서드에 오버로드 된 버전이 있습니다. 그래서 우리는 join () 메서드에서 '.s'도 언급 할 수 있습니다.
Q # 41) Thread 클래스의 yield 메서드는 무엇을합니까?
대답: yield () 메서드는 현재 실행중인 스레드를 실행 가능한 상태로 이동하고 다른 스레드의 실행을 허용합니다. 따라서 우선 순위가 동일한 스레드가 실행될 수 있습니다. 정적 방법입니다. 잠금을 해제하지 않습니다.
Yield () 메서드는 스레드를 다시 Runnable 상태로만 이동하고 스레드는 절전 (), 대기 () (또는) 블록으로 이동하지 않습니다.
예:
public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ Thread.yield(); } }
Q # 42) wait () 메서드에 대해 설명해주세요.
답 : 잠깐 () 메소드는 스레드가 대기 풀에서 대기하도록하는 데 사용됩니다. 스레드 실행 중에 wait () 메서드가 실행되면 즉시 스레드가 객체에 대한 잠금을 해제하고 대기 풀로 이동합니다. Wait () 메서드는 지정된 시간 동안 스레드가 대기하도록 지시합니다.
그런 다음 스레드는 notify () (또는) 모든 () 메서드가 호출 된 후 깨어납니다.
Wait () 및 위에서 언급 한 다른 메서드는 현재 실행중인 스레드가 동기화 된 코드를 완료 할 때까지 객체에 대한 잠금을 즉시 제공하지 않습니다. 주로 동기화에 사용됩니다.
예:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
Q # 43) Java에서 notify () 메소드와 notifyAll () 메소드의 차이점.
답변 : notify () 메서드와 notifyAll () 메서드의 차이점은 다음과 같습니다.
알림 () | notifyAll () |
---|---|
이 메서드는 대기 풀에서 단일 스레드를 깨우기위한 신호를 보내는 데 사용됩니다. | 이 메소드는 대기중인 스풀의 모든 스레드를 깨우기위한 신호를 보냅니다. |
Q # 44) Java에서 스레드를 중지하는 방법은 무엇입니까? 스레드의 sleep () 메소드에 대해 설명 하시겠습니까?
대답: 다음 스레드 메서드를 사용하여 스레드를 중지 할 수 있습니다.
- 수면
- 기다리는
- 막힌
자다: Sleep () 메서드는 주어진 시간 동안 현재 실행중인 스레드를 휴면하는 데 사용됩니다. 스레드가 깨어 나면 실행 가능 상태로 이동할 수 있습니다. 따라서 sleep () 메서드는 일정 기간 동안 실행을 지연시키는 데 사용됩니다.
정적 방법입니다.
예:
실. 수면 (2000)
따라서 스레드가 2 밀리 초 동안 대기하도록 지연됩니다. Sleep () 메서드는 중단되지 않는 예외를 throw하므로 블록을 try / catch로 둘러싸 야합니다.
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
Q # 45) Java에서 Runnable 인터페이스 대 스레드 클래스를 언제 사용해야합니까?
대답: 스레드 이외의 다른 클래스를 확장하기 위해 클래스가 필요한 경우 Java에서는 하나의 클래스 만 확장 할 수 있기 때문에 실행 가능한 인터페이스를 사용할 수 있습니다.
클래스를 확장하지 않으려면 스레드 클래스를 확장 할 수 있습니다.
Q # 46) 스레드 클래스의 start () 메서드와 run () 메서드의 차이점.
대답: Start () 메서드는 새 스레드를 만들고 run () 메서드 내부의 코드는 새 스레드에서 실행됩니다. run () 메서드를 직접 호출하면 새 스레드가 생성되지 않고 현재 실행중인 스레드가 계속 run () 메서드를 실행합니다.
Q # 47) 멀티 스레딩이란?
대답: 여러 스레드가 동시에 실행됩니다. 각 스레드는 스레드의 흐름 (또는) 우선 순위에 따라 자체 스택을 시작합니다.
예제 프로그램 :
public class MultipleThreads implements Runnable { public static void main (String() args){//Main thread starts here Runnable r = new runnable (); Thread t=new thread (); t.start ();//User thread starts here Addition add=new addition (); } public void run(){ go(); }//User thread ends here }
첫 번째 행 실행에서 JVM은 main 메소드를 호출하고 기본 스레드 스택은 아래와 같이 보입니다.
실행에 도달하면 t.start () 그러면 새 스레드가 생성되고 해당 스레드에 대한 새 스택도 생성됩니다. 이제 JVM이 새 스레드로 전환되고 기본 스레드가 다시 실행 가능 상태로 돌아갑니다.
두 스택은 아래와 같이 보입니다.
이제 사용자 스레드는 run () 메서드 내에서 코드를 실행했습니다.
run () 메서드가 완료되면 JVM이 다시 기본 스레드로 전환되고 사용자 스레드가 작업을 완료하고 스택이 사라집니다.
JVM은 두 스레드가 모두 완료 될 때까지 각 스레드간에 전환합니다. 이를 멀티 스레딩이라고합니다.
Q # 48) 자바의 쓰레드 라이프 사이클을 설명하세요.
대답: 스레드의 상태는 다음과 같습니다.
- 새로운
- 실행 가능
- 달리는
- 실행할 수 없음 (차단됨)
- 종료 됨
- 새로운: New 상태에서 Thread 인스턴스가 생성되었지만 start () 메서드가 아직 호출되지 않았습니다. 이제 스레드는 살아있는 것으로 간주되지 않습니다.
- 실행 가능 : Thread는 start () 메서드 호출 후 run () 메서드가 호출되기 전에 실행 가능한 상태입니다. 그러나 스레드는 대기 / 수면 상태에서 실행 가능 상태로 돌아갈 수도 있습니다. 이 상태에서 스레드는 살아있는 것으로 간주됩니다.
- 달리는 : 스레드가 run () 메서드를 호출 한 후 실행중인 상태입니다. 이제 스레드가 실행을 시작합니다.
- 실행할 수 없음 (차단됨) : 스레드가 살아 있지만 실행할 수 없습니다. 실행 가능 상태가 아니라 시간이 지나면 실행 가능 상태로 돌아갑니다. 예: 잠깐, 잠, 차단.
- 종료 됨 : 실행 메소드가 완료되면 종료됩니다. 이제 스레드가 살아 있지 않습니다.
Q # 49) 동기화 란 무엇입니까?
대답: 동기화는 한 번에 하나의 스레드 만 코드 블록에 액세스하도록합니다. 여러 스레드가 코드 블록에 액세스하면 마지막에 부정확 한 결과가 나올 가능성이 있습니다. 이 문제를 방지하기 위해 민감한 코드 블록에 대한 동기화를 제공 할 수 있습니다.
동기화 된 키워드는 동기화 된 코드에 액세스하기 위해 스레드에 키가 필요함을 의미합니다.
잠금은 개체 당입니다. 모든 Java 객체에는 잠금이 있습니다. 자물쇠에는 키가 하나만 있습니다. 스레드는 잠글 개체에 대한 키를 가져올 수있는 경우에만 동기화 된 메서드에 액세스 할 수 있습니다.
이를 위해 'Synchronized'키워드를 사용합니다.
예:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
Q # 50) 동기화의 단점은 무엇입니까?
연령: 모든 방법을 구현하는 데 동기화를 권장하지 않습니다. 한 스레드가 동기화 된 코드에 액세스하면 다음 스레드가 기다려야하기 때문입니다. 따라서 다른 쪽에서는 성능이 느려집니다.
Q # 51) 직렬화 란 무엇입니까?
대답: 파일을 바이트 스트림으로 변환하는 것을 직렬화라고합니다. 파일의 개체는 보안을 위해 바이트로 변환됩니다. 이를 위해 java.io.Serializable 인터페이스를 구현해야합니다. 정의 할 방법이 없습니다.
임시로 표시된 변수는 직렬화의 일부가 아닙니다. 따라서 transient 키워드를 사용하여 파일의 변수에 대한 직렬화를 건너 뛸 수 있습니다.
더 알아보기 = >> 직렬화 및 복제 가능
Q # 52) 과도 변수의 목적은 무엇입니까?
대답: 일시적인 변수는 직렬화 프로세스의 일부가 아닙니다. 역 직렬화 중에 임시 변수의 값은 기본값으로 설정됩니다. 정적 변수와 함께 사용되지 않습니다.
예:
일시적인 정수;
Q # 53) Serialization 및 Deserialization 과정에서 어떤 방법이 사용됩니까?
대답: ObjectOutputStream 및 ObjectInputStream 클래스는 더 높은 수준의 java.io입니다. 꾸러미. 하위 레벨 클래스 FileOutputStream 및 FileInputStream과 함께 사용합니다.
ObjectOutputStream.writeObject —-> 개체를 직렬화하고 직렬화 된 개체를 파일에 씁니다.
ObjectInputStream.readObject -> 파일을 읽고 개체를 역 직렬화합니다.
직렬화하려면 객체가 직렬화 가능한 인터페이스를 구현해야합니다. 수퍼 클래스가 Serializable을 구현하면 서브 클래스는 자동으로 직렬화 가능합니다.
Q # 54) 휘발성 변수의 목적은 무엇입니까?
대답: 휘발성 변수 값은 항상 스레드의 캐시 메모리가 아닌 주 메모리에서 읽습니다. 이것은 주로 동기화 중에 사용됩니다. 변수에만 적용됩니다.
예:
휘발성 정수;
Q # 55) 자바에서 직렬화와 역 직렬화의 차이점.
대답: 다음은 Java에서 직렬화와 역 직렬화의 차이점입니다.
직렬화 | 역 직렬화 |
---|---|
직렬화는 객체를 바이트 스트림으로 변환하는 데 사용되는 프로세스입니다. | 역 직렬화는 바이트 스트림에서 개체를 다시 가져올 수있는 직렬화의 반대 프로세스입니다. |
객체는 ObjectOutputStream을 작성하여 직렬화됩니다. | 객체는 ObjectInputStream에서 읽어서 역 직렬화됩니다. |
Q # 56) SerialVersionUID 란 무엇입니까?
대답: 객체가 직렬화 될 때마다 객체에는 객체 클래스의 버전 ID 번호가 찍 힙니다. 이 ID를 SerialVersionUID라고합니다. 이것은 직렬화와 호환되는 송신자 및 수신자를 확인하기 위해 역 직렬화 중에 사용됩니다.
결론
다음은 프로그래밍을위한 기본 및 고급 Java 개념과 개발자 인터뷰를 모두 다루는 핵심 JAVA 인터뷰 질문 중 일부이며, JAVA 전문가가 답변 한 질문입니다.
이 튜토리얼이 JAVA 핵심 코딩 개념에 대한 자세한 통찰력을 제공하기를 바랍니다. 위에 주어진 설명은 지식을 풍부하게하고 JAVA 프로그래밍에 대한 이해를 높일 것입니다.
자신있게 JAVA 인터뷰를 시작할 준비를하십시오.