백엔드
본 문서는 직접 면접을 응시한분들이 작성하는 문서이며, 기업 보안 관련 문제에 대한 이슈가 발생할 시 해당 기업의 내용을 제거할 예정입니다.
당근마켓
note
면접시간: 1시간
- 간단 자기소개
- 자바스크립트의 객체지향 특징
- 프로토타입을 사용하며 얻는 장점
- 자바스크립트에서 프로토타입을 설정하는 방법
- 자바스크립트에서 부모와 자식이 같은 프로퍼티를 가진다며 부모의 프로퍼티에 접근하느 방법
- 프로토타입을 사용하여 private를 만드는 방법
- 클로저란?
- NodeJS가 비동기를 처리하는 방식
- NodeJS에서 결구 쓰레드를 사용하게 되는데 그렇다며 멀티쓰레드인가?
- 멀티쓰레딩의 문제점
- 교착상태란?
- 교착상태를 해결하는 방법
- 자바의 synchronized가 내부적을 동작하는 방법
- 싱글쓰레드의 이점
- DB의 트랜잭션 격리 수준에 대해 설명하라
- DB에 트랜잭션이 필요한 이유
- DB 인덱스란?
- DB 인덱스의 동작 원리
- DB 인덱스에 사용하는 자료구조
- B-트리 어떻게 동작하는가?
- DB 인덱스가 B+, B-트리를 많이 사용하는 이유
- DB 인덱스를 사용하기 좋은 경우는?
- XXS란?
- CSRF란?
- CORS란?
- 서버에서 로그인을 구현할때 사용한 방법
- JWT의 장/단점
- JWT의 보안취약점을 해결하기 위한 방법
- Session의 장/단점
- HTTPS에 대해 설명하라, HTTPS의 인증방식은?
- OAuth의 인증방식을 설명해보아라
FLO
note
면접시간: 1시간
- Java 메인 클래스의 A메서드에서 인스턴스를 생성하고 다른 함수에 넘겨줬을 때 그 함수에서 해당 인스턴스를 다른 인스턴스로 변경할 경우 리턴하지 않아도 메인 클래스의 A메서드에 영향을 미치는가
- Java final의 의미와 사용하는 경우
- Java Checked Exception vs Unchecked Exception 차이
- Java Spring에서 @Transactional 속성과 동작 방식
- JavaScript 익명 함수와 클로저의 차이점
- JavaScript 자유 변수란
- JavaScript 일급 객체란
- GO 장점인 동시성, 병렬형 프로그래밍을 이용해 개발했는지
- GO 인터페이스 타입이 자바 오브젝트처럼 동작할 수 있는 이유
- GO 구현을 목적으로 리시버 메서드를 생성할 때 포인터로 받을 때와 값으로 받을 때 나누는 기준
- GO Buffered channel vs Unbuffered channel 퍼포먼스 면에서 차이점
- GO 채널을 통해 값을 주고받을 때 고루틴이 어떻게 상호작용 하는지 동작 원리
- Database 카디널리티에 대해 설명
- Database 1:N 관계 테이블에서 1이 Optional일 경우와 Optional이 아닐 경우 차이
- Database ERD에서 실선, 점선, 그리고 까마귀발과 고리의 의미와 차이점
- Database Join 중 한 가지를 구체적으로 설명
- Docker와 Docker Compose 사용한 이유
- Docker Service 삭제하는 법
- GO, JAVA, PYTHON를 사용하는 이유을 각각 구체적으로 설명
FLO(2차)
note
면접시간: 2시간
라이브 코딩 1시간 + 질의응답 1시간
- @Controller와 @RestController의 차이점과 동작 원리
- POST, PATCH method를 사용할 때 어떤 식으로 값을 받는가
- RESTful API는 어떤 것이라고 생각하는지, 얼마나 관심있는지
Map<Integer, String> map = new HashMap<>()
에서 해시맵을 생성할 때 타입을 생략할 수 있는 이유는 무엇인가- HashMap은 thread-safe하지 않은데, 이를 thread-safe하게 만들어 보아라
- Java에서 String은 메모리 구조 중 어디에 할당되는가 (+ Python, GO)
- String을 사용하지 않고 StringBuilder을 사용한 이유는 무엇인가
- Builder 패턴을 쓰는 이유 중 가장 중요한 이유는 무엇이라 생각하는지
- Slf4j를 사용하여 로그를 출력할 수 있는 이유는 어딘가에 객체가 생성되서일 것인데, 그 때 생성된 객체를 확인하는 방법은 무엇인가
- Java 메인 클래스의 A메서드에서 인스턴스를 생성하고 다른 함수에 넘겨줬을 때 그 함수에서 해당 인스턴스를 다른 인스턴스로 변경할 경우 리턴하지 않아도 메인 클래스의 A메서드에 영향을 미치는가
- 클로저란 무엇인가
- Java는 일급 객체인가(+ GO)
빅픽처인터렉티브
note
면접시간: 40분
- GO언어를 시작하게 된 계기
- Spring IOC & DI & AOP란
- @Autowired를 사용하여 의존성 주입을 하였을 때 일어날 수 있는 문제점과 그를 해결할 수 있는 방안
- Spring AOP에서 Pointcut과 JoinPoint 등 각 용어들의 동작 방식에 대해 설명
- Java Reflection의 동작 원리를 설명
- 만약 랜덤채팅 서비스에 사용자가 많아져 1대의 서버로 동작할 수 없게 됐을 때 어떻게 할 건지 구체적으로 설명
- 서버를 많이 둔다면 클라이언트가 어떤 기준으로 무슨 서버에 요청해야 할 건지 어떻게 구분할지
- 핸들링 전용 서버를 만든다면 같은 채팅방에 있는 유저에게 제대로 채팅이 전송될지
- MySQL로 선착순 100명에게 쿠폰을 나눠주려고 할 때 어떻게 할 건지 구체적으로 설명
- SERIALIZABLE을 사용하여 나눠줄 경우 100번째 받는 사용자는 어떻게 처리될지
오후두시랩
note
면접시간: 1시간
질의응답 40분 + 라이브 코딩 20분
- 간단 자기소개
- 마이스터고를 선택한 이유 및 백엔드 분야를 선택한 이유
- Restful API의 정의
- TCP 및 UDP의 차이
- TCP, UDP 등과 웹 통신에서 사용되는 HTTP 프로토콜의 차이
- 프로세스 및 스레드의 차이
- DB 트랜잭션의 정의 및 동작 과정
- 프로젝트에서 DB 정규화는 어떻게 진행했는지
- 리눅스(Linux)에서 스크립트를 만들고 실행할 때 해야 하는 작업 (실행 권한 할당)
- 인터페이스와 구현체를 따로 만드는 이유
- 스프링의 IoC, DI를 설명
- 스프링 컨테이너를 설명
- AWS의 VPC 및 보안 그룹 설명
- Linked List를 이용해 스택 메서드를 구현 (라이브 코딩)
- Java에서 Thread-safe하게 개발하는 방법
- Java Lock 인터페이스의 구현체 종류 및 특징 (ReentrantLock, ReadWriteLock)
테크타카(ARGO)
note
면접시간: 30분
- 간단 자기소개
- HTTP METHOD (GET, POST, PUT, PATCH, DELETE)의 사전적 정의와 서버가 수행하는 동작
- HTTP STATUS code의 200대, 400대, 500대 별 의미
- String 리터럴과 new String의 차이
- 동일성(
==
), 동등성(equals
) - Array, List, Set, Map 의 특징들
- Array와 List 차이점
- List와 Set의 contains 메소드의 시간복잡도
- hashcode를 override 하지 않고 equals만 override 했을 때 발생할 수 있는 이슈
- HashSet, HashMap에서 hashing 충돌이 발생하게 되는 경우, 어떻게 처리되는 지 설명
- hashing 충돌이 발생했을 때 해결하는 방법 1가지
- 해당 알고리즘(구구단과 간단한 알고리즘)의 시간복잡도와 그 이유를 구체적으로 설명
@GenerateValue(strategy=GenerationType.IDENTITY)
전략으로 ID를 가진 Entity를 구성하였을 때, 엔티티에 id를 임의로 넣어서 save했을 때와 그렇지 않을 때의 차이를 구체적으로 설명- JPA Entity가 반드시 필연적으로 ID를 사용자 입력으로 받는다면, select 쿼리가 추가로 발생하게 되는 데 select 쿼리가 추가적으로 생기지 않도록 하는 구체적인 방법 설명
- JPA를 사용하면서 겪은 문제와 해결방법 구체적으로 설명
- 최근 읽거나 읽은 전공 도서