백엔드 멘토링

자바의 신 - 복습 정리(2)

piedra_de_flor 2023. 9. 23. 17:35

- 자바의 동작 과정

  1. 자바 코드를 작성한다 -> .java 파일
  2. Java Compiler(javac)가 .java파일을 .class파일로 컴파일 한다.
  3. .class 파일들이 JVM에 들어가 Class Loader가 클래스들을 JVM에 올린다.
  4. JVM에 있는 class 파일들이 Interpreter와 JIT Compiler에 의해 해석된다.
  5. 해석된 바이트 코드들을 Runtime Data Area로 옮겨져 실질적인 실행이 된다.


- JIT Complier

= java JVM에 있는 컴파일러로 자주 사용되는 메서드나 클래스를 캐시에 저장시켰다가 필요할 때 컴파일 해서 준다.
    - warm-up

= 성능 확인 또는 향상을 위해 JIT 컴파일러의 캐시에 원하는 데이터가 캐싱되도록 유도하는 것을 말함


- 쓰레드? 프로세스?

쓰레드란? = 쓰레드란 프로세스 내에서의 작업의 흐름 단위를 뜻한다.

프로세스란? = 프로세스란 동작중인 프로그램을 뜻하는 동적인 개념이다.


- Collection이란?
    - Collection을 사용하는 이유?

    = 크기가 유동적이지 않은 배열의 단점을 보완하기 위
    - List
        - arraylist, linkedlist, vector, stack
    - Set
        - TreeSet, HashSet, LinkedSet
    - Map
        - hashmap, treemap

 

- System.out.println ****메소드는 현업에서 절대 쓰지 말라고하는 메소드인데 그 이유가 무엇일까요?

= 로그 기능 불가능 , 휘발성, synchronized로 선언되어 있기 때문에 오버헤드 발생 ( 성능 저하)


- int vs Integer 차이

int = 기본자료형, 산술 연산 가능, null  불가

Integer = 참조자료형, 산술 연산 불가능 , null가능

- 기본 자료형을 객체로 다루어야 할 때 Wrapper 클래스로써의 역할


- **interface vs abstract class**

1. 목적의 차이 interface : 설계의 목적 / abstract : 확장의 목적

2. 다중 상속 가능 불가능

 

- 동기화란?

동기화란 프로세스 또는 스레드들이 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하는 것


- synchronized 동작 원리

lock을 걸어 다른 스레드가 접근하지 못하게 함

 

- **싱글 스레드로 접근한다는 가정하에선 StringBuilder 와 StringBuffer 의 성능이 똑같을까요?**

= 싱글 스레드 환경에서는 StringBuilder와 StringBuffer의 성능은 유사합니다. 두 클래스 모두 문자열을 조작하는 데 사용되며, StringBuilder는 스레드 안전하지 않고, StringBuffer는 스레드 안전합니다. 따라서 단일 스레드에서는 StringBuilder가 약간 더 빠를 수 있습니다.

 

- Junit이 무엇일까?

= JUnit은 자바 언어를 위한 단위 테스트 프레임워크입니다. 소프트웨어의 각 구성 요소(클래스 또는 메서드)를 테스트하는 데 사용되며, 테스트 케이스를 작성하고 실행하는 데 도움을 줍니다.


- 단위 테스트란 무엇인가

= 단위 테스트는 소프트웨어 개발에서 작은 부분(단위)을 개별적으로 테스트하는 과정입니다. 주로 클래스 또는 메서드 수준에서 코드의 동작을 확인하고 예상된 결과와 실제 결과를 비교하여 코드의 정확성을 검증하는 것을 의미합니다.


- private static

= private static 멤버는 클래스 내에서만 접근 가능하며, 인스턴스 생성과 관계없이 클래스 수준에서 사용됩니다. 예를 들어, private static 메서드는 클래스의 인스턴스를 만들지 않고도 호출할 수 있습니다.

 

- 람다식, 함수형 인터페이스
    - BiFunction

= 람다식은 익명 함수를 작성하는 방법으로, 주로 함수형 인터페이스의 인스턴스를 생성하기 위해 사용됩니다. 함수형 인터페이스는 하나의 추상 메서드를 가진 인터페이스를 의미하며, 람다식은 이 추상 메서드의 구현을 제공합니다. BiFunction은 두 개의 입력 매개변수를 받아들이고 결과를 생성하는 함수형 인터페이스입니다.


- IllegalArgumentException

= IllegalArgumentException은 메서드에 전달된 인수가 유효하지 않은 경우 발생하는 예외입니다. 일반적으로 메서드의 매개변수 유효성을 검사할 때 사용됩니다.


- http가 뭘까? https가 뭘까?

= HTTP(하이퍼텍스트 전송 프로토콜)는 웹에서 정보를 전송하는 데 사용되는 프로토콜로, 보안 기능이 부족합니다. HTTPS(하이퍼텍스트 전송 프로토콜 보안)는 HTTP의 보안 버전으로 데이터를 암호화하여 보호합니다.


- 포트

= 포트는 컴퓨터에서 특정 프로세스와 통신하기 위한 엔드포인트를 식별하는 데 사용되는 숫자입니다. 네트워크 패킷이 특정 포트로 전송되면 해당 포트에서 실행 중인 서비스로 전달됩니다.

 

- context switching

= Context Switching은 스레드 간 혹은 프로세스간 전환 시 현재 스레드의 상태를 저장하고 다음 스레드의 상태를 복원하는 작업을 말합니다. 이 작업은 스케줄러에 의해 수행되며 스레드 간 공유 자원에 대한 경합을 조정합니다.

 

- **mutex**

= synchronized와 같이 Mutex는 상호 배제 락(Mutual Exclusion Lock)의 약어로, 공유 자원에 대한 동시 접근을 막기 위해 사용되는 동기화 메커니즘입니다.


- **spin lock**

= Spin Lock은 락을 얻을 때까지 계속 반복적으로 시도하는 락 메커니즘입니다. 다른 스레드가 락을 해제할 때까지 스레드가 무한히 대기합니다.


- ThreadLocal

= ThreadLocal은 스레드별로 독립적인 데이터를 저장하고 관리하는데 사용되는 클래스입니다. 각 스레드는 ThreadLocal 변수를 사용하여 자신만의 데이터를 유지하고 접근할 수 있습니다.