2022년 자바 인터뷰 질문과 답변
게시 됨: 2022-08-03당신은 프로그래머입니까? 경력을 쌓기 위해 선호하는 틈새 시장으로 Java 프로그래밍 언어를 선택했습니까? 축하합니다! 당신은 올바르게 선택했습니다. 통계에 따르면 미국 프로그래머는 연간 평균 $105,801를 번다. 시간당 평균 $50.87, 주당 $2,035, 월 $8,817입니다. 인상적이지 않습니까?
그러나 Java 프로그래머로서 꿈의 직업을 얻는 것은 희망사항을 넘어서는 것입니다. 전 세계적으로 800만 명의 Java 프로그래머 중 미국에서는 약 56,585명만이 취업을 하고 있어 Java 프로그래머로서의 취업 경쟁이 상당히 치열합니다. 그 꿈의 직업을 구해야 한다면 Java 프로그래밍 언어의 기본 및 복잡한 측면 모두를 잘 갖추고 있어야 합니다.
이제 Java 프로그래머로 취업하는 것이 얼마나 경쟁적인지, 그리고 Java 프로그래머로 취업하기 위해 소수의 자격을 갖추기 위한 요건을 알게 되었습니다. 성공은 기회를 만나는 준비의 기능이라는 것을 기억하십시오. 진행하면서 인터뷰 단계를 통해 확장하고 꿈의 직업을 얻을 수 있도록 질문 및 답변 가이드를 설계했습니다. 이 목록은 Apollotechnical에 대한 자바 인터뷰 질문과 답변을 준비하는 기사의 도움으로 작성되었습니다. 계속 진행해 봅시다.
신입생을 위한 기본 Java 인터뷰 질문
Java로 무엇을 이해합니까?
Java는 소셜 네트워킹 응용 프로그램, 오디오 및 비디오 프로그램, 게임, 대규모 데이터 처리, 임베디드 장치 등과 같은 다양한 작업을 위해 전 세계적으로 30억 개의 장치에서 사용되는 다목적 객체 지향 크로스 플랫폼 프로그래밍 언어입니다.
자바와 파이썬 비교
단순하다는 점에서 Java는 클래스를 기반으로 하지만 필요한 사양이 더 적은 범용 객체 중심 프로그래밍 언어입니다. 빠르고 안정적이며 결과 중심적이라는 평판으로 인해 휴대 전화, 게임 콘솔, 랩톱, 고급 과학 컴퓨터 등에서 응용 프로그램을 개발하는 데 사용되는 프로그래밍 언어입니다. 반면 Python은 번역되고 객체 중심적이며 향상된 동적으로 구조화된 프로그래밍 언어입니다. Python은 모듈과 패키지를 활성화하여 프로그램 유연성과 코드 재사용을 촉진합니다.
주요 Java 기능 개요
- 자바는 객체 중심이다
- Java는 플랫폼에 구애받지 않습니다.
- 뛰어난 멀티스레딩 구현
- 간단한 언어 사용
- 그리고 아키텍처는 중립적입니다.
Java에서 객체란 무엇을 의미합니까?
Java에서 객체는 '클래스'라고 하는 다른 Java 그룹의 구성 요소("인스턴스"라고도 함)입니다. 모든 객체에는 고유한 상태, 동작/동작 및 ID가 있습니다. 필드(변수)는 객체의 상태를 저장하는 반면 방법론(작업)은 객체의 동작을 보여줍니다. 런타임에 개체는 클래스로 식별된 프레임워크에서 생성됩니다.
개체는 실제 개체를 나타내는 개체 기반 프로그래밍의 기본 요소일 수도 있습니다.
Java 프로그래밍에서 Stringbuffer와 Stringbuilder 구별하기
StringBuffer와 StringBuilder는 성능/속도, 스레드 안전성, 가용성 및 동기화라는 네 가지 매개변수에서 주로 다릅니다. StringBuilder는 StringBuffer 클래스의 동기화되지 않은 변형입니다.
StringBuffer와 StringBuilder의 또 다른 차이점은 전자는 스레드로부터 안전하지만 후자는 그렇지 않다는 것입니다.
JDK, JRE 및 JVM 구분
JDK(Java Development Kit)에는 Java 프로그래밍 도구 작성, 문제 해결 및 분석이 포함됩니다. JRE는 JVM이 응용 프로그램을 실행하는 데 필요한 클래스 및 개체 및 기타 동반 파일의 집합입니다. JVM은 소프트웨어 개발 도구를 제공하지 않습니다.
JDK(Java Development Kit)는 Java 응용 프로그램을 만들기 위한 소프트웨어 제품입니다. JRE는 Java 프로그래밍을 실행하는 데 필요한 Java 클래스 라이브러리 및 기타 구성 요소를 포함하는 소프트웨어 패키지입니다. JVM(Java Virtual Machine)은 Java 바이트 언어를 해석하여 실행에 적합한 분위기를 만듭니다. JDK는 플랫폼별, JRE는 플랫폼 종속적, JVM은 더 높은 규모의 플랫폼 종속적입니다.
상속 정의
Java에서 상속은 한 클래스의 특성을 다른 클래스로 전달하는 원칙입니다. 이것은 한 클래스가 다른 클래스로부터 속성을 얻거나 한 클래스가 다른 클래스의 특성(메소드 및 속성)을 소유하도록 허용하는 Java의 프레임워크입니다.
자바에서 클래스란?
클래스는 객체 지향 프로그래밍의 기본 요소입니다. 클래스 인스턴스화에 따른 상태 및 기능을 정의하는 형식입니다. 클래스는 유사한 속성과 메서드를 공유하는 모델을 빌드하는 데 사용되기 때문에 논리적 템플릿이기도 합니다.
Java에서 오버로딩과 오버라이드 비교
오버로딩이란 같은 클래스의 메서드가 같은 이름을 가지지만 각각의 기준이 다르거나 같은 기준을 가지거나 종류와 순서가 다른 것을 말합니다. Overriding은 상위 클래스와 동일한 제목 아래 동일한 기술을 사용하는 하위 클래스와 동일한 유형의 기준 및 반환 값을 갖는 것을 의미합니다.
또한 오버로딩은 정적 결합 및 정적 메서드 오버로드가 있는 명령줄 다형성입니다. 재정의는 유연한 결합과 정적 메서드를 재정의할 수 없는 프로그램 실행 다형성입니다.
이중 확인 잠금을 사용하여 Java에서 스레드로부터 안전한 싱글톤 생성 설명
싱글톤 패턴은 클래스가 수명 동안 하나의 인스턴스로 제한되고 여러 클라이언트가 해당 인스턴스를 공유하는 잘 알려진 디자인 패턴입니다. Singleton 패턴은 두 가지 주요 책임으로 구현됩니다. 첫 번째는 하나의 클래스 인스턴스만 생성되도록 하는 것입니다. 두 번째는 모든 사람이 해당 특정 인스턴스에 전 세계적으로 액세스할 수 있는 방법을 제공하는 것입니다.
Multithreading 프로그램에서 Singleton 디자인이 직면하는 문제 중 하나는 다양한 사용자가 getInstance() 기술을 동시에 호출하더라도 클래스의 인스턴스를 하나만 생성하도록 하는 것입니다. 이중 확인 잠금 시스템은 getInstance() 함수가 처음으로 호출되고 동일한 인스턴스가 위의 동기화 없이 다시 반환될 때마다 Singleton의 개별 사례가 생성될 때만 동기화가 활용되도록 하여 이 딜레마를 수정합니다. 다른 모든 경우.
중급 자바 면접 질문
JDK 란 무엇입니까? JDK의 변형을 언급하시겠습니까?
JDK는 Java Development Kit의 약자입니다. JDK(Java Development Kit)는 모든 Java 애플리케이션 개발 중에 사용되는 소프트웨어입니다. JDK(Java Development Kit)에는 Java 프로그래밍 도구 작성, 문제 해결 및 분석이 포함됩니다.
기본적으로 JDK는 Java Standard Edition 또는 Java Enterprise Edition 구현입니다. Java는 중요한 플랫폼 업그레이드로 인해 1998년에 Java 2(Java 2 SDK 또는 J2SDK로 축약됨)로 이름이 변경되었습니다. 다양한 응용 프로그램을 지원하기 위해 세 가지 개별 Java 버전을 개발했습니다.
- J2SE는 Java 2 Platform, Basic and Usual Edition을 나타내며 데스크탑 및 서버 컨텍스트를 위한 것입니다.
- J2EE는 비즈니스 애플리케이션용으로 설계된 Java 2 Platform, Corporate Edition의 약자이며 클라우드 기반 스토리지 및 온라인 서비스 지원과 같은 기능을 포함합니다.
- J2ME(Java 2 Platform, Micro Edition)는 설치된 모바일 장치 또는 플랫폼용으로 지정됩니다.
그러나 2004년에 변종의 레이블이 각각 Java ME(Java 플랫폼의 Micro Edition), Java EE(Java 플랫폼의 Enterprise Edition) 및 Java SE(Java 플랫폼의 Standard Edition)로 수정되었습니다. 개발 키트의 이름도 "Java 2 SDK"에서 "JDK"로 변경되었습니다. 또한 운영 컨텍스트의 이름이 "J2RE"가 아닌 "JRE"로 변경되었습니다. 버전, Java SE 6 및 Java EE 5의 변형이 여전히 사용 중입니다.

생성자가 값을 반환할 수 있습니까?
생성자가 Java 프로그래밍 중에 사용되는 기존 기술과 다르다는 것을 이해하면 코드에 큰 영향을 미치거나 영향을 줄 수 있는 지정된 결과를 어떻게든 반환하거나 다시 가져오지 않습니다. 생성자는 명령을 무제한으로 포함할 수 있지만 명령문의 값이나 결과를 가져오거나 반환할 수는 없습니다.
Java에서 'THIS' 키워드 설명
'This'는 프로그래머가 현재 실행 중인 엔티티를 지정하는 Java의 특정 용어입니다. 키워드는 메소드 또는 생성자 내부에서 사용할 수 있는 연산자 – 마침표(.) 사용과 관련된 다른 매개변수의 접두사일 뿐입니다. 'This' 키워드는 대부분의 응용 프로그램이 필요했을 상황을 피하기 위한 것이기 때문에 자주 사용되지 않습니다. 인스턴스 변수에 대한 액세스는 'this'라는 용어를 통해 제공됩니다.
Java의 'SUPER' 키워드 설명
Java에서 캐치워드 'super'는 파생 클래스가 상위 클래스와 동일한 이름을 가진 그룹 또는 메소드에 매개변수가 있다고 가정할 때 상위 클래스 인스턴스를 참조하는 상속 개념과 관련된 상대 매개변수입니다. 이 용어는 하위 클래스가 기본 클래스의 매개변수, 함수 또는 생성자에 액세스해야 할 때 주로 사용됩니다.
Java에서 메소드 오버로딩 설명
Java에서 오버로딩은 동일한 이름과 클래스를 갖지만 다양한 기준을 갖는 메소드를 의미하며 그 반대의 경우도 마찬가지입니다. 둘 이상의 기술은 이름과 클래스가 동일하지만 오버로딩 시 서명이 다릅니다. 오버로딩은 메서드의 동작을 확장하여 오버로드를 유발하는 명령줄 다형성입니다.
Java에서 정적 메서드를 오버로드할 수 있습니까?
Java에서 정적 메서드는 오버로딩의 일반 방법론과 유사하게 동작하므로 오버로드될 수 있습니다. 그러나 목표가 정적 메서드를 오버로드하는 것이라면 이름은 같지만 다양한 방법론 서명을 가진 추가 정적 메서드를 제공해야 합니다.
후기 바인딩 정의
후기 바인딩은 컴파일러가 메서드 호출에 대해 형식 검사를 수행하지 않고 인수 검사를 수행하지 않으며 모든 것을 런타임에 맡겨야 함(인스턴스가 COM 프로그래밍에 있음)을 나타내는 형식입니다.
동적 메서드 디스패치 정의
동적 메서드 디스패치는 컴파일 시간이 아닌 런타임에 재정의된 메서드에 대한 호출을 해결하거나 수정하는 것을 말합니다.
삭제 기능이 배열보다 연결된 목록에서 더 빠른 이유
LinkedList 제거 작업은 O(1)을 반환합니다. 그러나 ArrayList 제거 작업은 최악의 경우, 즉 첫 번째 항목을 삭제할 때 O(n)을 반환하고 마지막 요소를 제거하는 동안 최상의 시나리오에서 O(1)을 반환합니다. ArrayList와 비교할 때 LinkedList 요소 삭제가 더 빠릅니다. 그 이유는 각 LinkedList 요소에는 목록의 인접한 두 멤버를 가리키는 두 개의 포인터(주소)가 있기 때문입니다. 결과적으로 노드를 제거하려면 노드의 인접한 두 구성 요소에서 참조 위치를 수정해야 합니다.
숙련자를 위한 고급 Java 인터뷰 질문
상속은 널리 사용되는 oops 개념이지만 구성보다 덜 유리합니다. 설명!
Java 클래스는 다중 상속이 언어에서 지원되지 않기 때문에 하나의 수퍼클래스만 가질 수 있습니다. 파일 읽기 및 쓰기와 같은 다양한 기능에서 컴파일 구조가 바람직합니다. 개인 회원의 작가 및 독자 능력과 비교할 수 있습니다. 구성의 도움으로 상당한 유연성을 달성하면서 캡슐화가 깨지는 것을 방지할 수 있습니다. 상속으로 인해 불가능한 단위 테스트는 구성의 도움으로 달성할 수 있습니다.
new()를 사용한 문자열 생성은 리터럴 생성과 어떻게 다릅니까?
new()를 사용하여 String을 생성하면 힙 메모리에 새 객체가 빌드됩니다. 실행하는 데 시간이 오래 걸리므로 String 리터럴에 비해 뒤쳐집니다. 그러나 문자열 리터럴을 사용하여 생성된 문자열에 대해 문자열에 이미 설정된 데이터가 있는 경우 문자열 풀의 문자열 변수와 동일한 데이터가 연결됩니다. 그리고 이것은 설정된 동일한 데이터로 완전히 새로운 String을 구성하지 않고도 달성됩니다.
가비지 수집기가 있음에도 프로그램에서 메모리 제한을 초과할 수 있습니까?
예. 가비지 수집기가 있다고 해서 프로그램의 메모리 부족을 막거나 방해하지는 않습니다.
동기화가 필요한 이유는 무엇입니까? 관련 사례를 통해 설명
동기화는 일치하는 모든 스레드가 동시에 실행되도록 하는 메커니즘입니다. 동기화는 일치하지 않는 시너지 메모리 보기에 의해 생성되는 메모리 일관성 문제를 방지합니다. 동기화된 방법에서 개체는 스레드에 의해 모니터링되고 제자리에 유지됩니다. 다른 스레드가 동기화된 메서드를 실행 중인 경우 이전 스레드가 모니터를 해제할 때까지 현재 스레드가 중지됩니다.
예를 들어 특정 URL에 대한 요청 수를 찾아야 하는 상황에서 둘 이상의 요청을 실행하면 카운트가 불규칙해질 수밖에 없습니다. 스레드 1이 카운트를 12로 보고 있다고 가정해 보겠습니다. 1을 추가하면 13으로 증가합니다. 동시에 다른 스레드 2도 카운트를 12로 보고 같은 맥락에서 1을 추가하여 13으로 증가합니다. 카운트 값의 이러한 예측 불가능성은 예상되는 최종 값인 14 대신 최종 값은 13이 됩니다. 여기에서 함수가 증가함에 따라 동기화가 작동하므로() 카운트에 대한 동시 액세스가 방지됩니다.
Java 스레드 수명 주기를 설명할 수 있습니까?
Java에서 스레드의 수명 주기는 스레드의 탄생에서 죽음까지의 상태 변환으로 정의됩니다. 스레드 인스턴스가 생성되고 Thread 클래스의 start() 함수가 호출되면 스레드는 실행 가능한 상태로 들어갑니다. Thread 클래스가 sleep() 또는 wait() 메서드를 호출하면 스레드를 실행할 수 없게 됩니다.
정렬되지 않은 배열의 사용과 정렬된 배열의 사용 사이의 절충점은 무엇입니까?
정렬된 배열의 주요 장점 중 하나는 검색 시간 복잡성이 O(log n)이라는 것입니다. 정렬된 배열에 대한 삽입 작업은 점수가 더 높은 구성원을 이동하여 새 변형을 만들어야 하기 때문에 시간적 복잡성이 O(n)입니다. 반대로 정렬되지 않은 배열의 삽입 작업에는 O(1)의 일정한 시간이 필요합니다.
Java에서 동일한 클래스 또는 패키지를 두 번 가져올 수 있으며 런타임 중에 어떻게 됩니까?
예. 클래스 또는 패키지를 가져오는 빈도에 관계없이 JVM은 런타임 중에 내부적으로 한 번 로드합니다.
코드 system.Exit(o)가 try 블록의 끝에 쓰여지면 "Finally" 블록이 실행됩니까?
아니요, 이 시나리오에서는 'finally' 블록이 실행되지 않습니다. System.exit(0)이 활성화되면 제어가 프로그램을 즉시 종료하고 따라서 "finally"가 실행되지 않기 때문입니다. 만약 시스템. exit(0)은 예외 없이 호출됩니다. 프로그램이 실행되지 않습니다.
Java의 마커 인터페이스로 무엇을 이해합니까?
상수나 메소드가 없는 인터페이스는 객체의 런타임 유형에 대한 컴파일러 및 JVM 정보를 제공하기 때문에 마커 인터페이스 또는 태깅 인터페이스로 알려져 있습니다. 원격 인터페이스, Serializable 및 Cloneable은 마커 인터페이스의 예이며 이러한 인터페이스는 모두 비어 있습니다.
Java에서 "이중 중괄호 초기화"라는 용어를 설명합니다.
Java에서 이중 중괄호 초기화는 2개의 개별 프로세스가 혼합된 것입니다. 이 상황에서는 두 개의 중괄호({)가 관련됩니다. 이중 중괄호 초기화는 두 개의 연속 중괄호가 Java 코드에 표시될 때 발생합니다.
명명되지 않은 내부 클래스의 구성은 첫 번째 중괄호이고 초기화 블록은 두 번째 중괄호입니다. Java Double Brace 초기화는 이름 없는 내부 클래스가 초기화 블록을 사용할 때 발생합니다.
결론
초보 프로그래머나 경험 많은 프로그래머에게는 이러한 인터뷰 질문이 다소 까다로워 보일 수 있습니다. 그러나 이러한 질문을 연습하는 데 전념한다면 다음 기회에 반드시 에이스할 것입니다.