/ INTERVIEW

SDE Job Interview 후기

정말 가고 싶었던 5대 테크 왕 중 한 회사와의 잡 인터뷰 후기.

불합격 하긴 했지만, 자질(?)보다는 운이 없었다라고 생각하며 다음을 위해 기록해 둠.

NDA로 인해 자세한 내용과 회사명을 소개할 수 없지만, 대충 짐작할 수 있지 않나 생각이 든다. ㅎㅎㅎ 전체 채용 과정은 대기업 답게 무난하고 깔끔 했으며, 프로세스가 정형화 되어 있었다. 제일 좋았던 점은 인터뷰 관련 비용을 모두 커버해 주는 것이고, 단점은 프로세스가 길고 마치 채용 공장에 다녀온 느낌? 또 한가지 잡설이지만 미쿡 대기업이라 하더라도 인간적인 실수가 정말 많으므로 중간 중간 확인을 해야 한다.

보통의 회사와 마찬가지로 입사지원 - HR인터뷰 - 온라인코딩 - 폰인터뷰(난 하지 않았는데, 온라인코딩 결과가 안좋으면 하는듯? 짐작이다) - 온사이트 인터뷰 순으로 진행 된다.

[코딩 인터뷰 준비]

제일 까다로운 코딩 인터뷰 준비는 다음 두 유투버의 도움을 가장 많이 받았다.

한달 동안, 무한 반복으로 시청 했으며 풀이 보다는 생각의 흐름에 집중 했다. 두분 다 미쿡에 거주하시는 분들로 승지니어는 현재 구글러이신듯하고, 리키님은 뉴욕에 거주중인듯… 난 시작을 승지니어 채널로 했는데, 후반부에는 리키님 내용을 반복해서 들었다. 이분 말이 느려서 속도를 1.75 나 2 배속으로 해놓고 들으면 꽤 많은 양을 한번에 볼 수 있어 좋았다.

다음으로 많이 참고한 내용은 릿코드에 있는 interview experience 섹션으로 지원 회사 / 지역 등 세분화해서 준비 할 수 있으며, 거의 매일 후기가 올라와서 실전 문제라 생각하고 풀었다.

코딩 인터뷰 중에 제일 까다로운 건 모두 아시다시피 Dynamic Programming인데, 솔직히 이건 실제 업무에도 그다지 도움 되지 않은듯 하여 미디엄에 있는 top-1- dynamic programming 아티클를 참고해서 준비 했고, 모르는 문제 나오면 틀리자고 생각했다. 근데, 위 두 유투버도 어느 정도 DP를 다루기 때문에 많은 부분이 커버 된다.

마지막으로 릿코드 문제 중 임의로 선정하여 하루 2-3개를 풀었다. 꼭 풀려고 노력하기 보다는 15분 내로 해결 안되면 Discussion 섹션으로 가서 제일 추천 많은 풀이 과정을 참고하였다. 여기서도 중요한건 풀이한 사람의 생각의 흐름을 내 머리에 복사한다는 느낌으로 답변을 숙지했다.

[디자인 인터뷰 준비]

나는 실제로 Big Scale의 시스템을 디자인 해본 적도 경험해 본적도 없어 이부분이 제일 문제였고, 실제 불합격의 요인이었다. 구글링을 해보아도 딱히 좋은 솔루션은 없고, 아래 사이트가 답이다라고 언급 하는 정도?? ㅎㅎㅎ

보고 나면, 어 그래!그래! 하지만 막상 설명을 하려면… 으…

개인적으로 위의 강의도 도움이 되었다. 둘 다 유료라 진입 장벽이 있지만, 연봉 20만불을 위해 이정도는 투자 하는 걸로 하자!!! ㅋ

[스크리닝 질문]

이미 말했다시피 난 온라인 코딩만 했다. 여기서 받은 질문은 2개이고 난이도는 초-중 이었다.

  • Two Sum 응용
  • Two Pointer 응용

풀이가 끝나면 영어로 설명을 적어야 한다. 근데 답만 제대로 나왔다면 크게 신경쓰지 않아도 된다.

[온사이트 인터뷰 질문]

  1. 온갖 버그로 가득한 클래스를 수정해서 완성 : 파일처리 및 어레이 처리 능숙도 체크, 최적화하라해서 마지막엔 해쉬맵으로 해결
  2. 바이너리서치트리에서 큰 숫자 k개 : inorder 순회 역순
  3. 그래프 문제 위상 정렬 응용 : 인바운드 체크
  4. 우버 시스템 디자인(바 레이저) : 개망했다고 말한것 ㅋㅋ

모두 화이트 보드에 풀이 해야 한다. 1번의 경우, 나는 C/C++/Python임에도 자바/C#으로 문제를 만들어서 왔다. 어떤 의도인지는 모르겠으나 언어를 초월한(?) 해결 능력을 보여달라는 것 같았다. ㅎㅎㅎ 말로 설명하면서, 모르는 API는 물어봐서 작성.

4번 우버 시스템 디자인은 사실 전날에도 리뷰 했지만, 실제 해보지 않은걸 뇌피셜로 설명한다는게 여간 힘든게 아니었다. 1시간을 그냥 어버버 하면서 보냈다. ㅠ.ㅠ 만일, 영어가 능숙하다면 구렁이 담 넘어 가듯 해볼 수 있었겠지만, 뭐… 그냥 아쉬웠다.

[질문에 따른 예상 솔루션]

릿코드를 많이 풀다 보면 대충 이렇게 정리가 되는 듯 하다.

  • 최대/최소 경우의 수 찾기: Dynamic Programming
  • 모든 경우를 구해라: 백트랙킹 or DFS
  • 최단거리: BFS or Heap/Prority Queue
  • o(logn)으로 최적화: 바이너리서치트리
  • o(1)으로 최적화: 해쉬맵
  • 어레이/리스트에서 한번 순회로 최적화: 해쉬맵 or 스택
  • 싱글 링크드 리스트 관련: 리버스 or walker/runner
  • 바이너리서치트리 관련: 리컬전 or 스택

[인터뷰 중 문제 받은 후의 생각하는 방법/방향]

  • 일단 이해가 가면, 잡단한 질문으로 최대한 시간 끌기. 최적화 하라는게 넘 짜증나서 ㅋㅋ 한번은 시간보다 일찍 끝내니까 백트랙킹 time complexity 찾으라고… 아놔.. -_-;;
  • 이해 안가면, 임의로 문제의 입력 값을 2-3 개 만들고, 그 문제의 출력 값을 물어보거나 예상 Output 찾아낸 후 솔루션 도출. 이 회사 뿐만 아니라, 지원했던 모든 회사의 모르는 문제는 이 방법으로 다 해결되었다.

[조언]

  • 항상 Time Complexity / Space Complexity는 물어본다. 리컬전의 공간 복잡도는 뭐? ㅎㅎㅎㅎㅎ
  • 큰 회사 지원 전에 반드시 작은 회사로 인터뷰 연습을 해본다. 보통 다시 지원하려면 1년 걸린다.
  • 여러 회사를 지원 해본 경험 상, 그 어떤 방법을 쓰더라도 솔루션은 도출해야 다음 스테이지로 넘어가는 것으로 보임.
  • 항상 최적화 하라고 물어본다. 때문에 처음에는 생각의 흐름을 설명하고 Worst Algorithm으로 문제를 해결, 다음으로 최적화 솔루션으로 다시 작성.
  • 화이트보드에 작성할 땐 천천히 하면서 바로 실행해 본다는 생각을 가지고 써야한다. 사진 찍어가는 경우도 있었음.
  • 뭐든 말로 설명해야 한다. 그냥 풀이만 하면 떨어짐. 다른 중견 테크 기업 지원 했을때, 2시간 동안 10문제 완.벽.히 다 풀었는데도 탈락했다. 복기 해보니, 솔루션만 설명하고 (ex. 백트랙킹 쓸꺼야) 문제 풀이 중 거의 말을 하지 않았다.
  • 영어 준비는 가능하면 많이 하자. 기본적인 CS Fundamentals는 다 영어로 설명 가능해야 한다. 더불어 여러 돌발 상황을 예상하고 답변을 준비해 두면 좋다.