Java 스레드 인터뷰 질문
멀티스레딩 및 동시성에 대한 질문은 Java 인터뷰의 필수 부분입니다. 주식 투자 은행에서 프론트 오피스 정보 직책을 얻으려면 멀티스레딩에 대한 많은 질문을 준비해야 합니다. 멀티스레딩 및 동시성은 특히 전자 거래의 발전과 관련하여 투자 은행에서 매우 인기 있는 주제입니다. 그들은 면접관에게 혼란스러운 Java 스레딩 질문을 많이 합니다. 면접관은 단지 면접관이 Java 스레드 및 동시성에 대해 충분한 지식을 가지고 있는지 확인하기를 원할 뿐입니다. 왜냐하면 많은 지원자가 표면적인 부분만 긁기 때문입니다. 시장 직접 거래를 위한 대용량 및 저지연 전자 거래 시스템은 본질적으로 동시적입니다. 다음은 제가 다른 시간, 다른 장소에서 묻고 싶어하는 Java 스레딩 질문입니다. 나는 답을 제공하지는 않지만 가능할 때마다 단서를 제공하며 때로는 그 단서가 질문에 답하기에 충분할 때도 있습니다. Java 5 동시성 패키지를 참조하는 동시성 도구 및 동시 컬렉션에 관한 질문이 점점 늘어나고 있습니다. 이러한 문제 중에는 ThreadLocal, Blocking Queue, Counting Semaphore 및 ConcurrentHashMap이 더 많이 사용됩니다.
15가지 Java 멀티스레딩 인터뷰 질문과 답변
1) 이제 T1, T2, T3 세 개의 스레드가 있습니다. T1이 실행된 후에 T2가 실행되고 T2가 실행된 후에 T3이 실행되도록 하려면 어떻게 해야 합니까?
이 스레드 질문은 일반적으로 1차 면접 단계나 전화 인터뷰 단계에서 '가입' 방법에 익숙한지 테스트하기 위해 묻는 질문입니다. 이 멀티스레딩 문제는 비교적 간단하며 조인 메소드를 사용하여 구현할 수 있습니다.
2) Java의 동기화된 블록에 비해 Lock 인터페이스의 장점은 무엇입니까? 여러 사용자가 읽을 수 있지만 한 명의 사용자만 쓸 수 있도록 하여 무결성을 유지하는 효율적인 캐시를 구현해야 합니다.
멀티 스레드 및 동시 프로그래밍에서 잠금 인터페이스의 가장 큰 장점은 읽기 및 쓰기에 별도의 잠금을 제공하여 ConcurrentHashMap 및 조건부 차단과 같은 고성능 데이터 구조를 작성할 수 있다는 것입니다. Java 스레드 인터뷰 질문은 점점 더 면접관의 답변을 기반으로 하고 있습니다. 현재 전자 거래 터미널 구축을 위한 클라이언트 측 캐싱 및 거래 연결 공간에 많이 사용되고 있으므로 멀티 스레드 인터뷰를 시작하기 전에 Locks에 대해 읽어볼 것을 강력히 권장합니다.
3) Java의 대기 메소드와 절전 메소드의 차이점은 무엇입니까?
전화 인터뷰에서 일반적으로 묻는 Java 스레드 인터뷰 질문입니다. 가장 큰 차이점은 wait는 기다리는 동안 잠금을 해제하는 반면, sleep은 항상 잠금을 유지한다는 것입니다. Wait는 일반적으로 스레드 간의 상호 작용에 사용되며 Sleep은 일반적으로 실행을 일시 중지하는 데 사용됩니다.
4) Java를 사용하여 차단 대기열을 구현합니다.
이것은 많은 목적을 달성하는 상대적으로 어려운 멀티 스레드 인터뷰 질문입니다. 첫째, 응시자가 실제로 Java 스레드를 사용하여 프로그램을 작성할 수 있는지 테스트할 수 있으며, 둘째, 동시성 시나리오에 대한 응시자의 이해도를 테스트할 수 있으며 이를 기반으로 많은 질문을 할 수 있습니다. 그가 wait() 및 inform() 메서드를 사용하여 차단 대기열을 구현하는 경우 Java 5의 최신 동시성 클래스를 사용하여 다시 작성하도록 요청할 수 있습니다.
5) 생산자-소비자 문제를 해결하기 위해 Java로 코드를 작성합니다.
위의 질문과 매우 유사하지만 이 질문이 더 고전적인 경우가 있습니다. 인터뷰에서는 다음과 같은 질문을 하기도 합니다. Java에서 생산자-소비자 문제를 해결하는 방법은 무엇입니까? 물론 차단 대기열을 사용하는 방법을 공유했습니다. 때때로 그들은 식사하는 철학자 문제를 어떻게 구현하는지 묻기도 합니다.
6) 교착상태를 일으키는 프로그램을 자바로 프로그래밍한다면, 어떻게 해결할 것인가?
이것은 제가 가장 좋아하는 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에서 실행자와 실행자의 차이점은 무엇입니까?
11) Windows 및 Linux에서 가장 많은 CPU 시간을 사용하는 스레드를 찾는 방법은 무엇입니까?