
JVM은 시작할 때 모듈과 클래스 로더의 바인딩을 미리 설정한다.아래는 각 클래스로더의 대표 모듈이다.부트스트랩 클래스로더 모듈java.base, java.lang, java.util플랫폼 클래스로더 모듈java.sql, java.xml, java.desktop애플리케

Primitive type은 값 자체를 저장하는 타입이다.Primitive type은 아래 표와 같다.Primitive type 특징 스택에 저장된다.null 값을 가질 수 없다.Reference type은 객체가 저장된 메모리 주소(참조값)를 저장하는 타입이다.Ref

String literal은 "abc" 문자열 그 자체다.JVM은 문자열 리터럴을 힙 영역 안에 있는 String Constant Pool에 저장한다.특징동일한 문자열 리터럴은 하나만 생성되고, 여러 변수가 이를 공유한다.ex)위와 같은 코드가 있으면 "abc" 객체는

Call by value는 메서드 호출 시 변수의 값을 복사해서 전달하는 방식이다.인자는 지역 변수이기 때문에 값이 변경되도 외부에 영향을 주지 않는다.Call by reference는 메서드 호출 시 원본 변수의 주소를 전달하는 방식이다.함수 내부에서 값을 변경하면
실수는 소수점을 포함한 값을 표현하기 위한 데이터 타입이다. 실수형 데이터 타입은 소수점을 포함한 값을 표현할 수 있지만, 오차가 발생할 수 있다.그래서 실수형 데이터 타입은 정밀도가 중요하다.위 이미지에서 유효자릿수가 정밀도를 결정한다.정밀도는 몇자리까지 오차없이 표
== 연산자는 Primitive type은 값을 비교하고 Reference type은 주소를 비교한다.ex)첫 번째의 경우에는 primitive type이니까 값을 비교해서 둘 다 10이니까 true이고,두 번째의 경우에는 reference type이니까 참조값을 비교
static은 클래스에 속하고 객체 생성 없이 사용 가능한 멤버다. static 키워드를 사용해서 static변수와 static메서드를 만들 수 있다. 이것들을 다른말로 정적필드와 정적 메서드라고도 하고 이 둘을 합쳐서 정적 멤버라고 한다.인스턴스와 독립적이게 클래스
hashCode는 객체를 빠르게 분류하기 위한 정수값이다.자바의 모든 객체는 Object 클래스를 상속받으므로 hashCode() 메서드를 가지고 있다.hashCode는 HashMap, HashSet 등 해시 기반 자료구조의 성능을 위해 존재한다.hashCode를 사용

예외 종류는 다음과 같이 3가지가 있다.checked exceptionerrorruntime exception 혹은 unchecked exception에러는 자바 프로그램 밖에서 발생한 예외를 말한다.ex) 서버의 디스크가 고장 났다던지, 메인보드 맛이 가서 자바 프로
synchronized는 Java에서 공유 자원에 대한 동시 접근을 제어하기 위한 동기화 메커니즘이다.위 코드는 count를 읽고 1을 더하고 다시 사용하는 코드다.→ 여러 스레드가 동시에 실행하면 값이 깨진다.한 스레드가 flag = true로 바꿔도 다른 스레드가
CAS는 락 없이 동시성을 제어하기 위한 원자적 연산이다.메모리의 값이 내가 기대한 값과 같다면, 그때만 새로운 값으로 바꾼다.memory: 공유 변수의 실제 메모리 값expected: 내가 예상한 기존 값newValue: 바꾸고 싶은 값memory랑 expected랑
volatile > volatile은 변수의 값을 항상 메인 메모리에서 읽고 쓰도록 강제하는 키워드다. volatile이 해결하는 문제 (가시성) 멀티스레드 환경에서 각 스레드는 성능을 위해 메인 메모리의 값을 CPU 캐시나 레지스터에 복사해서 사용한다. 이로 인해
싱글톤(Singleton) 패턴은 어떤 클래스의 인스턴스를 하나만 생성하고, 그 인스턴스에 전역적으로 접근할 수 있도록 하는 디자인 패턴이다.싱글톤을 사용하면 설정 정보, 로그 관리자, 캐시 관리자, 데이터베이스 커넥션 풀처럼 여러 개가 존재할 경우 시스템의 일관성이
Process는 실행중인 프로그램이다.운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분한다. 이를 위해 운영체제는 프로세스 제어 블록을 이용한다.프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료구조다.
interface와 abstract class는 추상화를 구현하는 방법이다. 그래서 interface와 abstract class를 알아보기 전에 추상화가 뭔지부터 알아보려고한다. 추상화 > 추상화는 객체의 공통된 핵심 역할과 기능을 정의하는 객체지향의 특징이다.

시간 복잡도는 특정 크기의 입력을 기준으로 할 때 필요한 연산의 횟수를 나타낸다.모든 OS, IDE, 플랫폼에서 동일한 결과가 나오지 않기 때문에 연산의 횟수를 센다.공간 복잡도는 프로그램 실행과 완료에 얼마나 많은 공간(메모리)이 필요한지를 나타낸다.공간복잡도는 입력
ArrayList는 배열 기반의 동적 리스트다.ArrayList 내부 필드elementData: 실제 요소들을 저장하는 Object 배열 (transient 키워드는 직렬화 시 배열 전체가 아닌 실제 사용 중인 요소만 직렬화하기 위해서 사용한다.)size: 실제 저장된
HashMap은 해시 테이블 기반으로 키-값 쌍을 저장하는 Map 인터페이스의 구현 클래스다.내부적으로 Node<K,V>\[] table이라는 배열을 가지고 있고, 이 배열의 각 요소를 버킷이라고 한다.아래 필드는 HashMap의 정체성과 성능을 결정하는 최소 요
System.out.println()은 내부적으로 동기화되어 있다. 멀티스레드 환경에서 여러 스레드가 동시에 출력을 시도하면각 스레드가 락(lock)을 획득하기 위해 대기고성능이 요구되는 애플리케이션에서 병목 현상 발생TPS(Transactions Per Second)
Stream은 데이터의 흐름, 즉 데이터가 이동하는 통로다.Stream은 데이터를 순차적으로 읽거나 쓰는 단방향 데이터 흐름을 추상화한 개념이다.단방향성: 읽기(Input) 또는 쓰기(Output) 중 하나만 가능순차적 접근: 데이터를 처음부터 끝까지 순서대로 처리실시