ProgrammingLogs

[공부] Java 프로그래밍 면접 이렇게 준비한다

밥먹고해요 2019. 3. 12. 06:12

4장. 기본 알고리즘


검색은 정렬된 상태를 전제로 수행한다.


Comparable 인터페이스는 자연스러운 순서로 정렬할 때, Comparator 인터페이스는 원하는 순서로 정렬할 때 사용한다.

String 클래스는 이미 Comparable 인터페이스를 구현하고 있다.


재귀 알고리즘에서는 StackOverflowException을 주의하라.


자바 표준 라이브러리의 몇몇 정렬 알고리즘은, 작은 리스트에는 삽입 정렬을, 일정 크기가 넘어가면 병합 정렬을 이용한다.


5장. 자료구조


System::arraycopy() : 배열의 복사/재할당에 사용되는 정적 메서드


ArrayList 클래스 생성시, 내부 배열의 기본 크기는 10이다.


ArrayList는 내부 배열의 크기가 자동으로 커지지만, 줄어들지는 않는다. 따라서, 크기 변화가 심한 자료를 다루는 경우, LinkedList가 공간활용 면에서는 더 효율적일 수 있다.


Queue 인터페이스의 확장이며, 자료구조의 양끝에 원소의 추가/삭제가 가능한, Deque의 발음은 "디큐"가 아니라 "덱"이다.


HashMap 객체 생성시 백분율을 의미하는 0과 1 사이의 값을 부하계수로 명시할 수 있는데, 테이블(hashtable인가??)은 이 부하계수를 다 채우게 되면 테이블 크기를 2배로 늘린다. 이때, 테이블의 크기가 조정되면서 모든 원소의 재배치 과정이 일어난다. hashCode() 메서드 값이 테이블의 인덱스에 맞게 재할당되기 때문이다.


TreeMap 클래스는 hashCode() 메서드를 전혀 사용하지 않으며, 균형 트리 구조로 구성하므로 검색, 삽입, 삭제에 대해 항상 O(log n)의 성능을 제공한다.


9장. jUnit으로 테스팅


익명 클래스는 JVM 메모리의 PermGen 공간을 차지한다.


단위 테스트의 정의

  • 하나의 기능 단위만 테스트
  • 주변에 어떠한 영향도 주지 않는 테스트
  • 다른 것을 변경하지 않는 상태로 실행되고 매번 동일한 결과를 제공하는 테스트
통합 테스트의 정의
  • 시스템의 몇몇 부분이 통합되었을 때의 동작 상태를 테스트

10장. 자바 가상머신 이해하기


가비지 컬렉션의 수집 대상 빈도 기준으로, 힙(heap)은 다음의 제너레이션(generation)이라는 메모리 영역으로 분류된다.
  1. Eden : 객체가 처음 생성되었을 때
  2. Survivor : 생성된 이후 수집 대상에서 제외되었을 때(살아남았다)
  3. Tenured : 이제 더 낮은 빈도의 수집 대상으로 간주됨
  4. Permanent(or PermGen) : 수집 대상에서 배제됨. 일반적으로 클래스 정의나 String 상수 같이 JVM에서 실행에 필요한 불변 상태가 포함됨
    1. 자바8에서는 Metaspace로 변경됨
    2. Groovy 같은 언어에서 지원하는, 동적 클래스 정의도 이 영역을 이용하므로, 남용은 지양
가비지 컬렉션 관련 용어
  • mark-and-sweep : 현재 동작하는 객체의 모든 경로를 대상으로, 실행중인 모든 코드에서 참조하는 객체 모두에 live로 표시. 이후 모든 객체들을 순회하며 live로 표시되지 않은 메모리 위치에 메모리 할당이 가능하게 설정
  • stop-the-world : 메모리 재배치를 위해 JVM의 모든 스레드를 정지시키는 가비지 컬렉터의 작업
  • compaction : 다른 제너레이션으로의 이동과 가능한 한 많은 여유 공간 확보를 위해 메모리에서 객체들을 옮기고 자주 접근되는 객체들을 묶어두는 등의 연산
JVM 초기 메모리 할당량(-Xms)은 물리 메모리의 1/64 혹은 최대 1G까지이며, 최대 메모리 할당량(-Xmx)은 1G 혹은 물리 메모리의 1/4까지

System.gc() 메서드를 실행한다고 해서, 가비지 컬렉션의 실행을 보장하지는 않는다. -> stop-the-world ㄷㄷㄷ

Object.finalize() 메서드
  • 가비지 컬렉션 수집시 최우선적으로 호출됨
  • 호출되었다는 것은, 가비지 컬렉션 대상으로 당첨되었다는 의미
  • DB, 파일 시스템, 네트워크 인터페이스 등의 외부 자원에 대한 해제는 finalize()로 하지 말고, 명시적으로 처리 바람
    • 자바7에 도입된 try-with-resource 구조를 사용토록
(p257부터 계속..)