Skip to content

Commit a7b00de

Browse files
authored
update: qna list week-14 (#71)
1 parent 531d2c6 commit a7b00de

File tree

5 files changed

+219
-61
lines changed

5 files changed

+219
-61
lines changed

네트워크/README.md

+11-2
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@
9999
<li>변환된 웹 페이지 데이터는 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게 됨.</li>
100100
</ol>
101101
</details>
102-
103-
104102
<details>
105103
<summary><strong>💡 HTTP 메소드</strong></summary>
106104
<ul>
@@ -128,4 +126,15 @@
128126
<li>별도의 설정 없이는 외부에서 접근 불가능하다.</li>
129127
</ul>
130128
</ul>
129+
</details>
130+
131+
<details>
132+
<summary><strong>💡 HTTP 상태코드</strong></summary>
133+
<ul>
134+
<li>1xx (Informational) : 요청이 수신되어 처리중 → 거의 사용안함</li>
135+
<li>2xx (Successful) : 요청 정상 처리</li>
136+
<li>3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요</li>
137+
<li>4xx (Client Error) : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음</li>
138+
<li>5xx (Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함.</li>
139+
</ul>
131140
</details>

데이터베이스/README.md

+82-41
Original file line numberDiff line numberDiff line change
@@ -44,56 +44,60 @@
4444
</ul>
4545
</ul>
4646
</details>
47-
4847
<details>
4948
<summary><strong>💡 데이터베이스의 설계 순서</strong></summary>
5049
<ol>
51-
<li>요구 분석</li>
52-
<ul>
53-
<li>요구 조건 명세서 작성</li>
54-
</ul>
55-
<li>개념적 설계</li>
56-
<ul>
57-
<li>개념 스키마, 트랜잭션 모델링, E-R 모델</li>
58-
</ul>
59-
<li>논리적 설계</li>
60-
<ul>
61-
<li>dbms에 맞는 스키마 설계, 트랜잭션 인터페이스 설계</li>
62-
</ul>
63-
<li>물리적 설계</li>
64-
<ul>
65-
<li>dbms에 맞는 물리적 구조 구축</li>
66-
</ul>
67-
<li>구현</li>
68-
<ul>
69-
<li>dbms로 데이터 생성 및 트랜잭션 작성</li>
70-
</ul>
50+
<li>
51+
요구 분석
52+
<ul>
53+
<li>요구 조건 명세서 작성</li>
54+
</ul>
55+
</li>
56+
<li>
57+
개념적 설계
58+
<ul>
59+
<li>개념 스키마, 트랜잭션 모델링, E-R 모델</li>
60+
</ul>
61+
</li>
62+
<li>
63+
논리적 설계
64+
<ul>
65+
<li>dbms에 맞는 스키마 설계, 트랜잭션 인터페이스 설계</li>
66+
</ul>
67+
</li>
68+
<li>
69+
물리적 설계
70+
<ul>
71+
<li>dbms에 맞는 물리적 구조 구축</li>
72+
</ul>
73+
</li>
74+
<li>
75+
구현
76+
<ul>
77+
<li>dbms로 데이터 생성 및 트랜잭션 작성</li>
78+
</ul>
79+
</li>
7180
</ol>
7281
</details>
7382

7483
<details>
7584
<summary><strong>💡 키의 종류</strong></summary>
7685
<ul>
77-
<li>슈퍼키(Super Key)</li>
78-
<ul>
79-
<li>유일성을 만족하는 키</li>
80-
</ul>
81-
<li>후보키(Candidate Key)</li>
82-
<ul>
83-
<li>유일성과 최소성을 만족하는 키</li>
84-
</ul>
85-
<li>기본키(Primary Key)</li>
86-
<ul>
87-
<li>후보키에서 선택된 키</li>
88-
</ul>
89-
<li>대체키(Alternate Key)</li>
90-
<ul>
91-
<li>후보키 중에 기본키로 선택되지 않은 키</li>
92-
</ul>
93-
<li>외래키(Foreign Key)</li>
94-
<ul>
95-
<li>다른 릴레이션의 기본키가 되는 키</li>
96-
</ul>
86+
<li>
87+
슈퍼키(Super Key) : 유일성을 만족하는 키
88+
</li>
89+
<li>
90+
후보키(Candidate Key) : 유일성과 최소성을 만족하는 키
91+
</li>
92+
<li>
93+
기본키(Primary Key) : 후보키에서 선택된 키
94+
</li>
95+
<li>
96+
대체키(Alternate Key) : 후보키 중에 기본키로 선택되지 않은 키
97+
</li>
98+
<li>
99+
외래키(Foreign Key) : 다른 릴레이션의 기본키가 되는 키
100+
</li>
97101
</ul>
98102
</details>
99103

@@ -104,6 +108,7 @@
104108
<li>최소성: 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
105109
</ul>
106110
</details>
111+
107112
<details>
108113
<summary><strong>💡 인덱스란 무엇인지</strong></summary>
109114
추가적인 쓰기 작업과 저장 공간을 활용해 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조<br>
@@ -115,6 +120,7 @@
115120
</ul>
116121
</details>
117122

123+
118124
<details>
119125
<summary><strong>💡 INNER JOIN vs OUTER JOIN</strong></summary>
120126
<ul>
@@ -124,4 +130,39 @@
124130
INNER JOIN 문을 포함하고 한쪽에만 내용이 있더라도 지정한 기준 테이블에 있는 모든 데이터를 가져오는 조인방식
125131
</ul>
126132
⇒ INNER JOIN은 교집합, OUTER JOIN은 합집합
133+
</details>
134+
135+
<details>
136+
<summary><strong>💡 정규화란 무엇인가?</strong></summary>
137+
RDB(관계형 데이터베이스)에서 중복의 최소화를 위해 데이터를 구조화하는 작업이다.<br>
138+
중복된 데이터를 허용하지 않음으로써 데이터의 무결성(Integrity) 유지와 DB 저장 용량을 줄일 수 있다.<br>
139+
정규화는 나쁜 릴레이션의 어트리뷰트를 나눠 좋고 작은 릴레이션으로 분해하는 작업을 말한다.<br>
140+
정규화 작업을 통해 정규형을 만족하게 되며, 정규형은 특정 조건을 만족하는 릴레이션의 스키마 형태를 의미한다.<br><br>
141+
정규형에는 기본 정규형과 고급 정규형이 있다.
142+
<ul>
143+
<li>기본 정규형 : 제 1 정규형, 제 2 정규형, 제 3 정규형, BCNF(보이스/코드 정규형)</li>
144+
<li>고급 정규형 : 제 4 정규형, 제 5 정규형</li>
145+
</ul>
146+
</details>
147+
148+
<details>
149+
<summary><strong>💡 기본 정규형과 고급 정규형</strong></summary>
150+
<ul>
151+
<li>
152+
기본 정규형
153+
<ul>
154+
<li>제 1 정규형 : 릴레이션에 속한 모든 속성의 도메인이 더 이상 분해되지 않는 원자 값으로만 구성된 정규형</li>
155+
<li>제 2 정규형 : 릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속된 정규형</li>
156+
<li>제 3 정규형 : 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않는, 이행적 함수 종속을 제거한 정규형</li>
157+
<li>BCNF(보이스/코드 정규형) : 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 정규형 후보키가 아닌 결정자를 제거함으로써 조건 성립</li>
158+
</ul>
159+
</li>
160+
<li>
161+
고급 정규형
162+
<ul>
163+
<li>제 4 정규형 : 릴레이션이 BCNF를 만족하며, 함수 종속이 아닌 다치 종속을 제거해야 만족하는 정규형</li>
164+
<li>제 5 정규형 : 릴레이션이 제 5 정규형을 만족하며, 후보키를 통하지 않은 조인 종속을 제거해야 만족하는 정규형</li>
165+
</ul>
166+
</li>
167+
</ul>
127168
</details>

알고리즘/README.md

+9
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,13 @@
8989
<details>
9090
<summary><strong>💡 정렬 알고리즘 시간복잡도</strong></summary>
9191
<img src="https://user-images.githubusercontent.com/70627979/213904153-b23c37c5-9978-47eb-a024-ad06db4ba0d0.png" alt="image" style="zoom:70%;" />
92+
</details>
93+
94+
<details>
95+
<summary><strong>💡 자료구조 별 시간 복잡도</strong></summary>
96+
알고리즘을 해결할 때 사용되는 자료구조에는 배열, 단일 연결 리스트, 이중 연결 리스트, 스택, 큐, 해시 테이블, 이진 트리 등이 있다.<br>
97+
<ul>
98+
<li>시간 복잡도</li>
99+
<img width="603" alt="image" src="https://user-images.githubusercontent.com/70627979/217188276-213e95e1-c639-4a1e-9243-46d52760d0c6.png">
100+
</ul>
92101
</details>

운영체제/README.md

+57-15
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
</ul>
6868
⇒ 4가지를 전부 만족해야 한다.
6969
</details>
70-
7170
<details>
7271
<summary><strong>💡 캐시란 무엇인가?</strong></summary>
7372
<ul>
@@ -94,25 +93,25 @@
9493
<li>
9594
멀티 프로세스
9695
<ul>
97-
<li>하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 방식이다.</li>
98-
<li>하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 독립적이고 안정적이다.</li>
99-
<li>각 프로세스들이 독립된 메모리 영역을 가지고 있기 때문에, Context Swtiching 이 자주 일어나서 주소 공간의 공유가 빈번해지게 되면 성능 저하가 발생할 수 있다.</li>
100-
</ul>
96+
<li>하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 방식이다.</li>
97+
<li>하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 독립적이고 안정적이다.</li>
98+
<li>각 프로세스들이 독립된 메모리 영역을 가지고 있기 때문에, Context Swtiching 이 자주 일어나서 주소 공간의 공유가 빈번해지게 되면 성능 저하가 발생할 수 있다.</li>
99+
</ul>
101100
</li>
102-
103101
<br>
104-
<li>
105-
멀티 스레드
106-
<ul>
107-
<li>하나의 프로세스에서 여러 스레드로 자원을 공유하여 작업을 나누어 수행하는 방식이다.</li>
108-
<li>스레드는 프로스세 내 스택 영역을 제외한 메모리 영역을 공유하기 때문에, 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.</li>
109-
<li>스레드 간 Context Switching 이 빠르다.</li>
110-
<li>하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.</li>
111-
</ul>
112-
</li>
102+
<li>
103+
멀티 스레드
104+
<ul>
105+
<li>하나의 프로세스에서 여러 스레드로 자원을 공유하여 작업을 나누어 수행하는 방식이다.</li>
106+
<li>스레드는 프로스세 내 스택 영역을 제외한 메모리 영역을 공유하기 때문에, 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.</li>
107+
<li>스레드 간 Context Switching 이 빠르다.</li>
108+
<li>하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.</li>
109+
</ul>
110+
</li>
113111
</ul>
114112
</details>
115113

114+
116115
<details>
117116
<summary><strong>💡 Mutex vs Semaphore</strong></summary>
118117
<ul>
@@ -126,4 +125,47 @@
126125
</ul>
127126
</li>
128127
</ul>
128+
</details>
129+
130+
<details>
131+
<summary><strong>💡 페이지 교체 알고리즘의 종류</strong></summary>
132+
<ul>
133+
<li>
134+
<strong>Optimal Replacement Policy (최적)</strong>
135+
<ul>
136+
<li>모든 입력을 알고있다고 가정한 후 가장 먼 미래에 교체되는 페이지를 먼저 교체</li>
137+
→ 모든 입력의 순서를 알아야 하므로 실제로는 구현이 불가능하다.<br>
138+
→ 성능측정의 기준으로 사용되어짐 (이론상 이것보다 좋은 효율을 낼 수 없다.)
139+
</ul>
140+
</li>
141+
<li>
142+
<strong>FIFO (First Input First Output)</strong>
143+
<ul>
144+
<li>페이지 교체 시 물리적 메모리에 <strong>가장 먼저 올라온 페이지를 우선적으로 내보내는 알고리즘.</strong></li>
145+
<li>단순히 먼저 들어온 순서대로 교체하기 때문에 효율적으로 안좋음.</li>
146+
</ul>
147+
</li>
148+
<li>
149+
<strong>LRU (Least Recently Used)</strong>
150+
<ul>
151+
<li><strong>가장 예전에 사용되어진 페이지를 교체</strong></li>
152+
<li>페이지들이 언제 사용되었는지 기록하는 추가적인 작업이 필요하다.</li>
153+
</ul>
154+
</li>
155+
<li>
156+
<strong>LFU (Least Frequently Used)</strong>
157+
<ul>
158+
<li><strong>가장 덜 접근된 페이지를 교체</strong></li>
159+
<li>LRU가 마찬가지로 페이지가 몇번 사용되었는지를 추가적으로 기록해야 한다.</li>
160+
</ul>
161+
</li>
162+
<li>
163+
<strong>클럭 알고리즘 (Clock algorithm)</strong>
164+
<ul>
165+
<li>시계처럼 페이지를 순회하며 해당 페이지의 사용여부를 판단하여 페이지 교체 결정</li>
166+
<li>LRU와 비슷하지만, <strong>교체되는 페이지가 가장 예전에 사용되었는지 확신할 수 없다.</strong></li>
167+
<li>시계 바늘이 한 바퀴 도는 동안 걸리는 시간만큼 페이지를 메모리에 유지시켜 페이지 부재율을 줄이도록 설계</li>
168+
</ul>
169+
</li>
170+
</ul>
129171
</details>

자료구조/README.md

+60-3
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
</li>
3030
</ul>
3131
</details>
32-
33-
3432
<details>
3533
<summary><strong>💡 큐와 스택의 차이</strong></summary>
3634
<ul>
@@ -74,7 +72,6 @@
7472
</li>
7573
</ul>
7674
</details>
77-
7875
<details>
7976
<summary><strong>💡 해시 테이블이란?</strong></summary>
8077
<ul>
@@ -83,6 +80,7 @@
8380
<li>해시 테이블은 key-value 가 1:1 로 매핑되어 있기 때문에 검색, 삽입, 삭제 과정에서 모두 평균적으로 O(1)의 시간 복잡도를 갖는다.</li>
8481
</ul>
8582
</details>
83+
8684
<details>
8785
<summary><strong>💡 연결 리스트란?</strong></summary><ul>
8886
<li>각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어있는 방식으로 데이터를 저장하는 자료구조</li>
@@ -91,6 +89,7 @@
9189
</ul>
9290
</details>
9391

92+
9493
<details>
9594
<summary><strong>💡 BST의 문제점과 해결방안</strong></summary><ul>
9695
<li>문제점: 이진 탐색 트리(BST)는 Skewed Tree(편향된 트리)가 될 수 있으며, 이로 인해 평균 탐색 연산이 최악의 경우 O(n)의 시간 복잡도를 갖게 된다.</li>
@@ -106,3 +105,61 @@
106105
<li>후위 순회는 [루트 → 왼쪽 자식 → 오른쪽 자식] 순으로 순회</li>
107106
</ul>
108107
</details>
108+
<details>
109+
<summary><strong>💡 힙의 삭제 연산 과정을 설명해주세요</strong></summary>
110+
<ul>
111+
<li>
112+
힙이란 최댓값 또는 최솟값을 찾아내는 연산을 쉽게하기 위해 고안된 구조이다.
113+
<ul>
114+
<li>최대 힙: 각 노드의 키 값이 자식의 키 값보다 작지 않음</li>
115+
<li>최소 힙: 각 노드의 키 값이 자식의 키 값보다 크지 않음</li>
116+
</ul>
117+
</li>
118+
<li>
119+
루트 노드의 값이 가장 먼저 삭제된다.
120+
<ul>
121+
<li>최대 힙 : 최대값부터 삭제됨</li>
122+
<li>최소 힙 : 최소값부터 삭제됨</li>
123+
</ul>
124+
<li>최대 힙 삭제 과정</li/>
125+
<img src="https://s3.us-west-2.amazonaws.com/secure.notion-static.com/1893b9c8-97c3-4f7f-9b28-1031239898ef/max_heap_deletion_animation.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20230207%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20230207T084545Z&X-Amz-Expires=86400&X-Amz-Signature=54efd328bc9bb3b1c910de9ebbaaa4059bccb6e147b065e6d029e9803d71632b&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22max_heap_deletion_animation.gif%22&x-id=GetObject" alt="image"/>
126+
</li>
127+
<ol>
128+
<li>루트 노드가 삭제</li>
129+
<li>마지막 노드가 루트 노드의 자리로 이동</li>
130+
<li>
131+
힙의 종류 별로, 루트노드에 알맞은 값이 와야함
132+
<ul>
133+
<li>최대힙은 최대값, 최소힙은 최소값</li>
134+
<li>때문에, 재구조화 과정이 발생</li>
135+
</ul>
136+
</li>
137+
</ol>
138+
</ul>
139+
</details>
140+
141+
<details>
142+
<summary><strong>💡 우선순위 큐의 내부 구조를 설명해주세요.</strong></summary>
143+
<ul>
144+
<li>우선순위 큐란 Input 순서에 상관 없이, 우선순위가 높은 데이터를 먼저 Output하기 위해 고안된 자료구조이다.</li>
145+
<li>
146+
구현방법
147+
<img src="/Users/kanghyun/Library/Application Support/typora-user-images/image-20230207175711226.png" alt="image-20230207175711226"/>
148+
</li>
149+
<li>
150+
배열과 리스트
151+
<ul>
152+
<li>데이터의 삽입, 삭제 과정의 비효율성</li>
153+
<li>삽입 위치를 찾기 위해 모든 데이터와 우선 순위를 비교해야함</li>
154+
</ul>
155+
</li>
156+
<li>
157+
158+
<ul>
159+
<li>Worst Case 임에도 시간 복잡도 O(log n)을 보장</li>
160+
<li>완전 이진트리 형태이기 때문</li>
161+
</ul>
162+
</li>
163+
⇒ 우선순위 큐는 힙으로 구현됨
164+
</ul>
165+
</details>

0 commit comments

Comments
 (0)