String Literal
https://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal
String a = new String("abc"); 는 Heap 내의 일반 객체를 생성하고, 그 객체의 Reference 를 가지게 되는 것입니다 .
그리고 String b = "abc"; 문장은 Heap 내의 String constant pool 에 저장하거나, 이미 존재하는 문자열이라면 해당 인스턴스를 여러 Reference 가 참조한다고 할 수 있습니다.
특별한 이유가 없다면 String 문자열을 사용하는 것이 읽기 쉽고 컴파일러가 코드를 최적화할 수 있는 기회를 제공합니다.
Annotation 생성 방법 (관점프로그래밍)
https://medium.com/@ggikko/java-%EC%BB%A4%EC%8A%A4%ED%85%80-annotation-436253f395ad
http://i5on9i.blogspot.kr/2014/06/annotation.html
어노테이션의 본질적인 목적은 소스 코드에 메타데이터를 표현하는 것입니다.
단순히 부가적인 표현 뿐만 아니라 리플렉션을 이용하면 어노테이션 지정만으로 원하는 클래스를 주입 등이 가능합니다
프로세스와 스레드의 차이
프로세스는 운영체제로 부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
프로세스는 자신만의 고유 공간과 자원을 할당 받아 사용하지만 그에 반해 스레드는 다른 스레드와 공간과 자원을 공유하여 사용하는 차이가 있습니다.
ArrayList vs LinkedList
http://stunstun.tistory.com/193
ArrayList - 데이터 검색에 유리하며, 추가/삭제 시에는 성능을 고려해야함
LinkedList - ArrayList 에 비해 데이터의 추가/삭제에 유리하지만 검색 시에는 성능을 고려해야함
Quick Sort
http://hahahoho5915.tistory.com/9
https://github.com/minsuk-heo/java_coding_interview/blob/master/src/Sorts/MyQuickSort.java
Iterator 를 쓰지 않고 직접 참조 시 문제점
http://kimsunzun.tistory.com/65
내부가 노출되고 자료 구조 마다 순환하는 방식이 달라진다.
DP란?
http://huiyu.tistory.com/entry/%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95Dynamic-Programming
분할 정복과 같은 접근 방식을 가지고 있지만, 다른 점은
부분 문제가 여러 번 사용될 경우 중복 계산이 아닌 한번만 계산하고 저장하여 재활용하는 방법이다.
(캐시와 유사)
https://github.com/BearCola/java_interview/commit/cff2390c7e6b1ce5be78fe9eee2631e40c48691d
제네릭이란?
https://opentutorials.org/module/516/6237
클래스를 정의할 때에는 데이터 타입을 확정하지 않고, 인스턴스를 생성할 때 데이터 타입을 지정하는 기능을 제네릭이라고 한다.
Singleton 동기화
http://asfirstalways.tistory.com/335
https://stackoverflow.com/questions/11165852/java-singleton-and-synchronization
중첩 클래스를 이용한 Holder 를 사용하는 방법.
getInstance 가 호출되기 전까지는 Singleton 인스턴스가 생성되지 않고, getInstance 가 호출되는 시점에 SingletonHolder가 참조되고 그 때 Singleton 객체가 생성된다. 지연된 초기화를 사용하기 때문에 메모리 점유율 면에서 유리하고 Synchronized 키워드를 사용하지 않기 때문에 성능 문제도 보이지 않는다. VM 이 클래스를 초기화하기 위한 필드 접근은 동기화하기 때문에 동기화 검사도 필요가 없다.
Heap Data Stack 영역
- 코드 영역 : 실제 프로그램 코드가 적재되는 영역
- 데이터 영역 : 프로그램이 구동되는 동안 항상 접근 가능한 변수가 저장되는 영역이며 전역 변수, 정적 변 수를 할당하기 위한 공간
- 스택 영역 : 함수 내의 정의된 지역 변수가 저장되는 영역
- 힙 영역 : 위에서 관리되지 않는 다른 형태의 데이터를 저장하기 위한 공간. 보통 동적 할당이 해당한다.
Lambda 식이란?
"식별자 없이 실행 가능한 함수 표현식"
기존
new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World."); } }).start();
람다
new Thread(()->{ System.out.println("Hello World."); }).start();