일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 동적프로그래밍
- docker
- redis
- HBase
- codewars
- 코드워
- 자바
- 파이썬
- OOM
- Java
- zookeeper
- 스칼라
- golang
- boj
- 알고리즘
- Python
- programmers
- Go언어
- 프로그래머스
- scala
- 튜토리얼
- DP
- 주키퍼
- Linux
- leetcode
- dynamic programming
- go
- gradle
- 리눅스
- 문제풀이
- Today
- Total
목록전체 글 (109)
파이문
동일한 Column Qualifier 에서 (이를 'A' 라고 하겠다.) 조건 여러개를 OR 로 필터 하고 싶었다. 예시로 보자면 A 가 1 인 경우 또는 2인 경우를 스캔하고 싶어, 다음과 같이 작성하였다. (실제로는 Byte 값이 들어간다.) Scan scan = new Scan(); FilterList filterList = new FilterList(); SingleColumnValueFilter aIsOne = new SingleColumnValueFilter( 'CF', 'A', CompareFilter.CompareOp.EQUAL, 1 ); SingleColumnValueFilter aIsTwo = new SingleColumnValueFilter( 'CF', 'A', CompareFilte..
프로세스는 커널에게 필요한 만큼의 메모리를 요청하고 커널은 메모리 영역을 프로세스에게 주지만, 실제로는 할당은 하지 않고 해당 영역을 프로세스에게 주었다는 것을 저장해 둔다. 이 과정을 Memory commit 이라고 부른다. Memory commit 이 필요한 이유가장 큰 이유는 fork() 와 같은 프로세스를 생성하는 시스템 콜을 처리할 수 있어야 하기 때문이다. 예를 들면 물리 메모리가 4기가 일 때, 3기가 프로세스 A가 돌고 있다고 해 보자. 해당 프로세스가 자식 프로세스 B를 생성하게 (fork) 되면 자식 프로세스 B는 부모 프로세스 A와 마찬가지로 3기가 프로세스일 것이다. 하지만 이미 전체 메모리 4기가에서 3기가를 부모 프로세스 A 가 사용하고 있기 때문에 가용 메모리는 1기가 밖에 되..
docker container log가 계속 쌓여서 disk full 이 났다. 그래서 도커 컨테이너 내부 로그를 삭제 해야 했다. 스크립트로 만들기 도커 컨테이너 로그를 삭제하는 script를 만들었었다. 스크립트 예시 #!/bin/sh CONTAINER=$1 LOG=$(docker inspect --format='{{.LogPath}}' "$CONTAINER") echo "LogPath:" $LOG echo "Ary you sure clear the all $CONTAINER logs? [y|n]" read answer if [[ $answer == "y" ]]; then echo "Clear Logs!" truncate -s 0 "$LOG" fi echo "Done" 인자 값에는 container ..
gradle-ssh-plugin 문서: gradle-ssh-plugin.github.io/docs/ 저장소: github.com/int128/gradle-ssh-plugin 해당 플러그인의 장점은 병렬로 실행 된다는 것 정도 ssh example session 은 병렬로 실행 되기 때문에 아래와 같은 경우 web01, web02 가 병렬로 실행된다. 순차적으로 실행하길 원하면 ssh.runInOrder 를 사용할 것 ssh.run { session(remotes.web01) { execute 'command1' } session(remotes.web02) { execute 'command2' } } session 함수 안에서 사용하는 객체는 Remote 라는 클래스 객체로 같은 사람이 개발한 groovy..
gradle 빌드 시에 다음 에러 등장 Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)... 사용하고 있는 컨테이너 (또는 서버) 에서 gradle-bin-xxx 을 다운로드 받지 못하는 상황이었음 (Connection refused) 그런데 로컬 환경에서 다운로드 시에는 잘 됨 gradle 빌드 시에만 안되는 것이였음 이럴 경우 proxy 설정을 의심해 볼 수 있다. (서버에서 외부 리소스 다운로드를 막아두었던지 하는 등의 이슈) 2가지 방법이 있는데 gradle.properties 를 수정하는 방법 또는 gradlew 에서 JVM Option 을 수정하는 방법이 있다. 두개가 서로 ..
상황 git rm /path/to/file git commit -m "Delete wrong file" . git push git rm (--cached 없이) 으로 파일을 삭제하고 커밋하고 push 까지 해 버림 (...) (원래는 git mv 로 파일을 변경했는데 source 파일을 삭제 안하고 target 파일을 삭제했다는 TMI) 목표 이 때 잘못 삭제한 파일을 복구하고 싶었다. Example git version < 2.23 # 복구할 version 확인하기 $ git log # version 으로 이동 $ git reset # 삭제한 파일을 다시 가져온다 $ git checkout -- /path/to/file # 다시 커밋함 $ git commit -m "Fix" /path/to/file #..
파이썬 모듈 경로 site-packages 에 user module 을 만들어서, 해당 경로를 추가하였다. 그런데 user module 이 실제로 있는 경로 안에서 import 하면 어떻게 되는지 궁금해서 모듈을 import 할 때 어떤 것이 우선시 되는지 찾아보았다. 기본적으로 파이썬의 import module 우선 순위는 다음과 같다. 1. 빌트인 모듈 2. sys.path 로 출력되는 경로 순서 여기서 sys.path 는 아래의 경로들을 의미한다. 1. 현재 디렉토리 (sys.path 를 출력하면 가장 먼저 빈 문자열이 들어가 있는데 이를 의미) 2. PYTHONPATH (shell 에서 지정한 경로) 3. 설치할때 지정한 경로 대신에 현재 경로에 심볼릭 링크가 있다고 해서, 심볼릭 링크가 sys...
curl 로 특정 URL 을 요청할 일이 있어서 해보다가 request, response 시간을 자세히 측정할 수는 없는걸까? 하다가 찾아보았다. 1. curl-format.txt 란 파일을 생성하고 아래의 내용을 입력한다. time_namelookup: %{time_namelookup}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_redirect: %{time_redirect}s\n time_starttransfer: %{time_starttransfer}s\n ----------\n time_total: %{time_total}s\..
ExecutorService 를 사용하여 멀티 쓰레드로 컨슈머를 개발하였다. 컨슈머는 RPS 를 지켜야 하는 룰이 있어서, Apache 의 TimedSemaphore 를 사용하였다. 멀티 쓰레드로 돌리는 작업이 완료가 되면 프로세스가 종료 되게끔 만들었으나 종료 되지 않았다. shutdown 을 하였는데 왜 종료가 되지 않는 것인지 엄청 삽질을 했다. 사실 ExecutorService 의 shutdown 메서드 자체가 반드시 쓰레드를 종료 시킨다는 보장은 없다. (ExecutorService shutdown not working 이 구글 서제스트로 있을 정도이다.) 그래서 처음엔 개발을 잘못해서, 쓰레드로 만든 코드에 버그가 있어서 shutdown 으로 종료가 보장이 안되어 shutdownNow 를 호출..
자바로 Producer-Consumer 개발을 진행하고 있었다. Producer 에서 더 이상 Queue 에 집어 넣을 데이터가 없는 경우 POISON 이라고 명명한 임의의 객체를 Queue 에 넣게 하였고, Consumer 에서 Queue 에서 꺼낸 데이터가 POISON 일 경우 종료 되게 만들었다. (Producer-Consumer 의 run 은 while loop 로 돌아가고 있었다.) single producer, single consumer 일 때는 잘 동작하였다. 그러나 producer 개수가 consumer 보다 적은 경우는 예상대로 종료 되지 않았다. 당연하겠지만 producer 개수 만큼 queue 에 POISON 이 들어갔기 때문에, 나머지 consumer 들은 해당 (producer)..