>  기사  >  Java  >  15가지 고급 Java 멀티스레딩 인터뷰 질문 및 답변

15가지 고급 Java 멀티스레딩 인터뷰 질문 및 답변

高洛峰
高洛峰원래의
2017-01-16 16:09:161696검색

Java 스레딩 인터뷰 질문

멀티스레딩과 동시성에 대한 질문은 Java 인터뷰에서 필수적인 부분입니다. 주식 투자 은행에서 프론트 오피스 정보 직책을 얻으려면 멀티스레딩에 대한 많은 질문을 준비해야 합니다. 멀티스레딩 및 동시성은 특히 전자 거래의 발전과 관련하여 투자 은행에서 매우 인기 있는 주제입니다. 그들은 면접관에게 혼란스러운 Java 스레딩 질문을 많이 합니다. 면접관은 단지 면접관이 Java 스레드 및 동시성에 대해 충분한 지식을 가지고 있는지 확인하기를 원할 뿐입니다. 왜냐하면 많은 지원자가 표면적인 부분만 긁기 때문입니다. 시장 직접 거래를 위한 대용량 및 저지연 전자 거래 시스템은 본질적으로 동시적입니다. 다음은 제가 다양한 시간과 장소에서 묻고 싶어하는 Java 스레딩 질문입니다. 나는 답을 제공하지는 않지만 가능할 때마다 단서를 제공하며 때로는 그 단서가 질문에 답하기에 충분할 때도 있습니다. Java 5 동시성 패키지를 참조하는 동시성 도구 및 동시 컬렉션에 관한 질문이 점점 늘어나고 있습니다. 이러한 문제 중에는 ThreadLocal, Blocking Queue, Counting Semaphore 및 ConcurrentHashMap이 더 많이 사용됩니다.


15가지 Java 멀티스레딩 면접 질문과 답변

1) 이제 T1, T2, T3 세 개의 스레드가 있습니다. T1이 실행된 후 T2가 실행되는지 어떻게 확인합니까? , T2가 실행된 후 Execute 후에 T3이 실행됩니까?

이 스레드 질문은 일반적으로 1차 면접이나 전화 인터뷰 단계에서 '가입' 방법에 익숙한지 테스트하기 위해 묻는 질문입니다. 이 멀티스레딩 문제는 비교적 간단하며 조인 메소드를 사용하여 구현할 수 있습니다.

2) Java의 동기화 블록에 비해 Lock 인터페이스의 장점은 무엇입니까? 여러 사용자가 읽을 수 있지만 한 명의 사용자만 쓸 수 있도록 허용하여 무결성을 유지하는 효율적인 캐시를 구현해야 합니다.

멀티 스레딩 및 동시 프로그래밍에서 잠금 인터페이스의 가장 큰 장점은 읽기 및 쓰기에 별도의 잠금을 제공하여 ConcurrentHashMap 및 조건부 차단과 같은 고성능 데이터 구조를 작성할 수 있다는 것입니다. Java 스레드 인터뷰 질문은 점점 더 면접관의 답변을 기반으로 하고 있습니다. 현재 전자 거래 터미널 구축을 위한 클라이언트 측 캐싱 및 거래 연결 공간에 많이 사용되고 있으므로 멀티 스레드 인터뷰를 시작하기 전에 Locks에 대해 읽어볼 것을 강력히 권장합니다.

3) Java에서 wait 메소드와 sleep 메소드의 차이점은 무엇입니까?

전화 면접에서 주로 나오는 자바 스레드 면접 질문입니다. 가장 큰 차이점은 wait는 기다리는 동안 잠금을 해제하는 반면, sleep은 항상 잠금을 유지한다는 것입니다. Wait는 일반적으로 스레드 간의 상호 작용에 사용되며 Sleep은 일반적으로 실행을 일시 중지하는 데 사용됩니다.

4) Java로 차단 대기열을 구현합니다.

많은 목적을 달성할 수 있는 비교적 어려운 멀티스레드 면접 질문입니다. 첫째, 응시자가 실제로 Java 스레드를 사용하여 프로그램을 작성할 수 있는지 테스트할 수 있으며, 둘째, 동시성 시나리오에 대한 응시자의 이해도를 테스트할 수 있으며 이를 기반으로 많은 질문을 할 수 있습니다. 그가 wait() 및 inform() 메서드를 사용하여 차단 대기열을 구현하는 경우 Java 5의 최신 동시성 클래스를 사용하여 다시 작성하도록 요청할 수 있습니다.

5) 생산자-소비자 문제를 해결하기 위해 Java로 코드를 작성합니다.

위의 질문과 매우 비슷하지만 이 질문은 좀 더 고전적인 질문인데, 인터뷰에서 가끔 다음과 같은 질문을 하기도 합니다. Java에서 생산자-소비자 문제를 해결하는 방법은 무엇입니까? 물론 차단 대기열을 사용하여 구현된 방법을 공유했습니다. 때때로 그들은 식사하는 철학자 문제를 어떻게 구현하는지 묻기도 합니다.

6) 교착상태를 일으키는 프로그램을 Java로 프로그래밍해 보세요. 어떻게 해결하시겠습니까?

이것은 제가 가장 좋아하는 Java 스레드 인터뷰 질문입니다. 멀티 스레드 동시 프로그램을 작성할 때 교착 상태 문제가 매우 일반적임에도 불구하고 많은 지원자가 교착 상태 없는 코드(교착 상태 없는 코드?) 를 작성하지 못해 어려움을 겪었기 때문입니다. N개의 리소스와 N개의 스레드가 있고 작업을 완료하려면 모든 리소스가 필요하다고 말하면 됩니다. 단순화를 위해 여기에서 n을 2로 바꿀 수 있습니다. 데이터가 클수록 문제가 더 복잡해 보입니다. Java에서 교착 상태 방지를 통해 교착 상태에 대한 자세한 정보를 얻으세요.

7) Java의 원자 연산이란 무엇입니까?

아주 간단한 Java 스레드 인터뷰 질문입니다. 다음 질문은 원자적 작업을 동기화해야 한다는 것입니다.

8) Java에서 휘발성의 핵심 역할은 무엇인가요? 그것을 사용하는 방법? Java의 동기화 메소드와 어떻게 다릅니까?

Java 5와 Java 메모리 모델이 변경되면서 휘발성 키워드를 기반으로 한 스레딩 문제가 점점 더 대중화되었습니다. 휘발성 변수가 동시 환경에서 가시성, 순서 및 일관성을 어떻게 보장하는지에 대한 질문에 대답할 준비가 되어 있어야 합니다.

9) 경쟁 조건이란 무엇입니까? 경쟁을 어떻게 식별하고 해결합니까?

멀티 스레드 인터뷰의 고급 단계에서 나타나는 질문입니다. 대부분의 면접관은 최근 직면한 경쟁 상황과 이를 어떻게 해결했는지에 대해 질문할 것입니다. 때때로 그들은 간단한 코드를 작성하고 코드에서 경쟁 조건을 감지할 수 있습니다. Java 경쟁 조건에 대한 이전 기사를 참조할 수 있습니다. 제 생각에는 이것은 최고의 Java 스레드 인터뷰 질문 중 하나입니다. 이는 경쟁 조건을 해결하거나 데이터 경합 또는 기타 경쟁 조건이 없는 코드 작성에 대한 후보자의 경험을 정확하게 감지할 수 있습니다(데이터 경합이 없는 이 문장은 번역하지 않음). 이 주제에 대한 최고의 책은 "Java의 동시성 사례"입니다.

10) 스레드 덤프를 어떻게 활용하나요? 스레드 덤프를 어떻게 분석하시겠습니까?

UNIX에서는 kill -3을 사용하면 스레드 덤프가 로그를 인쇄하고, Windows에서는 "CTRL+Break"를 사용할 수 있습니다. 매우 간단하고 전문적인 스레드 인터뷰 질문이지만, 그가 그것을 분석하는 방법을 묻는다면 까다롭습니다.

11) start() 메소드를 호출할 때 run() 메소드가 실행되는 이유는 무엇입니까? run() 메소드를 직접 호출할 수 없는 이유는 무엇입니까?

이것은 또 다른 매우 고전적인 Java 멀티스레딩 인터뷰 질문입니다. 이것은 내가 스레드 프로그램을 처음 작성하기 시작했을 때에도 혼란스러웠습니다. 요즘에는 전화 인터뷰나 초급~중급 Java 인터뷰의 첫 번째 라운드에서 이 질문을 자주 받습니다. 이 질문에 대한 대답은 다음과 같습니다. start() 메서드를 호출하면 새 스레드가 생성되고 run() 메서드에서 코드가 실행됩니다. 그러나 run() 메서드를 직접 호출하면 새 스레드가 생성되지 않으며 호출 스레드의 코드가 실행되지 않습니다. 자세한 내용은 이전 기사 "시작 방법과 실행 방법의 차이점"을 읽어보세요.

12) Java에서 차단된 스레드를 어떻게 깨울 수 있나요?

스레드와 블로킹에 관한 어려운 질문이고 해결 방법도 많습니다. IO 블록이 발생하면 스레드를 중단할 수 있는 방법이 없다고 생각합니다. wait(), sleep() 또는 Join()을 호출하여 스레드가 차단된 경우 InterruptedException을 발생시켜 스레드를 중단하고 깨울 수 있습니다. 나의 이전 기사 "Java에서 차단 방법을 처리하는 방법"에는 스레드 차단 처리에 대한 많은 정보가 있습니다.

13) Java에서 CycliBarriar와 CountdownLatch의 차이점은 무엇입니까?

이 스레드 질문은 주로 JDK5의 동시 패키지에 익숙한지 테스트하는 데 사용됩니다. 둘의 차이점은 CyclicBarrier는 통과한 장벽을 재사용할 수 있는 반면, CountdownLatch는 재사용할 수 없다는 것입니다.

14) 불변 객체란 무엇이며 동시 애플리케이션 작성에 어떻게 도움이 됩니까?

스레드와 직접적인 관련은 없지만 간접적으로 많은 도움이 되는 또 다른 고전적인 멀티스레딩 면접 질문입니다. 이 Java 인터뷰 질문은 그가 당신에게 불변 객체를 작성하라고 요청하거나 왜 String이 불변인지 묻는다면 매우 까다로울 수 있습니다.

15) 멀티스레드 환경에서 직면하는 일반적인 문제는 무엇입니까? 어떻게 해결하셨나요?

메모리 인터페이스, 경쟁 조건, 교착 상태, 라이브락 및 기아 상태는 멀티 스레드 및 동시 프로그램에서 흔히 발생합니다. 문제는 끝이 없고, 잘못되면 찾아서 디버깅하기가 어려울 것입니다. 이는 대부분 인터뷰 기반이며 실제 애플리케이션 기반 Java 스레딩 질문이 아닙니다.

몇 가지 추가 질문:

1) Java에서 녹색 스레드와 로컬 스레드의 차이점은 무엇입니까?

2) 스레드와 프로세스의 차이점은 무엇인가요?

3) 멀티스레딩에서 컨텍스트 전환이란 무엇인가요?

4) 교착상태와 라이브록의 차이, 교착상태와 파이의 차이는 무엇인가요?

5) Java에서 사용되는 스레드 스케줄링 알고리즘은 무엇입니까?

6) Java의 스레드 스케줄링이란 무엇입니까?

7) 스레드에서 포착할 수 없는 예외를 어떻게 처리하나요?

8) 스레드 그룹이란 무엇이며 Java에서 권장되지 않는 이유는 무엇입니까?

9) 스레드를 생성하고 관리하기 위해 애플리케이션을 사용하는 것보다 Executor 프레임워크를 사용하는 것이 더 나은 이유는 무엇입니까?

10) Java에서 Executor와 Executor의 차이점은 무엇인가요?

11) Windows 및 Linux에서 가장 많은 CPU 시간을 사용하는 스레드를 찾는 방법은 무엇입니까?

15가지 고급 Java 멀티스레딩 인터뷰 질문과 답변을 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.