[자바] 면접 질문 면접 질문의 중요한 부분

자바 기본적인 면접 질문

 

같음과 == 차이점

() 비교 등호를 사용하여, 문자 등 부울 ,, INT : 같은 == 비교 기본 유형을 사용합니다.

== 1 종류 또는 두 변수가 동일한 메모리 공간을 가리키는되지 결정,

이것은 메모리 공간이 동일하지 않은 두 변수의 값을 결정 또는 예 점이다 같다.

== 2는 비교되는 메모리 주소를 참조 문자열의 내용과 비교된다) (같음

== 3 값이 동일 같음 ()를 의미 동일한 부호가 참조된다.

 

자동 입력 상자

자동 포장기는 자바에 의해 정의되는 할당 기본 데이터 타입 A와 변수를 해당 클래스 패키지 ,

반대로 풀고 동작 포장 가변 자동 변수의 대응하는 기본 데이터 타입에 할당 된 패키지를 개봉 흡입.

 

일반적인 방법 개체는 어떤 일이

객체는 모든 클래스의 부모 클래스입니다, 기본적으로는 Object 클래스를 상속

같음 일반적 방법을 다시 작성해야 같은 하위 클래스 오브젝트 내의 ==

해시 코드 equals 메소드 재 작성을위한 해시 조회 방법을 일반적으로 우리는 해시 함수와 컬렉션의 일부에 사용되는 해시 방법을 다시 작성해야합니다.

getClass는 런타임 얻을 유형

를 toString 있어서, 상기 서브 클래스를 처리하는 일반적인 재기록. 그렇지 않으면, 인쇄 (메모리 어드레스)가 문자열로 변환

 

자바 네 개의 참조

강한 참조 부드럽고 약한 참조 및 허수 : 프로그램 네 저차 높은 레벨을 가진 개체의 수명주기,보다 유연하게 제어 할 수 있도록 JDK 버전 1.2, 객체에 대한 참조는 4 개 개의 레벨로 나누어 져 참조.

  1. 1.     강한 참조

S = 문자열 "ABC"와 같은 기준의 가장 일반적인 타입, 변수 (S)만큼 강한 참조가 존재하고 쓰레기 수집기는 객체가 복구되지 문자열 "ABC"강한 참조 인

  1. 2.     소프트 참조

이 사용을 설명하는 데 사용하지만, 충분한 메모리가 복구되지 않은 경우 일반적으로 메모리에 민감한 말했다 캐시를 ​​구현하는 데 사용되는 메모리가 부족 복구,이 경우 반드시, 객체, 소프트 참조는, 참조 큐와 함께 사용할 수 있습니다 당신 정말 부드러운 참조하는 경우 목적은 쓰레기, JVM이 소프트 참조 연관된 기준 큐 참여할 것이다

  1. 3.     약한 참조

약한 참조 촉감 참조 대략 동일한 인용 부드럽고 약한 참조 차이점은 : 가비지 수집기 스레드의 과정에서보다 짧은주기에서만 약한 기준 객체, 스캔 관할 메모리 영역 한번 발견 관계없이 현재의 메모리 공간의 부드러운 참조 개체 충분한인지, 그것의 메모리를 회수 할

  1. 4.     팬텀 참조

- 비 존재, 그리고 여러 가지 다른 참조는 다른, 허위 진술 기간을 인용 팬텀 참조 객체는 보유하고있는 경우는 오브젝트를 확인하지 않습니다, 그리고 그것은 모든 참조가없는 언제든지 가비지 수집 될 가능성이 주로 물체를 추적하는 데 사용되는 가상 참조 가비지 콜렉터 활성을 회수.

 

가상 참조 및 참조 차이가 부드럽고 약한 것을 인용

가비지 수집기가 가상 참조가 있다고 발견되면, 객체는 회수 할 준비가되면 팬텀 참조하면, 기준 큐와 함께 사용되어야하며,이 메모리 오브젝트 전에 회복이 팬텀 참조 큐와 연관된 레퍼런스에 부가된다.

 

해시 코드의 역할

  1. 1.     해시 기능

① 해시가 해시 자주 판정 대상의 어드레스를 저장하는 등의 Hashtable HashMap에 으로서는 찾기 신속 주로 존재

두 개체가 동일한 경우 ②, 반드시 동일한 두 개체를 메소드가 true를 반환 동일하고, 해시 코드

해시 ③ 동일한 두 개체가 반드시 필요하지 않게 사실 만 해시 저장 구조 내의 두 개의 개체를 나타내고있다) (즉, 동일, 동일한 두 개체를 의미하지 않는다

객체가 메소드가 오버라이드 (override)에 해당하는 경우 ④, 그 객체는 해시 코드를 재 작성하려고

  1. 2.     해시 역할

자바 컬렉션의 두 가지 유형이 있습니다, 목록은 설정, 이전 내의 요소의 모음, 후자의 요소가 필요하지 않으며, 요소가 반복 될 수있다 주문입니다,하지만 요소는 반복 될 수 없습니다

컬렉션은 지금 1000 개 요소가있는 경우 방법은 반복하지 않는 요소를 확인하기 위해 사용할 수 있지만, 각각의 요소를 추가하는 경우 다시 확인 같음, 다음 1000를 호출해야 컬렉션에 처음 1001 개 요소는 분명히 크게 방법을 동일 효율성을 줄일 수 있으므로, 자바는 해시 테이블의 원리를 사용합니다

새 요소를 추가 할 컬렉션이에 배치해야합니다 물리적 위치를 찾을 갑자기 수있는이 방법 호출 해시 코드의 첫 번째 요소입니다 결과,

이 위치에서 어떤 요소가없는 경우 ①, 그것은이 위치에 직접 저장 할 수 있습니다, 우리의 비교가 없습니다

이미이 위치의 요소가있는 경우 ② 다음 동일하게 유지하지 않는, 새로운 요소를 비교하기 위해 equals 메소드를 호출

③ 동일하지, 즉, 같은 상황이 해시 키의 충돌이 발생, 해시 키는 목록을 생성합니다이 곳은 모든 개체는 거의 (함께 중독이 단일 체인 최대로 같은 해시 코드를 생성하지 않습니다 ), 전화의 실제 수는 방법은 크게 감소 같도록 거의 필요 한 번 또는 두 번.

  1. 3.     해시 코드의 역할을 이해하는 방법

객체의 관점에서, JVM마다 새로운 개체, 그것은 개체가 해시에서 다시 기반이 될 것입니다 해시 객체를 이동하기 위해 해시 테이블을 던져, 그래서, 다음 시간에 비해 개체 또는 개체를 취할 것 테이블이 객체를 가지고, 가려져 목표는 같은 해시 코드를 다시 등호를 호출하는 경우, 객체를 복용의 효율성을 개선하는 것입니다

 

문자열, StringBuffer와의 StringBuilder 내 차이

문자열 : 문자열 연산의 작은 금액을 적용

StringBuilder의 상황은 사물과 스레드 안전의 번호로 단일 스레드 문자 버퍼에 적용

모두 StringBuilder : 스레드가 안전하지 않습니다,

 

이들 세 종류의 차이는 제 주행 속도와 같은 속도이 점에서, 속도, 또는 실행의 속도를 실행하는 상기 두 측면, 즉 속도와 두 측면 스레드 안전성 주로

모두 StringBuilder> StringBuffer를> 문자열

문자열 느린 이유

문자열 문자열 상수의 StringBuilder와 StringBuffer를 문자열 변수 오브젝트는 불변 후 생성되면, 즉 문자열 오브젝트가 있지만, 두 개체가 가변되는 동안, 즉 변경할 수

 

스레드로부터의 안전성

StringBuffer를 스레드 안전 동안 스레드 안전의 StringBuilder에서 스레드 안전하지 않다

당신이 안전합니다. 그러나 StringBuilder의 방법 스레드를 보장 할 수 있도록 문자열 버퍼, 동기화 된 키워드를 여러 가지 방법으로, StringBuffer를 여러 스레드를 사용하는 StringBuffer를 개체가 키가 아닌 경우, 스레드 안전을 보장 할 수 없습니다 거기에 당신이 메모리 작업이 멀티 스레드, StringBuffer를 사용하기 때문에 긴 싶다면, 일부 잘못 작동 할 수 있지만 단일 스레드 경우, 빠른 모두 StringBuilder를 사용하는 것이 좋습니다.

 

지도, 세트, 목록, 큐, 스택 기능 및 사용을

지도

①지도는 키 - 값 쌍은 키 키는 비 반복 만 값에 대응하는 키 값이 반복 될 수있다

② TreeMap의 순서를 보장 할 수

③의 HashMap 즉 무질서, 순서를 보장하지

④지도 키와 값을 개별적으로 추출 할 수있는 키 세트 특징 () 메소드는 모든 키 세트로 유입 될 수 있고, 값 () 메소드는 모든 값 세트의 맵으로 그려 질 수있다

세트

① 중복 집합을 포함 널 요소에 포함 된 설정하지

②가 단일 탐색 Letrator 달성 될 수 있으며, 세트의 동기 방법이 없다.

명부

주문의 ① 중복 세트

② 어떤 위치에 요소를 추가하거나 삭제할 수 있습니다

달성하기 위해 하나의 통과 반복자와 ③, 당신은 또한 양방향 이송 반복자를 사용할 수 있습니다

① 큐는 FIFO 원리에 따라

이는 장점이 리턴 값 성공 여부를 판단 할 수 있고, ()의 요소를 제거하기 위해 폴링하여, ② 추가 (사용을 방지) 및 () 메소드를 제거하지만, 쿠폰의 사용은 () 요소를 추가

③ LinkedList의 대기열 인터페이스를 구현

④ 큐 일반적 삽입 null 요소는 허용되지 않는다

스택

① 스택은 LIFO의 원칙을 준수

② 스택 벡터에서 상속

③ 그것은 일반적인 푸시 및 POP 작업을 제공하는 벡터로 간주 스택을, 수, 벡터 다섯 확장 클래스의 조작에 의해, 그리고 포인트 스택 들여다 () 메소드는 스택이 비어있는 빈 방법입니다 여부를 테스트하는

용법

작업 등 스택, 큐를 포함하는 경우 ①, 목록을 사용하는 것이 좋습니다

빠른 삽입을 위해 ② 및 요소를 삭제, LinkedList의 사용을 권장합니다

당신이 요소에 대한 빠른 랜덤 액세스해야하는 경우 ③, ArrayList를 사용하는 것이 좋습니다

더 세련된 요약

컬렉션, 컬렉션 두 개의 하위 인터페이스를 가지고, 목록, 및 개체를 설정의 모음입니다

       인덱스 값리스트는 (1,2,3 ...) 일 수 있으며,이 값은 설정 값에서만 커서가 될 수 반복 될 수 있고, 그 값은 반복하지 않는다

       ArrayList를, 벡터, LinkedList의 목록은 구현 클래스입니다

       ArrayList의 스레드로부터 안전하지 않습니다, 벡터 스레드 안전이 두 클래스는 기본으로되는 배열에 의해 구현된다

       LinkedList의 스레드로부터 안전하지 않습니다, 하단은 연결리스트에 의해 달성된다

지도는 키 - 값 쌍의 모음입니다

① 해시와 HashMap의 구현 클래스는지도이다

② 해시가 스레드 안전, 당신은 null 값을 저장할 수 없습니다

③ HashMap의 안전 - 스레드되지 않고 널 (null) '값을 저장할 수 있습니다

 

스택 클래스

       몇 가지 기본적인 방법, 푸시, 팝, 피크, 빈, 검색을 제공하는 LIFO 스택 등을 구현하기 위해, 벡터에서 상 속됨

큐 클래스

       등 몇 가지 기본적인 방법, 제안, 설문 조사, 슬쩍, 제공, LinkedList 클래스를 구현 한, PriorityQueue 인 등

 

캐치 마침내이 수익을하려고 시도, 마지막으로 구현 될 것인가?

확실히 시도 {} 블록에서 수행하지 않습니다처럼 문을 종료하는 자바 가상 머신에지도 만 발생하는 System.exit을 (포함 된 코드의 마지막 {} 블록을) 실행됩니다.

프로그램 실행 만남 이후의 시도는 {} 반환하는 경우, 프로그램은 먼저 반환 문을 실행하지만, 즉시 열한를 반환하지 않은 return 문은 그 반환하는 것입니다 몇 가지 준비 할 것입니다 만, 돌아 왔을 때, finally 블록에 프로그램 실행 흐름 벡터는 마침내 직접 return 문은 단지 좋은 결과를 반환 준비되었을 때 실행이 완료된 후 차단합니다.

 

자바 (OOP) 세 가지 의미의 객체 지향 기능

패키지 (높은 응집력과 낮은 커플 링 분리 à)

포장 객체에 속성과 뭔가의 행동을 포장을 의미, 목적은 노출 할 필요가 외부 속성과 행동에 공개되며, 이번 발표는 선택적으로 개인을 사용할 수있는 자바에서 다른 개체에게 공개 할 수있다 보호 , 수정 여부의 공공 삼가지 (기본 defalut 인) 객체 제한의 외부 개체 특성과 동작을 액세스 할

.

자바 상속 (재사용 부모 클래스 코드)

상속은 부모의 속성과 동작을 상속 할 수있는 자식 객체는, 그 부모는 이러한 특성과 행동을해야합니다 속성과 그 아이의 행동을 가지고있다

자바 (하위 클래스 객체 참조에 부모 클래스)의 다형성

다형성에 의해 다른 발현 여러 서브 - 객체 일 수 동일한 부모 객체의 행동을 말한다

다형성의 두 가지 메커니즘이 있습니다 컴파일 타임 다형성 런타임 다형성

  1. 메소드 오버로딩은, 방법의 동일한 클래스에서 동일한 이름의 복수를 다시 참조하지만 이러한 방법은, 그것이에서 다형성을 컴파일 방법은 결국 호출 컴파일 시간에 결정될 수있는 다른 파라미터를 가질
  2. 재 작성 과정 : 같은 방법은 부모 클래스와 서브 클래스에서 다른 표현을 할 수 있도록 하위 클래스는 상위 클래스의 메소드를 오버라이드 (override) 할 수 있습니다 

재정 및 과부하의 차이를 의미

과부하 과부하 동일한 방법 이름 반환형의 다른 독립 파라미터 (번호, 주문의 종류)의리스트.

재기록 방법 재기록 상위 클래스를 덮는 덮어 커버를 다시 작성 동일한 방법 이름 만 액세스 한정자는 액세스 수정 방법보다 큰 것은 무시된다 수있어서 이름과 동일한 형식의 순서 번호를

오버라이드 (재 작성)

  1. 메소드 이름, 인수, 같은 값을 반환합니다.
  2. 서브 클래스의 메소드는 부모 클래스 메소드에 대한 액세스를 줄일 수 없습니다
  3. 서브 클래스의 메소드는 부모 클래스 메소드 예외 이상을 던질 수 없습니다 (하지만 서브 클래스의 메소드는 예외를 던질 수 없습니다)
  4. 그것은 부모와 자식 클래스 사이에 존재
  5. 마지막 방법은 다시 쓸 수 없습니다로 정의된다

과부하 (과부하)

  1. 매개 변수 유형, 수, 적어도 하나의 순서와 동일하지
  2. 2.     단순히 과부하되지는 다른 값 방법 이름을 반환
  3. 같은에서, 부모 클래스와 서브 클래스에 존재

오버로드 규칙

  1. 다른 매개 변수 목록이 있어야합니다
  2. 다른 반환 형식,만큼 거기에 다른 매개 변수의 목록을 가질 수 있습니다
  3. 서로 다른 액세스 한정자를 가질 수 있습니다
  4. 당신은 다른 예외를 던질 수

방법의 규칙을 다시 작성

  1. 매개 변수 목록은 그렇지 않은 경우는 재 작성라고하지만 오버로드 할 수없는, 메소드를 오버라이드 (override)로 동일해야합니다
  2. 항상 방법의 동일한 유형을 반환해야 반환 형식은 무시됩니다 그렇지 않으면 재 호출 할 수 없습니다 수 있지만 과부하
  3. 제한된 액세스 수정자는 액세스 수정이 방법을 다시보다 커야합니다 (공개> 보호> 기본> 개인 )
  4. 재정 메소드는 오버라이드 (override)되는 메소드가 선언되는 것보다 신규 또는 체크 된 예외를 throw하지 않아야 광범위한 예외를 확인

인터페이스 추상 클래스의 차이

인터페이스 만 멤버 변수는 메소드를 선언 할 수 있습니다

추상 클래스는 멤버 변수, 메소드를 가질 수 있고 일반적인 방법은 추상적 인 선언 할 수 있습니다

인터페이스는 인터페이스입니다

모든 방법은 공공 정적 최종 인터페이스의 기본 유형은 자신의 인스턴스화 할 수없는 추상화, 멤버 변수입니다

추상 클래스는 추상 클래스, 추상 클래스라고 적어도 하나 개의 추상 메소드를 포함하는 클래스, 추상 클래스는 자신을 인스턴스화 할 수 없으며, 추상 키워드 수정

AOP는 무엇입니까

AOP 지향 프로그래밍 뜨거운 소프트웨어 개발이다, 스프링 프레임 워크의 콘텐츠, AOP를 사용하여 분리의 비즈니스 로직의 각 부분, 그래서 커플 링의 비즈니스 로직 부분은 프로그램 재사용 유형을 개선, 감소 할 수 있습니다, 개발 효율성을 개선하기 위해, 주요 특징 : 로깅, 성능 통계, 보안 관리, 트랜잭션 처리, 예외 처리.

OOP는 무엇입니까

OOP의 객체 지향 프로그래밍, 캡슐화 추상적 인 실체, 비즈니스 프로세스에 대한 속성과 행동은 명확하게 구분 효율적인 논리 단위를 얻기 위해

AOP의 OOP의 차이

OOP 프로그래밍, 추상화와 캡슐화 엔티티 및 비즈니스 프로세스의 해당 속성의 동작을 객체 지향 할 때, 명확한 부문의 효율적인 논리 단위를 취득하고, AOP는 비즈니스 프로세스 섹션 추출, 그것은 얼굴 공정의 단계 또는 단계의 대상이 두 가지 기본적 디자인 부분 사이 저 논리 결합 절차의 효과를 분리

예를 들면 :

물리적 패키지에 대한 이러한 사업 "직원"의 예를 들어, OOP의 작업이 자연적으로, 우리는 속성과 행동 패키지 관련 "직원"범주 및 "직원"을 구축 할 수있는 반면 캡슐화에서 "직원"의 AOP 디자인 이 질문입니다

마찬가지로, "권한 검사"에 대한 세그먼트 분할이 작업은, 그것은 AOP 필드의 목표는

OOP 용어 중심의 예술, 동사에 대한 AOP 필드

짧은 AOP 프록시에 미리 컴파일의 방법으로 동적으로 달성하고 실행할 수있다. 동적으로 소스 코드를 변경하지 않고 기술 기능의 프로그램에 추가.

자바 열린 스레드 방법

Thread 클래스 상속과의 Runnable 인터페이스를 구현은 자바가의 Runnable 인터페이스를 구현하여 스레드를 생성하는 일반적으로, 다중 상속으로 인해 달성 될 수 없다. 스레드를 시작하지만 상관없이하는 방법은 시작 ()와 run () 메소드를 통해 사용할 수 있습니다, 여기에 그들을 소개입니다 차

시작 방법

이 방법에 의해 동시에 스레드는 또한, 당신은 다음 아래의 코드를 실행할 수 있습니다, 다음 준비에서) (이 스레드를 완료 시작되는 코드 실행의 run () 메소드를 기다리지 않고, 스레드, 진정한 멀티 스레드를 생성 시작 상태는 CPU 시간 슬라이스가 획득되는 경우, run () 메소드를 실행한다. 런 () 메소드를 스레드의 내용에서, run () 메소드의 마지막 실행 스레드를 중단 할 실행될 포함 ..

실행 방법 :

run 메소드를 호출하면 메소드 호출의 정상적인 방법으로 스레드 클래스를 시작하는 방법 실제로이며, 스레드를 만들지 않은으로 프로그램은 하나의 메인 쓰레드 코드 내부의 run () 메소드가 완료 될 때까지 계속 기다려야한다 아직도 다음 코드를 실행하므로 스레드를 기록 할 목적이 없다 

Thread 클래스 상속과 Runnable를 스레드. 차이를 정의 할 수 있습니다 구현 무엇입니까?

이점을 달성하기 위해 실행 가능한 인터페이스

  1. 자바 단일 상속 문제를 피하십시오
  2. 에 적합한 멀티 스레드 같은 리소스를 처리
  3. 공유 할 수있는 코드, 데이터 독립적 인 멀티 스레드가 자원을 쉽게 공유 할 수있다

요약 :

  1. ())를 실행 새 스레드를, (수 시작할 수 있습니다 시작
  2. ) (수) (시작, 실행을 반복적으로 호출 할 수 없습니다
  3. 아래 코드의 실행을 계속 재생을 수행 할 수 없습니다) (코드를 실행 시작, 그 바로 아래의 코드 실행을 계속 실행하기 위해 자신의 모든 코드를 기다려야 방법을 실행 호출 스레드 스위치입니다
  4. 시작 () 다중 스레드, 실행 (달성) 멀티 스레딩을 구현하지 않습니다

 

추천

출처www.cnblogs.com/yanglichen/p/11599552.html