-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathtech_interview.py
More file actions
45 lines (40 loc) · 17.4 KB
/
tech_interview.py
File metadata and controls
45 lines (40 loc) · 17.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from random import sample
problem_list = {
'os': ['메모리 계층에 대해 설명해 주세요. 왜 계층 구조를 가지고 있나요?', '캐시의 지역성에 대해 설명해 주세요.', '운영체제란 무엇인가요?', '운영체제의 역할을 설명해 주세요.', '사용자 모드와 커널 모드는 어떤 차이가 있나요?', '병목(bottleneck) 현상에 대해 설명해 주세요.', '페이지 캐시와 버퍼 캐시의 차이를 설명해 주세요.', '커널을 설명해 주세요.', '프로세스의 메모리 구조를 설명해 주세요.', '프로세스란 무엇인가요?', '인터럽트에 대해 설명해주세요. 어떤 종류가 있나요?', '인터럽트의 수행 과정을 간단히 설명해 주세요.', '시스템콜을 알고 있나요? 인터럽트와 어떤 차이가 있나요?', '컨텍스트 스위칭에 대해 알고 있나요? 과정에 대해서도 설명해 주세요.', '프로세스의 상태와 상태 변화에 대해 설명해 주세요.', '프로세스끼리 통신하는 방법에 대해 설명해 주세요.', '프로세스 상태 중, blocked 상태와 suspended blocked 상태는 어떤 차이가 있나요?', 'named pipe와 unnamed pipe의 차이를 설명해 주세요.', '인터럽트와 폴링의 차이점을 설명해 주세요.', 'Message Queue와 Named Pipe의 차이점을 설명해 주세요.', 'PCB는 어떻게 관리 되나요?', 'IPC의 종류는 어떤게 있나요? 아는대로 말씀해 주세요.', 'PCB와 TCB에 대해 설명해 주세요.', '스레드란 무엇인가요? 프로세스와 어떤 차이가 있나요?', '스레드를 사용하면 어떤 장점과 단점이 있나요? 어떤 상황에서 스레드를 활용하는게 좋을까요?', '멀티 스레드와 멀티 프로세스를 비교해서 설명해주세요.', '스레드끼리는 어떻게 통신하나요?', '커널 수준 스레드와 유저 수준 스레드의 차이를 설명해주세요.', 'Thread safe와 Reentrant에 대해 설명해주세요.', 'Convoy effect에 대해서 설명해주시고, 이러한 현상을 일으키는 스케쥴링 알고리즘은 무엇인지 말씀해 주세요.', '프로세스 스케줄링 방식에서, 선점과 비선점의 차이를 설명해 주세요.', 'Round Robin 스케줄링 기법에 대해 설명해 주세요.', 'Shortest Job First 스케줄링 기법에 대해 설명해주세요. 이 스케줄링 기법을 사용했을 때 어떤 문제점이 있나요? 해결 방법이 있을까요?', 'Multi-level Queue와 Multi-level Feedback Queue 스케줄링 기법은 어떤 차이가 있나요?', '스케줄러란 무엇인가요? 스케줄러를 구분할 수 있는 기준에 대해 설명해 주세요.', 'FCFS 스케줄링 알고리즘의 장점과 단점을 설명해 주세요.', 'SJF 스케줄링 알고리즘에서, CPU burst time을 계산하는 방법을 설명해 주세요.', 'CPU 스케줄링은 어떤 상황에 필요한가요?', 'Critical Section(임계 영역) 에 대해 설명해 주세요.', 'Race Condition에 대해 설명해주세요. 이런 현상이 발생하는 이유를 설명해 주세요.', 'Mutex와 세마포어의 차이를 설명해 주세요.', '세마포어를 사용했을 때 장점을 설명해 주세요.', '스핀락에 대해 설명해주세요. 어떤 장단점이 있나요? 언제 사용하면 좋을까요?', '모니터란 무엇인가요? 사용하는 언어(ex: 자바, 자바스크립트 등)에서 사용할 수 있나요?', '상호 배제(Mutual exclusion)을 위한 조건 3가지를 설명해주세요.', '공유 데이터를 안전하게 사용하기 위한 방법을 소개해주세요.', '동시와 병행의 차이를 설명해주세요', '동기와 비동기의 차이를 설명해주세요.', '데드락이란 무엇인가요? 언제 데드락이 발생할 수 있나요?', '운영체제에서 데드락 문제를 해결하기 위한 방법을 간단히 소개해주세요.', '은행원 알고리즘(Banker’s algorithm)에 대해 설명해주세요.', 'Starvation과 데드락은 어떤 차이가 있나요?', 'swap-device, swap-in, swap-out에 대해 알고 있나요?', '프로그램을 메모리에 연속적으로 적재하는 방법에 대해 설명해주세요. 어떤 문제점이 발생할 수 있나요?', '외부 단편화와 내부 단편화에 대해 설명해주세요.', '시스템이 프로그램을 연속적으로 메모리에 할당했을 때, 외부 단편화가 발생해 더이상 프로그램을 적재할 수 없다면 어떻게 해결하나요?', '시스템이 프로그램을 연속적으로 메모리에 할당했을 때, 외부 단편화가 발생해 더이상 프로그램을 적재할 수 없다면 어떻게 해결하나요?', '메모리 관리 전략에 대해 설명해주세요.', 'MMU에 대해 설명해주세요. 언제 사용하나요?', 'Paging과 Segmentation에 대해 설명해주세요. 왜 이런 방식을 사용하나요?', 'Paging과 Segmentation의 차이점을 설명해주세요.', 'Paging과 Segmentation은 단편화가 발생하나요? 이유를 설명해주세요.', 'TLB에 대해 알고 있나요? 왜 사용하는지 설명해주세요.', '가상 메모리란 무엇인가요?', '가상 메모리 주소를 실제 메모리 주소에 매핑하는 방법들에 대해 소개해주세요.', '페이지 폴트(Page Fault)란 무엇인가요?', '페이지와 페이지 프레임의 차이를 알고 있나요?', '페이지 폴트가 심각하게 높아지면 어떻게 되나요? 이를 어떻게 해결할 수 있나요?', 'LRU 페이지 교체 알고리즘을 구현한다고 할 때, 어떤 자료구조를 활용할 수 있을까요?', 'Paging 기법을 사용할 때, Page의 크기를 어떻게 설정해야 좋을까요?', 'Locality에 대해 알고 있나요? 페이지 교체 알고리즘과 어떤 관련이 있나요?', '페이지가 교체되면 성능 저하(오버헤드)가 발생하는 이유를 설명해주세요.', '페이지 교체 알고리즘 중, Minimum(Optimal) 알고리즘을 설명해주세요. 왜 사용하나요?', '페이지 교체 알고리즘 중 LRU와 LFU의 차이를 설명해주세요.', 'Variable allocation 알고리즘에 대하여 설명해주세요.', '벨레이디의 역설(Belady’s anomaly)에 대해 설명해주세요.', '스풀링에 대해 설명해주세요.', 'RAID란 무엇인가요? 설명해주세요.'],
'network': ['Delay, timing(jitter), throughput 차이를 설명해 주세요.', 'OSI 7계층이란 무엇인가요?', 'TCP/IP 모델은 무엇인가요? OSI 7계층과의 차이점에 대해서도 말씀해 주세요.', '프로토콜이란 무엇인가요?', 'CSMA에 대해 알고 있나요? CSMA/CD, CSMA/CA 차이를 설명해 주세요. 어디에 사용하나요?', 'CSMA/CA에서 발생할 수 있는 문제점을 설명해주세요. 어떻게 개선할 수 있나요?', '스위치란? 스위치가 작동하는 방식을 설명해 주세요.', 'ARP와 RARP에 대해 설명해 주세요.', 'IP 주소와 MAC 주소의 차이점을 알고 있나요? 각각을 설명해 주세요.', 'NAT에 대해 설명해 주세요.', 'IPv4와 IPv6의 차이를 설명해 주세요.', 'CIDR에 대해 설명해 주세요.', 'subnet mask가 무엇인가요?', 'Classful IP 방식을 설명해 주세요.', '라우팅이랑 라우터에 대해 알고 있나요?', 'TCP와 UDP는 어떤 차이가 있는지 말씀해 주시고, 각각의 사용 시기의 예시를 들어주세요.', 'TCP의 3-way handshake에 대해 설명해 주세요.', 'TCP의 4-way handshake에 대해 설명해 주세요.', '만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까요?', '초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유가 무엇인가요?', '포트 번호는 왜 필요한가요? 주로 사용하는 포트 번호를 아는만큼 설명해 주세요.', 'Virtual Circuit이란 무엇인가요?', '소켓에 대해 알고 있나요? 설명해 주세요.', '쿠키와 세션의 차이점에 대하여 설명해 주세요.', 'DNS에 대해 알고 있나요? DNS의 작동 방식을 설명해 주세요.', 'HTTP와 HTTPS는 어떤 차이가 있나요?', 'HTTP 메소드에 대해 알고 있나요? 주로 사용하는 몇가지 메소드를 설명해 주세요.', 'HTTP 메소드 중 PUT과 PATCH, PUT과 POST의 차이점을 설명해 주세요.', 'HTTP GET과 POST 메소드를 비교해 주세요.', 'HTTP의 동작 방식을 설명해 주세요.', 'HTTP의 버전별 차이점을 간단히 소개해 주세요.', 'HTTP 요청과 응답은 각각 어떻게 구성되어 있나요?', 'REST와 RESTful의 개념을 설명하고 차이를 말해주세요.', 'URI에 대해 설명해 주세요.', '노트북으로 www.google.com에 접속했습니다. 요청을 보내고 받기까지의 과정을 자세히 설명해 주세요.', '네트워크 토폴로지에 대해 설명하고 어떤 종류가 있는지 말해주세요.', '네트워크를 규모 기반으로 분류해 주세요.', '네트워크 성능 분석 명령어에 대해 설명해 주세요.'],
'db': ['데이터베이스란 무엇인가요?', '데이터베이스의 특징은 무엇인가요?', '데이터베이스 시스템의 구성 요소는 무엇인가요?', 'NoSQL이란 무엇인가요?', 'ER 모델은 무엇인가요?', 'Entity, Entitiy type, Entitiy set은 무엇인가요?', 'Data dictionary란?', 'RDBMS와 NoSQL 데이터베이스의 차이점은 무엇인가요?', '객체 관계 매핑(Object-relational mapping, ORM)이란?', 'SQL 기본 문법', 'DDL, DML, DCL의 차이점은?', '트리거란?', 'JOIN이란 무엇이고 어떤 종류가 있나요?', '인덱스(Index)란 무엇이고 왜 사용하나요?', 'Index의 자료구조는 무엇인가요?', 'Primary index와 Secondary index는 무슨 차이가 있나요?', 'Index의 성능을 위해 고려해야할 사항이 무엇이 있을까요?', '인덱스를 어떤 기준으로 선택하나요?', '뷰(View)란 무엇이고 왜 사용하나요?', '뷰를 생성할 때 고려해야 할 사항을 설명해 주세요.', '뷰를 사용할 때 주의해야 할 점을 설명해 주세요.', '뷰와 인덱스, 테이블을 비교해 주세요.', 'DB 락의 종류를 말해주세요.', 'ACID란 무엇이고 왜 중요한가요?', '트랜잭션이란 무엇이고 어떻게 작동하나요?', '트랜잭션의 특성에 대하여 말씀해 주세요.', '트랜잭션에서 Lock을 어떻게 사용하나요?', '트랜잭션을 사용할 때 주의해야 할 점을 설명해 주세요.', '트랜잭션을 사용할 때 어떤 성능 문제가 발생할 수 있나요?', '트랜잭션의 상태는 어떤 것이 있나요?', '트랜잭션 격리단계에 대해서 알고 있나요? 각각의 장단점을 알려주세요.', '데드락(Deadlock)이란 무엇이고 어떻게 발생하나요?', '각 격리 단계에서 발생할 수 있는 문제점을 설명해 주세요.', '키(Key)란 무엇이고 어떤 종류가 있나요?', '데이터베이스 정규화란 무엇인가요?', '정규화와 비정규화는 무엇인가요?', '정규화의 장,단점은?', '데이터베이스 튜닝과 방법에 대해 말해주세요.', 'TPS가 많아져 더 이상의 scale up 할수 없는 상황일 때 처리할 수 있는 방안의 우선순위를 정하여 말해주세요.', '파티셔닝(Partitioning)이란?', '샤딩(Sharding)이란?', '쿼리 최적화란 무엇이고 어떻게 작동하나요?', 'SQL Injection 공격이란 무엇이고 어떻게 방지할 수 있나요?', '백업과 복원이란 무엇이고 왜 중요한가요?', 'Checkpoint란 무엇인가요?'],
'algorithm': ['균형 잡힌 괄호 문제를 해결할 수 있는 알고리즘을 설명해 주세요.', '변수의 선언 없이 문자열을 뒤집는 알고리즘을 말씀해 주세요.', '변수의 선언 없이 정렬을 하고 싶습니다. 어떻게 해야 할까요?', '스택 자료구조에 대해 이야기 해주세요.', '스택을 구현하려면 어떤 자료구조를 사용할 수 있을까요? 이유와 함께 말씀해 주세요.', '단일 연결 리스트가 주어졌을 때 리스트의 맨 뒤에서 m번째 원소를 찾아내는 알고리즘을 만들어 주세요.', '리스트의 head 포인터가 주어졌을 때, 그 리스트가 순환형인지 비순환형인지 알아내는 함수를 작성해 주세요. (언어는 자유롭게, 비순환형이면 false, 순환형이면 true를 return, 리스트 변경 X)', '스택 2개를 이용하여 큐를 구현하려면 어떻게 할 수 있을까요?', '큐 2개를 이용하여 스택을 구현하려면 어떻게 할 수 있을까요?', 'Queue를 사용하여 Heap 자료구조를 구현해 주세요.', '트리가 Binary 트리인지 확인하는 알고리즘을 구현해 주세요.', '임의의 이진 트리의 높이를 계산하는 함수를 작성해 주세요.', '완전 이진 트리에 대해 프리오더, 인오더, 포스트오더 순서대로 노드를 순회해 주세요.', '어떤 이진 검색 트리에 있는 두 노드의 값이 주어졌을 때 가장 가까이 있는 공통 조상을 찾는 알고리즘에 대하여 설명해 주세요.', '왼쪽 서브 트리가 오른쪽 서브 트리보다 노드 수가 더 많은 불균형 이진 검색 트리가 있을 때, 이진 검색 트리 속성은 그대로 유지하면서 더 균형 잡힌 트리가 될 수 있도록 트리를 재구성해 주세요.', '문자열에서 처음으로 반복되지 않는 문자를 효율적으로 찾아내는 함수를 작성해주세요. ‘total’에서 처음으로 등장하는 반복되지 않는 문자는 ‘o’이며, ‘teeter’에서 처음으로 등장하는 반복되지 않는 문자는 ‘r’입니다. 그리고 작성한 알고리즘의 효율에 대해서도 말씀해 주세요.', '변경 가능한 ASCII 문자열에서 문자를 삭제하는 효율적인 함수를 작성해주세요. 이 함수는 str과 remove라는 두 인자를 받아서 str에서 remove에 들어있는 모든 문자를 제거해야 합니다. str과 remove는 모두 문자열입니다.', '최적의 정렬 알고리즘은 무엇이라 생각하나요?', '54321이라는 배열이 주어졌습니다. 어떤 정렬 알고리즘을 사용하여 12345로 정렬하시겠습니까?', '어떤 제조공장을 모니터하는 시스템에서 품질 관리를 할 때 불량이 난 모든 항목의 일련 번호를 목록으로 저장해 둔다고 하자. 근무 시간 동안 공장이 가동되는 중에는 새 일련번호를 목록 맨 뒤에 덧붙인다. 그리고 매일 밤 배치 작업을 돌려서 목록을 다시 정렬한다. 이때 쓸 수 있는 가장 좋은 정렬 알고리즘은?', '각각 크기가 다른 n개의 팬케이크가 차곡차곡 쌓여 있는 스택과 팬케이크 뒤집개가 있습니다. 뒤집개를 아무 틈에나 끼워서 그 위에 있는 팬케이크 스택을 한꺼번에 들어올려 그대로 뒤집어서 올려놓을 수 있습니다. 최적의 알고리즘을 쓴다고 할 때, 모든 팬케이크를 크기순으로(제일 큰 게 아래로 가도록) 정렬할 때 최악인 경우 몇번 뒤집어야 할까요?', 'Fibonacci 수열은 다양하게 작성할 수 있습니다. 어떻게 작성할 수 있는지 말씀해주시고 각각의 방식에 대한 시간복잡도와 공간복잡도에 대해서 말씀해 주세요.', 'Array와 LinkedList의 차이를 설명하세요.', 'Heap에서의 delete 과정을 그려주세요.', 'DFS와 BFS의 차이점에 대해서 설명해 주세요.', '이진트리의 종류에 대해 아는대로 말하고 해당 트리의 특징을 설명해 주세요.', '이진탐색트리에서 탐색 연산이 갖는 시간복잡도를 말하고 왜 그런지 설명해 주세요.', 'Heap에 대해 설명해 주세요.', 'Heap sort가 어떻게 진행되는지 설명해 주세요.', 'heap에서 delete가 어떻게 진행되는지 설명해 주세요.', 'Red-Black 트리에 대해 설명해 주세요.', 'Red-Black 트리의 삽입, 삭제가 어떻게 진행되는지 설명해 주세요.', 'b-tree와 b+tree의 차이에 대해 설명해주세요.', '퀵소트에 대해 설명해 주세요.', '그래프에서 최단경로를 찾는 알고리즘들에 대해 설명하고 각각의 특징에 대해 설명해 주세요.']
}
while True:
print("과목의 종류 : os, network, db, algorithm")
while True:
subject = input("과목을 입력해 주세요. : ")
if subject in list(problem_list.keys()):
break
else:
print("잘못된 과목을 입력하셨습니다. 다시 입력해 주세요.")
print(f"{subject}의 총 문제 수는 {len(problem_list[subject])}입니다.")
while True:
num = input("문제의 수를 입력해 주세요. : ")
if num.isdigit() and 0 < int(num) <= len(problem_list[subject]):
break
else:
print("문제 수 범위 내의 숫자를 입력해 주세요.")
idx_list = sample(range(len(problem_list[subject])), int(num))
for idx in idx_list:
print(problem_list[subject][idx])
input()
flag = False
while True:
stay = input("계속하시려면 1, 그만하시려면 2를 입력해 주세요. : ")
if stay == '1':
flag = True
break
elif stay == '2':
flag = False
break
else:
print("1, 2 중에 하나의 숫자를 입력해 주세요.")
if not flag:
break
print("수고하셨습니다. 당신의 합격을 기원합니다!!")