2014년 8월 26일 화요일

MySQL


  • MySQL DATE_Format


%a Abbreviated weekday name
%b Abbreviated month name
%c Month, numeric
%D Day of month with English suffix
%d Day of month, numeric (00-31)
%e Day of month, numeric (0-31)
%f Microseconds
%H Hour (00-23)
%h Hour (01-12)
%I Hour (01-12)
%i Minutes, numeric (00-59)
%j Day of year (001-366)
%k Hour (0-23)
%l Hour (1-12)
%M Month name
%m Month, numeric (00-12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss AM or PM)
%S Seconds (00-59)
%s Seconds (00-59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00-53) where Sunday is the first day of week
%u Week (00-53) where Monday is the first day of week
%V Week (01-53) where Sunday is the first day of week, used with %X
%v Week (01-53) where Monday is the first day of week, used with %x
%W Weekday name
%w Day of the week (0=Sunday, 6=Saturday)
%X Year of the week where Sunday is the first day of week, four digits, used with %V
%x Year of the week where Monday is the first day of week, four digits, used with %v
%Y Year, four digits
%y Year, two digits

※ 참조 : http://www.w3schools.com/sql/func_date_format.asp

Ubuntu : apt와 dpkg 명령어를 이용한 설치 / 제거



  • apt를 이용한 패키지 설치와 제거



  1. 패키지 찾기 : apt-cache search <패키지 이름>
  2. 패키지 설치하기 : apt-get install <패키지 이름>
  3. 패키지 제거하기 : apt-get remove <패키지 이름>
  4. 패키지 다시 설치하기 : apt-get reinstall <패키지 이름>
  5. 패키지 정보보기 : apt-cache show <패키지명>
  6. 소스리스트 업데이트 : apt-get update
  7. 설치된 패키지들 업데이트 : apt-get upgrade
  8. 의존성 검사 수행하면서 업그레이드 : apt-get -s dist-upgrade
  9. CD-ROM 목록 추가 : apt-cdrom add
  10. 삭제하는 패키지의 설정파일 모두 삭제시 : apt-get --purge remove <패키지명>
  11. dselect에서 선택한 패키지의 설치 및 삭제 : apt-get dselect-upgrade

참고) apt-get install 명령어로 받은 deb 파일의 저장 위치
/var/cache/apt/archive/ : 위 폴더에 .deb 패키지 파일로 저장됩니다.

  • dpkg를 이용한 프로그램 설치와 제거


  1. deb파일 설치 : dpkg -i nabi_0.15-2_i386.deb
  2. 제거하기 : dpkg -P <패키지명>
  3. 설치 deb파일들의 리스트 : dpkg -l
  4. 설치된 패키지에 포함된 파일들 보기 : dpkg -L nabi
  5. deb파일 패키지에 포함된 파일들 보기 : dpkg -c nabi_0.15-2_i386.deb
  6. deb파일의 정보보기 : dpkg -I nabi_0.15-2_i386.deb
  7. 파일이 포함된 패키지 이름 알아내기 : dpkg -S /usr/bin/nabi
  8. 설치된 패키지를 볼때 : dpkg -l 패키지명

2014년 8월 25일 월요일

Thread

[Process : 실행 중인 프로그램] <- [자원(Resource) : 메모리, 데이터 ] + [Thread]

장점 : 다중 작업이 가능.
단점 : Deadlock(교착상태)
         ※ deadlock : 상대의 자원을 사용하려고 서로 대기하는 상태(추후 설명)

  • 쓰레드의 구현과 실행

구현방법
1. Thread 클래스 상속
2. Runnable 인터페이스 구현 : 코드 재사용성(reusablility), 코드 일관성(consistency)유지

예제 : /JAVA_Standard/src/threadEx/ThreadEx.java

쓰레드가 실행되는 과정

1. Stack1[main()] : call stack
2. Stack1[main(), start()] : start method call run method and run method work
3. Stack1[main(), start()], Stack2[run()] : call new stack
4. Stack1[main()], Stack2[run()] : start method final, Stack1, Stack2 Thread work
5. 쓰레드가 종료되면 프로그램이 종료된다.

그렇다면 Thread 실행 순서는 어떻게 정해지는가?
: 스케줄러(Scheduler)가 결정.

  • 싱글 쓰레드와 멀티 쓰레드

: 책에 있는 내용으로 설명


  • 쓰레드의 우선순위
: 우선순위(priority) : MAX_PRIORITY = 10;, MIN_PRIORITY = 0; NORMAL_PRIORITY = 5;

  • 쓰레드 그룹 

: 기본적으로 자신을 생섷나 쓰레드와 같은 그룹에 생성
: 모든 쓰레드는 반드시 쓰레드 그룹에 포함되어야 한다.
: 책에 있는 내용으로 설명

  • 데몬 쓰레드(Daemon Thread)

: 가상 쓰레드로 일반 쓰레드의 작업을 보조하는 역할
: 책에 있는 내용으로 설명

  • 쓰레드의 실행제어
: p.646
: 책에 있는 내용으로 설명

  • 쓰레드의 동기화
1. 특정한 개체에 lock을 걸고자 할 때 :

Ex) synchronized (parameter) {
                                        //...
}

2. mothod에 lock을 걸고자 할 때 : 

Ex)public synchronized void MethodName(){
                                        //...
}
: 책에 있는 내용으로 설명

  • Semaphore : wait(), notify()
: wait()를 이용하여 명시적으로 lock을 걸어준다.
: 쓰레드의 접근이 끝나면 notify()를 사용하여 다음 쓰레드의 접근을 허용한다.
: 책에 있는 내용으로 설명

컬렉션 프레임워크와 유용한 클래스

컬렉션 프레임워크란?

: 데이터 군을 저장하는 클래스들을 표준화한 설계


컬렉션 프레임워크의 종류?


  1. Collection
  • List : 순서가 있는 데이터 집합. 값의 중복을 허용.(ArrayList, LinkedList, Stack, Vector)
  • Set : 순서가 없는 데이터 집합. 값의 중복을 불허.(HashSet, TreeSet)

  1. Map : prameter(key, value). 키의 중복을 불허. 값의 중복을 허용.(HashMap, TreeMap, HashTable, Properties)

동기화(Synchronize)를 사용하는 이유?

: Multi-Thread로 프로그램을 구현한 경우, 하나의 객체를 다수의 Thread가 접근하여 실행될 때마다 값이 변화할 수 있다.
(여기서는 컬렉션을 사용할 때 동기화가 필요하다는 정도만 인지하도록 하자.)

List : Vector와 ArrayList

  • 공통점
1. 저장 순서가 유지 : 값을 다시 따로 설정하지 않는 이상, 값이 들어온대로 순서가 매겨진다.
2. 값의 중복을 허용 : (int)10의 값을 이전에 입력받아도 이후, (int)10의 값을 받아도 문제가 없다.
3. 배열 사용 : Vector v[] = { ... }, ArrayList arrlist[] = { ... }의 형태

  •  차이점 
1. Vector는 동기화가 되어있다.(callback synchronized) / ArrayList는 동기화를 필요로 한다.

List : LinkedList

: 크기를 변형할 수 없으며, 비순차적인 데이터 추가가 가능하다.
: 이후 유지 관리가 힘들다.

  • LinkedList 구조 : 2차원 배열
Node(previous_reference, value) - Node(previous_reference, value) - ....

  • 유지 관리가 힘든 이유?
LinkedList는 고정 배열로 미리 노드가 만들어질 공간을 확보한 뒤 그곳에 Data를 I/O하기 때문.


List : Stack 그리고 Queue

: 코드 설명으로 대체
: \JAVA_Standard\src\frameworkEx\StackEx.java
: \JAVA_Standard\src\frameworkEx\StackEx01.java

List : 열거형 인터페이스(Enumeration, Iterator, ListIterator)

  • Iterator
: 컬렉션에 저장된 요소에 단방향으로 접근(순차적 접근)
: Iterator.next()로 값을 읽어온다.

  • Enumeration
: Iterator의 구버전 인터페이스
: Enumeration은 Snap-Shot기능을 지원한다.
: Iterator는 순차적 접근이 실패한 경우 CollectionModificationException이 callback된다.
: Enumeration은 순차적 접근이 실패해도 끝까지 진행한다.

  • ListIterator
: 컬렉션에 저장된 요소에 양방향으로 접근이 가능(previous(), next() 메소드가 존재.)

예제 
: /JAVA_Standard/src/frameworkEx/ListIteratorEx.java
: /JAVA_Standard/src/frameworkEx/LinkedListEx.java

Set : HashSet

: 순서도 없고 중복을 허용하지 않는다.(순차적으로 진행하는 것을 원한다면 LinkedHashSet을 사용하도록 한다.)
: ->위의 특징을 이용하여 중복되는 값을 제거할 수 있다.

예제
: /JAVA_Standard/src/frameworkEx/HashSetEx.java
: p.480(p.314)

Set : TreeSet 

: 이진검색트리(binary search tree : b-tree) 컬렉션 클래스
: TreeNode(left_child_reference, value, right_child_reference)
: parent_node_value > left_child_value && parent_node_value < right_child_value
: 검색과 정렬이 용이하다.

Set : 검색 인터페이스(Comparator, Comparable)

: 이런것이 있다정도만 알고 지나갑시다.

Map : HashMap, HashTable

: Hashing = "많은 양의 data를 그보다 작은 크기의 table로 mapping시켜서 저장하는 방식"
: parameter(key, value) = 내부에서 Entry[] LinkedList구조로 이루어져있다.(p.495)
: HashMap은 null값을 허용, HashTable은 null값을 불허

Map : TreeMap

: 이진검색트리 형태 컬렉션 클래스
: TreeNode(left_child_reference, key, value, right_child_reference)

※컬렉션 클래스 정리 & 요약 : p.514
※StringTokenizer도 한번 보는 것으로