Java 동시성에 관한 이러한 고급 / 부당한 인터뷰 질문이 있습니까? [닫은]


12

최근에 인터뷰 대상자에게 Java 동시성을 알고 있다고 말하는 몇 가지 질문이 있습니다.

  1. "메모리 가시성"의 위험성을 설명하십시오. JVM이 모니터에 의해 보호되지 않고 선언되지 않은 변수에 대한 특정 작업의 순서를 재정렬 volatile하여 하나의 스레드가 다른 스레드의 변경 사항을 볼 수 없도록하는 방법을 설명합니다. 일반적으로 나는이 위험이 존재하는 코드 (예 : NoVisibilityGoetz 등의 "Java Concurrency in Practice"의 목록 3.1에 있는 예제)를 보여주고 무엇이 잘못된지를 묻는 것으로이 질문을한다.
  2. volatile선언 된 실제 변수 volatile뿐만 아니라 변수가 변경되기 전에 스레드에 의해 작성된 변수의 변경에도 어떤 영향을 미치는지 설명 volatile하십시오.
  3. volatile대신에 사용할 수 synchronized있습니까?
  4. wait()및 로 조건 변수를 구현하십시오 notifyAll(). 왜 사용해야하는지 설명하십시오 notifyAll(). 조건 변수를 while루프 로 테스트해야하는 이유를 설명하십시오 .

내 질문은-Java 동시성을 알고 있다고 말하는 사람에게 물어보기에 적절하거나 너무 고급입니까?

그리고 우리가 그것을하고있는 동안, Java 동시성에서 일하는 누군가가 Java 가비지 수집에 대한 평균 이상의 지식을 가지고 있어야한다고 생각하십니까?


4
내가 걱정할 유일한 것은 "기술"보다는 "암기 된 사실"의 잡초에 빠지지 않는 것입니다.
tylerl

5
이러한 질문은 높은 수준의 동시성이 필요한 Java 위치에 고용 된 사람에게는 완벽하게 합리적입니다.
Rig

2
동시 개발이 필요한 직책을 채용하는 경우 이는 시작에 불과합니다. 그러나 누군가 notifyAll()"OS 스케줄러의 작업을 믿지 않기 때문에 notify()"
kdgregory

2
또한 :-) JUC 잠금, 데이터 구조, 스레드 풀 및 안전하지 않은에 대한 Q의를 추가 할 것
마티 Verburg

2
다른 사람들은 질문의 복잡성에 대해 이야기했습니다. 그들이 프로젝트와 관련이 있다고 가정하고, 더 간단한 질문으로 그들을 이끌어 내고 후보자가 심도를 벗어난 것이 분명 해지면이 질문 라인을 포기하십시오-시간과 당신의 낭비이며 에너지를 망칩니다. 인터뷰의. 그들이 대답 할 수없는 질문에 대해서는 아무 소용이 없습니다. 다른 주제에 대해 비슷한 깊이로 나아갈 수 있도록 준비하십시오. 여기 누군가가 약하다고해서 그들이 다른 강점을 통해 자신을 입증 할 수있는 능력이 없다는 것을 의미하지는 않습니다.
Sean McSomething

답변:


11

2 년의 Java 경험이 있거나 7 년의 Java 경험이있는 응시자를 요청하는지에 따라 달라집니다. 건축가 / 기술 리드 / 시니어에게는 적절한 질문처럼 보이지만 후배와 중급에게는 다소 어려운 것처럼 보입니다.

또한 java.util.concurrent현재의 Java 개발에서 주로 대체 된 저수준 동기화 메커니즘에 대해 질문하고 있습니다 . wait()/notify() 자물쇠 대신 선호합니다. Effective Java 2nd Edition 은 대기 / 알림 메커니즘이 유용하지 않은 것으로 설명되어있는 장을 삭제 했음을 알 수 있습니다 . 또한 컨테이너는 대부분의 경우 멀티 스레딩을 더 높은 수준에서 처리합니다. EJB의 메소드는 예를 들어 프로그래머의 염려없이 스레드로부터 안전합니다 (이것이 프로그래머가 멀티 스레딩을 알아야한다는 것을 의미하지는 않습니다).

실제로 멀티 스레딩은 프로그래밍 언어의 하위 부분이 아닌 운영 체제의 하위 부분입니다. 사람이 뮤텍스, 세마포어 또는 스케줄링에 대한 멀티 스레딩 및 병렬 프로그래밍 질문을 진정으로 이해하는지 여부를 확인하려면 먼저 특정 프로그래밍 언어에서의 구현에 대한 세부 사항을 요청해야합니다.


2
wait () 및 notify () 주석에 +1-동시성에 정통한 개발자는이 공간에서 Java 기능의 역사와 진화를 알 수 있습니다 (Java 7의 F & J까지).
Martijn Verburg

@ M3th : 내가이 질문을 한 마지막 사람은 Java 경험이 10 년이고 동시 프로그래밍을 알고 있다고 주장했습니다. 게시 주셔서 감사합니다 lock대는 wait/notify- 나는에 대해 알고 lock게츠 책에서하지만 지금은 옛날 방식보다 선호했다 몰랐어요. 이 수준의 경험을 가진 사람은 이전 접근법을 알고 있어야하지만 @Martijn에 동의합니다. 어쨌든 나는 다시 질문을 의미하지는 않지만 (예 : 이미 답변으로 표시 한 이후 :-)) 10 년의 경험을 가진 사람이 그 질문에 대답 할 수 있어야한다고 생각합니까?
sparc_spread 3

1
@Martijn Verburg 나는 당신 둘 다에 동의합니다; 좋은 Java 개발자 (특히 동시성을 알고있는 개발자)는 wait () / notify () 사용법을 알아야합니다. 적어도 그들이 Object 클래스에 나타나는 이유에 대한 호기심에 대해.
m3th0dman

1
@sparc_spread 이력서에서 Java 동시성이 해당 응답을 알고 있어야한다는 사실을 명시 적으로 나타내는 프로그래머 (최소 3 자 이상). 내가 말했듯이 경험 수준과 관련하여 건축가 / 기술 리드 \ 수석 개발자라고 주장하고 5 개 이상의 Java 경험 (JSP 및 MVC 프레임 워크가 아닌 백엔드)을 보유한 프로그래머는 imo를 알아야합니다. lockvs 와 관련하여 wait/notify실제로 저수준 기능이 필요한 경우 잠금이 선호되지만 대부분의 경우 고수준 대안이 제공됩니다. BlockingQueue는 특히 유용한 것입니다.
m3th0dman

14

Java 동시성을 알고 있다고 말하는 사람에게 물어보기에 적절하거나 너무 고급입니까?

나는 그들이 비교적 고급 질문이라고 말하고 싶습니다. 그러나 그들은 속임수 질문이 아니라는 점에서 "불공평"하지 않습니다.

실제로 "공정성"은 실제로 관련 기준이 아닙니다. 당신이 (면접관으로서) 걱정해야 할 것은 질문과 답변에 대한 해석이 당신이 인터뷰하고있는 직위 또는 직책에 가장 적합한 후보자를 선택하는지 여부입니다. (또는 다른 방법으로, 당신은 그들이 "정확하게"이 질문에 대답하지 않기 때문에 실제로 더 많은 고려 를해야하는 후보자를 거부하고 있습니까?)

그리고 우리가 그것을하고있는 동안, Java 동시성에서 일하는 누군가가 Java 가비지 수집에 대한 평균 이상의 지식을 가지고 있어야한다고 생각하십니까?

다시 말하지만, 그것은 실제로 관련된 질문이 아닙니다. 당신이 자신을 요구해야한다 질문은 당신이 여부 필요한 자바 가비지 컬렉션의 좋은 지식을 가진 사람을.


이 답변에 대단히 감사합니다. 나는 둘 다 답으로 표시 할 수 있었으면 좋겠다. 도와 주셔서 감사합니다.
sparc_spread 3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.