면접 CS 정리 Day 10 (풀스택 / Java·Spring·React)
Q1. 오버로딩 vs 오버라이딩
문제
오버로딩이랑 오버라이딩 차이? 컴파일/런타임 중 언제 결정되나?
답
- 오버로딩: 같은 이름, 파라미터(개수/타입/순서)가 다름 → 컴파일 때 결정
- 오버라이딩: 부모 메서드를 재정의 → 런타임에 실제 객체 타입 기준 (동적 바인딩)
반환 타입만 다르게는 오버로딩이 안 된다.
Q2. REQUIRED vs REQUIRES_NEW
문제REQUIRED(기본)랑 REQUIRES_NEW 차이? 트랜잭션이 이미 있을 때.
답
- REQUIRED: 있으면 참여, 없으면 새로 시작
- REQUIRES_NEW: 항상 새 트랜잭션. 기존은 잠시 보류. 커밋/롤백이 바깥과 따로
있으면 쓰고 없으면 안 쓴다는 SUPPORTS다. REQUIRED가 아니다.
Q3. Dirty / Non-repeatable / Phantom
문제
세 현상 한 줄씩 + 막는 최소 격리수준.
답
- Dirty Read: 남의 커밋 전 데이터를 읽음 →
READ COMMITTED - Non-repeatable Read: 같은 행을 다시 읽었더니 값이 바뀜 →
REPEATABLE READ - Phantom Read: 같은 조건 재조회 시 행이 늘거나 줄어듦 →
SERIALIZABLE
Dirty = 미확정 값 / Non-repeatable = 그 행의 값 / Phantom = 행 개수.
Q4. @RequestParam / @PathVariable / @RequestBody
문제
각각 어디서 값을 받나?
답
@RequestParam: 쿼리스트링 (?type=admin)@PathVariable: URL 경로 (/users/3)@RequestBody: JSON 본문 (보통 DTO)
GET /users/3?type=admin → PathVariable=3, RequestParam=type.
Q5. useState vs useRef
문제
값 변경 시 리렌더 여부로 차이.
답
useState: 값 변경 시 리렌더useRef:.current가 바뀌어도 리렌더 안 함
화면 상태 = state, DOM 접근·렌더와 무관한 값 = ref.
Q6. 비관적 락 vs 낙관적 락
문제
차이 + 각각 언제 쓰는지.
답
- 비관적: 조회 시 미리 잠금 (
SELECT … FOR UPDATE). 충돌이 잦을 때 - 낙관적: 저장 시 버전으로 충돌 감지. 충돌이 드물 때
비관적 = 먼저 잡고 수정 / 낙관적 = 일단 수정하고 버전 검증.
Q7. @Transactional + this 호출
문제
같은 클래스에서 this.xxx()로 호출하면 왜 트랜잭션이 안 먹을 수 있나?
답
트랜잭션은 프록시가 호출을 가로챌 때 적용된다.this.xxx()는 프록시를 안 지나서 @Transactional이 적용되지 않을 수 있다.
해결: 트랜잭션 메서드를 다른 Bean으로 나눠 주입받아 호출.
오늘 한 줄 암기
- 오버로딩 = 컴파일 / 오버라이딩 = 런타임
- REQUIRED = 있으면 참여 / REQUIRES_NEW = 항상 새로
- Dirty=미커밋 / Non-repeatable=값변경 / Phantom=행수변경
- useState 리렌더 O / useRef 리렌더 X
this호출 = 프록시 우회 → 트랜잭션 안 먹을 수 있음
다음 목표
- REQUIRED를 SUPPORTS랑 헷갈리지 않기
- Dirty / Non-repeatable / Phantom을 격리수준 이름까지 말하기
'기타 > CS 질문' 카테고리의 다른 글
| # 면접 CS 정리 Day 9 (풀스택 / Java·Spring·React) (0) | 2026.08.13 |
|---|---|
| # 면접 CS 정리 Day 8 (풀스택 / Java·Spring·React) (0) | 2026.08.12 |
| # 면접 CS 정리 Day 7 (풀스택 / Java·Spring·React) (0) | 2026.08.12 |
| # 면접 CS 정리 Day 6 (풀스택 / Java·Spring·React) (0) | 2026.08.10 |
| # 면접 CS 정리 Day 5 (풀스택 / Java·Spring·React) (1) | 2026.08.05 |
