전체 글
-
문자열알고리즘 2025. 4. 17. 22:57
문자열 찾기 1) longest-substring-without-repeating-characters문제 : https://leetcode.com/problems/longest-substring-without-repeating-characters/ 1. 슬라이딩 윈도우 반복되지 않는 가장 긴 문자열의 길이를 반환하는 문제다. (풀고 보니 슬라이딩 윈도우와 비슷한 방식으로 풀었다.)n = 문자열길이, k = 현재 윈도우 길이 (최대 n)이라고 가정할때, temp.contains(), temp.indexOf(), temp.substring(...) + s[i] 모두 O(k)의 시간복잡도를 갖고, 이 연산이 최대 n번 반복될 수 있다. 시간복잡도 : O(n^2) 문자열 연산이 계속 일어나므로 새로운 문자열이..
-
행렬 문제알고리즘 2025. 4. 11. 00:20
행렬 채우기 1) set-matrix-zeroes문제 : https://leetcode.com/problems/set-matrix-zeroes/0이 표시된 행렬의 열과 행을 모두 0으로 바꾸는 문제이다. 1. 모든 0위치를 찾아 저장하고 해당 열과 행을 전체 0으로 설정하는 방법 시간 복잡도 : O(m x n) + z (0의 갯수) * (O(m+n)공간 복잡도 : 최대 O(m x n) (0의 갯수를 따로 저장함)class Solution { fun setZeroes(matrix: Array): Unit { if(matrix.size == 0) return val zeros = mutableListOf>() val v = matrix.size ..
-
연결리스트 문제알고리즘 2025. 4. 10. 00:02
Floyd’s Cycle Detection Algorithm - 투포인터 문제 플로이드의 사이클 탐지 알고리즘이란 연결 리스트에서 사이클을 감지하는 문제에서 자주 사용되는 알고리즘으로 토끼와 거북이 알고리즘으로도 불린다. 두개의 포인터를 사용해서 리스트를 탐색하는데, 하나의 포인터는 거북이처럼 한칸씩 이동하고, 나머지 포인터는 토끼처럼 m칸씩 움직인다. (2칸) 만약 사이클이 없다면, 빠른 포인터는 끝(fast.next == null)에 도달하고, 사이클이 존재한다면 느린 포인터를 결국 따라잡게 된다. (slow == fast) 시간 복잡도 : O(n)공간 복잡도 : O(1) 1) linked-list-cycle 문제 : https://leetcode.com/problems/linked-list-c..
-
Delete 배치 처리 (feat. deleteAllInbatch() vs batchUpdate() + rewriteBatchedStatements=true vs in 절)Spring 2025. 4. 8. 20:58
이전에 bulk insert에 대해서 찾아보았다. ↓https://dodop-blog.tistory.com/498 Spring JPA의 save() vs saveAll() vs bulk insert() (feat. db client)이번에 면허 재검증 프로세스를 구성하면서 면허 검증 로깅에 관한 작업을 구성하게 되었다. 면허 검증에는 배치로 검증하는 과정이 있기 떄문에, 로깅도 한번에 저장되어 DB 팀에게 어느정도dodop-blog.tistory.com 그렇다면 다량의 데이터를 delete 처리할 때는 어떨까? 1. jpa의 delete() 메서드 활용 가장 먼저 for문을 이용해서 delete()메서드를 연속호출하여 인서트를 수행해보자. @Test fun delete() { ..
-
Spring JPA의 save() vs saveAll() vs bulk insert() (feat. db client)Spring 2025. 4. 8. 01:37
이번에 면허 재검증 프로세스를 구성하면서 면허 검증 로깅에 관한 작업을 구성하게 되었다. 면허 검증에는 배치로 검증하는 과정이 있기 떄문에, 로깅도 한번에 저장되어 DB 팀에게 어느정도의 데이터를 한번에 저장할 수 있는지 문의드렸다. 단건 수행이 아닌 bulk insert로 하는 경우 더 많은 양의 데이터를 저장할 수 있다는 답변을 받고 해당 내용을 구현하였다. 작업 환경에서는 id의 채번 규칙을 auth_increment 전략을 사용하고 있었다. JPA auth_increment ID 채번 방식 id의 채번 규칙을 auth_increment 전략을 사용하면 bulk insert가 가능할까? 해당 전략을 사용하게 되면, JPA규칙에 의해서 bulk insert는 사용할 수 없게 된다. auto_i..
-
그래프(DFS, BFS) 문제알고리즘 2025. 3. 11. 22:31
Clone Grpah 문제 링크 : https://leetcode.com/problems/clone-graph/description/dfs를 이용해서 deepCopy를 수행하는 문제다. /** * Definition for a Node. * class Node(var `val`: Int) { * var neighbors: ArrayList = ArrayList() * } */class Solution { fun cloneGraph(node: Node?): Node? { if(node == null) { return null } val map = mutableMapOf() return dfs(node, map) } ..
-
책 스터디 <JVM 밑바닥까지 파헤치기> - 2장 자동 메모리 관리JAVA/Java 2025. 1. 22. 23:47
자바 메모리 영역과 메모리 오버플로자바 개발자는 가상 머신이 제공하는 자동 메모리 관리 메커니즘 덕에 메모리 할당과 해제를 짝지어 코딩하지 않아도 메모리 누수나 오버 플로 문제를 거의 겪지 않음요즘은 C++만큼 성능을 낼 수 있고 메모리를 안전하게 관리할 수 있는 Rust도 있음 2.2 런타임 데이터 영역https://medium.com/@ervinitraj/all-about-jvm-java-virtual-machine-bdeecd6eaa1dhttps://igorski.co/all-you-need-to-know-as-a-java-developer-about-the-jvm-and-gc/자바 프로그램을 실행하는 동안 필요한 메모리 데이터 영역각각의 영역들은 각각의 목적과 생성 / 삭제 시점이 있음스레드 공..
-
SpringData JPA를 사용하는 환경에서 multi-database (feat. master/slave구분, querydsl) 구성하기Spring 2025. 1. 21. 00:35
이번에 면허 재검증 프로세스를 구현하면서, multi database 환경을 구성해야 하는 작업을 수행했다. 작업하면서 구성한 내용을 개인화해서 정리해본다! 구현 환경 및 dependency 설정 작업을 구현해야 하는 환경은 Kotlin, SpringBoot, JPA, Mysql 환경이었다. 두가지의 데이터베이스를 다룰때 모두 JPA를 사용한다. 디폴트 데이터베이스와 추가로 연결할 데이터베이스를 지정한다. 여기서는 디폴트로 사용할 데이터베이스는 DefaultDatabase, 추가로 사용할 데이터베이스는 ADatabase라고 지정한다. 추가한 dependency는 다음과 같다. plugins { kotlin("jvm") version "1.9.25" kotlin("plugin.spring") v..