Section4에서 배운 내용을 바탕으로 기술면접 준비를 하는 시간을 가졌다.
1. Hoisting과 Temporal Dead Zone이 어떻게 연관되어 있는지 설명하세요.
Temporal Dead Zone이란 let이나 const로 변수를 선언할 때 값 할당 이전에 접근할 수 없는 영역을 의미합니다. Javascript에서 변수는 Hoisting이 되어 코드가 실행되기 이전에 환경 레코드에 등록되는데 var 키워드로 선언한 변수는 등록과 동시에 초기화가 되기 때문에 바로 접근이 가능합니다. 하지만 let과 const로 선언한 변수 같은 경우 Hoisting은 되지만 초기화가 되지 않기 때문에 선언문을 만나기 이전까지는 접근할 수 없습니다. 이렇게 코드의 첫 부분부터 선언문을 만나기 이전까지 let과 const로 선언한 변수에 접근할 수 없는 영역을 Temporal Dead Zone이라고 합니다.
2. 리플로우와 리페인트에 대해 설명하세요.
리플로우는 레이아웃을 다시 계산하는 것을 말하고, 리페인트는 재결합된 렌더 트리를 기반으로 다시 페인트를 하는것을 말합니다.
자바스크립트 코드에서 DOM이나 CSSOM을 변경하거나 사용자가 브라우저 창 크기를 조절하는 등 기존 요소에 변경이 생기는 경우 DOM이나 CSSOM이 변경되고 다시 렌더 트리로 결합됩니다. 변경된 렌더 트리를 기반으로 레이아웃 조절과 페인트 과정을 다시 거치게 되는데 이 때 리플로우와 리페인트가 일어나게 됩니다.
3. 반응형 웹은 무엇이고 장단점에 대해 설명하세요.
반응형 웹은 브라우저의 크기나 디바이스 크기에 따라 실시간으로 반응하여 레이아웃이 변하는 웹 사이트를 의미합니다. 하나의 소스 코드로 모든 스크린에 최적화된 웹 사이트를 구축할 수 있는 방법 입니다.
반응형으로 웹을 구축하면 하나의 소스코드만 관리하면 되기 때문에 유지보수가 용이합니다. 그리고 여러 디바이스에서 하나의 URL을 사용하기 때문에 검색 엔진 최적화에 유리하다는 장점도 있습니다.
하지만 반응형으로 웹을 구축하면 특정 디바이스 전용으로 웹을 구성하는 것보다 웹사이트가 무거워져서 속도가 느려질 수 있습니다. 그리고 모든 디바이스나 브라우저 전부에 최적화를 할 수는 없어서 호환성이 떨어질 수 있다는 단점도 있습니다.
4. Virtual DOM이 무엇이고, Virtual DOM이 어떤 면에서 좋은가요?
React에서는 UI의 상태를 추적하고 변화가 일어나는 요소를 빠르게 업데이트 할 수 있도록 Virtual DOM을 사용합니다. Virtual DOM은 말그대로 가상의 DOM으로 웹에 변화가 일어나서 DOM에 변화를 줘야 할 때 실제 DOM을 바로 변경시키는 것이 아니라 Virtual DOM을 먼저 변화시키고, 이후 실제 DOM과 비교해서 변경이 있는 부분만 바꿔서 다시 렌더링 하게 됩니다.
Virtual DOM의 경우 실제DOM과는 다르게 javascript 객체로 이루어져 있어서 실제 DOM보다 훨씬 가볍고, 변경이 필요한 부분만 렌더링 하기 때문에 실제DOM을 조작하는 것 보다 훨씬 적은 리소스로 요소를 변화시킬 수 있습니다.
5. Stack과 Queue의 차이점은 무엇인가요?
Stack 과 Queue의 가장 큰 차이는 입력과 출력 방식입니다.
Stack의 경우 하나의 방향으로만 입력과 출력을 할 수 있기 때문에 가장 나중에 들어간 데이터가 가장 먼저나오는 후입선출의 구조를 가지고 있습니다.
Queue의 경우 입력방향과 출력방향 2가지를 가지고 있어서 먼저 들어간 데이터가 먼저 나오는 선입 선출의 구조를 가지고 있습니다.
6. Tree 와 Graph의 차이점은 무엇인가요?
Tree 구조는 Graph 구조의 일종이라고 볼 수 있습니다.
Graph는 정점과 간선으로 이루어져 있는데, 특별한 제한 없이 정점들이 간선으로 이어진 모든 구조는 Graph 구조라고 볼 수 있습니다.
Tree 구조 같은 경우에는 하나의 루트 정점이 존재하고, 루트 밑으로 여러 정점들이 간선으로 이어지는데, 각 정점들은 부모-자식 관계가 존재합니다. Tree 구조의 간선같은 경우 부모-자식만 이을 수 있습니다.
- 비순환 키워드넣기
7. 이진 탐색 방법에 대해 설명할 수 있나요?
이진 탐색은 리스트나 배열을 탐색방법 중 하나입니다. 이진 탐색은 정렬된 리스트나 배열에서만 사용 가능합니다.
요소가 자연수로 이루어진 오름차순 배열을 탐색 할 때를 예로 들자면 특정한 값을 찾기 위해서 배열의 중간부터 탐색을 시작합니다. 현재 탐색중인 요소가 내가 찾는 요소보다 작다면 현재 요소 이후의 요소들은 탐색 대상에서 제외하고, 다시 남은 요소들 중 중간지점을 탐색합니다. 탐색중인 요소와 내가 찾는 값을 다시 비교해서 필요없는 요소부분은 탐색 대상에서 제외하고 다시 남은 요소들중 중간지점을 탐색합니다.
이런식으로 한 번 탐색할 때 마다 탐색 범위를 반으로 줄여가면서 탐색하는 방법을 이진 탐색이라고 합니다. 일반적인 순차탐색의 경우 시간복잡도 O(n)이지만 이진 탐색을 활용하면 시간복잡도 O(logn)으로 탐색 시간을 줄일 수 있습니다.
'코드스테이츠' 카테고리의 다른 글
pre project 시작! (0) | 2023.04.15 |
---|---|
Section4 회고 (0) | 2023.04.10 |
4/7 일일정리 CRUD가 동작하는 Todo앱 만들기 (0) | 2023.04.07 |
4/6 일일정리 알고리즘(순열/조합,GCD/LCM, 멱집합) (0) | 2023.04.06 |
4/5 일일정리 알고리즘 Greedy,구현,DP (0) | 2023.04.05 |
댓글