이 기사에서는 Java 인터뷰에서 고용주가 후보자의 Java 및 일반적인 객체 지향 프로그래밍 기능을 테스트 할 수있는 다양한 유형의 인터뷰 질문에 대해 논의 할 것입니다. 다음 장은 이전 및 다음 기사로 나뉩니다. 첫 번째 기사는 객체 지향 프로그래밍 및 그 특성, Java 및 그 기능에 대한 일반적인 질문, Java 컬렉션 클래스, 쓰레기 수집기 및 두 번째 기사는 주로 예외 처리, Java 애플릿, 스윙, JDBC, 원격 메소드 호출 (RMI), 서블릿 및 JSP에 대해 논의합니다.
시작!
목차
객체 지향 프로그래밍 (OOP)
일반적인 자바 문제
자바 스레드
자바 컬렉션 클래스
쓰레기 수집가
객체 지향 프로그래밍 (OOP)
Java는 동시, 클래스 기반 및 객체 지향을 지원하는 컴퓨터 프로그래밍 언어입니다. 객체 지향 소프트웨어 개발의 장점은 다음과 같습니다.
객체 지향 프로그래밍에는 캡슐화, 상속, 다형성 및 추상화와 같은 많은 중요한 기능이 있습니다. 다음 장에서는 이러한 특성을 하나씩 분석합니다.
패키지
캡슐화는 객체에 내부 기능과 동작을 숨길 수있는 기능을 제공합니다. 객체는 다른 객체에서 액세스 할 수있는 몇 가지 방법을 제공하여 내부의 데이터를 변경합니다. Java에는 공개, 개인 및 보호의 3 가지 수정자가 있습니다. 각 수정자는 동일한 패키지 또는 다른 패키지에 위치한 다른 객체에 대해 다른 액세스 권한을 제공합니다.
다음은 캡슐화를 사용하는 것의 몇 가지 이점입니다.
캡슐화에 대한 자세한 내용 및 예제는이 문서를 참조하십시오.
다형성
다형성은 다른 기본 데이터 유형에 대해 동일한 인터페이스를 보여줄 수있는 언어를 프로그래밍하는 기능입니다. 다형성 유형의 작업은 다른 유형의 값에 적용될 수 있습니다.
상속
상속은 객체에 기본 클래스에서 필드 및 방법을 얻는 기능을 제공합니다. 상속은 재사용 된 코드 라인을 제공하며 수정하지 않고 기존 클래스에 새로운 기능을 추가 할 수도 있습니다.
추상적인
추상화는 콘크리트 인스턴스에서 아이디어를 분리하는 단계이므로 구현 세부 사항보다는 기능을 기반으로 클래스를 만듭니다. Java는 인터페이스 만 노출하지만 메소드 구현을 포함하지 않는 추상 클래스를 작성하는 것을 지원합니다. 이 추상 기술의 주요 목적은 클래스의 동작을 구현 세부 사항과 분리하는 것입니다.
추상화와 캡슐화의 차이
추상화 및 캡슐화는 보완적인 개념입니다. 한편으로, 추상은 물체의 동작에 중점을 둡니다. 반면 캡슐화는 객체의 동작의 세부 사항에 중점을 둡니다. 일반적으로 캡슐화는 객체의 내부 상태 정보를 숨겨 달성됩니다. 따라서 캡슐화는 추상화를 제공하는 전략으로 간주 될 수 있습니다.
일반적인 자바 문제
1. Java 가상 머신이란 무엇입니까? Java가 "플랫폼 독립적 프로그래밍 언어"라고하는 이유는 무엇입니까?
Java Virtual Machine은 Java Bytecode를 실행할 수있는 가상 머신 프로세스입니다. Java 소스 파일은 Java 가상 시스템에서 실행할 수있는 바이트 코드 파일로 컴파일됩니다.
Java는 프로그래머가 각 플랫폼을 개별적으로 다시 작성하거나 다시 컴파일하지 않아도 모든 플랫폼에서 응용 프로그램을 실행할 수 있도록 설계되었습니다. Java 가상 머신은 기본 하드웨어 플랫폼의 명령 길이 및 기타 기능을 알고 있기 때문에이를 가능하게합니다.
2. JDK와 JRE의 차이점은 무엇입니까?
JRE (Java Runtime Environment)는 Java 프로그램을 실행하는 Java 가상 머신입니다. 애플릿을 실행하는 데 필요한 브라우저 플러그인도 포함되어 있습니다. JDK (Java Development Toolkit)는 JRE, 컴파일러 및 기타 도구 (예 : Javadoc, Java Debugger)를 포함하는 완전한 Java 소프트웨어 개발 패키지로 개발자가 Java 응용 프로그램을 개발, 컴파일 및 실행할 수 있도록합니다.
3. "정적"키워드는 무엇을 의미합니까? Java에서 개인 또는 정적 방법을 대체 할 수 있습니까?
"static"키워드는 멤버 변수 또는 멤버 메소드가 해당 클래스의 인스턴스 변수없이 액세스 할 수 있음을 나타냅니다.
메소드 덮어 쓰기는 런타임 동적 바인딩을 기반으로하기 때문에 Java의 정적 메소드를 덮어 쓸 수는 없지만 정적 방법은 컴파일 시간에 정적 바인딩입니다. 정적 방법은 클래스의 인스턴스와 관련이 없으므로 개념적으로 적용되지 않습니다.
4. 정적 환경에서 비 정적 변수에 액세스 할 수 있습니까?
정적 변수는 Java의 클래스에 속하며 모든 경우의 값은 동일합니다. 클래스가 Java 가상 시스템에 의해로드되면 정적 변수가 초기화됩니다. 코드가 인스턴스없이 비 정적 변수에 액세스하려고 시도하면 컴파일러는 아직 생성되지 않았으며 인스턴스와 관련이 없기 때문에 오류를보고합니다.
5. Java가 지원하는 데이터 유형은 무엇입니까? 자동 분해 란 무엇입니까?
Java 언어가 지원하는 기본 데이터 유형은 다음과 같습니다.
자동 권투는 기본 데이터 유형과 해당 객체 래퍼 유형 간의 Java 컴파일러가 전환 한 것입니다. 예를 들어, INT를 정수로 변환하고 두 배로 더블 등을 변환합니다. 그렇지 않으면 자동 Unboxing입니다.
6. Java의 방법을 재정의하고 메소드 과부하가 무엇을 의미합니까?
Java의 메소드 오버로드는 둘 이상의 메소드가 동일한 메소드 이름이지만 동일한 클래스에서 다른 매개 변수를 갖는 경우에 발생합니다. 대조적으로, 메소드 오버라이드는 서브 클래스가 상위 클래스의 메소드를 재정의 함을 의미합니다. 메소드 오버라이드에는 동일한 메소드 이름, 매개 변수 목록 및 리턴 유형이 있어야합니다. 오버 라이터는 다루는 메소드에 대한 액세스를 제한하지 않을 수 있습니다.
7. 자바의 생성자는 무엇입니까? 생성자 과부하 란 무엇입니까? 사본 생성자 란 무엇입니까?
새 개체가 만들어지면 생성자가 호출됩니다. 각 클래스에는 생성자가 있습니다. 프로그래머가 클래스에 생성자를 제공하지 않으면 Java 컴파일러는 클래스의 기본 생성자를 만듭니다.
Java의 생성자 과부하 및 메소드 과부하는 매우 유사합니다. 클래스를 위해 여러 생성자를 만들 수 있습니다. 각 생성자는 고유 한 매개 변수 목록이 있어야합니다.
Java는 C ++와 같은 사본 생성자를 지원하지 않습니다. 이 차이점은 생성자를 직접 작성하지 않으면 Java가 기본 사본 생성자를 생성하지 않기 때문입니다.
8. Java는 다중 상속을 지원합니까?
지원되지 않는 Java는 다중 상속을 지원하지 않습니다. 각 클래스는 한 클래스 만 상속받을 수 있지만 여러 인터페이스를 구현할 수 있습니다.
9. 인터페이스와 추상 클래스의 차이점은 무엇입니까?
Java는 추상 클래스와 인터페이스의 생성을 제공하고 지원합니다. 구현에는 유사점이 있으며 차이점은 다음과 같습니다.
JDK8의 추상 클래스와 인터페이스의 차이점을 참조 할 수도 있습니다.
10. 가치 통과 및 기준 통과는 무엇입니까?
객체는 값으로 전달되므로 객체의 사본이 전달됩니다. 따라서 객체 사본이 변경 되더라도 소스 객체의 값은 영향을받지 않습니다.
객체는 참조로 전달되므로 실제 객체가 통과 된 것이 아니라 객체의 참조입니다. 따라서 참조 된 객체에 대한 외부 변경은 모든 객체에 반영됩니다.
자바 스레드
11. 프로세스와 스레드의 차이점은 무엇입니까?
프로세스는 실행 애플리케이션이고 스레드는 프로세스 내에서 실행 시퀀스입니다. 프로세스에는 여러 스레드가있을 수 있습니다. 스레드를 경량 프로세스라고도합니다.
12. 스레드를 만들기위한 몇 가지 방법이 있습니까? 어느 것을 좋아합니까? 왜?
스레드를 만드는 세 가지 방법이 있습니다.
실행 가능한 인터페이스를 구현하는 것이 스레드 클래스를 상속 할 필요가 없기 때문에 더 인기가 있습니다. 응용 프로그램 설계에 다른 객체가 상속되면 여러 상속이 필요하지만 (Java는 다중 상속을 지원하지 않음) 인터페이스 만 구현할 수 있습니다. 동시에 스레드 풀도 매우 효율적이고 구현 및 사용이 쉽습니다.
13. 이용 가능한 여러 실 상태에 대한 요약 설명.
실행 중에 스레드는 다음 상태에있을 수 있습니다.
14. 동기화 방법과 동기화 코드 블록의 차이점은 무엇입니까?
Java 언어로 각 객체에는 잠금이 있습니다. 스레드는 동기화 된 키워드를 사용하여 객체에서 잠금을 얻을 수 있습니다. 동기화 된 키워드는 메소드 레벨 (거친 입자 잠금) 또는 코드 블록 레벨 (세분화 된 잠금)에서 적용 할 수 있습니다.
15. 모니터 내에서 스레드를 동기화하는 방법은 무엇입니까? 프로그램은 어떤 수준의 동기화를해야합니까?
자바 가상 머신에서 모니터 및 잠금 장치가 함께 사용됩니다. 모니터는 동기 코드 블록을 모니터링하여 한 번만 한 번만 동기 코드 블록을 실행하도록합니다. 각 모니터는 객체 참조와 관련이 있습니다. 스레드는 잠금을 획득하기 전에 동기화 코드를 실행할 수 없습니다.
16. 교착 상태는 무엇입니까?
두 프로세스가 모두 실행되기 전에 상대방이 실행을 완료하기를 기다리는 경우 교착 상태가 발생합니다. 결과적으로 두 프로세스 모두 무한 대기에 갇혀 있습니다.
17. N 스레드가 교착 상태를 유발하지 않고 N 리소스에 액세스 할 수 있도록하는 방법은 무엇입니까?
멀티 스레딩을 사용하는 경우 교착 상태를 피하는 매우 간단한 방법은 잠금 장치를 획득 한 순서를 지정하고 스레드가 지정된 순서로 잠금을 얻도록 강제하는 것입니다. 따라서 모든 스레드가 동일한 순서로 잠금을 잠그고 해제하면 교착 상태가 없습니다.
자바 컬렉션 클래스
18. Java Collection 클래스 프레임 워크의 기본 인터페이스는 무엇입니까?
Java Collection 클래스는 객체 세트에서 작업을 지원하는 잘 설계된 인터페이스 및 클래스 세트를 제공합니다. Java Collection 클래스에서 가장 기본적인 인터페이스는 다음과 같습니다.
19. 컬렉션 클래스가 클로닝 가능 및 직렬화 가능한 인터페이스를 구현하지 않는 이유는 무엇입니까?
컬렉션 클래스 인터페이스는 요소라는 객체 세트를 지정합니다. 컬렉션 클래스 인터페이스의 각 특정 구현 클래스는 자체 방식으로 요소를 저장하고 정렬하도록 선택할 수 있습니다. 일부 컬렉션 클래스는 중복 키를 허용하는 반면 다른 컬렉션 클래스는 그렇지 않습니다.
20. 반복자는 무엇입니까?
반복자 인터페이스는 수집 요소를 반복하는 여러 가지 방법을 제공합니다. 각 컬렉션 클래스에는 반복적 인 인스턴스를 반환 할 수있는 반복 메소드가 포함되어 있습니다. 반복자는 반복하는 동안 기본 컬렉션의 요소를 삭제할 수 있습니다.
복제 또는 직렬화의 의미와 의미는 특정 구현과 관련이 있습니다. 따라서 컬렉션 클래스의 특정 구현은 복제 또는 직렬화 방법을 결정해야합니다.
21. 반복자와 ListIterator의 차이점은 무엇입니까?
차이점은 다음과 같습니다.
22. 빠른 실패 (실패)와 안전 실패 (실패)의 차이점은 무엇입니까?
Ierator의 보안 실패는 기본 컬렉션의 사본 제작을 기반으로하므로 소스 컬렉션의 수정에 영향을받지 않습니다. java.util 패키지의 모든 컬렉션 클래스는 빠르게 실패하는 반면 java.util.concurrent 패키지의 모든 클래스는 안전하게 실패합니다. 빠르게 시작된 반복자는 동시 모형화 예외 예외를 던지는 반면, 안전한 반복자는 그러한 예외를 결코 던지지 않을 것입니다.
23. 자바에서 해시 맵의 작동 원리는 무엇입니까?
자바의 해시 맵은 키 값 쌍의 형태로 요소를 저장합니다. Hashmap에는 hashcode () 및 equals () 메소드를 사용하여 컬렉션에 요소를 추가하고 검색하는 해시 함수가 필요합니다. put () 메소드가 호출되면 Hashmap은 키의 해시 값을 계산 한 다음 키 값 쌍을 세트의 적절한 인덱스에 저장합니다. 키가 이미 존재하면 값이 새 값으로 업데이트됩니다. 해시 맵의 몇 가지 중요한 기능은 용량, 하중 계수 및 임계 값 크기 조정입니다.
24. hashcode () 및 equals () 메소드의 중요성은 어디에 반영됩니까?
Java의 Hashmap은 hashcode () 및 Equals () 메소드를 사용하여 키 값 쌍의 인덱스를 결정합니다. 이 두 가지 방법은 키를 기반으로 값을 얻을 때도 사용됩니다. 이 두 방법이 올바르게 구현되지 않으면 두 개의 다른 키가 동일한 해시 값을 가질 수 있으므로 세트에 의해 동일하게 간주 될 수 있습니다. 또한이 두 가지 방법은 중복 요소를 발견하는 데 사용됩니다. 따라서이 두 방법의 구현은 해시 맵의 정확성과 정확성에 중요합니다.
25. 해시 맵과 해시 가능의 차이점은 무엇입니까?
26. 배열 (배열)과 목록 (Arraylist)의 차이점은 무엇입니까? ArrayList 대신 배열을 언제 사용해야합니까?
다음은 배열과 Arraylist의 차이점을 나열합니다.
27. ArrayList와 LinkedList의 차이점은 무엇입니까?
ArrayList 및 LinkedList는 모두 목록 인터페이스를 구현하며 다음과 같은 차이점이 있습니다.
ArrayList는 인덱스 기반 데이터 인터페이스이며 기본 레이어는 배열입니다. O (1) 시간 복잡성을 가진 요소에 임의의 액세스를 허용합니다. 이에 따라 LinkedList는 데이터를 요소 목록의 형태로 저장하고 각 요소는 이전 및 다음 요소에 연결됩니다. 이 경우 요소를 찾는 시간 복잡성은 O (n)입니다.
ArrayList와 비교하여 링크 사전 목록의 삽입, 첨가 및 삭제가 더 빠릅니다. 컬렉션의 모든 위치에 요소가 추가되면 크기를 다시 계산하거나 배열처럼 인덱스를 업데이트 할 필요가 없기 때문입니다.
LinkedList는 각 노드에 대해 두 개의 참조를 저장하고 하나는 이전 요소를 가리키고 1 개는 다음 요소를 가리키기 때문에 ArrayList보다 더 많은 메모리를 차지합니다.
ArrayList vs. LinkedList를 참조 할 수도 있습니다.
28. 비교할 수있는 것은 무엇이며 비교기 인터페이스는 무엇입니까? 차이점을 나열하십시오.
Java는 하나의 비교 () 메소드 만 포함하는 비교 가능한 인터페이스를 제공합니다. 이 방법은 두 객체를 정렬 할 수 있습니다. 구체적으로, 입력 객체가 이미 존재하는 객체보다, 동일하며 크다는 것을 나타내는 음수, 0 및 양수를 반환합니다.
Java는 두 가지 방법을 포함하는 비교기 인터페이스를 제공합니다 : compare ()와 equals (). Compare () 메소드는 두 개의 입력 매개 변수를 정렬하는 데 사용되며, 0, 0을 반환하고 양수는 첫 번째 매개 변수가 두 번째 매개 변수보다 작고 같고 크다는 것을 나타냅니다. equals () 메소드는 매개 변수로서 객체를 필요로하며, 입력 매개 변수가 비교기와 동일한 지 여부를 결정하는 데 사용됩니다. 이 메소드는 입력 매개 변수가 비교기이고 입력 매개 변수이고 현재 비교기 분류 결과가 동일 할 때만 true를 반환합니다.
29. Java 우선 순위 대기열은 무엇입니까?
PriorityQueue는 우선 순위 힙을 기반으로 한 무한한 대기열이며 그 요소는 자연 순서로 정렬됩니다. 생성되면 분류 요소를 담당하는 비교기를 제공 할 수 있습니다. PriorityQueue는 자연 순서가 없거나 관련 비교기가 없기 때문에 NULL 값을 허용하지 않습니다. 마지막으로, 우선 값은 스레드 안전이 아니며, 들어오는 시간과 탈병의 시간 복잡성은 O (log (n))입니다.
30. 큰 O 기호 (BIG-O 표기법)를 이해하십니까? 다른 데이터 구조의 예를 제시 할 수 있습니까?
큰 o 기호는 데이터 구조의 요소가 증가 할 때 최악의 시나리오에서 알고리즘의 스케일 또는 성능이 얼마나 좋은지를 설명합니다.
큰 O 기호는 메모리 소비와 같은 다른 동작을 설명하는 데 사용될 수도 있습니다. 컬렉션 클래스는 실제로 데이터 구조이므로 일반적으로 큰 O 기호를 사용하여 시간, 메모리 및 성능을 기반으로 최상의 구현을 선택합니다. 큰 O 기호는 다량의 데이터의 성능에 대한 좋은 설명을 제공 할 수 있습니다.
31. 순서가없는 배열 또는 순서 배열 사용 여부를 교환하는 방법은 무엇입니까?
정렬 된 배열의 가장 큰 장점은 검색의 시간 복잡성이 O (log n)이고, 반지되지 않은 배열은 O (n)이라는 것입니다. 정렬 된 배열의 단점은 삽입 작업의 시간 복잡성이 O (n)이라는 것입니다. 큰 값이 큰 요소가 새로운 요소를위한 공간을 만들기 위해 뒤로 이동해야하기 때문입니다. 대조적으로, 변절되지 않은 어레이의 삽입 시간 복잡성은 상수 O (1)이다.
32. Java Collection Class Frameworks의 모범 사례는 무엇입니까?
응용 프로그램의 요구에 따라 사용할 수집 유형을 올바르게 선택하는 것은 성능에 매우 중요합니다. 예를 들어, 요소의 크기가 고정되어 미리 알 수 있으면 ArrayList 대신 배열을 사용해야합니다.
일부 컬렉션 클래스에서는 초기 용량을 지정할 수 있습니다. 따라서 저장된 요소의 수를 추정 할 수 있다면 해시 값을 재 계산하거나 확장하지 않도록 초기 용량을 설정할 수 있습니다.
유형 안전, 가독성 및 견고성을 위해 제네릭이 항상 사용됩니다. 동시에 제네릭을 사용하면 런타임에서 ClassScastException을 피할 수 있습니다.
JDK가 제공하는 불변의 클래스를지도의 키로 사용하면 자체 클래스에 대한 Hashcode () 및 equals () 메소드를 구현하지 못할 수 있습니다.
인터페이스는 프로그래밍시 구현보다 낫습니다.
기본 컬렉션이 실제로 비어 있으면 길이 0 인 세트 또는 배열을 반환하고 NULL을 반환하지 마십시오.
33. 열거 인터페이스와 반복자 인터페이스의 차이점은 무엇입니까?
열거는 반복자보다 두 배나 빠르면서 메모리를 적게 소비합니다. 그러나 다른 스레드는 컬렉션의 객체를 반복자에 의해 수정할 수 없기 때문에 반복자는 열거보다 훨씬 안전합니다. 동시에 반대기를 사용하면 발신자가 기본 컬렉션에서 요소를 삭제할 수 있으므로 열거가 불가능합니다.
34. 해시 세트와 트리 셋의 차이점은 무엇입니까?
해시 세트는 해시 테이블에 의해 구현되므로 요소가 변하지 않습니다. add (), remove () 및 포함 된 () 메소드의 시간 복잡성은 O (1)입니다.
반면에 TreeSet은 나무 모양의 구조로 구현되며 그 안의 요소는 주문됩니다. 따라서 add (), remove () 및 포함 된 () 메소드의 시간 복잡성은 O (logn)입니다.
쓰레기 수집가
35. 자바에서 쓰레기 수거의 목적은 무엇입니까? 쓰레기는 언제 수집됩니까?
쓰레기 수집의 목적은 응용 프로그램이 더 이상 리소스를 자유롭게하고 재사용하는 데 사용하지 않는 객체를 식별하고 폐기하는 것입니다.
36. System.gc () 및 runtime.gc ()는 무엇을합니까?
이 두 가지 방법은 JVM이 쓰레기 수집을 수행하도록 프롬프트하는 데 사용됩니다. 그러나 즉시 시작하거나 가비지 수집을 지연시키는 것은 JVM 의존적입니다.
37. Finalize () 메소드는 언제 호출됩니까? 소멸자의 목적은 무엇입니까?
물체가 차지하는 메모리를 제거하기 전에 쓰레기 수집기는 객체의 finalize () 메소드를 호출합니다. 일반적 으로이 방법에서 객체가 보유한 리소스를 해제하는 것이 좋습니다.
38. 객체의 참조가 NULL로 설정되면 쓰레기 수집기가 즉시 물체가 차지하는 메모리를 방출합니까?
아니요,이 물체는 다음 쓰레기 수집주기에서 재활용 할 수 있습니다.
39. Java 힙 구조는 어떻게 생겼습니까? 힙의 파마 공간은 무엇입니까?
JVM의 힙은 런타임 데이터 영역이며 모든 클래스의 인스턴스 및 배열은 힙에 메모리를 할당합니다. JVM이 시작될 때 생성됩니다. 물체가 차지하는 힙 메모리는 자동 메모리 관리 시스템, 즉 쓰레기 수집기에 의해 수집됩니다.
힙 메모리는 생존하고 죽는 물체로 구성됩니다. 살아남은 물체는 응용 프로그램에 액세스 할 수 있으며 쓰레기가 수집되지 않습니다. 죽은 물체는 응용 프로그램에 액세스 할 수없고 쓰레기 수집기에 의해 재활용되지 않은 객체입니다. 쓰레기 수집가가 이러한 물체를 되 찾을 때까지 힙 메모리 공간을 차지할 것입니다.
40. 직렬 수집기와 처리량 수집기의 차이점은 무엇입니까?
처리량 수집기는 차세대 쓰레기 수집기의 평행 버전을 사용하며, 이는 중간 크기 및 대규모 데이터가있는 응용 프로그램에 사용됩니다. 직렬 수집기는 대부분의 작은 응용 프로그램에 충분합니다 (현대 프로세서에 약 100m의 메모리가 필요함).
41. Java에서는 언제 쓰레기를 수집 할 수 있습니까?
현재이 객체를 사용하는 응용 프로그램에 객체를 도달 할 수 없게되면 객체를 재활용 할 수 있습니다.
42. JVM의 영구 생성에서 쓰레기 수거가 발생합니까?
가비지 수집은 영구 세대에서는 발생하지 않습니다. 영구 생성이 가득 차 있거나 임계 값을 초과하면 전체 쓰레기 수집 (전체 GC)을 트리거합니다. 쓰레기 수집기의 출력 정보를주의 깊게 확인하면 영구 생성도 재활용되는 것을 알 수 있습니다. 이것이 올바른 영구 생성 크기가 전체 GC를 피하기 위해 매우 중요한 이유입니다. Java 8 : 영구 생성에서 메타 데이터 영역까지 참조하십시오.
(번역기 주 : 영구 생성은 Java 8에서 제거되었으며 메타 데이터 영역이라는 새로운 기본 메모리 영역이 추가되었습니다)
위는 Java 인터뷰 질문에 대한 정보를 편집 한 것입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 사이트를 지원 해주셔서 감사합니다!