Whiteship's Note


[BBC News] Baijing hit by record snowfall

모하니?/English : 2010. 2. 19. 22:29


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/01/100104_witn_beijing_snow_page.shtml

오늘은 간만에 친구들과 한잔했더니.. 헤롱 헤롱.. 그래도 외웠다...

Thousands were left stranded for a second day after the cold weather bought severe disruption to transport across the country.

Some 30 highways have closed in the north of China, and in Beijing the city's Capital airport saw 90% of flights canceled or delayed on Sunday. By early Monday around 40% of flights had been disrupted.

In some parts of Beijing, 33cm of snow fell, the heaviest in more then half a century. Voulunteers have taken to the streeets with snow-shovles to clean the drifts. School children saw their New Year holiday extended by the severe weather. Here and in neighbouring Taizian, they were given the day off.

More snow will be expected across the north of China, although Beijing supposed to be remain clean, but temperature in the capital, already at minus 15, could down even more.

틀린건 많은 거 같은데 확인하기가 귀찮구나;;

어쩃거나 외웠다. 장하다. 기선아, 오늘은 걍 자자

top

TAG BBC News
  1. astre 2010.02.19 23:21 PERM. MOD/DEL REPLY

    bought -> brought
    China, -> 쉼표 없음.
    New year -> new year
    Taizian> Tianjin
    will be -> is
    supposed to be remain clean -> is expected to remain clear
    temperature in the capital, already at minus 15, could down even more.
    -> temperatures in the capital, already at minus 14,
    could drop even further


    Go get 'em ma sweeties~!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.20 09:12 PERM MOD/DEL

    고맙스.

  2. astre 2010.02.20 12:13 PERM. MOD/DEL REPLY

    귀찮음도 의지로 이겨보시지요.
    귀찮음도 습관이 된다구!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.20 23:11 PERM MOD/DEL

    넵 알겠습니다.

Write a comment.


[ClassLoader 퀴즈 3] Whiteship은 Whiteship일까 아닐까?

Java : 2010. 2. 19. 16:46


퀴즈 2번 문제의 정답을 맞추신 분이라면 클래스패스와 클래스로더의 관계에 대해 잘 알고 계신 것 같습니다. temp 폴더는 클래스패스에 들어있지 않다고 했었죠. 따라서 URLClassLoader.loadClass를 실행했을 때 그것의 상위 클래스로더인 AppClassLoader가 읽어오지 못하고 자기 자신이 가져오게 됩니다. 

따라서 결국 제가 원하던대로 whiteshipClass1과 whtieshipClass2는 각각 다른 클래스로더(uCL1, uCL2)들이 가져오게 됐습니다.

이쯤 말씀드렸으니.. 정답은 뭐... 당연한 거니까 패스.

    @Test(expected = ClassCastException.class)
    public void classCastException() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/temp/");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("Whiteship");
        Object whiteship1 = whiteshipClass1.newInstance();

        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("Whiteship");
        Object whiteship2 = whiteshipClass2.newInstance();

        assertThat(whiteshipClass1, is(not(whiteshipClass2)));
        whiteshipClass1.cast(whiteship2);
    }

이번에는 주관식입니다.

위 테스트는 통과 합니다.왜 통과하는 걸까요? 
즉, 왜 ClassCastException이 발생하는 걸까요?
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 22:42 신고 PERM. MOD/DEL REPLY

    테스트가 성공하는건.. 머 다른 클래스 로더에 올라와있으니... 새로 각기 다를 것이고..
    예외가 나는건.. whiteshipClass1 class객체를 whiteship2로 캐스팅 하는데..
    uCL1 이곳에서는 whiteship2 이 어떤 놈인지 알수가 없는거죠 ...uCL2에서 살고 있는 놈이고 Object이긴 허나.. whiteship2가 먼지 알수가 없는 상황이죠 .. 여기서 캐스팅 하려니까 난 몰라~ 이러고 Exception을 내 뱉는듯;;;

    아님.. 오라이;; ㅋㅋ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 23:18 PERM MOD/DEL

    이것도 맞췄네;;

    근데 저기서 cast() 안쓰고 CCE 나오게 하는 방법도 알아?

Write a comment.


[ClassLoader 퀴즈 2] Whiteship은 내가 데려왔다!!

Java : 2010. 2. 19. 16:34


첫번째 문제를 맞추셨다면 클래스로더 계층 구조를 이해하고 있다고 볼 수 있겠습니다. 제가 작성한 코드를
보면 제가 어떤걸 원했는지 짐작하실 수 있을 겁니다.

    @Test
    public void loadLocal() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/test/sandbox/classloader");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("sandbox.classloader.Whiteship");

        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("sandbox.classloader.Whiteship");

        System.out.println("URLClassLoader1: " + uCL1);
        System.out.println("URLClassLoader2: " + uCL2);
        System.out.println("URLClassLoader1's parent : " + uCL1.getParent());
        System.out.println("URLClassLoader2's parent : " + uCL2.getParent());
        System.out.println("whiteshipClass1 loaded by: " + whiteshipClass1.getClassLoader());
        System.out.println("whiteshipClass2 loaded by: " + whiteshipClass2.getClassLoader());
    }

whiteshipClass1과 whiteshipClass2를 각기 다른 ClassLoader(URLClassLoader)를 사용해서 가져오고 싶었던 겁니다. 하지만 결과는? 두 클래스 모두 uCL1과 uCL2의 상위 클래스로더가 가져왔기 때문에 정답은 5번이며 제가 원하던 대로 동작하지 않았습니다. 좀 더 정확하게 보고 싶으시다면 위와 같이 uCL1과 uCL2의 parent까지 찍어보시면 C3, C4와 같다는 걸 확인할 수 있을 겁니다.

    @Test
    public void load() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/temp/");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("Whiteship");

        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("Whiteship");

        System.out.println("URLClassLoader1: " + uCL1); // C1
        System.out.println("URLClassLoader2: " + uCL2); // C2
        System.out.println("URLClassLoader1's parent : " + uCL1.getParent()); // C3
        System.out.println("URLClassLoader2's parent : " + uCL2.getParent()); // C4
        System.out.println("whiteshipClass1 loaded by: " + whiteshipClass1.getClassLoader()); // C5
        System.out.println("whiteshipClass2 loaded by: " + whiteshipClass2.getClassLoader()); // C6
    }

자 이번에는 조금 다릅니다. temp라는 폴더는 클래스패스로 잡혀있지 않습니다. 그 안에 Whtieship.java를 넣어뒀고 콘솔에서 컴파일해서 .class 파일을 만들어뒀습니다.

다음 중 참인 것은?
1. C1과 C5가 같다.
2. C2과 C6이 같다.
3. C3과 C5가 같다.
4. C4와 C6이 같다.
5. C3과 C4가 같다.
6. C5와 C6이 같다.

과연 이번에는 내가 원했던 결과를 얻을려나...
정답은 역시 다음 글에서 공개. to be continued~!

top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 17:17 신고 PERM. MOD/DEL REPLY

    다른 폴더로 옮겼군요 ;;ㅎㅎ 전 안데리고 왔어요 ㅎㅎ

  2. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 22:32 신고 PERM. MOD/DEL REPLY

    1 ,2, 5 .. 틀렷으면 오라이 ;; ㅡㅡ;

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 23:17 PERM MOD/DEL

    딩동댕~

  3. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 11:46 PERM. MOD/DEL REPLY

    여기에 따로 문제를 내었군요. ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 12:12 PERM MOD/DEL

    넵.. 여기에 올린게 트위터로 가고 트위터로 올라간게 버즈로 가는.. ㅋㅋㅋ

Write a comment.


[ClassLoader 퀴즈 1] Whiteship은 대체 누가 데려온 것일까?

Java : 2010. 2. 19. 14:48


어제 면접 볼 때 받은 질문이기도 하다. 지금 내가 있는 회사에 어떻게 들어가게 됐으며 누가 데려갔고 그 사람을 어떻게 알게 됐느냐는 질문을 받았었다. 당시 난 클래스로더가 떠올랐다. 대체 누가 날 로딩한 걸까. 사부? Toby? 그 둘은 같은 사람일까?

    @Test
    public void appClassLoader() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/test/sandbox/classloader");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("sandbox.classloader.Whiteship");
       
        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("sandbox.classloader.Whiteship");
       
        System.out.println("URLClassLoader1: " + uCL1); // C1
        System.out.println("URLClassLoader2: " + uCL2); // C2
        System.out.println("whiteshipClass1 loaded by: " + whiteshipClass1.getClassLoader()); // C3
        System.out.println("whiteshipClass2 loaded by: " + whiteshipClass2.getClassLoader()); // C4
    }

편의상 콘솔에 찍히는 객체 레퍼런스를 C1, C2, C3, C4라고 표기하겠다.
test 이하의 폴더는 현재 클래스패스로 잡혀있는 상태이다.

다음 중 참인 것은?
1. C1과 C3은 같다.
2. C2와 C4는 같다.
3. C1과 C3, C4가 같다.
4. C2와 C3, C4가 같다.
5. C3과 C4는 같다.

정답은 다음 글에서 공개. To be continued!


top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 15:18 신고 PERM. MOD/DEL REPLY

    정답은 6번..

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 15:36 신고 PERM MOD/DEL

    다음 문제는 예약해서 저녁 쯤 올라오게 걸어놔야지.
    너무 빨리 답을 공개하면 재미가 없어;;

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 15:43 신고 PERM MOD/DEL

    아니다. 맞추는 사람이 없으면 다음 문제도 계속 비공개..

    영원히...

  2. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.19 16:11 PERM. MOD/DEL REPLY

    코드에 한가지 빼먹은 게 있군..

    뭔지는 영원히 비공개.

  3. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 16:25 신고 PERM. MOD/DEL REPLY

    TobyClass 가 빠졌군요 ;;; 퍼;;;;억 ==3

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 16:35 신고 PERM MOD/DEL

    그런가봐;; ㄷㄷㄷ

  4. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 11:44 PERM. MOD/DEL REPLY

    문제에 문제가 있어요.
    sandbox.classloader.Whiteship가 parent ClassLoader로도 접근할 수 있는 경로에 있는지 없는지를 분명히 적어주셔야 하는데 말이죠.
    parent ClassLoader의 classpath에 C:/intellij9-workspace/springsprout2/test/sandbox/classloader가 포함되어 있지 않다면? ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 12:13 PERM MOD/DEL

    흠 조건을 명시 안했네요. @_@;;

    sandbox.classloader.Whiteship 클래스는 클래스패스 경로에 들어있습니다.

    만약에 parent의 기본 클래스패스에 저 클래스가 없다면 loadClass하는 순간에 ClassNotFoundException입니다. 저 경로에는 java 파일만 있지 class 파일은 없으니까요 ㅋㅋ

Write a comment.


Spring Framework 3.0.1 나왔구나

Spring/3.0 : 2010. 2. 19. 11:52


http://blog.springsource.com/2010/02/18/spring-framework-3-0-1-released/

번역하기는 귀찮아서 짧게 요약만 합니다.

- 의존성 포함한 다운로드까지 제공해달라는 사람들이 좀 있어서 메이븐과 Ivy로 가져온 써드파티 라이브러리들까지 압축한 뭉탱이 파일 다운로드도 제공함.

- 3.0.1에서 새롭게 지원하는 라이브러리: 타일즈 2.2, 하이버네이트 3.5(CR1, JPA 2.0 구현체)

- ApplicationListener 감지 기능 향상: 프록시, 팩토리 메서드, Generic 정보를 확ㄹ용한 이벤트 선언 감지 등

- 포인트컷-기반 프록시, EntityManager 프록시, @Transactional 프록시를 직렬화할 수 있게 되었다. 특히 웹 애플리케이션 환경에서 유용할 듯

- FactroryBean과 HttpMessageConverter 같은 Generic 인터페이스의 Class 매개변수 선언을 좀 더 완하했다.

- JdbcTemplate의 쿼리 메서드에 가변인자를 사용했다.

- 보너스: 스프링의 JSP 태그라이브러리에 <spring:eval> 패그를 추가했다. JSP에서 SpEL 표현식을 사용할 수 있으며 스프링 3.0의 포매팅 시스템을 사용하여 포매팅된 결과를 보여줄 수도 있다. 기본적으로 JSTL의 <c:out>과 <fmt:*> 기능을 통합한 것으로 볼 수 있겠다.


top

Write a comment.