├── 01-DATA_STRUCTURE_ALGORITHM.md
├── 02-OPERATING_SYSTEM.md
├── 03-NETWORK.md
├── 04-DATABASE.md
├── 05-ETC.md
├── 06-ALGORITHM.md
├── 07-JAVA_SPRING.md
└── README.md
/01-DATA_STRUCTURE_ALGORITHM.md:
--------------------------------------------------------------------------------
1 | ## 자료구조
2 | ### 혹시 코딩테스트를 원한다면... [이쪽](https://github.com/VSFe/Algorithm_Study)은 어떠신가요? ~~제껍니다...~~
3 |
4 |
5 | 1. 시간복잡도와 공간복잡도에 대해 설명해 주세요.
6 |
7 | - Big-O, Big-Theta, Big-Omega 에 대해 설명해 주세요.
8 | - 다른 것을 사용하지 않고, Big-O를 사용하는 이유가 있을까요?
9 | - O(1)은 O(N^2) 보다 무조건적으로 빠른가요?
10 |
11 |
12 |
13 |
14 | 2. 링크드 리스트에 대해 설명해 주세요.
15 |
16 | - 일반 배열과, 링크드 리스트를 비교해 주세요.
17 | - 링크드 리스트를 사용해서 구현할 수 있는 다른 자료구조에 대해 설명해 주세요.
18 |
19 |
20 |
21 |
22 | 3. 스택과 큐에 대해서 설명해 주세요.
23 |
24 | - 스택 2개로 큐를, 큐 2개로 스택을 만드는 방법과, 그 시간복잡도에 대해 설명해 주세요.
25 | - 시간복잡도를 유지하면서, 배열로 스택과 큐를 구현할 수 있을까요?
26 | - Prefix, Infix, Postfix 에 대해 설명하고, 이를 스택을 활용해서 계산/하는 방법에 대해 설명해 주세요.
27 | - Deque는 어떻게 구현할 수 있을까요?
28 | - (C++ 한정) Deque의 Random Access 시간복잡도는 O(1) 입니다. 이게 어떻게 가능한걸까요?
29 |
30 |
31 |
32 |
33 | 4. 해시 자료구조에 대해 설명해 주세요.
34 |
35 | - 값이 주어졌을 때, 어떻게 하면 충돌이 최대한 적은 해시 함수를 설계할 수 있을까요?
36 | - 해시값이 충돌했을 때, 어떤 방식으로 처리할 수 있을까요?
37 | - 본인이 사용하는 언어에서는, 어떤 방식으로 해시 충돌을 처리하나요?
38 | - Double Hashing 의 장점과 단점에 대해서 설명하고, 단점을 어떻게 해결할 수 있을지 설명해 주세요.
39 | - Load Factor에 대해 설명해 주세요. 본인이 사용하는 언어에서의 해시 자료구조는 Load Factor에 관련한 정책이 어떻게 구성되어 있나요?
40 | - 다른 자료구조와 비교하여, 해시 테이블은 멀티스레드 환경에서 심각한 수준의 Race Condition 문제에 빠질 위험이 있습니다. 성능 감소를 최소화 한 채로 해당 문제를 해결할 수 있는 방법을 설계해 보세요.
41 |
42 |
43 |
44 |
45 | 5. 트리와 이진트리, 이진탐색트리에 대해 설명해 주세요.
46 |
47 | - 그래프와 트리의 차이가 무엇인가요?
48 | - 이진탐색트리에서 중위 탐색을 하게 되면, 그 결과는 어떤 의미를 가지나요?
49 | - 이진탐색트리의 주요 연산에 대한 시간복잡도를 설명하고, 왜 그런 시간복잡도가 도출되는지 설명해 주세요.
50 | - 이진탐색트리의 한계점에 대해 설명해주세요.
51 | - 이진탐색트리의 값 삽입, 삭제 방법에 대해 설명하고, 어떤식으로 값을 삽입하면 편향이 발생할까요?
52 | - 이진탐색트리와 동일한 로직을 사용하면, 삼진탐색트리도 정의할 수 있을까요? 안 된다면, 그 이유에 대해 설명해 주세요.
53 |
54 |
55 |
56 |
57 | 6. 힙에 대해 설명해 주세요.
58 |
59 | - 힙을 배열로 구현한다고 가정하면, 어떻게 값을 저장할 수 있을까요?
60 | - 힙의 삽입, 삭제 방식에 대해 설명하고, 왜 이진탐색트리와 달리 편향이 발생하지 않는지 설명해 주세요.
61 | - 힙 정렬의 시간복잡도는 어떻게 되나요? Stable 한가요?
62 |
63 |
64 |
65 |
66 | 7. BBST (Balanced Binary Search Tree) 와, 그 종류에 대해 설명해 주세요.
67 |
68 | - Red Black Tree는 어떻게 균형을 유지할 수 있을까요?
69 | - Red Black Tree의 주요 성질 4가지에 대해 설명해 주세요.
70 | - 2-3-4 Tree, AVL Tree 등의 다른 BBST 가 있음에도, 왜 Red Black Tree가 많이 사용될까요?
71 |
72 |
73 |
74 |
75 | 8. 정렬 알고리즘에 대해 설명해 주세요.
76 |
77 | - Quick Sort와 Merge Sort를 비교해 주세요.
78 | - Quick Sort에서 O(N^2)이 걸리는 예시를 들고, 이를 개선할 수 있는 방법에 대해 설명해 주세요.
79 | - Stable Sort가 무엇이고, 어떤 정렬 알고리즘이 Stable 한지 설명해 주세요.
80 | - Merge Sort를 재귀를 사용하지 않고 구현할 수 있을까요?
81 | - Radix Sort에 대해 설명해 주세요.
82 | - Bubble, Selection, Insertion Sort의 속도를 비교해 주세요.
83 | - 값이 거의 정렬되어 있거나, 아예 정렬되어 있다면, 위 세 알고리즘의 성능 비교 결과는 달라질까요?
84 | - 본인이 사용하고 있는 언어에선, 어떤 정렬 알고리즘을 사용하여 정렬 함수를 제공하고 있을까요?
85 | - 정렬해야 하는 데이터는 50G 인데, 메모리가 4G라면, 어떤 방식으로 정렬을 진행할 수 있을까요?
86 |
87 |
88 |
89 |
90 | 9. 그래프 자료구조에 대해 설명하고, 이를 구현할 수 있는 두 방법에 대해 설명해 주세요.
91 |
92 | - 각 방법에 대해, "두 정점이 연결되었는지" 확인하는 시간복잡도와 "한 정점에 연결된 모든 정점을 찾는" 시간복잡도, 그리고 공간복잡도를 비교해 주세요.
93 | - 정점의 개수가 N개, 간선의 개수가 N^3 개라면, 어떤 방식으로 구현하는 것이 효율적일까요?
94 | - 사이클이 없는 그래프는 모두 트리인가요? 그렇지 않다면, 예시를 들어주세요.
95 |
96 |
97 |
98 |
99 | 10. 그래프에서, 최단거리를 구하는 방법에 대해 설명해 주세요.
100 |
101 | - 트리에서는 어떤 방식으로 최단거리를 구할 수 있을까요? (위 방법을 사용하지 않고)
102 | - 다익스트라 알고리즘에서, 힙을 사용하지 않고 구현한다면 시간복잡도가 어떻게 변화할까요?
103 | - 정점의 개수가 N개, 간선의 개수가 N^3 개라면, 어떤 알고리즘이 효율적일까요?
104 | - A* 알고리즘에 대해 설명해 주세요. 이 알고리즘은 다익스트라와 비교해서 어떤 성능을 낼까요?
105 | - 음수 간선이 있을 때와, 음수 사이클이 있을 때 각각 어떤 최단거리 알고리즘을 사용해야 하는지 설명해 주세요.
106 |
107 |
108 |
109 |
110 | 11. 재귀함수에 대해 설명해 주세요.
111 |
112 | - 재귀 함수의 동작 과정을 Call Stack을 활용해서 설명해 주세요.
113 | - 언어의 스펙에 따라, 재귀함수의 최적화를 진행해주는 경우가 있습니다. 어떤 경우에 재귀함수의 최적화가 가능하며, 이를 어떻게 최적화 할 수 있을지 설명해 주세요.
114 |
115 |
116 |
117 |
118 | 12. MST가 무엇이고, 어떻게 구할 수 있을지 설명해 주세요.
119 |
120 | - Kruskal 알고리즘에서 사용하는 Union-Find 자료구조에 대해 설명해 주세요.
121 | - Kruskal 과 Prim 중, 어떤 것이 더 빠를까요?
122 | - Kruskal 과 Prim 알고리즘을 통해 얻어진 결과물은 무조건 트리인가요? 만약 그렇다면 증명해 주세요. 그렇지 않다면, 반례를 설명해 주세요.
123 |
124 |
125 |
126 |
127 | 13. Thread Safe 한 자료구조가 있을까요? 없다면, 어떻게 Thread Safe 하게 구성할 수 있을까요?
128 |
129 | - 배열의 길이를 알고 있다면, 조금 더 빠른 Thread Safe 한 연산을 만들 순 없을까요?
130 | - 사용하고 있는 언어의 자료구조는 Thread Safe 한가요? 그렇지 않다면, Thread Safe 한 Wrapped Data Structure 를 제공하고 있나요?
131 |
132 |
133 |
134 |
135 | 14. 문자열을 저장하고, 처리하는 주요 자료구조 및 알고리즘 (Trie, KMP, Rabin Karp 등) 에 대해 설명해 주세요.
136 |
138 |
139 |
140 |
141 | 15. 이진탐색이 무엇인지 설명하고, 시간복잡도를 증명해 보세요.
142 |
143 | - Lower Bound, Upper Bound 는 무엇이고, 이를 어떻게 구현할 수 있을까요?
144 | - 이진탐색의 논리를 적용하여 삼진탐색을 작성한다고 가정한다면, 시간복잡도는 어떻게 변화할까요? (실제 존재하는 삼진탐색 알고리즘은 무시하세요!)
145 | - 기존 이진탐색 로직에서 부등호의 범위가 바뀐다면, (ex. <= 라면 <로, <이라면 <= 로) 결과가 달라질까요?
146 |
147 |
148 |
149 |
150 | 16. 그리디 알고리즘과 동적 계획법을 비교해 주세요.
151 |
152 | - 그렇다면, 어떤 경우에 각각의 기법을 사용할 수 있을까요?
153 | - 그렇다면, 동적 계획법으로 풀 수 있는 모든 문제는 재귀로 변환하여 풀 수 있나요?
154 |
155 |
156 |
--------------------------------------------------------------------------------
/02-OPERATING_SYSTEM.md:
--------------------------------------------------------------------------------
1 | ## 운영체제
2 |
3 |
4 | 1. 시스템 콜이 무엇인지 설명해 주세요.
5 |
6 | - 우리가 사용하는 시스템 콜의 예시를 들어주세요.
7 | - 시스템 콜이, 운영체제에서 어떤 과정으로 실행되는지 설명해 주세요.
8 | - 시스템 콜의 유형에 대해 설명해 주세요.
9 | - 운영체제의 Dual Mode 에 대해 설명해 주세요.
10 | - 왜 유저모드와 커널모드를 구분해야 하나요?
11 | - 서로 다른 시스템 콜을 어떻게 구분할 수 있을까요?
12 |
13 |
14 |
15 |
16 | 2. 인터럽트가 무엇인지 설명해 주세요.
17 |
18 | - 인터럽트는 어떻게 처리하나요?
19 | - Polling 방식에 대해 설명해 주세요.
20 | - HW / SW 인터럽트에 대해 설명해 주세요.
21 | - 동시에 두 개 이상의 인터럽트가 발생하면, 어떻게 처리해야 하나요?
22 |
23 |
24 |
25 |
26 | 3. 프로세스가 무엇인가요?
27 |
28 | - 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요.
29 | - PCB가 무엇인가요?
30 | - 그렇다면, 스레드는 PCB를 갖고 있을까요?
31 | - 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요?
32 | - 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요?
33 | - 리눅스에서, 데몬프로세스에 대해 설명해 주세요.
34 | - 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요.
35 |
36 |
37 |
38 |
39 | 4. 프로세스 주소공간에 대해 설명해 주세요.
40 |
41 | - 초기화 하지 않은 변수들은 어디에 저장될까요?
42 | - 일반적인 주소공간 그림처럼, Stack과 Heap의 크기는 매우 크다고 할 수 있을까요? 그렇지 않다면, 그 크기는 언제 결정될까요?
43 | - Stack과 Heap 공간에 대해, 접근 속도가 더 빠른 공간은 어디일까요?
44 | - 다음과 같이 공간을 분할하는 이유가 있을까요?
45 | - 스레드의 주소공간은 어떻게 구성되어 있을까요?
46 | - "스택"영역과 "힙"영역은 정말 자료구조의 스택/힙과 연관이 있는 걸까요? 만약 그렇다면, 각 주소공간의 동작과정과 연계해서 설명해 주세요.
47 | - IPC의 Shared Memory 기법은 프로세스 주소공간의 어디에 들어가나요? 그런 이유가 있을까요?
48 | - 스택과 힙영역의 크기는 언제 결정되나요? 프로그램 개발자가 아닌, 사용자가 이 공간의 크기를 수정할 수 있나요?
49 |
50 |
51 |
52 |
53 | 5. 단기, 중기, 장기 스케쥴러에 대해 설명해 주세요.
54 |
55 | - 현대 OS에는 단기, 중기, 장기 스케쥴러를 모두 사용하고 있나요?
56 | - 프로세스의 스케쥴링 상태에 대해 설명해 주세요.
57 | - preemptive/non-preemptive 에서 존재할 수 없는 상태가 있을까요?
58 | - Memory가 부족할 경우, Process는 어떠한 상태로 변화할까요?
59 |
60 |
61 |
62 |
63 | 6. 컨텍스트 스위칭 시에는 어떤 일들이 일어나나요?
64 |
65 | - 프로세스와 스레드는 컨텍스트 스위칭이 발생했을 때 어떤 차이가 있을까요?
66 | - 컨텍스트 스위칭이 발생할 때, 기존의 프로세스 정보는 커널스택에 어떠한 형식으로 저장되나요?
67 | - 컨텍스트 스위칭은 언제 일어날까요?
68 |
69 |
70 |
71 |
72 | 7. 프로세스 스케줄링 알고리즘에는 어떤 것들이 있나요?
73 |
74 | - RR을 사용할 때, Time Slice에 따른 trade-off를 설명해 주세요.
75 | - 싱글 스레드 CPU 에서 상시로 돌아가야 하는 프로세스가 있다면, 어떤 스케쥴링 알고리즘을 사용하는 것이 좋을까요? 또 왜 그럴까요?
76 | - 동시성과 병렬성의 차이에 대해 설명해 주세요.
77 | - 타 스케쥴러와 비교하여, Multi-level Feedback Queue는 어떤 문제점들을 해결한다고 볼 수 있을까요?
78 | - FIFO 스케쥴러는 정말 쓸모가 없는 친구일까요? 어떤 시나리오에 사용하면 좋을까요?
79 | - 우리는 스케줄링 알고리즘을 "프로세스" 스케줄링 알고리즘이라고 부릅니다. 스레드는 다른 방식으로 스케줄링을 하나요?
80 | - 유저 스레드와 커널 스레드의 스케쥴링 알고리즘은 똑같을까요?
81 |
82 |
83 |
84 |
85 | 8. 뮤텍스와 세마포어의 차이점은 무엇인가요?
86 |
87 | - 이진 세마포어와 뮤텍스의 차이에 대해 설명해 주세요.
88 | - Lock을 얻기 위해 대기하는 프로세스들은 Spin Lock 기법을 사용할 수 있습니다. 이 방법의 장단점은 무엇인가요? 단점을 해결할 방법은 없을까요?
89 | - 뮤텍스와 세마포어 모두 커널이 관리하기 때문에, Lock을 얻고 방출하는 과정에서 시스템 콜을 호출해야 합니다. 이 방법의 장단점이 있을까요? 단점을 해결할 수 있는 방법은 없을까요?
90 |
91 |
92 |
93 |
94 | 9. Deadlock 에 대해 설명해 주세요.
95 |
96 | - Deadlock 이 동작하기 위한 4가지 조건에 대해 설명해 주세요.
97 | - 그렇다면 3가지만 충족하면 왜 Deadlock 이 발생하지 않을까요?
98 | - 어떤 방식으로 예방할 수 있을까요?
99 | - 왜 현대 OS는 Deadlock을 처리하지 않을까요?
100 | - Wait Free와 Lock Free를 비교해 주세요.
101 |
102 |
103 |
104 |
105 | 10. 프로그램이 컴파일 되어, 실행되는 과정을 간략하게 설명해 주세요.
106 |
107 | - 링커와, 로더의 차이에 대해 설명해 주세요.
108 | - 컴파일 언어와 인터프리터 언어의 차이에 대해 설명해 주세요.
109 | - JIT에 대해 설명해 주세요.
110 | - 본인이 사용하는 언어는, 어떤식으로 컴파일 및 실행되는지 설명해 주세요.
111 | - Python 같은 언어는 CPython, Jython, PyPy등의 다양한 구현체가 있습니다. 각각은 어떤 차이가 있을까요? 또한, 실행되는 과정 또한 다를까요?
112 | - 우리는 흔히 fork(), exec() 시스템 콜을 사용하여 프로세스를 적재할 수 있다고 배웠습니다. 로더의 역할은 이 시스템 콜과 상관있는 걸까요? 아니면 다른 방식으로 프로세스를 적재할 수 있는 건가요?
113 |
114 |
115 |
116 |
117 | 11. IPC가 무엇이고, 어떤 종류가 있는지 설명해 주세요.
118 |
119 | - Shared Memory가 무엇이며, 사용할 때 유의해야 할 점에 대해 설명해 주세요.
120 | - 메시지 큐는 단방향이라고 할 수 있나요?
121 |
122 |
123 |
124 |
125 | 12. Thread Safe 하다는 것은 어떤 의미인가요?
126 |
127 | - Thread Safe 를 보장하기 위해 어떤 방법을 사용할 수 있나요?
128 | - Peterson's Algorithm 이 무엇이며, 한계점에 대해 설명해 주세요.
129 | - Race Condition 이 무엇인가요?
130 | - Thread Safe를 구현하기 위해 반드시 락을 사용해야 할까요? 그렇지 않다면, 어떤 다른 방법이 있을까요?
131 |
132 |
133 |
134 |
135 | 13. Thread Pool, Monitor, Fork-Join에 대해 설명해 주세요.
136 |
137 | - Thread Pool을 사용한다고 가정하면, 어떤 기준으로 스레드의 수를 결정할 것인가요?
138 | - 어떤 데이터를 정렬 하려고 합니다. 어떤 방식의 전략을 사용하는 것이 가장 안전하면서도 좋은 성능을 낼 수 있을까요?
139 |
140 |
141 |
142 |
143 | 14. 캐시 메모리 및 메모리 계층성에 대해 설명해 주세요.
144 |
145 | - 캐시 메모리는 어디에 위치해 있나요?
146 | - L1, L2 캐시에 대해 설명해 주세요.
147 | - 캐시에 올라오는 데이터는 어떻게 관리되나요?
148 | - 캐시간의 동기화는 어떻게 이루어지나요?
149 | - 캐시 메모리의 Mapping 방식에 대해 설명해 주세요.
150 | - 캐시의 지역성에 대해 설명해 주세요.
151 | - 캐시의 지역성을 기반으로, 이차원 배열을 가로/세로로 탐색했을 때의 성능 차이에 대해 설명해 주세요.
152 | - 캐시의 공간 지역성은 어떻게 구현될 수 있을까요? (힌트: 캐시는 어떤 단위로 저장되고 관리될까요?)
153 |
154 |
155 |
156 |
157 | 15.메모리의 연속할당 방식 세 가지를 설명해주세요. (first-fit, best-fit, worst-fit)
158 |
159 | - worst-fit 은 언제 사용할 수 있을까요?
160 | - 성능이 가장 좋은 알고리즘은 무엇일까요?
161 |
162 |
163 |
164 |
165 | 16. Thrashing 이란 무엇인가요?
166 |
167 | - Thrashing 발생 시, 어떻게 완화할 수 있을까요?
168 |
169 |
170 |
171 |
172 | 17. 가상 메모리란 무엇인가요?
173 |
174 | - 가상 메모리가 가능한 이유가 무엇일까요?
175 | - Page Fault가 발생했을 때, 어떻게 처리하는지 설명해 주세요.
176 | - 페이지 크기에 대한 Trade-Off를 설명해 주세요.
177 | - 페이지 크기가 커지면, 페이지 폴트가 더 많이 발생한다고 할 수 있나요?
178 | - 세그멘테이션 방식을 사용하고 있다면, 가상 메모리를 사용할 수 없을까요?
179 |
180 |
181 |
182 |
183 |
184 | 18. 세그멘테이션과 페이징의 차이점은 무엇인가요?
185 |
186 | - 페이지와 프레임의 차이에 대해 설명해 주세요.
187 | - 내부 단편화와, 외부 단편화에 대해 설명해 주세요.
188 | - 페이지에서 실제 주소를 어떻게 가져올 수 있는지 설명해 주세요.
189 | - 어떤 주소공간이 있을 때, 이 공간이 수정 가능한지 확인할 수 있는 방법이 있나요?
190 | - 32비트에서, 페이지의 크기가 1kb 이라면 페이지 테이블의 최대 크기는 몇 개일까요?
191 | - 32비트 운영체제는 램을 최대 4G 까지 사용할 수 있습니다. 이 이유를 페이징과 연관 지어서 설명해 주세요.
192 | - C/C++ 개발을 하게 되면 Segmentation Fault 라는 에러를 접할 수 있을텐데, 이 에러는 세그멘테이션/페이징과 어떤 관계가 있을까요?
193 |
194 |
195 |
196 |
197 | 19. TLB는 무엇인가요?
198 |
199 | - TLB를 쓰면 왜 빨라지나요?
200 | - MMU가 무엇인가요?
201 | - TLB와 MMU는 어디에 위치해 있나요?
202 | - 코어가 여러개라면, TLB는 어떻게 동기화 할 수 있을까요?
203 | - TLB 관점에서, Context Switching 발생 시 어떤 변화가 발생하는지 설명해 주세요.
204 |
205 |
206 |
207 |
208 | 20. 동기화를 구현하기 위한 하드웨어적인 해결 방법에 대해 설명해 주세요.
209 |
210 | - volatile 키워드는 어떤 의미가 있나요?
211 | - 싱글코어가 아니라 멀티코어라면, 어떻게 동기화가 이뤄질까요?
212 | -
213 |
214 |
215 |
216 |
217 | 21. 페이지 교체 알고리즘에 대해 설명해 주세요.
218 |
219 | - LRU 알고리즘은 어떤 특성을 이용한 알고리즘이라고 할 수 있을까요?
220 | - LRU 알고리즘을 구현한다면, 어떻게 구현할 수 있을까요?
221 | - LRU 알고리즘의 단점을 설명해 주세요. 이를 해결할 수 있는 대안에 대해서도 설명해 주세요.
222 |
223 |
224 |
225 |
226 | 22. File Descriptor와, File System에 에 대해 설명해 주세요.
227 |
228 | - I-Node가 무엇인가요?
229 | - 프로그래밍 언어 상에서 제공하는 파일 관련 함수 (Python - open(), Java - BufferedReader/Writer 등)은, 파일을 어떤 방식으로 읽어들이나요?
230 |
231 |
232 |
233 |
234 | 23. 동기와 비동기, 블로킹과 논블로킹의 차이에 대해 설명해 주세요.
235 |
236 | - 그렇다면, 동기이면서 논블로킹이고, 비동기이면서 블로킹인 경우는 의미가 있다고 할 수 있나요?
237 | - I/O 멀티플렉싱에 대해 설명해 주세요.
238 | - 논블로킹 I/O를 수행한다고 하면, 그 결과를 어떻게 수신할 수 있나요?
239 |
240 |
241 |
--------------------------------------------------------------------------------
/03-NETWORK.md:
--------------------------------------------------------------------------------
1 | ## 네트워크
2 |
3 |
4 | 1. 쿠키와 세션의 차이에 대해 설명해 주세요.
5 |
6 | - 세션 방식의 로그인 과정에 대해 설명해 주세요.
7 | - HTTP의 특성인 Stateless에 대해 설명해 주세요.
8 | - Stateless의 의미를 살펴보면, 세션은 적절하지 않은 인증 방법 아닌가요?
9 | - 규모가 커져 서버가 여러 개가 된다면, 세션을 어떻게 관리할 수 있을까요?
10 |
11 |
12 |
13 |
14 | 2. HTTP 응답코드에 대해 설명해 주세요.
15 |
16 | - 401 (Unauthorized) 와 403 (Forbidden)은 의미적으로 어떤 차이가 있나요?
17 | - 200 (ok) 와 201 (created) 의 차이에 대해 설명해 주세요.
18 | - 필요하다면 저희가 직접 응답코드를 정의해서 사용할 수 있을까요? 예를 들어 285번 처럼요.
19 |
20 |
21 |
22 |
23 | 3. HTTP Method 에 대해 설명해 주세요.
24 |
25 | - HTTP Method의 멱등성에 대해 설명해 주세요.
26 | - GET과 POST의 차이는 무엇인가요?
27 | - POST와 PUT, PATCH의 차이는 무엇인가요?
28 | - HTTP 1.1 이후로, GET에도 Body에 데이터를 실을 수 있게 되었습니다. 그럼에도 불구하고 왜 아직도 이런 방식을 지양하는 것일까요?
29 |
30 |
31 |
32 |
33 | 4. HTTP에 대해 설명해 주세요.
34 |
35 | - 공개키와 대칭키에 대해 설명해 주세요.
36 | - 왜 HTTPS Handshake 과정에서는 인증서를 사용하는 것 일까요?
37 | - SSL과 TLS의 차이는 무엇인가요?
38 |
39 |
40 |
41 |
42 | 5. 웹소켓과 소켓 통신의 차이에 대해 설명해 주세요.
43 |
44 | - 소켓과 포트의 차이가 무엇인가요?
45 | - 여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요?
46 | - 사용자의 요청이 무수히 많아지면, 소켓도 무수히 생성되나요?
47 |
48 |
49 |
50 |
51 | 6. HTTP/1.1과 HTTP/2의 차이점은 무엇인가요?
52 |
53 | - HOL Blocking 에 대해 설명해 주세요.
54 | - HTTP/3.0의 주요 특징에 대해 설명해 주세요.
55 |
56 |
57 |
58 |
59 | 7. TCP와 UDP의 차이에 대해 설명해 주세요.
60 |
61 | - Checksum이 무엇인가요?
62 | - TCP와 UDP 중 어느 프로토콜이 Checksum을 수행할까요?
63 | - 그렇다면, Checksum을 통해 오류를 정정할 수 있나요?
64 | - TCP가 신뢰성을 보장하는 방법에 대해 설명해 주세요.
65 | - TCP의 혼잡 제어 처리 방법에 대해 설명해 주세요.
66 | - 왜 HTTP는 TCP를 사용하나요?
67 | - 그렇다면, 왜 HTTP/3 에서는 UDP를 사용하나요? 위에서 언급한 UDP의 문제가 해결되었나요?
68 | - 그런데, 브라우저는 어떤 서버가 TCP를 쓰는지 UDP를 쓰는지 어떻게 알 수 있나요?
69 | - 본인이 새로운 통신 프로토콜을 TCP나 UDP를 사용해서 구현한다고 하면, 어떤 기준으로 프로토콜을 선택하시겠어요?
70 |
71 |
72 |
73 |
74 | 8. DHCP가 무엇인지 설명해 주세요.
75 |
76 | - DHCP는 몇 계층 프로토콜인가요?
77 | - DHCP는 어떻게 동작하나요?
78 | - DHCP에서 UDP를 사용하는 이유가 무엇인가요?
79 | - DHCP에서, IP 주소 말고 추가로 제공해주는 정보가 있나요?
80 | - DHCP의 유효기간은 얼마나 긴가요?
81 |
82 |
83 |
84 |
85 | 9. IP 주소는 무엇이며, 어떤 기능을 하고 있나요?
86 |
87 | - IPv6는 IPv4의 주소 고갈 문제를 해결하기 위해 만들어졌지만, 아직도 수많은 기기가 IPv4를 사용하고 있습니다. 고갈 문제를 어떻게 해결할 수 있을까요?
88 | - IPv4와 IPv6의 차이에 대해 설명해 주세요.
89 | - 수많은 사람들이 유동 IP를 사용하고 있지만, 수많은 공유기에서는 고정 주소를 제공하는 기능이 이미 존재합니다. 어떻게 가능한 걸까요?
90 | - IPv4를 사용하는 장비와 IPv6를 사용하는 같은 네트워크 내에서 통신이 가능한가요? 가능하다면 어떤 방법을 사용하나요?
91 | - IP가 송신자와 수신자를 정확하게 전송되는 것을 보장해 주나요?
92 | - IPv4에서 수행하는 Checksum과 TCP에서 수행하는 Checksum은 어떤 차이가 있나요?
93 | - TTL(Hop Limit)이란 무엇인가요?
94 | - IP 주소와 MAC 주소의 차이에 대해 설명해 주세요.
95 |
96 |
97 |
98 |
99 | 10. OSI 7계층에 대해 설명해 주세요.
100 |
101 | - Transport Layer와, Network Layer의 차이에 대해 설명해 주세요.
102 | - L3 Switch와 Router의 차이에 대해 설명해 주세요.
103 | - 각 Layer는 패킷을 어떻게 명칭하나요? 예를 들어, Transport Layer의 경우 Segment라 부릅니다.
104 | - 각각의 Header의 Packing Order에 대해 설명해 주세요.
105 | - ARP에 대해 설명해 주세요.
106 |
107 |
108 |
109 |
110 | 11. 3-Way Handshake에 대해 설명해 주세요.
111 |
112 | - ACK, SYN 같은 정보는 어떻게 전달하는 것 일까요?
113 | - 2-Way Handshaking 를 하지않는 이유에 대해 설명해 주세요.
114 | - 두 호스트가 동시에 연결을 시도하면, 연결이 가능한가요? 가능하다면 어떻게 통신 연결을 수행하나요?
115 | - SYN Flooding 에 대해 설명해 주세요.
116 | - 위 질문과 모순될 수 있지만, 3-Way Handshake의 속도 문제 때문에 이동 수를 줄이는 0-RTT 기법을 많이 적용하고 있습니다. 어떤 방식으로 가능한 걸까요?
117 |
118 |
119 |
120 |
121 | 12. 4-Way Handshake에 대해 설명해 주세요.
122 |
123 | - 패킷이 4-way handshake 목적인지 어떻게 파악할 수 있을까요?
124 | - 빨리 끊어야 할 경우엔, (즉, 4-way Handshake를 할 여유가 없다면) 어떻게 종료할 수 있을까요?
125 | - 4-Way Handshake 과정에서 중간에 한쪽 네트워크가 강제로 종료된다면, 반대쪽은 이를 어떻게 인식할 수 있을까요?
126 | - 왜 종료 후에 바로 끝나지 않고, TIME_WAIT 상태로 대기하는 것 일까요?
127 |
128 |
129 |
130 |
131 | 13. www.github.com을 브라우저에 입력하고 엔터를 쳤을 때, 네트워크 상 어떤 일이 일어나는지 최대한 자세하게 설명해 주세요.
132 |
133 | - DNS 쿼리를 통해 얻어진 IP는 어디를 가리키고 있나요?
134 | - Web Server와 Web Application Server의 차이에 대해 설명해 주세요.
135 | - URL, URI, URN은 어떤 차이가 있나요?
136 |
137 |
138 |
139 |
140 | 14. DNS에 대해 설명해 주세요.
141 |
142 | - DNS는 몇 계층 프로토콜인가요?
143 | - UDP와 TCP 중 어떤 것을 사용하나요?
144 | - DNS Recursive Query, Iterative Query가 무엇인가요?
145 | - DNS 쿼리 과정에서 손실이 발생한다면, 어떻게 처리하나요?
146 | - 캐싱된 DNS 쿼리가 잘못 될 수도 있습니다. 이 경우, 어떻게 에러를 보정할 수 있나요?
147 | - DNS 레코드 타입 중 A, CNAME, AAAA의 차이에 대해서 설명해주세요.
148 | - hosts 파일은 어떤 역할을 하나요? DNS와 비교하였을 때 어떤 것이 우선순위가 더 높나요?
149 |
150 |
151 |
152 |
153 | 15. SOP 정책에 대해 설명해 주세요.
154 |
155 | - CORS 정책이 무엇인가요?
156 | - Preflight에 대해 설명해 주세요.
157 |
158 |
159 |
160 |
161 | 16. Stateless와 Connectionless에 대해 설명해 주세요.
162 |
163 | - 왜 HTTP는 Stateless 구조를 채택하고 있을까요?
164 | - Connectionless의 논리대로면 성능이 되게 좋지 않을 것으로 보이는데, 해결 방법이 있을까요?
165 | - TCP의 keep-alive와 HTTP의 keep-alive의 차이는 무엇인가요?
166 |
167 |
168 |
169 |
170 | 17. 라우터 내의 포워딩 과정에 대해 설명해 주세요.
171 |
172 | - 라우팅과 포워딩의 차이는 무엇인가요?
173 | - 라우팅 알고리즘에 대해 설명해 주세요.
174 | - 포워딩 테이블의 구조에 대해 설명해 주세요.
175 |
176 |
177 |
178 |
179 | 18. 로드밸런서가 무엇인가요?
180 |
181 | - L4 로드밸런서와, L7 로드밸런서의 차이에 대해 설명해 주세요.
182 | - 로드밸런서 알고리즘에 대해 설명해 주세요.
183 | - 로드밸런싱 대상이 되는 장치중 일부 장치가 문제가 생겨 접속이 불가능하다고 가정해 봅시다. 이 경우, 로드밸런서가 해당 장비로 요청을 보내지 않도록 하려면 어떻게 해야 할까요?
184 | - 로드밸런서 장치를 사용하지 않고, DNS를 활용해서 유사하게 로드밸런싱을 하는 방법에 대해 설명해 주세요.
185 |
186 |
187 |
188 |
189 | 19. 서브넷 마스크와, 게이트웨이에 대해 설명해 주세요.
190 |
191 | - NAT에 대해 설명해 주세요.
192 | - 서브넷 마스크의 표현 방식에 대해 설명해 주세요.
193 | - 그렇다면, 255.0.255.0 같은 꼴의 서브넷 마스크도 가능한가요?
194 |
195 |
196 |
197 |
198 | 20. 멀티플렉싱과 디멀티플렉싱에 대해 설명해 주세요.
199 |
200 | - 디멀티플렉싱의 과정에 대해 설명해 주세요.
201 |
202 |
203 |
204 |
205 | 21. XSS에 대해서 설명해 주세요.
206 |
207 | - CSRF랑 XSS는 어떤 차이가 있나요?
208 | - XSS는 프론트엔드에서만 막을 수 있나요?
209 |
210 |
211 |
--------------------------------------------------------------------------------
/04-DATABASE.md:
--------------------------------------------------------------------------------
1 | ## 데이터베이스
2 |
3 |
4 | 1. Key (기본키, 후보키, 슈퍼키 등등...) 에 대해 설명해 주세요.
5 |
6 | - 기본키는 수정이 가능한가요?
7 | - 사실 MySQL의 경우, 기본키를 설정하지 않아도 테이블이 만들어집니다. 어떻게 이게 가능한 걸까요?
8 | - 외래키 값은 NULL이 들어올 수 있나요?
9 | - 어떤 칼럼의 정의에 UNIQUE 키워드가 붙는다고 가정해 봅시다. 이 칼럼을 활용한 쿼리의 성능은 그렇지 않은 것과 비교해서 어떻게 다를까요?
10 |
11 |
12 |
13 |
14 |
15 | 2. RDB와 NoSQL의 차이에 대해 설명해 주세요.
16 |
17 | - NoSQL의 강점과, 약점이 무엇인가요?
18 | - RDB의 어떠한 특징 때문에 NoSQL에 비해 부하가 많이 걸릴 "수" 있을까요? (주의: 무조건 NoSQL이 RDB 보다 빠르다라고 생각하면 큰일 납니다!)
19 | - NoSQL을 활용한 경험이 있나요? 있다면, 왜 RDB를 선택하지 않고 해당 DB를 선택했는지 설명해 주세요.
20 |
21 |
22 |
23 |
24 |
25 | 3. 트랜잭션이 무엇이고, ACID 원칙에 대해 설명해 주세요.
26 |
27 | - ACID 원칙 중, Durability를 DBMS는 어떻게 보장하나요?
28 | - 트랜잭션을 사용해 본 경험이 있나요? 어떤 경우에 사용할 수 있나요?
29 | - 읽기에는 트랜잭션을 걸지 않아도 될까요?
30 |
31 |
32 |
33 |
34 | 4. 트랜잭션 격리 레벨에 대해 설명해 주세요.
35 |
36 | - 모든 DBMS가 4개의 레벨을 모두 구현하고 있나요? 그렇지 않다면 그 이유는 무엇일까요?
37 | - 만약 MySQL을 사용하고 있다면, (InnoDB 기준) Undo 영역과 Redo 영역에 대해 설명해 주세요.
38 | - 그런데, 스토리지 엔진이 정확히 무엇을 하는 건가요?
39 |
40 |
41 |
42 |
43 | 5. 인덱스가 무엇이고, 언제 사용하는지 설명해 주세요.
44 |
45 | - 일반적으로 인덱스는 수정이 잦은 테이블에선 사용하지 않기를 권합니다. 왜 그럴까요?
46 | - 앞 꼬리질문에 대해, 그렇다면 인덱스에서 사용하지 않겠다고 선택한 값은 위 정책을 그대로 따라가나요?
47 | - ORDER BY/GROUP BY 연산의 동작 과정을 인덱스의 존재여부와 연관지어서 설명해 주세요.
48 | - 기본키는 인덱스라고 할 수 있을까요? 그렇지 않다면, 인덱스와 기본키는 어떤 차이가 있나요?
49 | - 그렇다면 외래키는요?
50 | - 인덱스가 데이터의 물리적 저장에도 영향을 미치나요? 그렇지 않다면, 데이터는 어떤 순서로 물리적으로 저장되나요?
51 | - 우리가 아는 RDB가 아닌 NoSQL (ex. Redis, MongoDB 등)는 인덱스를 갖고 있나요? 만약 있다면, RDB의 인덱스와는 어떤 차이가 있을까요?
52 | - (A, B) 와 같은 방식으로 인덱스를 설정한 테이블에서, A 조건 없이 B 조건만 사용하여 쿼리를 요청했습니다. 해당 쿼리는 인덱스를 탈까요?
53 |
54 |
55 |
56 |
57 | 6. RDBMS, NoSQL에서의 클러스터링/레플리케이션 방식에 대해 설명해 주세요.
58 |
59 | - 이러한 분산 환경에선, 트랜잭션을 어떻게 관리할 수 있을까요?
60 | - 마스터, 슬레이브 데이터 동기화 전 까지의 데이터 정합성을 지키는 방법은 무엇이 있을까요?
61 | - 다중 트랜잭션 상황에서의 Deadlock 상황과, 이를 해결하기 위한 방법에 대해 설명해 주세요.
62 | - 샤딩 방식은 무엇인가요? 만약 본인이 DB를 분산해서 관리해야 한다면, 레플리케이션 방식과 샤딩 방식 중 어떤 것을 사용할 것 같나요?
63 |
64 |
65 |
66 |
67 | 7. 정규화가 무엇인가요?
68 |
69 | - 정규화를 하지 않을 경우, 발생할 수 있는 이상현상에 대해 설명해 주세요.
70 | - 각 정규화에 대해, 그 정규화가 진행되기 전/후의 테이블의 변화에 대해 설명해 주세요.
71 | - 정규화가 무조건 좋은가요? 그렇지 않다면, 어떤 상황에서 역정규화를 하는게 좋은지 설명해 주세요.
72 |
73 |
74 |
75 |
76 | 8. View가 무엇이고, 언제 사용할 수 있나요?
77 |
78 | - 그렇다면, View의 값을 수정해도 실제 테이블에는 반영되지 않나요?
79 |
80 |
81 |
82 |
83 | 9. DB Join이 무엇인지 설명하고, 각각의 종류에 대해 설명해 주세요.
84 |
85 | - 사실, JOIN은 상당한 시간이 걸릴 수 있기에 내부적으로 다양한 구현 방식을 사용하고 있습니다. 그 예시에 대해 설명해 주세요.
86 | - 그렇다면 입력한 쿼리에서 어떤 구현 방식을 사용하는지는 어떻게 알 수 있나요?
87 | - 앞 질문들을 통해 인덱스의 중요성을 알 수 있었는데, 그렇다면 JOIN의 성능도 인덱스의 유무의 영향을 받나요?
88 | - 3중 조인 부터는 동작 방식이 약간 바뀝니다. 어떻게 동작하는지, 그리고 그 방식이 성능에 어떠한 영향을 주는지 설명해 주세요.
89 |
90 |
91 |
92 |
93 | 10. B-Tree와 B+Tree에 대해 설명해 주세요.
94 |
95 | - 그렇다면, B+Tree가 B-Tree에 비해 반드시 좋다고 할 수 있을까요? 그렇지 않다면 어떤 단점이 있을까요?
96 | - DB에서 RBT를 사용하지 않고, B-Tree/B+Tree를 사용하는 이유가 있을까요?
97 | - 오름차순으로 정렬된 인덱스가 있다고 할 때, 내림차순 정렬을 시도할 경우 성능이 어떻게 될까요? B-Tree/B+Tree의 구조를 기반으로 설명해 주세요.
98 |
99 |
100 |
101 |
102 | 11. DB Locking에 대해 설명해 주세요.
103 |
104 | - Optimistic Lock/Pessimistic Lock에 대해 설명해 주세요.
105 | - 물리적인 Lock을 건다면, 만약 이를 수행중인 요청에 문제가 생겨 비정상 종료되면 Lock이 절대 해제되지 않는 문제가 생길 수도 있을 것 같습니다. DB는 이를 위한 해결책이 있나요? 없다면, 우리가 이 문제를 해결할 수 없을까요?
106 |
107 |
108 |
109 |
110 | 12. 트래픽이 높아질 때, DB는 어떻게 관리를 할 수 있을까요?
111 |
112 | - DB 서버를 분산하지 않고, 트래픽을 감당할 수 있는 방법은 없을까요?
113 |
114 |
115 |
116 |
117 | 13. Schema가 무엇인가요?
118 |
119 | - Schema의 3계층에 대해 설명해 주세요.
120 |
121 |
122 |
123 |
124 | 14. DB의 Connection Pool에 대해 설명해 주세요.
125 |
126 | - DB와 Client가 Connection을 어떻게 구성하는지 설명해 주세요.
127 |
128 |
129 |
130 |
131 | 15. Table Full Scan, Index Range Scan에 대해 설명해 주세요.
132 |
133 | - 가끔은 인덱스를 타는 쿼리임에도 Table Full Scan 방식으로 동작하는 경우가 있습니다. 왜 그럴까요?
134 | - COUNT (개수를 세는 쿼리) 는 어떻게 동작하나요? COUNT(1), COUNT(*), COUNT(column) 의 동작 과정에는 차이가 있나요?
135 |
136 |
137 |
138 |
139 | 16. SQL Injection에 대해 설명해 주세요.
140 |
141 | - 그렇다면, 우리가 서버 개발 과정에서 사용하는 수많은 DB 라이브러리들은 이 문제를 어떻게 해결할까요?
142 |
143 |
144 |
--------------------------------------------------------------------------------
/05-ETC.md:
--------------------------------------------------------------------------------
1 | ## 개발상식, 기타
2 |
3 |
4 | 1. 가상화가 무엇이고, 이것이 가상머신과 어떠한 차이가 있는지 설명해 주세요.
5 |
6 | - 그렇다면 Docker는 둘 중 어디에 속하나요? 왜 사람들이 Docker를 많이 채택할까요?
7 | - 하나의 Host OS에서 돌아간다면 충분히 한 컨테이너가 다른 컨테이너에 간섭할 수 있는 위험이 있지 않을까요? 이를 어떻게 방어할 수 있을까요?
8 | - Docker 위에 Docker를 올릴 순 없을까요?
9 |
10 |
11 |
12 |
13 | 2. CI/CD 를 사용해 본 경험이 있나요? 있다면 간단하게 설명해 주세요.
14 |
16 |
17 |
18 |
19 | 3. static 키워드는 어떤 의미를 갖나요? (본인이 사용하는 언어에서 없다면 패스...)
20 |
21 | - 컴파일 할 때, static 키워드가 붙은 변수, 함수는 어떻게 처리되나요?
22 | - Java에서 static과 static final은 어떤 차이를 갖나요? final과 static final은요?
23 |
24 |
25 |
26 |
27 | 4. 객체지향 프로그래밍이 무엇인가요?
28 |
29 | - SOLID 원칙에 대해 설명해 주세요.
30 | - 다형성이 무엇인지 설명하고, 동적 다형성과 정적 다형성이 무엇인지 설명해 주세요.
31 | - 오버로딩과 오버라이딩의 차이에 대해 설명해 주세요.
32 | - 클래스가 있는 언어는 반드시 객체지향 언어라고 할 수 있을까요? 그 반대는 성립하나요?
33 |
34 |
35 |
36 |
37 | 5. 프레임워크와 라이브러리의 차이에 대해 설명해 주세요.
38 |
40 |
41 |
42 |
43 | 6. Call By Value와 Call By Reference의 차이를 본인의 언어를 기반으로 설명해 주세요.
44 |
45 | - 사실 이 질문에는 약간의 낚시가 있습니다. 과연 모든 언어에 저 개념이 존재할까요?
46 |
47 |
48 |
49 |
50 | 7. 순수함수가 무엇인지를 함수형 프로그래밍 매커니즘과 연관지어 설명해 주세요.
51 |
52 | - Side Effect가 무엇인가요? 이를 모두 없애는 프로그래밍이 이상적이라고 할 수 있을까요?
53 | - 왜 함수형 프로그래밍 매커니즘을 사용한다고 생각하시나요?
54 | - 순수함수는 Thread Safe 한가요? 왜 그럴까요?
55 | - 고차함수에 대해 설명해 주세요.
56 |
57 |
58 |
59 |
60 | 8. MVC 패턴이 무엇인가요?
61 |
62 | - 다른 아키텍쳐 패턴은 없나요? MVC랑 비교해서 어떤 차이가 있나요?
63 |
64 |
65 |
66 |
67 | 9. 디자인 패턴이 무엇인지 설명해주고, 대표적인 디자인 패턴에 대해 설명해 주세요.
68 |
69 | - Singleton의 장단점에 대해 설명해 주세요.
70 | - Singleton이 하나의 객체를 생성한다는 것을 어떻게 보장할 수 있을까요?
71 |
72 |
73 |
74 |
75 | 10. GC에 대해 설명해 주세요.
76 |
77 | - 본인이 사용하는 언어에서는 GC를 어떻게 구현했나요?
78 | - GC의 장단점에 대해 설명해 주세요.
79 | - GC는 어떤 영역에 있는 데이터를 관리하나요?
80 | - Reference Counting 방식에 대해 설명하고, 이 알고리즘에서 발생할 수 있는 순환 참조 및 Retain Cycle에 대해 설명해 주세요.
81 |
82 |
83 |
84 |
85 | 11. 32비트와 64비트의 차이는 무엇인가요?
86 |
87 | - 32비트에서 가용한 메모리의 크기는 최대 4GB라고 하는데, 왜 그런걸까요?
88 |
89 |
90 |
91 |
92 | 12. 인증과 인가의 차이에 대해 설명해 주세요.
93 |
94 | - OAuth가 무엇인지 설명하고, 이것은 인증인지 인가인지에 대해 설명해 주세요.
95 |
96 |
97 |
98 |
99 | 13. JWT 인증 방식이 무엇인가요?
100 |
101 | - Signature는 어떻게 만들어지나요?
102 | - 만약 Access Token이 탈취되면, 어떻게 대응할 수 있을까요?
103 | - 반대로 Refresh Token이 탈취되면, 어떻게 대응해야 할까요?
104 |
105 |
106 |
107 |
108 | 14. 암호화 알고리즘에 대해 설명해 주세요.
109 |
111 |
112 |
113 | 15. 문자열 인코딩에 대해 설명해 주세요.
114 |
115 | - Base64 인코딩은 일반적인 문자열 인코딩과는 달리, 사용자가 읽기 어려운 알파벳과 숫자 조합으로 변경합니다. 이를 사용하는 이유는 무엇일까요?
116 |
117 |
118 |
119 | 16. Git에 대해 설명해 주세요.
120 |
121 | - 여러 브랜치를 합쳐야 할 때, 어떤 방법을 사용할 수 있는지 "모두" 설명해 주세요.
122 | - 여러 브랜치를 합쳐야 할 때, 어떤 방법을 사용할 수 있는지 "모두" 설명해 주세요.
123 |
--------------------------------------------------------------------------------
/06-ALGORITHM.md:
--------------------------------------------------------------------------------
1 | ## 손코딩
2 | ### 생각날 때 마다 꾸준히 추가해보겠습니다...
3 |
4 | 1. 각종 정렬 알고리즘을 구현해 보세요.
5 | 2. 각종 자료구조 (ex. LinkedList, Queue, Stack, Tree, ...) 를 구현해 보세요.
6 | 3. 배열에 1,000,000 개의 수가 있다고 가정할 때, 여기에서 원하는 수가 몇 번째 인덱스에 위치해 있는지 확인하는 프로그램을 작성해 보세요. (단, 원하는 수가 하나가 아닐 수 있습니다.)
7 | 4. 20개의 숫자가 주어졌을 때, 이 수중 일부 숫자들을 더해서 원하는 수를 만들 수 있는지 확인하는 프로그램을 작성해 조세요.
8 | 5. 1 ~ 999 까지의 아라비아 숫자가 주어졌을 때, 이 숫자를 로마숫자로 변환하는 프로그램을 작성해 보세요.
9 | 6. 배열을 정렬하지 않고, 배열의 중앙값을 구하는 코드를 작성해 보세요.
10 | 7. 알파벳으로 이뤄진 단어가 있을 때, 이 단어에서 중복된 값을 제거하고 오름차순으로 정렬하는 코드를 작성해 보세요. (단, 최대한 효율적으로 작성해 주세요.)
11 | 8. 두 배열이 주어졌을 때, 이 배열의 교**집합**을 구하는 코드를 작성해 보세요. (단, 배열을 제외한 추가적인 자료구조는 사용하지 말아주세요.)
12 | 9. 길이가 N인 배열이 있을 때, 이 배열에서 K 번째로 큰 수를 추출하는 프로그램을 작성해 보세요. (단, 시간복잡도는 O(NlogN) 보다 작아야 합니다.)
13 | 10. 범위가 주어졌을 때 **랜덤 함수를 사용하지 않고,** 20개의 수를 랜덤으로 추첨해주는 프로그램을 작성해 보세요. (Hint: 시간)
14 | 11. 2,000,000 자리의 숫자 여러개가 있고, 이 숫자들을 모두 더해야 한다고 합니다. 어떻게 코드를 작성하면 좋을까요? (Python을 사용하고 있다고 해도, 다른 언어의 long long 범위까지만 사용할 수 있다고 가정합시다.)
15 | 12. 정렬된 두 LinkedList를 합쳐 하나의 정렬된 LinkedList로 만드는 코드를 작성해 보세요.
16 | 13. 어떤 수가 주어졌을 때, 이 수의 소인수를 모두 구하는 코드를 작성해 보세요.
17 | 14. 1 부터 1,000,000 까지의 수를 이어 붙인다고 가정할 때, 이 수에서 0이 몇 번이나 등장하는지 확인하는 코드를 작성해 보세요.
18 | 15. 스택 두개로 큐를, 큐 두개로 스택을 구현하는 코드를 작성해 보세요.
19 |
--------------------------------------------------------------------------------
/07-JAVA_SPRING.md:
--------------------------------------------------------------------------------
1 | ## Java, Spring
2 |
3 |
4 | 1. JVM이 정확히 무엇이고, 어떤 기능을 하는지 설명해 주세요.
5 |
6 | - 그럼, 자바 말고 다른 언어는 JVM 위에 올릴 수 없나요?
7 | - 반대로 JVM 계열 언어를 일반적으로 컴파일해서 사용할 순 없나요?
8 | - VM을 사용함으로써 얻을 수 있는 장점과 단점에 대해 설명해 주세요.
9 | - JVM과 내부에서 실행되고 있는 프로그램은 부모 프로세스 - 자식 프로세스 관계를 갖고 있다고 봐도 무방한가요?
10 |
11 |
12 |
13 |
14 | 2. final 키워드를 사용하면, 어떤 이점이 있나요?
15 |
16 | - 그렇다면 컴파일 과정에서, final 키워드는 다르게 취급되나요?
17 |
18 |
19 |
20 |
21 | 3. 인터페이스와 추상 클래스의 차이에 대해 설명해 주세요.
22 |
23 | - 왜 클래스는 단일 상속만 가능한데, 인터페이스는 2개 이상 구현이 가능할까요?
24 |
25 |
26 |
27 |
28 | 4. 리플렉션에 대해 설명해 주세요.
29 |
30 | - 의미만 들어보면 리플렉션은 보안적인 문제가 있을 가능성이 있어보이는데, 실제로 그렇게 생각하시나요? 만약 그렇다면, 어떻게 방지할 수 있을까요?
31 | - 리플렉션을 언제 활용할 수 있을까요?
32 |
33 |
34 |
35 |
36 | 5. static class와 static method를 비교해 주세요.
37 |
38 | - static 을 사용하면 어떤 이점을 얻을 수 있나요? 어떤 제약이 걸릴까요?
39 | - 컴파일 과정에서 static 이 어떻게 처리되는지 설명해 주세요.
40 |
41 |
42 |
43 |
44 | 6. Java의 Exception에 대해 설명해 주세요.
45 |
46 | - 예외처리를 하는 세 방법에 대해 설명해 주세요.
47 | - CheckedException, UncheckedException 의 차이에 대해 설명해 주세요.
48 | - 예외처리가 성능에 큰 영향을 미치나요? 만약 그렇다면, 어떻게 하면 부하를 줄일 수 있을까요?
49 |
50 |
51 |
52 |
53 | 7. Synchronized 키워드에 대해 설명해 주세요.
54 |
55 | - Synchronized 키워드가 어디에 붙는지에 따라 의미가 약간씩 변화하는데, 각각 어떤 의미를 갖게 되는지 설명해 주세요.
56 | - 효율적인 코드 작성 측면에서, Synchronized는 좋은 키워드일까요?
57 | - Synchronized 를 대체할 수 있는 자바의 다른 동기화 기법에 대해 설명해 주세요.
58 | - Thread Local에 대해 설명해 주세요.
59 |
60 |
61 |
62 |
63 | 8. Java Stream에 대해 설명해 주세요.
64 |
65 | - Stream과 for ~ loop의 성능 차이를 비교해 주세요,
66 | - Stream은 병렬처리 할 수 있나요?
67 | - Stream에서 사용할 수 있는 함수형 인터페이스에 대해 설명해 주세요.
68 | - 가끔 외부 변수를 사용할 때, final 키워드를 붙여서 사용하는데 왜 그럴까요? 꼭 그래야 할까요?
69 |
70 |
71 |
72 |
73 | 9. Java의 GC에 대해 설명해 주세요.
74 |
75 | - finalize() 를 수동으로 호출하는 것은 왜 문제가 될 수 있을까요?
76 | - 어떤 변수의 값이 null이 되었다면, 이 값은 GC가 될 가능성이 있을까요?
77 |
78 |
79 |
80 |
81 | 10. equals()와 hashcode()에 대해 설명해 주세요.
82 |
83 | - 본인이 hashcode() 를 정의해야 한다면, 어떤 점을 염두에 두고 구현할 것 같으세요?
84 | - 그렇다면 equals() 를 재정의 해야 할 때, 어떤 점을 염두에 두어야 하는지 설명해 주세요.
85 |
86 |
87 |
88 |
89 | 11. IoC와 DI에 대해 설명해 주세요.
90 |
91 | - 후보 없이 특정 기능을 하는 클래스가 딱 한 개하면, 구체 클래스를 그냥 사용해도 되지 않나요? 그럼에도 불구하고 왜 Spring에선 Bean을 사용 할까요?
92 | - Spring의 Bean 생성 주기에 대해 설명해 주세요.
93 | - 프로토타입 빈은 무엇인가요?
94 |
95 |
96 |
97 |
98 | 12. AOP에 대해 설명해 주세요.
99 |
100 | - @Aspect는 어떻게 동작하나요?
101 |
102 |
103 |
104 |
105 | 13. Spring 에서 Interceptor와 Servlet Filter에 대해 설명해 주세요.
106 |
107 | - 설명만 들어보면 인터셉터만 쓰는게 나아보이는데, 아닌가요? 필터는 어떤 상황에 사용 해야 하나요?
108 |
109 |
110 |
111 |
112 | 14. DispatcherServlet 의 역할에 대해 설명해 주세요.
113 |
114 | - 여러 요청이 들어온다고 가정할 때, DispatcherServlet은 한번에 여러 요청을 모두 받을 수 있나요?
115 | - 수많은 @Controller 를 DispatcherServlet은 어떻게 구분 할까요?
116 |
117 |
118 |
119 |
120 | 15. JPA와 같은 ORM을 사용하는 이유가 무엇인가요?
121 |
122 | - 영속성은 어떤 기능을 하나요? 이게 진짜 성능 향상에 큰 도움이 되나요?
123 | - N + 1 문제에 대해 설명해 주세요.
124 |
125 |
126 |
127 |
128 | 16. @Transactional 은 어떤 기능을 하나요?
129 |
130 | - @Transactional(readonly=true) 는 어떤 기능인가요? 이게 도움이 되나요?
131 | - 그런데, 읽기에 트랜잭션을 걸 필요가 있나요? @Transactional을 안 붙이면 되는거 아닐까요?
132 |
133 |
134 |
135 |
136 |
137 | 17. Java 에서 Annotation 은 어떤 기능을 하나요?
138 |
139 | - 별 기능이 없는 것 같은데, 어떻게 Spring 에서는 Annotation 이 그렇게 많은 기능을 하는 걸까요?
140 | - Lombok의 @Data를 잘 사용하지 않는 이유는 무엇일까요?
141 |
142 |
143 |
144 |
145 | 18. Tomcat이 정확히 어떤 역할을 하는 도구인가요?
146 |
147 | - 혹시 Netty에 대해 들어보셨나요? 왜 이런 것을 사용할까요?
148 |
149 |
150 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Tech-Interview
2 |
3 | > 기술 면접과 관련하여, 그동안 준비했던, (혹은 스스로 더 공부하고 싶은) 문항들을 정리한 레포입니다.
4 | > 다소 면접을 어렵게 준비했기에, 기술 면접을 처음 준비하시는 분들에게는 어려울 수도 있지만, 차근차근 정리하다보면 많은 도움이 될 수 있을 것입니다!
5 |
6 | - **처음 CS를 준비하시는 분들이라면, 사실 이 레포는 적합하지 않을 수 있습니다. 기본적인 CS에 대한 이해가 있고, 면접을 위해 더 깊은 공부가 필요한 분들에게 적극 권장드립니다!**
7 | - **레포지토리에 있는 내용이 면접의 전부는 아닙니다! 더 많이 찾아보면 좋을 것 같습니다.**
8 | - 문제 수가 많고, 난이도도 있는 편 입니다. 어려울 수 있다는 것을 감안하고 공부하셨으면 좋겠습니다!
9 | - 특정 키워드에 대해, 나올 수 있는 문항들을 다양하게 적었습니다.
10 | - 적힌 풀이를 외우는 것은 지양하기에, **질문들을 중심으로 정리하였습니다.** 풀이는 직접 공부하면서 채우시는걸 강력히 권장합니다.
11 | - 특히나, 해당 레포의 풀이를 다룬 블로그 중에선 틀린 내용을 작성한 경우도 있으니 더더욱 조심해 주세요!
12 |
13 | ## Contents
14 |
15 | - [Data Structure, Algorithm (이론)](https://github.com/VSFe/Tech-Interview/blob/main/01-DATA_STRUCTURE_ALGORITHM.md)
16 | - [Operating System](https://github.com/VSFe/Tech-Interview/blob/main/02-OPERATING_SYSTEM.md)
17 | - [Network](https://github.com/VSFe/Tech-Interview/blob/main/03-NETWORK.md)
18 | - [Database](https://github.com/VSFe/Tech-Interview/blob/main/04-DATABASE.md)
19 | - [Etc](https://github.com/VSFe/Tech-Interview/blob/main/05-ETC.md)
20 | - [손코딩 (연습 문항)](https://github.com/VSFe/Tech-Interview/blob/main/06-ALGORITHM.md)
21 | - [언어/프레임워크 관련 질문 (Java, Spring)](https://github.com/VSFe/Tech-Interview/blob/main/07-JAVA_SPRING.md)
22 |
23 | ## Special Thanks
24 | - 함께 스터디를 진행했던, 고마운 분들입니다.
25 | [BaeRoNuI](https://github.com/BaeRoNuI)
26 | [JongWoo Jeong](https://github.com/knight7024)
27 | [Namkanghyeon](https://github.com/Namkanghyeon)
28 | [Jeong Seokwoo (redjen)](https://github.com/redjen8)
29 | [Hi YJ](https://github.com/0general)
30 |
31 |
32 | + 좋은 결과를 냈던 새로운 분들도 함께합니다.
33 | [sojeongLee](https://github.com/sojeongLee0125)
34 | [DongRyul Lee](https://github.com/Al7ech)
35 | [Junhyuk Lee](https://github.com/sinclairr08)
36 | [Hoin Shin](https://github.com/signalman)
37 | [PangPyo](https://github.com/Pangpyo)
38 |
--------------------------------------------------------------------------------