정보처리기사, 기술면접

[기술면접] 백엔드 관련 (Java, Spring, JPA 등)

codewalker 2021. 4. 8. 02:04

JVM과 Java 프로그램 실행 과정을 설명하세요.

  • JVM이란 Java Virtual Machine의 약자로 자바 프로그램을 자바 API를 기반으로 실행하는 역할을 한다. 자바와 OS 사이에서 중개자 역할을 수행하여 자바가 OS에 구애받지 않게 해준다.
  • 자바 프로그램 실행 과정은 프로그램이 실행되면 JVM이 OS로부터 해당 프로그램이 필요로 하는 메모리를 할당받고, 자바 바이트코드로 변환된 class 파일을 클래스로더를 통해 JVM에 로딩한다. 로딩된 class 파일은 execution engine을 통해 해석되고 실행된다. 필요시 garbage collection을 수행해서 불필요하게 할당된 메모리를 해제한다.

 

 

Garbage Collection이 필요한 이유?

  • 자바 프로그램은 메모리를 명시적으로 지정해서 해제하지 않기 때문에 Garbage Collection Mechanism을 통해 더 이상 필요없는 객체를 찾아 지우는 작업을 수행한다.

 

 

JVM 메모리 영역에서 Garbage Collection이 관리하는 부분은 어디인가?

  • JVM은 운영체제로부터 할당 받은 메모리 영역을 메소드, 스택, 힙 영역으로 분리한다. 이 중에서 힙 영역에 생성된 객체가 저장되며, 사용하지 않는 객체를 GC를 통해 삭제한다.
  • 힙 영역은 YOUNG Generation, OLD Generation, Permanent Generation으로 나뉘고, YOUNG Generation은 eden, S0, S1 (Survivor space) 영역으로 나뉜다.

 

 

Garbage Collection 동작 방식에 대해 설명하세요.

  • 새롭게 생성된 객체는 YOUNG의 eden 영역에 들어가고, eden 영역이 다 차면 minor GC가 발생한다. GC가 실행되면 GC를 실행하는 스레드 외에 나머지 스레드는 멈춘다.
  • 불필요한 객체는 삭제되고 아직 필요한 객체는 S0로 이동하고, S0에 있었던 객체는 S1으로 이동한다. S1이 다 차면 S1에 아직 필요한 객체는 OLD Generation으로 이동한다.
  • OLD 영역은 크기가 커서 다 차는 경우는 흔치 않지만, 이 영역을 삭제할 때 major GC(= full GC)가 발생한다.
  • OLD 영역은 크기가 크기 때문에 프로그램 중지시간(stop-the-world)이 길고, YOUNG 영역은 minor GC가 자주 발생하지만 영역이 작기 때문에 처리속도가 빠르다.

 

 

Overriding과 Overloading의 차이점은?

  • Overriding: 상위 클래스에 존재하는 메서드를 하위 클래스에 맞게 재정의 하는 것 (메서드 이름과 파라미터는 동일함)
  • Overloading: 같은 이름을 가지는 메서드를 파라미터의 수나 자료형을 다르게 해서 중복 정의하는 것

 

 

abstract와 interface의 차이점은?

  • abstract: 추상클래스는 추상메서드를 1개 이상 가지고 있는 클래스를 의미한다. 기존 메서드 이외에 추상메서드를 상속시켜서 반드시 구현이 필요한 추상메서드를 상속 받은 클래스에서 구현시키는 것이 목적이다. 추상클래스는 객체 생성이 안되므로 추상클래스를 상속 받은 클래스는 객체 생성을 하기 위해 추상메서드를 구현해야 한다.
  • interface: 상수와 메서드 선언 집합으로, 정의된 메서드를 implements 하는 곳에서 모두 구현할 것을 강제한다. Java는 단일 상속만 지원하기 때문에 추상클래스를 상속 받은 클래스는 다른 클래스를 상속 받을 수 없다. 하지만 인터페이스는 상속 받는 개수에 제한이 없다.

 

 

디자인 패턴이란 무엇이고, 싱글톤에 대해 간단히 설명하세요.

  • 디자인 패턴은 공통적인 소프트웨어 코드 작성 문제를 해결하는데 도움이 될 수 있는 코드 패턴을 의미함
  • 싱글톤은 전체 프로그램에서 단 1개의 객체를 생성해서 공유할 수 있는 코드 패턴을 말함

 

 

제네릭(Generic)이란 무엇인가?

  • 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 사용하는 것으로, 컴파일 과정에서 타입체크를 해주는 기능이다.
  • 따라서 객체의 타입 안전성을 높이고 형변환의 번거로움을 줄여준다.

 

자료구조 List, Set, Map 의 차이에 대해 설명하세요.

  •  

 

접근 제어 지시자(Access Modifiers)에 대해 설명하세요.

  •  

 

StringBuffer와 StringBuilder의 차이는?

  •  

 

static 과 final 의 차이는?

  •  

 

Spring과 JPA에서 사용하는 Annotation 중 아는 것에 대해 설명하세요.

  •  

 

로그인 과정에서 HttpSession 사용시 동일한 key 값을 가져오는데 어떻게 사용자 A와 B를 구분하는가?

  •  

 

JPA와 MyBatis의 차이에 대해 설명하세요.

  •  

 

JPA의 N+1 문제는 어떻게 해결하는가?

  •  

 

DI(Dependency Injection)와 IoC(Inversion of Control)에 대해 설명하세요.

  •  

 

AOP(Aspect Oriented Programming)에 대해 설명하세요.

  •  

 

Spring MVC 의 요청 수행 과정에 대해 설명하세요.