- JVM의 동작 원리를 설명하시오
- 바이트코드를 해당 OS에 특화된 언어로 변환하여 실행한다. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받으며, JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리합니다. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환한 뒤, Class Loader를 통해 class 파일들을 JVM으로 로딩합니다. 로딩된 class 파일들은 Excuetion engine을 통해 해석되며 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어집니다.
- Java의 동작 방식을 설명하시오
1. 작성한 자바 소스(.java)를 자바 컴파일러를 통해 자바 바이트 코드(.class)로 컴파일
2. 컴파일된 바이트코드를 JVM의 클래스 로더에게 전달
3. JVM의 클래스 로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올린다
4. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행합니다. 이때, 실행엔진은 2가지 방식으로 동작할 수 있습니다.
- 자바 인터프리터 : 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행합니다. 하나하나의 실행은 빠르나, 전체적인 실행 속도가 느리다는 단점을 가집니다.
- JIT 컴파일러(Just-In-Time Compiler) : 인터프리터의 단점을 보완하기 위해 도입된 방식으로 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행하는 방식입니다. 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 전체적인 실행속도는 인터프리팅 방식보다 빠릅니다.
- 인터페이스, 추상클래스의 차이에 대해서 설명하라.
추상클래스와 인터페이스는 상속받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제한다.
추상 클래스는 그 추상 클래스를 상속 받아서 기능을 이용하고, 확장시키는데 있고,
인터페이스는 함수의 구현을 강제하여 구현 객체의 같은 동작을 보장하는 것에 있다.
- 선택정렬이란?
선택 정렬은 첫 번째 자료를 두 번째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 찾아 첫 번째에 놓고, 두 번째 자료를 세 번째 자료부터 마지막 자료까지와 차례대로 비교하여 그 중 가장 작은 값을 찾아 두 번째 위치에 놓는 과정을 반복하며 정렬을 수행한다
- 퀵정렬이란?
리스트 안에 있는 한 요소를 선택한다. 이렇게 고른 원소를 피벗(pivot) 이라고 한다.
피벗을 기준으로 피벗보다 작은 요소들은 모두 피벗의 왼쪽으로 옮겨지고 피벗보다 큰 요소들은 모두 피벗의 오른쪽으로 옮겨진다. (피벗을 중심으로 왼쪽: 피벗보다 작은 요소들, 오른쪽: 피벗보다 큰 요소들)
피벗을 제외한 왼쪽 리스트와 오른쪽 리스트를 다시 정렬한다.
분할된 부분 리스트에 대하여 순환 호출 을 이용하여 정렬을 반복한다.
부분 리스트에서도 다시 피벗을 정하고 피벗을 기준으로 2개의 부분 리스트로 나누는 과정을 반복한다.
부분 리스트들이 더 이상 분할이 불가능할 때까지 반복한다.
리스트의 크기가 0이나 1이 될 때까지 반복한다.
- 버블소트란?
버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, … 이런 식으로 (마지막-1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬한다.
1회전을 수행하고 나면 가장 큰 자료가 맨 뒤로 이동하므로 2회전에서는 맨 끝에 있는 자료는 정렬에서 제외되고, 2회전을 수행하고 나면 끝에서 두 번째 자료까지는 정렬에서 제외된다. 이렇게 정렬을 1회전 수행할 때마다 정렬에서 제외되는 데이터가 하나씩 늘어난다.
- Git에서 Cherry Pic, Reset이란?
다른 브랜치에 있는 커밋을 선택적으로 내 브랜치에 적용시킬 때 사용하는 명령어이다.
git cherry-pick <commit_hash_1>
https://cselabnotes.com/kr/2021/03/31/56/
- 스크립트언어, 컴파일 언어 차이점은?
- 컴파일러 없이 명령어를 한줄씩 읽으면서 실행하므로, 번역속도는 빠르지만 프로그램 실행 시 매번 같은 코드를 번역해야 한다. 따라서 프로그램의 실행속도는 컴파일 언어에 비해 느리다.
- 컴파일을 하기 때문에 규모가 큰 프로그램일 경우 컴파일 하는데에 오랜 시간이 소요된다.
- 한번 컴파일을 하면, 이후에는 기계어를 읽어들이기 때문에 실행속도가 빠르다.
- 동기식 비동기식 차이는?
동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있습니다.
비동기 방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있습니다.
- DDL DML 설명하시오
데이터 정의어/ 데이터 조작어 (자동으로 커밋되지 않아 롤백 가능)/ 데이터 제어 언어 / 트랜잭션 제어 언어 (데이터의 보안, 회복, 무결성, 병행 수행 제어에 사용)
- session, cookie 차이
사용자의 정보가 저장되는 위치
쿠키는 서버의 자원을 사용하지 않으며, 세션은 사용한다.
- 반면에 세션도 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제됩니다. 예를 들어, 크롬에서 다른 탭을 사용해도 세션을 공유됩니다. 다른 브라우저를 사용하게 되면 다른 세션을 사용할 수 있습니다.
- 속도, 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠르고 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 가집니다.
- Interceptor, filter의 차이는 ?
- Stack Queue 설명하시오
- Cache 적용 설명해라.
- 스프링에서 IOC, DI는 어떤 것인가?
- AOP 구현 예시를 말해달라.
- http와 https의 차이는?
3 handshake (http), 4 handshake (https)
- 영속성 컨텍스트란 ???
- 추상은 여러번 인터페이스는 1번 상속 가능
- 리프레쉬토큰의 보안상 장점
- 연결리스트 배열의 차이
- POJO란 무엇인가
- 대용량 트래픽 핸들링 어떻게 할 것인가
- Call By Value, Call By Reference는 ??
- JPA란?
- n+1이란?
'기술면접 대비 > 면접 질문 모음' 카테고리의 다른 글
기술 면접 대비 - 자바 모음 (0) | 2022.05.08 |
---|---|
기술면접 대비 질문 50개 (0) | 2022.04.27 |
16진수 (0) | 2022.02.14 |
컴퓨터 구조 - 비트 연산자와 논리 연산자의 차이 (0) | 2022.02.11 |
논리 연산 - XOR (0) | 2022.02.11 |