이게 나인가요, 아니면 당황스러운 기술 인터뷰 질문입니까? [닫은]


153

배경

방금 기술 인터뷰에서 A가 B와 같고 B가 C와 같고 A가 C와 같은 "객체"를 통과하는 알고리즘을 작성하라는 요청을 받았습니다.

그게 다야. 그것이 제가받은 모든 정보입니다.

나는 면접관에게 목표가 무엇인지 물었지만, 목표는 없었으며, 단지 "개체"를 통과했다.

나는 다른 사람에 대해 모른다. 그러나 이것은 나에게 바보 같은 질문처럼 보인다. "값을 찾고 있습니까?"라고 다시 물었습니다. 아니. 그냥 "이동"하십시오.

왜이 "객체"를 끝없이 반복하고 싶습니까? 프로세서를 녹이려면 ??

대답은 면접관에 따라 내가 재귀 함수를 작성해야이었다.

그렇다면 왜 재귀 함수를 작성하도록 요청하지 않겠습니까? 그리고 결코 끝나지 않는 재귀 함수를 누가 작성할 것입니까?

내 질문:

이 질문은 나머지 사람들에게 유효한 질문입니까? 그렇다면, 내가 잃어버린 부분에 대한 힌트를 줄 수 있습니까? 아마도 나는 실제 문제를 해결하기 위해 너무 열심히 생각하고 있습니다. 나는 오랫동안 성공적으로 코딩을 해왔지만이 기술 인터뷰 프로세스는 내가 아무것도 모른다고 느끼게합니다.


197
여기서 정답은 "질문을 이해하지 못합니다"입니다.
user16764

16
글쎄, 만약 그들이 A, B, C가 무엇인지 말하지 않고 (예를 들어-그들은 객체와 같음) 객체를 따옴표로 묶으면, 그들은 독특한 용어가있는 것처럼 보입니다. 그들은 객체 통과하는 방법을 묻는다면 그래프 객체 A는 경우 참조가 B 객체를 참조하는 오브젝트 C 참조 가 이해할 수 있었다했을 객체하지만 재귀하는 이유는 모르겠어요. 그런데 이미 방문한 개체의 목록을 유지 관리한다면 무한 할 필요는 없습니다. 그러나 예, 그 테스트를 사용하는 회사에서 일하는 것에 대해 걱정할 것입니다. 혼란스러워 보입니다.
psr

77
설명 된 질문은 무의미하며 대답도 마찬가지입니다. 그들이 요청한 것을 잘못 기억하고 있거나 요청하는 사람은 바보이며 아마도 그와 함께 일하지 않는 것이 좋습니다.
메이슨 휠러

26
개발자 인터뷰는 왜 고통 스러운가? 우리 모두 앉아서 서로의 코드를보고 토론 할 수는 없습니까? 개발자는이 작업을 수행하여 다른 개발자의 위치를 ​​알 수 있으며 6 시간이 걸리지 않습니다. 코드 테스트가 최악입니다. 나는 입력하는 동안 나를 만난 적이없는 3 명의 개발자가 최적의 솔루션을 제공하는 데 어려움을 겪고 있음을 인정하지 않습니다.
Erik Reppen

19
인터뷰 한 동료가 "상세 지향적입니까?"라고 물었던 직장에서 짧은 시간 동안 일했기 때문에 프로필이 나와 같은 지역에 살았는지 확인해야했습니다. 내가 대답 한 "더 구체적이 될 수 있습니까?" 그리고 그의 대답은 "나는 그것을 설명 할 수 없지만 나는 그들의 일을 볼 때 세부적인 사람을 알고있다"고 말했다. 애매 모호함.
Jesse C. Slicer

답변:


305

당황스럽고 잘못된 인터뷰 질문입니다. 면접관은 자신이 찾고있는 것이 무엇인지 명확하게 설명 할 수 없었으며 문제의 진술을 명확하게하기위한 적절한 시도에 대해 의미있는 반응을 보지 않고 자신의 생각을 읽을 것을 기대했습니다. 당신이 직업을 얻지 못해서 운이 좋다고 생각하십시오.

일반적인 "객체"에서 작동하는 동사 "트래버스"의 의미는 모호합니다. 단어 객체에 대해 다양한 명사를 대용하기 시작하면 객체의 순회가 객체 인 사물의 우주의 작은 부분 집합에 대해서만 의미가 있다는 것이 명백해집니다.

"이진 트리"의 노드를 "이동"하는 것이 좋습니다. "광대"를 "이동"하는 것은 이치에 맞지 않습니다. 그러나 객체는 "이진 트리"를 나타내는 것처럼 "클라우드"를 쉽게 나타낼 수 있습니다.


9
최근 바보 같은 질문에 나오는 명사를 "clown"+1 선생님으로 바꾸는 연습을 시작했습니다!
rupjones

108
"Clown traversal"- "어리석은 기술적 인 질문"에 대한 훌륭한 밈. 그것을 통과!
radarbob

8
흠, 내가 VAR 광대를 통과 할 수 = {모자 : "꽃"머리 "밝은 빨간색"코 "빨간 공"입 "흰색 프레임 레드 입", ...};)
mplungjan

37
이론적 CS 연구의 전체 영역은 반복적 인 광대 탐색과 관련이 있습니다.

6
@JackManey : 광대는 재귀 적 으로 횡단해야한다는 것을 누구나 알고 있습니다 .
Adam Robinson

39

여기서 세 가지 가능성을 볼 수 있습니다.

  1. 그녀는 완전히 무능했다. 더 이상 할 말이 없습니다.
  2. 그녀는 의도적으로 모호하게 만들었고, 당신이 무엇을해야하는지, 그리고 그녀가 실제로 무엇을했는지 알아 내기 위해 질문을 얼마나 잘하는지 알기 위해 노력했습니다.
  3. 어떤 이유로 든, 그녀는 당신이 당신을 고용하지 않기로 결정했기 때문에 그녀는 주어진대로 대답 할 수없는 질문을했습니다. 그녀가 당신의 기술에 대해 물었을 때, 그녀는 그 부분을 건너 뛰고 같은 것을 말할 것입니다 : "나는 세 개의 노드 그래프를 탐색하는 방법에 대해 물었다을, 그는되었다 완전히 난처한 상황에 빠진 - 방법도 단서가 없었어요 분명히 그는입니다. 시작 심하게 무능! 우리는 심지어 그를 고용 고려해서는 안된다. "

7
"3 노드 그래프를 통과하는 방법에 대해 그에게 물었습니다."OP 게시물이 수정되면 그래프 나 노드에 대한 언급이 없습니다. 그냥 "개체". 이것은 "거짓 증언"의 한 형태입니다. 그녀가 이런 것을 쓰면 기소 될 수있다!
Emilio Garavaglia

9
일반적으로 사람의 성별이 언급되지 않은 경우 여성 대명사를 사용합니까?
Chan Chan Ho

8
@EmilioGaravaglia : 우선, 그것은 결코 쓰여지지 않을 것입니다. 두 번째로, 그것이 내려 졌다고 가정하더라도, 당신은 의심 할 여지없이, "우리는 당신에게 알려 드리게되어 유감입니다 ..."라는 편지에 절대 접근 할 수 없습니다. 셋째, 면담 기록이 없다면 면접관이 진실을 말하지 않았다는 것을 어떻게 증명할 수 있습니까? 결론 : 이론적으로는 옳 아야하지만 실제로는 거의 기회가 없습니다.
Jerry Coffin

11
@ Chan-HoSuh : OP는 그의 의견 중 하나에서 성별을 언급합니다.
Jerry Coffin

4
@JerryCoffin 그렇다면 사과드립니다.
찬찬 호

32

이것은 추측에 불과하지만 면접관이 포인터 참조에 대해 이야기하고 있다고 가정하면 트릭 질문입니다. 모든 참조가 동일한 객체를 가리 키기 때문에 통과 할 것이 없습니다.

재귀 함수? 그것은 나무를 가로 지르기위한 것입니다. 나는 원래 질문에서 그가 나무에 대해 이야기하고 있음을 암시하는 것을 보지 못했습니다.


28
어서 더 나은 회사가 있습니다.
shufler

7
아냐 잃어버린 원인입니다. 면접관이 자신이 틀렸다고 생각하면 처음에는 그 질문을하지 않았을 것입니다. 한 번은 내가 원하는 언어로 샘플을 작성하라는 요청을 받았습니다. 인터뷰 한 사람은 의사 코드 가 올바른 선택 이라고 가정했습니다 .
Robert Harvey

8
@Robert Harvey : 의사 코드의 문제점은 무엇입니까?
James

6
@ 로버트 하비 : 대부분의 사람들이 원하는 것은 공정한 언어의 구문을 배웠는지 알아 내지 못하도록 문제를 해결하는 방법을 알아내는 것입니다. 의사 코드로 알고리즘을 지정하는 것이 일반적입니다.
James

8
의사 코드와 파이썬의 차이점은 무엇입니까? :)
David Robinson

15

이 특정 면접관을 위해 말할 수는 없지만 프론트 엔드 개발자 위치 면담에서 비슷한 질문을 보았으므로이 예제에서 사용할 언어는 JavaScript입니다.

주어진:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

일반적인 잘못된 응답은 첫 번째 수준 만 "순회"하고 인쇄 / 비교할 수 있습니다.

'value1'
2
[Object object]

따라서 모든 수준을 통과하는 재귀 예제를 코딩하는 동안 다음과 같은 것을 언급합니다.

  • 순환 참조 처리
  • 배열을 처리하는 방법 (재귀 적으로 순회해야합니까?)
  • 함수를 평가하고 반환 값을 처리해야합니까?
  • JavaScript의 경우 : 프로토 타입이 일치해야하고 상속 된 속성도 비교해야합니까?

그래서 면접관이 생각한 "솔루션"은 재귀, 포인터 / 참조, 기대 등과 같은 많은 고급 주제가있는 겉보기 간단한 질문으로 대화를 시작하는 것이 었습니다.


5
WSKid, 그런 식으로 말입니다. 불행히도, 그 맥락 중 어느 것도 제공되지 않았습니다.
Matt Cashatt

3
사실, 이것은 실제로 빨대를 잡고 있습니다. 유스 케이스 또는 예제 3 오브젝트 또는 실제 문제점을 주도 할 수있는 것을 제시해야합니다.
WSkid

1
파이썬 객체 속성에 대해서만 동일하게 생각했습니다. 그들이 어떤 질문에 대한 답변을 기대했는지 아는 것은 큰 도움이되었지만, 그것은 파이썬 개발자, C # 개발자, 자바 스크립트 개발자, PHP 개발자 등의 입장에서 예상 될 수 있습니다.
Ken

2
질문이 의미가있는 맥락을 찾기위한 +1!
Donal Fellows

9

일부 면접관은 구체적으로 후보자가 다음 두 가지 답변 중 하나를 제공 할만큼 똑똑하고 정직한 지 확인하기 위해 질문을합니다.

모르겠어요

또는 아마도 :

명시된대로 대답 할 수 없습니다.

그들은 순수한 BS를 사양으로 받아들이고 고용주의 시간을 낭비하고 그것을 이행하려고 노력하는 후보자를 원하지 않습니다.


6
우리의 삶 전체는이 인터뷰와 같은 시나리오에서 질문에 대한 답변을 제공 할 수 있도록 조정되었습니다. "나도 몰랐다"라는 말을 받아 들일 수 있다면, 미리 말씀 드렸어야했다. 면접 질문에 대한 답변을 선의로 시도한다고해서 부적절한 사양이나 요구 사항을 어떻게 처리해야 하는가에 대한 것은 아닙니다. 저는 이것이 요점이라고 생각합니다. 이러한 인터뷰는 진로를 벗어 났으며 많은 경우에 요점을 놓치고 있습니다.
Matt Cashatt

좋은 대답입니다. 그러나 이것을 말할 수 있으려면 많은 경험이 필요하다는 것을 잊지 마십시오. 개인적으로, 인터뷰 경험이 업무의 중요한 부분이라고 말할 수 있습니다. @MatthewPatrickCashatt 면접관이 "모름"을 받아들이지 않으면 IMO에 대해 자세히 설명하지 않습니다.
arin

2
속임수 문제는 트롤링이나 무능함입니다. 면접관이 트릭 질문을하면 어느 쪽이든 일하고 싶지 않습니다.
벤 Brocka

7

이것은 순환 연결 목록에 관한 (잘못 표현 된) 질문 인 것 같습니다. 나는 그것이 의미하는 것이 냐고 물었을 것이다.

이것이 링크 된 목록 질문 인 경우, (이 경우) 엔드 노드가 다른 쪽 끝을 가리키는 단일 링크 된 목록이 있습니다 (단, 말한대로 말하더라도-A가 가리키는 경우 이중 연결 될 수 있음) B와 C-면접관의 설명이 도움이 될 것입니다).

A-> B-> C-> A

또한 (항상 이런 일이 발생합니다) 면접관은이 질문을 읽고 '좋은'질문이라고 생각했지만 실제로 답 자체를 알지 못했습니다 (또는 그 의미).


1
감사합니다 Maich-- 최종 요점이 가장 가능성이 높습니다.
Matt Cashatt

5

여기에서 해결해야 할 과제 중 하나는 트리 구조가 있고 트래버 설을 수행하는 데 포함되는 구성 요소가 무엇인지 확인하기 위해 특정 질문을함으로써 더 자세한 정보를 얻는 것입니다. 나무 이외의 다른 데이터 구조는 많지 않지만 내 마음에 약간의 도약이라는 가정이있을 수 있습니다.


1
감사합니다 JB King. 질문을하는 것이 좋습니다. 이 특별한 경우에 나는했다. 사실, 나는 그것이 나무인지 물었고 대답은 '아니오'였습니다! 그러나 질문을함으로써 가능한 많은 정보를 증류하는 것이 나의 책임이라는 점을 잘 알고 있습니다.
Matt Cashatt

3

그들은 당신이 이상한 문제를 어떻게 다루는 지 알아 내려고 할 수도 있습니다. 그러나이 경우 "기술 인터뷰"와 관련이 없습니다. 심리적 인터뷰처럼 보입니다.


5
소프트웨어 프로젝트에 대한 기술 사양 중 하나의 예를보고 싶습니다.
척 D

인터뷰가 시스템 분석가 또는 유사한 직책에 대한 것이라면, 이것은 전적으로 적절합니다. 귀하의 임무는 고객이 질문에 대답하기보다는 질문을 명확하게하는 것입니다.
reinierpost

1
@ reinierpost-- 그렇지 않았습니다.
Matt Cashatt

3

A가 B와 같고 B가 C와 같고 A가 C와 같은 "객체"를 가로 지르는 알고리즘을 작성하십시오.

대부분의 사람들은 A, B 및 C가 포인터라고 가정하지만 마치 쉽게 광대가 될 수 있습니다. (또는 광대 클래스의 구성원) 또는 그들은 광대 이름 일 수 있습니다. (또는 클래스 이름. 또는 광대 클래스의 서브 클래스.)

나는 표를 돌려서 이것이 일반적으로 개발 사양을 준비하는 방법인지 물었고, 개발 요구 사항 사양 단계에서 어떻게 도울 수 있는지 말해 줄 것입니다. 기대치에 대한 의사 소통이 불량하면 업무 성과가 떨어집니다. 그들은 그것을 얻거나 얻지 못했을 것입니다.


2

질문이 잘못되고 면접관이 방향을 제시하는 데 분명히 도움이되지 않았지만, 요청 된 내용에 대해 약간 다른 의견을 가지고 있습니다.

인터뷰자는 어떤 유형의 반사를 사용하여 객체 구조를 통과하는 솔루션을 찾고 있다고 생각합니다. 세 객체가 동일하다는 정보는 객체 동일성 비교 (A == B는 객체가 실제로 메모리에서 동일한 객체임을 의미 함) 또는 객체 동일성 비교 (A == B는 객체의 값이 똑같다).

면접관이 대답이 "재귀 적"기능이라고 말한 사실은 아마도 깊고 얕은 복사 및 비교에 대한 논의가 예상됨을 나타냅니다.


2

이 파티에 늦게 왔는데 인터뷰 담당자가이 질문에 잘못 질문 한 것 같습니다.

배열 을 순회하는 알고리즘을 작성하고 A가 B와 같고 B가 C와 같고 A가 C와 같은 순서로 결정합니다.

그렇다면 정답은 재귀 알고리즘입니다.


1

방금 기술 인터뷰에서 A가 B와 같고 B가 C와 같고 A가 C와 같은 "객체"를 통과하는 알고리즘을 작성하라는 요청을 받았습니다.

object문제는 부품으로 구성되어 있습니다 A,B and C, 그리고 그것은을 형성한다 triangle. 사람은 단순히 객체 (컬렉션)에 모두 동일한 부분이 있는지 묻습니다.

면접관은 A, B and C무한 루프에 빠지지 않고 부품 이 모두 같은지 알 수 있는 부품이 있는지 알고 싶어합니다 . 이 질문은 어리석게도 이해하기 쉽고 어리석은 질문을 계속했습니다.

그것들은 모두 같은 시간 A == B && B == C && A == C이지만, 그것은 간단하게 단순화 될 수 있습니다 A == B && A == C.

질문의 단순성으로 인해 혼란스러워졌으며 실제로 잘못 표현되었습니다.

올바른 표현이되어야합니다.

컬렉션의 각 부분이 서로 같은지 확인하는 알고리즘을 작성하십시오. 무한 루프에 빠지지 않도록주의해야합니다. 예를 들어; 부분 A가 B와 같고 B가 C와 같고 A가 C와 같으면 문제가 발생할 수 있습니다.


면접관에 따르면 정답은 재귀 함수를 작성해야한다는 것이 었습니다.

예, are all my parts equal재귀 함수를 사용 하여 질문에 대답 할 수 있습니다 . 아니요, 이것은 효율적인 솔루션이 아닙니다.

편집 : 몇 가지 생각 후. 아니요 재귀 함수를 사용하여 컬렉션에 모든 동일한 부분이 포함되어 있는지 확인할 수는 없습니다.

가장 효율적인 솔루션은 다음과 같습니다.

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

이 문제는 프로그래밍에서 발생하며 컬렉션을 테스트하기 위해 알고리즘을 작성하도록 요청하는 것은 완벽하게 정상입니다. 프로그래밍 언어에 따라이 문제는 종종 한 줄의 코드로 해결할 수 있습니다.

그들이 한 것처럼 말하고 오답을 기대하는 것은 정상이 아닙니다. 이 질문은 1 년 전에 요청 된 이후입니다. 나는 당신이 다른 곳에서 일하게되기를 진심으로 바랍니다. 나는 원래 게시물에서 그 / 그녀의 결과가 어떻게 나오는지 듣고 싶습니다.


2
그 회사에서 할 수있는 한 빨리 뛰어나고 행복해졌습니다.
Matt Cashatt

0

Java 인터뷰 질문 인 경우 "hashcode"와 "equals"를 재정 의하여 기술을 테스트하고 싶을 수 있습니다.

A와 A를 비교할 때이 두 가지 방법을 재정의하고 재정의 된 equals 방법을 사용하여 재귀를 중지해야합니다.

재정의하지 않고 "객체"A에서 B로, A에서 C로, A에서 A 로의 비교는 모두 결과가되지만 재정의 후에는 객체 A와 비교 한 객체 A가 다른 비교에서 거짓을 반환하는 경우에만 true를 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.