ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 길고 길었던 구글 면접기
    개발 2019. 10. 23. 00:21

     

    구글 재팬(Google Japan) 면접을 봤다. 올 해 2월부터 시작해 최종 결과가 나온 7월까지 정말 쉴 틈 없이 달렸다.

    먼저 밝혀두자면 나는 총 5번, 9개의 면접을 봤다. 정말 길고 긴 프로세스였는데, 내가 좀 특이한 케이스였다.

    보통은 총 3번(phone screening, phone interview, onsite interview)의 면접으로 채용이 결정된다고 한다.

    준비 과정에서 영어/한글 자료 가리지 않고 닥치는대로 면접 후기를 찾아보았고, 생각보다 정리된 후기가 많지 않다는 사실에 놀랐다.

    (구글같이 세계적인 회사는 후기가 100개도 넘게 있을 줄 알았다.)

    구글을 꿈꾸는 누군가에 도움이 되기를 바라며 이 글을 남긴다.

     

    간단한 이력

    16.02 물리학과 졸업

    16.02 ~ 18.05 python backend 개발자

    18.05 ~ machine learning researcher/engineer

     

    Contact + Phone screening

    정확히 이 단계를 뭐라고 칭해야 할지 모르겠다. 간단하게 레주메를 내게 된 배경과 30분도 안되는 짧은 전화 면접에 관한 후기다.

    설날 연휴에 linkedin을 통해 Google Japan의 리쿠르터가 먼저 컨택을 해왔다.

    프로필을 보니 나에게 관심이 생겼다고 하며 careers.google.com에 올라와있는 JD 링크를 보내주었다. 관심이 있으면 레주메를 본인 메일로 보내달라고 했다. 머신러닝 엔지니어 포지션이었는데, search team에서 일하게 된다는 JD였다. 머신러닝 쪽으로 커리어를 계속 쌓아가기에 굉장히 좋은 기회라고 생각했다.

    부랴부랴 레주메를 정리해서 보냈고, 첫번째 phone interview가 잡혔다.

    첫 phone interview(라기 보다는 screening 정도가 더 맞는 표현인 것 같다)에서는 내 이력에 대한 질문과, CS에 대한 아주 기초적인 지식과 알고리즘에 대한 질문을 했다.

    난 이 때 알고리즘의 AL도 모르던 때라 리쿠르터에게 역질문을 많이 했다. 예를 들면 아래와 같은 대화를 주고받았다.

    리쿠르터: bubble sort로 sorting하면 time complexity가 어떻게 될까?
    나: bubble sort가 뭐야?
    리쿠르터: sorting을 할 때 이렇고~ 저렇고~ 한 방식을 이용하는거야
    나: 아.. 잠깐만! 생각해보니 time complexity는 O(블라블라) 정도 될 것 같아!

    그렇다.. 난 sorting이라는 것에 merge sort, bubble sort 등의 종류가 있는 것도 모르는 사람이었다. 어찌저찌 임기응변으로 대답을 잘 했고, 이 통화 이후에 1차 phone interview 일정을 잡았다.

     

    1차 phone interview

    몇 번의 메일을 주고받으며 선호하는 언어, 가능한 시간 등을 종합해 면접 일정을 정한다. 앞에서 얘기했던 것처럼 나는 algorithm, data structure에 대한 기반이 하나도 없는 상태라 공부 시간이 좀 필요했고, 면접 일정을 최대한 뒤로 미뤘다. 3주 정도의 시간이 주어졌었다.

    면접은 google hangout(화상통화)으로 진행되며, google docs 문서 링크를 공유해 실시간으로 코딩을 해야했다. 물론 docs 문서는 plain text라 syntax highlight나 자동완성 기능 따위는 기대하면 안된다.

    면접관과 서로의 이름 정도만 확인한 뒤 바로 문제를 낸다. 45-50분 정도 진행되며 algo, ds와 관련된 기초적인 문제가 나왔다. 

    팁을 주자면 1) 문제 정의를 정확히 확인하고 2) 예외처리를 잘 하며 3) 깔끔한 코드를 짜면 된다.

    하지만 이런 면접이 처음이었던 나는 매우 당황했고, 아주 쉬운 문제를 질질 끌며 다 풀지 못했다. 심지어 면접이 끝나고 제정신으로 5분만에 코딩까지 끝내버린 아주 쉬운 문제였다.

     

    역시나 결과는 불합격.

    하지만 리쿠르터는 hiring manager들이 내 이력에 아주 관심있어 한다고 언급하며 1년 뒤에 다시 면접보기 vs 이번에 면접을 한 번 더 보기 중 하나를 선택하라고 했다. 1년 뒤는 내가 어디서 무엇을 하고 있을지 모르기에, 나는 한 번의 기회를 더 달라고 했다. 나중에 보니 아주 좋은 선택이었는데, 보통 구글 면접에서 떨어지면 1년 정도 뒤부터 재지원이 가능하기 때문이다. 면접을 안 봤어도, 한 번 더 봤어도 나는 1년 뒤에 다시 지원이 가능하다.

     

    구글 면접에서 가장 좋았던 점은 리쿠르터가 나의 좋았던 점과 그렇지 않았던 점을 모두 언급한다는 것이다. 첫번째 인터뷰의 피드백은 communication, 문제 정의 능력, 예외처리 등이 좋지만 algo, ds가 너무 약한 것 같다는 것이다(사실 말만 잘하고 문제를 못 풀었으니.. 너무 당연한 피드백이긴 하다).

     

    기사회생으로 한 번의 기회를 더 가지게 됐고, 2차 phone interview 스케줄을 잡았다.

     

    2차 phone interview

    리쿠르터가 이번엔 시간을 가지고 제대로 준비하라며 필요한 시간을 말해달라고 했다. 1달이 필요하다고 했고, 그렇게 두번째 인터뷰는 1달 뒤로 잡히게 되었다. 저번 면접 준비 때는 책만 봤다면, 이번에는 coding interview university를 통해 체계적으로 이론 공부를 하고, leetcode를 통해 실전 연습을 했다.

     

    2차 인터뷰 문제도 그렇게 어렵지 않았다. 전통적인 algo, ds 문제라기 보다는 restful api와 연관된 algo 문제였다. 45분동안 연결문제까지 총 2개의 문제를 해결했고, 2차 인터뷰를 통과했다.

     

    전화로 2차 phone interview 합격을 통보받았고, 이후 메일로 onsite interview 일정을 조율했다.

     

    1차 oniste interview

    제목에 1차를 붙인 이유는, 맞다. Onsite interview 또한 두 번 봤기 때문이다. 자세한 얘기는 뒤에서 이어가도록 하겠다.

    Google Japan에 지원했기 때문에 일본에 가서 인터뷰를 보겠거니 하는 기대를 했지만, 기대는 기대에 불과했다!

    Onsite interview는 Google Seoul office에서 진행됐다. 역삼역에 위치한 사무실은 생각보다 더 좋았다!

    이 날은 오전부터 오후까지 총 5개의 interview를 진행했다. 구글 직원에게 물어보니 보통 onsite interview에서는 4-5개의 면접이 이루어진다고 한다. 1개의 coding/algorithm, 2개의 machine learning, 1개의 machine learning system design, 1개의 googlyness 면접이 있었고, 점심 시간에는 구글 직원 한 명과 편안한 분위기에서 식사를 했다.

     

    coding/algorithm 면접이 가장 처음이었는데, 긴장한 탓인지 그다지 어렵지 않은 recursive 문제를 결국 못 풀었다.

    machine learning쪽은 일 해본 경험도 있고 질문도 거의 기본에 충실한 것들이라 크게 어렵지 않았다. 해당 분야를 준비하는 사람이라면 기본 컨셉과 수학적인 부분에 초점을 두고 공부하면 좋다.

    googlyness가 의외로 어려웠는데, 정말 엄청나게 다양한 상황을 주고 내가 그 상황에서 어떤 선택을 할 것인지를 꼬리에 꼬리를 물고 물어본다. 나는 정말 소신있게 대답했는데, 피드백을 들으니 그 부분을 좋게 봐준 것 같다.

     

    onsite interview 결과 발표에는 1주일 이상이 걸렸고, 메일로 전화 약속을 arrange 한 이후에 통화로 결과를 발표했다. 이 때 리쿠르터가 바로 피드백을 준 것이 아니라 면접관들의 피드백을 모아 hiring committee 결과까지 받아야 했기에 조금 오래 걸린다는 얘기를 들었다. 이 과정에서 리쿠르터가 업데이트를 계속해서 해줘서 기다림이 덜 지루했다. hiring committee를 위해 현 직장의 처우와 관련된 정보를 작성하는 것도 이 과정에서 진행했다.

     

    hiring committee의 피드백은 machine learning 능력이 뛰어나고 googlyness에도 부합하는 인재상이지만 coding/algo 능력에 대한 추가 검증이 필요하다는 것이었다. 이렇게 나는 또 onsite interview를 보게 되었다.

     

    2차 onsite interview

    첫번째 onsite interview에서는 5개의 면접이 진행되었지만 2차에서는 2개의 coding/algo 면접만 봤다. 2차 면접을 보면서 1차 onsite 때 정신차리고 잘 봤어야 하는데... 하는 후회가 많이 들었다. 1차에 비해 꽤나 난이도 높은 문제들이 나왔다. 하지만 아예 해결을 못한 것은 아니기에 결과가 어떻게 나올지 가늠이 안 됐다. 

     

    2차 onsite interview 전에 리쿠르터의 배려로 구글 코리아의 한 엔지니어분과 mock up interview를 진행할 수 있었다. 이 과정에서 배운 점이 정말 많아 리쿠르터와 엔지니어 분께 이 글을 빌어 진심의 감사를 전한다.

     

    이번 interview의 피드백 역시 hiring committee로 전달되었고, 최종 탈락이라는 결과를 받게 되었다.

    모든 결과 발표는 통화를 통해 전달받았고, 메일로 한 줄 받는 것 보다 훨씬 인간적인 대우를 받는 기분이었다. 

     

    소감

    무려 약 반 년 간의 긴 프로세스를 경험하며 개발자로서 큰 성장을 했다. Bubble sort도 모르던 개발자는 heap을 이용한 효율적인 코드 짜기까지 할 수 있게 되었으며, 이번 경험이 아니었다면 아마 아직도 algo/ds 공부를 해야한다는 생각조차 못 했을 것이다. 

    구글이라는 IT 최고의 기업에 도전한 경험 자체가 너무나 소중했고, (사실 당시엔 힘들었지만 뒤돌아보니) 즐거운 시간이었다.

    미국 대부분의 SW 기업의 면접이 algorithm/data structure coding 베이스의 phone screening(interview) - onsite interview로 진행되는 것 같아 앞으로 다른 기업에 도전할 때도 좋은 밑바탕이 될 것 같다.

     

    구글 뿐만 아니라 이러한 코딩 인터뷰를 연습할 때 아래의 step을 따르면 조금 더 좋은 코드를 짤 수 있다.

    1. 문제의 조건 확인
    2. boundary condition 고려
    3. 코드 작성
    4. 코드 리뷰(실수 등 정정)
    5. 개선점 생각하기

     

    이 글을 보는 모든 이들에게 행운이 가득하길 바란다!

    '개발' 카테고리의 다른 글

    Nvidia GPU 섞어쓰기(3090 + 2080 Ti)  (0) 2022.10.26
    서버에서 jupyter 사용하기  (0) 2022.04.18
    Java의 type(타입)  (0) 2018.11.19
    생활코딩 Java 강의 필기  (0) 2018.11.18
    conda 가상환경 실행이 되지 않는 경우  (0) 2018.11.18

    댓글

Designed by Tistory.