상세 컨텐츠

본문 제목

[BACKEND] 매일매일 준비하는 백엔드 기술면접 2/10-2/11

취준/1. 기술면접

by ranlan 2022. 3. 5. 12:24

본문

728x90

잠시 멈췄었던 망나니개발자님 기술면접 구독 서비스 리뷰 및 복습 다시 시작!

미루지 말고 매일매일 조금씩이라도 하기로 다짐!

 

[망나니 개발자 Mangky's Diary] 기술 면접 준비를 위한 문제 구독 서비스 https://mangkyu.tistory.com/200

 

[기술면접] CS 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!)

1. 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!) [ 서비스 소개 ] 개발자가 되기 위해 또는 새로운 회사로 이직하기 위해 기술 면접 준비는 필수입니다. 많은 분들이 기술 면접을 준

mangkyu.tistory.com

 

 

2022/02/10

1. [DATA STRUCTURE] AVL 트리(Adelson-Velsky and Landis Tree)에 대해 설명해 주세요.

AVL 트리는 균형 잡힌 이진탐색트리이다. 양쪽 서브트리 높이 차이가 최대 1로 균형 잡힌 상태를 유지해야하기 때문에 추가 연산이 필요하다.

높이 균형을 맞추기 위한 작업을 회전이라 하고 이를 통해 높이를 logN으로 유지하기 때문에 연산 시간복잡도는 O(logN)이다.

트리 높이가 h일 때 이진탐색트리 시간 복잡도가 O(h)인데 한쪽으로 치우쳐진 경우 높이가 높아지기 때문에 이를 방지하고자 고안되었다.

 

https://gist.github.com/ninanung/57d9d936b891efc03783063750a21654

 

* 이진트리는 최대 2개의 자식 노드를 갖는 트리이다.

* 이진탐색트리는 모든 노드가 특정 순서(규칙)을 따르는 트리로 규칙은 {모든 왼쪽 자식 <= n < 모든 오른쪽 자식, n은 모든 노드} 이다.

 

2. [ALGORITHM] N팩토리얼의 값을 계산하는 메서드에 대해 각각 재귀와 반복문으로 손코딩(또는 수도코딩)해 주세요.

반복문 ver) N이 주어졌을 때 1부터 N까지 모든 수를 곱한다.

def get_factorial(n):
    fac = 1
    for i in range(1, n+1):
        fac *= i
    return fac

재귀 ver) 주어진 수를 계속 곱한다. 단 1이 나올 때 연산을 멈춘다.

def get_factorial_recursive(n):
    if n == 1:
        return 1
    return n* get_factorial_recursive(n-1)

* 재귀 구현 시 반복을 멈출 조건인 베이스케이스(탈출 조건)와 반복해야할 작업이 무엇인지 고려해야 하며 베이스케이스를 향하는 방향으로 진행되어야 한다.

 

3. [NETWORK] https://www.naver.com을 주소창에 입력했을 때 동작하는 방식에 대해 설명해 주세요

1) URL을 해석한다.

HTTPS는 프로토콜, www.naver.com은 웹 사이트의 위치를 식별하는 주소인 URL, 포트번호는 HTTPS의 경우 기본값 443인데 브라우저는 프로토콜과 포트를 제외한 URL도 자동으로 구성할 수 있다. 브라우저는 입력된 URL에서 필요한 정보를 파악한다.

 

2) HSTS 목록을 조회한다.

먼저 브라우저는 기본 세팅으로 HTTP 프로토콜을 사용해 접속을 시도한다. 해당 웹사이트가 HTTPS 프로토콜이 적용된 사이트라면 HTTP 접속이 시도되었을 때 301, 302 상태 코드를 통해 리다이렉트 하라는 메시지를 브라우저에 보낸다. 브라우저는 이 요청을 통해 다시 해당 사이트에 HTTPS 프로토콜로 접속한다. 여기서 한번이라도 HTTPS 프로토콜로 접속한 적이 있다면 HSTS(HTTP Strict Transport Secruity) 목록에 저장되며 이후 접속 시 바로 HTTPS 프로토콜로 요청하게 된다. HTTP 연결을 거쳐 HTTPS로 전환되는 과정은 보안상 안전하지 못함으로 HSTS는 HTTP 프로토콜을 허용하지 않고 HTTPS 프로토콜을 통한 연결만 허용한다.

정리하자면, 입력된 URL이 이전에 접속한 경험이 있어 HSTS에 존재하면 바로 HTTPS로 접속하지만 없는 경우 HTTP 요청과 리다이렉트 과정을 거쳐 HTTPS 접속을 한다.

 

3) DNS 서버를 거쳐 URL을 IP로 변환한다.

문자열 형태의 URL(도메인)은 컴퓨터가 바로 이해할 수 없다. 컴퓨터가 이해할 수 있는 IP 주소로 변경해야하는데 이 역할을 하는 것이 DNS(Domain Name System)이다.  브라우저는 자신의 로컬 파일과 브라우저 캐시에 해당 URL이 존재하면 바로 접속하고, 존재하지 않는다면 DNS 서버에 요청하여 해당 URL을 IP 주소로 변환한다.

네이버의 경우 실제 IP주소는 125.209.222.141이다.

 

4) 라우터를 통해 해당 서버의 게이트웨이까지 이동한다.

IP주소를 이용해 해당 서버로 요청을 보낸다. 네트워크 장비인 라우터가 해당 주소까지 최적의 경로를 라우팅하여 요청을 전달한다.

* 게이트웨이란 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 HW, SW를 일컫는 말이다. 즉 다른 네트워크로 들어가는 입구 역할을 하는 네트워크 포인트이다. OSI 7계층 중 4계층인 전송계층에 속하며 실제로는 1~7계층 모두에서 동작한다. 게이트웨이는 서로 다른 네트워크 상의 통신 프로토콜을 적절히 변환해주는 역할을 하며 게이트웨이를 지날 때마다 트래픽이 증가하기 때문에 속도가 느려질 수 있다.

 

5) ARP를 통해 IP 주소를 MAC 주소로 변환한다.

* IP네트워크에 할당된 논리 주소이고 MAC은 통신기기, 하드웨어 자체에 부여된 고유한 식별번호로 컴퓨터의 물리적 주소이다.

우리가 접속하려는 서버의 네트워크를 찾기 위해 IP 주소를 이용하고 그 네트워크 내부의 하드웨어와 통신하기 위해 MAC 주소가 필요하다.

ARP(Address Resolution Protocol)은 논리 주소인 IP를 물리주소인 MAC으로 변환시켜주는 프로토콜이다. 그 반대 MAC 주소를 IP 주소로 변환해주는 프로토콜은 RARP(Reverse Address Resolution Protocol)이다.

 

6) 대상 서버와 TCP 연결을 맺는다.

요청을 보낼 서버와 통신하기 위한 TCP 소켓 연결을 진행한다. 소켓 연결은 3-way-handshake 과정을 통해 이루어지고 HTTPS의 경우 추가적으로 TLS(Transport Layer Security) handshake가 추가된다.

* TCP 프로토콜은 연결 지향적 프로토콜로 서버와 클라이언트가 연결된 상태에서 데이터를 주고 받는다. 신뢰성 있는 데이터 전달과 흐름제어가 가능하다.

네트워크 관련 CS 참고 → 2022.02.03 - [cs] - [BACKEND] 백엔드 개발 기술면접 준비(6) 운영체제&네트워크

 

[BACKEND] 백엔드 개발 기술면접 준비(6) 운영체제&네트워크

Q. IP와 도메인(Domain) A. IP는 인터넷에 연결되어있는 모든 장치를 식별할 수 있도록 부여되는 고유의 주소이며 이에 문자로 주소를 부여해 이름을 단 것을 도메인이라한다. * DNS(Domain Name System)이

juran-devblog.tistory.com

7) HTTP(S) 프로토콜로 요청 및 응답을 주고 받는다.

TCP 소켓 연결이 완료되었으니 네이버 서버와 요청과 응답을 주고 받는다.

 

8) 응답을 사용자에게 보여준다.

응답(HTML, CSS, JS 등)을 받은 브라우저는 웹 페이지를 사용자에게 표시한다.

 

 

2022/02/11

1. [SPRING] Spring 컨테이너를 통한 싱글톤 패턴과 Java를 이용해 구현하는 싱글톤 패턴의 차이에 대해 설명해 주세요.

* 싱글톤 패턴이란 실제로 생성되는 객체는 하나이고 최초 생성 이후 호출된 생성자는 최초의 생성자가 생성한 객체를 반환하는 방법론이다. 장점으로는 메모리 낭비를 방지하고 다른 데이터간 공유가 쉽다는 점이 있으나 멀티 스레딩 환경에서 동시성 문제가 발생할 수 있다(하나의 인스턴스에 여러 스레드가 접근하는 경우).

스프링 싱글톤

컨테이너 내에서 특정 클래스에 @Bean 이 정의되면 스프링 컨테이너는 그 클래스에 대해 한개의 인스턴스를 생성한다.

이 공유 인스턴스는 설정 정보에 의해 관리되고 호출될 때마다 해당 공유 인스턴스를 반환한다.

자바 싱글톤

생성자를 private으로 선언하여 외부에서 접근할 수 없도록 하고 참조 메서드는 static으로 정의하여 어느 영역에서든 접근 가능하도록 한다.

Thread Safety를 보장하기 위해 getInstance() 메서드에 synchronized 키워드를 사용하기도 여러 인스턴스가 생성될 수도 있다. 또한 성능이 저하될 수도 있다.

public class JavaSingleton{

    private static Singleton instance;

    private JavaSingleton(){}

    public static synchronized Singleton getInstance(){
        if(instance == null){
            instance = new JavaSingleton();
        }
        return instance;
    }
}

 

차이점을 정리하면

- 자바 싱글톤은 클래스 로더에 의해 구현되고 스프링 싱글톤은 스프링 컨테이너에 의해 구현된다.

- 자바 싱글톤의 스코프(영역)은 코드 전체이고 스프링 싱글톤의 스코프는 해당 컨테이너 내부이다.

- 스프링 싱글톤은 Thread Safety를 자동으로 보장하지만 자바 싱글통는 상황에 따라 Thread Safetry를 보장하지 않을 수도 있다.

 

2. [JAVA] 접근제어자의 종류와 특성에 대해 설명해 주세요.

접근제어자(접근제한자)의 종류에는 4가지가 있다.

- private : 동일 클래스 내에서만 접근 가능하다.

- default(생략) : 같은 패키지 내에서만 접근이 가능하다.

- protected : 같은 패키지 내, 다른 패키지에서 해당 클래스를 상속받은 자식 클래스에서만 접근 가능하다.

- public : 클래스 내외, 패키지 내외 어디서든 접근이 가능하여 공개 정도가 가장 높다.

 

https://juran-devblog.tistory.com/201?category=915815

 

3. [SPRING] 스프링 프레임워크는 트랜잭션을 어떻게 구현하나요.

* 트랜잭션은 실패하면 모든 과정이 취소되어야하는 쪼갤 수 없는 업무 처리의 최소 단위이다.

스프링에서는 어노테이션을 이용한 선언적 트랜잭션을 지원하여 트랜잭션의 범위와 규칙 등을 설정 가능하다.

@Transactional

@Transactional 어노테이션이 붙으면 스프링은 해당 타깃을 포인트 컷의 대상으로 자동 등록하여 트랜잭션 관리 대상이 된다. 이렇게 AOP를 이용해 코드 외부에서 트랜잭션의 기능을 부여하고 속성을 지정할 있게 해주는 것을 선언적 트랜잭션이라고 한다.

반대로 트랜잭션 템플릿이나 트랜잭션 API를 이용해 직접 코드 안에서 사용하는 방법에 의한 트랜잭션을 프로그램에 의한 트랜잭션(programmatic transcation)이라고 하는데 스프링은 이 두가지 버전을 지원하지만 선언적 트랜잭션 사용을 지향한다.

 

스프링에서는 트랜잭션과 관련된 3가지 핵심 기술을 제공하고 있다.

- 트랜잭션 동기화

- 트랜잭션 추상화

- AOP를 이용한 트랜잭션 분리

자세한 참고 → https://mangkyu.tistory.com/154

 

[Spring] 트랜잭션에 대한 이해와 Spring이 제공하는 Transaction(트랜잭션) 핵심 기술 - (1/3)

1. Transaction(트랜잭션)에 대한 이해 [ 트랜잭션(Transaction)의 필요성 ] 만약 데이터베이스의 데이터를 수정하는 도중에 예외가 발생된다면 어떻게 해야 할까? DB의 데이터들은 수정이 되기 전의 상

mangkyu.tistory.com

 

728x90

관련글 더보기

댓글 영역