> Java > java지도 시간 > 본문

Java로 인터뷰 질문 요약 공유

零下一度
풀어 주다: 2017-06-28 16:02:04
원래의
1077명이 탐색했습니다.

1) 자바 가상 머신이란 무엇입니까? Java를 "플랫폼 독립적 프로그래밍 언어"라고 부르는 이유는 무엇입니까?

Java 가상 머신은 Java 바이트코드를 실행할 수 있는 가상 머신 프로세스입니다. Java 소스 파일은 Java 가상 머신에서 실행할 수 있는 바이트코드 파일로 컴파일됩니다.
Java는 프로그래머가 각 플랫폼마다 별도로 애플리케이션을 다시 작성하거나 다시 컴파일할 필요 없이 모든 플랫폼에서 애플리케이션을 실행할 수 있도록 설계되었습니다. JVM(Java Virtual Machine)은 기본 하드웨어 플랫폼의 명령어 길이와 기타 특성을 알고 있기 때문에 이를 가능하게 합니다.

2) JDK와 JRE의 차이점은 무엇인가요?

JRE(Java Runtime Environment)는 Java 프로그램을 실행하는 Java 가상 머신입니다. 또한 애플릿을 실행하는 데 필요한 브라우저 플러그인도 포함되어 있습니다. JDK(Java Development Kit)는 개발자가 Java 애플리케이션을 개발, 컴파일 및 실행할 수 있도록 하는 JRE, 컴파일러 및 기타 도구(예: JavaDoc, Java 디버거)를 포함하는 완전한 Java 소프트웨어 개발 키트입니다.

3) "정적" 키워드는 무엇을 의미하나요? Java에서 개인 또는 정적 메소드를 대체할 수 있습니까?

"정적" 키워드는 멤버 변수나 멤버 메서드가 속한 클래스의 인스턴스 변수 없이 액세스할 수 있음을 나타냅니다.
Java의 정적 메서드는 메서드 재정의가 런타임 시 동적 바인딩을 기반으로 하는 반면 정적 메서드는 컴파일 시 정적으로 바인딩되므로 재정의할 수 없습니다. 정적 메서드는 클래스의 인스턴스와 관련이 없으므로 개념적으로는 적용되지 않습니다.

4) 정적 환경에서 비정적 변수에 접근이 가능한가요?

정적 변수는 Java의 클래스에 속하며 해당 값은 모든 인스턴스에서 동일합니다. JVM(Java Virtual Machine)이 클래스를 로드하면 정적 변수가 초기화됩니다. 코드에서 인스턴스를 사용하지 않고 비정적 변수에 액세스하려고 하면 해당 변수가 아직 생성되지 않았고 인스턴스와 연결되지 않았기 때문에 컴파일러에서 오류를 보고합니다.

5) Java에서 지원하는 데이터 유형은 무엇입니까? 자동 개봉박스란?

Java 언어에서 지원하는 8가지 기본 데이터 유형은 byte, short, int, long, float, double, boolean, char입니다.
Autoboxing은 Java 컴파일러가 기본 데이터 유형과 해당 객체 패키징 유형 사이에서 수행하는 작업입니다. 변형. 예를 들어 int를 Integer로, double을 Double로 변환하는 등의 작업을 수행합니다. 그렇지 않으면 자동으로 unboxing됩니다.

6) Java에서 메소드 오버라이딩과 메소드 오버로딩은 무엇을 의미하나요?

Java에서 메서드 오버로드는 동일한 클래스에 있는 두 개 이상의 메서드가 메서드 이름은 같지만 매개변수가 다를 때 발생합니다. 반면에 메서드 재정의는 하위 클래스가 상위 클래스의 메서드를 재정의하는 것을 의미합니다. 메서드 재정의에는 메서드 이름, 매개변수 목록 및 반환 유형이 동일해야 합니다. 재정의자는 재정의하는 메서드에 대한 액세스를 제한할 수 없습니다.

7) Java에서 생성자는 무엇인가요? 생성자 오버로딩이란 무엇입니까? 복사 생성자란 무엇입니까?

새 객체가 생성되면 생성자가 호출됩니다. 모든 클래스에는 생성자가 있습니다. 프로그래머가 클래스에 대한 생성자를 제공하지 않는 경우 Java 컴파일러는 클래스에 대한 기본 생성자를 만듭니다.
Java의 생성자 오버로딩과 메서드 오버로딩은 매우 유사합니다. 하나의 클래스에 대해 여러 생성자를 만들 수 있습니다. 각 생성자에는 고유한 매개변수 목록이 있어야 합니다.
Java는 C++와 같은 복사 생성자를 지원하지 않습니다. 이러한 차이점은 생성자를 직접 작성하지 않으면 Java가 기본 복사 생성자를 생성하지 않기 때문입니다.

8) Java는 다중 상속을 지원합니까?

Java의 클래스는 다중 상속을 지원하지 않고 단일 상속만 지원합니다(즉, 클래스에는 상위 클래스가 하나만 있음). 그러나 Java의 인터페이스는 다중 상속을 지원합니다. 즉, 하위 인터페이스는 여러 상위 인터페이스를 가질 수 있습니다. (인터페이스의 기능은 객체의 기능을 확장하는 것입니다. 하위 인터페이스는 여러 상위 인터페이스를 상속합니다. 이는 하위 인터페이스가 여러 기능을 확장함을 나타냅니다. 클래스가 인터페이스를 구현할 때 클래스는 해당 기능을 확장합니다.)

9) 인터페이스와 추상 클래스의 차이점은 무엇인가요?

Java는 추상 클래스 및 인터페이스 생성을 제공하고 지원합니다. 구현에는 공통점이 있지만 차이점은 다음과 같습니다.
인터페이스의 모든 메서드는 암시적으로 추상입니다. 추상 클래스에는 추상 메서드와 비추상 메서드가 모두 포함될 수 있습니다.
클래스는 여러 인터페이스를 구현할 수 있지만 하나의 추상 클래스만 상속할 수 있습니다.
클래스는 추상 클래스와 인터페이스에서 선언한 모든 메서드를 구현할 필요는 없습니다. 물론 이 경우 클래스도 추상으로 선언해야 합니다. .
추상 클래스는 인터페이스 메서드 구현을 제공하지 않고도 인터페이스를 구현할 수 있습니다.
Java 인터페이스에 선언된 변수는 기본적으로 최종 변수입니다. 추상 클래스에는 최종 변수가 아닌 변수가 포함될 수 있습니다.
Java 인터페이스의 멤버 함수는 기본적으로 공개됩니다. 추상 클래스의 멤버 함수는 비공개, 보호 또는 공개일 수 있습니다.
인터페이스는 완전히 추상적이므로 인스턴스화할 수 없습니다. 추상 클래스는 인스턴스화할 수 없지만 기본 메서드가 포함되어 있으면 호출할 수 있습니다.

10) 값에 의한 전달과 참조에 의한 전달이란 무엇인가요?

객체는 값으로 전달됩니다. 즉, 객체의 복사본이 전달됩니다. 따라서 객체 사본을 변경하더라도 원본 객체의 값에는 영향을 미치지 않습니다.
객체는 참조로 전달됩니다. 즉, 전달되는 내용은 실제 객체가 아니라 객체에 대한 참조입니다. 따라서 참조된 개체에 대한 외부 변경 사항은 모든 개체에 반영됩니다.
11) 프로세스와 스레드의 차이점은 무엇인가요?

프로세스는 실행 중인 애플리케이션이고 스레드는 프로세스 내의 실행 시퀀스입니다. 프로세스에는 여러 스레드가 있을 수 있습니다. 스레드는 경량 프로세스라고도 합니다.

12) 스레드를 만드는 방법에는 몇 가지가 있나요? 어느 쪽을 선호하시나요? 왜?

스레드를 생성하는 세 가지 방법이 있습니다:
Thread 클래스 상속
Runnable 인터페이스 구현
응용 프로그램은 Executor 프레임워크를 사용하여 스레드 풀 생성
Runnable 인터페이스 구현 이 방법은 Thread 클래스 상속이 필요하지 않기 때문에 더 많이 사용됩니다. . 애플리케이션 설계에서 다른 객체가 상속된 경우 다중 상속이 필요하며(Java는 다중 상속을 지원하지 않음) 인터페이스만 구현할 수 있습니다. 동시에 스레드 풀은 매우 효율적이고 구현 및 사용이 쉽습니다.

13) 사용 가능한 여러 스레드 상태를 간략하게 설명합니다.

New, runnable, running,blocked, dead


14) 동기화된 메서드와 동기화된 코드 블록의 차이점은 무엇인가요?

차이점:
동기화 방법은 기본적으로 이 객체 또는 현재 클래스 객체를 잠금으로 사용합니다.
동기화 코드 블록은 잠글 항목을 선택할 수 있으며 이는 동기화 방법보다 더 세부적으로 선택할 수 있습니다. , 이는 전체 방법이 아닌 코드의 일부에 발생합니다.

15) 모니터 내부에서 스레드 동기화는 어떻게 이루어지나요? 프로그램은 어떤 수준의 동기화를 수행해야 합니까?

Java Virtual Machine에서는 모니터와 잠금이 함께 사용됩니다. 모니터는 동기화된 코드 블록을 모니터링하여 한 번에 하나의 스레드만 동기화된 코드 블록을 실행하는지 확인합니다. 각 모니터는 개체 참조와 연결됩니다. 스레드는 잠금을 획득하기 전에 동기화된 코드를 실행할 수 없습니다.

16) 교착상태란 무엇인가요?

둘 이상의 프로세스가 계속하기 전에 다른 프로세스의 실행이 완료되기를 기다리는 경우 교착 상태가 발생합니다. 그 결과 모든 프로세스가 무한 대기 상태에 빠지게 됩니다.

17) 교착 상태를 일으키지 않고 N 스레드가 N 리소스에 액세스할 수 있도록 하는 방법은 무엇입니까?

멀티스레딩을 사용할 때 교착 상태를 방지하는 매우 간단한 방법은 잠금을 획득하는 순서를 지정하고 스레드가 지정된 순서대로 잠금을 획득하도록 강제하는 것입니다. 따라서 모든 스레드가 동일한 순서로 잠금 및 잠금을 해제하면 교착 상태가 발생하지 않습니다.

18) Java 컬렉션 클래스 프레임워크의 기본 인터페이스는 무엇입니까?

컬렉션 클래스 인터페이스는 요소라는 개체 집합을 지정합니다. 컬렉션 클래스 인터페이스의 각 구체적인 구현 클래스는 고유한 방식으로 요소를 저장하고 정렬하도록 선택할 수 있습니다. 일부 컬렉션 클래스는 중복 키를 허용하지만 다른 컬렉션 클래스는 허용하지 않습니다.
Java 컬렉션 클래스는 객체 집합에 대한 작업을 지원하는 잘 설계된 인터페이스 및 클래스 집합을 제공합니다. Java 컬렉션 클래스의 가장 기본적인 인터페이스는 다음과 같습니다.
Collection: 개체 그룹을 나타내며 각 개체는 해당 하위 요소입니다.
세트: 중복된 요소가 포함되지 않은 컬렉션입니다.
목록: 순서가 지정된 컬렉션이며 반복되는 요소를 포함할 수 있습니다.
Map: 키를 값으로 매핑할 수 있는 개체입니다.

19) 컬렉션 클래스가 복제 가능 및 직렬화 가능 인터페이스를 구현하지 않는 이유는 무엇입니까?

복제 또는 직렬화의 의미와 의미는 특정 구현과 관련이 있습니다. 따라서 복제 또는 직렬화 방법을 결정하는 것은 컬렉션 클래스의 특정 구현에 달려 있습니다.

20) 반복자란 무엇입니까?

Iterator 인터페이스는 컬렉션 요소를 반복하는 다양한 방법을 제공합니다. 모든 컬렉션 클래스에는 반복자 인스턴스를 반환하는 반복 메서드가 포함되어 있습니다. 반복자는 반복 프로세스 중에 기본 컬렉션의 요소를 삭제할 수 있지만 컬렉션의 Remove(Object Obj)를 직접 호출하여 삭제할 수는 없습니다. 반복자의 Remove() 메서드를 통해 삭제할 수 있습니다.


위 내용은 Java로 인터뷰 질문 요약 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿