Hello Everyone,
A few months ago, I went through virtual onsite interviews at Amazon for the SDE-2 position, but unfortunately, I got rejected. I thought I would share my experiences and insights to help you with your upcoming interviews.
This article is divided into sections covering my interview experience and tips/resources for preparing for mid-senior level software engineering roles.
어느 날, 아마존에서 소프트웨어 개발자 직책을 신청해보기로 생각했습니다. 그들의 채용 포털에 로그인하고 몇 개의 직업 목록에 지원했습니다. 며칠 후에는 인사 담당자가 나에게 연락하여 평가 링크를 보냈습니다. 전혀 예상하지 못했어요.
나의 면접 경험
아마존 평가 시험을 통과한 후, 인사 담당자는 한 달 후에 가상 온사이트 면접 라운드를 예약해 주셨습니다.
각 라운드는 약 1시간입니다. 라운드별로 25분은 저수준 설계/고수준 설계/코딩 작업에 할애되며, 25분은 아마존 리더십 원칙 질문에 할애되며, 면접자가 할 수 있는/논의할 수 있는 추가 질문을 위해 5~10분이 할당됩니다.
다음은 각 라운드에서의 나의 경험입니다.
1 라운드:
- 이번 라운드에서는 SDE-3가 나의 면접을 진행했습니다.
- 코드 확장성 및 객체 지향 프로그래밍 개념에 중점을 둔 저수준 디자인 라운드입니다.
- 질문은 일부 데이터 구문 분석 애플리케이션과 관련이 있습니다.
- 필요한 클래스, 함수 등을 구현하고 지시된 대로 작업을 수행했습니다.
- 나의 의견: 필요한 모듈을 코딩하는 동안 oops 개념을 설명해준 데로 잘 진행되었습니다.
2 라운드:
- SDE-2님께서 이번 라운드에서 면접을 진행했습니다.
- Leetcode의 수업 일정 문제와 비슷한 질문을 하셨습니다.
- 필요한 테스트 케이스로 솔루션을 구현했고, 면접관과 솔루션을 공유했습니다.
- 제 의견: DSA 문제를 필요한 테스트 케이스와 함께 해결했기 때문에 잘 진행된 것 같습니다.
라운드 3:
- SDM님께서 이번 라운드에서 면접을 진행했습니다.
- Netflix, Amazon Prime 등과 같은 비디오 스트리밍 서비스를 설계하는 것을 요청하셨습니다. 장치에 관계없이 자동 재생, 시청 기록 유지, 비디오 처리 및 배포 등 몇 가지 주요 기능에 초점을 맞춰 설계하라는 내용이었습니다.
- 내 의견: 시스템 디자인 질문에 대한 구조를 따라가려 했습니다. 필요한 구성 요소를 설명하고 트레이드 오프를 설명했으며 요구 사항에 설명된 기능을 생성했습니다. 그러나 리더십 원칙 질문에 대해서는 제 이야기를 잘 설명하지 못한 것 같아요.
Round 4:
- SDM님이 이번 라운드에서 나에게 면접을 봐 주셨어요.
- 그분은 두 가지 데이터 관련 질문 스트림을 비교하는 차이점에 대해 물어봤어요.
- 면접 중 문제 설명이 모호해서 이해하는 데 시간이 걸렸어요. 면접관이 의도적으로 문제를 모호하게 제시해 테스트하는 것일 수도 있겠다 싶어요. 면접자가 어떻게 모호한 문제를 다루고 해결하는지 능력을 테스트하는 것이겠죠.
- 제 의견: 문제를 이해하는 데 시간이 걸렸어요. 문제를 이해하기 위해 몇 가지 명확한 질문을 하기 위해 시간을 썼어요. 문제를 더 빨리 파악할 필요가 있었어요. 불행히도, 1-2개의 리더십 원칙 질문을 위한 충분한 준비를 하지 않아서 제대로 대답하지 못했어요.
모든 면접관들이 각 라운드마다 3-4개 이상의 Amazon 리더십 원칙 질문에 초점을 맞추었어요.
중급-상급 소프트웨어 엔지니어 면접을 잘 준비하는 데 도움이 되는 자료들
- Leetcode — 데이터 구조 및 알고리즘 관련 질문 연습하기
- Neetcode.io — 주제별 DSA 문제 해결을 위한 구조화된 목록 확인하기
- Alex Xu 시스템 디자인 자료 — Alex Xu의 시스템 디자인에 관한 책 확인하기. 이 책들은 매우 유용해요.
- Gaurav Sen의 시스템 디자인 강의/동영상 — 그의 설명이 정말 멋져요. 유튜브 채널을 꼭 확인해보세요.
- 프로그래밍 면접을 위한 Grokking the Low-Level Design 인터뷰 코스 — 객체지향 설계 및 분석에 관한 자료 — 로우-레벨 디자인 라운드를 위한 이 자료는 매우 유용해요.
- 리더십 원칙 [아마존 SDE 면접의 경우], 다음 자료들은 이야기 만들기 및 과거 경험을 바탕으로 설명하는 데 매우 유용해요. — 면접에서 승부하는 스토리텔링의 힘 — 아마존 리더십 원칙에서의 면접 — 리더십 원칙 관련 질문 모음
- 이전의 도메인 지식은 실무 경험을 바탕으로 확보하세요.
팁
데이터 구조 및 알고리즘 질문에 대한 아래 측면에 집중해 보세요
- 입력 (면접관과 입력 사항을 확인/명확히하세요)
- 출력 (면접관과 출력 사항을 확인/검증하세요)
- 데이터 구조 (문제에 기반하여 데이터를 어떻게 모델링할 수 있는지 명확히 생각해 보세요)
- 알고리즘 (문제를 해결하기 위해 어떤 사전 구축된 알고리즘이 사용될 수 있는지 분석하세요)
- 해결 방법 단계 (코드 작성 전에 접근 방식을 면접관과 확인 후 진행해 보세요)
- 시간 및 공간 복잡도 (접근법을 설명할 때, 시간/공간 복잡도를 면접관에게 전달하세요)
- 최적화된 해결책 (면접관이 최적화된 방법을 요청하거나 이를 따르는 경우, 시간/공간 복잡도를 최적화하거나 어떤 알고리즘을 사용해 보세요)
우리는 이러한 유형의 문제를 해결할 때 다음과 같은 한정된 데이터 구조와 알고리즘을 활용할 수 있습니다. 그러나 시간/공간 복잡성과 같은 제약 사항에 기반하여 필요한 문제 설명을 기반으로 그것들을 사용하는 것은 매우 까다로울 수 있습니다.
Low-Level Design
Please refer to the below flow map, which I have created to bring together all concepts for an overall perspective.
Feel free to go through the educational resource I provided above in the resource section and practice problem-solving by integrating Object-Oriented Programming, SOLID principles, and Design Patterns. Happy coding!
시스템 디자인
시스템 디자인 라운드에서는 아래 프로세스/구조를 따르려고 노력합니다. 필요에 따라 수정할 수 있습니다.
- 기능 요구 사항 (요구 사항을 묻거나 명확히 하세요)
- 비기능 요구 사항 (대기 시간, 가용성 등을 명확히 하세요)
- 용량 추정 (필요시 저장 용량, 계산 용량 추정을 진행해야 하는지 면접관에게 물어보세요)
- 데이터베이스 스키마/모델 디자인
- API 디자인
- 고수준 디자인 (요구 사항에 따라 고수준 디자인을 그립니다)
- 디자인 확장 (면접관의 요구에 따라 확장합니다)
- 필요한 경우 트레이드오프 (필요시 트레이드오프를 설명하세요)
행동 질문
Amazon의 경우, 회사 웹사이트에 언급된 16가지 리더십 원칙을 따라야합니다. 저는 자원 섹션에 언급한 링크들을 확인하면서 이 16가지 리더십 원칙에 대한 2-3가지 시나리오를 준비해보았습니다.
기타 회사의 경우, 아래 이미지를 참고하시면 도움이 될 것 같습니다. 이미지 출처: X
제 학습 내용
- 이전에 면접에서 행동 부분을 과소평가했었어요. DSA/LLD/HLD 과제보다 이러한 부분이 중요하다는 것을 깨달았어요. 인터뷰어는 실제 비즈니스 사용 사례에서 특정 상황을 효율적으로 다룬 경험이나 앞으로 어떻게 다룰지에 대한 아이디어를 얻을 수 있기 때문에 커뮤니케이션이 중요해요!
- 중급-시니어 레벨에서는 효율적이고 자신감 있게 후속 질문에 빠르게 대답해야 해요.
- 인생을 너무 진지하게 받아들이지 마세요 ;) 실수는 일어날 수 있어요. 결국 개선할 거예요. 빠르게 실패하고 그 실패를 다음 동작을 보완하기 위해 활용하세요.
- 동기부여는 일시적이에요. 행동이 동기부여를 만들어냅니다. 그 반대로는 안 돼요.
- 노력을 꾸준히하고, 저항력을 보이고, 끈질기고 목표를 달성하기 위해 끈질기 있어야 해요.
저는 내가 면접을 잘 봤다고 느꼈지만 몇 가지 LP 질문에 잘 대답하지 못했고, 마지막 라운드에서 코딩 문제를 잘 해결하지 못했어요. 그래서 제 거절의 이유가 될 수 있어요. 어쨌든, 낙담하지 않고 내 다음 면접을 위해 노력할 거에요. 다가올 면접이 예정돼 있다면 다시 도전하겠지요 :)
모두 학습하는 즐거움 느끼세요!
제 경험을 공유해주세요! 제게 도움이 될 수 있을 거예요. 감사합니다!