본문 바로가기

Computer Science/기타

기술 면접 질문 모음

728x90
반응형

운영체제

프로세스

  • 프로세스와 스레드의 차이는 무엇인가요?

- 프로세스란 사용자가 어떤 프로그램을 실행시켜 메모리에 올라와서 실행되고 있는 프로그램을 말한다. 프로세스는 운영을 위해 cpu와 메모리를 할당받는다. 각 프로세스는 코드 데이터 스택 힙 영역으로 할당받는다. 프로세스는 기본적으로 다른 프로세스의 메모리에 접근할 수 없다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름. 각 스레드는 스택 영역만을 할당받고, 코드, 데이터, 힙 영역은 공유한다.

 

  • 교착상태란 무엇이며, 교착상태가 발생하기 위해서는 어떤 조건이 있어야 하나요?

- 교착상태란 둘 이상의 프로세스가 존재할때 하나의 프로세스에서 다른 프로세스의 자원을 무한정으로 기다리는 상태에 빠지는 것입니다. 데드락의 발생 조건은 상호 배제(한 번에 하나의 프로세스만 자원을 사용할 수 있다.), 점유 대기(자원을 하나 이상 보유하고 다른 프로세스에 할당된 자원을 기다리는 프로세스가 존재해야 한다.), 비선점(할당된 자원을 강제로 뺏을 수 없다.), 순환 대기(대기 프로세스의 집합이 순환 형태로 자원을 대기해야 한다.)

 

  • 교착상태의 해결법은 무엇인가요? 

- 해결 방안은 공유 자원 허용, 점유 대기 방지(프로세스가 한번에 필요한 자원 모두 요구), 비선점 가능(자원 강제로 뺏게 가능), 순환 대기 금지(순환 구조로 자원을 요구하지 않고 한쪽 방향만 자원 요구 가능하게), 은행원 알고리즘(회피 기법)

 

  • 뮤텍스와 세마포어에 대해서 설명해 보시오.

- 공유메모리에 동시에 여러 프로세스가 접근하면 critical section 문제로 race condition 발생 가능. 따라서 동기화 도구로 뮤텍스와 세마포어 존재.  뮤텍스는 뮤탈익스클루전의 약자로 상호 배제를 뜻하고 동기화 대상(공유 자원)이 하나일 때 사용합니다. critical section을 가진 스레드들이 실행시간이 겹치지 않고 각각 단독으로 실행되게 합니다.  키와 락을 가지고 키를 객체 한 스레드나 프로세스만 공유자원에 접근 가능. 세마포어는 동기화 대상(공유자원)이 하나 이상일 때 사용합니다. 공통으로 사용하는 객체 값(세마포어 값)이 존재하는데 이러한 세마포어의 값으로 공유자원에 접근 가능한 프로세스의 최대 허용치만큼 프로세스나 스레드가 접근 가능합니다.

  • 콘텍스트 스위칭이란 무엇인가요?

- 멀티 프로세스 환경에서 cpu가 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선순위의 프로세스가 실행되어야 할 때 프로세스의 상태 또는 레지스터 값을 저장하고 cpu가 다음 프로세스를 실행하도록 상태 또는 레 지스토 값을 교체하는 작업.

 

  • 경쟁 상태란 무엇인가요?

- 여러 프로세스가 공유자원에 동시 접근할때 실행 순서에 따라서 결괏값이 달라질 수 있는 상태 이에 대한 해결책이 동기화(뮤 텍스, 세마포어) 경쟁 상태(race condition)도 교착 상태의 한 종류다. 

 

  • 프로세스 혹은 스레드의 동기화란 무엇인가요?

- 공유자원에 동시에 여러 프로세스나 스레드가 접근하면 접근 순서에 따라서 결과가 달라 질 수 있다. 따라서 하나의 자원을 동시에 하나의 프로세스만 사용할 수 있게 하는 것.

 

  • 사용자 수준의 스레드와 커널 수준의 스레드의 차이는 무엇인가요?

- 사용자 수준 스레드는 커널에 의존적이지 않고 라이브러리를 이용한다. 커널 수준의 스레드는 os가 주체가 된다. 유저 모드는 커널 영역으로 접근이 불가능 하지만 커널 모드에서는 전부 접근이 가능하다. 커널 레벨 스레드는 비교적 결과 예측이 쉽고 안정적이다. 유저 모드로 전환이 빈번하게 일어나서 성능이 저하된다. 유저 레벨은 하나의 스레드가 커널에 의해 블록킹 되면 프로세스 전체가 블로킹되고 결과 예측이 비교적 어렵고 프로그래밍이 복잡해질 수 있다.

 

  • CPU 스케줄링이란 무엇인가요?

- Ready상태의 프로세스 중 cpu에 어떤 프로세스를 배정할지 정하는 일. 이를 바탕으로 context switch가 발생. 

 

  • CPU 스케줄링 방법에는 대표적으로 어떤 것들이 있나요?

- 선점 스케줄링: 우선순위가 높은 프로세스가 cpu 뺏기 가능, 처리 시간 예측이 힘들고 오버헤드 발생. SRT, 라운드 로빈, 멀티 레벨 큐

- 비선점 스케줄링:  이미 할당된 자원은 다른 프로세스가 뺏을 수 없다, 효율성이 떨어진다. FIFO, SJF, 우선순위, HRN

 

  • 동기와 비동기, 블로킹과 넌블로킹의 차이는 무엇인가요?

- 블로킹은 함수 A가 제어권을 B에게 넘겨주고 멈춘다. 작업이 끝난 후 제어권을 돌려받고 다시 실행한다.

- 논블로킹은 A가 B에게 제어권을 넘겨주지만 다시 바로 돌려받고 A가 실행되고 B도 실행된다.

- 동기는 요청자가 요청받은 함수의 작업이 완료되었는지 계속 확인(여러 함수들이 시간을 맞춰 실행)

- 비동기는 요청 후 신경 쓰지 않고 요청받은 함수가 작업이 완료되면 알려준다.

https://joooing.tistory.com/entry/동기 비동기-블로킹 논블로킹

 

블로킹(Blocking)/논블로킹(Non-Blocking), 동기(Sync)/비동기(Async) 구분하기

보통 동기 = 블로킹을 같은 개념으로, 비동기 = 논블로킹을 같은 개념으로 헷갈리는 경우가 많다. 하지만 두 개념은 각각을 구분짓는 기준이 전혀 다르다. 블로킹/논블로킹은 한 작업이 처리되는

joooing.tistory.com

메모리

  • 프로세스에 할당되는 메모리의 각 영역에 대해서 설명해 주세요.

- 메모리 구조에는 코드, 데이터, 힙, 스택 영역이 존재한다. 코드 영역은 사용자가 작성한 함수들의 코드가 cpu에서 수행 가능한 기계어 명렁으러 변환된 형태로 저장 complie time에 결정되고 read only다. data 영역은 전역 변수와 static 변수가 저장된다. heap은 동적 데이터 영역이고 런타임 시 할당되고 크기 제한이 없으나 느리고 사용자가 직접 메모리 관리를 해야 합니다. c언어의 malloc() 함수를 사용하면 힙 영역에 메모리가 할당됩니다. 스택 영역은 지역변수, 매개변수, 반환 값 등이 임시로 저장되며 함수 수행이 종료되면 사라진다.  자료구조의 stack과 동일하게 LIFO구조이고 컴파일 시 크기가 결정되는데 해당 영역의 크기보다 데이터가 들어오면 스택오버플로우가 발생한다.

 

  • 메모리 구조의 순서가 어떻게 되는가? CPU에서 가까운 순으로 말해보시오.

- 코드, 데이터, 힙, 스택 영역 순으로 존재합니다.

 

  • 페이지와 세그멘테이션에 대해서 설명해 보시오.

- 가상 메모리를 관리하는 기법입니다. 페이징은 페이지란 단위의 물리적 고정 사이즈로 메모리를 나누어 불연속적으로 저장함. 따라서 논리 주소를 물리 주소로 변환해줄 MMU가 필요하다. 페이징은 내부 단편화 문제를 발생시킬 수 있다. 

- 세그멘테이션은 물리적 고정 사이즈가 아닌 논리적인 내용(메서드, 프로시저, 객체, 변수 등등) 단위로 프로세스의 메모리 공간을 분리한다. 가변적이라서 내부 단편화 문제가 해결되지만 외부 단편화 문제가 발생한다.

 

  • 외부 단편화란? 내부 단편화란?

- 근본적으로 메모리 공간이 조각조각 나뉘게 되는 것이 문제이다. 메모리를 할당할 때 프로세스가 필요한 양보다 더 크게 할당해서 메모리에 손해가 생기면 내부 단편화, 메모리를 할당 해고 해제하는 과정에서 중간중간 사용하지 않은 작은 메모리 공간이 발생하면서 실제로 프로세스의 크기보다 크게 빈 공간이 존재하지만 받아들이지 못하는 경우 외부 단편화입니다.

 

  • First Fit, Best Fit, Worst Fit에 대해서 설명해 보시오.

- 외부 단편화의 연장선 상에서 생각해볼 수 있다. first fit: 최초로 발견되는 빈자리에 할당, best fit: 하나하나 넣어보고 가장 크기가 비슷한 곳에 할당, worst fit: 남는 공간 중 가장 큰 공간에다가 할당

 

  • 페이지 교체 알고리즘 종류에는 어떤 것들이 있나요?

- OPT(최적), FIFO(순서대로), LRU(가장 오래 사용 안된 것), LFU(가장 참조 횟수가 적은 것), MFU(참조 횟수가 가장 많은 것), NUR(최근에 사용하지 않은 것 적은 오버헤드, 준수한 성능, LRU 근사) 교체

 

네트워크

전산 기본

  • OSI 7 계층에 대해서 설명해주세요.

- 응용(인터페이스, 응용 프로세스 간 정보 교환, http, ftp), 표현(응용계층 데이터 부호화, 압축,  암호화 복호화), 세션(통신 장치 간 상호작용 및 동기화), 전송(데이터 전송 담당, tcp, udp), 네트워크(컴퓨터에 데이터를 전송해줄 주소를 가져서 통신 가능, 단위는 패킷, 라우터), 데이터링크(물리적 연결로 인접한 두 장치 간의 정보 전송(P2P), 프레임, Mac 주소로 통신, 스위치), 물리(전기 신호 데이터 전달, 케이블, 허브 등)

 

  • TCP/IP 4 계층에 대해서 설명해주세요.

- 인터넷에서 데이터를 주고받는 통신규약의 모음이다. 역할을 구분해서 서로의 간섭을 최소화한다. 응용(인터페이스, 응용 프로세스 간 정보 교환, 데이터), 전송(통신노드 간 연결 제어 및 자료 송수신 담당, 세그먼트), 인터넷(네트워크상 최종 목적지까지 정확히 연결되도록 연결성 제공), 네트워크 액세스(물리적으로 데이터가 어떻게 전송되는지 정의, mac주소는 하드웨어 주소, frame)

 

  • DNS가 무엇인가요?

- Domain Name System으로 사람이 읽을 수 있는 ip주소(ex: www.naver.com) 

 

  • 도메인 이름으로 실제 IP를 어떻게 찾을 수 있는지 흐름을 설명해 주세요.

- 네임서버로 문자열로 된 도메인 이름을 전송해서 여러 DNS 서버와 통신해서 필요한 ip정보를 받아옵니다.

 

TCP/UDP

  • TCP와 UDP의 차이에 대해서 설명해 주세요.

- tcp는 연결형 프로토콜이고 데이터의 경계를 구분하고 신뢰성 있는 데이터를 전송하고 일대일 통신이다. udp는 비연결형 프로토콜

 

  • TCP 헤더에 대해서 설명해 주세요.
  • MTU가 무엇인가요?
  • 3-way hand shake, 4-way hand shake 흐름에 대해서 설명해주세요.

- syn, syn+ack, ack

 

HTTP

  • HTTP 프로토콜에 대해서 아는 대로 말해주세요.

- 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. tcp/ip를 응용하는 응용 프로토콜이다. 연결 상태를 유지하지 않는 비연결성 프로토콜이다. 따라서 응답(서버가 클라이언트에)/요청(클라이언트가 서버) 방식으로 작동한다. 이를 해결하기 위해 쿠키와 세션이 등장했다.

 

  • HTTP GET과 POST의 차이는 무엇인가요?

- GET은 자료를 요청할 때, POST는 자료의 생성을 요청할때, PUT은 자료의 수정을 요청, DELETE는 자료의 삭제를 요청할때 사용된다.

 

  • 쿠키와 세션에 대해서 설명해 주세요.

- 쿠키는 http의 일종으로 어떠한 웹사이트 방문 시 해당 사이트가 사용하는 서버에서 클라이언트에 저장하는 기록 정보 파일이고 필요시 정보를 참조하거나 재사용 가능하다. 세션은 일정 시간 동안 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시킨다. 즉 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다. 세션은 세션 id만 클라이언트에 저장하고 나머지는 서버에서 처리하기 때문에 보안성이 높다.

 

  • HTTP와 HTTPS의 차이는 무엇인가요?

- HTTPS는 HTTP에 암호화가 추가된 프로토콜이다.

 

  • HTTPS가 동작하는 방식에 대해서 설명해 주세요.
  • HTTP 1.0과 1.1의 차이는 무엇인가요?
  • HTTP2와 그 특징에 대해서 설명해 주세요.
  • HTTP 헤더의 구조에 대해서 설명해 주세요.
  • keep-alive 헤더에 대해서 설명해 주세요.

  • 웹브라우저에서 서버로 요청했을 때, 흐름을 설명해주세요.

- 1. 브라우저의 url 파싱(프로토콜, 도메인 이름, 포트, 경로, 파라미터, 앵커)

-2. HSTS 목록 조회(HTTP or HTTPS 확인)

-3. DNS 서버에 도메인 네임을 전송해 ip주소로 변환

-4. 해당 ip주소로 요청(라우터의 라우팅을 이용)

-5. 통신을 위해 논리 주소인 ip주소를 mac주소로 변환

-6. 대상 서버와 통신을 위해 tcp 소켓 연결 진행, 3-way-handshake

-7. 서버에서 요청에 대한 응답을 브라우저에 전달한다.

-8. html, css, js를 통해서 브라우저는 해석해서 사용자에게 보여준다.

 

  • CORS란 무엇인가요?
  • 웹 서버와 웹 애플리케이션 서버(WAS)의 차이는 무엇인가요?
  • REST API에 대해서 설명해 주세요.

- HTTP 프로토콜을 이용하고 자원의 이름으로 구분하여 해당 자원의 상태를 주고받는 API다. 유지보수 운용에 편리하고 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구성할 수 있다.

 

  • API Gateway란 무엇인가요?
  • API Gateway가 다운되면 모든 API를 사용 못할지도 모르는데, 어떤 방안을 마련해야 할까요?

데이터베이스

전산 기본

  • JOIN에 대해서 설명해 주세요.

- 둘 이상의 테이블을 연결해서 컬럼을 기준으로 행을 합쳐주는 연산

  • 내부 조인과 외부 조인의 차이는 무엇인가요?
  • 정규화에 대해서 설명해 주세요.
  • 파티셔닝과 샤딩에 대해서 설명해 주세요.
  • ORM이란 무엇인가요?
  • NoSQL이란 무엇인가요?

- NotOnlySQL의 약자로 비관계형 데이터베이스로 빅데이터에 주를 이루는 비정형 데이터를 처리하는데 유리하고, 스키마가 존재하지 않고 관계형 DB에 비해 읽기 쓰기 속도가 빠르다.

 

  • 스키마란 무엇인가요?

- 데이터 베이스의 구조와 제약조건에 대해서 전반적으로 명시한 메타데이터 이다. (외부 스키마(응용프로그래머 입장에서), 개념 스키마(전체적인 구조 DBA), 내부 스키마(컴퓨터 입장에서))

인덱스

  • 인덱스란 무엇인가요? 어떻게 동작하나요?
  • 인덱스의 알고리즘에는 어떤 것들이 있나요?
  • Table Full Scan과 Index Range Scan을 설명해주세요.

트랜잭션

  • 트랜잭션이란 무엇인가요? 4가지 원칙을 포함해서 설명해 주세요.
  • 트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요.
  • 공유 락과 배타 락의 차이는 무엇인가요?
  • 데드락이란 무엇이며, 어떻게 발생할까요?

알고리즘

전산 기본

  • 빅오 표기법에 대해서 설명해주세요

- 빅오 표기법은 컴퓨터과학 분야에서 알고리즘의 효율성(시간 복잡도, 공간 복잡도)을 표기해주는 표현법으로 쓰고 있는데 이는 데이터의 크기를 n이라고 정하며 최고 차 항만 표기한다. 

 

  • 팩토리얼(factorial)을 구현해 보세요(손 코딩).
  • 피보나치수열 구현 방식 세 가지를 말해보시고, 시간 복잡도와 공간 복잡도를 설명해 주세요. 재귀(O(2^n)), 반복문(n), DP(n^2)
  • BFS/DFS 차이는 무엇인가요?
  • 프림 알고리즘에 대해서 설명해 주세요.
  • 다익스트라 알고리즘에 대해서 설명해 주세요.
  • 은행원 알고리즘에 대해서 설명해 주세요.

정렬

  • 정렬의 종류에는 어떤 것들이 있나요?
  • 삽입 정렬이 일어나는 과정을 설명해 보세요.
  • 퀵 정렬이 일어나는 과정을 설명해 보세요.
  • 54321 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?
  • 랜덤으로 배치된 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?
  • 자릿수가 모두 같은 수가 담긴 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?

자료구조

전산 기본

  • 배열과 링크드 리스트의 차이점에 대해서 설명해 주세요.

- 배열은 메모리상에 연속으로 존재하고 인덱스로 접근 할때 O(1), 링크드 리스트는 메모리상에 연속으로 존재하는 것은 아니다 인덱스 접근은 O(N)이다. 배열은 컴파일시 스택 영역에 생성되고 링크드 리스트는 런타임시 힙 영역에 생성된다. 연결리스트는 데이터의 추가 삭제가 배열보다 편리하다.

  • 스택과 큐에 대해서 설명해 주세요.
  • 해시 테이블에 대해서 설명해 주세요.

트리

  • 포화(Perfect) 이진트리, 완전(Complete) 이진트리, 정(Full) 이진트리의 차이점에 대해 각각 설명해주세요.
  • 그래프와 트리의 차이점에 대해서 설명해 주세요.

- 그래프와 트리 둘 다 모두 노드와 노드를 간선으로 이루어진 자료 구조이다. 트리는 그래프의 한 종류이고 방향성이 있고 비순환 그래프이다. 부모, 자식 관계가 존재한다. 

 

  • 힙 자료구조에 대해 설명해 주세요.

- 완전 이진트리의 일종, 우선순위 큐를 위하여 만들어진 자료구조, 최대, 최소 값을 빠르게 찾기 위해 만듦, 느슨한 정렬 상태 유지, 중복 값 허용, 최대 힙은 최상단 부모 노드가 최대값, 최소힙은 최상단 부모노드가 최소, 시간 복잡도(O(NlogN))

 

  • 힙의 삽입과 삭제는 어떻게 이루어지나요?
  • 레드 블랙 트리에 대해 설명해주세요.
  • 레드 블랙 트리의 삽입과 삭제 과정에 대해서 말해보세요.
  • B-Tree에 대해서 설명해 주세요.
  • 최소 신장 트리에 대해서 설명해 주세요.

프로그래밍

전산 기본

  • 객체지향이 무엇인가요? 절차 지향과의 차이점은 뭐죠?

-데이터와 절차를 하나로 묶어 캡슐화, 상속, 다형성을 바탕으로 실제 세계를 모델링하여 소프트웨어 개발 코드의 재활용 성가 코딩과 디버깅이 간편하지만 속도가 느리고 설계에 시간이 오래 걸린다.

 

  • 객체지향 SOLID 원칙에 대해서 설명해 주세요.
  • 객체지향 4가지 특징에 대해서 설명해 주세요.

- 캡슐화, 추상화, 상속, 다형성

 

  • 대표적인 객체지향 언어에는 어떤 것들이 있나요?

- 파이썬, 자바

 

  • 데이터 타입과 변수의 차이는 무엇인가요?

- 데이터 타입은 OS에 따라 다르고, 변수는 저장하는 값에 따라서 구분되고 이는 값의 위치를 기억하는 저장소이다.

 

  • 함수형 프로그래밍에 대해서 설명해 주세요.
  • AOP란 무엇인가요?
  • 컴파일러와 인터프리터의 차이는 무엇인가요?

- 컴파일러는 고급 언어로 작성된 프로그램을 전체 번역 후 링킹 작업을 통해서 실행, 인터프리터는 각 행을 연속적으로 분석하며 실행하고 중간 형태로 변환을 시킨다. 인터프리터 언어는 파이썬, 컴파일러 언어는 C언어.

 

  • 오버 로딩과 오버라이딩의 차이는 무엇인가요?

- 오버로딩 : 상속관계 아님 한 클래스 내에서 동일한 이름의 메서드 정의하는 것, 오버 라이딩: 상속관계에서 필요에 따라 부모 클래스의 함수 재지정(다형성)

 

  • 1급 객체에 대해서 설명해 주세요.

ETC

전산 기본

  • TDD란 무엇인가요?
  • 프레임워크와 라이브러리 차이는 무엇인가요?

- 라이브러리는 단순 활용 가능한 도구들의 집합(개발자가 정해야 함), 프레임워크는 클래스와 라이브러리가 합쳐진 구조(개발자에게 친절하게 알려줌)

 

  • 디자인 패턴이란 무엇인가요?

- 특정 맥락에서 발생하는 고질적인 문제들의 발생에 대처 가능한 재사용 가능한 해결책

 

  • Monolitc Architecture, Micro Service Architecture에 대해 각각 설명해 주세요.
  • 애자일 방법론이란?

- 고객의 지속적인 요구사항 개발 및 변경 수용과 테스트를 병행, 문서화보단 코드 중심, 팀워크 중요. 기존 워터폴 모델은 고객의 요구사항이 생기면 프로그램을 처음부터 다시 만들어야 하는 경우도 존재.

 

  • 도커란 무엇인가요?

- 리눅스 컨테이너를 만들고 컨테이너를 사용할 수 있는 기술이다. 컨테이너는 가상화 기술의 일종이지만 OS와 커널을 공유한다. 따라서 용량이 적다. 독립된 실행환경을 제공하지 않기 때문에 이동성이 높고 부팅시간도 짧다. 다만 컨테이너는 os 커널을 공유하기 때문에 보안 이슈가 있다.

 

 

 

출처: https://velog.io/@hygoogi/기술-면접-질문-모음

728x90
반응형