본문 바로가기

Study/면접준비

[3주차] 면접질문정리 (스터디)

 

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

 

[Spring] 트랜잭션에 대한 이해와 Spring이 제공하는 Transaction(트랜잭션) 핵심 기술 - (1/3)

1. Transaction(트랜잭션)에 대한 이해 [ 트랜잭션(Transaction)의 필요성 ] 만약 데이터베이스의 데이터를 수정하는 도중에 예외가 발생된다면 어떻게 해야 할까? DB의 데이터들은 수정이 되기 전의 상

mangkyu.tistory.com

 

 

 

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

 

PYOJI STUDY | Notion

표해현·최지은 CS지식 및 면접 대비 구술 스터디

elly-developer.notion.site