>  기사  >  Java  >  2020년 가장 일반적인 JAVA 면접 질문 요약(컬렉션)

2020년 가장 일반적인 JAVA 면접 질문 요약(컬렉션)

angryTom
angryTom앞으로
2019-11-11 17:47:172111검색

2020년 가장 일반적인 JAVA 면접 질문 요약(컬렉션)

java 기본 및 여러 "비교"


#🎜 🎜 #

1. Collections.sort 정렬의 내부 원리

Java 6에서는 Arrays.sort() 및 Collections.sort()가 MergeSort를 사용하는 반면, Java 7에서는 내부 구현은 객체 간의 비교에 대한 구현 요구 사항이 더 엄격한 TimSort로 대체되었습니다. 구조적 구현 측면에서 HashMap은 배열 + 연결 목록 + 레드-블랙 트리(JDK1.8은 레드-블랙 트리 부분을 추가함)로 구현됩니다. HashMap은 한 레코드의 키만 null을 허용하고, 여러 레코드의 값도 null을 허용합니다.

HashMap은 스레드로부터 안전하지 않습니다. ConcurrentHashMap은 스레드로부터 안전합니다. 충돌 해결: 충돌이 발생하면 지퍼 방식을 사용하여 단일 연결 리스트에서 동의어인 키워드로 노드를 연결합니다. 해시 테이블이 m 길이인 경우 m개의 헤드 포인터로 구성된 포인터 배열 T를 정의하고 노드 주소는 다음과 같습니다. i. 포인트는 T(i)를 헤드 포인터로 사용하여 단일 연결 리스트에 삽입됩니다. Java 8에서는 충돌하는 요소가 제한(8)을 초과하고 연결된 목록이 레드-블랙 트리로 대체됩니다.

3. String과 StringBuilder의 차이점

1) 가변성과 불변성: 문자열은 "+"가 실행될 때마다 불변입니다. 새로운 객체가 생성되므로 메모리 절약을 위해 문자열을 자주 변경하는 경우에는 String을 사용하지 않습니다.

2) 다중 스레드로부터 안전합니까? StringBuilder는 메서드에 동기화 잠금을 추가하지 않으므로 스레드로부터 안전하지 않습니다. StringBuffer와 String은 모두 스레드로부터 안전합니다.

4. Vector와 Array의 차이점

1) ArrayList는 메모리가 부족할 때 기본적으로 50% + 1만큼 확장됩니다. 벡터는 기본 확장 1x입니다.

2) Vector는 스레드로부터 안전하지만 스레드 안전에는 더 큰 시스템 오버헤드가 필요하기 때문에 대부분의 경우 Vector는 사용되지 않습니다.

5. HashMap과 Hashtable의 차이점

1) 역사적 이유: Hashtable은 Dicttonary 클래스를 상속하고 HashMap은 abstractMap#🎜을 상속합니다. 🎜## 🎜🎜#2) HashMap은 빈 키-값 쌍을 허용하지만 빈 개체는 최대 하나뿐인 반면 HashTable은 이를 허용하지 않습니다.

3) HashTable은 동기화되는 반면 HashMap은 비동기식이며 HashTable보다 효율적입니다.

6 ConncurrentHashMap과 해시 테이블 비교

(2개) 스레드 맵의 동일한 체인에 대한 동시 액세스, 한 스레드는 끝에서 삭제되고 다른 스레드는 앞쪽에서 탐색 및 검색하여 이전 스레드가 나중에 다른 스레드에 의해 삭제된 노드를 여전히 올바르게 찾을 수 있는 이유를 묻습니다)

# 🎜🎜#ConcurrentHashMap 해시테이블과 해시맵의 장점을 결합한 것입니다. Hashtable은 동기화됩니다. 즉, 스레드로부터 안전하지만 hashmap은 동기화를 고려하지 않습니다. 따라서 해시맵은 단일 스레드 상황에서 더 효율적입니다. 해시테이블의 멀티스레딩의 경우 동기화 작업을 통해 프로그램 실행의 정확성을 보장할 수 있습니다. 그러나 해시테이블은 동기적으로 실행될 때마다 전체 구조를 잠가야 합니다. ConcurrentHashMap은 이 문제를 해결하기 위해 탄생했습니다.

ConcurrentHashMap은 여러 수정 작업을 동시에 수행할 수 있다는 것입니다. 분리 기술이 사용됩니다(배열은 여러 개체를 저장하고 이러한 개체의 잠금을 별도의 잠금으로 사용하며 가져오기/넣기 중에 임의의 개체를 사용함). 여러 잠금을 사용하여 해시 테이블의 여러 부분에 대한 수정을 제어합니다. JDK 1.6에는 HashEntry 구조가 있는데, 새로 추가된 노드가 삽입될 때마다 체인의 헤드 노드로 사용되며(HashMap과 동일하게 구현됨), 노드가 삭제될 때마다 그 이전의 모든 노드가 삭제됩니다. 삭제된 노드는 복사되어 새로운 체인을 형성하고 현재 노드의 이전 노드의 다음 노드를 현재 노드의 다음 노드로 지정하므로 삭제 후에도 두 개의 체인이 존재하게 됩니다. 체인 중 하나는 삭제 중이고 다른 하나는 스레드가 순회할 때 모두 잘 작동합니다. 순회 스레드가 원래 체인을 계속 사용할 수 있기 때문입니다.

Java8에서는 휘발성 HashEntry를 사용하여 데이터를 저장하고 테이블 요소는 테이블 배열 + 단방향 연결 목록에서 레드-블랙 트리를 추가합니다. 레드-블랙 트리는 다음과 같은 특징을 갖는 특별한 이진 탐색 트리입니다: 1. 노드는 레드 또는 블랙입니다. 2. 루트 노드는 블랙입니다. 3. 리프 노드는 블랙입니다. 4. 한 노드가 레드이면 리프 노드는 black 5. 한 노드에서 그 하위 노드까지의 모든 경로에 있는 블랙 노드의 개수는 동일하다.

7. ArrayList와 LinkedList의 차이점은 무엇인가요?

가장 분명한 차이점은

ArrrayList의 기본 데이터 구조는 배열이고 임의 액세스를 지원하는 반면 LinkedList의 기본 데이터 구조는 연결된 것입니다. 목록에 있으며 임의 액세스를 지원하지 않습니다. 첨자를 사용하여 요소에 액세스하려면 ArrayList의 시간 복잡도는 O(1)인 반면 LinkedList의 시간 복잡도는 O(n)입니다. LinkedList는 이중 연결 리스트입니다

8. Java에서 Comparator와 Comparable의 차이점은 무엇인가요?

Comparable 인터페이스는 객체의 자연스러운 순서를 정의하는 데 사용되는 정렬 인터페이스인 반면, Comparator는 일반적으로 사용자 정의 순서를 정의하는 데 사용되는 비교 인터페이스입니다. 특정 클래스의 순서를 제어해야 하고 클래스 자체가 정렬을 지원하지 않는 경우(즉, Comparable 인터페이스를 구현하지 않는 경우) "이 클래스의 비교기"를 만들어 정렬을 수행할 수 있습니다. Comparable은 항상 하나만 있지만 개체의 순서를 정의하기 위해 여러 개의 비교기가 있을 수 있습니다.

9. 추상 클래스란 무엇인가요? 인터페이스와 어떻게 다른가요? 왜 추상 클래스를 사용하겠습니까?

추상 클래스는 인스턴스화가 허용되지 않는 클래스를 의미합니다. 클래스는 상속 관계를 한 번만 사용할 수 있습니다. 그러나 클래스는 여러 인터페이스를 구현할 수 있습니다.

추상 클래스와 인터페이스는 다양한 디자인 컨셉을 반영합니다. 실제로 추상 클래스는 "is-a" 관계를 나타내고, 인터페이스는 "like-a" 관계를 나타냅니다. 추상 클래스와 인터페이스를 구현하는 클래스는 그 안에 있는 모든 메서드를 구현해야 합니다. 추상 클래스에는 추상이 아닌 메서드가 있을 수 있습니다. 인터페이스에는 구현 메소드가 있을 수 없습니다. 그러나 Java8에서는 인터페이스에서 정적 기본 메소드가 허용됩니다.

인터페이스에 정의된 변수는 기본적으로 public static final이며, 초기값을 주어야 하기 때문에 구현 클래스에서 재정의할 수 없고 값을 변경할 수도 없습니다. 추상 클래스의 변수는 기본적으로 친숙하며 해당 값은 하위 클래스에서 재정의되거나 재할당될 수 있습니다.

하위 클래스가 상위 클래스에서 추상 메서드를 구현할 때 가시성은 상위 클래스의 가시성보다 크거나 같을 수 있지만 인터페이스 구현 클래스의 인터페이스 메서드 가시성은 인터페이스(공개).

재사용을 위해 추상 클래스를 사용하세요. 코딩 양을 줄이고 결합을 줄입니다.

10. Java의 오버로딩과 재작성에 대해 설명하세요.

오버로딩과 재정의 모두 동일한 이름을 사용하여 서로 다른 기능을 구현할 수 있지만 오버로드는 컴파일 타임 활동이고 재정의는 런타임 활동입니다. 동일한 클래스의 메서드를 재정의할 수 있지만 하위 클래스의 메서드만 재정의할 수 있습니다. 재작성에는 상속이 있어야 합니다

재작성: 1. 하위 클래스에서는 기본 클래스에서 상속된 메서드를 필요에 따라 재작성할 수 있습니다. 2. 재정의된 메서드와 재정의된 메서드는 메서드 이름, 매개변수 목록, 반환 유형이 동일해야 합니다. 3. 재정의된 메서드는 재정의된 메서드보다 더 제한적인 액세스 권한을 사용할 수 없습니다.

오버로드 시 메소드 이름은 동일해야 하지만 매개변수 유형과 개수가 다르며 반환값 유형은 동일하거나 다를 수 있습니다. 반환 유형은 오버로드된 함수를 구별하는 기준으로 사용될 수 없습니다.

11.컬렉션과 컬렉션의 차이점은 무엇인가요?

Collection은 Java 컬렉션 프레임워크의 기본 인터페이스입니다.

Collections는 Java 컬렉션 프레임워크에서 제공하는 도구 클래스로, 컬렉션을 작동하거나 반환하기 위한 다수의 정적 메서드를 포함합니다.

12. Java의 다형성 구현 원리

소위 다형성은 하위 클래스 객체를 가리키는 상위 클래스 참조를 의미하며, 메소드를 호출할 때 하위 클래스의 구현이 호출됩니다. 부모 클래스. 다형성 구현의 핵심은 "동적 바인딩"에 있습니다.

13.객체에는 어떤 메소드가 정의되어 있나요?

clone(), equals(), hashCode(), toString(), inform(), informAll(),

wait(), finalize(), getClass()

14. ?

Generics는 매개변수화된 유형입니다. 컬렉션을 생성할 때 컬렉션 요소의 유형을 지정하세요. 이 컬렉션은 이 유형의 매개변수만 전달할 수 있습니다. 유형 삭제: Java 컴파일러에 의해 생성된 바이트코드는 일반 정보를 포함하지 않으므로 컴파일 시 삭제됩니다. 1. 제네릭은 최상위 상위 클래스로 대체됩니다. 2. 제거됩니다.

15. JDK 1.8에 도입된 새로운 기능 5가지를 말해주세요.

Java 8은 Java 역사상 획기적인 버전입니다. 다음은 JDK 8의 5가지 주요 기능입니다.

Lambda 표현식을 사용하면 Stream API를 통해 익명 함수를 객체처럼 전달할 수 있습니다. -코어 CPU, 작성 가능 날짜 및 시간 API 생성, 마지막으로 확장 메서드를 사용할 수 있는 안정적이고 간단한 날짜 및 시간 라이브러리가 있으므로 이제 인터페이스에 정적 기본 메서드를 사용할 수 있습니다. 주석을 반복하면 이제 동일한 유형에 대해 동일한 주석을 여러 번 사용할 수 있습니다.

16 Java의 public, private, protected 및 default 키워드의 액세스 범위:

Protected는 패키지 내부 및 외부의 하위 클래스에서 액세스할 수 있고, default는 동일한 패키지 내에서만 액세스할 수 있으며, prvate는 동일한 클래스에서 액세스

17. 일반적으로 사용되는 데이터 구조:

세트, 선형 구조(배열, 큐, 연결 목록 및 스택), 트리 구조, 그래프 구조

18. 자바에서는? (답변)

Java의 TreeMap은 레드-블랙 트리를 사용하여 구현됩니다.

19. 익명 내부 클래스란 무엇인가요? 외부에 정의된 변수에 어떻게 접근하나요?

익명 내부 클래스는 이름이 없는 내부 클래스입니다. 익명 내부 클래스는 일반적으로 코드 작성을 단순화하는 데 사용됩니다.

익명 내부 클래스는 외부 클래스의 최종 변수에만 액세스할 수 있습니다. Java 8은 더 똑똑합니다. 익명 내부 클래스가 로컬 변수에 액세스하면 로컬 변수는 자동으로 최종 수정을 사용하는 것과 동일합니다.

20. 싱글턴 패턴을 만드는 방법은 무엇입니까? 이중 검사에 대해 그는 스레드로부터 안전하지 않다고 말했습니다. 스레드로부터 안전한 싱글톤을 효율적으로 생성하는 방법은 무엇입니까?

하나는 열거형이고 다른 하나는 정적 내부 클래스를 통한 것입니다.

21. poll() 메소드와 Remove() 메소드의 차이점은 무엇인가요?

poll() 및

remove()는 모두 대기열에서 요소를 제거하지만 poll()은 요소를 가져오는 데 실패하면 null을 반환하지만, 제거()는 실패하면 예외를 발생시킵니다.

22. ArrayList를 순회하는 동안 요소를 제거하는 코드를 작성하세요.

반복자를 사용하세요.

Iterator itr = list.iterator();

while(itr.hasNext()) {if(…) { itr.remove();} }

JVM


1. JVM은 클래스를 어떻게 로드합니까?

클래스 로딩 프로세스: 로딩, 검증(검증 단계의 역할은 클래스 파일의 바이트 스트림에는 JVM 사양을 준수하며 JVM에 해를 끼치지 않는 정보가 포함되어 있습니다. 준비(변수에 대한 메모리 할당 및 준비 단계에서 클래스 변수의 초기화 설정), 구문 분석(파싱 프로세스는 기호를 대체하는 것입니다) 직접 참조가 있는 상수 풀의 참조) 및 초기화.

부모 위임 모델의 방법: 부모 위임은 클래스가 클래스 로딩 요청을 받으면 먼저 자체적으로 로드를 시도하지 않고 먼저 부모 클래스 로더를 찾아 완료하는 것을 의미합니다. 최상위 시작 클래스 로더가 클래스를 로드할 수 없다고 표시하면 하위 클래스는 클래스를 자체적으로 로드하려고 시도합니다. 원래 개시자 로더를 로드할 수 없으면 조회하지 않지만 ClassNotFound 예외가 발생합니다.

메서드: 시작(Bootstrap) 클래스 로더, 표준 확장(Extension) 클래스 로더, 애플리케이션 클래스 로더(Application), 컨텍스트(Custom) 클래스 로더. 이는 동일한 바이트코드의 여러 복사본이 메모리에 나타나는 것을 방지하는 것입니다.

2. GC 알고리즘(어떤 종류의 객체가 재활용 가능한 객체로 간주되는지, 도달 가능성 분석), CMS 수집기

jvm은 객체가 재활용 가능한 "쓰레기"가 되었는지 어떻게 결정합니까? 일반적으로 두 가지 방법: 참조 표기법 및 루트 검색 연산. 참조 표기법으로는 순환 참조 문제를 해결할 수 없으므로 루트 검색이 사용됩니다. 일련의 "GC Roots" 개체에서 시작하여 아래쪽으로 검색하는 동안 검색이 이동한 경로를 참조 체인이라고 합니다. 객체와 "GC 루트" 사이에 참조 체인이 없으면 참조 도달 불가능이라고 합니다. 참조할 수 없는 개체는 재활용 가능한 개체로 간주됩니다.

여러 가비지 수집기: 1, Serial New/Serial Old(직렬), 2, Parrallel New(병렬), 3, Parrallel Scavenge, 4, Parrallel Old, 5, CMS(CMS 수집기는 가장 짧은 A 수집기를 얻는 것입니다. Mark-sweep 알고리즘을 사용하는 동시 수집기입니다. 6. G1(병렬 및 동시 수집기이며 예측 가능한 일시 중지 시간 모델을 설정할 수 있습니다. 전체적으로 마크 정리를 기반으로 합니다. 부분적으로 복제를 사용합니다)

3. JVM은 어떤 영역으로 나누어져 있고, 각 영역은 어떤 일을 하나요?

1) 메소드 영역(method) : 모든 스레드가 공유합니다. 메소드 영역에는 모든 클래스 정보와 정적 변수가 포함됩니다.

2) 힙(Heap): 모든 스레드가 공유하며 객체 인스턴스와 배열을 저장합니다. Java 힙은 GC의 주요 영역입니다.

3) 스택: 각 스레드에는 일부 지역 변수 등을 저장하는 스택 영역이 포함되어 있습니다.

4) 프로그램 카운터: 현재 스레드에서 실행되는 바이트코드의 줄 표시기입니다.

4. JVM의 신세대, 구세대, 영구 세대에는 무엇이 저장되나요?

영구 생성은 주로 Java 클래스의 클래스 정보를 저장하며 가비지 수집을 통해 수집되는 Java 개체와는 거의 관련이 없습니다. 새로 생성된 모든 객체는 먼저 Young Generation에 배치되고 Old Generation은 긴 수명 주기를 가진 객체를 저장합니다.

5. 메모리 오버플로 및 메모리 누수:

메모리 오버플로: 프로그램이 메모리를 적용할 때 메모리가 부족하여 메모리 누수 값 가비지 개체를 재활용할 수 없습니다. 메모리 분석기를 사용할 수 있습니다. 누출을 확인하는 도구.

6. 프로세스와 스레드:

프로세스는 실행 중인 프로그램(독립성, 동적, 동시성)을 의미하고 스레드는 프로세스의 순차적 실행 흐름을 의미합니다. 차이점은 다음과 같습니다. 1. 프로세스 간에 메모리가 공유되지 않습니다. 2. 리소스 할당을 위한 프로세스를 만드는 데 드는 비용이 훨씬 높으므로 동시성이 높은 환경에서는 멀티스레딩이 더 효율적입니다.

7. 직렬화 및 역직렬화:

직렬화는 Java 객체를 바이트 시퀀스로 변환하는 것을 의미하며 역직렬화는 그 반대입니다. 주로 Java 스레드와 객체 전송 간의 통신을 위해 사용됩니다. 직렬화 가능 또는 외부화 가능 인터페이스를 구현하는 클래스 객체만 직렬화할 수 있습니다.

8.64비트 JVM에서 int의 최대 길이는 얼마입니까?

Java에서 int 유형 변수의 길이는 플랫폼에 관계없이 고정된 값이며 항상 32비트입니다. 이는 int 유형의 길이가 32비트 및 64비트 Java 가상 머신에서 동일함을 의미합니다.

9. Java에서 WeakReference와 SoftReference의 차이점은 무엇인가요?

Java에는 네 가지 유형의 참조가 있습니다. StrongReference, SoftReference, WeakReference 및 PhantomReference.

StrongReference는 Java의 기본 참조 구현입니다. 가능한 한 오랫동안 JVM에서 유지되며 개체가 이를 가리키는 경우

WeakReference는 참조된 개체인 경우입니다.

JVM에 더 이상 강력한 참조가 없으면 GC에서 재활용됩니다

WeakReference와 SoftReference는 모두 GC와 메모리 효율성을 향상시키는 데 도움이 되지만 마지막 강력한 참조가 끝나면 WeakReference는 GC에서 재활용됩니다. SoftReference는 JVM의 메모리가 부족할 때까지 참조를 최대한 오랫동안 유지합니다(가상 머신 보장). 이 기능을 사용하면

SoftReference가 애플리케이션 캐싱에 매우 적합해집니다.

10 Java 힙 공간과 GC를 설명하세요.

Java 명령을 통해 시작된 경우

Java 프로세스가 생성되면 메모리가 할당됩니다. 메모리의 일부는 힙 공간을 만드는 데 사용됩니다. 프로그램에서 개체가 생성되면 힙 공간에서 메모리가 할당됩니다. GC는 향후 할당을 위해 유효하지 않은 객체의 메모리를 회수하는 JVM 내부 프로세스입니다.

11.Java에서 힙과 스택의 차이점은 무엇인가요?

JVM의 힙과 스택은 서로 다른 메모리 영역에 속하며 서로 다른 용도로 사용됩니다. 스택은 메서드 프레임과 지역 변수를 저장하는 데 자주 사용되는 반면 개체는 항상 힙에 할당됩니다. 스택은 일반적으로 힙보다 작고 여러 스레드 간에 공유되지 않는 반면, 힙은 전체 JVM의 모든 스레드에서 공유됩니다.

동시성, Lock


1.휘발성 키워드, Lock

동시 프로그래밍에서: 원자성 문제, 가시성 문제, 순서 문제.

휘발성 키워드는 가시성을 보장할 수 있고, 명령 재정렬을 금지할 수 있지만 원자성을 보장할 수는 없습니다. 가시성은 매번 최신 값을 읽는 것만 보장할 수 있지만 휘발성은 변수 작업의 원자성을 보장할 수 없습니다. 생성된 변수 문에 Lock 키워드와 메모리 장벽을 추가합니다.

Lock 구현은 동기화된 메서드 및 문을 사용하여 사용할 수 있는 것보다 더 넓은 범위의 잠금 작업을 제공하며 스레드 동기화 문제를 더 우아한 방식으로 처리합니다. 동기화된 수정 메서드나 명령문 블록을 사용하면 코드가 실행된 후 자동으로 잠금이 해제되지만, Lock을 사용하려면 수동으로 잠금을 해제해야 합니다

2. MYSQL 일반 최적화(SQL 최적화, 테이블 구조 최적화 등)

SQL 최적화, 테이블 구조 최적화, 인덱스 최적화, 캐시 매개변수 최적화

3. Java가 변경될 때마다 다시 컴파일하고 패키징하고 배포해야 합니다. 더 좋은 방법이 있나요

핫 로딩을 사용할 수 있습니다

4. 프로세스 간 통신 방법은 무엇입니까?

1) 파이프, 2) 명명된 파이프, 3) 신호, 4) 메시지 큐, 5) 공유 메모리, 6) 메모리 매핑된 메모리, 7) 세마포, 8) 소켓

5.Sychronized는 정적 메서드, 잠금을 수정합니다. 인스턴스 대신 클래스 자체 및 비정적 메서드가 인스턴스를 잠급니다.

6. 어떤 상황에서 운영 체제가 교착 상태에 빠지나요?

소위 교착 상태: 작업 중 리소스를 놓고 경쟁하는 여러 프로세스로 인해 발생하는 교착 상태를 말합니다. 원인: 리소스 경쟁: 시스템의 여러 프로세스가 공유 리소스를 사용하고 리소스가 요구 사항을 충족하기에 충분하지 않으면 프로세스가 리소스를 놓고 경쟁하여 교착 상태가 발생합니다. 프로세스 간 진행 순서는 불법입니다. 리소스 요청 및 해제 순서가 잘못되면 프로세스 교착 상태가 발생합니다

7. 교착 상태의 4가지 조건:

1. 요청 및 보류 (자원 요청으로 인해 프로세스가 차단된 경우 획득한 자원은 유지됨) 3. 비박탈 조건(프로세스가 획득한 자원을 모두 사용하기 전에 강제로 박탈할 수 없음) 4. 루프 대기(여러 프로세스 형태) 자원 관계를 기다리는 일대일 순환)

8. 분산 잠금을 이해하는 방법은 무엇입니까?

일상 업무에서 온라인 서버는 여러 분산 서버에 배포되므로 분산 시나리오에서 데이터 일관성 문제에 직면하는 경우가 많으므로 이러한 문제를 해결하려면 분산 잠금을 사용해야 합니다.

9. 스레드 동기화와 차단은 어떤 관계인가요? 동기화가 반드시 차단되나요? 차단은 동기식이어야 하나요?

스레드가 동기화되는지 여부는 차단 또는 비차단과 관련이 없습니다. 동기화는 프로세스이고 차단은 스레드의 상태입니다. 여러 스레드가 공유 변수에 대해 작동할 때 경쟁이 발생할 수 있습니다. 이때 동시에 2개 이상의 스레드가 임계 영역에 진입하는 것을 방지하기 위해 동기화가 필요합니다. 이 과정에서 나중에 임계 영역에 진입하는 스레드는 차단되고 먼저 진입한 스레드가 임계 영역에서 빠져나오기를 기다립니다. 영역.

10. 동기식과 비동기식의 차이점은 무엇인가요?

동기식과 비동기식의 가장 큰 차이점은 다음과 같습니다. 하나는 기다려야 하고 다른 하나는 기다리지 않습니다. 동기화는 일반적으로 특정 리소스를 공유할 때 사용되며 모든 사람이 동시에 파일을 수정하는 경우 다른 사람이 삭제한 콘텐츠를 읽을 수 있습니다. 오류가 발생하며 동기화가 순서대로 수정됩니다.

11.스레드 풀

시스템 자체의 환경 조건에 따라 실행 스레드 수를 효과적으로 제한하여 최상의 작업 결과를 얻습니다. 스레드는 주로 실행 스레드 수를 제어합니다. 그 수를 초과하는 스레드는 작업이 실행될 때까지 대기한 다음 작업을 대기열 앞쪽에서 꺼내어 실행합니다.

12. () 방법? if 블록 또는 루프를 사용하시겠습니까? 왜?

wait() 메서드는 루프에서 호출해야 합니다. 스레드가 CPU를 가져와 실행을 시작할 때 다른 조건이 아직 충족되지 않을 수 있으므로 처리하기 전에 조건이 충족되었는지 확인하기 위해 루프를 실행하는 것이 좋습니다. .

wait(), inform() 및 informall() 메소드는 스레드 간 통신을 구현하기 위해 java.lang.Object 클래스에서 제공하는 동기화 제어 메소드입니다. 대기 또는 깨우기

13. 스레드를 구현하는 여러 가지 방법

(1) Thread 클래스 상속, 실행 함수 다시 작성

(2) Runnable 인터페이스 구현, 실행 함수 다시 작성

(3) 호출 가능한 인터페이스, 호출 기능을 다시 작성

14. 멀티 스레드 환경에서 거짓 공유란 무엇입니까?

의사 공유는 다중 스레드 시스템(각 프로세서에 자체 로컬 캐시가 있음)에서 잘 알려진 성능 문제입니다. 캐시 시스템은 캐시 라인 단위로 데이터를 저장합니다. 캐시 라인은 연속된 2바이트의 정수 거듭제곱(일반적으로 32~256바이트)입니다. 가장 일반적인 캐시 라인 크기는 64바이트입니다. 여러 스레드가 독립 변수를 수정할 때 이러한 변수가 동일한 캐시 라인을 공유하면 의도치 않게 서로의 성능에 영향을 미치게 됩니다. 이는 거짓 공유입니다.

네트워크, 데이터베이스


1. TCP는 어떻게 안정적인 전송을 보장하나요? 3방향 핸드셰이크 프로세스?

TCP 연결에서는 데이터 스트림이 올바른 순서로 상대방에게 전달되어야 합니다. TCP의 신뢰성은 시퀀스 번호 지정 및 승인(ACK)을 통해 달성됩니다. TCP 연결은 3방향 핸드셰이크로 초기화됩니다. 3방향 핸드셰이크의 목적은 양 당사자의 시퀀스 번호와 확인 번호를 동기화하고 TCP 창 크기 정보를 교환하는 것입니다. 첫 번째는 클라이언트가 연결을 시작한 때이고, 두 번째는 서버가 클라이언트의 요청을 수신했음을 의미하고, 세 번째는 클라이언트가 서버로부터 피드백을 수신했음을 의미합니다.

2. Linux에서 일반적으로 사용되는 명령은 무엇입니까?

1. cd 명령은 디렉토리를 변경하는 데 사용됩니다. cd / 루트 디렉터리로 이동 cd ~ 사용자 디렉터리로 이동

2 ls 명령은 디렉터리의 내용을 보는 데 사용됩니다.

3. cp 명령은 cp

4.mv 명령 mv t.txt Document를 복사하는 데 사용됩니다. t.txt 파일을 Document 디렉터리로 이동합니다.

3. 일반적으로 사용되는 해시 알고리즘은 무엇인가요?

1. 추가 해시: 소위 추가 해시는 입력 요소를 하나씩 추가하여 최종 결과를 형성하는 것입니다.

2. 비트 연산 해시: 이 유형의 해시 함수는 다양한 비트 연산(일반적으로 Shift 및 XOR)을 사용하여 입력 요소를 완전히 혼합합니다.

3 곱셈 해시: 33*hash + key.charAt(i )

4. 일관된 해싱이란 무엇입니까?

설계 목표는 인터넷상의 핫스팟 문제를 해결하는 것입니다. 일관된 해시 알고리즘은 동적으로 변화하는 캐시 환경에서 해시 알고리즘의 품질을 결정하기 위해 4가지 정의를 제안합니다. 1. 균형(Balance) 2. 단조성(Monotonicity) ) 3. 분산(Spread) 4. 로드(Load)

5. 데이터베이스의 패러다임은 무엇인가요?

첫 번째 정규형 - 데이터베이스의 테이블(모든 필드 값)은 분할할 수 없는 원자 데이터 항목입니다.

두 번째 정규형 - 데이터베이스 테이블의 각 열은 기본 키와 관련되어 있으며 기본 키의 특정 부분에만 관련될 수는 없습니다.

세 번째 정규형 - 데이터베이스 테이블의 각 데이터 열은 기본 키와 직접적으로 관련되어 있으며 간접적으로 관련될 수 없습니다. 정규화는 데이터 중복을 줄이는 것입니다.

6. 데이터베이스의 인덱스 구조는 무엇인가요? 어떤 상황에서 인덱스를 구축하는 것이 적절한가요?

데이터베이스의 인덱스 구조는 정렬된 데이터 구조입니다. 데이터베이스 인덱스는 B-트리와 변형된 B+ 트리를 통해 구현됩니다. 어떤 상황에서 인덱스를 생성하는 것이 적합하지 않은가? 검색 성능보다 뛰어납니다.

시스템 자체의 환경 조건에 따라 실행 스레드 수를 효과적으로 제한하여 최상의 작동 결과를 얻습니다. 스레드는 주로 실행 스레드 수를 제어합니다. 그 수를 초과하는 스레드는 줄을 서서 작업이 실행될 때까지 기다린 다음 실행을 위해 대기열에서 작업을 꺼냅니다.

7. 동시 패키지?

java.util.concurrent, java.util.concurrent.atomic 및 java.util.concurrent.lock

8. 일반적으로 사용되는 데이터베이스는 무엇입니까? Redis를 사용해 본 적이 있나요?

MySQL, SQL Server, Oracle 데이터베이스.

9. 어떤 오픈소스 프로토콜을 알고 있나요?

GPL(GNU General Public License): GNU General Public License

LGPL(GNU Lesser General Public License): GNU Lesser General Public License

BSD

(Berkeley Software Distribution): Berkeley Software Distribution License

MIT( Massachusetts Institute of Technology): MIT의 이름은 Massachusetts Institute of Technology에서 따왔습니다

Apache(Apache License): Apache License Agreement

MPL(Mozilla Public License): Mozilla Public License Agreement

10 형식이 되어 있습니다. submit , get과 post의 차이점

1. get은 서버에서 정보를 가져오고 post는 서버로 정보를 전송합니다

2. get을 통해 전송되는 데이터의 양은 상대적으로 적지만 post는 더 클 수 있습니다. . get의 보안은 상대적으로 낮습니다.

11. TCP 프로토콜과 UDP 프로토콜의 차이점은 무엇인가요? (답변)

TCP(Tranfer Control Protocol)는 전송을 보장하는 연결 지향 프로토콜입니다. 데이터 스트림을 전송하기 전에 양 당사자는 먼저 가상 통신 채널을 설정합니다. 오류가 거의 없이 데이터를 전송할 수 있습니다.

UDP(사용자 데이터그램 프로토콜)는 UDP를 사용하여 데이터를 전송하는 경우 전체 소스 주소와 대상을 포함하는 독립적인 정보 조각이며 가능한 경로로 전송될 수 있습니다. 따라서 목적지에 도달할 수 있는지 여부, 목적지에 도달하는 데 걸리는 시간, 콘텐츠의 무결성을 보장할 수 없습니다.

그래서 TCP는 UDP보다 연결을 설정하는 데 더 많은 시간이 걸립니다. UDP와 비교하여 TCP는 보안과 신뢰성이 더 높습니다.

TCP 프로토콜 전송 크기에는 제한이 없습니다. 일단 연결이 설정되면 양측 모두 특정 형식으로 많은 양의 데이터를 전송할 수 있지만 UDP는 크기 제한이 있어 신뢰할 수 없는 프로토콜이며 한 번에 64K를 초과할 수 없습니다. 시간

위 내용은 2020년 가장 일반적인 JAVA 면접 질문 요약(컬렉션)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jianshu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제