인터뷰 준비를 위한 게시글. 내가 과거부터 지금까지 많은 면접을 보면서 질문 받았던 것들을 기억하면서 정리하고 리마인드하는 글입니다.
Stack
LIFO(Last In First Out) 구조를 가지고 있으면 후입선출 방식이다. 가장 최근에 유입된 데이터를 먼저 꺼내서 처리하는 방식이다. 스택의 크기는 정해져 있고, 스택에 데이터를 저장하는 액션을 Push하고 하고 가장 최근에 저장한 데이터를 꺼내오는 액션을 Pop이라고 한다.
만약 스택 크기보다 더 많은 데이터를 저장하면 Overflow 에러가 발생하게 되며, 아무런 데이터가 없는 경우에도 데이터를 꺼내는 액션(Pop)을 수행하면 오류가 떨어진다.
Queue
FIFO(First In First Out) 구조를 가지고 있으면 선입선출 방식이다. 제일 먼저 유입된 데이터를 먼저 처리하는 방식이다.
구조는
Enqueue: 큐 맨 뒤(rear)에서 요소를 추가하는 연산을 말한다.
Dequeue: 큐 맨 앞(front)에서 요소를 꺼내오는 연산을 말한다.
front: 큐의 맨 앞의 위치(인덱스)
Peek: front에 위치한 요소를 읽는 연산을 말한다. 스택과 비교한다면 pop과 동일한 연산이다.
rear: 큐의 맨 뒤의 위치(인덱스)
Heap
Heap은 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다. 여러 개의 값들 중에서 최댓 값이나 최솟 값을 빠르게 찾아내도록 만들어진 자료구조이다.
Linked List
배열과 동일한 연속된 데이터를 저장할 수 있는 구조. 배열과 다른 점은 요소를 저장할 수 있는 크기가 유한하지 않다.
연결 리스트는 ‘노드'라는 객체로 이루어져 있다. Data를 저장할 공간과 다음 Data가 저장되어 있는 주소를 담고 있다. 새로운 DATA가 저장되면 앞서 저장되어 있던 노드에 새롭게 추가된 데이터가 저장된 메모리 주소가 저장된다.
HashMap
TCP와 UDP의 차이점
TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름을 제어 및 혼잡 제어 기능을 제공한다.
UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷 순서 부여나 재조립등의 기능을 처리하지 않기 때문에 연속이 중요한 서비스에 사된다.
TCP 3 Way-Handshake
TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용한다.
과정
스프링이란?
DI/IoC 란?
의존성 주입
의존성 주입을 개발자가 코드 상에 하지 않고, 어노테이션을 이용하여 스프링이 의존성을 주입하고 의존성 주입에 필요한 인스턴스의 라이프 사이클을 관리하는 것을 말한다. DI를 다른 말로 IoC(Invert of Controll, 역전제어)라고 도 한다.
AOP
POJO(Plain Old Java Object)
AOP 란?
관점지향 프로그래밍
트랜잭션이나, 로깅, 보안과 같이 공통적으로 필요로하는 모듈들을 비즈니스 로직 모듈에서 분리해서 공통으로 관리할 수 있다. 횡단 관심사에 대한 부분들을 따로 모듈화하는 것을 말한다.
POJO 란?
비동기 프로그래밍
비동기 프로그래밍의 구현이 매우 쉽다. 여기서 비동기 프로그래밍이란, 어떠한 요청을 보내고 그 요청에 대한 응답이 올 때까지 기다리는 것이 아니라, 그 다음 로직을 수행하고 있다가 요청에 응답이 오면 그때 응답에 대한 처리를 수행하는 방식을 비동기 프로그맹이라고 한다. 이러한 방식을 사용한다면 스레드를 매우 효율적으로 사용할 수 있다.