전체 글 299

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

항해99 리부트코스 알고리즘 2주 5일차 백준 2606 바이러스

https://www.acmicpc.net/problem/2606 def dfs(graph, start, visited): stack = [start] # 스택에 시작 노드를 추가 count = 0 # 방문한 노드 수를 세기 위한 변수 while stack: node = stack.pop() # 스택에서 노드를 꺼냄 if not visited[node]: # 노드가 방문되지 않았다면 visited[node] = True # 방문 처리 count += 1 # 방문한 노드 수 증가 stack.extend(graph[node]) # 노드에 연결된 노드들을 스택에 추가 return..

Algorithm/백준 2024.07.29

항해99 리부트코스 알고리즘 2주 5일차 백준 18352 특정 거리의 도시 찾기

https://www.acmicpc.net/problem/18352 from collections import dequedef find_cities_at_distance(n, m, k, x, roads): # 그래프 초기화 graph = [[] for _ in range(n + 1)] for road in roads: a, b = road graph[a].append(b) # 도로 정보로 그래프 구축 # 거리 저장 배열 초기화 distance = [-1] * (n + 1) distance[x] = 0 # 시작 도시의 거리는 0으로 설정 # BFS를 위한 큐 초기화 queue = deque([x]) while..

Algorithm/백준 2024.07.29

항해99 리부트코스 알고리즘 2주 5일차 백준 7562 나이트의 이동

https://www.acmicpc.net/problem/7562 from collections import dequedef bfs(start, end, l): # 나이트의 이동 방향 8가지 정의 directions = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)] # 방문 여부를 저장하는 2차원 리스트 visited = [[False] * l for _ in range(l)] # BFS를 위한 큐, 초기 위치와 이동 횟수를 함께 저장 queue = deque([(start[0], start[1], 0)]) # (x, y, 이동 횟수) while queue: x,..

Algorithm/백준 2024.07.29