Computer Science/Spring & Java

java 면접 질문 리스트2

콩순이냉장고 2022. 8. 7. 20:03
  • Managed - Unmanaged 언어의 차이는 무엇이고 어떤 장, 단점이 있나요?

'Managed Language'란 런타임 환경에서 메모리를 관리해주는 공통점에 방점을 두어 보통 GC(Garbage Collector)를 쓰는 언어들을 말한다

Managed 언어의 반대 개념으로 특정 런타임 환경의 관리를 받지 않는 모든 언어를 뜻함

 

Managed Language

장점

  • 런타임 환경에서 다양한 도움, 특히 메모리 관리를 자동으로 해주기 때문에 메모리 누수의 문제에서 보다 자유롭다.
  • 코드가 런타임환경에 의존하므로 하드웨어나 OS에 종속되지 않는다.

단점

  • 중간 매개체를 두는 만큼 성능적인 부분에서 손실이 날 수 밖에 없다.
  • GC에 의해 의도치 않은 오작동이 발생할 위험성이 존재한다.

 

Unmanaged Language

장단점

Unmanaged Language에 비해 상대적으로 빠르며, 메모리의 할당과 해제를 사용자의 의도에 따라 세밀하게 조정할수 있으므로, 프로그래밍 자유도가 높고 최적화가 용이하다.

하지만 프로그래머가 실수할 경우 Memory Leak이 발생할 수 있다.

 

 

 

자바 접근제어자 4가지에대해 설명해주세요

 

자바에선 4가지 접근제어자가 제공

private ,public ,default ,protected

 

private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없습니다.

public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있습니다.

default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있습니다.

protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됩니다.

 

jvm 메모리구조에 대해 설명해주세요

 

메서드 영역 (Method Area)

모든 쓰레드가 공유하는 메모리 영역입니다. 메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관합니다.

 

힙 영역 (Heap Area)

1. new 키워드로 생성된 객체와 배열이 생성되는 영역입니다. 

2. 주기적으로 GC가 제거하는 영역입니다.

스택 영역 (Stack Area)

지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역입니다.

PC 레지스터 (PC Register)

Thread가 생성될 때마다 생성되는 영역으로 프로그램 카운터, 즉 현재 스레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역입니다.

네이티브 메서드 스택 (Native Method Stack)

1. 자바 이외의 언어(C, C++, 어셈블리 등)로 작성된 네이티브 코드를 실행할 때 사용되는 메모리 영역으로 일반적인 C 스택을 사용합니다.

2. 보통 C/C++ 등의 코드를 수행하기 위한 스택을 말하며 (JNI) 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것이 자바 인터프리터(interpreter)입니다.

 

 

Java 8 버전에 추가된 중요 기능들에 대하여서 설명해주세요.

  • 람다 표현식(lambda expression) : 함수형 프로그래밍
  • 스트림 API(stream API) : 데이터 추상화
  • java.time 패키지 : Joda-Time을 이용한 새로운 날짜와 시간 API.
  • 나즈혼(Nashorn) : 자바스크립트 새로운 엔진

 

Java 는 Call by reference 인가? Call by value 인가?

자바는 결론적으론 Call by value로 이루어짐 

*java에서 primitive type 변수는 call by value로 전달한다.

 object를 파라미터로 던질 경우 object의 속성값은 메소드 내에서 변경가능하지만. object 자체를 변경 할 순 없다. (다른 주소값으로 변경할 수 없다)

 

 

 

Java Stream API의 특징은 무엇이 있나요?

 

  • 원본의 데이터를 변경하지 않는다.
  • 일회용이다.
  • 내부 반복으로 작업을 처리한다.