게을러지지마 / 면접질문 정리

면접 질문 정리

book : aws algorithm

elasticsearch에서 text와 keyword의 차이점은? text 타입은 입력된 문자열을 텀 단위로 쪼개어 역 색인 (inverted index) 구조를 만듭니다. 보통은 풀텍스트 검색에 사용할 문자열 필드 들을 text 타입으로 지정합니다.

keyword 타입은 입력된 문자열을 하나의 토큰으로 저장합니다. text 타입에 keyword 애널라이저를 적용 한 것과 동일합니다. exact match를 활용 할 때 사용.
(보통은 집계(aggregation) 또는 정렬(sorting)에 사용할 문자열 필드를 keyword 타입으로 지정합니다.)

참고
https://esbook.kimjmin.net/07-settings-and-mappings/7.2-mappings/7.2.1


운영체제에서 프로그램의 실행을 다양한 메모리 공간이 제공됩니다. 총 4가지가 있는데 말씀해주세요. (JVM 메모리 아닙니다.)ttt

패러다임이란?

1급객체에 대해 설명해주시오

queryDSL

JPQL로 작성을 하여 원하는 쿼리를 사용할 수있지만 동적쿼리의 경우 런타임 에러 발생, queryDSL의 경우 컴파일 시점에 오류를 발견할수 있다.
메서드 체이닝 방식으로 유틸메서드를 사용할 수있고 직관적으로 쿼리 작성이 가능하다.


Spring PSA, DI, DIP

JWT란 무엇인가요? 그리고, 어떤 경우에 어떻게 사용하나요?

TDD

테스트 주도 개발
테스트코드를 먼저 작성하는 개발 방법론. 테스트 주도 개발. 프로덕션 코드보다 테스트코드를 먼저 작성한다.

단점 생산력 저하

단위 테스트(Unit Test) ? 말 그대로 한 단위(일반적으로 class)만을 테스트하는 것


BDD

Behavior-Driven Development given, when, then, 메소드 단위가 아닌 시나리오 단위로 테스트 코드 작성

참고 링크 : https://tv.kakao.com/channel/3693125/cliplink/414004682


InnoDB와 MyISAM의 차이점은?

배포방식의 종류를 말씀해주세요.

Rolling, Blue/Green/ Canary
Rolling 배포는 서버를 한 대씩 구 버전에서 새 버전으로 교체해가는 전략이다.
Blue/Green 배포는 구 버전에서 새 버전으로 일제히 전환하는 전략이다.
Canary 배포는 위험을 빠르게 감지할 수 있는 배포 기법이다. 구 버전의 서버와 새 버전의 서버들을 구성하고 일부 트래픽을 새 버전으로 분산하여 오류 여부를 판단한다.


Gradle에서 annotation processer란?

컴파일 시점에 Annotation 기반으로 코드를 변경하거나 생성하는 방법 Annotation Processor 사용되는 프레임워크

kapt는?
Kapt(Kotlin Annotation Processing Tool) 코틀린에서 어노테이션 처리를 위한 부분

Annotation Processor 사용되는 프레임워크


annotation processor가 어떤 프레임워크에 사용되나요?

일반적으로 annotation에 대한 코드베이스를 검사, 수정 또는 생성하는데 사용된다.
본질적으로 annotation processor는 java 컴파일러의 플러그인의 일종. annotation processor를 적재적소에 잘 사용한다면 개발자의 코드를 단순화 할 수 있습니다.

사용 이유


InnoDB와 MyISAM의 차이점은?

JPA에 1차 캐시 2차 캐시에 대해서 설명해주세요.

Adapter Pattern 이란?

C10K 문제란?

C10K problem

C10K는 다수의 클라이언트를 동시에 처리할 수 있는가에 대한 문제. (하드웨어 성능상 문제가 없어도 클라이언트의 수가 많아지면서 나는 문제라고 보면된다) 예전에는 하드웨어가 병목이 심했지만 80년대 말부터 학자들은 소프트웨어 위기론을 제기했다. 하드웨어는 10년에 4배씩 좋아졌지만 소프트웨어는 그렇지 못했다.

해결책 Non-blocking I/O의 등장. event-driven방식

Apache의 C10K를 해결하기위해 ‘NGINX’가 개발되었다. event-driven 구조로 만든 웹서버. (고정된 프로세스만 생성하여, 그 프로세스 내부에서 비동기 방식으로 task를 처리함.)

참고
C10K : Client(connection) 10*1000, 클라이언트가 1만개다
무어의 법칙 : 18개월마다 반도체 직접회로의 성능이 2배로 증가 에 비해 소프트웨어의 한계로 인해 발생한 문제
https://applefarm.tistory.com/137


CQRS란?

CQRS와 그 관련 기술들은 .NET 환경을 중심으로 발전해왔고 점차 Java, Ruby 등의 생태계로 확산되고 있습니다.
CQRS는 Command and Query Responsibility Segregation(명령과 조회의 책임 분리)을 나타냅니다.
시스템에서 명령을 처리하는 책임과 조회를 처리하는 책임을 분리하는 것이 CQRS의 핵심입니다.

CRUD에서 R(읽기)를 CUD와 분리시킨다….
한마디로 Read하는 클래스는 따로 만들고 CUD와 분리한다.
왜냐하면, 코드의 역할 책임이 모호해진다. 의미/가독성이 나빠진다. 시스템이 복잡해질 수록 유지보수성이 떨어진다.
참고 : https://freedeveloper.tistory.com/399


HTTP Method

GET: 서버로 부터 데이터를 취득
POST: 서버에 데이터를 추가, 작성 등
PUT: 서버의 데이터를 갱신, 작성 등
DELETE: 서버의 데이터를 삭제
HEAD: GET방식과 동일하지만, 응답에 BODY가 없고 응답코드와 HEAD만 응답한다. 웹서버 정보확인, 헬스체크, 버젼확인, 최종 수정일자 확인등의 용도로 사용된다.
OPTIONS: 웹서버에서 지원되는 메소드의 종류를 확인할 경우 사용 PATCH: 리소스의 일부분을 수정
CONNECT: 동적으로 터널 모드를 교환, 프락시 기능을 요청시 사용