이전에 작성했던 https://developer-youn.tistory.com/51 에 있던 Advanced 질문들을 공부하면서 간단하게나마 답변을 달아보았습니다.
역시 심화과정이라 그런지 확실하게 모르거나 애매한 부분들이 많아 10개의 항목을 간단하게 적는 것도 시간이 적잖게 들어갔습니다.
질문이나 피드백은 댓글로 부탁드립니다!
Q1. 직렬화(Serialize)란 무엇인가?
A. 자바 시스템에서 사용하는, JVM에 올려진 객체, 데이터를 외부에서 사용할 수 있도록 byte 형태로 데이터를 변환하는 행위입니다.
Q2. Concurrent HashMap이란?
A. HashMap은 thread-safe하지 않지만 ConcurrentHashMap은 thread-safe 합니다.
Q3. ArrayList와 LinkedList의 차이는?
A. ArrayList는 내부 코드에서 배열로 데이터를 관리하며 기본 사이즈를 초과할 경우 용량을 늘립니다.
중간에 데이터가 삭제되는 경우 모든 데이터를 복사해서 인덱스를 조정해야 하기 때문에 이 부분에 대해서는 성능이 좋지 않습니다.
LinkedList는 내부적으로는 인덱스가 따로 존재하지 않습니다. 각 node를 따라가며 정해진 만큼 이동하며 값을 획득합니다. 데이터 검색에서는 ArrayList보다 빠르지 않지만 중간 데이터를 삭제하는 경우 노드를 지우고 다음 노드를 보고 있는 link만 바꿔주면 되기 때문에 ArrayList보다 유리합니다.
Q4. Comparator와 Comparable의 차이는?
A. 둘 다 Interface입니다.
Comparator는 compare(T o1, T o2)메서드를 재정의 해야 합니다.
Comparable은 compareTo(T o)메서드를 재정의 해야 합니다.
두 파라미터의 개수가 다른 점은 compare는 어떤 객체들을 비교할지 고를 수 있지만 compareTo는 자기 자신과 다른 객체만 비교할 수 있습니다.
Q5. ArrayList와 HashMap의 초기 사이즈는?
A. java8 기준으로 달라집니다. java8 이후에는 각각 0, 16이지만 java8 이전에는 10, 16입니다.
Q6. Marker Interfaces와 Functional Interfaces는 무엇인가?
A. Marker Interface란 Interface내에 아무 메서드, 데이터가 없는 빈 Interface입니다. 이 Interface의 목적은 다른 클래스나 함수에서 타입을 체크하여 특정 행위를 하기 위함입니다. 대표적인 Interface는 Serializable이 있습니다.
Functional Interface는 단 1개의 추상 메서드를 가지고 있는 Interface입니다. 람다에서 사용합니다. 대표적으로는 Runnable, Supplier 등이 있습니다.
Q7. 자바에서 Classloading과 classloader의 type에 대해 설명하시오.
A. Classloading 자바에서 Classloader가. class파일의 위치를 찾아 JVM위에 적재하는 과정입니다.
크게 3가지의 classloader가 있습니다.
Bootstrap classloader는 JAVA의 환경변수에서 /jre/lib/rt.jar에 있는 JVM을 실행시키기 위한 핵심 클래스들을 로드합니다.
Extension classloader는 JAVA의 환경변수에서 /jre/lib/ext 경로에 있는 자바의 확장 클래스들을 로드합니다.
Application class loader는 JAVA의 Classpath에 있는 클래스 파일이나 Jar에 있는 클래스들을 로드합니다.
Q8. Java에서 제네릭이란?
A. 제네릭이란 데이터 타입을 지정, 제한하기 위해 사용된다. <> 안에 원하는 데이터 타입을 넣어서 사용하며 대표적인 사용 예로 Collection에서 데이터 타입을 지정하는 경우가 있다.
Q9. Exception을 직접 만들어 쓰는 방법에 대해 설명하시오.
A. Exception 클래스를 상속받아서 만듭니다. 에러 코드와 메시지 등을 정의할 수 있습니다. 만들어진 Custom Exception은 필요한 함수에서 throw로 올리고 사용 부에서 catch를 하면 됩니다.
Q10. Covariant return type이란?
A. 공변 반환 타입이라 하며 부모 클래스에서 정의한 함수를 오버 라이딩하여 반환 타입을 자식 클래스로 바꾸는 것입니다.
Reference:
[1] : https://pplenty.tistory.com/17
[2] : https://st-lab.tistory.com/243
[3] : https://www.javapedia.net/Collections/2599
[4] : https://junghyungil.tistory.com/m/120
[5] : https://codechacha.com/ko/java8-functional-interface/
[6] : https://leeyh0216.github.io/posts/java_class_loader/
[7] : https://engkimbs.tistory.com/606
[8] : https://devbox.tistory.com/entry/Java-%EC%98%88%EC%99%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0
'JAVA' 카테고리의 다른 글
자바 조금 더 잘 사용해보자 (1) (0) | 2022.03.03 |
---|---|
짤막한 개발 메모 - watchdog (0) | 2021.11.23 |
자바 인터뷰 질문 - 기본기 (2) (0) | 2021.07.03 |
자바 인터뷰 질문 - 기본기 (1) (0) | 2021.06.17 |
JAVA - Garbage Collection (0) | 2021.06.17 |