첫번째 글은 아래 링크에서 읽으실 수 있습니다.
https://steemit.com/kr/@asbear/1
올해 1월, 런던의 페이스북으로부터 지원할생각 있냐는 연락을 받았습니다. 스타트업으로 옮긴지 1년밖에 안된 시점인지라 매우 신중했지만, 가장 가고싶은 회사에서 연락이 오는데 거절하기는 너무나 아쉬웠습니다. 그래서 헤드헌터와 통화 후 포지션에 대한 설명을 듣고, 정식으로 지원 절차를 시작했습니다.
첫번째 인터뷰는 테크니컬 폰 인터뷰였습니다. 페이스북 런던의 AI팀인가에서 일하는 캠브리지 박사출신 엔지니어 (왠지 묻지도 않았는데 자기가 그렇게 밝히더군요)와 전화인터뷰를 진행하였습니다. 캠브리지 박사에 AI에서 일한다고 해서 무지 쫄았더니 상당히 쉬운 문제를 물어봐서 별 문제 없이 풀고, 이런저런 질의응답을 하다가 마쳤습니다. 전화를 끊자 마자, 온사이트에 초대받을것이라는 확신이 들었습니다. 인도발음이 섞인 여자였는데, 왜 자신의 학벌을 이야기했는지 아직도 이해가 잘 가지 않습니다. 며칠후 헤드헌터로부터 온사이트에 초대되었다는 연락을 받았습니다.
헤드헌터가 1달 이내에 아무때나 인터뷰 원하는 날을 고르라고해서 2주 후에 하겠다고 했습니다. 그리고는 예전에 페이스북 인터뷰를 준비하는 방식으로 준비했습니다. 일단 매일매일 https://leetcode.com/ 에서 10개 정도의 알고리즘 퀴즈를 풀었습니다. 그리고 나머지 시간은 scalable design question 준비에 시간을 쏟았습니다. 다른 회사들하고 유사하게, 페이스북은 알고리즘 문제와 디자인문제를 모두 물어보기 때문에 양쪽 다 준비를 철저히 해야 합니다. 페이스북, 구글, 아마존의 인터뷰를 어떻게 준비하는가에 대한 내용은 인터넷에도 많이 있지만, 제 경험을 녹여 잘 정리해서 따로 포스팅 해 보도록 하겠습니다. (언제가 될런지 ^^)
페이스북은 온사이트 인터뷰를 초대할때부터 정확한 스케쥴과 인터뷰어의 이름, 그리고 어떤 내용으로 인터뷰 하는지 정확히 알려줍니다. 그리고 링크드인에서 프로필 찾아보고 준비하라고도 이야기해 줍니다. 헤드헌터 말로는 제가 Senior 포지션이라서 design interview가 2개라고 하더군요. 저의 스케쥴은 아래와 같았습니다.
| 시간 | 이름 | 인터뷰 종류 |
|---|---|---|
| 10:00am | 인터뷰어 A | 기술대화 (tech chat) |
| 11:00am | 인터뷰어 B | 코딩 인터뷰1 |
| 12:00pm | 인터뷰어 C | 함께 점심식사 |
| 13:00pm | 인터뷰어 D | 코딩 인터뷰2 |
| 14:00pm | 인터뷰어 E | 시스템 디자인 인터뷰1 |
| 15:00pm | 인터뷰어 F | 시스템 디자인 인터뷰2 |
| 16:00pm | 리쿠르터 | 마무리 대화 |
Tech chat은 behavioural question이 주를 이루면서, 각각의 대답속에서 기술적으로 깊숙히 파고드는 인터뷰입니다. 아마존의 질문들과 비슷한데, 페이스북은 engineering manager와 한시간 내내 이 인터뷰를 진행합니다. 대화를 하다보면 화이트보드에 아키텍쳐를 그리면서 설명하게 되고, 점점 깊숙한 이야기로 들어갑니다.
코딩 인터뷰는, 다른 이야기는 거의 하지 않고 대략 5분정도 간단한 소개와 뻔한 behavioural question을 주고받고 바로 알고리즘 코딩으로 들어갑니다. 마지막 5분정도에 질의응답 시간을 가지고 마칩니다.
시스템 디자인 인터뷰는, 코딩 인터뷰와 마찬가지로 5분정도 대화를 나눈 후 아주 아주 심플한 조건을 던지면서 설계하라고 합니다. URL shortener를 만들어라 이런 식이죠. 처음에 준비 없이 이 인터뷰를 하게되면 정말 당혹스러운데, 준비를 많이 하고나면 이 인터뷰가 정말로 재밌습니다. 이거야 말로 돈주고도 못할 경험이죠. (사실 돈주고는 할수 있겠지만, 그런 긴장감이 없죠 ㅎㅎ)
중간에 인터뷰어가 아닌 페북 직원과 밥먹는 시간이 있는데, 이시간도 재밌습니다. 페북 런던은 구내식당이 끝내줍니다. 모두 무료고요.
출처: http://www.cosmopolitan.com/uk/worklife/careers/a37788/what-its-like-to-work-at-facebook/
이제부터는 온사이트 인터뷰 당일에 겪은 이야기를 풀어봅니다. 인터뷰 내용은 공개하지 않기로 서명 하여서 자세한 이야기는 할 수 없고, 여기에는 간략하게 적어보겠습니다.
테크 톡 인터뷰
왜 1년밖에 안되었는데 그만두려 하느냐 라는 질문으로 시작해서, 제가 일했던 것들에 대해 묻고, 기술적으로 파고들고를 50분 정도 했습니다. 그후에 마지막 10분은, 코딩 없는 알고리즘 퀴즈를 풀었습니다. 인터뷰는 순조로왔습니다. 폴란드 출신 개발자였는데, 얼마전에 엔지니어링 매니져로 전향한 친구더군요. 나이도 어리고 개발 경력도 짧고, 약간 거품이 많이 껴있다는 느낌을 받았습니다. 열심히 파고들기는 하는ㄷ, 날카로운 송곳같은 질문을 하지 못하고, 잘 모르지만 그냥 물고늘어지는 그런 식이었죠. 이런경우 질문이 어이가없어서 당황하고 발끈하기 쉬운데, 당황하지 않고, 기죽지 않고, 계속 자세히 자세히 설명하고, 아닌것은 아니라고 하면서 논쟁해야 합니다. 그게 잘 안되는데, 그냥 상세한 기술 잘 모르는 컨설턴트하고 대화한다는 느낌으로 가면 됩니다.
코딩 인터뷰 1
문자열 처리 관련된 알고리즘 코딩 인터뷰였습니다. leetcode 의 easy 중에서 조금 어려운 정도의 문제였습니다. 푸는데 별 문제는 없었는데, 코드가 길어져서 함수로 나누는 과정에서 파라메터를 몇개 빼먹는 실수를 했습니다. 다행히 바로 발견해서 고쳤고 결과적으론 아주 잘 끝났습니다.
코딩 인터뷰 2
트리와 링크드리스트가 섞인 알고리즘 코딩 인터뷰였습니다. 이 문제는 leetcode 의 쉬운 medium 정도 문제였던 것 같습니다. 한번 풀어봤던 문제여서 아이디어는 금방 캐취 하였으나, 약간 복잡한 면이 있다보니 한번에 코딩을 깨끗하게 하는것이 쉽지는 않았습니다. 시간이 모자랄 것 같아서 좀 당황하다가, 차차 정리하면서 마지막에 분석까지 잘 마쳤습니다.
디자인 인터뷰 1
Scalable web architecture 에서 특정 상황이 주어졌을 때 database access를 어떻게 최적화 할것인가로 대화를 시작하여, 상세한 부분까지 설계하는 문제였습니다. 이 인터뷰에서 결정적인 실수를 해서 떨어졌습니다. 제가 잘 알고있는 분야여서, 두가지 디자인을 제시 했고, 첫번째 디자인보다 두번재 디자인이 현실적으로 뛰어남을 설명한 후, 첫번째 디자인을 간략히 설명하고 있는데, 인터뷰가 첫번째 디자인에 대해서 끊임없이 질문을 했습니다. 처음에는 간단한 부분만 질문할 줄 알았더니 계속해서 질문을 했습니다. 자잘한것까지 계속 대답하다보니 시간이 훅 가버리더군요. 제가 애초에 눈치를 채고, "첫번째 디자인은 최적이 아니므로 스킵하고 두번째 디자인으로 넘어가겠다" 라고 했어야 하는데, 인터뷰어가 제 첫번째 디자인에 지대한 관심이 있다고 착각해서 거기에 푹 빠져 버렸습니다. 결국 두번째 디자인에대한 심도있는 대화를 하기전에 시간이 만료 되어 버렸습니다. 하지만 당시에는, 인터뷰어가 몹시 흡족해 한것처럼 느꼈고, 저도 아주 만족스럽고 재밌게 즐겼기 때문에, 무조건 피드백이 좋을것이라고 생각했었습니다.
디자인 인터뷰 2
해커가 되어 10000명의 사람들의 컴퓨터를 이용하여 대용량 처리를 하는 뭔가를 디자인하라는 내용이었습니다. 아주아주 재밌는 시간이었습니다. 제가 설계를 하고 토론을 주도하는 동안, 인터뷰어는 별로 질문을 많이 하지 않았고, 큰 태클도 걸지 않았습니다. 그런데 말없이 계속 노트북에 뭘 적길래, 인터뷰를 마칠 때 즈음엔 내가 뭔가 크게 놓친게 있나 하는 생각이 드는 인터뷰였습니다.
인터뷰를 마치고 집에 가는 길의 느낌은, "이번엔 100% 되겠다" 였습니다. 그만큼 모든 스테이지를 아주 잘 했다고 스스로 생각할 만큼 순조로운 인터뷰였습니다. 집에 오는길에 페이스북으로 출근하는 교통편까지 알아보고 김칫국 드링킹을 하며 먹고 마시며 주말을 보냈지요.
결과
즐거운 주말을 방탕하즐겁게 보내고, 화요일날 받은 피드백 전화는, "뽑지 않기로 했다" 로 시작했습니다. 페이스북은 피드백을 아주 상세하게 주는데, 전반적인 피드백은 아주 아주 좋았습니다. 걱정했던 디자인인터뷰2는 오히려 그중에서도 가장 피드백이 좋았더군요. 하지만 기대와는 정반대로, 디자인인터뷰 1의 피드백은 좋지 않았습니다. 인터뷰의 과정은 좋았으나 어프로치가 처음부터 잘못되었다는 피드백을 받았다고 알려주더군요. XX를 쓰는 디자인을 기대했는데 다른디자인을 설명한것이 문제라고, 인터뷰어의 피드백을 자세히 읽어줬습니다. 그때 그 인터뷰의 상황이 주마등처럼 스쳐지나가면서, 후회도 되고 좀 화도 나더군요. 분명이 두개의 디자인이있는데 첫번째것을 설명하고, 단점을 설명한후 두번째것을 본격적으로 설명하겠다고 밝혔음에도, 첫번째것에 시간 다 날리게 했으면서 그런 피드백을 주다니, 당혹스러웠습니다. 하지만 이내 그것도 아마도 테스트의 일부였다고 받아들였습니다. 그리고 나중에 그런상황이 오면 휘둘리지 않고 밀고나가야겠구나 생각했지요. 물론 제 커뮤니케이션 능력이 부족해서였던 것도 있다고 생각합니다.
사실 너무나 확신했던 합격이 불합격으로 돌아오고, 조금 가슴앓이도 했지만, 결과적으로는 많은것을 얻은 인터뷰였습니다. 이런 말이 있지요.
"What doesn't kill you makes you stronger"
덕분에 아마존 인터뷰(https://steemit.com/kr/@asbear/amazon)는 비교적 쉽게 느껴졌었네요. 페이스북 폰/온사이트 인터뷰를 앞두신 분들이 혹시 궁금한것이 있으시면 댓글로 질문 주시면 답변 드리겠습니다. 감사합니다.
Follow Me!