나는 쉬운 질문 fizzbuzz, 문자열 뒤집기 등이 있다고 생각합니다. 그런 다음에 질문을 보지 못했다면 인터뷰의 추가 압력과 짧은 시간으로 의도 된 최적의 솔루션을 얻기가 어렵습니다. 제약. 최악의 부분은 때로는 기술적 인 지식이없는 채용 담당자가 이러한 질문 중 일부를 묻고 매우 구체적인 답변을 찾고 있다는 것입니다. 최적의 답변을 제공하지 않으면 절대 바보라고 생각합니다. 대답이 효과가 있어도 문제를 해결하고 최적이 아닐 수 있지만 너무 비효율적이지는 않습니다 ....
몇 가지 예 :
한 벌의 카드를 섞는 방법은 무엇입니까? 그들은 Fisher-Yates 방법을 찾고 있습니다 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle다른 답변은 "잘못"입니다 ..... 이것은 카드를 셔플하지 않고 구체적으로 찾아보기 전에는 알 수없는 내용입니다. 당신은 대답을하는 과정에서 그것을 우연히 발견 할 수 있지만, 내가 본 것에서 그들은 당신 이이 감기를 알기를 기대하므로 해결책을 찾는 데 많은 시간이 주어질 것입니다. 덜 효율적인 (그러나 아마도 더 분명한) 또 다른 방법은 원래 배열에 대한 포인터와 임의의 숫자 인 숫자로 새 배열을 만든 다음 임의의 숫자로 배열을 정렬하는 것입니다. 그런 다음 정렬 된 배열을 사용하여 새 카드 배열을 구성하십시오. 어쨌든, 나는 그것을 모집 자에게 제시 한 것에 대해 0 점을 받았습니다.
또 다른 예는 1에서 n-1까지의 n 개의 숫자 목록에서 중복 숫자를 어떻게 감지하는지에 대한 질문입니다. 명백한 대답은 (시간 관점에서 상대적으로 효율적 임) 해시 테이블을 사용하여 각 요소를 삽입하고 이미 삽입 된 요소를 찾으면 복제본을 찾았습니다. 가장 좋은 대답은 숫자가 1과 n 사이에 있기 때문에 중복이 없으면 예상 합계를 n (n + 1) / n으로 얻을 수 있습니다. 그런 다음 배열을 합하면 예상 합계보다 nd 적은 실제 합계를 얻습니다. 그래서 기본적으로 n-(예상 합계-실제 합계) = 중복 번호 ... 그것은 아주 특별한 경우입니다 .... 나는 실제로 전에 같은 트릭을 가진 관련 문제에 관한 인터뷰 문제에 대한 온라인 게시물에서 무언가를 보았습니다. 나는 괜찮았다 ....
다른 하나는 추가 공백을 사용하지 않고 문자열의 모든 단어를 뒤집습니다. 나는 그것에 대해 생각해야했고 모집자는 내가 생각한 5 분 안에 참을성이 없었습니다 (문자열을 뒤집어 다시 결합하거나 단어별로 새 배열로 이동하는 것은 매우 쉽습니다). 나는 마지막 단어의 경계를 찾고 첫 번째 단어의 끝을 찾고 지속적으로 전체 목록을 1 씩 아래로 이동 한 다음 적절한 문자를 삽입했습니다. 그런 다음 목록 끝에 도달 할 때까지 반복하십시오. 이 방법은 효과가 있었고 면접관은 동의했지만 (그는 약간 기술적이지만) 비효율적입니다. 집에 도착했을 때 최적의 답을 찾았습니다.리스트를 뒤집은 다음 각 단어를 뒤집는 것입니다. 어떤 사람들은 그걸 생각 해낼 수 있습니다.
이제 이러한 문제 중 일부를 본 후에는 쉽게 해결할 수 있습니다. 같은 속임수와 비슷한 질문이 있기 때문입니다. 특히 n (n-1) / 2 수식과 숫자 목록에는 여러 변형이 있습니다. 그러나 여전히이 질문들이 무엇을 테스트하는지 모르겠습니다. FizzBuzz는 모든 사람이 할 수있는 일입니다 (단순하지 않은 변형을 보았지만 어떤 경우에도 코드를 입력 / 디버깅 할 수없는 인터뷰 상황에 대해 현실적인지 질문하기 시작합니다). 이러한 질문 중 일부는 일단 본 후에는 분명하지만, 보지 못한 경우에는 명확하지 않습니다. 모든 사람이 언급 한 후에는 이진 검색의 첫 번째 올바른 구현이 나타나기까지 몇 년이 걸렸습니다 ... 현재 이진 검색은 모든 사람들이 그것에 대해 읽을 수 있기 때문에 매우 분명합니다.
그럼에도 불구하고, 최악의 부분은 기술이 아닌 사람들이 귀하의 솔루션이 최적은 아니지만 정확하다는 것을 이해할 수 없기 때문에 질문을 할 때입니다. 그들은 귀하의 솔루션이 제시된 솔루션이 아니라는 것을 알고 있으며 따라서 모두 잘못되었으므로 시도에 대한 크레딧을 얻지 못합니다. 최적이 아닌 솔루션조차도 종종 프로그래밍 구조에 대한 지식을 보여줍니다. 내가 포커 게임을 프로그래밍하지 않는 한, 누군가가 한 벌의 카드를 잘 섞을 수 있는지에 대해서는 신경 쓰지 않습니다. 그리고 내가 그렇더라도 효율적인 알고리즘을 보여준 후에는 중간 정도의 사람이 그것을 따라갈 수 있다고 확신합니다.
템플릿 질문은 더 많은 템플릿 질문을 볼 가능성이 높으므로 더 오래 인터뷰 한 응시자에게 유리한 것으로 보입니다. FizzBuzz조차도 처음 보게되면 놀라게 될지 모르지만 반복해서 보면 익숙해집니다. 최선의 방법은 사용자 지정 비즈니스 논리가 필요한 코딩 문제를 해결하는 것입니다. 예를 들어 일부 데이터 세트 (객체 / 레코드 배열)를 생성 한 다음 각 객체에 적용 할 비즈니스 규칙을 생성하고 답변을 반환합니다. 레코드를 반복해서 처리하고 논리를 적시에 적용하는 것처럼 보였지만 규칙은 고유하므로 최소한 규칙을 이해하고 성공적으로 구현해야합니다.
예상 급여와 후보자 목록, 비디오 좋아하는 비디오 게임 3 대, 그리고 첫 급여를 가정 해 봅시다. 젤다를 좋아하는 응시자는 300 점을 받고, 인어 공주를 좋아하는 응시자는 200 보너스를받습니다. Donkey Kong과 Super Mario Brothers는 좋아하지만 Mario 박사는 그렇지 않은 지원자에게는 300 보너스가 주어집니다. Metroid 또는 Kid Icarus를 좋아하는 응시자는 200 보너스 등을받습니다. 약간 미친 것 같지만 비즈니스 규칙을 논리 프로그램 구조로 변환하고 부울 논리에 대한 이해도를 테스트하는 능력을 보여줍니다. 모듈러스와 루프를 사용하지 않는 것을 제외하고는 전체적으로 fizzbuzz와 크게 다르지 않습니다. 물론 목록을 제공하고 목록을 반복하여 특정 출력 기준을 사용하여 화면에 결과를 인쇄 할 수도 있습니다.