본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

Personal/Employment

신입개발자 면접질문 - 자바

Java란?
객체지향 프로그래밍언어로 JVM자바가상머신 위에서 작동해 운영체제에 독립적입니다. 상대적으로 상속이나 타입에 엄격하여 제약이 있습니다.

JVM의역할?
JVM은 스택기반으로 JAVA Code를 운영체제에 맞게 해석해줍니다.

Java의 컴파일 과정은?
작성한 자바파일을 빌드하고 컴파일러를 통해 바이트코드(.class)가 생성되어 Class Loader를 통해 JVM 메모리 내로 로드되어 기계어로 해석됩니다.

GC가비지 컬렉션이란?
JVM의 메모리 관리기법중 하나로 필요없어진 메모리 영역을 회수하는 기법

자바의 메모리영역은?
자바의 메모리 영역은 크게 Method, Stack, Heap으로 구분됩니다.
Method에는 클래스가 로딩될때 전역변수, static변수를 저장하고
Stack은 컴파일시 지역변수와 매개변수의 데이터값이 저장되어 새로운 데이터가 할당되면 이전데이터는 지워집니다.
Heap은 런타임시 new키워드로 생성되는 객체, 배열등이 저장되 가비지 컬렉션에 의해 메모리가 관리됩니다.

Java의 원시타입의 종류와 각 바이트?
정수형 byte, short, int, long으로 각각 1, 2, 4, 8바이트,
실수형 float double으로 각각 4, 8
문자형 char 2, 
논리형 boolean 1 바이트를 차지합니다.

오버라이딩과 오버로딩은?
오버라이딩은 상위클래스를 하위클래스에서 재정의하는것, 
오버로딩은 매개변수의 개수나 타입을 다르게 같은 이름의 메소드를 여러개 정의하는 것을 말합니다.

객체지향프로그래밍이란?
실생활의 모든것을 객체하고 말하며, 
프로그래밍 역할에 필요한 객체를 각각 만들어 객체들간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 

try-with-resources란?
try-with-resources란 try-catch-finally의 문제점을 보완하여 try블록이 끝나면 자동으로 자원을 해제해줍니다.

불변객체란?
final과 같은 객체생성 이후 상태가 변하지 않는 객체를 말합니다. 

참조타입은?
참조타입은 객체의 주소를 저장하는 변수로, 객체/배열/list등을 참조할 수 있습니다.

추상클래스와 인터페이스의 차이?
추상 클래스는 클래스내 추상메소드가 하나이상 포함되어있거나 abstract로 정의된경우를 말하고, 
인터페이스는 모든 메소드가 추상 메소드로만 이루어져있는것을 말합니다.
추상클래스는 상속받는 클래스들이 공통적인 로직을 추상화시키게하고, 인터페이스는 모든 클래스에 대해 특정한 메소드가 반드시 존재하도록 강제합니다.

싱글톤패턴이란?
단 하나의 인스턴스를 생성해 사용하는 디자인패턴입니다.
예로는 spring bean 기본값이 있습니다. 

클래스와 객체란?
클래스는 객체를 만들어낸는 틀,
객체는 그틀을 기반으로 생성되는것을 말합니다.

생성자란?
클래스와 같은 이름을 가진 메소드로 객체가 생성될때 호출됩니다.

Wrapper Class란?
기본자료형에 대한 객체표현의 클래스입니다.
기본자료형을 Wrapper class로 변환하는 것을 Boxing, 그 반대를 UnBoxing이라고 합니다.

Synchronized란?
여러개의 스레드가 한개의 자원을 사용하고자할때 사용중인 스레드를 제외하고 나머지 스레드들이 데이터에접근할 수 없게 막을 수 있으나 키워드를 남발시 프로그램의 성능저하를 일으킬 수 있습니다.

 

프로세스와 스레드의 차이?
프로세스는 작업의 단위, 스레드는 실행의 단위로 자원을 공유한다는 차이점이 있습니다.


new String과 리터럴의 차이?
new String()은 new키워드로 Heap메모리에 저장되고
""는 Heap안에 있는 String Constant Pool 영역에 저장됩니다.

String, StringBuffer, StringBuilder의 차이?
String은 불변클래스로 문자열내용이 자주 변경되지않은 경우,
StringBuffer, StringBuilder는 가변클래스로 문자열 연산이 빈번하게 발생하는경우에 사용됩니다.
StringBuffer는 동기화를 지원하고, StringBuilder는 지원하지않습니다.

접근제한자란?
접근범위를 설정해주는 예약어입니다.
public, protected, default, private가 있습니다.

클래스 멤버변수 초기화순서?
클래스 로드시 static 변수가, 
객체가 생성시 생성자 block보다 먼저 필드변수가, 
객체가 생성될때 생성자 block이 초기화됩니다.

static이란?
인스턴스 생성없이 모든 객체가 메모리를 공유하여 바로 사용가능합니다. 자주변하지않는 값이나 공통으로 사용되는 값을 관리할때 이용합니다.

inner Class, 내부클래스의 장점?
외부클래스의 멤버에 쉽게 접근할 수 있고,
관련있는 클래스를 묶어 캡슐화해 코드 복잡성을 낮출 수 있으며
외부에서 접근할 수 없어 보안성을 높일 수 있습니다.

리플렉션이란?
구체적인 클래스 타입을 알지 못해도 접근할 수 있도록하는 자바api입니다. 

Error와 Exception의 차이?
Error는 실행중 일어나는 치명적오류,
Exception은 경미한 오류로 try-catch를 통해 비정상종료를 막을 수 있습니다.

CheckedException과 UnCheckedException의 차이?
CheckedException는 실행하기전 예측하능한 예외로 반드시 예외처리를 해야합니다.
UnCheckedException은 실행하고 난 후에 알 수있는 예외로 따로 예외처리를 하지 않아도 됩니다.

Optional api란?
개발할때 가장 많이 발생하는 예외인 NullPointException을 Optional<T>로 null 예외가 발생하지 않도록 도와주고 Optional 클래스 메소드를 통해 null을 컨트롤 할 수 있습니다.

컬렉션 프레임워크?
다수의 데이터를 관리하는 클래스의 집합입니다.
자바 컬렉션에는 List, Set, Map 인터페이스를 기준으로 여러 구현체가 있고 Stack, Queue인터페이스도 존재합니다.

List, Set, Map, Stack, Queue의 특징?
List는 순서가 있으며 중복을 허용하는 대표적으로 ArrayList가 있고,
Set은 순서가 없으며 중복을 허용하지않는 대표적으로 HashSet이 있습니다.
Map은 순서가 없으며 키와값이 한쌍으로 이루어져 키를 기준으로 중복을 허용하지앖는 대표적으로 HashMap이 있습니다.
Stack은 직접 new 키워드로 사용할 수 있고
Queue는 LinkedList에 new키워드를 적용해 사용할 수 있습니다.

제네릭이란?
제네릭은 데이터타입을 하나로 지정하지않고 포괄적으로 지정한다는 의미입니다. 잘못된 타입이사용될 수 있는 문제를 제거해 에러를 방지합니다.

final, finally, finalize의 차이?
final은 선언시 한번만 할당하고 싶을떄, 
finally는 try-catch와 함께 항상 수행해야하는 작업이 있을떄, 
finalize는 Object클래스에 정의되어있는 메소드로 호출되서는 안되는 메소드입니다.

직렬화란?
외부시스템에서도 사용할 수 있도록 byte형태로 데이터를 변환하는 기술입니다. 반대로 byte형태를 다시 객체로 변환하는 과정은 역직렬화라고 합니다.

 

병렬프로그래밍이란?
큰 문제를 작게 나누어 동시에 해결할때 사용합니다.
처리속도가 향상되지만 구현난이도는 올라갑니다.

 

가장 기억에 남는 백앤드 프로젝트 구조
controller service repository에 대한 설명

MVC는 Model, View, Controller의 약자입니다.
각 레이어간 기능을 구분하는데 중점을 둔 디자인패턴입니다.
Model은 dao, dto, service등 데이터를 관리하고, 
View는 처리결과를 통해 유저인터페이스가 표현되며
Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할을 합니다.