전체 글
-
[스프링] 객체지향 쿼리 심화스프링 2022. 12. 26. 22:35
김영한 자바 ORM 표준 JPA 프로그래밍 - 객체지향 쿼리 심화 1. 벌크 연산 여러 건을 한번에 수정하거나 삭제하는 벌크 연산을 사용하기 // queryString을 변경하면 수정, 삭제, insert도 가능 String queryString = " update Product p " + " set p.price = p.price * 1.1 " + " where p.stockAmount < :stockAmount "; // 조건 : 재고 10개 미만인 모든 상품 10%가격 상승 int resultCount = em.createQuery(queryString) .setParameter("stockAmount",10) .executeUpdate(); // 이 부분이 벌크 연산하는 부분 주의할점 1번. 벌크..
-
[스프링] QueryDsl 정리스프링 2022. 12. 26. 21:56
김영한님의 자바 ORM 표준 JPA 프로그래밍 - queryDsl 정리 부분입니다 간단한 특징 1. 오픈소스 프로젝트다 2. 쿼리를 문자가 아닌 코드로 작성해도 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있다. 1. 라이브러리 추가 필요 // 1. pom.xml 추가 com.mysema.querydsl querydsl-jpa 3.6.3 com.mysema.querydsl querydsl-apt // 쿼리 타입(Q) 생성시 필요한 라이브러리 3.6.3 provided // 2. 쿼리 타입 생성용 플로그인을 pom.xml에 추가 com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.mysema.query.a..
-
[CS] GC 알고리즘CS 2022. 12. 26. 18:02
GC는 heap 영역에서 발생하며, 더 이상 참조되지 않고 있는 객체를 알아서 해제해주는 작업을 말한다. GC 메모리 해제 과정 1. Marking 사용하는지 하지 않는지 ( 참조 or not ) 체크 → 모든 오브젝트 스캔 → 시간 소모 많음 2. Normal Deletion 참조되지 않는 객체를 제거 → 메모리를 반환. 메모리 할당기는 반환되어 비어진 블럭의 참조 위치를 저장해 두었다고 새로운 오브젝트가 선언되면 할당되도록 합니다. 3. Compacting 퍼포먼스 향상 위해 참조x 객체 제거 → 남은 객체 묶기 → 공간 생성 → 메모리 할당 빠름 Generational Garbage Collection 배경 모든 객체 mark, compact하는건 비효율 → 시간이 갈수록 적은 객체만 남는다 ( W..
-
[CS] 기술면접 - JVM 메모리 구조CS 2022. 12. 26. 17:33
JVM JVM = 자바 가상 머신 JAVA 와 OS 사이에서 중개자 역할을 수행하며, JAVA가 OS에 구애 받지 않고 프로그램을 실행할 수 있도록 돕는다. GC를 이용해 메모리 관리도 자동으로 수행하며, 스택 기반으로 작동한다 먼저, 자바 컴파일러에 의해서 자바 소스 코드는 바이트 코드로 전환된다. 이러한 바이트 코드를 JVM이 읽어서 여러 OS에서 프로그램을 실핼할 수 있게 해준다 JVM 메모리 구조 JVM 메모리 구조는 크게 4가지로 분류할 수 있다. GC Execution Engine Class Loader Runtime Data Area GC 힙 메모리 영역에서 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 전확히 알 수 ..
-
[스프링] JPQL 정리스프링 2022. 12. 26. 11:48
JPQL이란? JPA에서 제공하는 메소드 만으로는 섬세한 SQL 쿼리 작성이 어렵다는 문제에서 탄생한, 엔티티 객체를 조회하는 객체지향 쿼리이다. 또한, 테이블을 대상으로 쿼리하는 것이아니라 엔티티 객체를 대상으로 쿼리한다. JPQL 특징 1. 객체지향 쿼리 언어이다. ( 테이블을 대상으로 쿼리 X, 객체 대상으로 쿼리 O ) 2. DB SQL에 의존하지 않는다 3. SQL과 비슷한 문법을 가지며, 결국 JPQL은 SQL로 변환되어서 사용된다 간단한 기본 문법 예시 String jpql = "select m from Member as m where m.name = 'coco'"; 1. 기본 문법과 쿼리 API JPQL은 SELECT, 벌크연산( UPDATE, DELETE ) 사용가능, INSERT는 없읍..
-
[자바] 자바 버전별 특징 간단 정리자바 2022. 12. 23. 23:48
자바는 하위 호환성이 높기에 특정 자바 버전만을 공부할 필요가 없다. JAVA 7 1. Type Inference ( 타입 추론 ) 제네릭 클래스의 생성자 호출 시 필요한 타입 인자를 컴파일러가 추론할 수 있으면, 로 대체 가능 // before version 7 List list = new ArrayList(); // after version 7 List list = new ArrayList(); 2. Switch 문 문자열 허용 3. try-with-resources 기존에는 finally 블록으로 자원 해제하는 코드가 중복, try에서 자원 생성하고 사용해도 finally 블록으로 종료할 필요 없이 try 끝나면 자동 종료 4. 멀티캐치 -> 반복되는 코드 감소가능 5. ForkJoinPoo..
-
[알고리즘] 백준 - 1613 - 역사알고리즘 2022. 12. 1. 17:04
1. 문제 2. 접근 1. n 의 범위가 500이 안되기에 플로이드가 가능함을 알 수 있다. 2. 일반적인 플로이드 - 워셜의 알고리즘으로 풀면 되는데, 체크 할점은 전후 사정이기에 a->b 이냐 b->a 이냐 아니면 모르냐 의 출력 과정만 조심하면 될거 같다 3. 풀이 import sys input = sys.stdin.readline n, k = map(int, input().split()) INF = int(1e9) graph = [[INF] * (n+1) for _ in range(n+1)] for i in range(k): a, b = map(int, input().split()) graph[a][b] = 1 for k in range(1, n+1): graph[k][k] = 0 for k in..
-
[알고리즘] 백준 2458 - 키 순서알고리즘 2022. 12. 1. 14:56
1. 문제 2. 접근 1. 이번 키 문제는 이코테에 비슷한 문제가 있어서 생각을 해내는 것도 풀이를 하는 것도 편했다 ( 이코테 - 정확한 순위 ) 2. n(노드)의 범위가 500이하 이므로 플라워드 - 워셜을 사용할 수 있는 조건을 만족한다 3. 기본적으로 플로이드-워셜은 2차원 배열을 초기화시키고, 같은 노드에서 같은 노드로 옮기면 거리는 0임을 알아야 한다 4. 문제에서 2사람 만을 비교하므로, 거리가 1이다. 5. a -> b or b -> a 이 모두 INF 가 아니라면 count 를 증가하여 result 값을 올려야 한다 3. 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) INF = int(1e9) graph..