면접 질문 리마인드

세나정·2025년 2월 20일

면접에서 아래와 같은 질문들이 나왔는데 애매하게 대답했던 것들을 다시 다뤄볼 예정

1. setTimeout 반복호출과 setInterval 단일 호출

내 대답 : setTimeout같은 경우 이벤트 루프가 태스크큐에 setTimeout을 호출마다 여러번 쌓을 거 같고 setInterval의 경우 내내 점유할 것 같다.

찾아본 정답

  1. setInterval의 경우 정확한 시간에서 오차가 발생할 수 있기 때문에 setTimeout을 쓰는 것을 권유함
✅ 정확한 답변 정리
setTimeout을 반복적으로 호출하면

콜백이 실행될 때마다 다음 setTimeout을 예약함.
실행이 끝난 후 다시 태스크 큐(Task Queue)에 등록됨.
따라서, 연속적으로 실행되지만, 실행 시간이 길어도 중첩되지 않음.
setInterval은 일정 주기마다 태스크 큐에 등록되지만

실행 시간이 길어지면, 다음 실행이 밀릴 수도 있음(중첩 가능).
따라서, 정확한 주기를 보장하지 못할 수 있음.

2. 선형 탐색과 이중 탐색의 차이

내 대답 : 선형 탐색을 앞에서 부터 순차적으로 탐색하는 거고 이중 탐색은 두 개를 바교하며 해나간다함 (그리고 덧붙여서 시간 복잡도가 n과 n/2로 차이날 거 같다고 답함)

찾아본 정답

  1. 선형 탐색(Linear Search)
    배열의 첫 번째 요소부터 마지막 요소까지 순차적으로 탐색하며 원하는 값을 찾는 방식.

시간 복잡도: O(n) (최악의 경우 배열의 모든 원소를 확인해야 함)
정렬 여부와 관계없이 사용할 수 있음.
작은 데이터셋에서 단순하게 탐색할 때 적합.

  1. 이진 탐색(Binary Search)
    정렬된 배열에서만 사용 가능하며, 탐색할 범위를 절반씩 줄여가며 원하는 값을 찾는 방식.

시간 복잡도: O(log n) (탐색 범위가 절반씩 줄어들기 때문)

탐색 과정:
배열의 중간값과 찾고자 하는 값을 비교.
찾는 값이 더 작다면 왼쪽 절반, 크다면 오른쪽 절반을 탐색.
이 과정을 반복하여 원하는 값을 찾거나, 없으면 탐색 종료.
데이터 크기가 커질수록 훨씬 빠른 탐색이 가능.

🚀 시간 복잡도 차이
✔ 선형 탐색(Linear Search) → O(n)
✔ 이진 탐색(Binary Search) → O(log n)


3. JavaScript sort() 메서드 내부 동작

✔ sort()는 기본적으로 문자열 기준 유니코드 정렬을 수행함.
✔ 숫자 정렬을 하려면 비교 함수를 제공해야 함.
✔ 내부적으로 Timsort(또는 QuickSort, MergeSort)를 사용하여 O(n log n)의 성능을 가짐.
✔ 객체 배열을 정렬할 경우, 특정 속성을 비교 함수로 전달해야 함.
✔ 배열을 직접 변형하는 In-place 정렬 방식이며, 안정 정렬(Stable Sort)을 보장함.

찾아본 정답

JavaScript sort()의 내부 동작

JavaScript 엔진(V8 등)은 Timsort 또는 QuickSort, MergeSort 등의 하이브리드 정렬 알고리즘을 사용함.

시간 복잡도:
최선 / 평균: O(n log n)
최악: O(n log n) ~ O(n²) (Timsort는 안정적이지만, QuickSort는 특정 케이스에서 O(n²) 가능)
정렬 방식:

기본적으로 in-place 정렬(배열을 직접 정렬, 추가 공간 사용 X)
안정적인 정렬(Stable Sort) → 같은 값을 가진 요소들의 순서가 유지됨.

profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글