Java backend 코딩 인터뷰 준비

일반적인 개발자 면접 절차

절차설명비고
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)
  • 포기하지 말자
    • 어짜피 면접관은 여러분이 문제 푸는 과정을 확인하는 것이지, 문제를 다 해결하기를 기대하지 않는다.

Leave a Comment