Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2주차 모의 면접 질문 정리 (Network 2.4~2.5, Java 1~3) #8

Open
kyeong-hyeok opened this issue Jan 19, 2024 · 1 comment
Open
Assignees
Labels

Comments

@kyeong-hyeok
Copy link
Contributor

HTTPS에 대해서 설명하고 SSL Handshake에 대해서 설명해 주세요.

  1. 클라이언트는 TCP 3-way handshake를 수행한 이후 Client Hello를 전송. 서버는 인증서를 보냅니다.
  2. 클라이언트는 받은 인증서를 신뢰하기 위해서 등록된 인증기관인지 확인 (이 인증서는 인증기관의 개인키로 암호화되어있고, 공개키로 검증할 수 있음) 클라이언트는 사이트의 정보와, 서버의 공개키를 얻을 수 있음
  3. 서버의 공개키로 통신에 사용할 비밀키를 암호화해서 서버에 보냄. 서버는 이를 개인키로 확인하고 이후 통신은 공유된 비밀키로 암호화되어 통신

객체 지향 설계 원칙에 대해 설명해 주세요.

  • 단일 책임 원칙 : 한 클래스는 한 책임만 있어야한다.
  • 개방 폐쇄 원칙 : 확장에는 열려있고 수정에는 닫혀있어야한다.
  • 리스코프 치환 원칙 : 부모 객체 대신 자식 객체 넣어도 (반대여도) 성립해야한다
  • 인터페이스 분리 원칙 : 인터페이스의 기능을 분리
  • 의존 역전 원칙 : 추상적인 인터페이스에 의존해야한다

세션 기반 인증과 토큰 기반 인증은 각각 어느 경우에 적합한가요?

  • 세션 기반 인증은 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful한 구조를 가지고, 토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless한 구조를 가집니다.
  • 단일 도메인이라면 세션 기반 인증을 사용하고, 아니라면 토큰 기반 인증을 사용하는 것이 적합하다고 생각합니다. 왜? - 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하는 것은 어렵습니다. (CORS 문제)

JVM 동작 방식에 대해 설명해 주세요.

  1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당
  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일
  3. Class Loader를 통해 JVM Runtime Data Area로 로딩
    • Class Loader: JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
  4. Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석
  5. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어짐

Runtime Data Area에 대해 설명해 주세요.

  • Method Area : 모든 스레드가 공유하는 메모리 영역. 클래스, 인터페이스, 메소드, 필드 static 변수 등의 바이트 코드 보관
  • Heap Area : 모든 스레드가 공유하며 new 키워드로 생성된 객체와 배열이 생성되는 영역. 메소드 영역에 로드 된 클래스만 생성 가능함
    • 가비지 컬렉터가 참조되지 않는 메모리를 확인하고 제거하는 영역
  • Stack Area : 메소드 호출 시마다 각 스택 프레임(그 메소드를 위한 공간)이 생성함. 메소드 안에서 사용되는 값을 저장하고 호출된 메소드의 매개변수, 지역변수, 리턴 값 및 연산이 일어나는 값을 임시로 저장. 마지막으로 메소드 수행이 끝나면 프레임별로 삭제

객체지향 프로그래밍에 대해서 설명해 주세요.

  • 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
  • 캡슐화, 추상화, 상속화, 다형화

HTTP/1.0의 설계 방법과 특징에 대해서 설명해 주세요.

  • 기본적으로 한 연결당 하나의 요청을 처리하도록 설계됨 → 서버로부터 파일을 가져올 때마다 TCP의 3-way handshake를 계속해서 열어야 하기 때문에 RTT가 증가

꼬리 질문 - HTTP/1.1이 나온 이유, HTTP/1.1의 문제?

  • HOL Blocking
  • HOL Blocking(Head Of Line Blocking)은 네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상

Execution engine에 대해서 설명해 주세요.

  • Class Loader를 통해 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행
  • 인터프리터 + JIT 컴파일러 방식으로 진행.
    • JIT : 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿔 실행. 빠르지만 변환하는데 비용 발생
    • 따라서, 모든 코드를 JIT 방식으로 실행하지 않고 인터프리터 방식을 사용하다가 일정 기준이 넘어가면 JIT 방식으로 실행

HTTP 1.1 → HTTP 2.0 개선된 부분

멀티플렉싱

  • 여러 개의 스트림을 사용하여 송수신 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고 나머지 스트림은 멀쩡하게 동작 병렬적인 스트림 단일 연결을 사용하여 병렬로 여러 요청 가능 애플리케이션에서 받아온 메시지를 독립된 프레임으로 조각내어 서로 송수신한 이후 다시 조립하며 데이터를 주고 받아용 ->HOL Blocking을 해결

헤더 압축

  • 허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용하여 표현

HTTP 메서드와 이것이 하는 역할에 대해서 설명해 주세요.

  • GET 요청은 서버에 존재하는 데이터를 요청하는 것입니다. CRUD로 따지면 R입니다.
  • POST 요청은 서버에 데이터를 생성하는 것을 요청합니다. CRUD로 따지면 C입니다.
  • PUT 요청은 서버에 존재하는 데이터를 수정하거나 존재하지 않으면 생성합니다. CRUD로 따지면 C,U입니다.
  • DELETE 요청은 서버에 데이터를 제거할 것을 요청합니다. 존재하지 않아도 동일하게 동작합니다. CRUD로 따지면 D입니다.
  • PATCH 요청은 서버에 존재하는 데이터를 일부 수정합니다. CRUD로 따지면 U입니다.
@eojinny
Copy link
Member

eojinny commented Jan 19, 2024

  • 쿠키와 세션의 차이
    쿠키는 서버의 자원 사용 X
    세션은 서버의 자원을 사용한다.
    보안 : 세션 > 쿠키
    쿠키 클라이언트 로컬에 저장 ->변질되거나 스니핑 당할 우려가 있어서 보안에 취약
    세션 쿠키를 이용해서 session-id만 저장하고 구분하여 서버에서 처리

@kyeong-hyeok kyeong-hyeok changed the title 2주차 모의 면접 질문 정리 (Networtk 2.4~2.5, Java 1~3) 2주차 모의 면접 질문 정리 (Network 2.4~2.5, Java 1~3) Mar 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants