본문 바로가기
반응형

전체 글163

[나혼자공부] 4주차 복습-1 으아아아 뭔가 많아아아아오늘의 공부 내용내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...! 스레드 생명주기를 설명해 주세요.내 답변: 스레드 생명주기는 다섯가지 상태로 나눕니다. 첫번째는 New일때 인데요 스레드 객체가 생성되었지만 아직 시작되지 않은 상태입니다. start() 메소드가 호출되 면 Runnable상태로 들어가는데요 실행 대기열에 등록되고 실행 가능한 상태입니다. 이후에는 JVM의 스케쥴러에 의해 CPU를 할당 받으면 Running 상태로 들어갑니다. 실행중 잠시 멈춰야하는 상황이 발생하면 Blocked 상태가 됩니다. 스레드의 실행이 끝나면 Terminated 상태가 됩니다.스레드 풀의 스레드들이 작업을 처리하.. 2024. 12. 25.
[JAVA] 불변객체, 가변객 뭔지는 알겠는데 자세히 좀 더 알아보자 음 String은 불변이고 StringBuffer 랑 StringBuilder는 가변이래 알겠어 알겠는데 그래서 구조랑 뭐 데이터 할때 어케하는건데!?일단 정의 부터 알아보자!불변 객체란?객체가 한 번 생성되면 그 상태를 변경할 수 없는 객체이다.대표적인 예: String, Integer, LocalDate 등.불변 객체의 장점안정성과 스레드 안전성상태가 변하지 않으므로 여러 스레드에서 동시에 사용해도 안전하다.추가적인 동기화 없이 읽기 전용 데이터로 활용할 수 있다.예: String은 여러 스레드에서 공유될 때 안전하게 사용할 수 있음.설계상태가 변하지 않으므로 객체의 상태를 추적하거나 변경을 고려할 필요가 없다.디버깅과 유지보수가 더 쉬워진다.해시 기반 컬렉션과의 호환성HashMap이나 HashSet.. 2024. 12. 25.
[JAVA] LinkedList 알꺼같으면서도 모르겠다. 면접에서 가장 자주 나오는 개념인 LinkedList인데... 아는거 같으면서도 잘 모르겠는 부분이 많아서 질문 받아서 대답하면 어버버버 한다... 오늘 해결해보자!오늘의 한줄 요약: LinkedList 에서 데이터를 찾는 방법은 순차 탐색(Sequential Search)을 기반으로 이루어진다!LinkedList의 구조 이해LinkedList는 노드(Node)들의 연결로 이루어져있다.각 노드는 두가지 요소를 가지고 있음!데이터(Data): 노드가 저장하고 있는 실제 값.포인터(Next): 다음 노드를 가리키는 참조데이터를 10 -> 20 -> 30 순서로 저장한 LinkedList는 아래와 같다아:[10 | Next] -> [20 | Next] -> [30 | Null]Head: List의 시작 노드를.. 2024. 12. 23.
[JAVA] 타입 캐스팅 시 발생하는 오버플로우? Java에서는 타입 캐스팅을 수행할 때, 특히 정수형 데이터를 더 작은 크기의 정수형으로 캐스팅할 때 오버플로우가 발생할 수 있다.JVM 내부에서는 이 오버플로우를 특별히 에러로 처리하지 않고, 단순히 값의 하위 비트만 취하는 방식으로 처리한다! 처리 과정비트 자르기더 큰 정수형 데이터를 더 작은 정수형으로 캐스팅하면, 상위 비트를 잘라내고 결과적으로 잘린 하위 비트만 새로운 값으로 사용한다.예를 들어, int를 byte로 변환할 때, int의 하위 8비트만 유지된다.값의 손실상위 비트를 잘라내는 과정에서 정보가 손실될 수 있다.오버플로우나 언더블로우와 관계없이 자바는 이를 단순히 값 변환으로 간주한다.2의 보수 연산 규칙 적용정수는 자바에서 2의 보수 표현을 사용하므로, 하위 비트를 유지한 결과가 2의.. 2024. 12. 22.
[나혼자공부] 3주차 복습-2 으아ㅏㅏ 너무 많아ㅏㅏ 공부할껀 왜 매일매일 생기고 왜이렇게 많은걸까 그래서 행복해!오늘의 공부 내용스트링의 각 캐릭터를 어떻게 개별적으로 접근할 수 있나내답변: String은 객 문자를 char[]로 저장하므로 각 문자에 개별적으로 접근할 수 있습니다. java에서는 charAt() 메서드를 제공하고있고 이 메소드를 사용해서 각 문자를 가져올 수 있습니다.  java9 이후로는 byte[]배열 저장으로 변경하였다. new String으로 생성된 객체와 스트링 리터럴의 비교 시, equals와 == 연산자의 동작 차이내답변: new String으로 생성된 객체는 스트링 풀에 있는 객체 여부 상관없이 Heap 영역에 새로운 객체를 생성하므로 객체의 참조 을 비교하는 == 연산자 사용시는 false가 나오고.. 2024. 12. 20.
[나혼자공부] 3주차 복습-1 벌써 3주차가 다되어간다. 시간 정말 빨리가네... 더 !! 더 열심히!! 오늘의 공부 내용내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...!예외와 에러의 차이점은 무엇인가? 내 답변: 에러는 시스템 수준에서 발생하는 문제이고 복구가 어려우며 프로그램이 중지 될 수 있습니다. OutOfMemory, StackOverflowError 같은 에러가 있으며 예외는 개발자가 catch라는 구문을 사용하여 사전에 처리하여 프로그램을 계속 실행할 수 있도록 할 수 있습니다. 예외에는 checked Exception과 unchecked Exception이 있습니다.Checked Exception과 Unchecked Exception의 주요.. 2024. 12. 19.
[STUDY] 2주차 [Q]조건문은 기계어로 번역했을때 어떻게 생겼을까요?메소드 오버로딩을 자바에서 내부 구현을 어떻게 할까요?다형성이 코드를 잘 짜는데 어떻게 도움이 될까요?추상 클래스는 어떤 상황에서 사용하게 될까요?[A]조건문은 기계어로 번역했을때 어떻게 생겼을까요?자바의 조건문(if, switch)은 기계어로 변환할 때 주로 비교 연산과 분기 명령으로 나타난다.예를 들어, 자바코드if (a > b) { doSomething();} else { doSomethingElse();}컴파일 후 저수준 언어로 변환된 모습 (어셈블리 수준)CMP a, b ; a와 b를 비교JLE ELSE_LABEL ; a  여기서 CMP는 비교 명령어, JLE는 조건에 따라 실행 흐름을 변경하는 분기 명령어이다. 깊게 생각.. 2024. 12. 16.
[STUDY] 1주차 으어어어 스터디 시작이다!힘내자![Q]자바는 왜 컴파일러가 기계어를 만들어내는 대신 JVM 을 통해서 중간 형태(.class)의 명령어들을 실행할까?객체지향의 4대 원리를 조사해봅시다.힙영역과 스택영역의 차이는 무엇일까요? 스택 영역이라는 이름은 어디에서 유래한걸까요?초기화가 되지 않은 String 타입의 변수에서 값을 읽어오면 어떻게 될까요? NullPointerException 은 어떤 상황에 발생할까요?연산자들의 우선순위에 대해서 알아봅시다.[A]1. 자바는 왜 컴파일러가 기계어를 만들어내는 대신 JVM 을 통해서 중간 형태(.class)의 명령어들을 실행할까?플랫폼 독립성 (Write Once, Run Anywhere)자바의 주요 설계 목표는 한 번 작성한 코드를 여러 플랫폼에서 실행할 수 있다는.. 2024. 12. 6.
[JVM 밑바닥] 7장 클래스 로딩 메커니즘 공부시작!1. 클래스 로딩 시점JVM은 클래스를 "필요한 순간"에 로딩합니다. 정확한 시점은 아래와 같습니다:클래스를 사용할 때: 예를 들어, new 키워드로 객체를 생성하거나, 클래스의 정적 메서드/변수를 호출할 때.Class.forName() 호출 시: 리플렉션을 통해 클래스를 로드할 때.JVM의 기본 실행: JVM이 시작되면서 메인 클래스를 로드합니다.2. 클래스 로딩 처리 과정 (3단계)클래스 로딩은 크게 로딩 → 링크 → 초기화의 3단계로 나뉩니다.(1) 로딩 (Loading)클래스 파일(.class)을 찾고 읽어들여 메모리에 로드합니다.이 작업은 JVM 내의 클래스 로더(ClassLoader)가 담당합니다.메서드 영역에 클래스 정보를 저장 합니다.클래스 객체(java.lang.Class)를 생.. 2024. 11. 17.
반응형