- 주니어 백엔드 개발자 면접 시에 물어볼 수 있는 질문에 대해서 같이 공부하고, 공유하고자 합니다.
-
2022.08.02 ~
- 10주간 진행 (변동 가능)
- 10주 이후에 모의면접 형식으로 전환될 수 있습니다.
- 10주 내에서도 자유롭게 모의면접 형식의 모임도 있을 수 있습니다.
-
세션 진행 일시 : 매주 화요일 저녁 9시
-
진행 방식
- 공지되는 핵심 주제(소주제)에 대해서 공부하고 각자 질문을 만들고, 답변도 준비합니다.
- 아래에 공유된 질문리스트에서 핵심 주제에 포함되는 면접 질문은 기본적으로 답변을 준비합니다.
- 핵심 주제 공유시에 기본 질문리스트도 함께 공유드리겠습니다.
- 각자 준비한 질문들을 토대로 면접관과 면접자가 되어서 질의응답을 진행합니다.
- 인원에 따라서 소그룹화할 수 있습니다.
- 세션 이후 각자 준비한 질문과 답변을 #주차 Issue에 comment로 공유합니다.
주차 | 일시 | 주제 |
---|---|---|
1주차 | 22.08.03 (수) | TCP와 UDP |
2주차 | 22.08.09 (화) | HTTP와 HTTPS |
3주차 | 22.08.16 (화) | 로그인 |
4주차 | 22.08.23 (화) | 운영체제1 |
5주차 | 22.08.30 (화) | DB1 |
6주차 | 22.09.06 (화) | Java1 |
7주차 | 22.09.13 (화) | Spring1 |
8주차 | 22.09.20 (화) | Spring2 + JPA |
9주차 | 22.09.27 (화) | 자료구조 + 알고리즘(정렬) |
-
좋은 reference들을 토대로 wiki를 공동 제작합니다.
-
총 5개의 분야에 대한 질문 리스트들에 대해서 답변을 작성합니다.
Java + 자료구조
,Spring + JPA
,운영체제
,네트워크
,DataBase
- 자유롭게 질문을 골라서 Issue를 등록, Comment로 답변을 달고, 질문리스트에 Issue를 링크합니다.
- 이 후에 해당 질문에 대해서 작성자 이 외에도 추가로 Comment를 달고, 꼬리 질문 및 키워드에 대해서 작성하면 좋습니다.
- 실제 면접 질문에 답변한다고 생각하고, 자신의 말로 정리해보는 형식의 Comment를 권장합니다.
-
이외에 좋은 주제 혹은 질문이 빠졌다고 생각되면 질문을 추가하셔도 좋습니다.
💻 운영체제
- 바이트코드와 기계어의 차이에 대해 설명해주세요.
- 컴퓨터는 10진수를 2진수로 바꿔서 계산합니다. 10진수를 2진수로 바꾸는 방법과, 그 반대 방법에 대해 설명해주세요.
- context switching이란?
- PCB에 저장되는 정보는?
- 비선점방식과 선점방식을 설명해주세요.
- Thread 간의 데이터 공유와 Process 간의 데이터 공유의 공통점과 차이점을 설명해주세요.
- 스레드에 스택을 독립적으로 할당하는 이유?
- PC레지스터를 스레드마다 독립적으로 할당하는 이유?
- 멀티스레드 프로그래밍에 대해 설명해보세요.
- 멀티 스레드의 장점, 단점
- 멀티 프로세스 대신 멀티 스레드를 사용하는 이유
- Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.
- 프로세스 동기화에 대해 설명해보세요.
- 교착상태와 기아상태의 해결방법에 대해 설명해보세요.
- 세마포어와 뮤텍스의 차이에 대해 설명해보세요.
- 가상 메모리에 대해 설명해보세요.
- 페이지 교체 알고리즘에 대해서 설명해보세요.
- 페이징이 필요한 이유는?
- demand paging이란?
- 캐시의 지역성에 대해 설명해보세요.
- 페이지 적중률을 높이는 방법은?
- 시스템콜이란 무엇이며 시스템 콜을 사용하는 예시를 들어주세요.
- 인터럽트가 필요한 이유 및 언제 발생되는지 설명해주세요.
- 인터럽트 동작과정을 설명해보세요.
- 커널 모드와 유저 모드를 구분해 놓은 이유는?
- 커널이란?
- 커널 수준 스레드와 사용자 수준 스레드의 각각 장단점은?
- 운영체제가 여러 프로그램을 동시에 실행하는 원리에 대해 설명해주세요.
- 동기와 비동기의 차이(블로킹, 넌블로킹)에 대해서 설명해주세요.
- 캐시와 레지스터의 차이점은 무엇인가요?
🌐 네트워크 + WEB
- IPV4 vs IPV6 을 설명해주세요.
- IPv4의 주소 부족현상을 해결하기 위해 현재 어떤 방법을 사용하고 있나요?
- OSI 7 - TCP/IP Layer와 각 계층에 대한 설명과 계층화하는 이유에 대해 설명해주세요
- 패킷이란 무엇인지 설명해주세요.
- TCP와 UDP의 특징과 차이점을 설명해주세요.
- 3-Handshaking과 4-Handshaking의 과정을 설명해주세요.
- 3-way handshaking 과정에서 클라이언트가 서버가 보낸 ACK+SYN을 받지 못하면?
- 4-way handshaking 과정에서 Active closer가 마지막에 ACK를 굳이 보내는 이유?
- 만약 Passive closer에서 FIN 세그먼트를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
- TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?
- 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?
- UDP에서 신뢰도를 보장하는 방법을 설명해주세요.
- HTTP1.1와 HTTP2.0 차이점은 무엇인가요?
- HTTP의 특징을 설명해주세요.
- 비대칭키 또는 공개키 암호화 방식은 무엇인가요?
- HTTP METHOD 종류에 대해서 설명해주세요.
- HTTP에서 상태유지(stateful)를 하는 방법을 설명해주세요.
- SSL (또는 TLS) 가 어떻게 동작하는지 말씀해주세요.(연결방식)
- 차세대 프로토콜로 논의중인 HTTP/3 은 UDP 기반의 QUIC 이라는 기술로 구현되어 있습니다. UDP 는 TCP 대비 안정성이 떨어지는 프로토콜이라고 하는데, 그럼에도 왜 UDP 를 채택한 걸까요?
- HTTP(s) 프로토콜에서 바이너리 데이터를 전송하는 방식에 대해 설명해주세요.
- 도메인과 DNS가 무엇인지 설명해주세요
- Domain Name System 동작과정을 설명해주세요.
- DNS 스케줄링 알고리즘에 대해 설명해주세요. 특히 round robin 방식과 문제점을 설명해주세요
- DHCP 서버의 역할을 간단히 설명해주세요.
- 로드 밸런싱을 설명해주세요.
- L4 로드 밸런싱과 L7 로드 밸런싱에 대해 설명하고, 차이를 말해보세요
- 게이트웨이란?
- 서버에 트래픽이 주어졌을 때 어떻게 응답속도를 개선할 수 있는가?
- 로드밸런싱과 클러스터링 개념과 차이
- 프록시 서버에 대한 설명
- 리버스 프록시 서버를 왜 쓰는지 및 장단점
- url과 uri에 대해 각각 설명해주세요
- 브라우저에 "www.google.com" 입력하면 어떤일이 일어날까요?
- RESTful API란 무엇인가요?
- Ajax의 장점과 단점은 무엇인가요?
- CORS, preflight는 무엇인가요?
- 소켓이란 무엇인가요, 소켓 프로그래밍에 대해 설명해주세요?
- DOM과 가상DOM
- OAuth란 무엇인가요?
- SPA
- HTTP 는 Stateless (상태가 없는) 통신 프로토콜이라고 합니다. 따라서, 상태가 없다면 가령 HTTP 를 쓰는 서비스는 매번 로그인을 해 줘야 하거나 사용자 정보를 저장하는 일이 불가능합니다. 그런데 실제론 그렇지 않죠. 어떻게 이런 불편함을 해소했을까요?
- Socket 으로 웹 페이지를 크롤링하는 HTTP 클라이언트를 직접 구현해야 한다면, 어떻게 하시겠습니까?
- http통신을 api를 안쓰고 하려면?
- 세션 / 토큰 / 쿠키 / JWT 인증방식에 대한 장단점과 해결 방안에 대해 설명해주세요
- JWT와 장단점 대해 설명해주세요
💾 데이터베이스
- Index 의 자료구조
- Index 사용 시 장점과 단점
- Clustered Index와 Non-Clustered Index의 차이
- Primary Index vs Secondary Index
- 인덱스는 어떤 기준으로 정해야하는가?
- Cardinality 란?
- Selectivity 란?
- 커버링 인덱스란?
- Composite Index
- 모든 칼럼에 Index를 사용 시 발생하는 문제는?
- Index 를 사용하기 적합한 테이블은?
- ACID 란?
- 트랜잭션 격리 수준
- 트랜잭션의 상태
- 교착상태란?
- 저장 방식에 따른 NoSQL 분류 (Key-Value Model, Document Model, Column Model)
- NOSQL 이 확장에 열려있는 이유는?
- ORM 의 장점
☕ 자바 + 자료구조
- java 언어의 장단점
- JVM 구조 & JAVA 동작 원리
- OOP의 4가지 특징
- OOP의 5대 원칙 (SOLID)
- 객체지향(Object-Oriented)이란
- 객체지향 프로그래밍과 절차지향 프로그래밍의 차이
- 클래스, 객체, 인스턴스의 차이
- 객체(Object)란 무엇인가
- 변수의 3가지 타입에 대해 설명해주세요.
- Wrapper Class에 대해 설명하시오.
- 자바의 접근 제어자
- Autoboxing, Autounboxing에 대해 설명하시오.
- non-static 멤버와 static 멤버의 차이에 대해 설명하시오.
- main 메소드가 public static인 이유는?
- Final 키워드의 용도에 대해 설명하시오.
- Generic에 대해 설명하시오.
- ==과 equals()의 차이에 대해 설명하세요. (동일성 vs 동등성)
- Call by Reference와 Call by Value의 차이에 대해 설명하시오. + 자바에서 사용하는 방식은?
- 추상 클래스와 인터페이스의 차이에 대해 설명하시오.
- java reflection에 대해 설명하시오.
- String, StringBuilder, StringBuffer의 차이점을 설명해주세요.
- Java 8에 추가된 기능은 무엇이 있나요? (프로젝트를 진행하면서 버전을 11로 사용한 이유는?)
- Lambda란 무엇이고 어떠한 장점이 있는가?
- Stream API 특징이나 장점은 무엇이 있나요?
- Garbage Collector(GC)란? + 동작 방식 + 동작 알고리즘
- GC에 의해 변수가 초기화되는 시점을 설정해주세요.
- JAVA에서 바이트코드에 대해 설명해보세요.
- 예외처리 방법을 설명해주세요.
- 자바에서 쓰레드를 구현하기 위한 2가지 방법을 간단하게 설명하시오.
- Java Collections Framework
- ArrayList와 LinkedList의 차이는 무엇인가요
- HashTable vs HashMap vs ConcurrentHashMap
- CheckedException과 UnCheckedException의 차이
- Error, Exception 에 대해 설명
- Synchronized(동기화)를 하기 위한 방법은 무엇이 있나요
- try-with-resource란?
- Functional Interface란 무엇인가요?
- Method Reference는 무엇인가요?
- Optional 클래스는 무엇인가요?
- 업캐스팅과 다운캐스팅이란?
- this 키워드는 언제 사용되나요?
- 오버로딩 오버라이딩
- Java SE와 Java EE 애플리케이션 차이
- java 직렬화(Serialization)와 역직렬화(Deserialization)란 무엇인가
- Annotation
- Mutable 객체와 Immutable 객체 차이점
- equals()와 hashCode()를 함께 오버라이딩 해야하는 이유가 무엇일까요?
- List Set 차이
- 배열과 리스트
- 스택
- 큐
- 해싱
- 그래프
- 해시와 해시테이블
- 힙
- 트리
- Tree, Binary Tree, BST, AVL Tree, MST, Red-Black Tree, 트리 순회
- 자료구조를 이용해서 스택 구현하기
- 2개의 스택으로 큐 구현하기
🌱 Spring + JPA
- Spring DI/IoC는 어떻게 동작하나요?
- Spring Bean이란 무엇인가요?
- 스프링 Bean의 생성 과정을 설명해주세요.
- 스프링 Bean의 Scope에 대해서 설명해주세요.
- IoC 컨테이너의 역할은 무엇이 있을까요?
- DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요?
- Autowiring 과정에 대해서 설명해주세요.
- Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요.
- 프론트 컨트롤러 패턴이란 무엇인가요?
- Servlet Filter와 Spring Interceptor의 차이는 무엇인가요?
- Spring에서 CORS 에러를 해결하기 위한 방법을 설명해주세요.
- Bean/Component 어노테이션에 대해서 설명해주시고, 둘의 차이점에 대해 설명해주세요.
- @Configuration 어노테이션에 대해서 설명해주세요.
- Proxy에 대해서 설명해주세요.
- CGLIB, JDK Proxy
- Spring AOP를 활용해보셨다면, 어떻게 활용해보셨나요? 장점이 무엇일까요?
- POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요?
- Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요?
- Filter는 Servlet의 스펙이고, Interceptor는 Spring MVC의 스펙입니다. Spring Application에서 Filter와 Interceptor를 통해 예외를 처리할 경우 어떻게 해야 할까요?
- Spring Application을 구동할 때 메서드를 실행시키는 방법에 대해 설명해주세요.
- 의존성과 설정값을 생성자 인자로 주입해야 하는 이유에 대해 설명해주세요.
- PSA란 무엇인가요?
- @Transacional이 붙은 서비스 내에서 @Async가 붙은 메소드를 호출하면 어떻게 될까요?
- JPA 영속성 컨텍스트의 이점(5가지)을 설명해주세요.
- 영속성 컨텍스트 생명주기에 대해서 설명해주세요.
- 1차 캐시, 2차 캐시에 대해서 설명해주세요.
- dirty checking에 대해서 설명해주세요.
- LazyInitializationException은 왜 발생할까요?
- 스프링 프레임워크에서의 엔티티 매니저와 영속성 컨텍스트
- JPA Propagation 전파단계를 설명해주세요.
- JPA를 쓴다면 그 이유에 대해서 설명해주세요.
- N + 1 문제는 무엇이고 이것이 발생하는 이유와 이를 해결하는 방법을 설명해주세요.
- OSIV에 대해서 설명해주세요.
자료구조 + 알고리즘(정렬)
- 퀵 정렬이 빠른 이유, 정렬에서 유리한 이유를 설명해주세요.
- 퀵 소트와 머지 소트를 비교해주세요.`
- 안정 정렬과 불안정 정렬의 차이와 예시를 설명해주세요.
- 정렬하려는 자료가 현재 메모리보다 클 때, 어떻게 해서 정렬할 수 있을지 설명해주세요. (정렬하려는 자료가 1G인데 메모리가 100M이라면?)
- 퀵 정렬에서 최악의 시간 복잡도가 나오는 케이스를 설명해주세요.
- 버블 정렬(또는 다른 정렬)을 구현하는 과정을 설명해주세요.
- 병합 정렬을 제자리 정렬로 구현하는 방법이 있을까요?
- O(nlogn)인 정렬 알고리즘을 아는대로 설명해주세요.
- 모두 정렬되어있는 배열에 하나의 원소를 추가할 때 사용하면 좋은 정렬 방법은 무엇이고 그 이유는 무엇인가요?
- 웹 브라우저의 앞으로 가기, 뒤로 가기, 링크 눌러서 새 창 띄우기를 구현하려면 어떻게 해야할까요?
- 특정 유저의 점수를 입력하면 랭킹을 구하는 시스템을 구현하려고 할 때 어떤 자료구조를 쓰면 좋을까요?
- 해시 테이블의 해시 충돌 해결방법에 대해서 설명해주세요.
- 트리 순회 방식에 대해서 설명해주세요.
- 특정 문자열을 검색할 때 사용하면 좋은 자료구조가 있나요?
- 자가 균형 이진 탐색 트리에 대해 설명해주세요.