면접 준비
-
[면접 준비] BigO 설명하기면접 준비 2024. 7. 31. 09:55
학습 키워드: BigO, time complexity 2024-07-31 면접 카타 질문BigO에 대해 설명해주세요: 프로그래밍에서 BigO는 시간복잡도 및 공간복잡도를 나타내는 표기법입니다. 시간 복잡도는 코드가 실행되고 완료되기까지 걸리는 시간으로 입력 값의 길이나 크기에 따라 프로그램이 실행되는 시간이 얼만큼 변화하는지를 말합니다. 일반적으로 worst case scenario를 가정하여 작성하게 되는데, 예를 들어 2D 배열에서 원하는 값을 찾는 함수가 있을 때, 최악의 케이스에서 배열의 모든 index를 탐색하게 된다면 이 함수의 BigO는 O(n^2)으로 표기합니다. Binary Search Tree 처럼 worst case scenario가 주어진 input을 모두 탐색하지 않는 경우 O(l..
-
[면접 준비] sync vs async, blocking vs non-blocking, async vs non-blocking 차이 설명하기면접 준비 2024. 7. 31. 09:37
학습 키워드: sync, async, blocking, non-blocking 2024-07-31 면접 카타 질문동기와 비동기의 차이, 블락킹과 논블락킹의 차이, 비동기와 논블락킹에 차이에 대해 설명해주세요: 동기는 모든 작업이 순차적으로 실행되며, 한 작업이 종료될 때 까지 다른 작업을 실행하지 않는 것을 말합니다. 비동기는 앞선 작업의 종료를 기다리지 않고 다음 작업이 동시에 실행되는 방식입니다. Node.js에서 비동기 함수는 Libuv를 통해 커널의 비동기 함수로 처리되어 이벤트 루프에 콜백으로 등록됩니다. 블로킹과 논블로킹의 핵심 차이는 코드의 실행 제어권을 다른 함수에 넘겨주느냐 아니냐로 갈리는데, 이름에서 알 수 있듯이 블로킹은 제어권을 넘겨줘서 다른 함수가 실행되는 동안 실행을 멈추게 됩니..
-
[면접 준비] Node.js의 Libuv 라이브러리 설명하기면접 준비 2024. 7. 30. 09:58
학습 키워드: Node.js, Libuv 2024-07-30 면접 카타 질문Node.js의 libUV 라이브러리에 대해 설명해주세요: Libuv 라이브러리는 C언어로 작성된 라이브러리입니다. 핵심이 되는 두 가지 기능으로는 이벤트 루프와 uv_io가 있습니다. 이벤트 루프는 6개의 페이즈로 나뉘어있고, 라운드 로빈 방식으로 각 페이즈를 순회하며 non-blocking 작업을 담당합니다. uv_io는 OS 커널이 지원하는 비동기 함수 호출을 통한 비동기 작업의 처리와, worker thread를 이용하여 커널이 지원하지 않는 작업이나 파일 시스템 관련 작업 및 blocking 작업 처리를 담당합니다. 매 작업 종료 시 작업의 종류에 따라 이벤트 루프의 알맞는 위치에 callback을 등록하기도 합니다. ..
-
[면접 준비] Node.js: event loop란?면접 준비 2024. 7. 30. 09:16
학습 키워드: Node.js, event loop 2024-07-30 면접 카타 질문Node.js의 이벤트 루프란 무엇이고 왜 필요하며 어떻게 작동하는지 아는 만큼 설명해주세요: Node.js는 single-theaded 기반으로 동작하는데, 단일 thread가 가지는 단점을 보완하기 위해 I/O 작업의 처리에 비동기 논-블로킹 방식으로 동작하는 이벤트 루프를 사용합니다. 이벤트 루프는 멀티 쓰레드로 동작하는 시스템 커널에 I/O 작업을 넘겨주고, 작업이 백그라운드에서 처리되어 완료되면 처리 결과가 다시 Node.js로 돌아와 poll queue에 callback의 형태로 추가된 뒤 동기적으로 처리됩니다. 이벤트 루프에는 여러 페이즈가 존재합니다. 먼저 Timer 페이즈는 setTimeout과 setI..
-
[면접 준비] Node.js: single-threaded, non-blocking, asynchronous 기반 JS 런타임면접 준비 2024. 7. 29. 09:43
학습 키워드: Node.js 2024-07-29 면접 카타 질문Node.js는 single-threaded 기반 JS 런타임입니다. 이에 대해 아는 만큼 설명해주세요: 'Node.js는 single-threaded 기반 JS 런타임이다' 라는 말은 Node.js를 이용하여 작성된 JS 코드는 단일 main thread 위에서 동작한다는 뜻입니다. Thread가 하나이기 때문에 개발 시 동시성 문제에 대해 고민할 필요가 없어 코드 작성이 쉬워지는 장점이 생깁니다. Node.js는 non-blocking, asynchronous 기반 JS 런타임입니다. 이에 대해 아는 만큼 설명해주세요: Node.js는 이벤트 루프라는 것을 통해 I/O 작업을 시스템 커널에 넘겨 async / non-blocking 방식으..
-
[면접 준비] 깊은 복사, 얕은 복사면접 준비 2024. 7. 26. 09:26
학습 키워드: deep copy, shallow copy 2024-07-25 면접 카타 질문깊은 복사와 얕은 복사의 차이는 무엇이고 JS에서 각각을 구현하는 방법은 어떻게 되는지 설명해주세요: 얕은 복사는 각 값의 주소를 복사하는 것을 말하고, 깊은 복사는 복사하는 값을 새로운 메모리에 할당하여 완벽하게 별개의 객체를 만들어내는 것을 말합니다. JS에서는 JSON.stringify()로 원본 객체를 문자열로 치환한 뒤 다시 JSON.parse()를 사용하여 전혀 다른 메모리를 참조하는 깊은 복사가 완료된 객체를 얻을 수 있습니다. 얕은 복사의 경우 단순하게 objA = objB의 구조로 복사하면 되는데, nested object의 경우 spread 문법을 사용하면 객체의 키는 별도로, 키의 값은 얕은 복..