오늘은 기술면접에서 자주 나오는 CS 관련한 내용을 정리해 보았습니다
1. OOP(객체 지향 프로그래밍)
- OOP는 현실 세게를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍하는 기법이며 코드의 재사용성을 높일 수 있습니다
2. OOP 5가지 설계 원칙
- 단일 책임 원칙 : 클래스는 단 하나의 목적이어야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다
- 개방 폐쇄 원칙 : 클래스는 확장에 열려있고, 변경에는 닫혀 있어야 한다
- 리스코프 치환 원칙: 상위 타입 객체를 하위 타입으로 변경하더라도 프로그램은 일관되게 동작해야 한다
- 인터페이스 분리 원칙 : 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야 한다
- 의존 역전 법칙 : 클라이언트는 추상화에 의존해야 하며 구체화에 의존해선 안된다
3. 절차지향 프로그래밍과 객체 지향 프로그래밍
- 절차 지향 프로그래밍
- 순차적인 처리를 중요시하는 프로그래밍 기법
- 실행 속도가 객체지향 프로그래밍 보다 빠르다
- 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다 - 객체 지향 프로그래밍
- 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 방식
- 캡슐화, 상속, 다형성 등과 같은 기법을 이용할 수 있다
- 절차 지향 프로그래밍 보다 실행 속도가 느리다
4. 함수형 프로그래밍
- 함수형 프로그래밍은 불변성 과 순수 함수를 주심으로 프로그램을 구성하는 패러다임
- 코드의 간결성과 예측 가능성을 높여주지만 실행 속도가 절차지향보다는 느리고 러닝커브가 있다
- 이러한 특징을 이용하여 벙렬 처리와 최적화 유리한 프로그램을 작성할수있다
5. Parameter와 Argument의 차이
- Parameter : 함수를 선언할 때 사용된 변수
- Argument : 함수가 호출되었을 때 함수의 파라미터로 전달된 실제 값
6. Call By Value, Call By Reference
- Call By Value
- 인자로 받은 값을 복사하여 처리하는 방식
- Call By Value에 의해 넘어온 값을 증가시켜도 원래 값이 보존된다
- 값을 복사하여 넘기기 때문에 메모리 사용량이 늘어난다 - Call By Reference
- 인자로 받은 값에 주소를 참조하여 직접 값에 영향을 주는 방식
- 값을 복사하지 않고 직접 참조하기 때문에 속도가 빠르다
- 원래 값에 영향을 주는 리스크가 존재한다
7. 깊은 복사와 얕은 복사
프로그래밍에서 객체를 복사하는 두 가지 방법입니다
- 깊은 복사
- 객체의 모든 레벨을 복사하며 내부 객체들도 별도로 복사합니다
- 이는 원본 객체와 복사본 객체가 완전히 독립되었다는 것을 의미합니다
- 복사본 객체의 내부 객체를 변경해도 원본 객체에는 영향이 없습니다
- 얕은 복사 보다 속도가 느리며, 메모리 사용량이 더 크다는 단점이 있습니다 - 얕은 복사
- 객체의 최상위 수준만 복사하고 내부 객체에 대한 참조는 유지합니다
- 복사본 객체에서 내부 객체를 변경하면 원본 객체의 내부 객체도 변경됩니다
- 깊은 복사보다 속도가 빠르며 메모리 사용량이 적습니다
8. 프레임워크 와 라이브러리
- 프레임워크 : 전체적인 흐름을 자체적으로 제어한다
- 라이브러리 : 사용자가 흐름에 대한 제어를 하며 필요한 상황에 가져다가 사용할 수 있다
9. 동기와 비동기
- 동기
- 요청을 보내고 실행이 끝나면 다음 동작을 처리하는 방식
- 순서에 맞추어 진행되기 때문에 제어하기 쉽다
- 여러 가지 요청을 동시에 처리할 수 없어 효율이 떨어진다 - 비동기
- 요청을 보내고 해당 동작에 처리여부와 상관없이 다음 요청이 동작하는 방식
- 작업이 완료되는 시간을 기다릴 필요가 없기 때문에 자원을 효율적으로 사용
- 작업이 완료된 결과를 제어하기가 어렵다
10. TCP와 UDP
- TCP : 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하며 높은 신뢰성을 보장하지만 속도가 비교적 느립니다
- UDP : 비연결형 서비스로 신뢰성이 떨어지는 단점이 있지만 수신 여부를 확인하지 않기 때문에 속도가 빠릅니다
11. GET과 POST
- GET : 데이터를 조회하기 위해 사용하는 방식으로 데이터를 헤더에 추가하여 전송하는 방식
- POST : 데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식
12. OSI 7 계층
- 7 계층 ( 응용 계층 ) : 사용자가 직접 상호 작용 하는 응용프로그램들이 포함된 계층
- 6 계층 ( 표현 계층) : 데이터 형식을 정의하는 계층
- 5 계층 ( 세션 계층 ) : 컴퓨터끼리 통신하기 위해 세션을 만드는 계층
- 4 계층 ( 전송 계층 ) : 최종 수신 프로세스로 데이터 전송을 담당하는 계층
- 3 계층 ( 네트워크 계층 ) : 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층
- 2 계층 ( 데이터 링크 계층) : 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층
- 1 계층 ( 물리 계층) : 데이터를 전기 신호로 바꾸어주는 계층
13. HTTP 프로토콜
- 서버/클라이언트 모델을 따라 데이터를 주고받기 위한 프로토콜, HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동합니다
14. HTTP1, HTTP2
- HTTP1
- 연결당 하나의 요청/응답을 처리하며 다음과 같은 문제가 있습니다
- HOL Blocking(특정 응답 지연) : 클라이언트 요청과 서버의 응답이 동기화되어 지연 발생
- RTT 증가(양방향 지연) : 패킷 왕복 시간의 지연 발생
- 헤더 크기의 비대 : 쿠키 등과 같은 메타데이터에 의해 헤더가 비대해집니다 - HTTP2
- 이러한 문제를 해결하기 위해 HTTP2는 다음과 같은 특징이 있습니다
- Multiplexed Streams : 하나의 커넥션에서 여러 개의 메세지를 동시에 주고받을 수 있습니다
- Stream Prioritization : 요청온 리소스 간에 의존 관계를 설정하며 먼저 응답해야 하는 리소스를 우선적으로 반환
- Header Compression : 헤더 정보를 HPACK 압축 방식을 이용하여 압축 전송
- Server Push : HTML 문서상에 필요한 리소스를 클라이언트 요청 없이 보냅니다
15. HTTP, HTTPS
- HTTP는 평문 데이터를 전송하는 프로토콜 이기 때문에 민감한 정보를 주고받으면 제 3자에 의해 조회될 수 있습니다
- 이러한 문제를 해결하기 위해 암호화가 추가된 프로토콜이 HTTPS입니다
- HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용합니다
- 서버와 클라이언트가 최초 1회 통신할 때는 비대칭키 암호화를 사용하고 이후 모든 통신에서는 대칭키 암호화를 사용합니다
16. 디자인패턴
- 디자인 패턴은 아이디어이며, 특정한 구현이 아닙니다
- 프로젝트의 항상 적용해야 하는 것은 아니지만 추후 재사용성, 호환, 유지보수 시 발생하는 문제를 해결하기 위해 패턴을 만들어둔 것입니다
17. 싱글톤 패턴
- 애플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴입니다
- 즉 싱글톤 패턴은 하나의 인스턴스만 생성하여 사용하는 디자인 패턴입니다
18. 옵저버 패턴
- 한 객체의 상태 변경을 다른 객체들에게 효과적으로 알리고자 할 때 사용됩니다
- 주로 이벤트 처리 시스템이나 데이터 바인딩 구현에 적용됩니다
19. MVC패턴
- 애플리케이션 구조를 개선하고 코드의 재사용성을 높이기 위해 사용됩니다
- Modal(모델) : 애플리케이션의 비즈니스 로직 및 데이터를 관리하는 부분입니다
- VIew(뷰) : 사용자에게 보이는 화면을 담당하여 UI와 관련된 요소를 처리합니다
- Controller(컨트롤러) : 모델과 뷰사이에 중재자 역할을 수행하며 사용자의 입력을 받아 적절한 모델의 메소드를 호출하거나 뷰를 업데이트하는 등의 작업을 수행합니다
20. Flux 패턴
- 클라이언트 측 웹 애플리케이션의 상태 관리를 단순화하고자 할 때 사용됩니다
- 데이터 흐름을 단방향으로 유지함으로써 예측 가능한 상태 변경을 가능하게 합니다
- 디스패쳐 : 중앙 허브 역할을 수행하며 모든 데이터 흐름을 관리합니다
- 스토어 : 애플리케이션의 상태와 로직을 저장하는 컨테이너입니다
- 액션 : 애플리케이션에서 발생하는 이벤트나 사용자 상호 작용을 나타내는 객체입니다
- 뷰 : 사용자 인터페이스를 나타내며, 애플리케이션 상태를 표시합니다
제 개인적으로 필수적으로 알아야 될꺼 같은 20가지이며 다음에는 React, Vue에서 나오는 질문들을 정리해 보겠습니다
참고
https://mangkyu.tistory.com/88
[기술면접] CS 기술면접 질문 - 프로그래밍 공통 (1/8)
1. 프로그래밍 공통 [ OOP란 ] OOP는 현실 세계를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍하는 기법입니다. OOP
mangkyu.tistory.com
'프론트 CS' 카테고리의 다른 글
프론트 엔드 기술면접 준비하기_Typescript,React (0) | 2023.06.08 |
---|---|
프론트 엔드 기술면접 준비하기_Vue,React (0) | 2023.05.06 |
프론트 엔드 기술면접 준비하기(프론트엔드 면접질문) (0) | 2023.04.30 |
브라우저 저장소 (0) | 2022.12.13 |
GET과POST (0) | 2022.12.11 |