본문 바로가기

CS 101

[IT 기술면접] 2

반응형

운영체제

프로세스

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

스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위. 스레드가 여러개 있으면 우리가 파일을 다운받으면서 동시에 웹서핑 가능. 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되기 때문에 동시 작업이 가능한 것이다. 

 

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

교착상태란 두 개 이상의 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며, 서로의 작업을 끝나기만을 기다리며 둘 다 영원히 끝나지 않는 상황

발생조건 

상호배제 - 한번에 한개의 프로세스만이 공유자원을 사용할 수 있음

점유대기 - 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림 

비선점 - 프로세스가 작업을 마친 후 자원을 자발적으로 반환할 때까지 기다림 

순환대기 - 프로세스의 자원점유 및 점유된 자원의 요구 관계가 원형을 이루면서 대기하는 조건. 

                각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음 

 

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

발생조건 4가지중 하나를 부정함으로써 교착상태 예방 

교착상대 회피 알고리즘 : 은행원 알고리즘 - "cpu는 최소한 하나의 프로세스에 할당해줄 만큼의 자원을 항상 보유하고 있어야 한다"

자원의 최대 요구량을 알아야함, 할당할 수 있는 자원의 수가 일정해야함 

 

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

뮤텍스 - 한 쓰레드, 프로세스에 의해 소유될 수 있는 key 를 기반으로 한 상호배제기법 (화장실 카운터 열쇠)

세마포어 - signaling mechanism. 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법 (레스토랑 화장실 빈칸수명시)

 

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

여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것. 즉 CPU에 실행할 프로세스를 교체하는 기술. 

 

경쟁 상태란 무엇인가요?

공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태 

 

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

모든 쓰레드가 공유하는 공통 자원을 동시에 하나의 쓰레드만 사용할 수 있게 만드는 것. 이렇게 자원에 접근 가능한 쓰레드를 통제해서 멀티 쓰레드의 문제를 해결하는 방법을 동기화라고 함.

 

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

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

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

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

메모리

  • 프로세스에 할당되는 메모리의 각 영역에 대해서 설명해 주세요.
  • 메모리 구조의 순서가 어떻게 되는가? CPU에서 가까운 순으로 말해보시오.
  • 페이지와 세그멘테이션에 대해서 설명해 보시오.
  • 외부 단편화란? 내부 단편화란?
  • First Fit, Best Fit, Worst Fit에 대해서 설명해 보시오.
  • 페이지 교체 알고리즘 종류에는 어떤 것들이 있나요?

네트워크

전산 기본

  • OSI 7계층에 대해서 설명해주세요.
  • TCP/IP 4계층에 대해서 설명해주세요.
  • DNS가 무엇인가요?
  • 도메인 이름으로 실제 IP를 어떻게 찾을 수 있는지 흐름을 설명해 주세요.

TCP/UDP

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

HTTP

  • HTTP 프로토콜에 대해서 아는대로 말해주세요.
  • HTTP와 HTTPS 의 차이는 무엇인가요?
  • HTTPS가 동작하는 방식에 대해서 설명해 주세요.
  • HTTP 1.0과 1.1의 차이는 무엇인가요?
  • HTTP2와 그 특징에 대해서 설명해 주세요.
  • HTTP 헤더의 구조에 대해서 설명해 주세요.
  • keep-alive 헤더에 대해서 설명해 주세요.
  • HTTP GET과 POST의 차이는 무엇인가요?
  • 쿠키와 세션에 대해서 설명해 주세요.

  • 웹브라우저에서 서버로 요청했을 때, 흐름을 설명해주세요.
  • CORS란 무엇인가요?
  • 웹 서버와 웹 어플리케이션 서버(WAS)의 차이는 무엇인가요?
  • REST API에 대해서 설명해 주세요.
  • API Gateway란 무엇인가요?
  • API Gateway가 다운되면 모든 API를 사용 못할지도 모르는데, 어떤 방안을 마련해야 할까요?

데이터베이스

전산 기본

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

내부 조인과 외부 조인의 차이는 무엇인가요?

정규화에 대해서 설명해 주세요.

파티셔닝과 샤딩에 대해서 설명해 주세요.

 

ORM이란 무엇인가요?

Object rational mapping 

 

SQL이란 무엇인가?

Structured Query Language 

DB랑 대화 

 

NoSQL이란 무엇인가요?

not only sql / not sql

 

 

스키마란 무엇인가요?

인덱스

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

트랜잭션

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

알고리즘

전산 기본

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

빅오 표기법은 알고리즘의 시간 복잡도를 나타냅니다. 알고리즘 내 연산의 횟수와 관련이 있습니다. 
예를 들어 반복문이 데이터의 수에 따라 제곱으로 늘어나면 시간복잡도는 N^2이 됩니다.
수학적으로는 어떤 알고리즘이 함수 G(n)이라면, 어떠한 n을 대입해도 c*g(n)이 되는 작은 상수 c가 존재함을 의미합니다.

 

팩토리얼(factorial)을 구현해 보세요(손코딩)

def factorial(n)
  return n * factorial(n-1) if n != 1 else 1

 

피보나치 수열 구현 방식 세 가지를 말해보시고, 시간복잡도와 공간복잡도를 설명해 주세요.

1. 수열 반복문 for문 O(n)

2. 재귀함수 - 함수 자기 자신을 호출하는 함수 O(2^n)

3. 재귀함수 dp 메모이제이션 - 이미 연산했던 값은 더 이상 연산하지 않아 불필요한 연산을 제거 

 

BFS/DFS 차이는 무엇인가요?

너비우선탐색 깊이우선탐색 

bfs는 루트노드와 같은 거리에 있는 노드 우선 

dfs는 루트노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하고 넘어감

 

프림 알고리즘에 대해서 설명해 주세요.

시작 정점에서 출발해서 인접한 정점들 중에서 최소 간선으로 연결된 정점을 선택하여 minimum spanning tree를 만드는 알고리즘 

 

다익스트라 알고리즘에 대해서 설명해 주세요.

한 노드에서 다른 노드까지의 최단경로를 구하는 dp 알고리즘중 하나. 최단 거리 테이블을 만들고 그 중 최단거리에 해당하는 노드에서 다른 노드로 넘어가는 가중치를 계산해서 계속 최단 거리 테이블을 업데이트 하는 방법 

 

은행원 알고리즘에 대해서 설명해 주세요.

교착상태를 예방하기 위한 알고리즘. 운영체제에서 안전상태를 유지할 수 있는 요구만 수락하고 불안전 상태를 초래할 사용자의 요구는 나중에 만족될 수 있을때까지 계속 거절. "cpu는 최소한 하나의 프로세스에 할당해줄 만큼의 자원을 항상 보유하고 있어야 한다"

자원의 최대 요구량을 알아야함, 할당할 수 있는 자원의 수가 일정해야함 

정렬

정렬의 종류에는 어떤 것들이 있나요?

버블정렬/ 선택정렬/ 삽입정렬/ 퀵정렬/ 병합정렬/ 힙정렬 ... 

 

삽입 정렬이 일어나는 과정을 설명해 보세요.

두번째카드부터 시작해서 그 앞의 원소들과 비교해서 삽입할 올바른 자리를 찾아 삽입한다. 새로 삽입될 카드의 수만큼 반복하게 되면 전체 카드가 정렬된다. 

 

퀵 정렬이 일어나는 과정을 설명해 보세요.

피벗을 고르고 그 피벗을 기준으로 그 값보다 작은 값은 모두 왼쪽으로, 큰값은 모두 오른쪽으로 보냄. 피벗 제외한 왼쪽과 오른쪽 리스트에서 같은 방식을 반복하여 리스트의 크기가 0혹은 1이 될때까지 반복. nlogn median of three등을 활용하여 효율적인 피벗 선택 가능 

 

54321 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?

삽입정렬?

 

랜덤으로 배치된 배열이 있을때, 어떤 정렬을 사용하면 좋을까요?

배열의 상태에 구애받지 않고 일정한 시간 복잡도를 가진 힙 정렬이나 병합 정렬을 사용할 것 같습니다.

 

자릿수가 모두 같은 수가 담긴 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?

공간 복잡도가 높아지기는 하지만, 기수 정렬을 사용하는 것이 시간적으로 효율이 가장 높다고 생각합니다. 
기수 정렬은 일의 자리부터 순서대로 자릿수 별로 버킷에 담는 방식으로,
최대 자릿수 만큼만 반복하면 되기 떄문에 빠르게 정렬이 가능합니다.

자료구조

전산 기본

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

배열은 데이터를 입력하면 순차적으로 입력이 되며, 물리적 주소 또한 순차적입니다. 
또한 한번 크기가 결정이 되면 변경이 불가능 합니다. 하지만 인덱스가 있어 데이터에 접근하는 속도가 빠릅니다. 
하지만 중간에 삽입하거나 삭제하는 경우 인덱스를 재배열해야 하기 때문에 효율이 떨어집니다.

링크드 리스트는 다음 원소의 주소 값을 가지고 있어, 이를 이용해 리스트를 생성합니다. 
따라서 크기가 가변적이고, 삽입과 삭제가 주소 값을 변경해 주면 되기 때문에 간편합니다.
하지만 중간에 있는 원소에 접근하기 위해서는 포인터를 따라 탐색이 필요해, 배열과 같이 한번에 접근할 수가 없습니다.

 

스택과 큐에 대해서 설명해 주세요.

스택은 나중에 들어온 원소가 가장 먼저 빠져나갈 수 있는 자료구조입니다.
top이라는 포인터를 이용해 데이터에 접근합니다.

큐는 처음 들어온 원소가 가장 먼저 빠져나갈 수 있는 자료구조입니다. 
front와 rear 두가지 포인터를 사용하며 front는 삭제시, rear는 삽입시 포인터에 변경이 이루어집니다.

 

해시테이블에 대해서 설명해 주세요.

해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조입니다. 
해시 테이블이 빠른 검색속도를 제공하는 이유는 내부적으로 배열(버킷)을 사용하여 데이터를 저장하기 때문입니다.
해시 테이블은 각각의 Key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 
이 index를 활용해 값을 저장하거나 검색합니다. 여기서 실제 값이 저장되는 장소를 버킷 또는 슬롯이라고 한다.

트리

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

'Perfect 이진 트리'는 깊이가 h일 때, 1에서 h까지 모든 노드가 두 개씩 채워져 있는 트리입니다.
'Complete 이진 트리'는 루트부터 리프노드 이전의 깊이 까지 모든 노드들이 2개의 자식을 가지고 있고, 리프 노드 깊이에서는 왼쪽부터 노드가 채워져 있는 트리를 말합니다.
'Full 이진 트리'는 모든 노드가 0개 또는 2개의 자식 노드만을 갖는 트리입니다.

 

그래프와 트리의 차이점에 대해서 설명해 주세요.

그래프는 self-loop, 순환구조가 가능하며, 루트 노드라는 개념이 없습니다. 또한 노드들 사이에 방향성, 
2개 이상의 엣지를 가지는 것이 가능합니다.
트리는 계층 구조이며, 한 개의 루트노드만이 존재하며, 모든 자식 노드는 하나의 부모노드만을 가집니다. 
따라서 엣지의 개수가 항상 노드수-1개를 가집니다. 그리고, 트리는 방향성이 있는 그래프의 한 종류로 볼 수 있습니다.

 

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

완전 이진트리의 일종으로, 우선 순위 큐를 구현하기 위해 만들어진 자료구조 입니다.
Max, Min 두가지 방식으로 구성이 가능하고, 최댓값이나 최솟값을 빠르게 찾을 수 있습니다.
이진트리와의 차이점으로는 중복된 값을 허용한다는 점이 있습니다.

 

힙의 삽입과 삭제는 어떻게 이루어지나요?

삽입 과정시, 
새로운 원소에 대해
    1. 힙의 마지막 노드에 이어서 삽입합니다.
    2. 새로운 노드를 부모 노드들과 교환해서, 해당 힙의 성질을 만족시킵니다.
삭제시,
    * 힙의 삭제는 루트의 삭제
    1. Root를 꺼내옵니다.
    2. 가장 끝에 있는 노드를 루트에 놓고, 교환을 통해 제자리를 찾습니다.
    3. 힙트리가 재구성됩니다.

 

레드 블랙 트리에 대해 설명해주세요.

레드 블랙 트리의 삽입과 삭제 과정에 대해서 말해보세요.

 

B-Tree에 대해서 설명해 주세요.

자식 노드의 개수가 2개 이상인 트리를 말합니다. 
또한 노드 내의 데이터가 1개 이상일 수 있습니다. 
노드 내의 데이터 수에 따라 M차 B-Tree라고 부르며, 차수가 짝수냐 홀수냐에 따라 알고리즘이 달라집니다.
한 노드는 [데이터 수+1]개의 자식을 가지며, 노드 내 데이터는 정렬된 상태이어야 합니다.
자식 노드의 데이터는 부모노드 데이터를 기준으로 데이터 보다 작은 값은 왼쪽 서브 트리,
큰값들은 오른쪽 서브 트리에 위치하는 형태를 취합니다.
데이터 탐색이 root부터 시작하며 데이터의 크기에 따라 어느 자식으로 이동할지 결정합니다.
삽입시 리프노드에 데이터가 가득차있으면 중간값을 부모노드로 해 트리를 재구성합니다.

 

최소 신장 트리에 대해서 설명해 주세요.

최소신장트리(MST)는 가능한 신장트리 가운데 엣지 가중치의 합이 최소인 신장트리를 말합니다. 
MST는 노드 간 연결성을 보장하면서 노드 사이를 잇는 거리/비용 등을 최소로 하는 그래프를 의미하기 때문에 응용 범위가 넓습니다.

* 크루스칼 알고리즘 / 프림 알고리즘

프로그래밍

전산 기본

  • 객체지향이 무엇인가요? 절차지향과의 차이점은 뭐죠?
  • 객체지향 SOLID 원칙에 대해서 설명해 주세요.
  • 객체지향 4가지 특징에 대해서 설명해 주세요.
  • 대표적인 객체지향 언어에는 어떤 것들이 있나요?
  • 데이터 타입과 변수의 차이는 무엇인가요?
  • 함수형 프로그래밍에 대해서 설명해 주세요.
  • AOP란 무엇인가요?
  • 컴파일러와 인터프리터의 차이는 무엇인가요?
  • 오버로딩과 오버라이딩의 차이는 무엇인가요?
  • 1급 객체에 대해서 설명해 주세요.

JAVA

기본

  • Java 접근 제어자에 대해서 각각 설명해 주세요.
  • JVM의 구조에 대해서 설명해 주세요.
  • Garbage Collector 에 대해서 설명해 주세요. 어떻게 동작하나요?
  • GC의 종류에 대해서 말해보세요.
  • Java 버전 별 특성에 대해서 아는대로 말해주세요.
  • Java는 Call By Value일까요, Call By Reference 일까요?
  • 리플렉션(Reflection)이란 무엇인가요?
  • Stream API란 무엇인가요?
  • Lambda란 무엇인가요?
  • 함수형 인터페이스란 무엇인가요?
  • JVM 기동시 주로 사용되는 옵션들을 아는대로 말해보세요.
  • foreach를 사용할 수 있는 자료구조는 어떤 인터페이스를 상속받고 있나요?
  • iterator와 iterable 차이는 무엇인가요?
  • synchronized 키워드에 대해 설명해 주세요.
  • volatile 키워드에 대해 설명해 주세요.
  • final 키워드에 대해서 설명해주세요. 각각의 쓰임에 따라 어떻게 동작하나요?

클래스와 객체

  • Wrapper Class란 무엇인가요?
  • 클래스, 객체, 인스턴스 차이에 대해서 설명해 주세요.
  • 직렬화(Serialization)과 역직렬화(Deserialization)에 대해서 설명해 주세요.
  • Java Generic에 대해서 설명해 주세요.
  • equals와 ==의 차이는 무엇인가요?
  • hashCode란 무엇인가요?
  • 문자열을 리터럴(string = "abcd")로 할당하는 것과 객체(string = new String("abcd"))로 할당하는 방식의 차이가 무엇인가요?
  • 순수 추상 클래스와 인터페이스의 차이는 무엇인가요?
  • 본인 관점에서, 인터페이스는 주로 어떨 때 사용하나요?

자료형, 자료구조

  • Java의 Collection에 대해서 설명해 주세요.
  • Array와 ArrayList의 차이점은 무엇인가요?
  • char type과 string type으로 나뉘어져 있는 이유는 무엇인가요?

Spring Framework

기본

  • Spring이란 무엇인가요?
  • Spring, Spring MVC, Spring Boot의 차이점에 대해 각각 설명해 주세요.
  • Spring 버전 별 특성에 대해서 아는대로 답변해 주세요.
  • Spring Framework의 생명 주기에 대해서 말해주세요.
  • Bean이란 무엇인가요?
  • Interceptor와 Filter의 차이점을 말해주세요.
  • IOC와 DI에 대해서 설명해주세요.
  • Container란 무엇인가요?
  • VO, DTO, DAO에 대해서 각각 설명해 주세요.

MVC

  • MVC에 대해서 설명해 주세요.
  • Servlet이 무엇인가요? (사실 이건 Java 섹션에 있는게 맞음..)
  • Dispatcher-Servlet이란 무엇인가요?
  • Spring MVC에서 HTTP 요청이 들어왔을 때의 흐름을 설명해 주세요.

ETC

전산 기본

  • TDD란 무엇인가요?
  • 프레임워크와 라이브러리 차이는 무엇인가요?
  • 디자인 패턴이란 무엇인가요?
  • Monolitc Architecture, Micro Service Architecture에 대해 각각 설명해 주세요.
  • 애자일 방법론이란?
  • 도커란 무엇인가요?
반응형

'CS 101' 카테고리의 다른 글

[DP] Dijkstra 다익스트라 알고리즘  (0) 2023.06.01
[MST 최소신장트리] Kruskal & Prim  (0) 2023.06.01
[자료구조] Tree 트리  (0) 2023.05.31
[IT 기술면접]  (0) 2023.05.30
[IT 기술면접] 디자인 패턴  (0) 2023.05.10