2024/07 59

영속성 컨텍스트(Persistence Context)란?

영속성 컨텍스트(Persistence Context)는 엔터프라이즈 자바빈(Enterprise JavaBeans, EJB) 또는 자바 퍼시스턴스 API(Java Persistence API, JPA)와 같은 프레임워크에서 객체를 영속 상태로 관리하는 메커니즘입니다. 간단히 말해, 데이터베이스와 상호작용하는 엔터티 객체(Entity Object)를 관리하는 일종의 '캐시' 역할을 합니다. 이를 통해 애플리케이션은 데이터베이스와 효율적으로 상호작용할 수 있습니다.주요 개념엔터티(Entity): 데이터베이스의 테이블에 대응되는 클래스입니다. 각 인스턴스는 데이터베이스의 한 행(row)을 나타냅니다.영속 상태(Persistent State): 엔터티 객체가 영속성 컨텍스트에 의해 관리되고 있는 상태입니다. 이 ..

기술면접 준비 2024.07.30

가비지 컬렉션(Garbage Collection, GC) 이란?

가비지 컬렉션(Garbage Collection, GC)은 컴퓨터 프로그램에서 더 이상 사용되지 않는 메모리 공간을 자동으로 해제하는 메커니즘입니다. 이는 프로그래머가 명시적으로 메모리를 해제하지 않아도 되도록 하여 메모리 누수를 방지하고, 메모리 관리의 복잡성을 줄여줍니다.주요 개념가비지(Garbage): 더 이상 참조되지 않거나 사용되지 않는 객체를 말합니다. 이러한 객체는 프로그램 실행 중에 필요 없게 된 메모리 공간을 차지합니다.힙 메모리(Heap Memory): 객체들이 동적으로 할당되는 메모리 영역입니다. 가비지 컬렉션은 이 힙 메모리에서 불필요한 객체를 식별하고 해제합니다.루트 세트(Root Set): 여전히 접근 가능한 객체들을 나타내는 기준점입니다. 일반적으로 스택 변수, 전역 변수, 레..

기술면접 준비 2024.07.30

Java가 컴파일 되는 과정은 어떻게 되는지?

답안개발자가 자바 소스코드(.java)를 작성자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드.컴파일된 바이트 코드를 JVM의 클래스로더(Class Loader)에게 전달클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올림실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행인터프리터 : 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행. 하나하나의 실행은 빠르나, 전체적인 실행 속..

기술면접 준비 2024.07.30

JVM 이란 무엇이고 왜 필요한지?

답안JVM은 자바 프로그램이 어느 플랫폼에서든지 동일하게 실행될 수 있도록 해주는 가상 머신 입니다. JVM 덕에 다양한 운영체제와 하드웨어 환경에서 앱을 쉽게 배포하고 실행할 수 있습니다.상세한 이유메모리 및 자원 관리: JVM은 메모리 할당과 해제를 자동으로 관리하여 메모리 누수와 같은 문제를 줄여줍니다. 가비지 컬렉션은 프로그래머가 직접 메모리를 관리해야 하는 부담을 덜어줍니다.보안 강화: JVM은 실행 전에 바이트코드를 검증하고, 클래스 로더를 통해 안전하게 클래스를 로드하여 보안을 강화합니다. 이는 외부 코드가 시스템에 해를 끼치는 것을 방지합니다.성능 최적화: JVM의 JIT 컴파일러와 기타 최적화 기술을 통해 자바 애플리케이션의 실행 속도가 크게 향상됩니다. JIT 컴파일러는 실행 중에 바이..

기술면접 준비 2024.07.30

JPA의 더티 체킹이란 무엇인가?

답안JPA (Java Persistence API)에서 더티 체킹(Dirty Checking)이란 영속성 컨텍스트(persistence context)에 의해 관리되는 엔티티 객체가 변경된 것을 자동으로 감지하여 데이터베이스에 반영하는 기능을 말합니다.더티 체킹을 통해 개발자는 데이터베이스에 변경사항을 직접 수동으로 적용하지 않아도 됩니다.JPA 더티 체킹 동작 (참조)엔티티 로드: JPA는 데이터베이스에서 엔티티를 조회하여 영속성 컨텍스트에 저장엔티티 수정: 애플리케이션 코드에서 엔티티의 속성 값을 변경트랜잭션 종료: 트랜잭션이 종료될 때 JPA는 영속성 컨텍스트에 있는 엔티티의 변경사항을 감지SQL 생성 및 실행: 변경된 엔티티에 대해 필요한 SQL 문(UPDATE, INSERT, DELETE)을 생..

기술면접 준비 2024.07.30

JPA란 무엇인가? JPA는 언제 필요하고 언제 필요하지 않은지?

JPA 란 ? 자바에서 관계형 데이터베이스를 쉽게 사용할 수 있도록 도와주는 ORM(Object-Relational Mapping) 프레임워크  JPA가 필요한 경우복잡한 데이터 매핑: 데이터베이스와 객체 간의 매핑이 복잡한 경우 JPA로 처리생산성 향상: 개발 생산성을 높여주고, 데이터베이스 관련 코드를 자동으로 생성유지보수성: 엔터프라이즈 애플리케이션에서 데이터베이스 변경에 따른 코드 수정이 간편표준화: 여러 데이터베이스 제품 간에 독립적인 코드를 작성 가능JPA가 필요하지 않은 경우:단순한 데이터 접근: 데이터베이스 사용이 간단할때성능 최적화 필요: 특정 상황에서는 JPA가 직접 작성한 SQL보다 성능이 떨어질 수 있음작은 프로젝트에서 JPA를 사용하면 오히려 복잡성이 증가

기술면접 준비 2024.07.30

Override 와 Overload란?

Override부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미부모 클래스의 메서드를 상속받은 자식 클래스에서 동일한 이름과 매개변수를 가진 메서드를 다시 정의하여 다르게 동작하게 함Overload같은 이름을 가진 메서드를 여러 개 정의하되, 매개변수의 타입이나 개수를 다르게 하는 것하나의 메서드 이름으로 여러 기능을 제공

기술면접 준비 2024.07.30

Call by reference란 무엇이고 보통 어떻게 쓰이나요?

답안Call by Reference는 함수 호출 시 인자로 전달된 변수의 주소(reference)를 넘겨주는 방식을 의미합니다.Call by Reference는 보통 이럴때 쓰입니다.큰 데이터를 함수로 전달할 때, 메모리 절약을 위해(데이터 복사를 피함)함수가 원래 데이터에 직접 접근하여 값을 수정할 경우, 별도로 값을 반환하지 않음으로서 코드 간결/효율Call by value?복사된 값을 인자로 넘겨 매개변수로 전달복사하여 처리하기 때문에 안전, 원래의 값이 보존 / 하지만 메모리 사용량 증가ex) 원시값

기술면접 준비 2024.07.30

백준 코딩테스트 1697 숨바꼭질

https://www.acmicpc.net/problem/1697 BFS(너비 우선 탐색)을 사용하여 수빈이가 동생을 찾는 최소 시간을 구하는 문제from collections import dequedef bfs(start, target): # 최대 범위 설정 (문제 조건에서 수빈이와 동생의 위치는 0 이상 100000 이하) max_range = 100000 # 방문 여부 및 시간을 저장하는 리스트 visited = [0] * (max_range + 1) queue = deque([start]) while queue: current = queue.popleft() # 큐에서 현재 위치를 꺼냄 if current ==..

Algorithm/백준 2024.07.30

항해99 리부트코스 알고리즘 2주 5일차 백준 10815 숫자 카드

https://www.acmicpc.net/problem/10815 def main(): import sys input = sys.stdin.read data = input().split() n = int(data[0]) # 숫자 카드의 개수 cards = set(map(int, data[1:n + 1])) # 숫자 카드 목록을 집합으로 저장 m = int(data[n + 1]) # 확인할 숫자의 개수 targets = list(map(int, data[n + 2:])) # 확인할 숫자 목록 result = [] for target in targets: if target in cards: resu..

Algorithm/백준 2024.07.29