이전 포스팅에서 Thread에 대해서 간단하게 알아봤다면 이번에는 Thread 비정상 종료시 대응하는 방법에 대해 알아보겠다. 물론 나도 책을 보기전까지는 몰랐던 내용이다. -_-; 다음과 같은 코드가 있을때 MainThread가 죽어도 그 안에서 생성한 Thread는 살아서 동작하고 있다. 그럴때 동작중인 Thread를 종료하고 싶으면 Ctrl + C를 이용하면 현재 실행중인 JVM을 종료하면 된다. 그러나 이러한 종료상황은 안에서 동작하던 Thread의 입장에서는 비정상 종료이고 예기치 못한 결과를 얻을 수도 있다. (ex. 파일 저장중 강제종료로 인한 파일손상등...) 따라서 프로그램 실행중 종료가 요청되면 종료전에 필요한 수행작업을 꼭 하고 종료되어야 한다. 그래서 우리는 ShutDownHook을..
나는 지금까지 자바 프로그래밍을 하면서 String만 사용하였다. 그런데 String을 남용하면 JVM 메모리에 문제가 발생한다고한다. -_-; 그래서 책에서는 String 대신에 StringBuffer를 사용하라고 추천해준다. 사실 나는 StringBuffer를 사용해본적이 없다. 그런데 이녀석 알고보면 굉장히 좋은녀석이다. 일단 Thread-safe 하단다!! 우선 나는 String을 이런식으로 많이 사용했었다. 그런데 이렇게 사용하면 JVM 메모리에 많은 양의 Strng이 생성된다는 문제가있다고 한다. 그래서 여기서는 StringBuffer를 사용하라고 추천해준다. 이렇게 추천해줘도 일단 믿지 못하겠다. 테스트를 해보자!! public static void main(String[] args){ Sy..
이 포스팅은 누군가에게 JVM,JDK에 대해서 설명하기보단 내가 까먹을꺼 같아서 정리하는 포스팅입니다a 혹시나 잘못된점이 있다면 불쌍한 후배프로그래머를 위해서라도 꼭꼭 알려주세요. 오랜만에 자바책을 다시봤는데 예전에 알고있다가 잊어버린 내용들과 아예모르고 있던 내용들이 많이 있어서 다시 잊어버리기 전에 하나씩 포스팅할 예정입니다. JVM,JDK,JRE에 대해서 정리하기전에 우선 간단한 자바 사용환경부터 다시 정리해야겠다. - JavaSE(Java Standard Edition) 자바 표준 플랫폼으로 JVM운영환경과 API에 대한 개발환경을 갖추고 있다. - JavaEE(Java Enterprise Edition) J2EE라도 불리며 서버 기능 개발을 위한 플랫폼을 지칭한다. JavaSE를 바탕으로 웹 애..
엑셀파일내용을 분석해야할일이 생겼다. 노가다를 하기에는 도무지엄두가 안나서 프로그램을 짜서 해결하기로 결정. 엑셀파일을 읽을수 있게 지원해주는 라이브러리가 뭐가 있나 구글링을 해봤다. 발견된 녀석은 바로 이녀석 poi 홈페이지는 여기다. http://poi.apache.org/ 라이브러리 셋팅은 따로 설명하지 않겠다. ^^; 다음 코드는 엑셀파일을 읽어서 HashMap 으로 값을 반환해주는 녀석이다. 겉에 HashMap의 첫번째 값은 Row이고 속에 HashMap은 이다. 설명은 여기까지 다음은 코드이다. POIExcelManager.java import java.util.HashMap; public interface POIExcelManager { public HashMap GetRowHashMap(S..
오늘은 초기화리스트(Initialize List)에 대해서 알아보겠다. 일단 초기화 리스트 란 클래스의 각 멤버를 생성자에서 초기화 할 때 생성자 뒤에 콜론연산자(:)를 사용해서 객체의 멤버를 초기화 할 수 있다. 이를 초기화 리스트, 또는 콜론 초기화라고 한다. 글로써 이해가 안간다면 그림으로 이해해보자. 다음과 같은 부분에서 : i( j )부분이 바로 초기화 리스트이다. (나도 이번 포스팅자료를 찾으면서 이 방법이 초기화 리스트라고 부른다는것을 알았다;;) 그렇다면 이 초기화 리스트를 왜 써야 하는걸까? 일반적으로 임의의 클래스가 멤버로 다른 객체를 가진다면 초기화 리스트를 사용하지 않은 것보다는 초기화 리스트를 사용한 초기화 방법이 좋다고 한다. 그 이유는 함수 호출의 횟수의 차이가 있다. 초기화리..
오늘 알아볼 내용은 const int* 와 int* const의 차이점입니다. 다음과 같이 있을때 pi1의 경우 const가 int* 이고 변수 pi1이 가리키는 대상은 수정할수 있습니다. 하지만 pi1의 실제값을 수정할수는 없습니다. 반면 int* const의 경우 const가 변수고 pi2의 실제값을 수정할수는 있지만 변수가 가리키는 대상을 수정할수는 없습니다. 의외로 헷갈리는 부분이기 때문에 한번 쓰윽~ 읽어보시고 이해하시면 되겠습니다. 누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
이번에는 Define에 대해서 알아보겠다~ 이러한 유형문제가 이번에 모 게임회사 필기테스트에도 나왔었다! Define은 참 좋은 매크로이지만 잘못 사용하면 예상치 못한 결과가 나올수도 있다. 다음과 같은 코드가 있을때 결과값은 어떨까? 그냥 단순하게 생각해보면 5,06,07,0 일꺼 같다. 하지만 결과를 보면 다음과 같다. 매크로로 정의된 GET_MAX(X,Y)를 풀어보면 첫번째 GET_MAX(X,Y) 실행시에는 (++x) > (y) ? ++x : y 과 같다 따라서 ++x 이 두번 호출된다. 그렇다면 왜 두번째 실행시에는 ++x가 1만 증가 할까? (++x) > (y+10) ? ++x : y+10 이유는 삼항연산자중에 false 케이스가 호출하기 때문에 ++x는 한번만 호출된다. Define이 좋은 방..
이번에는 소멸자에 Virtual을 사용해야 하는 이유에 대해서 알아보겠다. 다음과 같은 코드가 있을때 동적으로 자식클래스(B) 생성후, 부모클래스(A)타입으로 받은후 삭제를 한다면 어떻게 될까? 결과는 다음과 같이 데이터타입인 A클래스의 소멸자만 호출되었다. B클래스의 소멸자가 호출되지 않기때문에 이렇게 한다면 메모리 누수가 생기고 언젠간 프로그램이 죽어버린다; 그래서 제대로된 메모리해제를 하려면 소멸자에 virtual을 사용해야 한다. virtual을 사용하니 다음과 같이 의도한대로 B가 메모리 해제를 하면서 소멸자가 호출되었다. 잊어버리지 말자~ 누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
요즘 여기저기 프로그램 테스트본다고 다니느라 포스팅을 못했다. 더 밀리기 전에 오랜만에 포스팅을 해봐야겠다. Virtual 키워드에 대한 개념은 이미 알고 있을것이라고 생각해서 따로 정리하지는 않겠다. 다음 문제는 모 게임회사의 코딩테스트 문제중 일부였다. 다음과 같은 코드가 있을때 출력되는 결과와 이유를 적으라고 한다 출력결과는 예상대로 BB였다. Virtual 키워드를 사용한 함수는 호출될때 실제 메모리에 할당된 클래스(B)에 정의되어 있는 함수를 1순위로 호출된다. 그래서 부모타입(A)으로 사용하여도 자식 클래스에서 정의되어 있다면 실제메모리에 할당된 클래스(B)에 맞는 함수가 호출된다. 그렇다면 A클래스 함수의 virtual이 없다면 출력결과는 어떻게 될까? 출력결과는 AB이다. 잊어 먹지 말자~..
요즘 서류지원을 하고 Pre-Test를 공부하느라 포스팅이 뜸했습니다a 그래도 공부하던중 몰랐던 재미있는 방법들이 있어서 정리하고 있는 중입니다. 다른 내용들도 시간내서 하나씩 정리해 올리겠습니다~ 오늘의 내용은 XOR를 이용한 정수값 Swap 입니다! 우선 혹시나 XOR 연산이 어떤 원리인지 기억이 가물가물하신 분들을 위해 정리해봤습니다. 다음과 같이 x나 y중 하나만 1일때 값이 1이고 나머지는 0으로 바꿔주는 Bit연산입니다. 그렇다면 이것을 이용해서 어떻게 두 정수값을 Swap할수 있을까요? 기존에 방법으로 하자면 이렇게 temp 변수를 이용해서 Swap을 하셨을겁니다. 여기서 설명할 방법은 다음과 같습니다. 다음과 같이 XOR 연산을 3번함으로써 두값을 Swap 할수 있었습니다. 다음은 결과화면..
- Total
- Today
- Yesterday
- 루비 상수
- next key lock
- InnoDB
- 넥스트 키 락
- 되추적
- MySQL 족보
- 페어프로그래밍
- MySQL
- MySQL 인덱스
- db
- gap lock
- 엘라스틱서치 기초
- ruby meta programming
- mysql lock
- 인덱스
- 메타프로그래밍
- ruby
- lock
- autoload_paths
- 트랜잭션
- 루비 메타프로그래밍
- Pair-programming
- 갭 락
- innoDB lock
- 페어 프로그래밍
- Elasticsearch Cluster
- dead lock
- Autoloading
- metaprogramming
- 루비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |