이번에 괜찮은 블로그 하나를 medium이 추천해줬습니다.
https://ds73306.medium.com/must-know-java-interview-questions-7c7208a10669
인터뷰를 떠나서 내 지식을 평가하는데 괜찮을 것 같고 모르는 부분들은 공부하면 상당히 도움이 될 것 같아 정리합니다.
피드백이나 문의는 댓글로 부탁드립니다.
Q1. JDK, JRE, JVM에 대해 각각 설명하시오.
A :
JRE = Java Runtime Environmnet 의 약자로 자바 프로그램을 실행하기 위한 패키지이다. JVM과 핵심 라이브러리들이 들어있다. java 11부터는 JRE를 별도로 배포하지 않고 JDK만 나온다.
JDK = Java Development Kit의 약자로 자바 프로그램을 개발하기 위한 패키지이다. JRE를 포함하고 있고 개발툴이다. javac, jar등을 포함하고 있다.
JVM = Java Virtual Machine의 약자로 .java파일에서 컴파일된 .class파일(바이트 코드)을 수행하고 JAVA가 실제 동작하는 가상환경이다. JVM을 올릴 수 있는 곳이면 어디든 쓸 수 있다는 의미로 자바는 WORA(Write Once Read Anywhere)를 모토로 하고있다.
Q2. 추상화와 캡슐화에 대해 설명하시오.
A :
캡슐화는 속성과 기능을 하나의 클래스로 묶은 후 이때 외부로 필요한 정보를 제외하고 숨기는 행위이다.
추상화는 기능과 구현을 분리하는 행위이다. 세부 내용을 알지 못해도 쓸 수 있게 하는 것이다.
Q3. 집합, 연관, 상속에 대해 설명하시오.
A:
집합은 한 객체가 다른 객체와 has - a 관계를 가지는 경우이다. 이 객체는 여러 곳에 has - a 관계를 가질 수 있으며 다른 곳에서 생명주기가 끝나도 소멸하지 않는다.
연관은 잘 모르겠다... 집합과 비슷한 것 같은데...
상속은 부모로부터 기능을 물려받는 것이다.
Q4. 자바에서 try-with-resources문에 대해 설명하시오.
A : JAVA7부터 도입된 것으로 알고있다. 기존에 close나 dispose를 해줘야하는 객체들에 대해 간혹 까먹는 경우가 있는데 try문에서 내부적으로 선언한 후 해당 문이 종료될 때 자동으로 종료, 소멸되게 해준다.
Q5. JAVA8의 차별점에 대해 설명하시오.
A : 본격적으로 함수형 프로그래밍의 서막을 연 버전이다. JAVA7에서는 람다만 도입되었지만 JAVA8부터 Stream이 도입되었다. 또한 JVM에서는 Perm영역이 사라지고 Metaspace영역이 생겼다.
Q6. 자바에서 String이 불변객체인 이유는?
A : 우선 메모리 절약을 할 수 있다. String Constant Pool에서 관리가 되어 같은 값을 가지는 것들을 묶을 수 있다. 만약 String이 가변객체라는 가정으로 A,B가 같은 메모리를 참조하고 있을 때 값이 변경되면 A와B 모두 변경이 된다.
또한 멀티 쓰레딩 환경에서도 안정성을 보장하게 된다.
값이 변하지 않기 때문에 Hashing에서도 항상 같은 값을 보장할 수 있다.
Q7. JVM메모리 구조에 대해 설명하시오.
A : 아 이건 좀 복잡한데,,https://developer-youn.tistory.com/38
전에 정리해둔거 한번더 보자.
Q8. Garbage Collection은 무엇인가?
A : 이것도 풀어 쓰려면 너무 풀어 쓸 수 있다. 이전에 정리한거 참고하자. https://developer-youn.tistory.com/50
Q9. exception이란 무엇이고 exception handling이란 무엇인가?
A : 말 그대로 예외이다. 프로그램을 수행하는 중 예외가 발생하면 에러가 발생하게 된다. 에러가 발생했을 때 적절한 조치를 취해주지 않으면 프로그램은 멈추게 되는데 멈추지 않고 예외를 다루는 것을 exception handling이라고 한다. 자바에서는 try문에서 수행한 후 catch문에서 발생한 예외에 대해 handling을 한다. 그 후 선택사항으로 finally문을 사용하여 반드시 해야할 부분에 대해 기술한다.
Q10. Autoboxing과 Unboxing에 대해 설명하시오.
A : primitive type을 wrapper type으로 변환해주는 과정을 Autoboxing이라고 한다. int를 Integer로 변환시키거나 char을 Character으로 변환시키는 것과 같은 행위가 여기에 포함된다.
Unboxing은 그와 반대로 wrapper type을 primitive type으로 변환시켜주는 과정이다.
'JAVA' 카테고리의 다른 글
자바 인터뷰 질문 - 심화(1) (0) | 2021.07.16 |
---|---|
자바 인터뷰 질문 - 기본기 (2) (0) | 2021.07.03 |
JAVA - Garbage Collection (0) | 2021.06.17 |
[JAVA] new와 ""의 차이 / string constant pool (0) | 2021.06.06 |
접근 제어자 (0) | 2021.05.05 |