brunch

You can make anything
by writing

C.S.Lewis

by 션디킴 Oct 21. 2019

인터뷰 제국의 역습 (上)

테크회사 인터뷰의 모든 것

인터뷰 진행을 하고 싶다는 이메일이 하나둘 오기 시작했다. 기쁜 마음도 잠시, 부담감이 밀려온다. 테크회사 인터뷰는 어떻게 준비해야 하는 걸까?


이번 편의 주제는 바로 인터뷰. 테크회사 인터뷰는 세 가지로 나눌 수 있다: 코딩 챌린지, 전화 인터뷰, 온사이트 인터뷰. 각각 어떻게 접근해야 하는지 파헤쳐보자. 

내가 너의 면접관이다
아니야!!




인터뷰 절차 Overview


코딩 챌린지 => 전화 인터뷰 => 온사이트 인터뷰 => 합격 


대학생 프로그래머 지원자일 경우 대부분 비슷한 절차를 밟는다. 우선 별다른 지체 없이 컴퓨터로 하는 코딩 챌린지가 이메일로 올 것이다. 코딩 챌린지를 통과하면 전화 인터뷰를 진행할 것이고 그다음엔 회사 오피스에서 하는 온사이트 인터뷰를 할 것이다. 마지막 절차까지 성공적으로 마친다면 합격을 알리는 오퍼 레터(Offer letter)를 받을 수 있다.


리크루팅 이벤트에서 직접 만나서 레주메를 건넬 경우 코딩 챌린지와 전화 인터뷰 대신에 온캠퍼스 인터뷰를 하는 경우도 있다. 학교에서 직접 만나 인터뷰를 진행하는 것인데, 얼굴을 보면서 하는 전화 인터뷰라고 생각하면 된다. 


코딩 챌린지


혼자서 컴퓨터로 정해진 시간 안에 문제를 해결하는 절차이다. 원할 때 부담 없이 진행하면 되고 기본적인 코딩 실력만 검증하기 위한 것이기 때문에 난이도가 높지 않다. 다만 45분~1시간 시간제한이 있으니, 방해받지 않을 공간을 찾아서 부담 없이 보면 된다. 


LeetCode에서 퍼온 코딩 샘플 챌린지


코딩 챌린지는 LeetCode에서 연습할 수 있다. Linked list나 graph 관련된 문제를 풀면서 흔한 데이터 구조들을 리뷰하자. 시간 절약을 위해 string, dictionary, set의 중요한 methods에 미리 익숙해지면 좋다. 하지만 챌린지 도중에 인터넷에 찾아볼 수 도 있으니 너무 빠삭하게 외울 필요는 없다. 


언어는 자유롭게 선택할 수 있지만 빠른 개발 속도로 유명한 Python을 추천한다. Javascript는 만약 실수를 하면 debugging이 힘들어지고, Java나 C는 type를 일일이 맞춰야 되니까 쓰는 속도가 다소 느리다. 특히 C로 한다면 integer overflow를 따로 처리해야 한다는 번거로움이 있다. 



전화 인터뷰


코딩 챌린지를 무사히 통과하면 리크루터가 전화 인터뷰를 잡기 위해 이메일이나 전화를 할 것이다. 앞으로는 모르는 번호로 전화가 와도 잘 받자. 

미국에 전화번호의 앞자리는 지역마다 정해져 있으니, 샌프란의 area code는 414, 시애틀의 area code는 206 임을 기억해두면 유익하다. 


전화 인터뷰는 1대 1로 이루어진다. 보통 한 시간 정도 진행을 하는데, 50분 정도 알고리즘 질문을 하고 마지막 10분은 역으로 내가 회사에 대한 질문을 한다. 알고리즘 문제는 실시간 코딩 챌린지라고 생각하면 된다. 면접관이 지켜보는 가운데 코딩 챌린지를 해야 한다. 난이도도 더 어려워지고 어떻게 코드를 쓰는지 본다. 그들의 관심사는 단순한 프로그래밍 실력을 넘어 나의 전체적인 Thought process를 보는 것이다. 탄탄한 실력도 중요하지만 소통실력을 보여주는 것도 중요하다는 얘기이다. 나름 나만의 요령을 정리하자면–


문제를 정확히 이해하자

우선은 Problem space를 정확히 이해하고 시작하는 게 중요하다 (특히 면접관이 말로 전달할 때). 바로 푸는 것이 아니라 몇 가지 질문을 통해서 문제의 대한 가정assumption을 더블 체크해보자. 예를 들어 다음과 같은 문제에는 이런 질문들을 할 수 있다. 

문제) Find the minimum in an array.
• Can there be a negative number?
• Can there be duplicating elements? What if there are multiple minima?
문제) Find out the longest path from s to t without revisiting any node.
• Is the graph connected? Are the edges directed or undirected? 
• What if s and t are the same node? Should it return nothing or a longest cycle from that node?


시간을 갖고 다양한 시선으로 문제를 바라보자

처음에 생각나는 해답으로 바로 직진하는 것보다 한 템포를 쉬고 다양한 접근들을 생각해보자. 더 효율적이고 간결한 해답을 떠올릴 수도 있다. 이렇게 다른 방법을 모색할 때 면접관이 따라갈 수 있게 think aloud, 내 생각을 입 밖에 내뱉는 게 중요하다. 혹시나 완전히 잘못 문제를 이해했거나 빗나간 접근이라면 면접관이 바로 잡아줄 수 있다. 


요다 면접관과 함께 다양한 시선으로 문제를 바라보는 루크


효율적인 데이터 구조를 선택하자

특정한 데이터 구조(data structure)를 사용할 때마다 그 이유를 말하고 사용하자. 자주 쓰는 데이터 구조(Array, Linked List, Graph, Tree, BST, Heap, Queue, Stack 등)의 장단점을 바로 말할 수 있을 정도로 준비를 해가자. 


시간/공간 복잡도를 빠르게 분석하자

프로그램을 다 작성하면 면접관이 아마 두 가지 부탁을 할 것이다. 첫 번째는 시간/공간 (time/space complexity)을 빅오 표기법(Big O Notation)으로 분석하기. 너무 매 라인 따지면서 길게 분석을 하는 것보다 코드가 작동하는 큰 그림을 보고 어림 잡는 것이 좋다. 


다양한 테스트 케이스를 생각해내자

두 번째로 작성한 코드를 테스트를 하기. 코드가 돌아가는 다양한 시나리오를 생각해야 한다. 조금 기술적으론 코드 커버리지를 늘릴 수 있는 다양한 input을 생각해내야 한다. 작성한 코드의 버그가 있는지도 함께 체크하자. 


다양한 input의 예시를 들자면–

베이스 케이스: null, 0, empty string, empty list 

평범한 입력값: 3, "abc", [2,5,3]

어려운 입력값: 191489, "afvaoij", [2,6,4,2,1]

특이한 케이스: –398, "AAa ? Ar", [3,3,1000,3,3,3,3]




온사이트 인터뷰


전화 인터뷰를 무사히 마친다면 지원자를 오피스에 초대하는 온사이트 인터뷰를 할 것이다. 여행 비용은 회사에서 내준다. 보통 3-5개의 1대 1 인터뷰가 있고 중간에 회사 직원이랑 점심을 먹을 기회도 준다. 인터뷰 주제는 알고리즘 질문을 넘어서 소프트웨어 디자인, 시스템, 그리고 태도(behavioral)에 대한 질문들까지도 한다. 전화 인터뷰보다 살짝 난이도가 있지만 비슷한 자세로 임하면 된다. 문제도 푸는 것도 중요하지만 소통능력을 보여주는 것에도 집중하자. 


컨디션 조절을 하고 긴장을 풀자. 엄밀히 말하자면 회사와 지원자는 동등한 위치에 서있다. 지원자는 회사의 선택을 받기 위해 마음을 졸이겠지만 회사도 똑같이 지원자의 선택을 간절히 원한다. 비행기표와 숙소비를 괜히 내주는 것이 아니다. 

온사이트는 회사가 지원자한테 어필하는 자리이기도 하다


그러므로 내가 이 회사랑 잘 맞는지 관찰하는 것도 중요하다. Work culture는 어떤지, 어떤 팀에서 어떤 역할을 하게 될 것인지, 회사 미래는 어떤지–일 뿐만이 아니라 Work life balance는 어떠한지, 도시 분위기는 어떤지, 회사 적응하기는 편한지 물어보는 것도 중요하다.

내가 즐겨하는 질문은 What brings you to work every day (무엇이 당신을 출근하게 만드나요)였다. 개개인이 이 회사의 어떤 부분에 열정이 있는지 알 수 있는 질문이다. 




취업의 마지막 관문인 온사이트에 대해서 조금 더 자세히 알아보자. 다음 편에서 나의 온사이트 경험에 대해 자세하게 서술할 예정이다. 


인터뷰 여행 갈 준비 끝

 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari