java

자바 프로그래밍 면접, 이렇게 준비한다

감상 2020.07.20 Java8이 나오기 전에 쓰여진 책이라 현시점에서는 오래된 지식이 많다. 기술 역사서로는 의미가 있다. 알고리즘 구현예제들도 최적화의 여지가 있어보인다. 예: Quick Sort는 책의 예제보다 공간복잡도를 더 줄여서 구현할 수 있다. 인상 깊은 단락 p99 Collections.newSetFromMap() 언급. 책에는 오타로 Collection.netSetFromMap() 이라고 되어 있다. p158 Integer.MAX_VALUE 등에 대한 언급. 2의 보수 원리. 아래와 같이도 확인할 수 있다. assertThat(-Integer.MIN_VALUE).isEqualTo(Integer.MIN_VALUE); assertThat(Math.abs(Integer.MIN_VALUE)).isEqualTo(Integer.MIN_VALUE); assertThat(Integer.MIN_VALUE -1).isEqualTo(Integer.MAX_VALUE); p320 https://code.google.com/archive/p/dbdeploy/ 소개.

테스트 주도 개발 시작하기

감상 JUnit5에 맞춘 친절한 TDD 책이 나와서 반가웠다.

자바 코딩 이럴 땐 이렇게

인상 깊은 단락 p96 boolean 반환할때 불필요한 if문 없애기 - 코드리뷰 때 종종 이야기하던 패턴인데 책에서보니 반가웠다. p128 K&R과 1TBS

스프링 5.0 마이크로서비스

인상 깊은 단락 2ed p76 scale cube 참고 http://theartofscalability.com/ https://microservices.io/articles/scalecube.html 요약 x축 : 애플리케이션을 복제해서 수평적으로 확장 y축 : 서로 다른 기능들을 분리 Z축 : 데이터 파티셔닝 또는 샤딩 p188 https://github.com/Nilhcem/FakeSMTP 를 이용한 테스트 환경 구성 https://github.com/benelog/devnote/blob/master/smtp.adoc 에 관련 도구들을 정리했다. p218 공유 데이터 모델, 공유 스키마, 공유 테이블은 좋지 못한 방법이며, 마이크로서비스 개발을 재앙으로 이끌 수도 있다. 처음에는 좋은 수도 있지만, 복잡한 마이크로서비스를 개발하다 보면 데이터 모델 사이에 계속 관계를 추가하고, 조인 쿼리를 만들어내게 된다.

자바 웹 프로그래밍 Next Step

https://github.com/slipp/jwp-book 피드백 의견 : https://github.com/slipp/jwp-book/issues?q=is%3Aissue+author%3Abenelog

자바 객체지향의 원리와 이해

정리 116쪽 MSDN 원문일부 (https://msdn.microsoft.com/en-us/library/27db6csx%28v=vs.90%29.aspx) In an “is a” relationship, the derived class is clearly a kind of the base class.

JPA 프로그래밍

정리 485쪽 쿼리 보이는 옵션 켜기 hibernate.show_sql 옵션 켜기 org.hibernate.SQL = debug org.hibernate.type = TRACE

Functional Programming in Java 8

http://www.yes24.com/Product/Goods/13488109?OzSrank=1 11쪽 함수형 스타일은 객체 지향 프로그램(OOP) 방법을 거스르는 것이 아니다. 실제 패러다임의 변화는 명령형 스타일에서 서술적 스타일로 변경됐다는 것이다. 73쪽 파라미터 라우팅 177쪽 이거( eager) 방식은 간단하지만 레이지(lazy)방식은 효율적이다.

개발자가 반드시 알아야 할 자바 성능 튜닝 이야기

http://www.yes24.com/Product/Goods/11261731?OzSrank=1 인상 깊은 단락 32쪽 nanoTime()메서드는 만든 목적은 수행된 시간 측정이기 때문에 오늘의 날짜는 알아내는 부분에는 사용하면 안 된다. 157쪽 JDK5부터는 -XXX:+UseBiasedLocking라는 옵션을 통해서 biased lock이라는 기능을 제공한다. 210쪽 일부 회사에서는 자체 개발한 프레임워크를 사용하는데, 필자는 제발 그러지 말아줬으면 좋겠다. 214쪽 Apache Httpd의 keep alive 설정을 on 358쪽 GC로그 분석 툴소게. HPJmeter는 아파치의 JMeter와는 전혀 상관이 없는 모티러링 및 분석툴. 408쪽 AWStats와 Piwik소개 423쪽 튜닝결과 정리시의 유의점

JUnit in Action

인상적인 단락 p5 단위테스트를 ‘다른 단위에 종속되지 않는 하나의 단위에 대한 테스트’ p71 개발자 입장에서 무언가를 잘못 수정할 때마다 바로바로 알려주는 누군가가 곁에 있어주는 것만큼 마음 든든한 일도 업삳. 단위 테스트는 잘못된 부분을 찾기 위해 어플리케이션을 디버깅할 필요성을 줄여준다. 기능 테스트가 버그가 존재하는 유즈케이스를 골라주는 수준이라면, 단위 테스트는 어떤 메서드가 어떤 이유로 실패했는지도 이야기해준다. 즉 문제를 찾아 몇시간씩 헤매던 일에서 해방된다. p99 숨겨진 종속성과 전역상태를 피하라 싱글톤은 애플리케이션에 전역 상태를 만들어낸다는 명백한 취약점이 존재한다.

트러블슈팅 이야기

인상싶은 내용 72쪽 ps -Lf -p [pid] 208쪽 vmstat, sar 217쪽 리눅스 커널에서는 메모리의 내부 단편화를 해결하기 위해 슬랩 할당자라는 것을 사용한다. 229쪽 pstree 236쪽 pmap 263쪽 sar로 네트워크 사용량 확인 342쪽 –XX:+PrintConcurrentLocks –XX:+PrintClassHistorygram

토비의 스프링 3/3.1

감상 Java의 기초를 테스트코드로 설명한 Agile Java를 보고, 프레임웍도 그렇게 설명했으면 좋겠다고 생각했었는데,Toby님의 책이 그러한듯하다. testability, 좋은 설계 같은 핵심은 시간이 지나도 빛이 바래지 않을 것이고, 최신버전은 오히려 부차적 것일지도 감상2 (2012/11/25 추가) 아래는 일민형의 부탁으로 토비의 스프링 3.1에 들어간 추천사 토비님의 블로그를 통해 이 책의 집필 소식을 알게 되었고, 출판을 오랫동안 기다렸었다. 마지막까지 인쇄 사고로 배송이 지연되는애 태우는 일정 끝에 책을 받아들고는 비싼 전자기기를 산 기분보다 더 뿌듯했었다. 책을 받은 다음날부터 무거운 책을 출퇴근길에 들고 다니면서 완독을 했었다.

Expert One-on-One J2EE Design and Development

감상 시간이 지나서 다소 빛이 바랜 내용도 있지만, 이 책이 2002년도에, 그것도 당시 32살정도였던 사람이 썼다니 감탄이 나올 뿐이다. 인상 깊은 단락 p120 Strictly seaping, this is a special case of the Strategy design pattern: it appears different because the interfaces involved are so simple. )

자바 성능을 결정짓는 코딩 습관과 튜닝 이야기

인상싶은 내용 185쪽 로거에서 메서드 정보 등을 알아내기 위해 일부러 예외를 던지는 기법 241쪽 Apache Httpd의 ThreadsPerChild 273쪽 JMX를 쓸 때 별도의 파일로 id,pw를 지정하는 방법 282쪽 웹로그 분석툴 http://www.awstats.org/ 323쪽 JDK의 -Xss 옵션 : 스레드 스택 크기

켄트 벡의 구현 패턴

정리 55쪽 한정적 하위 클래스 이름 … 이 경우에도 결국 간결성과 풍부한 표현성 사이의 고민이다. 101쪽 따라서 타핑이 쉬운 쪽보다는 읽기 쉬운 쪽이 좋다. … 역할 제시형 작명 … 컴파일러에 이미 타입 정보를 알려줬는데, 그 정보를 다시 변수 이름에 포함해서 무엇을 얻을 수 있단 말인가? 117쪽 보호절 128쪽 (메서드) 의도 제시형 이름 Customer.linearCustomerSearch(String id) -> Customer.find(String id)

Java puzzlers

인상싶은 내용 puzzle 57 (141쪽) hashCode() 미구현 사례 puzzle 61 (151쪽) Calendar 클래스의 월지정 실수 puzzle 62(155쪽) String 상수와 IdentityHashMap을 쓸 때의 문제 puzzle 68(172쪽) 변수와 타입이 같은 이름을 갖고 있고, 이 둘이 같은 영역에 있을 때는 변수 이름의 우선 순위가 높다. 비슷하게 변수와 타입의 일므을 패키지 이름을 가릴 수 있다. 상수 이름과 클래스 이름 간의 충돌을 방지하기 위해서는, 클래스 이름을 지을 떄 약어를 보통 단어처럼 취급하는 것이 좋다. [EJ Item 38].

자바 병렬 프로그래밍

인상깊은 부분 73쪽 특정 변수를 선언할 때 volatile 키워드를 지정하면, 컴파일러와 런타임 모두 ‘이 변수는 공유해 사용하고, 따라서 실행 순서를 재배치해서는 안된다'고 이해한다. volatile로 지정된 변수는 프로세서의 레지스터에 캐쉬되지도 않고, 프로세서 외부의 캐시에도 들어가지 않기 떄문에 volatile 변수의 값을 읽으면 항상 다른 스레드가 보관해둔 최신의 값을 읽어갈 수 있다. 205쪽 더군다나 자바에는 스레드가 가업을 실행하고 있을때 강제로 멈추도록 하는 방법이 없다. 210쪽 스태틱으로 선언된 interrupted 메서드를 호출하면 현재 스레드의 인터럽트 상태를 해제하고, 해제학 이지너의 값이 무엇이썼는지를 알려준다.