질문 : A와 B 객체가 원형으로 참조되면 GC 일 수 있습니까?
답 : 예, 오늘날 가상 머신은 기본적으로 접근성 분석 알고리즘을 사용하여 단순히 객체 계산을 참조하는 것이 아니라 객체가 살아남는 지 여부를 결정합니다. 접근성 분석 알고리즘은 일련의 "GC 루츠"객체 (가상 머신 스택, 정적 속성 참조 객체에서 참조 된 객체)를 시작점으로 사용합니다. 이 노드가 아래쪽으로 검색하는 경로를 참조 체인이라고합니다. 객체에 GC 루트에 대한 참조 체인 연결이없는 경우 객체는 객체를 사용할 수 없음을 증명합니다.
2. 자바의 메모리 오버플로는 어떻게 발생합니까?
OutofMemoryError :
(1) Pergern Space Program은 다수의 항아리 또는 클래스를 사용하여 Java 가상 머신이 클래스 공간을 불충분하게로드하지 않습니다.
솔루션 : 매개 변수 조정 XX : Permsize 및 XX : MaxPermsize, JAR 패키지를 줄이며 클래스의 중복로드를 줄입니다.
(2) Java Heap Space Java Virtual Machine은 너무 많은 객체를 생성합니다.
솔루션 : 매개 변수 조정 XMS (초기 힙 크기) XMX (최대 힙 크기), 데드 루프 또는 불필요한 중복 객체를 확인하십시오.
(3) 새 기본 스레드를 만들 수 없음 JVM은 너무 많은 메모리 공간을 차지하고 JVM에서 스레드를 생성하려면 운영 체제에서 스레드를 생성해야합니다.
솔루션 : JVM의 스레드를 크기 르십시오.
3. 문자열 s = "123"; 이 문장에서 얼마나 많은 객체가 생성됩니까?
문자열 풀에 "123"이 없으면 물체가 생성되어 상수 풀에 배치됩니다. "123"이있는 경우 0 개 객체가 생성됩니다.
String s = new String("123") 인 경우 상수 풀에 없으면 상수 풀에 하나를 만들고 힙 메모리에 하나를 만듭니다.
4. 오류, 예외 및 runtimeexception의 차이점은 무엇입니까?
오류 및 예외는 Throwable의 서브 클래스이며 Runtimeexception은 예외의 서브 클래스입니다.
오류는 합리적인 응용 프로그램이 오류를 잡으려고 시도해서는 안된다는 것을 나타내는 데 사용됩니다.
예외는 합리적인 응용 프로그램이 캡처 해야하는 조건을 지적합니다. 점검 된 예외로 나뉘어지고 확인되지 않은 예외로 나뉩니다.
runtimeexception은 확인되지 않은 예외이며,이 방법에서 시도 또는 선언 할 필요가 없습니다. 주요 서브 클래스 : NullPointer, 산술, ArrayindExoutOfBounds, Classcast.
5. 독자와 입력 스트림의 차이점은 무엇입니까?
그것들은 모두 추상 클래스이고, 독자는 문자 스트림 (char 또는 string)을 읽는 데 사용되며 InputStream은 바이트 스트림 (바이트 배열)을 읽는 데 사용됩니다.
6. 해시 코드의 역할은 무엇입니까?
해시 코드는 주로 키 값 쌍의 위치를 찾는 데 사용되는 해시 맵 구조와 같은 빠른 검색에 사용됩니다. 두 객체가 동일하면 해시 코드는 동일해야하며 동일한 해시 코드를 가진 해시 코드 객체는 동일하지 않을 수 있습니다. 이는 동일한 상자에 넣는 것과 같습니다.
7. 해시 맵과 해시 가능의 차이점은 무엇입니까?
스레드 안전, 널 값 키, 효율성, 해시 맵 (ITERATOR FAST FAVEL ITERATOR), HASHTABLE (ENUMERATOR ITERATOR) 및 해시 맵 요소 위치는 시간이 지남에 따라 변경됩니다.
8. 해시 맵의 객체가 키로 사용할 수 있습니까? 사용자 정의 객체에 대한 요구 사항이 키로 요건이 있습니까?
예, 핵심 객체는 불변의 대상이어야합니다. 그렇지 않으면 입력이 맵에 삽입 된 후 키 값을 변경하면 현재 키 값이 해시 값과 일치하지 않게됩니다. 즉, 배열 인덱스와 일치하지 않으며 찾을 수 없습니다.
9. run () 또는 start ()를 사용하여 스레드를 시작해야합니까?
멀티 스레딩에서 동기화 및 동시성 문제를 해결하는 방법은 무엇입니까? 데몬 스레드는 무엇입니까? 데몬 스레드는 무엇입니까? 데몬 스레드 (스레드의 의미)를 구현하는 방법은 무엇입니까? 스레드를 중지하는 방법은 무엇입니까? 스레드 안전이란 무엇입니까? 스레드 불안의 예를 제시하십시오. 동기화 된 키워드의 역할을 설명하십시오. 스레드가 객체의 동기화 된 메소드에 들어가면 다른 스레드 가이 객체의 다른 방법을 입력 할 수 있습니까?
(1) 시작
(2) 스레드 클래스를 상속하고, 실행 가능한 인터페이스를 구현하고, exectuorservice, 미래 및 호출 가능을 사용하여 값을 반환하는 스레드를 구현하십시오.
(3) 동기화 방법, 동기화 코드 블록, 잠금
(4) 데이먼 스레드는 GC 및 스레드와 같은 다른 스레드의 작동을위한 서비스를 제공합니다. SetDeamon (True).
(5) 스레드 .Stop ()가 권장되지 않으며 (리소스가 올바르게 릴리스되지 않음) 인터럽트는 스레드를 중지하는 데 사용됩니다.
(6) 여러 스레드가 객체에 액세스 할 때, 런타임 환경에서 이러한 스레드의 스케줄링 및 교대 실행이 필요하지 않은 경우, 추가 동기화가 필요하지 않거나 다른 조정 작업이 발신자에서 수행 되며이 객체를 호출하여 올바른 결과를 얻을 수 있습니다.
(7) 티켓은 반복적으로 판매됩니다.
(8) 키워드 동기화. 정적 메소드를 수정할 때 클래스는 잠금 객체로 사용되며 하나의 스레드만이 이러한 종류의 동기화 정적 메소드에 액세스 할 수 있습니다. 일반 방법을 수정할 때 객체는 잠금 객체로 사용되며 하나의 스레드만이 이러한 종류의 동기화 일반 메소드에 액세스 할 수 있습니다. 잠금 객체 동기화 코드 블록을 사용자 정의 할 수도 있습니다.
(9) 동기화 된 방법을 입력 할 수없고 동기화되지 않은 방법을 입력 할 수 있습니다.
10. JDK8의 새로운 기능은 예제와 함께 해당 기능을 배우고 설명 했습니까?
(1) Lambda 표현 : 기능적 프로그래밍, 메소드 참조
(2) 스트림 API
(3) 기본 인터페이스 방법
(4) 날짜 및 시간 API의 개선, DateTimeFormatter 방법 추가
11. SQL 최적화의 원칙은 무엇입니까?
자세한 내용은 내 데이터베이스 분류의 블로그를 참조하십시오.
12. 서블릿의 수명주기에서 Serlvet과 CGI의 차이점은 무엇입니까?
수명주기 : 클래스 로딩, 인스턴스화 (객체 구성), 초기화 (INIT), 서비스 (서비스) 및 파괴.
CGI : 일반 게이트웨이 인터페이스 인 Perl 언어로 작성된 공통 게이트웨이 인터페이스는 각 요청에 대해 CGI 객체를 만듭니다.
서블릿 : 인스턴스화 및 초기화 만 한 번만 필요하며 멀티 스레딩.
13. StringBuffer의 장점은 무엇입니까? 왜 빠른가?
StringBuffer는 String 객체의 반복적 인 생성이 필요하지 않기 때문에 그렇지 않습니다.
예를 들어 String s = "a" + "b" + "c"작동 컴파일러는 최적화하고 문자열 s = "ABC"가됩니다.
문자열 S = S1 + S2 + S3 컴파일러도 최적화되어 StringBuilder Append 작업이됩니다. 그러나 일회성 + 작동으로 스 플라이싱하지 않으면 문자열 객체와 StringBuilder 객체가 반복적으로 생성되며 이는 매우 낮습니다.
14. 암호화 및 암호 해독 알고리즘을 이해하십니까?
초록 알고리즘 : MD5 (128 비트), SHA1 (160 비트)은 돌이킬 수없는 프로세스입니다. 데이터가 아무리 큰 경우, Digest 알고리즘 후에 동일한 길이의 데이터가 생성됩니다. 사전을 통해서만 금이 갈 수 있습니다.
대칭 암호화 알고리즘 : DES, AES, 암호화 및 해독 할 때 동일한 비밀 키가 사용됩니다.
비대칭 암호화 알고리즘 : RSA, 암호화 및 해독 할 때 다른 비밀 키를 사용하고 Alipay에 연결할 때 RSA2를 사용하십시오.
15. 높은 동시성과 높은 하중을 해결 하시겠습니까?
(1) 정적 페이지 소비는 최소화되고 HTML은 가능한 한 정적이며 정보 게시 시스템 CMS는 정보 입력 및 캐시 동적 데이터에서 정적 페이지를 자동으로 생성하는 데 사용됩니다.
(2) CDN, 다른 서버에 CSS/JS와 같은 리소스를 배포합니다.
(3)로드 밸런싱 (Nginx).
(4) 종종 변경되지 않은 캐시 데이터 (Redis, Memcache).
(5) 이미지 서버가 응용 프로그램 서버에서 분리되어 있습니다.
(6) 클러스터.
16. 정수 내부 캐시?
정수 클래스 내부에는 정수 정수 배열이 있으며 초기화 된 정수 객체를 저장합니다. 일반적인 값은 (-128 ~ 127)입니다. == 비교를 사용하는 경우 값이 캐시에 있지 않아서 거짓이 반환되므로 비교하기 위해 동일하게 사용해야합니다.
17. Arraylist의 원리는 무엇입니까?
(1) ArrayList는 스레드 infecure입니다. 스레드 안전을 원한다면 CopyOnWritElist를 사용하십시오.
(2) 하단 층은 객체 [] 배열이며, 내부 배열을 가리키는 요소 데이터 참조가 있습니다. 처음에는 기본적으로 캐시 된 빈 배열 (과도)을 가리 킵니다. 확장하려면 크기가 1.5 배 (x + (x >> 1)) 인 새 배열이 다시 새로워지고 이전 요소가 System.arrayCopy 기본 메소드를 통해 새 배열로 복사됩니다.
(3) 랜덤 읽기 및 쓰기 (get, set) 메소드의 알고리즘 복잡성은 O (1)입니다.
(4) 두 가지 유형의 추가 작업이 있습니다. ADD (index, value)의 알고리즘 복잡성은 O (n)이므로 요소 복사를 통해 이동해야하기 때문입니다. ADD (value) 작동의 알고리즘 복잡성은 O (1)입니다 (확장이 발생하지 않으면).
(5) 삭제 작업의 시간 복잡성은 O (n)입니다. 인덱스 또는 객체에 따라 삭제 되든 복사를 통해 이동 작업을 구현해야하기 때문입니다. 삭제 후 배열 크기가 변경되지 않으며 길이는 크기 속성으로 유지됩니다. 객체별로 객체를 삭제할 때 새 개체를 사용할 수 없습니다. ArrayList의 객체에 대한 참조를 통해 삭제해야합니다.
18. Linkedlist의 원리는 무엇입니까?
(1) 기본 층은 양방향 링크 목록으로 첫 번째 포인터와 마지막 포인터를 유지합니다.
(2) 무작위 읽기 및 쓰기 (get, set)의 시간 복잡성은 O (n)입니다.
(3) 삽입 작업 ADD (Object)의 시간 복잡성은 O (1)이다. ADD (Index, Object)의 시간 복잡성은 O (n)입니다.
(4) 삭제 작업 제거 (개체)의 시간 복잡성은 O (1)이다. 제거 (인덱스)의 시간 복잡성은 O (n)입니다.
19. 스레드 풀을 사용할 때 주목해야 할 것?
(1) 교착 상태를 방지합니다. 스레드 풀의 모든 스레드는 이벤트 A가 발생하기를 기다리고 있으며 A를 실행할 무료 스레드가 없습니다.
(2) 시스템 리소스가 불충분 한 방지. 스레드 수를 제어합니다.
(3) 동시 오류를 방지합니다.
(4) 스레드 누출 방지. Runtimeexception 또는 오류가 정상적으로 잡히지 않아 스레드가 비정상적으로 종료되고 스레드 풀이 스레드를 잃습니다.
(5) 작업 과부하를 피하십시오.
20. 봄에 @autowire와 @resource의 차이점은 무엇입니까?
@autowire는 기본적으로 유형별로 조립됩니다. 기본적으로 종속성 객체가 있어야합니다. NULL이 허용되면 False로 설정할 수 있습니다. 이름으로 조립하려면 @Qualifier 주석과 함께 사용할 수 있습니다.
@Resource는 기본적으로 이름으로 조립됩니다. 이름과 일치하는 콩을 찾을 수 없으면 유형에 따라 조립됩니다. 이름 속성을 통해 지정할 수 있습니다. 이름 속성이 지정되지 않은 경우, 주석이 필드에 주석이 달라지면 필드의 이름은 기본적으로 종속성 객체를 찾기 위해 Bean 이름으로 가져옵니다. 주석이 속성의 Setter 메소드에 표시되면 속성 이름은 기본적으로 Bean 이름으로 종속성 객체를 찾습니다.
21. 스레드 상태 전송 다이어그램.
22. 객체 클래스의 방법?
(1) 동일 : 동등한 지 여부를 결정하십시오.
(2) 해시 코드 : 해시 값을 찾으십시오. 두 객체의 해시 값이 같으면 같지 않을 수 있습니다. 이와 동일하면 두 객체의 해시 값은 동일해야합니다.
(3) Tostring : 일반적으로 다시 작성되는 물체의 문자열 표현식 형태를 얻습니다.
(4) getClass : 반사 방법 객체가 속한 클래스를 얻는 방법.
(5) 대기 : 동기화 된 코드 세그먼트에서만 사용할 수 있습니다. 시간 매개 변수가 포함되지 않은 경우 실행 스레드는 잠금 장치를 버리고 대기 상태 (대기 풀)로 들어갑니다.
(6) 알림 : 동기화 된 코드 세그먼트에서만 사용할 수 있고 대기 풀에서 스레드를 꺼내 잠금 플래그 풀에 넣을 수 있습니다.
(7) NotifyAll : 동기화 된 코드 세그먼트에서만 사용할 수 있으며 모든 스레드는 대기 풀에서 가져와 잠금 플래그 풀에 넣습니다.
23. Java 직렬화의 기본 원리?
객체 정보를 바이트 코드 정보로 변환합니다.
(1) 직렬화에 대한 설명을 저장합니다. (2) 현재 클래스 설명 정보. (3) 현재 클래스 속성에 대한 설명. (4) 슈퍼 클래스 설명 (5) 슈퍼 클래스 속성 설명 (6) 슈퍼 클래스 속성 값 설명 (7) 서브 클래스 속성 값 설명