인터뷰 준비를 위한 게시글. 내가 과거부터 지금까지 많은 면접을 보면서 질문 받았던 것들을 기억하면서 정리하고 리마인드하는 글입니다.

Algorithm

자료구조

  1. Stack

    LIFO(Last In First Out) 구조를 가지고 있으면 후입선출 방식이다. 가장 최근에 유입된 데이터를 먼저 꺼내서 처리하는 방식이다. 스택의 크기는 정해져 있고, 스택에 데이터를 저장하는 액션을 Push하고 하고 가장 최근에 저장한 데이터를 꺼내오는 액션을 Pop이라고 한다.

    만약 스택 크기보다 더 많은 데이터를 저장하면 Overflow 에러가 발생하게 되며, 아무런 데이터가 없는 경우에도 데이터를 꺼내는 액션(Pop)을 수행하면 오류가 떨어진다.

  2. Queue

    FIFO(First In First Out) 구조를 가지고 있으면 선입선출 방식이다. 제일 먼저 유입된 데이터를 먼저 처리하는 방식이다.

    구조는

    Enqueue: 큐 맨 뒤(rear)에서 요소를 추가하는 연산을 말한다.

    Dequeue: 큐 맨 앞(front)에서 요소를 꺼내오는 연산을 말한다.

    front: 큐의 맨 앞의 위치(인덱스)

    Peek: front에 위치한 요소를 읽는 연산을 말한다. 스택과 비교한다면 pop과 동일한 연산이다.

    rear: 큐의 맨 뒤의 위치(인덱스)

    Untitled

  3. Heap

    Heap은 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다. 여러 개의 값들 중에서 최댓 값이나 최솟 값을 빠르게 찾아내도록 만들어진 자료구조이다.

  4. Linked List

    배열과 동일한 연속된 데이터를 저장할 수 있는 구조. 배열과 다른 점은 요소를 저장할 수 있는 크기가 유한하지 않다.

    연결 리스트는 ‘노드'라는 객체로 이루어져 있다. Data를 저장할 공간과 다음 Data가 저장되어 있는 주소를 담고 있다. 새로운 DATA가 저장되면 앞서 저장되어 있던 노드에 새롭게 추가된 데이터가 저장된 메모리 주소가 저장된다.

    Untitled

  5. HashMap

Network(TCP/UDP)

TCP와 UDP의 차이점

TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름을 제어 및 혼잡 제어 기능을 제공한다.

UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷 순서 부여나 재조립등의 기능을 처리하지 않기 때문에 연속이 중요한 서비스에 사된다.

Untitled

TCP 3 Way-Handshake

TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용한다.

과정

  1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이 때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락을 한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다. 이 때 서버는 SYN_RECEIVED 상태가 된다.
  3. 클라이언트가 서버에게 ACK를 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 이 때 서버의 상태는 ESTABLESHED가 된다.

Untitled

Spring with Java

스프링이란?

DI/IoC 란?

  1. 의존성 주입

    의존성 주입을 개발자가 코드 상에 하지 않고, 어노테이션을 이용하여 스프링이 의존성을 주입하고 의존성 주입에 필요한 인스턴스의 라이프 사이클을 관리하는 것을 말한다. DI를 다른 말로 IoC(Invert of Controll, 역전제어)라고 도 한다.

  2. AOP

  3. POJO(Plain Old Java Object)

AOP 란?

  1. 관점지향 프로그래밍

    트랜잭션이나, 로깅, 보안과 같이 공통적으로 필요로하는 모듈들을 비즈니스 로직 모듈에서 분리해서 공통으로 관리할 수 있다. 횡단 관심사에 대한 부분들을 따로 모듈화하는 것을 말한다.

POJO 란?

  1. 평범한 자바 오브젝트, 특정 플렛폼에 종속되지 않는 라이브러리 로우레벨과 관련된 라이브러리들의 종속성을 없애 라이브러리를 말하는 것으로 이해함.
  2. 자바 라이브러리를 특정 환경이나 규약에 종속되지 않고 JVM만 있으면 호출이 가능한 형태로 제공한다.

Node.js with javascript

비동기 프로그래밍

비동기 프로그래밍의 구현이 매우 쉽다. 여기서 비동기 프로그래밍이란, 어떠한 요청을 보내고 그 요청에 대한 응답이 올 때까지 기다리는 것이 아니라, 그 다음 로직을 수행하고 있다가 요청에 응답이 오면 그때 응답에 대한 처리를 수행하는 방식을 비동기 프로그맹이라고 한다. 이러한 방식을 사용한다면 스레드를 매우 효율적으로 사용할 수 있다.

MySQL, Elasticsearc with NoSQL, RDB