실리콘밸리 top5 회사 합격 후기

Xiaohan ZengI interviewed at five top companies in Silicon Valley in five days, and luckily got five job offers번역본입니다. 디자이너가 아닌 개발자 중심의 내용이지만, 취업 관문에 대한 설명이 흥미로워서 저자의 허락을 받고 번역하여 공유합니다. (직역보다는 의역 중심입니다)

지난 2017년 7월 24일부터 28일까지 5박 5일 동안, LinkedIn, Salesforce Einstein, Google, Airbnb, Facebook 다섯 곳을 합격했습니다.

엄청난 경험이었고, 노력이 결실을 거둔 것 같아서 이 내용에 대해 써보려고 합니다. 제가 어떻게 면접 과정을 준비했고, 5개 회사는 각각 어땠는지 공유하겠습니다.


어떻게 시작했나

저는 약 3년 동안 Groupon에 있었습니다. 제 첫번째 직장이었고, 멋진 팀멋진 프로젝트를 했습니다. 우리는 멋진 물건들을 만들고, 회사 내부에 영향을 미치고, 논문을 출판하는 일을 했습니다. 하지만 제 갈망에 비해 학습 속도가 줄어들고 있다고 느꼈고, 시카고의 소프트웨어 엔지니어로서 Bay Area(샌프란시스코 지역)의 많은 회사들에 마음이 끌렸습니다.

인생은 짧고 프로페셔널한 삶은 훨씬 짧습니다. 아내와 이야기를 나누고 지지를 확실히 받은 후에 저는 행동을 취하기로 결심했고, 저의 첫번째 커리어를 바꾸기로 결심했습니다.

준비

저는 머신 러닝 포지션에 관심이 있었는데, 5개 회사에서의 직함과 면접 과정이 약간씩 달랐습니다. 3개는 머신 러닝 엔지니어(LinkedIn, Google, Facebook), 하나는 데이터 엔지니어(Salesforce), 하나는 소프트웨어 엔지니어(Airbnb)였습니다. 따라서 코딩, 머신 러닝, 시스템 설계 등의 세가지 영역에 대해 준비해야 했습니다.

제가 풀타임으로 일하고 있었기 때문에 준비하는 데 총 2–3달이 걸렸습니다. 제가 세 영역을 준비한 방법은 다음과 같습니다.

코딩

저는 코딩 인터뷰가 기술자로서의 모든 자질을 평가하는 최상의 방법이 아니라는 것에 동의하지만, 짧은 시간 안에 여러분이 훌륭한 엔지니어인지를 알 수 있는 더 나은 방법이 없다는 것에 동의합니다. 제 생각엔 이건 여러분이 어떤 일을 하기 위한 필요악입니다.

저는 주로 Leetcode와 Geeksforgeeks를 연습했지만, Hackerrank와 Lintcode역시 좋은 곳이었습니다. 저는 몇 주 동안 일반 데이터 구조와 알고리즘을 검토하고, 익숙하지 않은 분야에 집중하고, 자주 발견되던 문제들을 마침내 해결했습니다. 시간 제약 때문에 하루에 보통 두가지 문제를 해결했습니다.

몇 가지 생각:

  1. 연습 만이 살길입니다.
  2. 하지만 Leetcode에서 600가 문제를 모두 해결하기보다는, 모든 종류에서 각각의 문제들을 철저히 다루면서 시간을 보내는 게 낫습니다. 저는 총 70개 정도의 문제를 풀 수 있었고, 충분하다고 느꼈습니다. 제 생각에 70개의 문제가 도움이 되지 않는다면, 여러분이 그것을 제대로 하지 못한다는 의미이고 700개를 푼다고 도움이 되진 않을 것입니다.
  3. 가장 어려운 것을 풀고 나면 나머지는 쉽습니다.
  4. 한 문제에 2시간 이상 시간이 걸리면 해결책을 확인하세요. 더 많은 시간을 투자하는 것이 소용 없을지도 모릅니다.
  5. 한가지 문제를 해결한 후 솔루션을 확인하십시오. 저는 종종 몇몇의 해결책들이 얼마나 스마트하고 훌륭한지 놀라곤 했습니다. (특히 Python One-liners)
  6. 면접관에게 쉽게 설명할 수 있는 가장 익숙한 언어를 사용합니다.

시스템 디자인

이 분야는 실제 근무 경험과 더욱 밀접하게 연관되어 있습니다. 시스템 설계 인터뷰에서 시스템 아키텍처, 객체 지향 디자인, 데이터베이스 스키마 디자인, 분산 시스템 디자인, 확장성 등을 포함한 많은 질문을 할 수 있습니다.

준비에 도움이 되는 소스가 온라인에 많이 있습니다. 저는 주로 시스템 설계 인터뷰, 대규모 시스템의 아키텍처 및 사례 연구에 대한 기사를 읽었습니다.

다음은 제가 실제로 유용하게 사용했던 몇가지 소스입니다.

시스템 설계 인터뷰는 많은 주제를 다룰 수 있지만, 문제에 접근하는 방법에 대한 몇가지 일반적인 지침이 있습니다.

  1. 먼저 요구 사항을 파악한 다음, 높은 수준의 디자인을 구축한 후, 마지막으로 구현 내역을 자세히 파고듭니다. 요구 사항이 무엇인지 알아내지 않고 곧바로 세부 사항으로 건너뛰지 마십시오.
  2. 완벽한 시스템 디자인은 없습니다. 필요한 것을 적절히 절충하세요.

당연히 시스템 설계 인터뷰를 위한 최선의 방법은 실제로 앉아서 시스템을 설계하는 것, 즉 여러분의 일상적인 작업을 하는 것입니다. 최소한의 작업을 하는 대신 여러분이 사용하는 도구, 프레임웍, 라이브러리를 자세히 살펴보십시오. 예를 들어, HBase를 사용하고 있다면, 단순히 클라이언트가 DDL을 실행해서 구매하도록 하는 대신, 읽기/쓰기 흐름과 같은 전반적인 아키텍처를 이해하고, HBase가 어떻게 일관성을 유지하는지, 마이너/메이저 압축이 무엇인지, 그리고 시스템에서 LRU 캐시와 Bloom Filter가 어디에 사용되는지를 이해하는 게 낫습니다. 여러분은 나아가 HBase를 Cassandra와 비교해서 디자인의 유사점과 차이점을 찾을 수도 있습니다. 그리고 나서, 여러분이 분산 key-value 스토어를 디자인하라는 요청을 받으면 당황하지 않게 됩니다.

Hacker Noon과 몇몇 회사의 엔지니어 블로그같은 많은 웹문서는 훌륭한 지식의 원천이자 오픈 소스 프로젝트의 공식 문서이기도 합니다.

가장 중요한 것은 여러분의 호기심과 겸손을 유지하는 것입니다. 스펀지처럼 주변의 것들을 모두 흡수하세요.

머신 러닝

머신 러닝 면접은 이론과 제품 디자인으로 나뉠 수 있습니다.

머신 러닝 연구에 경험이 없거나 ML코스를 잘하지 않았다면, 교재를 읽는 것이 도움이 됩니다. 통계학적 학습 요소와 패턴 인식, 머신 러닝과 같은 고전적인 것들은 훌륭한 선택이며, 여러분이 특정 분야에 관심이 있다면 그 분야에 대해 더 많이 읽으면 됩니다.

Bayes Theorem 같은 일반적인 공식적인 개념을 숙지하고, logistic regression이나 SVM처럼 유명한 모델 . 의사 결정 트리와 K-means 클러스터링 같은 간단한 모델을 구현하도록 노력하십시오. 이력서에 모델을 몇가지 넣는다면, 여러분은 그것을 철저하게 이해하고 그것의 장점과 단점에 대해 논평할 수 있어야 합니다.

ML제품 디자인의 경우, ML제품을 구축하는 일반적인 프로세스를 이해합니다. 제가 하고자 했던 것은 다음과 같습니다.

  1. 목표(예측, 권장 사항, 클러스터링, 검색 등)가 무엇인지를 파악합니다.
  2. 올바른 알고리즘을 선택히고 선택에 대한 이유를 설명할 줄 알아야 합니다. ( supervised vs unsupervised, classification vs regression, generalized linear model / decision tree / neural network 등)
  3. 사용 가능한 데이터를 기반으로 관련 기능을 선택합니다.
  4. 모델 성능에 대한 메트릭스를 선택합니다.
  5. 필요한 경우, 프로덕션 모델을 최적화하는 방법에 대해 설명합니다.

여기서 저는 계속해서 호기심과 배움의 중요성에 대해 강조하고 싶습니다. API를 사용해 Spark MLLIb나 XGBoost를 풀고 끝내는 것이 아니라, 확률 그라디언트 하강(Stochastic Gradient Descent)이 분산 처리에 왜 적합한지, XGBoost가 기존 GBDT 방식과 어떻게 다른지(예를 들어, 그것의 손실 기능이 특별한 것은 무엇인지, 왜 그것이 2차 미분을 계산해야 하는지) 이해할 수 있도록 합니다.

면접 과정

저는 LinkedIn의 HR 메시지에 응답하고 추천서를 요청하는 것으로 시작했습니다. 뒤에 다루겠지만 제가 스타트업에 실패하고 난 뒤, 몇달 동안 열심히 준비했습니다. 그리고 채용 담당자들의 도움으로, 저는 Bay Area에서 일주일의 꽉 찬 스케줄을 짤 수 있었습니다. 일요일에 도착한 뒤, 약 30여명의 전 세계 최고의 테크 회사들의 면접관들과 인터뷰를 했습니다. 그리고 운 좋게도 5곳 전부에서 취업 제의를 받았습니다.

전화 면접

전화 면접은 전부 비슷했습니다. 유일한 차이점은 인터뷰 길이였는데, LinkedIn 같은 회사는 한시간, Facebook과 Airbnb는 45분이었습니다.

시간 제약에다 기회는 보통 한번 뿐이기 때문에 숙련된 태도는 필수입니다. 문제의 유형을 신속하게 파악하고 높은 수준의 솔루션을 제공해야 합니다. 여러분의 생각과 의도에 대해 면접관에게 확실하게 전달해야 합니다. 이 때문에 초반에 시간이 좀 걸릴지도 모르지만, 의사 소통은 인터뷰에서 최우선적인 요소입니다. 면접관에게 솔루션만 줄줄 나열하는 듯한 태도를 보이지 마세요.

머신 러닝 포지션에 대해서는 일부 회사가 ML 질문을 할 것입니다. 그런 회사와 면접하게 되면 여러분의 ML 기술을 반드시 복습해둬야 합니다.

시간활용을 위해, 저는 같은 날 오후에 한시간 간격으로 세번의 전화 면접을 예약했습니다. 이것은 연속적으로 운 좋은 결과를 불러올 수도 있지만, 처음이 잘 풀리지 않으면 이후 면접에 영향을 줄 수도 있으므로 모두에게 추천하지는 않는 방법입니다.

동시에 여러 기업과의 인터뷰를 하게 되면 여러가지 이점이 있습니다. 저는 LinkedIn과 Facebook에서 첫번째 전화 인터뷰 후에 현장 면접에 참석했기 때문에 Airbnb와 Salesforce의 두번째 전화 인터뷰를 건너 뛸 수 있었습니다.

놀랍게도, 구글은 심지어 제가 다음 주에 네 곳의 현장 인터뷰로 스케줄이 잡힌 것을 알고 전화 면접을 건너뛰고 빈 시간에 현장 면접을 볼 수 있게 해주었습니다. 엄청 피곤할 것 같았지만, 솔직히 누가 구글 초대를 거절하겠어요!

현장 면접

LinkedIn

처음 본 현장 면접이었는데 Sunnyvale에서 인터뷰를 했습니다. 사무실은 매우 깔끔했고 사람들은 다들 전문가처럼 보였습니다.

세션은 각각 1시간이었습니다. 코딩 문제는 보통이었지만, ML질문은 다소 어려웠습니다. HR로부터 준비 자료가 들어 있는 이메일이 도움이 많이 되어서 전혀 예상못한 문제는 없었습니다. 실리콘 밸리에서 LinkedIn 식사가 최고라는 소문을 들었는데 제가 본 게 맞다면, 사실과는 살짝 거리가 있습니다.

마이크로소프트 사의 인수로 LinkedIn은 재정적인 부담을 덜었고, 이젠 정말 멋진 일들을 하는 것 같습니다. 비디오나 전문 광고 같은 새로운 기능들은 흥미롭습니다. 전문적인 개발에 주력하는 기업으로서, LinkedIn은 사내 직원의 성장을 우선시합니다. 광고 관련 팀과 피드 랭킹 팀 같은 여러 팀이 확장되고 있으므로 관심있다면 신속하게 움직이십시오.

Salesforce Einstein

스타 팀에 의한 스타 프로젝트. 이 팀은 상당히 새롭고 스타트업 같은 느낌이 났습니다. 제품이 Scala stack 위에 지어졌기 때문에 type safety은 여기서 실현됩니다! Optimus Prime library에 Matthew Tovbin(Scala Days Chicago 2017) 강연과 Leah McGuire(Spark Summit West 2017)의 강연이 있습니다.

저는 그들의 Palo Alto 사무실에서 인터뷰를 했습니다. 그들의 문화는 응집력 있었고 삶과 일의 균형이 훌륭했습니다. 모든 사람들은 그들이 하는 일에 대해 열정적으로 즐기는 모습을 보였습니다. 4개의 세션을 통해 다른 현장 인터뷰에 비해 시간이 짧았는데, 그곳에 더 오래 있고 싶은 마음이 들었습니다. 인터뷰 후 매튜는 심지어 저를 HP차고까지 데려다 주었습니다 :)

Google

절대적인 업계의 리더이자 사람들이 이미 알고 있는 것에 대해 더 말할 게 없습니다. 하지만 정말 컸습니다. 정말 진짜 정말 거대했어요. 거기서 친구들을 만나기 위해 20분이나 자전거를 탔습니다. 또한 밥 기다리는 줄은 너무 길었습니다. 개발자들에게는 영원히 좋은 장소일 겁니다.

저는 Mountain View 캠퍼스에 있는 한 건물에서 인터뷰를 했는데 정확히 어떤 건지 모르겠습니다. 정말 컸거든요.

면접관들은 모두 똑똑해 보였는데, 일단 그들이 말하기 시작하니까 훨씬 더 똑똑하더라고요. 이런 사람들과 함께 일하는 것은 매우 즐거울 겁니다.

구글의 인터뷰에 대해 특별하다고 느낀 것은 알고리즘 복잡성의 분석이 정말 중요하다는 것입니다. Big O 표기법이 무엇인지 확실히 이해하도록 하세요!

Airbnb

독특한 문화를 가지고 있고 실리콘밸리에 있는 가장 아름다운 사무실을 갖고 있는 무섭게 성장하는 곳. Experiences 같은 신제품이나 식당 예약, 최첨단 니치 마켓, 중국으로의 진출 모두 긍정적입니다. 위험 부담이 높고 빠르게 성장하는 곳, pre-IPO 경험을 원한다면 완벽한 선택입니다.

Airbnb의 코딩 면접은 약간 특이했는데 화이트보드 대신에 IDE에 코딩을 해서, 코드를 컴파일하고 올바른 답을 할 필요가 있었기 때문입니다. 어떤 문제들은 정말 어려웠어요.

그리고 특이한 cross functional 인터뷰를 합니다. 이것은 Airbnb가 문화를 진지하게 받아들이는 방법이며, 기술적으로 우수하다고 일자리가 보장되는 것은 아닙니다. 제 경우 두 번의 cross functional은 무척 재미있었습니다. 면접관들과 편한 대화를 나누었고, 세션이 끝날 즈음 다들 기분이 좋았습니다.

전반적으로 볼 때 Airbnb는 문제의 난이도, 긴 지속 시간, 독특한 cross-functional 인터뷰 때문에 제일 어려웠습니다. 여러분이 관심이 있다면, 그들의 문화와 핵심 가치를 확실히 이해하세요.

Facebook

구글에 비해 작지만 빠르게 성장 중인 자이언트급 회사입니다. 소셜 네트워크 시장을 지배하고 있고, AI와 VR에 대한 대규모 투자가 성행하면서 페이스북의 성장 잠재력은 더욱 커질 수밖에 없다고 생각합니다. 머신 러닝에 관심이 있다면 Yann LeCun이나 Yangqing Jia 같은 스타들이 있는 완벽한 장소입니다.

저는 옥상 정원과 오션 뷰가 있고, 저커버그의 사무실이 있는 건물 20에서 인터뷰를 했습니다.

저는 면접관들이 지시를 받아서 그랬는지 확신할 수 없지만, 제 솔루션이 맞았고 그들이 그걸 알아챘는데도 그것에 대한 명확한 사인을 받지 못했습니다.

정오가 되어서야 지난 4일간의 피로가 몰려왔고 두통이 있었습니다. 저는 오후 내내 세션 계속했지만 잘하지 못했습니다. 취업 제안을 받았을 때 정말 놀랐습니다.

일반적으로 저는 그곳 사람들이 회사의 비전을 믿고 그들이 만들어가는 것을 자랑스러워 한다고 생각합니다. 50조원의 시장 이상으로 성장하는 페이스북은 여러분의 경력을 위한 완벽한 장소입니다.

협상

이건 방대한 주제라서 이 기사를 참조하시기 바랍니다.

제가 중요하게 생각하는 것들:

  1. 프로페셔널
  2. 자기 능력치 알기
  3. 진심으로 팀과 프로젝트에 관심이 있을 것
  4. 인내심과 자신감 유지
  5. 단호하지만 예의바를 것
  6. 거짓말은 절대 안됨

Databricks와의 실패한 면접

모든 성공은 인터뷰를 포함한 실패로부터 시작되죠. 제가 저 회사들의 면접을 보기 전, 5월에 Databricks에서 면접을 실패했습니다.

지난 4월, Xiangrui는 저에게 Spark MLlib팀의 자리에 관심이 있는지 LinkedIn을 통해 연락을 했습니다. 저는 엄청 들떴는데 왜냐면 1)저는 Spark를 사용하며 Scala를 사랑했고, 2)Databricks 엔지니어들은 최고였고, 3) Spark이 빅데이터 세계를 혁신하고 있었기 때문입니다. 놓칠 수 없었던 기회였기 때문에 며칠 후에 면접을 보게 되었습니다.

기준선은 매우 높았고, 한 장의 사전 선별 설문지, 한 번의 전화 면접, 하나의 코딩 과제, 하나의 현장 면접까지 과정이 상당히 길었습니다.

저는 현장에 도착해서 보물섬이 보이는 샌프란시스코 시내에 있는 그들의 사무실을 방문했습니다.

제 면접관은 믿을 수 없을 정도로 똑똑하지만 엄청나게 겸손했습니다. 면접 내내 저는 가끔 한계에 부딪치는 것을 느꼈습니다. 형편없는 기술과 미흡한 준비로 완전히 망쳐 버렸습니다. Xiangrui는 매우 친절했고 인터뷰가 끝난 후에 자리를 옮겨서 재미있는 대화를 나누었습니다.

나는 며칠 후에 퇴짜를 맞았습니다. 예상했던 것이지만 그래도 며칠간은 좌절감을 느꼈구요. 그곳에서 일할 기회를 놓쳤지만, 그들이 계속해서 더 큰 영향력과 업적을 이루길 진심으로 바랍니다.

후기

  1. 인생은 짧고 프로페셔널한 삶은 더 짧습니다. 적절한 시기에 적절한 움직임을 취하십시오.
  2. 면접은 단순히 면접이 아닙니다. 네트워크를 구축하고 친구를 사귀기에 완벽한 기회입니다.
  3. 항상 호기심을 갖고 배우세요.
  4. 협상은 업무 만족도에 중요합니다.
  5. 일자리 제의를 받는 것은 최소한의 요구 사항만을 충족시킨다는 것만을 의미합니다. 최대 요구 사항은 없습니다. 계속 좋아지도록 하세요.

지난 5월의 첫 인터뷰에서 마침내 9월 말에 입사 제의를 수락할 때까지, 저의 첫번째 경력 이동은 길고 쉽지 않았습니다.

제가 계속 일을 하고 있었기 때문에 준비하기가 어려웠습니다. 몇 주 동안, 저는 새벽 1시까지 면접 준비를 하고 다음 날 오전 8시 30분까지 직장에 가기 위해 일어났습니다.

5일 내에 다섯 개의 회사에서 면접을 보느라 매우 스트레스를 많이 받았고 사실 위험부담이 크기 때문에, 여러분에게 빡빡한 일정이 없다면 저는 추천하지 않습니다. 하지만 여러가지 제안을 해야 할 경우 협상 과정에서 유리한 점을 제공해줍니다.

참을성 있게 저를 안내해 주신 분들께 감사를 표하고, 저를 인터뷰할 기회를 주신 모든 분들과 제안을 해주신 회사의 노고에 감사 드립니다.

마지막으로 부모님께 감사를 드리고, 아내가 제게 해준 모든 것과 딸아이의 따뜻한 미소에 감사합니다.

이 긴 글을 읽어 주셔서 감사합니다.

10/22/17