https://youtu.be/PtM44sO-A6g?si=fFMenox3A7DxWwGN

 

맨날 헷갈리는 내용인데 최범균님이 설명을 잘해주셔서 링크 걸어둠. 감사합니다

  • invariant (무변성)
  • covariant (공변)
  • contravariant (반공변)
  • PECS
calendar 를 이용하여 년도와 월을 가지고 해당월의 말일을 구하려 한다면
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 년도);
calendar.set(Calendar.MONTH, 월);
calendar.getActualMaximum(Calendar.DATE)를 이용해서 구할 수 있지만
2월달의 경우
calendar.set(Calendar.YEAR, 2008);
calendar.set(Calendar.MONTH, 2);
이렇게 구할 경우 자동적으로 월의 세팅값이 3월로 변경된다. 그래서
calendar.set(Calendar.YEAR, 2008);
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DATE, 1);

명시적으로 일의 값을 1로 세팅을 해놓으면 제되로 된 결과값이 나온다
이유는 date를 명시적으로 세팅하지 않을경우 jdk내부적으로 30일을 세팅하는것 같다 그래서 2월의 경우엔 자동적으로 3월로 넘어가는 것 같다 따라서 꼭 1일이 아니라 1~28일의 값중 어떤 값이라도 date를 세팅해 놓는다면 제대로 된 말일을 구할 수 있다.


자바를 이용한 함수프로그래밍 DW 원문 : http://www.ibm.com/developerworks/kr/library/j-fp.html

이 아티클의 예제를 실행하기 위해서 apache commons functor 가 필요한데 아직 정식버젼이 릴리즈 되지 않아서 서브버젼(http://svn.apache.org/viewvc/commons/sandbox/functor/trunk/
)에서 받아야 한다

명령프로그래밍(Imperative programming) - 문(statement)을 사용하여 프로그램의 상태를 변경한다.
함수프로그래밍(Functional programming) - 식(expression)의 계산을 강조한다.

함수프로그래밍의 특징
 - Closure와 Higher Order Function 지원
 - Lazy Evaluation 지원
 - 컨트롤 흐름을 위한 메커니즘으로서 회귀 사용
 - 참조투명성(referential transparency)의 강화
 - 부작용이 없음(?)

요즘 함수형 언어가 자주눈에 띄어서

바쁜 자바 프로그래머를 위한 스칼라 입문: 루프 때문에 당황하지 말자!

라는 아티클을 보다가 참고 자료에 있는 이 아티클을 먼저 보는게 좋을것 같아서 이 아티클을 먼저 보았다. 익숙한 자바언어를 사용하여 함수프로그래밍을 경험해보니 이해하기가 상대적으로 쉬웠던것 같다. 난이도는 초급인데 그 동안 나의 개발방식과는 차이가 많아서 처음엔 이해하기가 쉽지 않았다. 이 아티클의 예제를 실행해보고 다 읽고 난 지금은 함수 프로그래밍에대해 좀 더 깊이있게 공부를 해보고 싶어졌다
1. 실행환경
- 톰캣 4.1
- jdk 1.4.2.07
- 윈도우 XP

2. keystore 생성
2-1 keytool -genkey -alias [alias_name] -keystore [keystore_file_name] -keyalg RSA 엔터
-> alias_name : 생성될 키의 alias 이므로 맘에드는 이름을 부여하면 된다
-> keystore_file_name : 생성될 keystore파일의 이름

2-2 keystore 암호를 입력하십시오: passwd
-> 라는 메세지가 나온다 그때 사용할 passwd를 입력하고 엔터

2-3 이름과 성을 입력하십시오.
-> 호스트명을 써준다

2-3 5개의 메세지가 더 나오는데 대충 넣어주면 된다

2-4 지금까지 넣어준 내용이 맞는지 확인하는 메세지가 나오면 y 엔터

2-5 (keystore 암호와 같은 경우 RETURN을 누르십시오):
-> 엔터키를 누른다

2-6 지금까지의 과정을 캡쳐한 그림

사용자 삽입 이미지

keytool -list -v -keystore [생성될 keystore] -storepass [암호]
-> 이명령을 이용하여 keystore를 확인할 수 있다

3. server.xml 설정
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8443" enableLookups="true" scheme="https" secure="true"
               acceptCount="100" keystoreFile="생성한 keystore 파일지정" keystorePass="keystore 파일 생성할때 입력한 암호 지정"
               useURIValidationHack="false" disableUploadTimeout="true"
               clientAuth="false" sslProtocol="TLS" />

-> keystoreFile을 지정할때는 CATALINA_HOME을 루트로 보고 상대경로로 지정해야함

4. 결론
이글에서는 톰캣에 관리자가 특정한 이름을 주어 생성한 keystore를 설정하는 법을 적었다
server.xml 에서 keystoreFile과 keystorePass를 설정하지 않으면 .keystore 와 changeit 로 톰캣은 인식한다.
기본적인 설정에 대한 설명은 http://tomcat.apache.org/tomcat-4.1-doc/ssl-howto.html 에서 볼수 있다

자바로 엑셀파일을 컨트롤 하기 위한 api이다.

참고 싸이트 : http://www.andykhan.com/jexcelapi/

참고 싸이트에 보면 튜토리얼이나 api doc, 소스코드를 다운로드 받을 수 있다

아파치의 poi는 사용해보질 못해서 둘을 비교할 수는 없고 jxl만 놓고 본다면 사용하기 쉽고 유용한 api인거 같다.. 튜토리얼 수준에서 사용해본 것이라 일부러 그 내용을 다시 여기에 적을 필요는 없을 것 같고 튜토리얼과 다운로드 받은 소스폴더를 보면 데모프로그램도 있으니 그 부분을 참조하면 쉽게 사용할 수 있을 것이다

수정중....
1. Garbage Collection 기본개념


● Garbage Collection이란?
 - 자동 메모리 관리(Automatic Memory Management)
 - Programmers allocate memory( using new operator)
 - GC reclaims all unused memory

● Garbage Collection의 문제점
 - out of memory
   → JVM heap size를 작게 설정한 경우
   → JNI or Java code에서 메모리누수가 있는 경우
   → Finalize method에서 객체를 과도하게 생성하는 경우
   → Permanent영역의 크기가 작은 경우
 - Stop the world Problem
   → GC를 수행하는 쓰레드 때문에 user 쓰레드가 동작하지 않는 경우

● Reachability
 - Roots : memory locations that are live by default
   → 모든 쓰레드의 스택 프레임
   → 모든 static field
   → 모든 native code
● Live Objects
● Garbage Objects
● Finalized Objects
 - 논리적으로는 GC처리되었지만 물리적으로 메모리에 살아있음
 - java.lang.Object.finalize() 메소드를 오버라이드 한다

사용자 삽입 이미지


● VM Object structure
사용자 삽입 이미지

2. Garbage Collection 알고리즘
● Mark-Sweep
그림........
● Mark-Compact
그림........
● Copying GC
사용자 삽입 이미지

+ Recent posts