Java 면접 준비

Jinjin·2023년 8월 29일
0
post-thumbnail

📌 자바 런타임 메모리 구조

  1. Method Area(메소드 영역)
    클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보 같은 필드의 정보
    메소드 이름, 리턴 타입, 파라미터, 접근 제어자 정보 같은 메소드 정보
    static 변수, final class 변수등이 생성되는 영역이다.
  2. Heap Area(힙 영역)
    new 키워드로 생성된 객체와 배열이 생성되는 영역이다.
    메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않은 메모리를 확인하고 제거하는 영역이다.
  3. Stack Area(스택 영역)
    지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역이다.
    Ex) int a = 10; => 스택에 메모리의 이름이 a이고 값이 10인 메모리 공간을 만드는 것이다.
    Ex) Person p = new Person(); => Person p는 스택 영역에 생성되고 new 로 생성된 Person 클래스의 인스턴스는 힙 영역에 생성된다.

📌 자바란 무엇인가?

객체지향프로그래밍 언어


📌 Garbage Collector란?

메모리가 부족할 때 Garbage를 정리해주는 프로그램이다. ~ 메모리를 해제시킨다.


📌 객체가 무엇인가?

세상에 존재하는 모든 것이다.


📌 프로그래밍에서의 객체가 무엇인가?

데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 그룹이다.

Ex) 컴퓨터 = 데이터(키보드, 마우스, 모니터) + 기능(화면제공, 입력, 출력)


📌 자바의 컴파일 과정을 설명해라

고급언어로 작성되어있는 .java 파일을 byte code 즉, .class 언어인 기계어로 바꾸는 과정이다.


📌 자바의 장점과 단점에 대해 설명해라

장점 : 객체지향언어이다, 자동으로 메모리를 관리해준다, JVM위에서 실행하므로 운영체제에 독립적이다, 멀티스레드를 지원한다.

단점 : 실행속도가 다른 언어(c,c++)에 비해 느리다, 언어가 어렵다, 불편한 예외처리(컴파일에서도 문제가 생길 수 있음)


📌 객체지향언어에 대해 설명하라

객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 사용될 수 있게 한다.


📌 객체지향언어와 절차지향언어의 차이점에 대해 설명해라

절차지향언어 : 개체가 순차적으로 만들어진다.

Ex) 자전거를 예시로 들자면 핸들, 바퀴, 의자 순서대로 만들어진다면 의자를 변경하면 핸들과 바퀴도 모두 변경해야한다. 즉, 모두 유기적으로 연결되어있는 구조이다.

객체지향언어 : 개체가 연결되어진 형태가 아니다.

Ex) 캡슐화, 추상화, 상속, 다형성


📌 Service인터페이스와 ServiceImpl클래스로 나누는 이유?

하나의 인터페이스를 구현하는 여러 구현체가 있고 기능에 따라 적절한 구현체가 들어가서 다형성을 주기 위함이다.


📌 클래스란?

객체라는 추상적인 개념을 코드화 한 것, 객체를 만들기 위한 설계도


📌 변수란?

데이터를 저장하기 위해 프로그램에 의해 이름을 할당 받은 공간


📌 싱글톤 패턴이란?

객체를 오직 하나만 생성하여 생성된 객체를 프로그램 언제 어디서나 접근하여 사용할 수 있도록 하는 패턴


📌 객체지향언어의 특징 4가지

  • 상속 : 상위클래스의 모든 것을 하위클래스가 이어 받는 것으로 코드의 재사용이 가능함
  • 추상화 : 메소드의 몸체를 정의하지 않고 상속 받는 다른 클래스에서 정의하도록 만듬
  • 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있다.(오버로딩/오버라이딩)
  • 캡슐화 : 객체를 외부에서 함부로 읽을 수 없도록 제한하는 것(접근제한자)

📌 자바에서의 접근제한자


📌 오버로딩과 오버라이딩?

  • 오버로딩 : 메소드의 이름은 같고 매개변수의 개수나 타입이 달라야한다.
  • 오버라이딩 : 부모 클래스로부터 상속 받은 메소드를 자식 클래스에서 재정의 해야한다.

📌 스레드?

프로세스 내에서 실제로 작업을 실행하는 단위(프로세스 내에서 stack 영역만 따로 할당받고 code, data,heap 영역은 공유한다.)


📌 멀티스레드?

하나의 프로세스 내에서 2개 이상의 스레드가 동시에 실행하는 것을 말한다.


📌 멀티스레드의 동시성과 병렬성에 대해 설명해라

  • 동시성 : 멀티 작업을 위해 싱글 코어에서 여러 개의 스레드가 번갈아가면서 실행하는 것을 말한다. (동시에 실행하는 것처럼 보이지만 사실 번갈아가면서 실행하고 있다)
  • 병렬성 : 멀티 작업을 위해 멀티 코어에서 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행하는 것

📌 멀티스레드의 데드락에 대해 설명하시오

둘 이상의 프로세스들이 자원을 보유한 상태에서 서로가 원하는 자원을 가지고 무한정 기다리는 상황

Ex) P1은 P2가 가진 자원을 필요로 하고 P2는 P1이 가진 자원을 필요로 하는 상황


📌 Context Switching이란?

어떤 하나의 프로세스가 실행하고 있는 과정에서 인터럽트에 의해 다른 프로세스가 실행해야 할 때 이전에 실행하던 프로세스의 상태를 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 작업


📌 Thread Safe란?

멀티스레드 환경에서 어떤 공유 자원에 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 상태


📌 스레드풀?

스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다. 따라서 작업 처리 요청이 폭증해도 작업 큐라는 곳에 작업이 대기하다가 여유가 있는 스레드가 그것을 처리하므로 스레드의 전체 개수는 일정하며 애플리케이션의 성능도 저하되지 않는다.


📌 서블릿이란?

동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 기술이다.

웹 요청과 응답의 흐름을 간단한 메소드 호출만으로 체계적으로 다룰 수 있습니다.


📌 proxy란?

client와 server를 연결해주는 매개체


📌 스프링 시큐리티란?

인증과 인가에 초점을 맞춘 프레임워크


📌 쿠키와 세션을 사용하는 이유?

HTTP의 비연결성과 비상태성이라는 특징을 보완하기 위해서 사용


📌 비연결성과 비상태성이란?
비연결성은 클라이언트가 서버에 요청(request)을 했을 때, 그 요청에 맞는 응답(response)을 보낸 후 연결을 끊는 처리방식

비상태성은 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식입니다. 첫번째 통신에서 클라이언트와 데이터를 주고 받았다 해도, 두번째 통신에서는 이전 데이터를 유지하지 않는다.


📌 쿠키와 세션 비교


📌 LocalStorage와 SessionStorage

  1. LocalStorage ⇒ 저장한 데이터를 명시적으로 지우지 않는 이상 영구적으로 보관이 가능하다.
//Set the value in a local storage object
localStorage.setItem('name', 'sanghoone');
 
//Set the value in a local storage object
localStorage.getItem('name');
 
//Delete the value from local storage object
localStorage.removeItem('name'); //Delete specifice obeject from local storege
localStorage.clear(); //Delete all from local storege
  • 사용자 세션 데이터 유지할 수 있다.
  • 브라우저를 닫았다가 다시 열어도 지속된다.
  • 탭을 여러 개 열어도 공유된다.
  • 명시적으로 삭제될 때까지 지속된다.
  • 도메인마다 별도로 로컬 스토리지가 생성된다.

⇒ 사용자가 브라우저 창을 닫았을 때 데이터는 삭제되지 않으며 일, 주, 월 및 연도에 사용할 수 있는 만료 날짜 없이 사용자 정보 데이터를 저장한다.


2. SessionStorage ⇒ 데이터의 지속성과 액세스 범위에 특수한 제한이 존재함
//Set the value in a session storage object
sessionStorage.setItem('name', 'sanghoone');
 
//Set the value in a session storage object
sessionStorage.getItem('name');
 
//Delete the value from sessionstorage object
sessionStorage.removeItem('name'); //Delete specifice obeject from session storege
sessionStorage.clear(); //Delete all from session storege
  • 브라우저 세션 기간 동안 만 사용할 수 있으며 탭이나 창을 닫을 때 삭제된다.
  • 새로고침을 해도 유지된다.
  • 변경 된 사항은 현재 페이지에서 닫힐 때까지 저장되어 사용할 수 있다.
  • 탭이 닫히면 저장된 데이터가 삭제 된다.
profile
BE Developer

0개의 댓글