
면접에서 아래와 같은 질문들이 나왔는데 애매하게 대답했던 것들을 다시 다뤄볼 예정
내 대답 : setTimeout같은 경우 이벤트 루프가 태스크큐에 setTimeout을 호출마다 여러번 쌓을 거 같고 setInterval의 경우 내내 점유할 것 같다.
✅ 정확한 답변 정리
setTimeout을 반복적으로 호출하면
콜백이 실행될 때마다 다음 setTimeout을 예약함.
실행이 끝난 후 다시 태스크 큐(Task Queue)에 등록됨.
따라서, 연속적으로 실행되지만, 실행 시간이 길어도 중첩되지 않음.
setInterval은 일정 주기마다 태스크 큐에 등록되지만
실행 시간이 길어지면, 다음 실행이 밀릴 수도 있음(중첩 가능).
따라서, 정확한 주기를 보장하지 못할 수 있음.
내 대답 : 선형 탐색을 앞에서 부터 순차적으로 탐색하는 거고 이중 탐색은 두 개를 바교하며 해나간다함 (그리고 덧붙여서 시간 복잡도가 n과 n/2로 차이날 거 같다고 답함)
시간 복잡도: O(n) (최악의 경우 배열의 모든 원소를 확인해야 함)
정렬 여부와 관계없이 사용할 수 있음.
작은 데이터셋에서 단순하게 탐색할 때 적합.
시간 복잡도: O(log n) (탐색 범위가 절반씩 줄어들기 때문)
탐색 과정:
배열의 중간값과 찾고자 하는 값을 비교.
찾는 값이 더 작다면 왼쪽 절반, 크다면 오른쪽 절반을 탐색.
이 과정을 반복하여 원하는 값을 찾거나, 없으면 탐색 종료.
데이터 크기가 커질수록 훨씬 빠른 탐색이 가능.
🚀 시간 복잡도 차이
✔ 선형 탐색(Linear Search) → O(n)
✔ 이진 탐색(Binary Search) → O(log n)
✔ sort()는 기본적으로 문자열 기준 유니코드 정렬을 수행함.
✔ 숫자 정렬을 하려면 비교 함수를 제공해야 함.
✔ 내부적으로 Timsort(또는 QuickSort, MergeSort)를 사용하여 O(n log n)의 성능을 가짐.
✔ 객체 배열을 정렬할 경우, 특정 속성을 비교 함수로 전달해야 함.
✔ 배열을 직접 변형하는 In-place 정렬 방식이며, 안정 정렬(Stable 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) → 같은 값을 가진 요소들의 순서가 유지됨.