본문 바로가기

개념정리/기술면접대비

[모의면접 2차]

[자료구조 및 알고리즘]

Array vs LinkedList

Stack and Queue

Tree
Binary Tree
Full Binary Tree
Complete Binary Tree
BST(Binary Search Tree)

Sorting Algorithm에서 stable 하다는 것은 무엇을 의미하나요?
Sorting Algorithm이 가짓수가 많은데 그 이유가 무엇일 것 같나요?
Quick sort에 대해서 설명해 줄 수 있나요?

 

[OS]

프로세스와 스레드의 차이

프로세스는 커널의 관리 하에 실행중인 프로그램을 의미한다. 프로그램 수행에 필요한 CPU 사용 정보 (Program Counte, register set), 메모리 자원(code, data, heap, stack), 커널 스택을 독립적으로 할당받는다.

스레드는 프로세스를 수행단위로 나눈 것이다. 메모리 자원을 독립적으로 할당받는 프로세스와 달리 stack영역과 CPU 사용정보만을 독립적으로 할당받으며 나머지 메모리 영역(code, data, heap)은 프로세스의 영역을 공유한다.

 

스케줄러의 종류

long-term : 상대적으로 빈도수가 낮다. job 스케쥴링에 사용되어 다중 프로그래밍의 정도를 결정한다. 

mid-term : 중간정도의 빈도로 일어남. 메모리 할당, page swapping에 사용됨.

short-term : 가장 빈번하게 일어남. 프로세스 스케쥴링에 사용됨.

 

CPU 스케줄링 기법

FCFS - 비선점 방식. 먼저 ready queue에 도달한 순서대로 CPU를 할당한다. 프로세스의 수행이 다 끝나고 스스로 CPU를 반납할 때 까지 CPU를 강제로 회수 할 수 없다. 수행시간이 긴 하나의 프로세스가 CPU를 독점하는 문제가 있다.

RR - 선점방식, FCFS에 time slice 기법을 추가했다. 선착순으로 CPU를 할당하되 일정한 time quantum을 지정하고 지정한 시간이 끝나면 다시 ready queue에 가서 대기하게 한다. 특정 프로세스의 독점을 방지하고, 전반적인 Response time이 좋아진다. 하지만 빈번한 switching으로 인한 context switching 오버헤드가 크다.

 

프로세스 생성 과정에 대해서 설명해보세요

Disk에 저장된 프로그램 코드가 실행되어 커널에 등록된다. created 된 상태는 아직 메모리 영역을 할당받지 못 하고 PCB만 생성해서 가지고 있음 

그 후 admitted되면 메모리 영역을 할당받고 ready상태가 된다. 이 상태에서는 CPU 자원만 할당받지 못 한 상태이다.

이걸 물어보는 게 아닌 것 같음... new fork exec?

 

 

크롬 탭이 프로세스인지 쓰레드인지 설명해보세요

크롬 아키텍쳐는 여러 단위로 프로세스를 쪼갠다.

대표적으로 브라우저 프로세스, 렌더러 프로세스가 있다. 그 외 플러그인, 확장 프로그램, GPU 프로세스 등이 있음.

브라우저 프로세스는 브라우저 인터페이스와 네트워크, 스토리지 I/O를 담당한다. 이는 ui 스레드, 네트워크 스레드, 스토리지 스레드로 나뉘어 각각의 임무를 수행한다.

렌더러 프로세스는 크롬의 탭마다 독립적으로 할당된다. 이 때 탭에 표시된 페이지 내에서 iframe을 사용하고 있다면 iframe 내부의 사이트 당 또 새로운 렌더러 프로세스가 할당된다. 

 

탭, 사이트마다 독립된 프로세스를 가지므로 하나의 탭에 에러가 발생해도 나머지는 영향을 받지 않는다. 또한 사이트당 렌더러 프로세스를 독립적으로 할당하므로 프로세스의 권한을 제어할 수 있고, 웹보안 및 격리에 유리하다.

단점은 메모리 점유율이 커진다. 스레드라면 공통 자원을 공유할 수 있지만 프로세스는 각각 독립된 메모리 공간을 가지기 때문에 js코드를 실행하기 위한 v8 엔진 등이 모든 탭마다 복제되어 들어간다. 이를 해결하기 위해 크롬은 메모리 상태에 따라 탭마다 독립적으로 할당했던 프로세스를 하나로 합치기도 하며 메모리를 관리한다.

 

크롬 브라우저의 동작원리는 다음과 같다

1. 주소창에 url을 입력한다. 

2. 브라우저 프로세스의 ui 스레드가 주소창에 입력된 값이 사이트의 주소인지, 검색어인지 판별해 사이트 이동 또는 검색엔진 이동을 결정한다.(url 판별에 dns lookup 등을 이용)

3. 사용자가 enter를 입력하면 ui스레드는 네트워크 스레드에 처리를 요청한다.

4. 네트워크 스레드는 적절한 프로토콜을 이용해 자원을 요청한다.

5. 네트워크 스레드는 요청에 대한 응답을 받으면 response 헤더의 content-type과 실제 payload의 일부를 살펴서 데이터 형식을 판별한다. 또한 safe browsing을 위해 도메인이나 데이터의 악성 여부를 판별하고 경고를 띄우거나, Cross-Origin 요청의 경우 CORS에러를 일으킨다.

6. 데이터의 신뢰성과 형식 판별이 완료되면 브라우저 프로세스는 html,css 문서 등은 렌더러 프로세스에게 처리를 요청하고(프로세스간 자원 공유는 IPC 방식을 이용한다), 그 외에 렌더러 프로세스가 처리할 수 없는 데이터 형식은 다운로드 매니저 등에게 보낸다.

7. 네트워크 스레드가 4~6까지 과정을 처리하는 동안 ui 스레드는 미리 렌더러 프로세스를 대기시켜 놓는 방식으로 처리 속도를 향싱시킬 수 있다. 하지만 리디렉션 등을 하게 된다면 슬퍼진다.

8. 렌더러 프로세스의 작업이 본격적으로 시작되면 문서가 로딩되는 동안 주소 표시줄, 뒤로가기 버튼, 보안, 사이트 설정 등도 모두 새 페이지의 사이트 정보를 반영해 갱신됨

9. 렌더링이 완료되면 렌더러 프로세스는 또다시 IPC 방식으로 브라우저 프로세스에 렌더링이 완료되었음을 알린다.

10. 기존의 사이트를 벗어날 때 beforeunload 이벤트를 트리거 시킬 수 있다. JS 코드이므로 당연히 렌더러 프로세스가 처리한다.

11. 렌더러 프로세스는 내부에 서비스 워커 스레드를 가질 수 있다. 주소 이동시 브라우저 프로세스의 ui스레드가 네트워크 스레드를 호출하지 않고, 서비스 워커의 등록 범위를 보고 렌더러 프로세스의 워커에게 권한을 넘긴다. 워커가 로컬 캐시에서 로드할지, 네트워크 스레드에 요청할지를 판단한다.

 

https://d2.naver.com/helloworld/2922312


프로세스와 쓰레드의 차이를 설명해보세요
프로세스의 생성 과정에 대해 설명해보세요
Heap과 Stack의 차이점은 무엇인가요?

 

[네트워크]

GET, POST 방식의 차이점

RESTFul API란?

TCP란 무엇인가?

TCP 3-way-handshake

TCP와 UDP의 차이점

HTTPS란?

 

[DB]

데이터베이스를 사용하는 이유

DB Index

postgresql과 elastic search의 차이점은 무엇인가요?

 

[프론트엔드]

JavaScript Event Loop

Javascript Hoisting
Javascript, What is 'This'

동기와 비동기의 차이

Closure(javascript)

브라우저에서 주소창에 url 입력시 어떤일이 일어나는가?

Redux가 뭔지 아시나요? 안다면 어떤건지 설명해 줄 수 있나요?
javascript sourcemap에 대해 알고있나요? 알고있다면 Production에서 sourcemap을 디버깅할 수 있는 방법을 알고있나요?

 

[기타]

TDD란 무엇이며 어떠한 장점이 있는가?

객체지향이란? 특징과 설계원칙

함수형 프로그래밍에 대해