Cracking the Coding Interview, 189 Programming Questions & Solutions, Grale Laakmann McDowell

Behind the Scenes

대부분의 회사들은 면접을 매우 유사한 방식으로 진행합니다. 회사의 면접 방법과 그들이 찾는 요소에 대한 개요를 제공해 드리겠습니다. 이 정보는 면접 준비 및 면접 중과 면접 후의 대응을 안내하는 데 도움이 될 것입니다.

한 번 면접에 선택되면 일반적으로 스크리닝 면접을 거치게 됩니다. 이것은 일반적으로 전화로 진행됩니다. 세계적인 학교를 다니는 대학생들은 이 면접을 대면으로 볼 수도 있습니다. 이름이 “스크리닝”이라고 하더라도, “스크리닝” 면접에는 종종 코딩과 알고리즘 문제가 포함되며, 대면 면접과 마찬가지로 높은 기준을 가질 수 있습니다. 면접이 기술적인 것인지 아닌지 확신하지 못한다면, 인터뷰어의 직책이 무엇인지 (또는 면접이 어떤 주제를 다룰 수 있는지) 인력 채용 조정자에게 물어보세요. 일반적으로 기술 면접을 진행하는 것은 엔지니어입니다.

많은 회사들은 온라인 동기화 문서 편집기를 활용하지만, 다른 회사들은 여러분에게 종이에 코드를 작성하고 전화로 읽어보라고 기대할 수도 있습니다. 어떤 면접관들은 전화를 끊은 후에 “과제”를 해결하도록 하거나 여러분이 작성한 코드를 이메일로 보내라고 요청할 수도 있습니다.

일반적으로 대면 면접 이전에 한 두 번의 스크리닝 면접을 진행합니다.

대면 면접 라운드에서 일반적으로 3에서 6개의 대면 면접이 진행됩니다. 이 중 하나는 종종 점심 시간에 진행됩니다. 점심 면접은 일반적으로 기술적이지 않으며, 면접관은 피드백을 제출하지 않을 수도 있습니다. 이는 여러분의 관심사를 논의하고 회사 문화에 대해 물어보기 좋은 상대입니다. 나머지 면접은 주로 기술적이며 코딩, 알고리즘, 디자인/아키텍처, 행동/경험 질문의 조합이 포함됩니다.

위의 주제 사이에서 질문 분포는 회사와 팀마다 다양하며, 회사의 우선순위, 규모 및 우연성 때문에 면접관들은 면접 질문에 상당한 자유도를 가지기도 합니다.

면접 이후에는 면접관들이 어떤 형태로든 피드백을 제공합니다. 일부 회사에서는 면접관들이 모여 여러분의 성과를 논의하고 결정을 내립니다. 다른 회사에서는 면접관들이 최종 결정을 내리기 위해 고용 관리자나 고용 위원회에 추천을 제출합니다. 일부 회사에서는 면접관들이 심지어 결정을 내리지 않고, 그들의 피드백이 결정을 내리기 위한 고용 위원회에 전달됩니다.

대부분의 회사들은 면접 이후 약 1주일 후에 다음 단계(제안, 거절, 추가 면접 또는 프로세스 업데이트)에 대한 피드백을 제공합니다. 일부 회사들은 훨씬 빨리 (때로는 같은 날!) 회신하며, 다른 회사들은 훨씬 더 오래 걸릴 수도 있습니다.

1주일 이상 기다렸다면 인력 채용 조정자와 연락을 취해야 합니다. 인력 채용 조정자가 응답하지 않는다고 해서 여러분이 거절된 것을 의미하지 않습니다(적어도 주요 기술 회사나 거의 모든 다른 회사에서는 그렇지 않습니다). 다시 한 번 강조하겠습니다. 응답이 없는 것은 여러분의 상태와는 아무런 관련이 없습니다. 의도는 모든 인력 채용 조정자가 최종 결정이 내려지면 후보자에게 알려줘야 한다는 것입니다.

지연은 발생할 수 있고 발생합니다. 지연이 예상된다면 인력 채용 조정자에게 연락을 취해보세요. 그러나 연락할 때 예의를 갖추세요. 인력 채용 조정자들도 여러분과 마찬가지로 바빠서 잊어버리는 경우가 있습니다.

The Microsoft Interview

마이크로소프트는 똑똑한 사람, 즉 기술에 열정을 가진 인재를 원합니다. 여러분은 아마 C++ API의 모든 부분에 대한 테스트를 받지는 않을 것입니다. 그러나 여러분은 보드에 코드를 작성할 것으로 기대됩니다.

일반적인 면접에서 여러분은 아침 일찍 마이크로소프트에 나타나 초기 서류 작성을 완료합니다. 인력 채용 조정자와 짧은 면접을 진행하게 되며 조정자는 여러분을 준비하는 데 주로 도움을 주는 역할을 합니다. 기술적인 질문을 받게 되면, 이는 조정자가 실제 면접이 시작될 때 여러분이 덜 긴장하도록 면접을 부드럽게 시작하려는 의도일 수 있습니다.

인력 채용 조정자에게 예의를 갖추세요. 인력 채용 조정자는 여러분의 가장 큰 지지자가 될 수 있으며, 첫 번째 면접에서 실수를 한 경우에도 다시 면접을 보기 위해 노력할 수 있습니다. 그들은 여러분이 채용되기를 옹호할 수 있거나 그렇지 않게 할 수 있습니다.

하루 동안 4~5회의 면접을 진행하게 되는데, 이 면접은 종종 두 개의 다른 팀과 진행됩니다. 다른 많은 회사들과는 달리 면접자들을 회의실에서 만나는 것이 아니라 그들의 사무실에서 만나게 됩니다. 이는 팀 문화를 파악하고 느낄 수 있는 좋은 기회입니다.

팀에 따라 면접관들이 여러분에 대한 피드백을 면접 루프의 나머지와 공유할 수도 있고 그렇지 않을 수도 있습니다.

어떤 팀과 면접을 마치면 고용 관리자(일반적으로 “as app”으로 줄여서 부릅니다)와 대화를 나눌 수도 있습니다. 그렇다면 그것은 좋은 징조입니다! 이는 여러분이 특정 팀의 면접을 통과했다는 의미입니다. 이제 고용 관리자의 결정이 남아 있습니다.

당일에 결정을 받을 수도 있고 일주일이 걸릴 수도 있습니다. 인력부로부터 일주일 동안 소식이 없으면 친절한 이메일을 보내 상태 업데이트를 요청하세요.

인력 채용 조정자가 응답하지 않는다면, 그것은 그녀가 바쁘기 때문이며, 여러분이 무시당하고 있는 것이 아닙니다.

Definitely Prepare:

“Microsoft에서 일하고 싶은 이유는 무엇인가요?” 이 질문에서 Microsoft는 여러분이 기술에 열정적인지를 확인하려고 합니다. 훌륭한 답변은 다음과 같을 수 있습니다. “저는 기억할 수 있는 한 오랜 시간 동안 Microsoft 소프트웨어를 사용해왔고, Microsoft가 보편적으로 훌륭한 제품을 만드는 데 어떻게 성공하는지에 깊은 감명을 받았습니다. 예를 들어, 게임 프로그래밍을 배우기 위해 최근에 Visual Studio를 사용하고 있는데, 그 API들이 훌륭합니다.” 이렇게 답변하면 기술에 대한 열정을 보여줍니다!

What’s Unique:

고용 관리자에게 도달하면 여러분이 잘 한 것이므로 그것은 훌륭한 징조입니다! 또한, Microsoft는 팀에 개별적인 통제를 더 많이 부여하고 제품 포트폴리오가 다양합니다. 서로 다른 팀들이 서로 다른 요소를 찾기 때문에 Microsoft에서의 경험은 상당히 다를 수 있습니다.

The Amazon Interview

아마존의 채용 프로세스는 일반적으로 특정 팀과의 전화 인터뷰로 시작합니다. 일부 경우에는 두 개 이상의 인터뷰를 진행해야 할 수도 있으며, 이는 한 명의 면접관이 납득하지 못했거나 다른 팀이나 프로필을 고려 중인 경우일 수 있습니다. 특별한 경우로, 지역 거주자이거나 최근에 다른 직책에 지원한 경우와 같이 전화 인터뷰를 한 번만 진행할 수도 있습니다.

면접관은 일반적으로 여러분에게 공유 문서 편집기를 통해 간단한 코드를 작성하라고 요청할 것입니다. 또한 여러분이 어떤 기술 영역에 익숙한지 탐색하기 위해 다양한 질문을 종종 던질 것입니다. 그 다음, 여러분은 여러분의 이력서와 전화 인터뷰를 기반으로 선택한 하나 또는 두 개의 팀과 시애틀 또는 여러분이 면접을 진행하는 사무실로 이동하여 4~5회의 면접을 진행하게 됩니다. 여러분은 화이트보드에 코드를 작성해야 하며, 일부 면접관은 다른 기술을 강조할 수도 있습니다. 면접관마다 특정 영역을 조사하기 위해 할당되며, 그들은 다른 피드백을 제출할 때까지 다른 피드백을 볼 수 없으며 채용 회의 전까지 토론을 하지 않도록 권장됩니다.

“바 레이저” 면접관은 면접 기준을 높이는 역할을 맡고 있습니다. 그들은 특별한 교육을 받고 자신의 그룹 외부의 후보들을 면접합니다. 하나의 면접이 다른 면접보다 훨씬 어렵고 다른 경우, 그것이 바 레이저일 가능성이 가장 높습니다. 이 사람은 면접 경험이 풍부하며 채용 결정에서 거부 권한을 가지고 있습니다. 그러나 기억하세요: 이 면접에서 더 어려워 보인다고 해서 실제로 성적이 나빠지는 것은 아닙니다. 여러분의 성적은 다른 후보들과 비교하여 판단되며 단순한 “정답 비율” 기준으로 평가되지 않습니다.

면접관이 피드백을 제출하면 그들은 피드백을 논의하기 위해 모여들게 됩니다. 채용 결정을 내릴 사람들입니다. 아마존의 인력 채용 담당자는 대개 후보자와 연락을 유지하는 데 능숙하지만 가끔은 지연이 발생할 수 있습니다. 아마존으로부터 일주일 이상 소식을 듣지 못한 경우, 친절한 이메일을 보내는 것을 권장합니다.

Definitely Prepare:

아마존은 확장성에 큰 관심을 가지고 있습니다. 확장성 관련 질문에 대비하도록 준비하세요. 이러한 질문에 대답하기 위해서는 분산 시스템에 대한 백그라운드가 필요하지 않습니다. 시스템 디자인 및 확장성 장에서의 권장 사항을 확인하세요.

또한 아마존은 객체 지향 디자인에 관한 다양한 질문을 자주 던집니다. 샘플 질문과 제안 사항은 객체 지향 디자인 장에서 확인하세요.

What’s Unique:

바 레이저는 다른 팀에서 가져와서 기준을 높이는 역할을 합니다. 여러분은 이 사람과 고용 관리자 두 사람을 모두 감동시켜야 합니다.

아마존은 다른 회사들보다 더 많은 실험을 통해 채용 프로세스를 진행합니다. 여기에 설명된 프로세스는 전형적인 경험을 설명한 것이지만, 아마존의 실험으로 인해 모든 경우에 적용되지는 않을 수 있습니다.

The Google Interview

구글 면접에 대한 많은 무서운 소문들이 돌고 있지만, 대부분 그저 소문입니다. 면접은 마이크로소프트나 아마존의 면접과 크게 다르지 않습니다.

구글 엔지니어가 첫 번째 전화 인터뷰를 진행하므로 어려운 기술적 질문을 기대하세요. 이러한 질문은 때로는 공유 문서를 통해 코딩을 포함할 수 있습니다. 후보자들은 일반적으로 전화 인터뷰에서 온사이트 인터뷰와 유사한 표준에 따라 질문을 받습니다.

온사이트 면접에서는 4~6명의 면접관과 면접을 보게 되며, 그 중 한 명은 점심 면접관입니다. 면접관의 피드백은 다른 면접관에게 비밀로 유지되므로 각 면접에서 처음부터 시작한다는 것을 확신할 수 있습니다. 점심 면접관은 피드백을 제출하지 않으므로 솔직한 질문을 하기에 좋은 기회입니다.

면접관들은 일반적으로 특정한 초점을 받지 않으며 어떤 질문이 언제 나올지에 대한 “구조”나 “시스템”이 없습니다. 각 면접관은 자신이 원하는 방식으로 면접을 진행할 수 있습니다.

피드백은 엔지니어와 매니저들로 구성된 고용위원회(HC)에 제출되어 채용 또는 미채용 권장 사항을 결정합니다. 피드백은 일반적으로 네 가지 범주 (분석 능력, 코딩, 경험 및 의사 소통)로 나뉘며, 전체 점수는 1.0에서 4.0까지 부여됩니다. HC에는 일반적으로 면접관 중 아무도 포함되지 않습니다. 포함된 경우에는 우연히 포함된 것입니다.

제안을 연장하려면 HC에서 적어도 하나의 면접관이 “열광적 지지자”인 것을 보고하길 원합니다. 다시 말해, 점수가 3.6, 3.1, 3.1 및 2.6인 패킷이 모두 3.1보다 좋습니다.

모든 면접에서 높은 성적을 받을 필요는 없으며, 전화 인터뷰 성적은 일반적으로 최종 결정에 강력한 요소가 되지 않습니다.

고용위원회가 제안을 권장하면 여러 단계와 위원회가 있기 때문에 결정을 반환하는 데 몇 주가 걸릴 수 있습니다.

Definitely Prepare:

웹 기반 회사로서 Google은 확장 가능한 시스템을 어떻게 디자인할지에 관심을 가집니다. 따라서 시스템 디자인 및 확장성 관련 질문에 대비하기 위한 준비를 하세요. Google은 경험과 상관없이 분석적(알고리즘) 스킬에 강한 중점을 두고 있습니다. 이러한 질문에 대비하기 위해 이전 경험만으로 충분하다고 생각하더라도 매우 잘 준비해야 합니다. 다른 점: 면접관들은 고용 결정을 내리지 않습니다. 대신, 그들은 피드백을 입력하고 이를 고용위원회에 제공합니다. 고용위원회는 결정을 권장하며, Google 경영진에 의해 거의 결코 거절되지는 않을 수 있습니다.

What’s Different:

Your interviewers do not make the hiring decision. Rather, they enter feedback which is passed to a hiring committee. The hiring committee recommends a decision which can be—though rarely is—rejected by Google executives.

The Apple Interview

회사 자체와 마찬가지로 Apple의 면접 프로세스는 최소한의 절차를 가지고 있습니다. 면접관들은 뛰어난 기술 스킬을 찾을 것이지만, 해당 포지션과 회사에 대한 열정 또한 매우 중요합니다. Mac 사용자여야 하는 필수 조건은 아니지만 시스템에 대한 이해는 필요합니다.

면접 프로세스는 일반적으로 기술 스킬을 기본적으로 평가하기 위한 인사 담당자의 전화 스크린에서 시작하며, 그 후 팀 구성원들과의 일련의 기술 전화 스크린이 이어집니다. 캠퍼스에서 면접에 초대되면 보통 인사 담당자가 면접 프로세스 개요를 제공하고, 이후에는 면접을 진행하는 팀의 구성원 및 팀과 협업하는 주요 인물들과의 6-8회의 면접이 진행됩니다.

Definitely Prepare:

면접하는 팀을 알고 있다면 해당 제품에 대해 조사해 보세요. 그 제품에 대해 어떤 점을 좋아하나요? 어떻게 개선하고 싶은가요? 구체적인 제안을 제공하면 직무에 대한 열정을 나타낼 수 있습니다.

What’s Unique:

Apple에서는 두 명의 면접관과의 면접을 자주 진행하지만, 이것에 대해 너무 스트레스 받지 마세요. 이는 일대일 면접과 동일한 방식입니다! 또한, Apple 직원들은 Apple의 열렬한 팬들입니다. 면접에서도 이와 같은 열정을 보여주어야 합니다.

The Facebook Interview

면접에 선발된 후에는 보통 한 두 번의 전화 스크린 면접을 진행하게 됩니다. 전화 스크린 면접은 기술적이며 대개 온라인 문서 편집기를 사용한 코딩이 포함됩니다.

전화 인터뷰(들) 이후에 코딩과 알고리즘을 포함한 숙제 과제를 수행하라는 요청을 받을 수 있습니다. 여기서 코딩 스타일에 주의를 기울이세요. 철저한 코드 리뷰가 이루어진 환경에서 일해본 적이 없다면 누군가에게 코드 리뷰를 요청하는 것이 좋을 수 있습니다.

온사이트 면접 중에는 주로 다른 소프트웨어 엔지니어와 면접을 보게 되지만, 가능한 경우에는 채용 담당자도 참여합니다. 모든 면접관들은 철저한 면접 교육을 받았으며, 누구와 면접을 보느냐에 따라 채용 제안 가능성에는 영향을 미치지 않습니다.

온사이트 면접 중에 각 면접관에게 “역할”이 주어지며, 이를 통해 반복적인 질문이 없고 후보자의 종합적인 모습을 파악할 수 있도록 합니다. 이러한 역할은 다음과 같습니다:

  • 행동 면접 (“Jedi”): 이 면접은 Facebook의 환경에서 성공적으로 적응할 수 있는 능력을 평가합니다. 문화와 가치관에 잘 맞을 수 있을까요? 무엇에 열정을 가지고 있나요? 어떻게 도전에 접근하나요? Facebook은 열정적인 사람들을 원합니다. 이 면접에서 코딩 질문도 받을 수 있습니다.

  • 코딩 및 알고리즘 (“Ninja”): 이는 표준 코딩 및 알고리즘 질문으로, 이 책에서 찾을 수 있는 것과 유사합니다. 이러한 질문은 도전적으로 설계되었습니다. 사용하고 싶은 프로그래밍 언어를 사용할 수 있습니다.

  • 디자인/아키텍처 (“해적”): 백엔드 소프트웨어 엔지니어의 경우 시스템 디자인 질문을 받을 수 있습니다. 프론트엔드나 다른 전문 분야에서는 해당 분야와 관련된 디자인 질문을 받게 될 것입니다. 서로 다른 해결책과 그들의 트레이드오프에 대해 공개적으로 토론해야 합니다.

일반적으로 “Ninja” 면접 두 개와 “Jedi” 면접 한 개를 기대할 수 있습니다. 경험이 풍부한 지원자는 일반적으로 “Pirate” 면접도 받게 됩니다.

면접 후 면접관들은 서로의 피드백을 공유하기 전에 서면 피드백을 제출합니다. 이를 통해 한 면접의 성과가 다른 면접관의 피드백에 영향을 미치지 않도록 합니다. 모든 피드백이 제출된 후 면접진과 채용 담당자가 모여 최종 결정에 협력합니다. 그들은 합의된 결정을 내리고 최종 채용 추천서를 채용 위원회에 제출합니다.

Definitely Prepare:

“엘리트” 기술 회사 중 가장 젊은 페이스북은 기업가 정신을 가진 개발자를 원합니다. 면접에서는 빠르게 무언가를 구축하는 것을 좋아한다는 것을 보여야 합니다.

페이스북은 어떤 언어를 사용하여도 우아하고 확장 가능한 솔루션을 빠르게 개발할 수 있는 능력을 보여주는 것을 원합니다. 특히 PHP를 알 필요는 없으며, 페이스북은 C++, Python, Erlang 및 기타 언어로 백엔드 작업을 수행합니다.

What’s Unique:

페이스북은 일반적으로 “회사 전반”의 개발자를 대상으로 면접을 진행하며 특정 팀을 위한 것이 아닙니다. 채용되면 대규모 코드 베이스에 대한 지식을 쌓아줄 6주간의 “부트캠프”를 거치게 됩니다. 여기서는 시니어 개발자로부터 멘토링을 받고 최상의 실천 방법을 배우며, 최종적으로는 면접에서 프로젝트를 할당받는 것보다 프로젝트를 선택하는 유연성을 더 얻게 됩니다.

The Palantir Interview

일부 회사가 “풀드(pooled)” 면접을 실시하는 반면, Palantir는 특정 팀을 위한 면접을 진행합니다. 때로는 더 적합한 팀이 있는 경우에는 신청이 다른 팀으로 재지정될 수도 있습니다.

Palantir의 면접 과정은 일반적으로 두 개의 전화 면접으로 시작합니다. 이 면접은 30분에서 45분 정도 소요되며 주로 기술적인 내용을 다룹니다. 이전 경험에 대한 이야기도 다룰 것이지만, 알고리즘 질문에 중점을 둡니다.

또한 HackerRank 코딩 평가를 받을 수도 있으며, 이를 통해 최적의 알고리즘을 작성하고 올바른 코드를 작성할 수 있는 능력을 평가합니다. 대학생과 같이 경험이 적은 지원자들은 특히 이러한 테스트를 받을 가능성이 높습니다.

이후 합격한 지원자들은 캠퍼스로 초대되어 최대 다섯 명의 인터뷰어와 면접을 진행합니다. 현장 면접에서는 이전 경험, 관련 도메인 지식, 데이터 구조 및 알고리즘, 디자인 등을 다룰 것입니다.

또한 Palantir의 제품 데모를 받을 수도 있습니다. 좋은 질문을 하고 회사에 대한 열정을 나타내세요. 면접 이후, 인터뷰어들은 채용 매니저와 함께 피드백을 논의합니다.

Definitely Prepare:

Palantir는 뛰어난 엔지니어를 채용하는 가치를 중요하게 생각합니다. 많은 지원자들이 Palantir의 질문이 Google 및 다른 최고의 회사에서 본 질문보다 어렵다고 보고합니다. 이는 반드시 입사 제안을 받기가 더 어렵다는 의미는 아니지만 (물론 그럴 수도 있음), 인터뷰어들이 더 어려운 질문을 선호한다는 것을 의미합니다. Palantir에서 면접을 볼 경우, 핵심 데이터 구조와 알고리즘을 철저히 공부하고, 가장 어려운 알고리즘 질문에 집중하세요.

백엔드 역할로 면접을 보려면 시스템 디자인도 복습하세요. 이것은 프로세스의 중요한 부분입니다.

What’s Unique:

코딩 과제는 Palantir의 프로세스의 일반적인 부분입니다. 컴퓨터 앞에 있으며 필요한 자료를 찾을 수 있지만, 준비 없이 들어가지 마세요. 질문은 매우 어려울 수 있으며 알고리즘의 효율성이 평가됩니다. 철저한 면접 준비가 여기에서 도움이 될 것입니다. HackerRank.com에서 온라인 코딩 과제를 연습할 수도 있습니다.