나의 2017년 외국기업 코딩 인터뷰 정리
들어가며
개인 사정으로 인해 2018년 2월이 다 끝나는 마당에 이제서야 2017년 실패담을 읊으려니 조금은 부끄럽습니다.
2017년 한해 인터뷰한 외국 회사들과 그 기록을 간단히 정리해 봤습니다. 인터뷰도 많이 보니까 점점 높은 단계까지로 가긴 합니다. 이 글의 목적은 2018년에 좀 더 나은 인터뷰를 위한 오답 노트 + 정보 공유입니다. 주된 Interview offer 경로는 Linkedin 과 Glassdoor 였습니다. Opportunity.com 을 통해서도 한 건 제의를 받은 적은 있습니다만 중간에 끊어져 버려서 기록할 내용이 없네요.
최근의 실리콘밸리 회사들은 Cover letter 있는 전통적 Resume 보다는 A4용지 2장 내외의 간결한 Curriculum Vitae를 선호하는 것 같습니다. 특히 MS 는 아예 포맷을 구체적으로 제시해 줍니다(좀 더 알아보니 Recruiter 에 따라 아닐 수도 있다고 합니다).
저는 목록에 있는 회사들 모두 .txt 형태로 CV 보냈고 6곳 모두 accept 되었습니다. 가로 80자, Monospace 12pt 기준으로 실제로 Print 해보니 딱 A4용지 2장 정도가 나오더군요. 제 CV 가 괜찮다는 말을 해준 Recruiter 도 있었습니다.
코딩 테스트에서 탈락했을 때는 '내 실력에 굉장히 문제가 있나...' 싶기도 했는데, 그날 인터뷰어가 제출하는 문제 빨도 큰 것 같습니다. Data structure / Algorithm 의 100% 를 커버 못하니 실력에 문제가 있다면 문제일 수도 있겠지만은... 그리고 페이스북이나 구글에서 제시하는 시스템 디자인 같은 면접은 실무에서도 즉시 활용 가능할 정도로 굉장히 영양가 있는 인터뷰라 생각합니다.
그리고 이건 변명 아닌 변명입니다만 실패 이야기밖에 없는 이유는 제가 어느 정도 나이도 먹고 이제 국내에서의 위치도 안정되다보니 반드시 해외에 취업하겠다는 각오로 준비하지 않아서 실패한 것 같습니다.
특히 아래 독일 같은 경우 시니어급의 연봉은 보통 EUR 50k-60k 정도인데 이정도면 상당한 고액 연봉이지만 연방세(약 42%), 거주비(원룸 기준 1년 약 EUR 6k), 공과금(1년 약 3k) 등을 제하면 생각보다 돈이 많이 남지는 않습니다. 특히 선진국일수록 전기, 수도, 가스 같은 요금이 한국보다 많이 비쌉니다. 이건 굳이 독일 뿐 아니라 현지에서 평생 눌러살 것이 아니라면 국내와 외국의 연봉 차가 크지 않은 한 수입 면에서는 외국에서 오래 일하는 것이 오히려 손해입니다.
6전 1승 5패 승률 15% 수준입니다만 조금이나마 해외 취업에 관심 있으신 분들에게 도움이 된다면 좋겠습니다. 대부분의 회사가 2차 인터뷰부터는 내용에 대해 NDA(비밀유지의무) 작성을 요구하는 경우가 많아 상세한 내용과 답변을 기록할 수 없는 점 양해 바랍니다.
3월 (Rakuten)
- 1차 합격 후 Rakuten HR 에서 직접 연락이 와서 2차 Aptitude test 진행
- 서류 제출 후 1차 코딩 테스트 시간 조정
- Linkedin으로 연락 받음
- 1차 - leetcode 사이트 문제 풀이
- 주어진 custom arithmetic operator를 사용해 input을 처리하는 로직 작성
- time/space complexity 는 반드시 O(n) 이 되어야 함
- Rakuten 채용 feedback 사이트에 self review 등록.
- 자기네 사장이 쓴 책 읽어봤냐는 질문이 여러모로 인상깊었음(꼰대 회사인가? 라는 느낌)
- 2차 - Aptitude test. Skype 로 진행
- 자신이 다른 candidate 보다 Rakuten 에서 어떤 점이 더 뛰어난지를 어필
- 대기업 ~ 스타트업 이력에서 왜 다시 대기업 재취업을 원하는가?
- 본인의 이력상 실패 경험담에 대해 서술
결과: 2차 탈락
- '우리 회사가 찾는 인재상에 적합하지 않다' 는 답변 메일 받음
- 사장이 쓴 책을 읽어봤냐는 질문은 왜 있냐고 물어봤는데 인터뷰어가 당황해 함
- leetcode 인터뷰가 정말로 좋은 엔지니어 채용에 도움이 된다 생각하냐는 질문이 면접관의 심기를 건드린 듯 함
- leetcode 같은 사이트는 문제를 위한 문제를 내는 사이트라 생각해 평소에도 좋아하는 스타일은 아님.
7월(microsoft)
- Glassdoor 프로필로 연락이 옴
- 서류 제출 후 SKYPE 비디오 인터뷰 시간 조정
- 1차 - 코딩 시험. 툴 이름은 기억안남.
- 문제1: loop 문 없이 주어진 문자열을 뒤집는 알고리즘 10분 이내로 설명 및 구현
- 문제2: 메모리가 제한된 상황에서 1억개의 데이터를 정렬하기. 데이터 하나씩 swap 하는데 1초가 걸릴 경우, 72000초(24시간) 내로 모두 정렬할 방법에 대해 논의(20분)
결과: 1차 탈락 ㅠㅠ
- 답을 내기 전에 사전 상황을 명확히 정의하고 시작해야 했음
- 인터뷰어가 탈락에 대한 친절한 피드백을 줌. 이 부분이 감동적
- 문제 두 개 모두 제한 시간 초과가 가장 탈락의 가장 큰 이유인 것 같음
- 비디오 인터뷰시에는 배경에 가급적 신경을 써야 한다는 조언을 받음. 가급적 흰 배경으로, 벽을 등지고 하는 게 좋다.
- 인터뷰 당시 방문이 열려있는 상황이었음
- 좀 더 준비해서 다음번에 다시 좋은 모습으로 다시 만나자는 연락 받음
9월(google)
- Linkedin 으로 연락 받음. 포지션은 순수 개발은 아니고, 안드로이드/임베디드 사후 지원 서비스 계열이었음
- 서류 제출 후 1차 Aptitude test 인터뷰를 40분간 전화로 진행
- 1차 Aptitude test 후 다시 구글 Recruiter 와 2차 Coding test 일정을 조정
- 1차 Aptitude test
- 이제껏 해 온 일들 중 가장 복잡하고, 많은 인원이 참여했던 일에 대해 경험담 서술
- 그 일을 하면서 무엇을 느끼고 배웠는지?
- 지금 너의 하는 일을 portion으로 설명해 봐라. 무슨 일 몇%, 무슨 일 몇% ?
- 내가 하는 말은 무조건 부정적으로 답하는 동료가 있을 때 어떻게 문제를 해결할 것인가?
- 코딩은 20% 미만, 80% 정도는 tech evangelist로서 일하는 포지션인데, 기존에 당신이 10년간 하던 창작의 즐거움을 상당수 버리면서까지 이 일을 할 수 있겠느냐?
- 2차 Live coding test. C++ 문제.
- reference swap 코드를 보고 이를 CPU instruction level 에서 메커니즘을 최대한 상세하게 설명하기
- event loop 만들고 O(n)으로 메시지 전달할 수 있는 메커니즘 구현하기
결과: 2차 탈락 ㅠㅠ
- 전화 인터뷰는 상대방의 표정이나 몸짓이 없기 때문에 훨씬 더 난이도가 높음. 따라서 조용한 곳에서 최대한 대화에 집중
- 주어진 상황을 명확히 정의하고 시작해야 함. 절대 문제에 Rush 하면 안됨.
- 짧은 시간 내에 효율적인 코드를 생산할 수 있어야 함. 일종의 대회 경험을 많이 쌓아야 할 필요를 느낌
- 코딩 시에 상황 정의를 명확하게 하고, 자신의 의도를 충분히 설명한 후 코딩해야 좋음
- 코딩 인터뷰어가 굉장히 무뚝뚝한 사람이라 피드백이 전혀 없었던 점이 아쉬움
- 간만에 하는 C++ 인터뷰여서 삽질을 굉장히 많이 함. 두 번째 문제는 반밖에 풀지 못함 ㅠㅠ
- 개인적으론 기대 많이 했던 인터뷰라 실망도 컸음
- 너와 경쟁하던 더 좋은 경쟁자가 좀 더 우리와 맞아서 그쪽과 계속 이야기를 진행한다는 위로 메일 받음
12월 (keepsafe)
- Linkedin으로 연락받음. 무려 CTO 인 Philipp Berner로부터 직접 요청 받음
- 비디오 채팅 사이트로 연락함. WebRTC 데모 페이지에서 사전에 웹캠 상태 점검
- 1차 Aptitude test, company introduction
- CTO 가 직접 진행
- 간단한 회사 소개. 이직의 목적. 영어 외에 구사 가능한 외국어에 대한 질문 (한국어, 영어, 스페인어, 러시아어, 일본어)
- 이거만큼은 누구한테도 안 질 자신이 있는 본인의 Strong point 하나를 어필해보세요 (개발자인데 여러가지 외국어를 할 줄 안다)
- 2차 코딩 테스트. CTO 직접 진행
- 어떤 주어진 문자열을 뒤집는 문제. 15분
- 간단한 RLE 알고리즘을 구현 (digit + string + delimiter) 30분. digit은 1자리만 있도록 input 이 조절됨
- digit 가 1자리일때에서 시작해, 2자리 이상인 경우에 대한 문제 풀이
- 3차 온사이트 인터뷰 (비디오 인터뷰로 대체)
- 거리 문제로 온사이트는 비디오 인터뷰로 대체
- 출근 문제도 있고 해서 시간 오전 9시 이전 3시간으로 조정해 달라고 함
- Interview fee 지급을 위한 은행 계좌 정보 전달. SWIFT Code를 포함해서 알려줘야 함(신한 SHBKKRSE)
- 아침 6시부터 9시까지 비디오 인터뷰. 이날 회사에서 꽤 힘들었음
- 너는 SF 오피스 말고 독일 Relocation 예정인데, 갑자기 독일에서 일하게 된다면 어떤 어려움을 예상할 수 있나? 어떻게 극복할 것인가?
결과: 최종 합격, 제안 거절
- CTO 비서가 약간 4차원인것 같음. 시간대를 계속 PDT 기준으로 잡아서 몇 번이나 정정해줌.
- 그쪽에 가장 최선인 시간이 한국 시간 기준 오전 6시 ~ 9시
- CTO 는 굉장히 친절한 사람임. 다만 독일인 답게 인터뷰 중 마음에 들지 않는 부분은 말 끝나자마자 바로 정정
- /2 로 나누는 Integer roundup을 Math.round(value / 2.0f) 로 구현한 부분을 도저히 이해 못하겠단 피드백 받음. 해당 부분 사전에 나도 이건 항상 헷갈리는 부분이라 틀리기 싫어서 명확하게 했고 실제로 이 부분을 구현할 땐 unit test 같은 걸 먼저 만들고 할 거란 의도는 설명했음. 근데 어떤 이유를 대건 이런 건 쪽팔리긴 한다 ㅠㅠ
- Java internal 은 String을 UTF-16으로 저장한다 했다가, No, UCS-2 fixed length. You’re wrong 이란 피드백을 받음. 나도 대강 알고 있던 부분이고, Surrogate 등을 설명하려면 UTF-16 이 맞는 것 같은데 괜히 시간 끌기 싫어서 "응.. 미안 내가 잘 몰랐던 것 같아" 라고 넘어갔음. 나중에 확인해보니 내가 맞긴 했지만 나도 명확하게 알지 못하던 부분이라 명확하게 반론하지 못한 점이 아쉬움
- Keepsafe 는 굉장히 유망한 신흥 스타트업인데 이 때문에 채용 절차가 아직 완벽하게 다듬어진 것 같진 않단 느낌을 받음
12월 (crossover)
- Linkedin으로 연락받음
- 1차 자기네 사이트 문제
- 1차 지필고사 - 테스트 시간 4시간
- Software engineering 일반의 문제 수준은 정보처리기사보다 좀 더 어려운 영어 버전 같은 느낌
- 각종 방법론들에 대한 약어에 대한 별다른 설명이 없기 때문에 관련 단어에 익숙하지 않으면 고생 깨나 할 듯. '이벤트드리븐 시스템을 SOA 구조로 설계하는 이유가 뭘까?' 같은 문제가 나온다.
- 유닛 / 통합테스팅 문제는 샘플 프로젝트 다운하고 로컬에서 실행한 결과를 리포팅하라고 하는데, test fail 의 원인과 이유를 기술하라 문제 5개는 모두 못 풀었음. test fail 이 나지 않았기 때문
- RxJava, Mockito, Retrofit2 같이 최신 프레임워크에 대한 질문도 대 놓고 함
- 소프트웨어 기초보다는 최신 기술을 얼마나 잘 알고 있는지 위주로 묻는 것 같았음
- 2차 전화 인터뷰
- 45분 예정이었는데 1시간 30분이나 걸림 (중간에 면접관이 10분 정도 자리를 비웠다)
- 인터뷰어가 준비를 제대로 하지 않아 굉장히 불쾌했음. 자기네 옆집이 공사 한다고 미안하다고는 했지만… 말이 잘 안들려서 몇 번씩 다시 묻다보니 시간이 두 배로 걸림
- 1시간 내내 안드로이드 internals 에 대한 질문과 답변
- Kotlin vs Java 에 대해 이야기해 보라고 함
- 3차 Aptitude test. 자기네들이 쓰는 비디오 컨퍼런스 전용 앱을 설치해야 하는데 linux 미지원이라 Mac 에서 진행
- 소프트웨어 퀄리티의 정의 및 측정, 개선 방안 설명
- 너의 어떤 점이 너를 Junior 가 아니라 Senior 로 만들어 주는가?
- 3차 적성 검사 후 질문 시간에 Crossover 같은 리모트 전문 기업에서는 업무량 측정을 어떻게 하냐고 질문함
- WorkSmart 라는 시스템 설치해서 업무량 측정한다고 답변 들음
- 이게 참 가관인게 굉장히 그럴듯한 말로 설명하고는 있지만 사용자의 screen 과 keyboard input을 중앙 관리시스템에 그대로 전송하는 앱이기 때문에 문자 그대로 Spyware 임.
- Agile 의 Time estimation / daily snippet / status report 같은 시스템은 운영하지 않는다고 함. 오로지 시스템에 찍힌 숫자만으로 업무 성과를 평가한다고 함.
- No paid holidays - Remote로 일하면 이게 당연하다는 투로 이야기 하는데 어이없었음
- 자사 제품 개발보다는 SI 외주가 주력인 업체인 것 같음
- '너네 Big brother 시스템 운영하는 것 같이 들림' 이라고 이야기함
결과: 3차 탈락
- 최신 라이브러리를 대놓고 물어보는 문제는 별로 마음에 들진 않았음. 마치 특정 기술에 익숙한 즉시 전력감만 뽑겠다는 느낌?
- 별로 아쉽진 않았고 면접관의 준비 부족 때문에 오히려 기분 나쁨
- 탈락 사유가 내 코딩 스킬 부족이라는 피드백이 왔는데 사이트 내의 채점 결과는 만점이었음
- 특정 정렬 문제가 문제라는 피드백을 받았는데 당시에 time complexity constraint 없는 문제여서 O(n^2)로 그냥 막 풀었으나 이 부분이 문제라고 함. "너네 문제가 틀렸어!"라고 말해주고 싶었지만 no-reply 이메일에 항의해봤자...
- 열받는 건 "너의 코딩 실력은 매우 기초적" 인것 같으니 코딩 연습부터 하라며 탈락 메일 끝에 친절(?)하게 코딩 기초 Youtube 영상을 링크로 보내줌. 사람을 조롱하는 느낌.
- 인터뷰 이후 Glassdoor 나 Quora 같은 사이트에서 기업 검색해보니 악평 일색이고 특히 Spyware 설치 부분에 대해 많은 사람들이 질색하는 것 같음
12월 (facebook)
- Linkedin 으로 연락받음
- Facebook 리쿠르터와 간단한 본인소개 및 인터뷰 일정 조정
- 온사이트 인터뷰 단계부터는 Facebook 의 candidate 페이지에 신상을 등록하면 여행 경비 및 숙소가 지정됨.
- 온사이트는 비디오로도 가능하다고 하는데 마침 12월에 연차휴가가 남아서-_- 그냥 여행하는 셈 치고 온사이트 가기로 함
- 1차 국제전화로 코딩테스트 (codepad.io 접속). Instagram 개발팀 사람이었음
- 문제 1: 주어진 숫자의 배열을 O(n) 시간에 탐색 및 정렬하기
- 문제 2: 매우 큰 데이터의 배열에서 원하는 값을 가장 빠른 시간에 찾는 방법을 생각하기. 문제 다풀고 난 뒤 Optimal answer: O(nlogn) 란 피드백 받음
- Android basics 3~4개.
- 2차 ~ 3차 싱가폴 온사이트 인터뷰. 약 5시간동안 진행. 4개의 Stage 로 나눠서 진행. 들어갈 때 전자기기/신분증을 안내데스크에 맡겨야 출입증으로 교환해줌.
- Stage 1: 시스템디자인
- 친구 목록의 온라인 상태를 표시하는 앱을 어떤 식으로 만들 것인지. API input/output 정의, 데이터 어떻게 캐싱할건지 등등
- Stage 2:코딩
- 주어진 숫자의 배열을 O(n) 시간에 정렬하기
- 여러가지 종류의 괄호가 있는 문자열의 괄호 갯수 balance 맞추기
- Stage 3: Aptitude test
- 이직하려는 이유
- 가장 힘들었던 일. 그리고 무엇을 얻고 무엇을 잃었나
- 죽어도 내 의견에 동의 못하는 동료와의 갈등 해결법
- 니가 우겨서 잘못한 일을 덮고 넘어갔는데 나중에 잘못이 밝혀질 경우
- 어떤 식으로 동료들의 신뢰를 회복할 것인지
- Stage 3: 코딩
- https://en.wikipedia.org/wiki/Shunting-yard_algorithm 을 이용한 계산기 구현 알고리즘 문제. Single stack 으로 문제 풀어보려고 시도하다가 못 품. 제한시간 15분
- 적성검사 도중 코딩 인터뷰가 갑자기 치고 들어와서 당황스러웠음. 이 때문에 더 초초해서 문제를 못 풀었던 모양 (면접관 퇴실후 5분만에 답 냈지만 이미 버스는 떠났고)
- Stage 4: 코딩
- Breadth-first 정책으로 트리 순회하기. 뭔가 Queue 를 써야 할 것 같다는 부분까지만 접근하고 그 이후는 실패
- 2개의 배열에 숫자가 들어있는데 이걸 한 개의 배열로 정렬하면서 합치는 알고리즘 문제.
- Stage 1: 시스템디자인
결과: 3차 탈락 ㅠㅠ
- 2주 이내에 답변 올 거라고 했는데 탈락 메일이 거의 한 달 뒤에 옴. 이미 포기 상태여서 그다지 실망도 크진 않았지만 아쉬웠음.
- 온사이트 코딩 문제에서 실수가 너무 많았다고 함. 어떤 부분을 원했고 내 대답이 왜 못 미쳤는지를 상세하게 설명해 줬음
- 리쿠르터나 인터뷰어들의 태도는 매우 훌륭하고 친절함
- 안드로이드 지원자만 4명이었는데 4명 중 마음에 드는 사람을 모두 뽑거나 아니면 애매한 경우 두 명을 내부적으로 경쟁 시키는 시스템인 것 같음
- 단 채용 담당자가 '넌 disqualified 된 사람이야' 로 결정하는 순간 응대 시간도 늦어지고 답변도 급 불친절해져서 막판에 기분 망침