# CS 스터디 - 면접대비
### A, B, C => 중요도 입니다.
## 개인적으로 참고한 책 (그저 참고만)
- 점프 투 파이썬(e-book 무료) [위키독스](https://wikidocs.net/book/1)
- 인공지능을 위한 수학
- 밑바닥부터 시작하는 딥러닝 1 (신경망 기초를 알려줌. 2는 자연어처리, 3은 프레임워크 제작인데, 면접을 위해서라면 2권까지가 좋은 듯)
- 쉽게 배우는 운영체제
- 데이터베이스 개론과 실습
- 쉽게 배우는 데이터통신과 컴퓨터 네트워크
- 컴퓨터 구조 및 설계 (이 책 이해하기 어려운데 대안 책이 안보인다...)
- C언어로 쉽게 풀어 쓴 자료구조 (포인터 설명 때문에 C언어로 쓰여진듯 하다. 파이썬으로 쓴 자료구조 교재도 존재할 듯)
- 누워읽는 알고리즘 (진짜로 누워서 몇 번 읽는다. 사실상 자료구조책에서 대부분을 알게된다.)
## 운영체제 (메모리 관리를 중요시해서 나올거 같음)
- 프로세스 실행 시 메모리구조에 대해 설명해주세요. (A)
- 멀티 프로세스와 멀티 스레드에 대해 설명해주세요. (B)
- 멀티스레드: 인터넷 익스플로러
- 멀티 프로세스: 크롬
- 램을 많이 먹음
- 중첩되는 자원을 모아서 공유자원으로 만들자. 그리고 쓰레드를 이용하자
- 프로세스를 회사 내부의 프로젝트를 진행하는 팀의 최소 단위라고 가정하면 스레드는 해당 팀을 구성하는 프로젝트 팀원.
- 프로세스와 스레드의 차이점에 대해 설명해주세요. (A) [링크](https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4)
- 결론부터: 스레드가 프로세스 안에 포함이 되어 있다.
- 프로세스: 운영체제의 최소 작업 단위
- 쓰레드: 프로세스의 실행의 단위
- 공유자원의 구성은 코드, 힙, 데이터다. 스택은 포함되지 않는다.
- 이후는 멀티프로세스와 멀티쓰레드의 차이를 알려주었다.
- 크롬은 멀티프로세스 => 램을 엄청 잡아먹는다. but 하나하나 독립적 프로세스라 하나에 오류가 나도 다른 작업에 영향이 없음
- 익스플로러는 멀티쓰레드 => 공유자원을 사용해서 램을 적게먹는다. 그러나 하나에 오류가 나면 전체 창이 닫힌다.
- 프로세스 = 팀, 쓰레드 = 개인으로 이해해도 느낌상 비슷하다.
- 데드락에 대해 설명해주세요. (A)
- 프로세스의 상태와 상태 전이에 대해 설명해주세요. (A)
- 페이지 교체 알고리즘의 종류와 방식을 아는대로 설명해주세요. (B)
- 프로세스의 문맥 교환 과정을 설명해주세요. (B)
- 세마포어와 뮤텍스, 둘의 차이점을 설명해주세요. (B)
## 데이터베이스
- 데이터베이스 인덱스에 대해 설명해주세요. 인덱스가 어떤 구조로 되어있는지 설명해주세요 (A)
- 트랜잭션은 무엇이고, 트랜잭션의 특징엔 어떤 것이 있나요? (A)
- INNER JOIN과 OUTER JOIN, CROSS JOIN에 대해 설명해주세요. (B)
- 트랜잭션의 격리수준에 대해 설명해주세요. (A)
- 파일시스템과 비교했을 때 데이터베이스의 사용하면서 생기는 장점은 무엇인가요? (B)
- DB 정규화의 개념에 대해 설명해주세요. (B)
- 뭔가 더있을거 같은데 면접에는 의외로 많이 안나왔음.. 특히 SQL명령문은 자세히 안물어보는듯, 그러나 인공지능은 다를지도?
## 파이썬, 파이토치 - 예상질문 추가바람
## 딥러닝 - 예상질문 추가바람
## 인공지능수학 - 예상질문 추가바람
- 이하 내용은 추론으로 작성하였습니다.
- 미분에 대해 설명해주세요. 사용하는 목적은 무엇인가요
- 경사하강법에 대해 설명해주세요.
- 행렬을 왜 사용하는 건가요.
## 자료구조
- 해시테이블에 대해 설명해주세요. (A)
- 큐와 스텍의 차이점을 자세히 알려주세요. (A)
- 배열과 연결리스트의 차이점을 알려주세요. (A)
- 시간복잡도와 공간복잡도는 무엇인지 알려주세요. (B)
- 퀵 정렬의 과정을 알려주세요. (A)
- 합병 정렬과 퀵 정렬의 차이를 알려주세요. (C)
- 트리 자료구조에 대해 알려주세요. (B)
- 우선순위 큐 자료구조에 대해 알려주세요. (C)
- BFS와 DFS의 차이를 알려주세요. (C)
## 알고리즘 (사실상 자료구조에서 다 한거같은..)
- 그리디 알고리즘에 대해 설명해주세요.
## 개발관련
- 도커에 대해 말씀해주세요. 어떤점이 좋은가요 (B)
- Git에서 Merge와 Rebase에 대한 차이를 알려주세요. (깃 질문은 이것만 나온다 해도 과언이 아님..) (A)
- Call by Value, Call by Reference를 알려주세요. 포인터에 대해 설명해주면 금상첨화 (A)
- 클로저에 대해 알려주세요. (B)
- 객체지향프로그래밍의 각 구성요소를 설명해주세요. => 추상화, 캡슐화, 다형성, 상속 (A)
- 파이토치와 파이썬에 대한것은 잘모르겠는..
## 네트워크 (인공지능 분야는 안쓸 듯)
- TCP와 UDP에 대해 간략히 설명하고, 그 둘의 차이점을 말씀해주세요.
- TCP의 Flow을 control하는 방식을 아는대로 설명해주세요.
- HTTP와 HTTPS에 대해 간략히 설명하고, 그 둘의 차이점을 말씀해주세요.
- HTTPS의 동작 과정을 설명해주세요.
- TCP와 HTTP는 각각 어떤 차이점이 있나요?
- 하나의 계층에서 다 처리하면 될거같은데 왜 계층을 나눈 건가요?
- 브라우저에 URL을 입력했을 때 일어나는 일을 OSI-7계층과 연관지어 설명해 주세요.(네이버 질문이였는데 그냥 벙찜)
## 컴퓨터구조론 (이건 물어본 적이 없음.. 공부하고 잊혀져 가는 지식)