* CS면접을 대비해서 공부한 내용들을 정리했습니다. 틀린 부분이 있을 수 있으니 그럴 경우 댓글 달아주시면 감사하겠습니다!
* 분야는 운영체제, 데이터베이스, 네트워크, 자바, 자료구조 등등 가리지 않고 했기 때문에 여러 과목과 내용이 섞여 있습니다.
1. 메인 메모리란?
메인 메모리는 CPU가 직접 접근할 수 있는 기억장치이다. 프로세스가 실행되려면 프로그램이 메모리에 올라와야 한다. 메인 메모리는 주소가 할당된 일련의 바이트들로 구성되어 있다.
(CPU는 레지스터가 지시하는대로 메모리에 접근해서 다음에 수행할 명령어를 가져온다. 명령어를 수행할 때 메모리에 필요한 데이터가 없으면 해당 데이터를 우선 가져와야 한다. 이 역할을 하는 것이 MMU(메모리 관리 장치)이다.)
2. 옵서버 패턴 개념과 장점
어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인패턴이다.
주로 분산 이벤트 핸들링 시스템을 구현할 때 이용하며, MVC 패턴과 자주 결합된다. 옵서버는 데이터가 변경되었을 때 주제에서 데이터를 전달해주기를 기다리는 입장이기 때문에 의존성을 가진다. 그러면 여러 객체에서 동일한 데이터를 제어하도록 하는 것에 비해 더 깔끔한 객체지향 디자인이 가능하다.
3. 데드락
데드락은 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태로, 고속도로에서 차가 막히는 것처럼 무한 대기가 일어나는 상태이다. 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생하는 현상이다.
데드락 발생조건은 상호배제, 점유대기, 비선점, 환형대기이다.
1. 상호배제: 자원은 한 번에 한 프로세스만 사용할 수 있다.
2. 점유 대기: 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 한다.
3. 비선점: 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.
4. 환형 대기: 프로세스의 집합이 환형으로 자원을 대기하고 있다.
4. 데이터베이스의 무결성 세가지 설명
D: 데이터베이스의 무결성이란, 데이터의 정확성, 일관성, 유효성이 유지되는 것이다.
1. 개체 무결성
기본키 제약이라고도 하며, 테이블은 기본키를 설정하고 그에 따른 무결성을 지켜야하는 조건
-> 기본키에는 null 값 불가
-> 테이블 내 오직 하나만 존재
2. 참조 무결성
외래키 제약이라고도 하며, 테이블 간 참조 관계를 선언하는 제약조건
->외래키값은 null이거나 참조 관계의 기본키값과 같아야함
->참조불가능한 값을 지닐 수 없음
3. 도메인 무결성
테이블에 설정된 필드의 무결성을 보장하기 위한 것이다. 예를 들어 숫자만 입력해야하는 주민번호를 입력하는 필드에 문자가 들어가면 도메인 무결성에 위반된 것이다.
5. DFS
D: DFS는 그래프 탐색에서 깊이를 우선으로 탐색하는 알고리즘이다.
스택과 재귀를 이용해서 구현할 수 있다.
def dfs(start,visited,map): visited[start]=True for y in map[x]: if visited[y]==False: dfs(y) |
6. 프록시 서버
Proxy=대리
인터넷에서 유저를 대신해서 데이터를 가져오는 서버이다. 원래는 클라이언트가 서버에 직접 접근해서 요청한 내용을 가져와야 하지만 프록시 서버가 대신 서버에 요청하고 클라이언트에게 가져다 준다.
프록시서버를 사용하는 이유
- 프록시서버 없이 클라이언트가 서버에 요청을 하면 IP 주소도 함께 전달되는데, 프록시서버를 사용하면 프록시 서버의 IP만 노출된다.
- 프록시서버가 웹페이지를 가져올 때 자신의 DB에 최근 데이터를 저장해두는데, 이것을 캐시라고한다. 그래서 다른 클라이언트가 접속할 때 캐시된 웹페이지가 있으면 프록시서버에서 바로 클라이언트에 전송함으로써 속도를 향상시킬 수 있다.
- 프록시 서버에 클라이언트의 기록이 남아 있어서 로그 기록을 확인할 수 있고, 서버가 방문할 수 있는 웹사이트를 제한할 수 있다.
프록시 서버의 단점: 프록시 서버가 데이터를 암호화하지는 않으며, 공용망을 사용하기 때문에 클라이언트가 보내는 데이터를 탈취할 수 있다. 그래서 정보를 암호화하려면 VPN을 사용해야 한다.
7. 멀티 프로세스의 장단점
멀티 프로세스는 두 개 이상 다수의 프로세서(cpu)가 하나 이상의 작업을 병렬적으로 처리한다. 각 프로세스 간에 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우에 사용한다.
장점: 독립된 구조로 안정성이 높다. 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 작업이 정지되는 등의 문제는 생기지 않는다.
단점: 독립된 영역이어서 작업량이 많을수록 문맥교환이 자주 일어나서 오버헤드가 생겨 성능 저하가 생길 수 있다.
8. TCP와 UDP의 차이
TCP는 연결 지향형 프로토콜(서버-클라이언트)로, 데이터를 주고 받을 때 서로 정보를 보내고 받는 신호 절차를 거친다.
TCP의 특징
- 신뢰성 있는 데이터 전송을 지원한다.
- 3-way handshaking 과정을 통해 연결 한 후 통신을 한다.
- 흐름제어, 혼잡제어를 지원한다.
- 중요한 파일 교환 시스템 등에서 TCP를 이용해야 한다.
UDP는 비연결형 프로토콜로, 서로 정보를 주고받을 때 정보를 보내는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달한다.
UDP의 특징
- 신뢰성 없는 데이터 전송을 한다.
- 패킷 오버헤드가 적어서 네트워크 부하가 감소된다.
- 3-way handshaking 과정이 없다.
- TCP보다 빠르다.
9. IPC의 3가지 방법
IPC(Inter Process Communication)란 프로세스들 간에 통신하는 방법이다. 인터넷 통신이 IPC의 확장이다.
- 스레드 간 통신보다 프로세스 간 통신이 어려운 이유: 프로세스는 생성되면서 PC를 포함해 메모리 공간 등을 복사해서 별도의 자원을 할당하지만, 스레드는 메모리 공간과 자원을 공유한다. 그래서 프로세스는 통신할 수 있는 공간이 없어서 통신을 위한 별도의 공간을 만들어줘야 해서 스레드 통신보다 어렵다.
- 공유 메모리: 프로세스 간 메모리 영역을 공유해서 사용할 수 있도록 허용한다. 대량의 정보를 다수의 프로세스에게 배포 가능하고, 중개자 없이 곧바로 메모리에 접근할 수 있으므로 모든 IPC 중에서 가장 빠르다.
- 익명 파이프: 통신을 위한 메모리 공간(버퍼)을 생성해서 프로세스가 데이터를 주고 받게끔 하며 통신할 프로세스가 명확하게 알 수 있는 경우 사용한다. 부모-자식 or 형제 프로세스 통신에서 사용하며 외부 프로세스에서 사용할 수 없다. 반이중 통신이다.
- 네임드 파이프: 통신을 위한 메모리 공간(버퍼)을 생성해서 프로세스가 데이터를 주고 받게끔 하며 전혀 모르는 상태의 프로세스 사이의 통신에 사용한다. 익명 파이프의 확장된 형태로 외부 프로세스, 부모 프로세스와 무관한 다른 프로세스와 통신이 가능하다. 반이중 통신이다.
- 소켓: 호스트 운영 체제에서 실행되는 프로세스 간 데이터를 교환하기 위한 데이터 통신 엔드 포인트이다. 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용하며, 전이중 통신이 가능하다.
- 메시지 큐: 입출력 방식은 네임드 파이프와 같지만, 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다. 또한, 다수의 프로세스 간 메시지를 전달할 수 있다. 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.
- 그 외에 RPC, 메모리 맵이 있다.
10. 함수형 프로그래밍이란?
함수형 프로그래밍은 순수 함수를 조합해 소프트웨어를 만드는 방식이다. 함수는 코드 구성의 기본이고, 모든 고차원 프로그래밍 언어에 존재한다. 함수형 프로그래밍의 장점은 클린하고 유지보수가 쉬운 소프트웨어를 만들 수 있도록 하는 것이다.
함수형 프로그래밍의 대표적 언어는 SQL이 있다.
'CS' 카테고리의 다른 글
신입 개발자 CS 면접 대비 질문-운영체제 #2 (0) | 2023.02.12 |
---|---|
신입 개발자 CS 면접 대비 질문-웹 #1 (0) | 2023.02.02 |
신입 개발자 CS 면접 대비 질문-운영체제 #1 (0) | 2023.01.30 |
신입 개발자 CS 면접 대비 질문-Java/자바 #2 (0) | 2023.01.17 |
신입 개발자 CS 면접 대비 질문-Java/자바 (0) | 2023.01.16 |
댓글