응시자가 링크리스트 구현을 작성하도록하는 것은 나쁜 인터뷰 관행입니까? [닫은]


43

이 사이트와 SO를 읽으면 응시자가 링크 된 목록을 처음부터 구현해야한다는 인터뷰 질문과 답변에 대한 많은 이야기를 보았습니다. 일반적으로 이것은 FizzBuzz 작성과 같은 역할 후보자를 프로그래밍하기위한 "gimme"연습입니다. 아이디어는 응시자가이 작업을 수행 할 수 없으면 프로그래밍 할 수 없으며 거의 ​​즉시 거부해야한다는 것입니다.

그러나 나는 도움이 될 수 없지만 다음과 같은 이유로 이것이 나쁜 습관 일 수 있다고 생각합니다.

  • C # 및 Python과 같은 최신 고급 언어는 기본적으로 목록을 광범위하게 사용합니다. 자신 만의 링크 된리스트 객체를 작성하는 것은 비정상적인 상황에서만 필요하며 심지어는 어쩌면 좋지 않은 조언 일 수도 있습니다.
  • C ++과 같은 저급 언어에는 반복자 / 목록 컨테이너 및 객체가있는 표준 라이브러리가 있습니다.
  • 처음 두 가지 요점에 비추어 코더는 목록 (연결, 이중 연결 등) 자체를 구현하지 않아도 몇 년이 걸릴 수 있습니다. 일부는 심지어 대학 시절 이후 그러한 것들을 실제로 보지 못할 수도 있습니다.
  • 컴퓨팅 파워도 수년 전의 요소가 아니기 때문에 포인터를 통한 효율성은 일반적인 문제가 아닙니다.
  • "linked list example"과 같은 간단한 웹 검색은 신청자의 진정한 능력을 나타내지 않고 단지 암기하고 다시 뱉어 낼 수있는 많은 코드 예제를 불러옵니다.

링크 된 목록을 사용하여 개방형 질문 / 후보자의 문제 해결 / 비판적 사고 능력에 대한 토론 을 이끌어내는 것이 실제로 좋은 면접 관행이라고 생각합니다. 면접관이 실제로 신청자가 어떤지, 그들이 어떻게 도움이된다고 생각하는지 알 수 있습니다.

데스크톱 또는 웹 응용 프로그램에서 작업하는 프로그래머를위한 "연결된 목록 코드, 작업 없음"이라는 이진 방식은 다소 구식이라고 생각합니다. 또한 매우 해로울 수 있습니다. 목록의 헤드와 올바르게 작업하는 방법을 기억할 수없는 후보자는 그렇지 않으면 뛰어난 코더 및 동료가 될 수 있으며 믹스에서 길을 잃을 수 있습니다. 생각?

편집 : 이것이 좋은 질문인지 나쁜 질문인지는 작업의 맥락에 달려 있다고 제안하는 많은 (좋은) 의견이 있습니다. 동의합니다.이 질문을 다시 말하겠습니다. 연결 목록 구현은 FizzBuzz와 같은 질문이나 계승 계산을위한 재귀 함수 작성과 유사한 광범위한 코딩 작업에 대한 일반적인 인터뷰 질문입니다. 이 질문에 전반적으로 프로그래밍 후보를 평가하는 데 일반적으로 사용할 수있는 충분한 유틸리티가 있습니까? 아니면 "임베디드 링크드리스트 팀 수석 개발자"직책을 제외하고는 나쁜 질문으로 간주해야합니까?


11
이것은 어떤 입장입니까? 이것은 어떤 종류의 직업입니까? 어떤 도메인에 있습니까?
Thomas Owens

1
편집 내용이 표시되지만 여전히 어떤 유형의 작업입니까? 이것이 인턴쉽입니까? 엔트리 레벨 직업? 중간 직업? 프로그래머 나 엔지니어 또는 과학자를 고용하려고하십니까? 이 도메인은 무엇입니까? 어떤 이유로 든 자체 알고리즘 또는 데이터 구조를 롤링해야하는 위치에 있을까요?
Thomas Owens

3
'C # (...)는 기본적으로 목록을 광범위하게 사용합니다.'와 '포인터를 통한 효율성은 이전의 문제가 아닙니다.': 이러한 기본 목록은 연결된 목록이 아니라 배열을 기반으로 한 목록이라는 것을 알고 있습니까? 캐싱으로 인해 어레이의 성능이 향상되는 경향이 있습니다. 실제로 IIRC .NET 프레임 워크는 2.0까지 링크 된 목록조차 없었습니다. 나는 C # 프로그램의 대다수가 링크 된 목록을 사용하지 않는다고 확신합니다.
Alex ten Brink

1
@AlextenBrink 흥미롭게도, 그것은 연결된 목록 지식이 C #에서 덜 중요하다는 것을 의미한다고 생각합니다. 언어에 내장 된 더 나은 구조를 사용할 수 있는데 왜 버그가있는 상태에서 데이터 구조를 구현해야합니까?
joshin4colours

내가 생각하는 질문은 '모든 경우에 다른 데이터 구조보다 열등한 데이터 구조를 사용하는 것을 고려해야하는 이유'입니다. 연결된 목록은 배열 기반의 목록보다 대부분의 작업에서 속도가 느립니다. 연결 목록에 유용한 유일한 것은 일정한 시간에 삭제하는 것이지만 필요한 상황은 거의 없습니다. 인터뷰 질문에 대한 데이터 구조가 좋은지 여부에 대해서는 이야기하지 않습니다. 관련 개념이 좋은 테스트 일지 모릅니다.
Alex ten Brink

답변:


52

질문에 대답하면 응시자에 대해 알고 싶은 것이 있으면 면접 질문입니다. 그렇지 않다면 나쁜 질문입니다.

FizzBuzz와 같은 쉬운 질문은 특정 목적에 도움이됩니다. 응시자가 FizzBuzz를 코딩 할 수 없으면 코딩 할 수 없으므로 인터뷰를 일찍 종료 할 수 있습니다. 링크 된 목록을 약간 더 열심히 구현하는 것이 좋지만 일반적으로 데이터 구조에 관한 대화를 시작할 수 있습니다.

단 하나의 인터뷰 질문도 당신이 알고 싶은 모든 것을 말해주지 않는다는 것을 기억하십시오. 질문 그룹이 준비되어 있어야합니다. 응시자가 아는 한도 를 찾을 수 있도록 가장 쉬운 것부터 가장 어려운 것까지 순서대로 질문해야합니다 . 하나의 질문을하고 그들이 물어 본다면 여전히 그들이 무엇을하는지 모르는지도 모릅니다.


편집 관련 :

이 질문에 전반적으로 프로그래밍 후보를 평가하는 데 일반적으로 사용할 수있는 충분한 유틸리티가 있습니까? 아니면 "임베디드 링크드리스트 팀 수석 개발자"직책을 제외하고는 나쁜 질문으로 간주해야합니까?

실제로 모든 프로그래밍 후보를 평가하는 데 사용할 수있는 좋은 범용 질문이라고 생각합니다. 더 큰 질문 그룹에 속해야합니다. 그것은 여러 유형의 위치에 좋은 아이스 브레이커 일 것입니다 (후보자는 처음부터 링크 된 목록을 구현할 수없는 경우에도, 이전에 사용했던 방법과 주요 기능을 설명 할 수 있습니다) 또는 시작 "임베디드 링크드리스트 팀 수석 개발자"직책에 대한 고급 질문들


19
첫 번째 단락은 이야기의 절반입니다. 나머지 절반은 : 질문을 받음으로써 응시자가 당신을 위해 일하기를 원한다면 좋은 인터뷰 질문입니다. 응시자 가 당신을 위해 일하고 싶지 않다면 나쁜 질문입니다.
ruakh

5
"복잡한"및 "기본"이라고 생각하는 것이 후보자와 동일한 순서로 적용된다고 주장 할 방법이 없기 때문에 후보자가 그런 식으로 알고있는 한계를 찾을 수 없습니다. LinkedList는 아마도 대학에서 가르치는 프로그래머에게는 기본 일 것입니다. 결국 그는 필요할 때마다 "LinkedList <string> ..."을 썼을 것입니다. 그의 지식이 "linkedList"수준 아래에 있다는 의미입니까? 그는보다 복잡한 과목의 전문가 일 수 있으며 Google에서 5 분 안에 LL을 배울 수 있습니다.
Sylverdrag

1
@Sylverdrag 이것이 하나 이상의 질문이 필요하다고 말한 이유입니다. 링크 된 목록에 대한 지식의 한계를 찾으면 다른 주제로 이동하십시오.
Bill the Lizard

@ruakh 그것은 확실히 역할을합니다. 인터뷰에서 묻는 모든 단일 질문이 CRUD 앱의 평범한 측면에 관한 것이라면 (즉, 해당 회사에서 새로운 것을 배울 수 있다고 생각하지 않습니다), 거기서 일을하게 된 것은 흥분되지 않습니다.
Bill the Lizard

34

내 마음이 이와 같은 간단한 퍼즐로 가려 졌기 때문에 일자리를 놓쳤다. 또한 다른 인터뷰에서 그러한 퍼즐을 훌륭하게 수행했습니다. 비 압박 환경에서 연결된 목록을 구현하는 방법을 알고 있습니다. 나는 내가 함께 일한 누군가로부터 나의 능력에 대해 불평을 한 적이 없었으므로, 내가 직장에서 놓쳤다 고 생각해서는 안되며, 그들이 나에게 빠졌다고 생각해야한다.

그래, 나는 그것이 가장 의심스러운 습관이라고 생각하지만, 나는 그것을 이해한다. 또한 문제의 압력이 아니라 질문자가 문제가 될 수있는 가능성을 고려하여 압력이 큰 상황이되었습니다.

개인적으로 저는 후보자가 이미 해결 한 문제 (가능한 경우 최근에)와 코딩 및 프로세스 문제를 모두 다루는 개방형 질문을하고 싶습니다. 그들이 코드 샘플을 가져올 수 있다면 환상적입니다.


그들은 퍼즐이나 다른 어떤 것을 요구해야합니다. 질문이 있으면 사람을 비울 수 있습니다.
Sign

2
@pdr- "코드 샘플을 가져올 수 있다면 환상적입니다." 그들이 가져온 코드 샘플을 작성하면 귀중한 가치가 있습니다.
robrambusch

4
누군가가 링크 된 목록 구현에서 마음을 비우고 약간의 프롬프트로 그것을 해결할 수 없거나 쉽게 좌절되면, 나는 그것을 놓칠 염려가없는 사람이라고 생각합니다.
Bill K

1
@pdr- "그리고 당신이 할 수 없다면, 얼마나 오래 일할 것이라고 생각하십니까?" -당신이 겪고있는 HR 체제 하에서 그들을 해고하는 한. 그런 다음 후보 검색을 다시 시작하는 비용이 추가됩니다. 또한 다음에 인터뷰 한 사람이 부서 전체의 기술적 인 핵심 요소가되었을 수도있는 기회 비용이 내재되어 있습니다. 그러나 지금 은 잘못된 사람 고용하고 다른 일자리 찾았 기 때문에 이용할 수 없습니다 .
robrambusch

1
@robrambusch : 뛰어난 문제 해결 능력을 보여 주었고 수업 구조에 대해 이야기했습니다. 그러나 그는 코드를 작성하지 않았습니다. 인터뷰에서 코드를 작성하는 주제에 관해서는 그렇습니다.하지만 유용 할 수는 있지만 한 시간 동안 당신에게 해결 된 문제에 대해 이야기 할 수있는 단일 문제를 제공하는 것보다 더 많은 것을 배울 수 있다고 생각합니다. 해결하는 시간.
pdr

25

프로그래밍 작업 유형을 정의해야합니다. 컴파일러와 알고리즘을 개발하는 사업에 있다면 그러한 것들에 대한 질문이 예상됩니다. LOB (기간 업무) 유형 응용 프로그램에 있고 응시자가 CRUD 응용 프로그램을 수행 할 것으로 예상되는 경우 (프로그램 작성없이) 개념에 대한 지식이 충분할 수 있습니다. 오늘날 LOB 유형의 응용 프로그램에서 작업을 수행하는 데 필요한 다양한 기술에 대한 지식은 깔끔한 알고리즘의 필요성을 대체합니다.


바로 그거죠. 작년에 나는 약간의 시뮬레이션 어닐링 (클래스 스케쥴 생성)을 사용하고 여러 "고급"데이터 구조를 사용하여 범용적인 유전자 정렬 구성 요소를 작성했습니다. 나는 하나를 코딩 할 필요가 없었습니다. .Net 프레임 워크에 필요한 것이 없으면 C5 또는 Power Collections를 사용했습니다.
ElGringoGrande

4
동의, 나는 하루 종일 LOB 앱을 작성하고, 과거에 대학에서 ... COBOL로 작성된 링크 목록 구현을 가지고 있습니다. 다시 할 수 있지만 왜? 많은 유능한 LOB 개발자는 아마도 한 번도 작성하지 않았을 것입니다.
CaffGeek

1
일반적으로 동의하지만 링크 된 목록은 이국적이지 않습니다. FizzBuzz보다 한 단계 높은 기본 사항입니다.
Francesco De Vittori

1
@FrancescoDeVittori : 때때로 문제가되지 않습니까? 누군가 당신에게 해결할 문제를줍니다. 충분히 간단 해 보이지만 전에는 해본 적이 없으므로 두뇌가 경주를 시작하여 문제를 찾지 않으면 서 면담 비용을 지불해야하는 문제를 찾아냅니다. 그리고 그것은 존재하지 않지만 실제 문제를 해결하는 데 방해가됩니다.
pdr

@FrancescoDeVittori : 기본이 아닌 인터뷰 질문의 몇 가지 예를 들어 주시겠습니까? 자기 개선을 위해 이것이 필요합니다. 감사.
Den

9

내 대답은 "그것은 달려있다"입니다. 후보자가 이력서에 C 또는 C ++를 등재 한 경우이 질문을합니다. 링크 된 목록을 구현하도록 요청하는 것은 C 또는 C ++ 프로그래머에게 절대적으로 필요한 포인터를 이해하기위한 좋은 테스트입니다.

다른 한편으로, 후보자가 C 또는 C ++를 모른다고 주장한다면, 그에게 연결된 목록을 구현하라고 요구하지는 않지만 그것에 대해 질문하는 것을 고려할 것입니다. 연결된 목록의 작동 방식을 개략적으로 설명하십시오. 목록의 헤드에 요소를 추가하는 것이 복잡합니까? 목록의 꼬리? 목록 중간에 요소를 삽입 하시겠습니까? 배열과 반대로 목록을 언제 사용 하시겠습니까? IMHO는 모든 프로그래머가 알아야 할 기본 데이터 구조 개념입니다.


7

나는 그것이 나쁜 인터뷰 질문으로 생각하지 않을 것입니다. 많은 데이터 구조 이해 및 프로그래밍은 연결 목록에 대한 이해가 뛰어납니다. 그러나 몇 가지주의 사항이 있습니다.

1) 피즈 버즈 형 질문입니다. 당신은 매우 기본적인 것을 검증하고 있습니다. 물어보고 넘어 가세요.

2) 링크리스트의 문제점은 링크리스트 개념 (예 : C)을 이해하는 데 가장 적합한 언어가 해당 작업에서 사용할 언어와 다를 수 있다는 것입니다. 물론 어떤 언어로든 구조에 대한 기본적인 이해를 보여줄 수는 있지만 []를 사용하지 않고 Erlang에서 링크 된 목록을 다시 구현하도록 후보에게 요구하는 것은 같은 도전이 아니며 후보자의 이해에 대해 같은 것을 말하지는 않습니다. 작업이 Java와 관련이 있는지 C에서 요청하면 문제가 다소 누락됩니다.

3)이를 염두에두고 "화이트 보드 프로그래밍"의 일반적인 과제를 해결하기 위해 이러한 종류의 질문을 할 때 핵심 원칙에 대한 이해를 입증하는 한 의사 코드 나 다이어그램을 받아들입니다. 특히 사람들이 구문 적으로나 논리적으로 완벽한 화이트 보드에 코드를 작성하도록 요청하지 않습니다. 특히 그들이 다시 살펴볼 때 논리적 문제를 찾아서 논리적 문제를 식별 할 수 있다면 더욱 그렇습니다. YMMV.


6

인터뷰를 할 때 종종 연결 목록 구현과 연결 목록을 중심으로 한 일부 알고리즘을 요청 받았습니다. 나는 그것들의 대부분을 풀었고, 그들 중 일부는 나의 뉴런을 조금 운동시켜야했다.

인터뷰를한다면, 코딩이 얼마나 좋은지 테스트하는 것이 아니라 세부 사항에 얼마나 많은주의를 기울이는 지 확인하기 위해 일종의 연결 목록 구현을하려고합니다. 누구나 링크 된 목록을 작성할 수 있지만, 훌륭한 프로그래머조차도 실패하는 경계 사례입니다. 그에게 묻지 마십시오 Write a code for linked list in C/C++. C (C ++ 아님) 등의 일반 연결 목록을 작성하도록 요청하십시오.

문제를 비틀고 링크 된 목록에 다른 조건을 넣으면 물어볼만한 좋은 질문이 있습니다. 어떤 사람들은 그때 실수를해야합니다.


2
C의 일반적인 연결 목록과 같은 것은 없습니다.
DeadMG

1
진심이야? 나는 void단지 포인터가 있다고 생각했다 ... :) 구글에서 "c의 일반 링크 목록"에 대한 첫 번째 링크는 daniweb.com/software-development/c/threads/109260 이고 다른 하나는 기술 인터뷰 였습니다. .com /… 모두가 이것을 알고 있다고 생각했습니다!
c0da

이 코드를 테스트하지는 않았지만 이전에이 유형의 링크 된 목록이 있으며 제대로 작동합니다.
c0da

C #에서 일반 연결 목록을 작성하더라도 하나 또는 두 개의 "gotchas"가 있습니다 (예 : T 유형의 요소 비교는 명백하지 않습니다. 즉 (T v1, T v2) => {return v1 == v2;} 컴파일 실패 클래스 제약이 있거나 기본 항등 연산자를 사용하지 않는 한)
Steven Evers

@ c0da 내 의견으로는, void포인터 를 사용하는 목록 은 일반적이지 않지만 언제든지 일반적입니다. 그들은 어떤 종류의 것들도 담을 수 있으며, 원하는 것을 모두 섞을 수 있습니다. 그것은 기본 유형을 사용하여 같은거야 object... 객체 지향 언어
찌를

5

지금까지 약 10 년 동안 전문적으로 프로그래밍을하고 (약 10 년 동안 취미로), 나는 연결된 목록을 구현할 필요가 없다고 생각합니다. 누군가가 인터뷰 중에 요청한 경우, 업무상 정기적으로 할 일인지 물어보고 반박 할 수도 있습니다.

확실히, 거의 확실하게 당신이 거기 작업이있는 처음부터 연결리스트를 구현처럼 - 일반적으로 알려진 알고리즘의 더 - 또는 - 덜 클린 룸 구현을 쓸 필요는. 그러나 대부분의 프로그래밍 작업의 경우, 후보자가 인터뷰 중에 수행 할 수있는 가치는 무엇입니까? 후보자가 엣지 케이스를 올바르게 처리하고 언어 또는 프레임 워크의 일반적인 관행에 따라 실패를보고하는 완벽한 구현을 제공하는 것이 정말 중요합니까? 아니면 그것을 간과하고 그들이 실제로 20-20 년 동안 직면하지 않은 문제에 어떻게 접근하는지에 집중할 수 있습니까?

현재 업무에 대해 인터뷰 할 때 회사에서 사용중인 기술 스택에 대한 경험이 거의 없었습니다. 몇 년 후, 나는 정기적으로 동료들이 내게 와서 제품, 제품의 구현 및 그에 의해 구현 된 표준뿐만 아니라 훨씬 더 일반적인 프로그래밍 문제에 대해서도 질문하게했습니다. 그 의미는 특정 테이블의 맥락에서 SQL Server의 기본 제약 조건과 우리의 경우 사용법에 대한 순환 종속성의 영향을 미쳤습니다.이를 통해 추론하면 해당 특정 의미에는 영향이 없음이 밝혀졌습니다). 또한 새로운 링크 목록 구현이 필요하지 않았습니다.

후보자가 배정 될 가능성이있는 작업과 관련된 질문을합니다.새로운 지식을 습득하는 것에 대해 어떻게 생각하는지 생각해보십시오. 그들이 본 적이없는 모호한 구문의 의미를 어떻게 알아낼 수 있을까요? (예를 들어, C 상점 인 경우, 3 인조 관련 질문을 시도 할 수 있습니다.) 프로그래밍 위치에 대해 정기적으로 스택 오버 플로우와 같은 포럼을 읽거나 기여합니까? 프로그래밍 언어 또는 프레임 워크에서 일부 작업을 수행하도록 요청받은 경우 경험이 거의 없거나 거의 없습니다 (예 : 주로 Java 상점 인 경우 Clojure 또는 .NET은 어떻습니까?). 그러면 어떻게 문제에 접근합니까? 아마도 버그 트래커에서 실제 버그를 제거하고 (해결 된 지 오래 된 것일 수도 있음) 일반적인 용어로 버그를 해결하는 방법에 대해 질문하고 제품의 관련 부분을 설명 할 준비를하십시오.

응시자가 비즈니스 사례와 관련된 유형의 문제를 처리 할 수 ​​있고 새로운 것을 배우는 데 좋은 태도를 보이는 경우, 잘 알려진 질문에 대해 미리 준비된 답변을 제공 할 수있는 것보다 해당 특정 직책 에 적합한 지 여부가 훨씬 더 좋습니다. 질문은 FizzBuzz, 링크 된 목록 또는 다른 것에 관한 것입니다. 응시자가 팀과 얼마나 잘 어울리는 지 생각해보십시오. 여러분이 상당히 안전한 곳에 있다고 생각합니다.


4

물론 대부분의 사람들은 링크 된 목록을 구현할 필요가 없지만 처음부터 다시 구현하려면 포인터를 올바르게 처리해야합니다. 그들은 포인터에 대해 일관된 정신 모델을 형성하면 언어 능력과 관련이 있으며 일부 (추상적 인) 기계 수준에서 발생하는 일과 일반적으로 추상화하는 능력을 이해합니다.

나는 이것이 반드시 최선의 척도가 될 것이라고 말하지는 않지만 단지 약간의 상관 관계가 있다고 말하고 있습니다.


4

당신은 그들이 'gimme'질문이라고 말하기 시작하지만, 사람들은 이해할 수 없을 것입니다. 혼란 스러워요.

내가 생각하는 방법은 다음과 같습니다.

  • 당신이 말하는 것처럼, 글을 쓸 필요가 거의 없기 때문에 사람들은 쉽게 잊어 버릴 것입니다.
  • 그들은 쓰기가 엄청나게 어렵지 않습니다.
  • 그것들을 쓰는 데 사용 된 개념은 기본으로 간주 될 수 있습니다.
  • 그들은 당신이 그것을 모르는 경우에도 믿을 수 없을만큼 자주 사용됩니다.

좋은 질문을 한다고 생각합니다 . 인터뷰를위한 사전 연구에 대해 걱정이된다면 목록을 작성하십시오. 그들에게 그것을 원형으로 쓰게하고 그들의 구현의 점근 적 실행 시간이 무엇인지 묻게한다. 아니면 다른 공통 및 / 또는 빠른 데이터 구조를 작성하도록 하시겠습니까? 이진 검색 트리? 대기열 (FIFO)? 스택 (FILO)? 순진 ( O(n)) 우선 순위 대기열? 내가 아는 많은 사람들은 BST가 O(log n) 나무이기 때문 이라고 생각합니다 .

당신이 금속에서 근무하고, 필요합니다 사람을 찾고 있다면 매우 데이터 구조에 기반을 ... 이들도있을 수 있습니다 까지 당신이 고용 찾고있는 후보자 너무 사소한.

물론 이것은 데이터 구조의 기본 / 기본을 가진 개발자가 자신의 위치가 이러한 기본으로부터 이익을 얻는다고 가정합니다. ASP 페이지를 몇 초 안에 함께 던질 수있는 사람을 원한다면 인터뷰하십시오. 요점은 다른 사람들이하는 인터뷰 질문을 선택하는 것이 아니라 원하는 기술을 측정하는 질문을 선택하는 것입니다. 개인적으로, 나는 데이터 구조 질문이 좋거나, 연계 된 목록인지 아닌지 생각합니다.


실제로 혼란스럽지 않습니다. FizzBuzz는 더 쉬운 질문이지만 신청자들은 일상적으로 질문에 대답 할 수 없습니다. 연결된 목록도 마찬가지입니다. 프로그래밍 세계의 신비입니다.
joshin4colours

@ joshin4colours : 아니요, 질문에 대해 혼란 스럽습니다. 처음에 OP는 LL 질문은 김미의 것이라고 말하지만 자격을 갖춘 개발자가 왜 질문에 실패했는지에 대한 포인트를 나열합니다.
Steven Evers

3

이 질문에 전반적으로 프로그래밍 후보를 평가하는 데 일반적으로 사용할 수있는 충분한 유틸리티가 있습니까?

아뇨, 절대 아닙니다 구절에 따라 "이 후보는 링크 된 목록을 디자인하는 방법을 알고 있습니다"에서 "이 후보는 언어 X로 링크 된 목록을 프로그래밍 할 수 있습니다"에 이르기까지 다양합니다. 의사 코드를 요청하면 첫 번째 코드에 더 가깝습니다. 특정 언어로 구현을 요청하면 언어에 대한 이해에 대해 더 많이 알게됩니다 (특히 C 및 C ++에서 포인터 및 참조 및 구조체를 처리 할 수 ​​있음).

심지어 같은 질문을 사용하여 모든 응시자를 평가할 수는 없다고 말하기까지했습니다. 당신은 당신이 원하는 기술을 평가하기 위해 인터뷰 질문을 조정해야합니다.

사람이 코드를 작성할 위치에 있다면 알고리즘과 데이터 구조 질문을 포함시키는 것이 위치와 관련이 있다고 생각합니다. 전에 논의했거나 사용했을 수도있는 것을 고르려고합니다. 또한 실행 시간 및 메모리 소비 (big-O 표기법과 같은 것)와 같은 데이터 알고리즘 및 알고리즘의 구현 이외의 것에 중점을 둡니다. 이러한 개념은 구현하는 (예로서 가장 적합한 선택뿐만 아니라 데이터 구조를 생성하지만 관련성 ArrayList비교 LinkedList예).


3

나는 정규 프로그래밍 작업이 후보자를 제거하는 질문이어야한다고 생각하지 않습니다. 그러나 정말 수석 프로그래머 또는 오랫동안 원숭이 코딩 양식을 사용하고있는 사람을 다루고 있는지 확인하는 것이 좋습니다. 그럼에도 불구하고 프로그래머 선택의 기본 기준이되어서는 안됩니다. 어쩌면 메모리가 나쁜 프로그래머일지도 모르지만 몇 년 동안 "linked list"라는 단어를 읽지 않았지만 이름을 기억하지 못하지만 여전히 좋은 앱을 할 수 있습니다.

따라서 일부 사람들이 말했듯이 링크 된 목록 및 많은 멋진 알고리즘 등으로 작업 해야하는 작업이 될 것입니다. 양식의 일반적인 입력 데이터의 경우 유효성 검사 및 표시가 다소 쓸모없고 불공평합니다.


2

나는 이것이 인터뷰 질문의 나쁜 예라고 생각하지만 다른 이유가 있습니다. 링크 된 목록은 구현 방법을 아는 것이 무엇인지 아는 간단한 개념입니다. 그 사람이 연결된 목록이 무엇인지 모른다면, 그 목록이 어떻게 작동하는지 설명해야하며, 그렇게함으로써 문제를 해결하는 방법에 대한 지식이 없는지 에 대한 답을 찾지 않고도 답을 줄 수 있습니다 . 따라서 문제는 "연계 된 목록이 무엇이며 어떻게 작동하는지 이미 알고 있습니까?"라는 질문을 통해 해결할 수 있습니다.


2
인기있는 질문은 암기에 능숙한 사람들의 게임에도 적용됩니다.
Paul Nathan

1
만약 당신이 링크 된리스트가 어떻게 후보자에게 작동하는지 설명해야한다면, 프로그래밍을 위해 그를 고용해서는 안될 것입니다.
Dima

2

링크드리스트 구현을 작성하는 것은 좋은 인터뷰 질문입니다. 왜냐하면 후보자의 코딩 방식에 대해 많은 것이 드러날 것이기 때문입니다.

  • API가 무엇인지 알고 있습니까? 다른 사람의 코드를 사용할 수 있습니까? 다른 사람들이 사용할 수 있도록 코드를 작성할 수 있습니까?

  • 그는 연결 목록이 무엇인지 알고 있습니까? 그는 컬렉션, 데이터 구조, 알고리즘을 알고 있습니까?

연결리스트가 어떤 방법을 제공해야하는지 모르는 경우에는 사용하지 않았거나 사용시기를 알고있을 것입니다.

  • 그는 문제를 어떻게 처리합니까? 먼저 분석, 작은 사양, 몇 가지 테스트로 시작합니까? 아니면 그는 행복하게 해킹을 시작합니까?

  • 그는 에지 케이스를 처리합니까? 링크 된 목록에서 마지막 노드를 제거하는 것은 어떻습니까? 누군가가 연결 목록 자체에 대한 참조를 연결 목록에 추가 한 다음 모든 것을 삭제하면 어떻게됩니까?

  • 그는 예외를 처리합니까? 각 프로그래밍 언어에는 예외 처리를위한 고유 한 규칙이 있습니다. Java에서는 빈 목록에서 getFirst ()를 수행 할 때 LinkedList가 NoSuchElementException을 발생시킬 것으로 예상됩니다. 다른 언어는 정의되지 않은 -1 또는 상수를 반환 할 수 있습니다.


인터뷰 코딩 연습에서 특별히 요청하지 않는 한 개념 증명에 필요한 것 이상으로 모든 종류의 대소 문자 처리, 오류 처리 등을 건너 뛸 것입니다. 그러나 나는 그것이 내가 선택한 선택임을 분명히 할 것입니다. 1 시간 또는 몇 시간의 인터뷰 중 제약 조건은 실제로 사용되는 무언가를 실제로 작업하는 상황과는 매우 다릅니다.
CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.