본문 바로가기

Develop

기술 면접 질문

최근 후배들을 대상으로 하는 면접 스터디에서 기술면접(CS면접) 보조를 하면서 질문을 몇 가지 준비해보았다.

 

  • 프로세스/스레드 구분

 

  • 34 + 5 = 41 설명해보기

 

  • /2, >>1 비교하기

 

  • call by value, call by reference 설명

 

  • 이중배열 탐색시 아래 두 코드는 성능 차이가 있을까?
for (int row = 0; row < n_rows; row++) {
  for (int col = 0; col < n_cols; col++) {
    // access arr[row][col] ...
  }
}
for (int col = 0; col < n_cols; col++) {
  for (int row = 0; row < n_rows; row++) {
    // access arr[row][col] ...
  }
}

 

  • 0.1 + 0.2 != 0.3 설명

 

  • 큐, 스택 비교

 

  • 트리 설명

 

  • 힙 설명

 

  • 해시테이블 설명
    • 해시충돌, 해시함수란?
    • 직접 해시함수를 하나 정의해보고 분석해보기

 

  • 주석을 참고하여 다음 함수를 완성하라
/**
 * Retrieves reverse of a string.
 * @example
 * reverse('abc') // 'cba'
 * reverse('123') // '321'
 * @param {string} str - String to reverse
 * @return {string} Reverse of str
 */
function getReverse(str: string) {
  // don't use loop
}
/**
  * Retrieves median of an array.
  * @example
  * median([2, 1, 7, 3, 0]) // 2
  * median([7, 0, 1, 6, -1]) // 1
  * @param {number[]} arr - Array of numbers
  * @return {number} Median of array
  */
function getMedian(arr: number[]) {
  // define return value by yourself when the number of elements is even
}

 

  • 위의 두 함수 모두 순수함수로 작셩하셨나요?

 

  • 다음은 하노이의 탑 이동 과정을 출력하는 함수다. 아래 함수와 동일한 출력을 내되 재귀를 사용하지 않는 새 함수를 구현하라.
void hanoi(int n, char from, char to, char aux) {
  if (n == 1) {
    cout << "Move disk 1 from " << from << " to " << to << endl;
    return;
  }
  hanoi(n - 1, from, aux, to);
  cout << "Move disk " << n << " from " << from << " to " << to << endl;
  hanoi(n - 1, aux, to, from);
}

 

  • 안정 정렬이란?

 

  • 정렬 알고리즘은 왜 다양한가?
    • 특정 상황에서 어떤 정렬 알고리즘을 사용할 것인가?

 

  • n + 1 problem 설명

 

  • 인스타, 페북같은 팔로우/팔로워 관계를 지원하도록 DB 스키마를 설계해보라. 팔로워에게 새 글 알림을 빨리 전파하고, 피드(팔로우의 새 소식을 볼 수 있는 스트림)를 빨리 로드하기 위해서 어떻게 설계해야 하는가?

 

  • 대칭키, 비대칭키(공개키) 구분 및 사용 예시 설명

 

  • REST API란?

 

  • HTTPS / HTTP 설명

 

  • 웹브라우저 주소창에 www.naver.com를 입력하면 발생하는 일

 

  • HTTP 요청을 보냈는데 응답이 안 오면 어떻게 되는가?
    • 언제까지 응답을 기다리는가? 그것은 누가 결정하는가?