'전체 글'에 해당되는 글 203건

  1. 2015.11.07 자바의 시간 API
  2. 2015.11.07 Commons DBCP
  3. 2015.11.03 자바 classpath
  4. 2015.10.26 Java finalize
  5. 2015.10.16 이진탐색(Binary Search)

자바의 시간 API

JAVA 2015. 11. 7. 16:25

자바의 날짜와 시간 API의 문제점

자바에서는 날짜와 시간 API에 대한 악평이 자자했다. 그래서 JODA TIME이라는 외부 라이브러리를 이용하곤 했었는데, 자바 8에서는 이러한 날짜와 시간 API의 문제점을 개선한 API를 제공한다.

 

무엇이 문제였나?

1) 그레고리력으로 바뀌면서 발생한 율리우스력의 누적된 시간적 문제가 고려되지 않은 부분

2) 썸머타임이 적용되는 부분에 대한 고려되지 않은 부분

 ...

JDK의 기본 날짜 클래스의 문제점

1) 불변 객체가 아니다(Not Immutable)

날짜 클래스의 set메서드를 통해 날짜를 지정할 수 있게 되어있다. 이 것은 여러 가지 문제점을 만들어낸다.

예를 들어 어떤 스레드에서 set메서드를 통해 날짜를 바꾸고, 또 다른 스레드에서 set메서드를 통해 날짜를 바꾸게 되면 데이터의 무결성을 보장하기가 어렵게 된다.

이를 해결 하기 위해서는 각 객체를 복사해서 반환하는 방법으로 문제를 해결해야 한다.

2) 일관성 없는 요일 상수

Calendar.get(Calendar.DAY_OF_WEEK) 함수에서 반환한 요일은 int 값으로, 일요일이 1로 표현된다. 따라서 수요일은 4이고, 보통 Calendar.WEDNESDAY 상수와 비교해서 확인한다. 그런데 calendar.getTime() 메서드로 Date 객체를 얻어와서 Date.getDay() 메서드로 요일을 구하면 일요일은 0, 수요일은 3이 된다. 두 개의 클래스 사이에 요일 지정값에 일관성이 없는 것이다.

 

어떻게 개선되었는가?

1) 불변 객체가 되었다.

2) LocalDate, LocalTime 등으로 지역 시간과 시간대가 지정되었다.

3) 월의 int 값과 명칭이 일치한다. 1월은 int 1이다.

 

spring framework에서도 기본적으로 조다 타임을 제공한다.

새로운 자바 8에서의 시간 api는 조다 타임의 영향을 받아 제공되었다.

 

'JAVA' 카테고리의 다른 글

Comparable 인터페이스에 대한 이해  (0) 2015.11.07
자바 Garbage Collection(GC) 튜닝  (0) 2015.11.07
Commons DBCP  (0) 2015.11.07
자바 classpath  (0) 2015.11.03
Java finalize  (0) 2015.10.26
Posted by slender ankles
,

Commons DBCP

JAVA 2015. 11. 7. 16:20

Commons DBCP

 커넥션 풀의 BasicDataSource setter 메서드를 통해 세팅을 할 때 1.x버젼과 2.x버젼이 호환이 되는가?

 안 되는 부분 있음.

내부적으로 커넥션 풀이 어떻게 저장되어 있는지?



 

maxActive, initalSize, minIdle, maxIdle

 maxWait이란 무엇인가?

maxWait속성은 커넥션 풀에서 커넥션이 고갈 됐을 때 커넥션 반납을 대기하는 시간(밀리초)이며 기본 값은 무한정이다.

 

TPS(Transaction Per Seconds)

 

무조건 커넥션을 많이 사용하면 되는 것 아닌가?

커넥션을 많이 사용하게 되면 시스템이 사용할 수 있는 자원의 범위와 부딪힐 수 있게 된다.


'JAVA' 카테고리의 다른 글

자바 Garbage Collection(GC) 튜닝  (0) 2015.11.07
자바의 시간 API  (0) 2015.11.07
자바 classpath  (0) 2015.11.03
Java finalize  (0) 2015.10.26
Call By Value vs Call By Reference  (0) 2015.09.14
Posted by slender ankles
,

자바 classpath

JAVA 2015. 11. 3. 00:34


'JAVA' 카테고리의 다른 글

자바의 시간 API  (0) 2015.11.07
Commons DBCP  (0) 2015.11.07
Java finalize  (0) 2015.10.26
Call By Value vs Call By Reference  (0) 2015.09.14
List, Map, Set - Collection  (0) 2015.08.29
Posted by slender ankles
,

Java finalize

JAVA 2015. 10. 26. 01:42


'JAVA' 카테고리의 다른 글

Commons DBCP  (0) 2015.11.07
자바 classpath  (0) 2015.11.03
Call By Value vs Call By Reference  (0) 2015.09.14
List, Map, Set - Collection  (0) 2015.08.29
자바 8 특징  (0) 2015.08.29
Posted by slender ankles
,

이진탐색

이진탐색이란 한 번 비교를 거칠 때마다 탐색 범위가 반(1/2)으로 줄어드는 탐색 방법입니다. 순차탐색에 비해 얼마나 빠른 알고리즘이냐면 70억 명 중에서 특정한 정보를 탐색하려 할 때, 순차 탐색은 평균적으로 35억 번을 비교하고, 이진 탐색은 최대 33번의 비교로 데이터를 찾을 수 있다.


이진 탐색 과정

1~7까지 정렬되어 있는 수에서 5를 찾는 과정이다.

1~7까지의 정렬된 수가 주어짐

1) mid 값 = (0 + 6) / 2 = 3 

[3]의 값인 4보다 찾고자 하는 값이 큼

2) 인덱스 4~6까지 검색, mid값 = 5

[5]의 값인 6보다 찾고자하는 값이 더 작음

3) 4 ~4까지 검색, mid 값 = 5

찾고자하는 값을 찾음


총 3번의 비교 연산이면 원하는 값을 찾을 수 있음!


이진 탐색의 성능

데이터 집합의 크기를 n으로 두고, 반복 횟수를 k로 둔다면 아래와 같은 수식이 만들어 진다.

n x (1/2)k = 1

n x 1/2k = 1

n = 2k

k = log2n


이진 검색의 구현

Iterative한 구현

    public static int binarysearch(int[] arr, int target){
        int low = 0, high = arr.length - 1;
        while(low <= high){
            int mid = (low + high) / 2;
            if(target < arr[mid]){
                high = mid - 1;
            }
            else if(target > arr[mid]){
                low = mid + 1;
            }
            else{
                return mid;
            }
        }
        return -1;
    }
cs


recursive한 구현

    public static int binarysearch(int[] arr, int left, int right, int target){
        // 예외 처리(target값이 arr에 아예 없는 경우)
        if(right < left){
            return -1;
        }
        int mid = (left + right) / 2;
        if(target < arr[mid]){
            return binarysearch(arr, left, mid - 1, target);
        }
        else if(target > arr[mid]){
            return binarysearch(arr, mid + 1, right, target);
        }
        else{
            return mid;
        }
    }
cs







'알고리즘' 카테고리의 다른 글

최소 비용 스패닝 트리 - kruskal 알고리즘  (0) 2015.11.20
최소 비용 스패닝 트리 - Prim알고리즘  (0) 2015.11.20
쉘 정렬  (0) 2015.09.26
퀵정렬  (0) 2015.09.26
삽입정렬  (0) 2015.09.26
Posted by slender ankles
,