# 면접 CS 정리 Day 12 (풀스택 / Java·Spring·React)

면접 CS 정리 Day 12 (풀스택 / Java·Spring·React)

Q1. 스택 vs 힙

문제
JVM에서 스택이랑 힙 차이? 지역 변수 / 객체는 어디에?

  • 스택: 지역 변수, 메서드 호출 정보. 스레드마다 있음
  • : new로 만든 객체. GC가 회수

User u = new User() → 참조 u는 스택, 객체는 힙.
자료구조 LIFO 스택이랑 헷갈리지 말 것.

Q2. int vs Integer

문제
차이 한 줄. Integer가 null일 때 언박싱하면?

  • int: 기본형, null 불가, 기본값 0
  • Integer: 래퍼 객체, null 가능

null Integer를 int로 언박싱하면 NullPointerException.

Q3. useMemo vs useCallback

문제
각각 무엇을 캐시하나?

  • useMemo: 계산 결과(값) 캐시
  • useCallback: 함수 참조 캐시

컴포넌트 재사용은 React.memo, API 캐시는 React Query 쪽.
useCallback(fn, deps)useMemo(() => fn, deps)

Q4. 데드락

문제
데드락이 뭔지 + 발생 조건 하나.


서로가 가진 락을 기다리며 아무도 못 끝나는 상태.
동시 접근만으로 생기진 않고, 락을 엇갈려 잡을 때 난다.

예방: 락 순서를 같게 (항상 작은 id부터).

Q5. TCP 3-way handshake

문제
뭐 하는 과정인지. SYN / ? / ?


TCP 연결을 양쪽으로 맞추는 과정.

  1. 클라이언트 → 서버: SYN
  2. 서버 → 클라이언트: SYN+ACK
  3. 클라이언트 → 서버: ACK

Q6. @Transactional(readOnly = true)

문제
조회에 붙이는 이유? 쓰기 메서드에 붙이면?


조회 시 플러시/더티체킹을 줄이고 DB에 읽기 힌트를 준다.
트랜잭션이 안 먹는 게 아니라, 읽기 전용이라 쓰기가 실패하거나 반영이 안 될 수 있다.

Q7. Dirty / Non-repeatable / Phantom

문제
한 줄씩 + 막는 최소 격리수준.

  • Dirty Read: 커밋 전 읽기 → READ COMMITTED
  • Non-repeatable Read: 같은 행 값 변경 → REPEATABLE READ
  • Phantom Read: 행이 늘거나 줄어듦 → SERIALIZABLE

오늘 한 줄 암기

  1. 지역변수·참조 = 스택 / 객체 = 힙
  2. Integer null 언박싱 = NPE
  3. useMemo = 값 / useCallback = 함수
  4. 3-way = SYN → SYN+ACK → ACK
  5. Phantom = SERIALIZABLE

다음 목표

  • useMemo를 “컴포넌트 캐시”, useCallback을 “API 캐시”로 말하지 않기
  • 데드락 = 동시 접근이 아니라 락 교차 대기