IT,프로그래밍/Javascript& Typescript

Javascript 기술면접 질문 - 1

Javascript

특징과 구조에 대해 설명해주세요

  • 비동기로 처리한다.
  • 메모리 힙과 콜 스택으로 되어있다.
  • 싱글스레드 언어이다.
    • 하지만 브라우저 혹은 Node.js에 있는 이벤트 루프로 인해 비동기 처리가 가능하다.
    • 즉, 자바스크립트 엔진에는 이벤트루프가 존재하지 않는다.
    • 브라우저는 멀티스레드로 동작한다.

JS엔진 구조를 설명해주세요

  • 크게 메모리 힙과 콜스택으로 되어있다.
  • 메모리힙에는 실제 코드와 데이터를 할당받아져 있는 객체들이 존재하며 GC 작업을 처리한다.
    • 메모리 힙에는 new space와 old space가 존재한다. 그리고 code가 올라가는 code space, 큰 obejct가 올라가는 large object space등이 있다.
  • 콜스택에는 실행한 함수가 적재되며, 하나씩 실행이 된다.
    • 이때 비동기 작업이 발생을 하게되면, '브라우저 혹은 노드에 있는' 테스크 큐와 이벤트 루프를 사용하여 처리하게 된다.

이벤트루프를 설명해 주세요

  • 이벤트루프가 자바스크립트의 비동기 작업을 가능하게 해준다.
  • 자바스크립트의 비동기 작업이 일어날경우 (I/O, setTimeOut ...) 콜스택에서 실행되면, 라이브러리를 통하여 테크스큐에 쌓이게된다.
  • 이벤트루프는 지속적으로 자바스크립트의 콜스택을 바라보며 비어질때까지 기다린다.
  • 이후 자바스크립트의 콜스택이 비게되면, 테스크큐의 작업을 하나씩 콜스택에 밀어넣어주게된다.
  • 이로서 자바스크립트가 싱글스레드임에도 비동기처리가 가능한 이유다.

GC에 대해 설명해주세요

  • 메모리힙에는 new space와 old space가 존재한다. 그리고 code가 올라가는 code space, 큰 obejct가 올라가는 large object space가 있다.
  • 먼저 객체가 생성이되면 우선 new space에 저장이된다.
    • new space에는 to semi sapce와 from semi space가 존재한다.
    • 그중 to semi space에 우선적으로 저장이된다.
    • 어느순간 꽉차게되면, minor GC가 작동한다.
    • 그후 2번의 minorGC를 거친 객체는 old space로 이동된다.
  • old space는 2개의 space가 존재하는데, pointer와 data로 나뉘어져있다.
    • pointer space는 다른 객체를 참조하는 객체가, data space는 데이터만 가진 객체가 저장된다.
    • 어느순간 꽉차게 되면 major GC가 작동한다.

'IT,프로그래밍 > Javascript& Typescript' 카테고리의 다른 글

자바스크립트 This 간단 정리  (0) 2022.01.19
Javascript 기술면접 질문 - 1  (0) 2022.01.13
[TS] TS의 기초  (0) 2021.07.15