본문 바로가기
회고록 및 생각정리

면접 예상 질문(자바편)

by bloodFinger 2020. 1. 23.

객체 지형 프로그래밍이 뭐에요? 

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호 작용을 통해 

로직을 구성하는 프로그래밍 방식입니다.

추상화?

불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는것 이다.

(객체지향 관점에서 클래스를 정의하는 것.)

캡슐화

프로그램 코드에서 변수와 함수를 재활용 하기에는 분산되어 있기 때문에 재활용이 어려웠으나 캡슐화를 통해서

관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활하다.

(객체지향 관점에서 기능과 특성의 모음을 클래스라는 캡슐에 분류해서 넣는것)

다형성

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다.

오버라이딩, 오버로딩이 가능하다는 이야기 이다.

 

Java 언어의 장점은 무엇인가요?

-객체지향형 프로그래밍 언어, 플랫폼이 독립적이다 , 이식성이 좋다, 라이브러리 지향성, 보안성, 멀티 쓰레드, 가상머신, 바이트 코드...

객체지향 언어의 장점과 등장 배경은 무엇인가요?

-코드의 재활용성이 높아 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

-코드의 관리가 용이하여 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

-제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오 동작을 방지할 수 있습니다.

데이터 타입인 Primitive Type과 Reference Type에 대해 설명해주세요

-Primitive Type 은 변수에 값 자체를 저장하며 Reference Type은 메모리상에 객체가 있는 위치를 저장한다.

-Primitive Type의 종류는 boolean , byte, char, short, int , float, long, double 총 8가지 이며 Reference Type 종류는 클래스타입, 인터페이스 타입 , 배열타입, 열거타입(enum)이 있다

배열과 컬랙션의 차이점에 대해 설명해주세요

- 배열은 단 하나의 자료형만 저장이 가능, 컬렉션은 복수의 자료형을 저장할 수 있다.

- 배열은 고정된 크기이고, 컬렉션은 가변적 크기이다.

다형성은 무엇인가요?

- 여러가지 데이터를 다룰수 있는 특성을 뜻한다.

-부모클래스의 인스턴스를 이용하여 자손타입의 클래스를 다룬다거나, 메소드 오버로딩을 통하여 동일 이름의 메서드를 이용하여 다양한 형태의 파라미터를 다루는 것을 뜻한다.

멀티 쓰레드의 장단점은 무엇인가요?

- 두 가지 이상의 작업을 동시에 실행 할 수 있어 자원을 효율적으로 이용할 수 있으나 dead lock 및 동기화에 대한 철저한 검증이 필요하다.

자바에서 멀티쓰레드를 구현하는 방법에 대해서 설명해주세요

- Thread클래스를 상속하는 법, 단일 상속만 된다는 단점이 있습니다.

- Runable 인터페이스를 상속하는 법 , 다중상속이 된다는 장점이 있다.

Java 콜렉션의 대표 인터페이스는 무엇인가요?

-List : 순서가 있는 데이터의 집합으로 데이터의 중복을 허용합니다.

구현클래스 : ArrayList , LinkedList, Stack, Vector

-Set : 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.

 구현클래스 : HashSet , TreeSet

-Map : 키와 값의 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며, 키는 중복을 허용하지 않고 값은 중복을 허용한다.

 구현클래스 : HashMap, TreeMap, Hashtable, Properties

컬렉션에서 제네릭이 추가된 이유에 대해 설명해주세요

-컬렉션은 복수개의 데이터 타입 요소값이 저장되다 보니 원하는 자료형 타입 요소값을 추출하기 어렵다.

그러므로 지정한 자료형 타입 한가지만 저장라기 위해서 나온 것이 제네릭이다.

접근제어자의 종류와 특성에 대하여 설명해주세요

private - 같은 클래스 내에서만 접근이 가능

default - 같은 패키지 내에서만 접근이 가능

protected - 같은 패키지 내에서 , 다른 패키지의 자손클래스에서 접근이 가능

public - 접근 제한이 없다

Wrapper 클래스란 무엇인가요?

-primitive 타입으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원하는 클래스를 뜻하며

각 primitive 타입에 대응하는 Wrapper 클래스는 아래와 같다.

추상 클래스는 무엇인가요?

-목적 : 공통적인 기능을 하는 객체들의 추상화이다 

예를 들어보면 사자클래스, 원숭이 클래스, 고래 클래스 값은 구체적인 클래스가 존재하고, 추상클래스로 공통기능을 가진 동물 클래스를 만드는 것이 나온다. 동물 대신 포유류 클래스라고 할때 젖을 먹이는 공통적인 기능을 가지고 있고, 각 포유류에 속하는 동물인 사자 원숭이 고래 등에게는 중복해서 젖을먹다는 기능을 넣을 필요가 없다.

-클래스를 설계도에 비유한다면 추상클래스는 미완성 설계도에 비유 할 수 있다. 미완성 설계도란 단어의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라 단지 미완성 메서드(추상클래스)들 포함하고 있다는 의미 입니다. 미완성 설계도로 완성된 제품을 만들수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 왼성될 수 있다.

인페이스는 뭐에요?

-인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와는 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그외의 어떠한 요소도 허용하지 않는다. 추상클래스 부분적으로만 완성된 '미완성 설계도' 라고 한다면, 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져 있는 기본 설계도라고 할 수 있다. 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달린 다중상속 ,

즉 여러개의 인터페이스로부터 상속을 받는 것이 가능하다 

인터페이스를 왜 사용하나요?

-다형성을 구현하기 위해서 사용한다.

즉 같은 인터페이스를 구현하는 클래스들은 실행하는 객체가 인터페이스를 통하여 다른 객체를 사용할 수 있도록 하여 클래스간의 결합도를 낮추고 응집도를 높힐 수 있음. 예로 스프링에서는 DI 등에서 다형성을 구현하고 결합도를 낮추기 위해서 사용한다.

-양식 역할 : 규칙에 맞게 구현하도록 표준을 제시하고 클래스들이 메서드를 빠짐없이 재정의 하도록 한다.

자바의 GUI에서  Swing 과 AWT의 차이점에 대해 설명해주세요

AWT는 운영체제가 갖고 있는 각 컴포넌트를 이용한다. 즉 운영체제에 중속적인 GUI로서 운영체제 종류에 따라 화면에 출력되는 모양이 약간씩 다르다.

스윙은 운영체제가 갖고 있는 GUI를 사용하지 않고 자바 가상머신의 Swing 패키지를 직접 사용해 구현하다.

따라서 운영체제가 서로 달라도 동일한 화면을 출력하게 한다. 스윙은 AWT보다 세련되고 다양한 GUI를 제공해 주기 때문에 자바 어플 GUI개발에서는 AWT보다는 Swing을 더 많이 사용한다.

자바의 가비지컬렉터(Garbage Collection)에 대하여 말해 보세요.

가비지 컬렉터는 동적 할당된 메모리 영역 가운데 더 이상 사용할 수 없게 된 영역을 탐지하여 자동으로 해제하는 기법이다. 쓰레기 수집이 지원되는 환경에서는 프로그래머가 동적으로 할당한 메모리 영역의 전체를 완벽하게 관리할 필요가 없어진다. 이러한 작업은 CLR의 가비지 컬렉터라는 일종의 백그라운드 서비스를 통해 자동으로 이뤄진다.

컬렉션 List 인터페이스를 구현한 ArrayList에 대해 이야기 해주세요

-가변적인 크기를 가지고 있다 , 순차적으로 요소의 값을 저장한다, 중복요소 값을 허용한다

자바(JVM)의 메모리 구조에 대해서 이야기 해주세요

자바 구조

JVM은 크게 4가지(Class Loader , Execution Engine , Class Loader , Runtime Date Area)로 구분된다.

1.Runtime Date Area 

: JVM의 메모리 영역으로 자바 애플리케이션을 실행할때 사용되는 데이터들을 적재하는 영역이다.

이 영역은 메소드영역 , 힙영역, 스택영역, PC 레지스터 , native Method Stack 로 나눠진다

  • 메소드 영역 : static 변수 , Constant Pool  ..... 등등
  • 힙영역 : new 키워드로 생선된 객체와 배열이 생성되는 영역이다.
  • 스택영역 : 지역 변수, 파리미터, 리턴 값 , 연산에 사용되는 임시값 등이 생성되는 영역이다
  • PC 레지스터 : 스레드가 생성될때마다 생성되는 영역
  • Native method stack : 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

2.Class Loader 

자바에서 소스를 작성하면 main.java 파일 처럼 .java파일이 생선된다.

.java 소스를 자바컴파일러가 컴파일하면 main.class같은 main.class 같은(바이트코드)가 생성된다.

이렇게 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로

적재하는 역할을 Class Loader가 한다.(자바 어플리케이션이 실행중일때 이런 작업이 수행)

 

3.Execution Engine 

Class Loader에 의해 메모리에 적재된 클래스(바이트코드) 들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.

명령어를 하나 하나 실행하는 인터프리터(interpreter)방식이 있고 JIT(Just-In-Time) 컴파일러를 이용하는 방식이 있다.

JIT 컴파일러는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution Engine이 네이티브로 컴파일된 코드를

실행하는 것으로 성능을 높이는 방식이다.

 

4.Garbage Collector

Garbage Collertor는 Heap 메모리 영역에 생성(적재)된 객체들 중에 참조되지 않는 객체들을 탐색 후 제거 하는 역할을 한다.

GC가 역할을 하는 시간은 정확히 언제인지 알 수 없다. (참조가 없어지자마자 해제되는 것을 보장하지 않는다.)

또 다른 특징은 GC가 수행되는 동안 GC를 수행하는 쓰레드가 아닌 다른 모든 쓰레드가 일시정지된다.

특히 Full GC가 일어나서 수 초간 모든 쓰레드가 정지한다면 장애로 이어지는 치명적인 문제가 생길 수 있는 것이다.

(GC와 관련된 내용은 아래 Heap 영역 메모리를 설명할 때 자세히 보자) 

 

 

 

OSI 7 계층에 대해서 설명해주세요

구분 설명

사용자지원

지원계층

Application

사용자가 네트워크에 접근할수 있도록함  여러 종류의 분산정보 서비스 제공

Presentation 두 시스템 사시에서 교환되는 정보의 구문과 의미에 관련되어 변환, 압축 및 암호화를 담당
Ssession 통신하는 시스템들 사이의 상호작용을 설정, 유지하고 동기화함
전송층 Transport 전체 메시지의 프로세스-대-프로세스 전달

네트워크

지원계층

Network 패킷을 발신자로부터 여러 네트워크(링크)를 통해 목적지 까지 전달
Data Link 가공되지 않은 내용의 전송을 담당하는 물리층을 신뢰성있는 링크로 변환시켜 주고 노드-대-노드 전달함
Pysical 물리적 장치와 인터페이스가 전송을 위해 필요한 기능과 처리 절자를 규정

동기화(Synchronized)에 대하여 설명해 주세요

-하나의 자원을 여러 테스크가 사용하려 할 때에, 한 시점에서 하나의 테스크만이 사용할 수 있도록 하는 것

프로세스와 쓰레드의 차이점에 대해서 이야기 해주세요

-프로세스 : 실행중인 프로그램

-쓰레드 : 프러세스 내에서 실제 작업을 수행하는 단위, 모든 프로세스는 하나 이상의 쓰레드를 가지고 있다.

-다중 쓰레드 : 하나의 프로세스(프로그램)에 하나 이상의 쓰레드를 생성하여 실행

'회고록 및 생각정리' 카테고리의 다른 글

개발자 이직 회고록  (0) 2021.04.25
another 면접 후기 + advice  (0) 2020.02.20
면접 예상 질문(Spring 편)  (0) 2020.01.28
면접 예상 질문(JSP/Servelt편)  (0) 2020.01.27
면접 예상 질문(DB편)  (0) 2020.01.23