System.out.println()은 IO-operation이므로 System.out.println 작업이 종료될때가지 프로그램은 대기상태가 된다. 대안으로는 logging framework 있다.
logging framework는 logging 레벨 조정, 출력 형태(console, file등)을 설정할 수 있다.
클래스 로더 로딩 과정
❓ 와일드카드의 한계와 함정에 대해 설명해주세요. 와일드 카드를 사용하는 제네릭 코드에서 컴파일 타임에는 성공하고 런타임에 예상치 못한 오류가 발생하는 경우가 있나요? 그러한 경우를 예시와 함께 설명해주세요.
와일드 카드 사용 시 매개변수로 들어오는 경우 타입이 정해진다.
아래 예제는 컴파일 시 오류가 발생한다. List<?>은 다양한 타입의 리스트를 받을 수 있지만, 내부의 요소의 구체적인 타입에 대해 알 수 없다.
static void unsafeAdd(List<?> l1, List<?> l2) {
l1.add(l2.get(0));
}
다이아몬드 연산자를 사용한 초기화 선언
java8전에는 new ArrayList()과 같이 생성자 호출 시 타입을 명시해야했지만, java8이후부터는 다이아몬드 연산자로만 선언이 가능하다.
List<String> list = new ArrayList<>();
스트림을 통한 초기화
List<String> fruits = Stream.of("apple","durian","orange").collect(Collectors.toList());
public static <E> boolean containsElement(E [] elements, E element) {
for (E e : elements) {
if(e.equals(element)) {
return true;
}
}
return false;
}
홀짝 구하기(postgreSQL, MySQL, Oracle)
select *
from Cinema
where description <> 'boring'
and mod(id,2) != 0
order by rating desc
mod(column_name, 2)== 0 일 경우 짝수 조건을 사용할 수 있다.
https://tableplus.com/blog/2019/09/select-rows-odd-even-value.html
완주하지 못한 선수(hash)
def solution(participant, completion):
dict = {}
for i in participant:
if i in dict:
dict[i] = dict[i] + 1
else:
dict[i] = 1
for j in completion:
dict[j] = dict[j] - 1
for k in dict:
if dict[k] != 0:
return k
이미 1의 값을 가진 요소는 삭제해서 정답 리턴 시 첫번째 요소만 리턴할 수 있다.
def solution(participant, completion):
dict = {}
for i in participant:
if i in dict:
dict[i] = dict[i] + 1
else:
dict[i] = 1
for j in completion:
if dict[j] == 1:
del(dict[j])
else:
dict[j] = dict[j] -1
answer = list(dict.keys())[0]
return answer
딕셔너리 요소를 정렬하여 같이 않을 경우 요소를 리턴하는 방식
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant) -1]
[참고]
https://stackoverflow.com/questions/8601831/do-not-use-system-out-println-in-server-side-code
https://docs.oracle.com/javase/tutorial/java/generics/erasure.html