본문 바로가기
직무 면접 대비/백앤드

[직무 면접 대비] 백앤드 질문 모음 1

by CODESIGN 2022. 2. 21.

1. OOP에 대해 설명해보세요.

  • 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있습니다. 즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말합니다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는 것입니다. 대표적인 특징으로 추상화, 상속, 캡슐화, 다형성이 있습니다.

 

2. JVM의 구조에 대해 설명해보세요.

  • 프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리를 먼저 할당받습니다.
  • 그리고 자바 컴파일러를 통해 개발자가 작성한 코드(. java)를 바이트 코드(. class)로 변환합니다.
  • 다음 Class Loader에서 바이트 코드를 JVM에 로딩시킵니다.
  • 로딩된 바이트 코드를 execution engine을 통해 기계어로 해석됩니다.
  • 해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행이 이루어집니다.

 

3. 인터페이스(interface)와 추상 클래스(abstract)의 차이점에 대해 말해보세요.

  • interface(인터페이스)
    • 다중 상속
    • 추상 메서드, 상수만 선언 가능
    • 생성자, 일반 변수를 가질 수 없음
    • 팀별 협업 시 추상 메서드를 통해 결과를 예측하고 작업이 가능함(구현 객체의 동일성 보장)
  • abstract(추상 클래스)
    • 다중 상속 불가
    • 추상 메서드 1개 이상, 일반 변수, 일반 메서드 선언 가능
    • 생성자, 일반 변수 가질 수 있음
    • 메서드의 부분 구현이 가능(부분 구현된 메서드를 상속받아 확장시키기 위함)

 

4. CORS에 대해 설명해보세요.

  • CORS(Cross-Origin-Resource-Sharing)란 도메인이 다른 2개의 사이트가 데이터를 주고받을 때 발생하는 문제입니다. 예를 들어 mangkyu.com에서 mang.com으로 데이터를 요청한다고 하면, 따로 설정을 해주지 않는 한 CORS 에러를 만나게 됩니다.
  • CORS가 생기게 된 이유는 서버 내에서 요청이 허락된 도메인에만 데이터를 주기 위해서인데, 요청을 허락하기 위해서는 Access-Control-Alow-Origin: {도메인}과 같은 내용을 Response의 헤더에 추가해주어야 합니다. 만약 도메인을 *으로 설정하면 모든 도메인에 대해 요청을 허락할 수 있습니다. 그 외에도  Access-Control-Allow-Methods, Access-Control-Max-Age 등을 설정해줄 수 있습니다.
    • Access-Control-Allow-origin : 요청을 보내는 페이지의 출처 [ *, 도메인 ]
    • Access-Control-Allow-Methods : 요청을 허용하는 메서드. Default : GET, POST
    • Access-Control-Max-Age : 클라이언트에서 preflight 요청 (서버의 응답 가능 여부에 대한 확인) 결과를 저장할 시간
    • Access-Control-Allow-Headers : 요청을 허용하는 헤더

 

5. 아파치는 멀티 프로세스인가 멀티 스레드인가? 

  • 아파치는 기본적으로 멀티 프로세스로 구현되어 있다. 하지만 설정에 따라 멀티 스레드를 같이 운용할 수 있다.

 

6. VO, DTO, BO, BO, DAO의 차이점에 대해 말해보세요.

  • DAO(Data Access Object): DB에 접근하여 실제 데이터를 조회 또는 조작하는 클래스, Repository 또는 Mapper에 해당합니다.
  • BO(Business Object): 여러 DAO를 활용해 비즈니스 로직을 처리하는 클래스, Service에 해당합니다.
  • DTO(Data Transfer Object): 데이터를 주고받기 위해 사용하는 클래스입니다.
  • VO(Value Object): 실제 데이터만을 저장하는 클래스입니다.

 

7. Spring MVC란 무엇인가요?

  • Spring MVC란 웹 애플리케이션 개발을 위한 MVC 패턴 기반의 웹 프레임워크입니다. Spring MVC는 애플리케이션의 구성요소를 Model, View, Controller로 분리합니다. 또한 Spring MVC는 아래와 같은 컴포넌트들로 구성됩니다.
    • Dispatcher Servlet: 클라이언트의 요청을 먼저 받아들이는 서블릿으로, 요청에 맞는 컨트롤러에게 요청을 전달합니다.
    • Handler Mapping: 해당 요청이 어떤 컨트롤러에게 온 요청인지 검사합니다.
    • Controller: 클라이언트의 요청을 받아 처리하여 결과를 디스패처 서블릿에게 전달합니다.
    • ViewResolver: View의 이름을 통해 알맞은 View를 찾습니다.
    • View: 사용자에게 보일 UI 화면입니다.

 

8. String, StringBuffer,  StringBuilder의 각 차이점에 대해 말해보세요.

  • String
    • immutable(불변)
    • 객체를 한 번 할당할 시메 모리 공간에 변동이 없습니다.(할당 시 Heap String Pool영역에 생성되어 그 값을 계속 사용합니다.)
    • 동기화를 신경 쓰지 않아도 됩니다.
    • 엄청나게 많은 문자열을 선언 및 연산할 시 성능 저하를 고려해야 합니다.
  • StringBuffer
    • mutable(가변)
    • 각 메서드 별로 Synchronized Keyword가 존재합니다.
    • 멀티스레드 환경에서도 동기화를 지원합니다.(thread-safe)
  • StringBuilder
    • mutable(가변)
    • 동기화를 지원하지 않습니다.

 

9. Synchronized(동기화)란?

  • 동기화는 여러 개의 스레드가 하나의 자원에 접근하려 할 때 주어진 순간에는 단 하나의 스레드만이 접근 가능하도록 하는 것입니다.
    둘 이상의 스레드가 공동의 자원(파일이나 메모리 블록)을 공유하는 경우, 순서를 잘 맞추어 다른 스레드가 자원을 사용하고 있는 동안 한 스레드가 절대 자원을 변경할 수 없도록 해야 합니다. 만약 한 스레드가 파일에서 레코드를 수정하는데, 다른 스레드가 동시에 같은 레코드를 수정하면 심각한 문제가 발생할 수 있기 때문입니다. 이런 상황을 처리할 수 있는 한 방법은 관련된 스레드에 대한 동기화(synchronization)를 하는 것입니다.

 

10. Synchronized(동기화)를 하기 위한 방법

  • synchronized 함수(메서드)를 만들어 사용합니다.
  • synchronized 블록(block) 사용합니다.

 

11. 자바의 메모리 영역

  • 메서드 영역
    • static 변수, 전역 변수, 코드에서 사용되는 Class 정보 등이 할당됩니다.
  • 스택(Stack)
    • 지역 변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리입니다.
  • 힙(Heap)
    • new 연산자를 통한 동작 할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리됩니다.

 

12. Vector vs ArrayList

  • 동적인 배열을 다루는 컬렉션 프레임워크로서 둘의 차이점을 알아보겠습니다.
    • Vector
      • 동기화된 상태입니다.(Thread safe)
      • 상대적으로 속도가 느립니다.(동기화되어있기 때문)
    • ArrayList
      • 동기화가 안된 상태입니다.
      • 상대적으로 속도가 빠릅니다.(동기화가 안되어있기 때문)
      • 멀티스레드 환경이 아닐 경우 사용 권장합니다.

 

13. ArrayList와 LinkedList의 차이

  • LinkedList와 ArrayList는 모두 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체입니다.
  • ArrayList
    • 내부적으로 데이터를 배열로 관리하고 데이터 추가/삭제 시 임시 배열을 생성해 데이터를 복사합니다.
    • 데이터별 인덱스가 있어 검색에는 유리
    • 임시 배열을 사용하기 때문에 데이터 추가/삭제의 경우에는 불리
  • LinkedList
    • 내부적으로 노드 단위로 데이터를 관리합니다. 자신의 앞 뒤 노드만 인지하는 상태입니다.
    • 인덱스가 따로 없기 때문에 검색 시 전 노드를 순회해야 하여 검색 시 불리
    • 데이터 추가/삭제 시 불필요한 데이터 복사가 없어 유리

 

14. 오버 로딩(Overloading)과 오버 라이딩(Overriding)의 차이

  • 오버 로딩(Overloading) : 상위 클래스의 메서드와 이름, return 값은 동일하지만, 매개 변수만 다른 메서드를 만드는 것을 의미합니다. 다양한 상황에서 메서드가 호출될 수 있도록 한다.
  • 오버 라이딩(Overriding) : 상위 클래스에 존재하는 메서드를 하위 클래스에서 필요에 맞게 재정의하는 것을 의미합니다.

 

댓글