본문 바로가기

개념정리/기술면접대비

[모의면접 1차]

[질문1]

1. 프로세스와 스레드의 차이

프로세스는 커널에 등록, 독립적인 메모리 영역 할당(code, data, heap, stack), 각각 PCB를 가짐, 

스레드는 프로세스를 실행단위로 나눈 것, 프로세스의 자원을 공유함, register와 stack 영역은 독립적으로 가짐(독립적인 함수 호출, 실행 흐름을 보장하기 위해), 

- 멀티 스레드의 장점과 유의점

자원공유, 프로세스간 context switching 오버헤드 감소, 사용자 응답시간 단축, 병렬처리를 통한 성능 향상

concurrency problem, 서로 의존성을 가지는 스레드, 실행 순서나 context switching 시점에 따라 결과가 달라짐, 

critical section 보호 필요

- context switching 이란?

interrupt 또는 system call로 OS커널이 프로세스를 스위칭, 실행중이던 프로세스 정보 메모리 kernel stack PCB에 저장/복구, 

- shared data와 critical section이란?

여러 프로세스/스레드들이 공유하는 데이터, 이에 접근하는 코드영역.

- concurrency issue를 해결하기 위한 방법 중 OS가 서포트하는 방식은? 어떻게?

(spinlock, 세마포어- autmoic한 연산을 보장)

- 세마포어 방식에 대해 설명 

spinlock에 ready quque 추가, P()연산 lock 0이면 대기(queue사용) 또는 1일 경우 lock을 걸고(0으로 바꾸고) 진입, V()연산 ready queue에 대기중인 프로세스 깨워서 임계영역 양도 또는 lock을 1로 바꾸고 퇴장. 

- starvation과 dead lock의 차이

 데드락은 waiting state에서 자원, starvation은 ready state에서 CPU 대기, 영원한 대기와 언젠가 해결 가능한 대기

- 데드락이란? 발생 조건과 해결방안

비선점, 상호배제, hold and wait, circular wait, 예방, 회피, 감지 및 복원

 

2. OSI 7 layer 각 계층에 대해 설명 

1)물리-HW, 2)데이터링크(이더넷)-노드간, MAC주소, 3)네트워크(IP)-논리주소, 라우팅, 흐름제어, 4)전송(TCP/UDP)-종단간(End to End), 포트번호, 유효성 체크, 오류 검출, 중복 검사 등 5)세션, 6)표현, 7)응용(HTTP)-응용프로세스

- TCP/IP 모델과의 차이

4계층, 실질 프로토콜 기반, 인터페이스,네트워크,전송,응용

- PDU (Protocol Data Unit) 4, 3, 2계층별 패킷 명칭

세그먼트(TCP+데이터), 패킷(IPv4+TCP+데이터), 프레임(이더넷+IPv4+TCP+데이터)

 

3. JS의 자료형 7가지

기본 primitive : number, string, boolean, null, undefined, symbol

객체 object : object

- js의 배열형은? js의 배열과실제 자료구조상의 array와 차이는?

hash map으로 구현한 가짜 배열임

- js의 number형의 특징

모든 수를 실수로 처리, 정수형 따로 없음, +-Infinity, NaN포함

- null과 undefined 차이

null은 빈 값, 존재하지 않는 값, 알 수 없는 값을 명시적으로 할당, 객체형을 초기화할 주로 사용, undefined는 값이 할당되지 않았을 경우, 추후에 빈 값으로 비우려면 null, 배열의 인덱스 범위 넘어가면? undefined, obejct 존재하지 않는 키값 참조? undefined

 

4. 실행컨텍스트란? Execution Context

JS 코드가 실행되는 환경, global context, funtion context 존재, 

- 실행 컨텍스트 creation 단계, execution 단계 설명

creation : global의 경우 window 전역 객체 생성, function은 arguments 객체 생성, this를 전역객체 바인딩, 변수 호이스팅, 함수 선언문 메모리 할당

execution: 코드 순차 실행, 변수 실제 값 할당

- 호이스팅이란?

변수 선언문 실행 컨텍스트 최상위로 끌올, var 호이스팅+undefined 초기화, let, const 호이스팅+TDZ

- 클로저?

이미 생명주기가 끝난 외부함수의 변수를 참조하는 내부함수. 스코프 체이닝으로 참조 및 변경 가능, 함수 캡슐화

 


[질문2]

1. 가상메모리란?

비연속 할당, OS관리, 메모리 보호, 실제 메모리를 알 필요 없음, 한정된 메모리를 무한한 영역처럼 사용 가능, 프로그램을 여러 단위로 나눠 필요한 부분만 메모리에 적재, 나머지는 swap device에 적재

- 포인터를 이용해 확인하는 주소는 물리?논리?

virtual address임

- paging 시스템

논리 단위가 아닌 크기에 따라 분할(논리단위는 세그먼테이션), 페이지 공유 및 보호과정 복잡, 간단, 내부 단편화 발생, 외부 단편화 발생x, page 프로그램을 나눈 것, page frame 메모리 영역을 나눈 것, PMT

- fragmentaion 단편화란?

내부 단편화, 외부 단편화

- page fault란?

메모리에 찾고자하는 page가 없어서 I/O요청을 통해 swap device에서 가져와야 하는 것. PMT의 residence bit를 보고 판별 가능.

 

2. HTTP 프로토콜의 특징

통신규약, 클라이언트-서버, 무상태, 비연결성, 3way handshake, 

 - 이전 상태정보가 필요한 경우 무엇을 사용하는가?

쿠키나 세션

 - 쿠기와 세션의 차이점

 쿠키 : 클라이언트 로컬에 저장, 인증 유효시간 명시, 브라우저 종료해도 유지, 서버 set-cookie,클라이언트 요청 헤더에 쿠키정보 포함, 서버자원 사용x, 속도 빠름, 하루동안 이 창을 다시 보지 않기

세션 : 서버에서 관리하는 데이터, 세션 ID부여(클라이언트는 쿠키에 저장), 서버 인증 유효시간 설정 가능, 브라우저 종료시 삭제, 새 탭은 동일한 세션 유지, 보안, 

 - https와 http의 차이는? 

보안

 - https 방식 간단하게

SSL인증서 사용, 제 3자가 보증

 

3. 이벤트 버블링, 이벤트 캡쳐링, 이벤트 위임

버블링 : 하위 요소 이벤트 발생 > 상위 요소까지 전달

캡쳐링 : 상위부터 이벤트가 발생한 하위요소 찾아가기

위임 : 하위 요소들에 이벤트를 하나하나 매핑하지 않고 상위 요소에 이벤트를 위임해 제어함 

-이벤트 전파 방지 

e.stopPropagation()

 

4. js 프로토타입이란 무엇이며 왜 사용하는가?

js 클래스는 생성자 함수 + 프로토타입으로 구현

독립적인 인스턴스를 생성해도, 객체의 메서드 원형은 프로토타입에 체이닝을 걸어 static하게 사용.

모든 객체의 최상위 객체 Object까지 프로타입 체인을 가짐.

ObjA.__proto__ 또는 Object.getPrototypeOf(ObjA)

 

[손코딩 문항]

1. 배열 arr1, arr2가 주어질 때, arr1의 모든 원소가 arr2에 포함되는지 판별하시오. (배열 원소 중복 있음)

조건 1) arr2.length >= arr1.length

조건 2) 1 < arr2.legnth < 10^5

 

핵심 풀이 : O(n)이 나와야 함. 이중 반복문 대신 hash map 사용.

function solution(magazine, note) {
    let hash = magazine.reduce((acc,cur)=>{
       acc[cur] = (acc[cur]|0)+1;
       return acc;
    },{});
    for(let i=0;i<note.length;i++){
        if(hash[note[i]]) hash[note[i]]--;
        else return false;
    }
    return true
}

 


[내가 받은 질문]