2024.01.24 ( 스터디 완료 )
랜덤 질문 5개씩 답변하기
1. inner join과 left join의 차이점은?
* Inner join (내부 조인)
두 테이블 간의 교차하는 결과만 반환. 즉, 조건에 맞는 행만 결과에 포함.
SELECT *
FROM T1
INNER JOIN T2 ON T1.col = T2.col;
* Left join (Left outer join)
왼쪽 테이블의 모든 행을 포함하면서, 오른쪽 테이블에서 일치하는 행을 포함.
일치하지 않는 경우에는 오른쪽 테이블의 열은 Null로 채워짐.
SELECT *
FORM T1
LEFT JOIN T2 ON T1.col = T2.col;
* Inner join _ 교집합
* Outer join _ 합집합
=> 결과가 같다면 LEFT JOIN 대신 성능이 좋은 INNER JOIN을 사용.
2. 데이터베이스 트랜잭션에 대해서 설명.
* 데이터베이스 트랜잭션
데이터베이스에서 수행되는 작업의 논리적인 단위. ACID
1. 원자성 (Atomicity)
- 트랜잭션은 원자적인 단위로 간주됨.
- 모든 작업은 성공 / 실패 로 판단.
- 하나의 작업이라도 실패하면 트랜잭션 전체가 롤백되어 이전 상태로 복원.
2. 일관성 (Consistency)
- 트랜잭션이 완료된 후에도 데이터베이스는 일관된 상태를 유지해야함.
=> 데이터베이스 무결성 보존
3. 고립성 (Isolation)
- 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 서로 영향을 미치지 않도록 고립.
(한 트랜잭션이 진행중일 때, 다른 트랜잭션에서는 그 작업을 참조할 수 없음)
4. 지속성 (Durability)
- 성공적으로 완료된 트랜잭션은 영원히 반영.
- 커밋된 데이터는 영구적으로 저장.
=> 데이터의 지속성 보장
3. 자바의 메모리 구조에 대해서 설명.
1) 메소드 영역 (Method Area)
- 클래스 정보, 정적 변수(static variables), 상수, 생성자, 메소드 코드 등이 저장되는 영역.
- 런타임 상수 풀(Runtime Constant Pool)이 위치하는 영역.
문자열 상수, 클래스/인터페이스 이름, 메소드와 필드 이름 저장.
- 모든 스레드가 공유.
2) 힙 (Heap)
- 동적으로 생성된 인스턴스( 'new' 생성객체), 배열 등의 객체가 저장되는 영역.
- Garbage Collector 에 의해 관리
- 모든 스레드가 공유.
3) 스택 (Stack)
- 로컬 변수, 파라미터, 리턴 값, 메소드 호출 시 발생하는 임시 데이터 등이 저장되는 영역.
- Heap 영역에 저장된 데이터(참조 타입)의 주소값을 저장.
- 메소드 호출과 종료에 따라 프레임(Frame)*이라 불리는 작은 단위로 구성.
- 후입선출(LIFO, Last-In-First-Out) 의 구조로 동작.
- 각 스레드마다 개별적으로 할당.
* 프레임
- 각각의 메소드 호출은 스택에 새로운 프레임(Frame)이라 불리는 작은 단위로 할당.
- 각 프레임은 메소드 호출 정보와 지역 변수를 저장.
- 메소드가 호출될 때마다 새로운 프레임이 스택에 추가되고, 메소드 실행이 완료되면 해당 프레임이 스택에서 제거됨.
* PC 레지스터 (Program Counter Register)
CPU의 레지스터 중 하나로, 현재 실행 중인 명령어의 주소를 저장.
현재 실행중인 프로그램의 다음에 실행할 명령어의 주소를 차례로 저장하여 순차적 실행 지원.
* Native Method Stack
Java 언어가 아닌 다른언어(C, C++)를 실해하기 위한 스택.
* JVM
* 자바의 실행 구조
프로그램 -> JVM -> 운영체제 -> 하드웨어
* JVM (Java virtual Machine)
* Class Loader
자바 프로그램이 시작될 때 클래스 파일을 메모리 영역에 로드하는 역할. (동적으로 클래스를 로)
* Execution Engine (실행 엔진)
클래스 파일에 저장된 바이트 코드를 해석하고 실행하는 주체.
자원 관리, 스레드 관리, 예외 처리 등..
=> 인터프리터, JIT Compiler
* 참고블로그 *
4. synchronized 가 무엇인지.
다중 스레드 환경에서의 동시성 문제를 해결하기 위해 사용.
=> 스레드 동기화
* 스레드 동기화
하나의 공유자원에 여러 스레드가 동시에 접근할 때 발생하는 문제들을 해결하기 위한 기술.
1. 메서드 동기화
public synchronized void example(){
// 동기화가 필요한 코드
}
해당 메서드를 호출하는 동안에는 해당 객체에 대한 락(lock)을 얻어, 다른 스레드들이 해당 메서드를 동시에 호출하지 못함.
2. 블록 동기화
public void example(){
// 비동기적 코드
synchronized (lockObject){
// 동기화가 필요한 코드
}
// 비동기적 코드
}
객체 락을 직접 사용하여 특정 블록에 대해서만 동기화를 적용.
5. 개발자로서의 최종 목표가 있다면?
6. 싱글톤 패턴이 무엇인지?
소프트웨어 디자인 패턴 중 하나로, 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴.
- 생성자는 private으로 선언.
- 유일한 인스턴스를 저장할 private static 변수.
- 유일한 인스턴스를 반환하는 public static 메서드.
package Codingdojang;
public class Singleton {
// private static 변수
private static Singleton instance;
// private 생성자
private Singleton() {
}
// 유일한 인스턴스를 반환하는 메서드
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
7. vo, dto, dao가 무엇인지
1. VO (Value Object)
- 비즈니스 로직에서 값을 나타내기 위해 사용.
- 불변성(immutable)
- 읽기 전용 데이터를 표현하는 데 사용 (getter 만 사용)
2. DTO (Data Transfer Object)
- 계층 간에 데이터 전송을 위해 사용.
- 비즈니스 로직을 포함하지 않음.
- getter / setter 메소드만 사용.
* DTO는 인스턴스 개념, VO는 리터럴 개념으로 이해하기 *
3. DAO (Data Access Object)
- 데이터베이스나 다른 데이터 소스에 접근하기 위한 객체.
- 데이터의 CRUD (Create, Read, Update, Delete) 기능 수행.
- 비즈니스 로직을 포함하지 않으며, 데이터 엑세스에 중점을 둠.
8. 트랜잭션 설명
* Spring에서의 Transaction
2개 이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송.
이 과정에서 에러가 발생할 경우 자동으로 모든 과정을 원래대로 되돌려 놓는다.
- 코드 기반의 트랜잭션 (Programmatic Transaction)
- 선언적 트랜잭션 (Declarative Transaction)
=> <tx:advice>태그 / @Transactional 어노테이션
https://mangkyu.tistory.com/154
9. 트리, 힙설명
데이터를 구조화하고 저장하는데 사용되는 자료구조.
* 트리
- 계층적인 데이터를 표현하고 관리하기 위한 자료구조. (비선형, 1:n)
- 노드(Node)들의 집합으로 구성되며, 하나의 노드가 다수의 자식 노드를 가질 수 있음.
- 최상위 노드를 루트(Root)라고 하고, 각 노드의 자식 노드들은 서로 독립적인 서브트리(Subtree)를 형성.
- 이진 트리(Binary Tree), 이진 탐색 트리(Binary Search Tree), 정 이진 트리(Full Binary Tree)
포화 이진 트리(Perfect Binary Tree), 완전 이진 트리(Complete Binary Tree), 편향 이진 트리(Skewed Binary Tree)
* 힙
- 완전 이진 트리의 일종, 우선순위 큐를 구현하기 위해 사용.
- 최댓값/최솟값을 빠르게 찾기 위함.
- 힙 정렬(Heap Sort)과 같은 정렬 알고리즘에서 사용.
- 최대힙(Max Heap) : 부모노드 >= 자식노드 / 최소힙(Min Heap) : 부모노드 <= 자식노드
* 참고블로그 *
10. 동기, 비동기 방식 차이
프로그램이나 시스템에서의 작업 수행 방식
1. 동기식 (Synchronous)
작업이 시작되면 해당 작업이 완료될 떄까지 대기.
호출한 함수 또는 작업이 반환되기 전까지 제어 흐름이 차단(blocked)됨.
=> 순자적 실행, 간단&직관적 코드 / 대기시간 발생으로 효율성 떨어짐.
2. 비동기 (Asynchronous)
작업이 완료될 때까지 대기하지 않고, 다른 작업을 수행.
호출한 함수나 작업이 바로 반환되며, 결과는 나중에 이벤트나 콜백(callback)을 통해 처리.
=> 병렬적/병행적 실행으로 대기시간 최소화 / 복잡한 코드, 콜백 헬(callback hell)
https://elly-developer.notion.site/PYOJI-STUDY-8a1c010c8a0440f9ab1f22d620c2ffa7
'Study > 면접준비' 카테고리의 다른 글
[4주차] 면접질문정리 (스터디) (0) | 2024.01.31 |
---|---|
[2주차] 면접질문정리 (스터디) (0) | 2024.01.14 |
[1주차] 면접질문정리 (스터디) (0) | 2024.01.05 |