분류 전체보기
-
트랜잭션 격리 레벨 정리DB 2021. 4. 3. 18:14
평소에 쓰고는 있지만, 머리속에서 깔끔하게 정리가 안되니 설명하기가 힘든것 같다. 이번 기회에 정리를! 트랜잭션 격리 레벨에는 4가지가 있다. READ-UNCOMMITED / READ-COMMITED / REPEATABLE-READ / SERIALIZABLE 1 -> 4로 갈수록 데이터 정합성이 높아지면서, 동시성이 떨어진다 1.READ-UNCOMMITED 커밋전의 데이터 변경 내용을 다른 트랜잭션에서 읽는 것을 허용함 주의점 : DIRTY-READ 발생, NON-REAPEATABLE-READ 발생 2.READ-COMMITED 커밋이 완료된 트랜잭션의 변경사항만 , 다른 트랜잭션에서 조회가 가능함 주의점 : NON-REAPEATABLE-READ 발생 , PANTOM-READ 발생 3.REPEATABLE-..
-
[QueryDSL] 데이터 존재 유무 체크로직 성능 테스트JPA 2021. 3. 25. 00:23
요약 : 데이터 존재 유무 체크 로직 작성시, fetchCount()가 아닌, fetchFirst()를 쓰자! 주의사항 : fetchFirst() 수행시, 데이터가 없으면 0을 반환할 줄 알았는대, 0이 아닌 NULL을 반환했다. NULL체크 로직 필수! 테스트 시나리오 : H2DB를 사용했고, 약10만건의 데이터를 insert후, 특정 데이터가 존재하는지 확인! 결과 : fetchCount 소요시간 : 약 38초, fetchFirst() 소요시간 : 약 31초. 실행쿼리를 보면 fetchCount()는 count() 쿼리를 사용하였고, fetchFirst는 limit 1을 사용하였다. 전체컬럼을 스캔하는 count()보다야 limit 1이 훨씬 빠르니, 이러한 결과가 나왔다. /** * 데이터 존재 유..
-
[hackerRank] primChecker알고리즘 2021. 2. 28. 19:48
문제 www.hackerrank.com/challenges/prime-checker/problem 접근방법 - 소수를 판별해 내는 문제이다 - 1보다 크고, 1과 자신외의 약수를 가지지 않는 수 ex) 2,3,5,7.. - 사람들이 푼걸 보니, BigInteger.valueOf(number).isProbablePrime() 을 많이 쓰기도 하는것 같다 . package com.cm; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; /** * ht..
-
[hackerRank] JavaComparator알고리즘 2021. 2. 25. 22:27
문제 www.hackerrank.com/challenges/java-comparator/problem 접근방법 - 점수 내림차순 + 동점시 이름 알파벳순으로 구현하면됨 - 단순 기본 정렬이라면, compareable을 사용해도되지만, 위와 같은 복합적인 조건이라면 comparetor를 구현하면 된다 package com.cm; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; /** * https://www.hackerrank.com/challenges/java-comparator/problem */ public class JavaComparator { class Checker implements Comparat..
-
myBatis LocalDate , LocalDatetime 바인딩하는 법Spring 2020. 11. 15. 19:48
mybatis를 사용하면서 Request Dto의 날짜 필드를 매번 String으로 받아서 사용했었다. 왜냐하면 mybatis에서 #{regDate} or #{regDateTime}이 같이 바인딩이 안되기 때문이었다. 아래와 같은 에러 발생 Field error in object 'testModel' on field 'regDate': rejected value [2020-01-01]; codes [typeMismatch.testModel.regDate,typeMismatch.regDate,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolv..
-
[hackerRank] JAVA Stack알고리즘 2020. 10. 26. 23:19
문제 www.hackerrank.com/challenges/java-stack/problem 접근방법 - 괄호의 짝이 맞으면 되는 문제 - stack의 pop을 이해한다면 충분히 쉬운 문제 - 좀 더 코드를 줄여보자면 push하는 부분을 else로 빼서하는 것도 코드를 줄일 수 있음 개인적으로 push하는 부분을 '(', '{', '[' 를 명확하게 써주는게 더좋은거 같아서 코드를 풀어서 씀 코드 package com.cm; import java.util.Scanner; import java.util.Stack; /** * https://www.hackerrank.com/challenges/java-stack/problem */ public class JavaStack { public JavaStack(..
-
[hackerRank] StringReverse알고리즘 2020. 10. 6. 23:40
문제 www.hackerrank.com/challenges/java-string-reverse/ 접근방법 쉽게 생각하면, 아주 쉽게 풀수 있는 문제였음, (2가지 방식으로 풀었다.) 입력받은 문자열을 뒤집어서 입력한 문자열과 같은지만 체크하면 되는 문제. solution1의 경우 StringBuilder 클래스의 reverse()메소드를 이용하면 쉽게 뒤집을수 있다. 하지만 solution1의 문제점은 최적화된 코드는 아니라는 것. 왜냐하면, 가장 처음 문자와, 가장 끝에 있는 문자가 다르다면 굳이 전부 뒤집을 필요는 없음. 그래서 solution2에서는 맨앞, 맨뒤를 각각 비교하다 중간에 다르면 바로 비교를 종료시켰다. 채점 속도도 solution2가 solution1에 비해 훨씬 빨랐다. 코드 imp..
-
[hackerRank] datatypes알고리즘 2020. 9. 29. 18:02
문제https://www.hackerrank.com/challenges/java-datatypes 접근방법- 각 자료형의 최소값, 최대값을 자바에서 지원해 주기 때문에, 자료형의 크기 순서만 안다면 조건문으로 쉽게 처리 가능. 코드package com.cm; import java.util.Scanner; /** * https://www.hackerrank.com/challenges/java-datatypes */ public class JavaType { public JavaType() { solution(); } public void solution(){ Scanner sc = new Scanner(System.in); int t = sc.nextInt(); // 반복 입력 할 횟수 for(int i ..