면접 준비

[면접준비] 4일차

2023. 9. 10. 19:33
목차
  1. 1. 자바의 가비지 콜렉터에서 메모리 영역에 대해 설명해주세요
  2. 2. 가비지 콜렉터의 동작과정을 설명해주세요
  3. 자동 가비지 컬렉션 과정 설명(Generational 구조 도입 이전)
  4. 자동 가비지 컬렉션 과정 설명(Generational 구조 도입 이후) - 객체 생명 주기
  5. 3. 객체지향의 장점과 단점을 설명해주세요
  6. 4. 객체지향의 특징을 설명해주세요(3가지 물어볼경우와 5가지 물어볼경우에 답이 다름)
  7. 5. 멀티스레딩의 장단점에 대해 설명해주세요
  8. 6. 생성자란 무엇인가요?
  9. 7. 싱글톤 패턴이란 무엇인가요?
  10. 8. 싱글톤 객체의 필요성에 대해 설명해주세요
  11. 9. 자바의 접근제한자에 대해 설명해주세요
  12. 10. 파이썬은 접근제한자가 없는데 어떻게 구현해야하나요?
  13. 11.  자바의 추상클래스와 인터페이스의 차이점에 대해 설명해주세요

1. 자바의 가비지 콜렉터에서 메모리 영역에 대해 설명해주세요

https://progyun.tistory.com/103

 

005. JSCode - 번외편 (3) GC

https://www.youtube.com/watch?v=FMUpVA0Vvjw 이 글은 우아한 테크코스 10분 테코톡 조엘님의 GC 발표를 보고 개인적인 공부를 위해 내용을 정리한 글입니다. 우아한 테크코스와 좋은 발표 해주신 조엘님께

progyun.tistory.com

 

가비지 컬렉션은 JVM의 Heap 영역에서 일어납니다.

JVM의 Heap 영역은 다음과 같이 구성됩니다

 

Young Generation

하위에 3가지 영역으로 세부 영역이 나뉩니다.

- Eden 영역

- Survival 0 영역

- Survival 1 영역

 

용량 : Young Generation < Old Generation 이기 때문에 GC가 전체 영역을 처리하는 것 보다 시간이 덜걸립니다.

(Stop The World로 인한 애플리케이션 중지 시간이 짧아집니다)

Young Generation의 Flush는 Mark된 객체들의 복사가 일어난 이후 한번에 일어나기 때문에 연속된 여유공간이 만들어져서

메모리 파편화의 방지가 가능합니다.

 

추가)

 

 

이전에 서술한대로 시스템 내의 모든 객체를 Sweep 하는 것은 다소 많은 시간이 소요됩니다.

 

Young Generation - 모든 객체들이 처음 할당될 때 존재하는 공간으로 다 차면 Minor GC가 생성된다.

 

- Stop the World Event -

모든 Minor GC는 Stop The World Event로 모든 애플리케이션들과 스레드들은 이 작업이 일어날 때까지 작업이 중지됩니다.

 

Old Generation - 긴 시간 동안 살아남은 객체들이 존재하는 공간입니다.

Young Generation에서 Age-bit이 특정 threshold를 넘는 경우 Old Generation으로 넘어가며 여기서도 GC가 일어나는데 이것을 Major GC라고 합니다, Young Generation보다 Old Generation에서 일어나는 GC 시간이 더 길게 걸립니다.

 

반응형 애플리케이션에서 Major Garbage Collection은 최소화되어야합니다.

그리고 어떤 GC를 Old Generation에서 사용하느냐에 따라 Stop the world 시간을 최소화할 수 있습니다.

 

Permanent Generation은 JVM이 클래스와 메서드가 어떤것인지에 대한 메타데이터를 담고 있습니다.

이 정도들은 런타임 도중 JVM에 의해 애플리케이션에서 사용되는 클래스들의 정보를 적재합니다.

추가로 Java SE 라이브러리 클래스들과 메서드들이 여기에 저장될 수 있습니다.

이 영역에 저장되는 클래스들은 회수되거나 하역(적재의 반대)될 수 있습니다 만약 더이상 불필요해지거나, 다른 클래스들을 위해 공간이 요구되는 경우에 말입니다.

 

Permanent Generation의 경우 Full Garbage Collection의 대상에 포함됩니다. -> Java 8이 나오면서 Metaspace로 변경

이건 Native 메모리 영역에 위치한다.

https://johngrib.github.io/wiki/java8-why-permgen-removed/

 

JDK 8에서 Perm 영역은 왜 삭제됐을까

 

johngrib.github.io


2. 가비지 콜렉터의 동작과정을 설명해주세요

https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

 

Java Garbage Collection Basics

Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill

www.oracle.com

자동 가비지 컬렉션 과정 설명(Generational 구조 도입 이전)

1. Mark - Heap 내에 객체가 Stack에 의해 Referenced 되지 않은 경우 Sweep의 대상으로 지정합니다.

참조된 객체는 파란색으로, 비참조되고 있는 객체는 노란색으로 표시되고 있습니다.

모든 객체들은 삭제 여부를 결정하기 위해 검사됩니다. 시스템 내의 객체를 모두 스캔하려면 다소 시간이 오래 걸릴 수 있습니다.

그래서 위에서 Young, Old 영역을 나누어서 관리합니다.

 

2. 여기서부터 SWEEP에 해당합니다

 

2-1. Normal Deletetion

Unreferenced Object(비참조된 객체)를 제거하고 Referenced Objects(참조된 객체들)과 포인터를 자유공간에 남겨둡니다.

이 삭제과정을 거치고 난 뒤에는, 메모리 할당자(Memory Allocator)는 Free Space 블럭에 대한 정보 리스트를 갖고 있으면서 어디에 새로운 객체가 할당될 수 있는지에 대한 정보를 소지합니다.

 

2-2. Compacting과 함께하는 삭제

성능 향상을 위해, 비참조객체를 제거한 이후 남은 Referenced Object(참조중인 객체)들에 대해 Compact(압축)을 실행할 수 있습니다, 여기서 압축은 용량을 줄이는 것이 아니라, 메모리 관리가 용이하도록 참조중인 객체를 한곳에 모아둡니다.

사용중인 구역과 사용중이지 않은 구역의 식별이 용이하기 때문에 사용중이지 않은 구역에 메모리 할당이 더 쉬워집니다(빨라집니다)

 


자동 가비지 컬렉션 과정 설명(Generational 구조 도입 이후) - 객체 생명 주기

먼저 Java 코드 내에서 객체가 생성되면 그 객체는 Young Generation의 Eden 영역에 적재됩니다.

 

Eden 영역의 공간이 모두 차게 되면 Minor Garbage Collection이 시작됩니다.

 

Stack 영역에서 참조되고 있는 객체는 Survivor 1 공간으로 옮겨지고,

참조되고 있지 않은 Mark된 객체는 eden 공간이 비워지면서 삭제되게 됩니다

Minor GC를 반복하면서 Survivor 0에 있던 살아남은 객체들에도 GC 과정이 적용되어 최종적으로 살아남은 객체들은 또 다시 Survivor 1 공간으로 옮겨갑니다. 

Survivor 0 - Survivor 1을 옮겨가면서 살아남은 객체들은 옮겨가는 과정에서 Age-bit가 1씩 올라가게 됩니다.

이 때 두 Survivor 공간 중 한 곳은 무조건 비워지게 됩니다.

 

이 이후 특정 Age-bit을 넘긴 Heap 내에 존재하는 객체들은 Old Generation으로 승격되게 됩니다.

이 과정이 반복되면서 Old Generation의 공간 점유가 꽉 차게 되면, Major GC가 일어나 Cleanup하고 Compact 작용을 일으킵니다.


3. 객체지향의 장점과 단점을 설명해주세요

 

객체지향프로그래밍이란?

컴퓨터 프로그래밍 방법론의 일종으로 명령형 프로그래밍에 속합니다 (명령형 / 선언형)

상태와 행위로 이루어진 객체간의 상호작용을 통해 프로그램을 설계하고 개발합니다

 

캡슐화 (정보은닉) / 추상화 / 상속성 / 다형성

 

장점

1. 코드의 재사용성 용이

2. 생산성 향상

3. 자연적인 모델링

4. 유지보수의 유지성

 

단점

1. 실행 속도가 느림

2. 프로그램 용량이 큼

3. 설계에 많은 시간 소요


4. 객체지향의 특징을 설명해주세요(3가지 물어볼경우와 5가지 물어볼경우에 답이 다름)

 

3요소 5원칙

 

1. 캡슐화

2. 상속

3. 다형성

 

5원칙 (SOLID)

 

1. Single Responsbility Principle

2. Open-Closed Principle

3. Liscov-Substitution Principle

4. Interface Segregation Principle

5. Dependency Inversion Principle


5. 멀티스레딩의 장단점에 대해 설명해주세요

 

프로그램의 일부 스레드가 중단되더라도 프로그램의 수행이 계속되기 때문에 사용자 응답성이 증가합니다.

프로세스 내 자원과 메모리를 공유하기 때문에 효율적입니다 (context-switching에서 캐시 flush 불필요)

멀티프로세서의 병렬성이 증가합니다

 

단점으로는 임계영역에 대한 동기화가 필요합니다.

단일 스레드보다 이런 문제로 속도 저하가 발생할 수 있습니다.


6. 생성자란 무엇인가요?

 

자바에서 객체를 생성할 때 호출되는 인스턴스 초기화 메서드에 해당합니다.


7. 싱글톤 패턴이란 무엇인가요?

 

객체 인스턴스가 애플리케이션 내에 오직 1개만 생성되는 것으로 메모리 측면에서 이점이 있습니다

스프링 빈 컨테이너의 스프링 빈은 모두 싱글톤으로 관리됩니다.


8. 싱글톤 객체의 필요성에 대해 설명해주세요

 

싱글톤 패턴은 메모리 측면에서 이점을 가집니다.

또한 이미 생성된 인스턴스를 getInstance()식으로 호출하여 사용하기 때문에 속도 측면에서 이익이 있습니다

데이터 공유가 쉬우나 공유 필드를 생성하는것은 멀티스레딩 환경에서 적절하지 않습니다


9. 자바의 접근제한자에 대해 설명해주세요

 

자바의 접근제한자는 public, protected, default, private 4가지 종류가 있습니다

 

public은 프로젝트 내 모든 리소스에서 접근할 수 있습니다.

protected의 경우 같은 클래스 내, 같은 패키지 내에 있거나, 상속된 클래스인 경우 외에는 접근이 안됩니다.

default는 같은 패키지 내에있거나 같은 클래스에서 호출하는 경우가 아니면 접근이 안됩니다.

private은 같은 클래스가 아니면 접근할 수 없습니다.

 

이 4가지 모두 클래스 내 멤버에 접근을 제어합니다


10. 파이썬은 접근제한자가 없는데 어떻게 구현해야하나요?

 

앞에 두개의 __을 붙임으로써 가능합니다


11.  자바의 추상클래스와 인터페이스의 차이점에 대해 설명해주세요

 

추상클래스 - extends 상속을 통해 구현, 일부 클래스를 미완성 상태인 추상클래스로 구현할 수 있음. (abstract로 정의)

인터페이스 - implements 를 통해 구현, default가 사용되지 않은 이상 인터페이스에는 코드 정의 외에 기술할 수 없음.

(모든 메서드가 추상메서드인 경우가 이에 해당)

'면접 준비' 카테고리의 다른 글

[학원 면접 준비] 5일차  (0) 2023.09.11
[면접준비] 3일차  (0) 2023.09.09
[면접준비] 2일차  (0) 2023.09.08
[면접준비] 1일차  (0) 2023.09.07
  1. 1. 자바의 가비지 콜렉터에서 메모리 영역에 대해 설명해주세요
  2. 2. 가비지 콜렉터의 동작과정을 설명해주세요
  3. 자동 가비지 컬렉션 과정 설명(Generational 구조 도입 이전)
  4. 자동 가비지 컬렉션 과정 설명(Generational 구조 도입 이후) - 객체 생명 주기
  5. 3. 객체지향의 장점과 단점을 설명해주세요
  6. 4. 객체지향의 특징을 설명해주세요(3가지 물어볼경우와 5가지 물어볼경우에 답이 다름)
  7. 5. 멀티스레딩의 장단점에 대해 설명해주세요
  8. 6. 생성자란 무엇인가요?
  9. 7. 싱글톤 패턴이란 무엇인가요?
  10. 8. 싱글톤 객체의 필요성에 대해 설명해주세요
  11. 9. 자바의 접근제한자에 대해 설명해주세요
  12. 10. 파이썬은 접근제한자가 없는데 어떻게 구현해야하나요?
  13. 11.  자바의 추상클래스와 인터페이스의 차이점에 대해 설명해주세요
'면접 준비' 카테고리의 다른 글
  • [학원 면접 준비] 5일차
  • [면접준비] 3일차
  • [면접준비] 2일차
  • [면접준비] 1일차
ProgYun.
ProgYun.
인내, 일관성, 그리고 꾸준함을 담습니다.
ProgYun.
Perseverance, Consistency, Continuity
ProgYun.
전체
오늘
어제
  • 분류 전체보기
    • 칼럼
    • 일상생활
      • 월별 회고
      • 인생 이야기 (대학생활)
      • 취준
      • 운동인증
      • 제품 사용 후기와 추천
    • 스프링 공부 (인프런 김영한 선생님)
      • 스프링 핵심원리
      • 스프링 MVC 1편
      • 스프링 MVC 2편
    • 면접 준비
    • 전공
      • OOP 정리
      • Design Pattern
    • 스터디
    • English
      • Electronics(Laptop)
      • 1일 1단어

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 확진자
  • 오미크론
  • 코로나
  • 코로나19
  • mason
  • 자존감
  • 해외직구
  • ssd
  • p31
  • 대학생
  • NVME
  • 자가격리
  • 윈도우재설치
  • 하이닉스
  • 포맷
  • 일상
  • 윈도우10
  • 컴공
  • 편입생
  • 피로그래밍

최근 댓글

최근 글

hELLO · Designed By 정상우.
ProgYun.
[면접준비] 4일차
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.