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

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

Q1. ConcurrentModificationException

문제
언제 나나? 단일 스레드 for-each 중 remove도?

답
이터레이터(for-each) 순회 중 컬렉션 구조가 바뀌면 발생.
한 스레드라도 ArrayList for-each 중 add/remove하면 날 수 있다 (fail-fast).

삭제: Iterator.remove() / removeIf.

Q2. @ControllerAdvice vs @RestControllerAdvice

문제
차이? API JSON 예외는?

답
@RestControllerAdvice = @ControllerAdvice + @ResponseBody
→ 반환이 JSON 등 응답 본문. API는 보통 @RestControllerAdvice.

@Controller vs @RestController와 같은 관계.

Q3. 카디널리티와 인덱스

문제
카디널리티가 낮으면 인덱스가 약한 이유? (성별, Y/N)

답
서로 다른 값이 적어 인덱스로 걸러지는 행이 적음(선택도 낮음).
풀스캔이 나을 수도 있다. PK가 아니라 값의 희소성 문제.

Q4. SameSite 쿠키

문제
Lax / Strict / None. CSRF 완화? None일 때?

답

  • Strict / Lax: 크로스 사이트 전송 제한 → CSRF 완화
  • None: 크로스 사이트 허용 → Secure(HTTPS) 필수

Q5. Lifting State Up vs Context

문제
언제 부모로, 언제 Context?

답
가까운 형제 공유 → Lifting State Up.
깊게 props만 넘기는 drilling → Context(또는 상태관리 라이브러리).

Q6. 커버링 인덱스 (복습)

문제
전체 컬럼 vs 쿼리 필요 컬럼.

답
그 쿼리에 필요한 컬럼이 인덱스에 있으면 됨. 테이블 전체 인덱스 아님.
(3번째 시도 합격)

Q7. Integer 캐시 (복습)

문제
100 vs 200 == 차이.

답
캐시 범위 -128~127. 안이면 같은 객체 가능, 밖(200)은 새 객체 → == false.

오늘 한 줄 암기

  1. CME = 순회 중 수정 (단일 스레드도)
  2. API 예외 = @RestControllerAdvice
  3. 낮은 카디널리티 = 인덱스 이득 적음
  4. SameSite Lax/Strict = CSRF 완화 / None+Secure
  5. 커버링 = 쿼리 필요 컬럼이 인덱스에

다음 목표

  • 커버링·Integer 캐시 범위 유지하기
  • 카디널리티를 “PK 여부”가 아니라 선택도로 말하기