일반적인 개발자 면접 절차
절차 | 설명 | 비고 |
---|---|---|
1. 전화 인터뷰 | 서류 통과 이후 기술적인 내용을 물어보는 인터뷰 | 생략 가능 |
2. 사전 과제 | 직무 면접 전 특정 문제를 해결할 수 있는지 확인하기 위한 과제를 내줍니다. 문제를 해결했는가? 추가 요구사항(좋은 설계 등)을 만족 했는가? 등으로 배점 | 생략 가능 |
3. 직무 면접 | 실제 개발자와 만나서 진행하는 대면 면접. 가장 많은 준비가 필요함. 알고리즘, 자료구조, 커리어 전반적으로 기술적인 내용을 확인함. 화이트보드 의사 코딩, 라이브 코딩을 할 수도 있음. 연차가 높다면 설계, 아키텍처, 고가용성, 확장성에 대해서도 준비해야함. | 보통 1회. 화상 미팅으로 대체 가능 |
4. 컬처핏 면접 | 보통 임원, 채용 담당자와 진행하며, 인성, 성격을 확인함. 최근에는 회사 문화에 잘 적응할 수 있는지가 중요함. 직무 질문이 나올 수도 있음. |
우리는 여기에서 직무 면접 즉, 일반적으로 코딩 인터뷰에 대해서 준비하는 방법을 이야기해 볼 예정입니다.
면접 대비표
흔히 나오는 문제 | Clip Pass 구축 | N Collabo! 운영 | Fasticket.com 리뉴얼 |
---|---|---|---|
가장 도전적이었던 것 | |||
실수 혹은 실패담 | |||
즐거웠던 것 | |||
리더십 | |||
팀원과의 갈등 | |||
남들과 다르게 행동했던 것 |
S.A.R. (Situation, Action, Result)
이야기 | 핵심 | 상황 | 취한 행동 | 결과 | 말하고자 하는 것 |
---|---|---|---|---|---|
Fasticket.com TPS 개선 | 1. 장애 분석 2. 성능 테스트 구축 3. 개선 -> 테스트 반복 | TPS 200 -> 6,000 | 성능 향상 | ||
N Collabo! DDD 적용 | 1. 기획/설계 2. Given-When-Then 3. 테스트 -> 구현 반복 | 도메인과 기술 분리 | 좋은 설계에 대한 고민 | ||
Clip Pass 구축 | 1. 교육 2. ADR 3. 목적과 우선순위 | Clip Pass 오픈 | 소프트 스킬 |
여러분의 단점은?
그냥 “열심히 야근하면 일합니다.”, “고집이 쎕니다.”는 ㄴㄴㄴㄴ
실존하면서도 인정할 수 밖에 없는 단점을 이야기하고 그것을 극복하기 위해 어떤 노력을 했는지 이야기함.
“세부사항을 깜빡할 때가 있습니다. 그로 인해 업무를 빨리 시작할 수 있지만 문제가 발생되기도 하죠. 그래서 유연한 설계를 지향하고, 다시 한 번 확인하는 습관을 지니고 있습니다.”
나 자신과 행동(무엇을 어떻게) 을 보여줘라
- 팀이 한 일이 아니라 내가 무엇을 했는가?
- 어떻게 해서 결과를 만들었는지 설명한다. S.A.R.
성공의 사례를 보여줘라
- 지원자는 구체적으로 인맥을 통해서 더 좋은 회사로 스카웃 되었다는 사실을 언급해서 A사에서도 꽤 일을 잘했다는 사실이 보임
- A사 웹서비스의 핵심 도메인을 출시했다, 확장성 있는 시스템을 설계했다든지 사례를 통해서 지원자의 능력을 어필
- 취미를 통해서 새로운 것에 도전하고 배우는 것을 좋아한다는 사실을 보여줌
알고리듬/자료구조
Big-O
시간&공간 복잡도 표현 시 사용하는 지표. 값이 낮을수록 시간 효율성이 좋다 = 더 좋은 알고리듬.
- Map에서 Key로 Value를 조회: O(1)
- 여기에선 1은 숫자 1이 아니라 상수를 뜻함.
- 배열의 전체 요소들을 순회: O(N)
- 배열을 2중 루프로 선회(ex: 버블 정렬): O(N2)
- A, B 2개의 배열을 2중 루프로 선회: O(AB)
- 단계를 거칠 때 마다 원소의 개수가 절반씩 줄어든다면: O(logN)
- 재귀함수: O(분기길이)
- O(2N), O(N2) 차이를 기억하자.
추가적인 규칙
- 상수는 무시된다.
- O(2N) -> O(N)
- 가장 큰 영향도를 바탕(지배적인 항)으로 단순화된다.
- O(N * N2) -> O(N2)
문제 풀이
- 우선 Brute Force로 풀어본다.
- BUD를 찾아서 제거한다.
- B: Bottlenecks
- U: Unnecessary Work
- D: Duplicated Work
- 적절한 자료구조 선택한다.
- 중간값을 찾으라는 문제가 있다면 2개의 Heap(완전 이진 트리) 자료구조를 사용한다.
- 수행시간이 최소인 경우를 찾는다.
- 요즘에는 메모리 복잡도의 중요도가 낮아졌다. 시간 복잡도를 최소화한 후 공간 복잡도를 줄일 수 있는 방법을 찾아본다.
- 어떤 경우에는 공간에 제약을 두는 경우가 있어서 그런 경우도 주의한다. 삽입 정렬이 좋은 예시
- 스스로 풀어본다: 머리로만 생각하지 말고 직접 풀어보면 답이 의외로 쉽게 보인다.
- 단순화 한다.
- 초기 사례에서 확장한다: 가장 쉬운 경우의 수 부터 확장하다 보면 규칙성이 보여서 풀 수 있다.
- 자료 구조: 적절한 자료구조는 문제를 쉽게 해결할 수 있게 도와준다.
- 코드의 재사용: 함수 추출, 템플릿(고차함수), 제네릭스
- 테스트를 만든다.
- 유연하고 튼튼한 코드: 문제 풀 때 이런 것 까지 해주면 추가 점수
- 오류 검사: 문제 풀 때 이런 것 까지 해주면 추가 점수(2)
- 포기하지 말자
- 어짜피 면접관은 여러분이 문제 푸는 과정을 확인하는 것이지, 문제를 다 해결하기를 기대하지 않는다.