📝 CS 및 기술 면접 예상 질문에 대한 답변을 위한 스터디 입니다.
💡 단순한 QNA 형식 보다, 깊이 있는 내용들이 많이 있습니다. 기술 면접, 지식 함양 등에 도움 되실 겁니다.
✔️ 오타 및 상한 기술은 Issue 를 통해 알려주세요.
🚩 QNA 형식의 질의 응답 연습은 해당 링크를 통해 가능합니다.
⭐ Star나 Watching를 통한 많은 관심 부탁드립니다. :)
- 쿠키, 세션, JWT 토큰
- Cookie / Session
- 세션 기반 인증 / 토큰 기반 인증
- JWT
- 네트워크 시스템의 Layered Architecture
- 웹의 동작 방식
- TCP/IP 5 Layer
- OSI 7 Layer
- TCP, UDP, IP, PORT
- HTTP 와 HTTPS
- HTTP/HTTPS
- HTTP 2.0
- 로드 밸런서(Load Balancer)
- 로드밸런싱
- Scale out, Scale up
- 프록시(Proxy)
- 포워드 프록시, 리버스 프록시
- DMZ
- 네트워크 보안(Network Security)
- 보안 3대요소, 웹 해킹, 방화벽
- IPSec, SSL 과 TLS
- SQL Injection, OS Command Injection, XSS, CSRF
- 웹 소켓(Web Socket)
- HTTP Polling, HTTP Long Polling
- HTTP vs 웹 소켓
- SocketJs 와 Socket.io
- CORS(Cross Origin Resource Sharing)
- CORS
- SOP
- 스프링 부트에서 CORS 해결 하는 방법
- REST and RESTful
- REST 구성요소와 기본 원칙
- REST API 디자인 가이드
- OAuth(Open Authorization)
- OAuth1.0, OAuth2.0
- 일반로그인과 OAuth로그인 차이
- 인증 절차 종류
- 운영체제와 컴퓨터 시스템 구조
- CPU
- 캐시의 지역성
- 캐시의 종류와 쓰기
- 캐시의 지역성, 캐시 친화적인 코드
- Mapping Function
- 메모리 구성
- 스택 동작 과정
- Stack 과 Heap
- 프로세스/스레드에서의 스택
- 프로세스와 스레드
- Multi Process, Multi Thread, PCB, 프로세스 상태 전이
- Interrupt, Context Switching
- WAS, ThreadPool
- 스프링에서 동시성 이슈를 피하는 방법
- Thread Safe 하게 설계하는 방법
- 프로세스 동기화
- 경쟁 상태(race condition)
- 임계 구역(ciritical section)
- 뮤텍스 락(Mutex Locks)
- 세마포(semaphore)
- 교착상태와 기아상태
- 교착상태
- 교착상태 해결 방법
- 기아상태, Livelock
- CPU 스케줄링 기법
- FIFO, SJF, STCF
- Round Robin
- Busy Waiting
- Multi-Level Feedback Queue
- Priority Boost
- 블락킹과 논블락킹, 동기식과 비동기식
- 동기식과 비동기식
- 블락킹과 논블락킹
- System Call
- 커널 모드와 유저 모드
- System Call Interrupt 동작 과정
- 파일 시스템
- 파일의 기본 구성
- 파일 시스템이 필요한 이유
- 트리 구조 디렉토리
- 파일 시스템 대신 데이터베이스를 사용하는 이유
- 주소 바인딩과 스와핑
- 논리 주소 vs 물리 주소
- 컴파일 타임 바인딩, 적재 타임 바인딩, 실행 타임 바인딩
- 스와핑
- 메모리 할당과 단편화
- 고정 분할, 가변 분할
- 메모리 할당 알고리즘(최초 적합, 최적 적합, 최악 적합)
- 외부 단편화, 내부 단편화
- 페이징과 세그멘테이션
- 페이징, 세그멘테이션
- 페이징 스와핑
- 페이지 교체 알고리즘
- OPT, FIFO
- LRU, NUR
- LFU, MFU, SCR
- RDBMS vs NoSQL
- RDBMS 와 NoSQL 차이
- RDBMS 에서 서버 확장하는 방법(Master and Slave)
- ElasticSearch
- 검색엔진, 검색시스템, 검색서비스
- 검색시스템 구성요소
- 색인과 역색인
- 검색기 품질
- 관계형 데이터베이스와의 차이점
- 엘라스틱서치 주요 API
- Transaction
- 트랜잭션을 사용하는 이유
- ACID
- 트랜잭션 격리 수준
- 트랜잭션 격리 수준을 설정할 때 발생 하는 문제점들
- Redis
- Redis
- Look Aside Cache, Write Back
- CAP
- DB Lock
- Lock 의 종류와 단위
- 블로킹(Blocking)
- 데드락(Deadlock)
- 정규화, 반정규화
- 이상 현상
- 정규화와 반정규화
- Index, Hint
- 순차 I/O, 랜덤 I/O
- 쿼리 튜닝의 목적
- B-Tree Index, Hash Index, InnoDB Adaptive Hash Index
- MySQL 에서 B-tree 를 사용하는 이유
- 인덱스 레인지 스캔, 인덱스 풀 스캔
- 클러스터링 인덱스, 논 클러스터링 인덱스
- MySQL 에서 PK 를 인조키로 사용하고 Auto_Increment 를 사용하는 이유
- Hint
- 동시성 제어
- 동시성 제어를 하지 않을 시 발생하는 문제점
- 동시성 제어 방법
- Oracle Sequence
- 시퀀스 개념 및 사용법
- 시퀀스 사용의 장단점
- Join
- Inner Join
- Natural Join
- Outer Join
- Semi Join
- MySQL Architecture
- MySQL 엔진
- 스토리지 엔진
- 핸들러 API
- MySQL 스레딩 구조
- 메모리 할당 및 사용 구조
- 쿼리파서, 전처리기, 옵티마이저, 실행엔진
- 스레드풀, 트랜잭션 지원 메타데이터
- 스키마(Schema)
- 스키마 3계층과 3계층으로 나누어 사용하는 이유
- 테이블 vs 스키마
- DB 클러스터링, 리플리케이션
- 클러스터 사용 장점과 구현 방법
- 리플리케이션, 리플리케이션 래그
- 파티셔닝
- 샤딩
- Trigger
- 트리거 종류(행 트리거, 문장 트리거)
- 트리거 장점/단점
- 트리거 문법과 예시
- ConnectionPool
- 커넥션 풀 개수 설정 방법
- 커넥션 풀 동작원리(HikariCP)
- 커넥션 풀의 장점
- RAID
- RAID 사용 이유
- RAID 에서 쓰이는 3가지 기술
- RAID 종류와 특징
- 가상 머신, 가상 메모리
- 가상 머신과 가상머신을 사용하는 이유
- 가상 메모리 이점, 원리
- 요구 페이징
- 다양한 자바 플랫폼
- 자바 역사와 버전별 특징
- 자바 언어의 특징
- 프로그램 실행 과정
- JVM 아키텍처와 JMM
- Garbage Collection
- 객체지향 언어의 특징
- 캡슐화, 상속, 다형성
- 클래스
- 인터페이스
- 데이터 타입
- Call by value vs Call by reference
- Promotion, Casting
- Boxing, Unboxing
- Reflection
- Annotation
- JDBC
- Collection Framework
- SOLID
- Stream
- 마샬링과 직렬화
- 제네릭
- POJO, JavaBeans, Entity, VO, DTO
- 깊은 복사와 얕은 복사
- equals and hashCode
- Thread
- Exception Handling
- Immutable, Synchronized
- Logging
- Lambda, Functional Interface, Method References
- JDK Dynamic Proxy, CGLIB