정기간행물/daily

백엔드 CS 면접 대비 멘토링 (안재홍 멘토님)

:)jun 2023. 10. 29. 23:02

Q. HTTP에 대해 아는 대로 설명

W. 인터넷에서 서버와 클라이언트 간의 통신을 하기 위해 정한 규약이 HTTP이다.

- 무상태성(stateless)

- HTTP method (GET, POST, PUT, DELETE, OPTIONS), status code (401, 409 ...)

 

Q. HTTP 버전 별로 구분?

- 보통은 1.1을 사용한다.

1.0은 흔히 보고 있는 헤더, 상태코드 추가가 됐습니다.

1.1은 keep-alive TCP는 신뢰성 있는 통신을 하기 위해 커넥션을 맺을 때 3 way handshake 과정이 있다. 매번 하기 어렵다. 기존 연결을 사용

2.0 동기식 처럼 처리하면 느리다. 멀티플랙스드 스트림 한 개로 동시에 여러개 보낸다. 그래도 환영 받지 못했다.

3.0 TCP라 느리다. UDP를 사용한다. (구글에서 QUIC을 만들었음)

 

Q. GET vs POST, PUT vs PATCH

GET: 리소스를 조회할 때,

POST: 리소스를 만들 때나 변경할 때.

GET보다 POST가 더 안전한가? NO

PUT: 리소스 전체를 업데이트할 때,

PATCH: 리소스 일부만 업데이트할 때.

 

Q. HTTP vs HTTPS

HTTP는 평문 통신이기 때문에 보안상 취약하다. 암호화된 통신은 HTTPS이다.

양방향 암호화 알고리즘 (RSA)을 통해 서로 암호화, 복호화 처리를 하면서 암호화 된 통신을 할 수 있다.

Q. HTTPS 라고 해서 안전한가?

100% 안전하지는 않다. 인증서가 탈취된다면 뚫릴 수 있다.

 

JAVA

Q. Interface vs Abstract class

Interface는 상수나 추상 메서드만 존재

Abstract class는 하나 이상의 추상 메서드가 존재

 

Q. 다중 상속? No.

다이아몬드 문제 : A - (B, C) - D 일때 만약 부모들 중에 메서드가 같으면 누구의 것을 가져올 것인가? -> 다중 상속 금지

 

Q. Object class

자바에서 최고 조상 클래스

 

Q. Static 키워드, 장단점

프로세스 메모리 구조를 활용해서 대답해야 한다.

장점

GC의 관리를 받지 않으므로서 GC의 오버헤드를 방지할 수 있다.

단점

static 키워드를 사용하면 데이터 영역으로 가기 때문에 GC 관리를 받지 않는다. 메모리 누수의 원인이 된다.

static 변수를 여러 스레드에서 동시에 접근 가능하기 때문에 동시성 문제가 발생할 수 있다.

객체 지향의 캡슐화를 파괴하는 요인 중 하나이다.

 

Q. Final 키워드

Final 변수: 상수

Final class: 상속 불가

Final method: override 불가

 

Q. ==, equals 차이

== 는 레퍼런스 값을 비교, equals 는 객체 안에 있는 값들을 비교

 

Q. 접근 제어자 종류와 특성

public: 모든 곳에서 접근 가능

protected: 같은 패키지, 상속 받은 자식

default: 같은 패키지

private: 같은 클래스

 

Q. Throw vs Throws

 

Q. Error vs Exception

Error: 시스템적으로 문제가 발생했을 때 (ex. stackoverflow error)

Exception: 개발자가 처리할 수 있을 때

checked exception: 컴파일 시 체크 (ex. IO Exception) 트랜잭션 내에 문제가 발생하면 롤백이 되지 않는다.

unchecked exception: 런타임 시 체크 (ex. NullPointException) 트랜잭션 내에 문제가 발생하면 롤백 된다.

 

Q. Reflection

객체를 통해 클래스 정보를 분석하는 기능

 

Q. String, StringBuffer, StringBuilder

String: immutable(불변객체)

StringBuffer: mutable, 동시성 처리를 하기 때문에 시간이 오래 걸린다.(thread-safe)

StringBuilder: mutable, 동시성 처리를 하지 않는다.

 

Q. JVM 구조는?

 

Q. JVM 메모리 구조 (프로세스 메모리 구조와 비교해서 설명한다.)

method area

stack

heap: 객체 생성, GC 동작

 

Q. Garbage collection은 무엇인가?

Q. GC 동작방식 설명?

Q. Minor gc? Major gc?

Q. Stop-the-world? GC가 동작하는 동안 해당 쓰레드 외의 다른 쓰레드들이 전부 멈춘다.

Q. GC 종류? 자바 9 이상 default는 G1GC

Q. G1GC에 대해 설명?

 

Q. 멀티스레드에서 동시성 처리 방법?

비관적 락, 낙관적 락 개념 중요

1. synchronized

2. volatile : 메인 메모리와 캐시 메모리 사이의 데이터 정합성 문제 발생 -> 애초에 메인 메모리를 보게 하자!

3. atomic class

4. concurrentHashMap

5. 불변 객체

 

Spring

Q. IoC(Inversion of Control): 제어의 역전. 객체를 생성하는 것을 개발자가 했는데 제어권을 스프링 컨테이너에게 줬다.

Q. DI(Dependency Injection): 의존성 주입. 스프링 컨테이너가 제공하는 빈을 통해 객체를 생성한다.

 

Q. Spring DI 하는 방법?

필드 주입

세터 주입

생성자 주입

생성자 주입을 써야하는 이유 : A서비스, B서비스가 있을 때 서로 DI를 했을 경우 순환 참조 문제 발생 -> 컴파일 시점에 에러가 남. 미리 알 수 있음

 

Q. AOP?

관점 지향 프로그래밍. 주요 로직 외의 부가적인 로직들을 AOP를 설정해두면 여러 군데에서 사용할 수 있고 주요 로직에 집중할 수 있게 해준다.

 

Q. Singleton

인스턴스가 단 하나만 사용해야할 때

Q. Spring bean은 왜 모든 객체가 싱글톤으로 만들어졌을까?

스프링 부트의 내장 웹서버는 톰캣. 톰캣 서버 특징은 멀티 스레드 환경을 자동으로 구성함. 인스턴트가 싱글턴 객체가 아니라면 메모리 누수가 일어날 수 있다.

Q. Singleton 단점

static으로 이루어져있어서 동시성 문제 발생

 

Q. Spring MVC? 동작 순서?

 

Q. Filter vs Interceptor

요청 -> filter -> dispatcher servlet -> interceptor

interceptor는 DS안에서 동작하기 때문에 Bean을 사용할 수 있다.

 

Q. Spring boot?

기존의 Spring Framework는 개발 환경 설정이 복잡하고 어려웠다. (ex. web.xml ...)

 

Q. Spring boot에 autoconfiguration 동작 방식

spring.factories 

 

JPA

Q. N+1

lazy 로딩시 --

Q. N+1 해결 방법

1. 패치 조인을 통해 처음부터 관련된 것들을 한번에 가져옴.

패치 조인 문제점 : 페이징 처리에 어려움이 있다.

2. 배치 사이즈

3. 엔티티 그래프

 

요즘은 연관관계 아예 안쓰는 회사도 있다.

그럼 eager 로딩하면 되지 않냐? 모든 연관관계의 데이터 다 가져옴. -> eager 로딩 쓸 일 없다.

 

Q. JPA Entity 객체 생명주기

영속상태:  find 해오면 자동으로 영속 상태가 됨.

준영속상태: 데이터를 트랜잭션에서 커밋, 플러시, 클리어 했을 때

비영속상태: 데이터를 지웠을 때

 

Q. Persistence Context(영속성 컨텍스트)

DB에서 find해오면 영속상태가 되는데 1차 캐시에 저장해둔다.

읽어온 값들을 중간에 변했는지 체크해주는 역할 (더티체킹)

 

Q. JPA의 트랜잭셔널 옵션?

ReadOnly: 슬레이브에서 읽어감

Propagation 7가지 옵션

isolation 3가지 옵션

 

DATABASE (NoSQL/RDBMS)

RDBMS vs NoSQL

RDBMS: 관계를 지어서 관리를 해야하는 것들 - 상품, 주문, 배송, 계정

NoSQL: 

 

그 외

Q. 쿠키 vs 세션

쿠키는 클라이언트에서 관리해서 보안이 취약하다.

세션은 서버에서 관리해서 보안이 비교적 좋다.

 

Q. Kotlin, redis, kafka, msa 등등

Q. msa 패턴, 페일오버