java의 hashset은 어떻게 동작할까요? hashmap과 다른 점은 map은 Key로부터 Value를 뽑아올 수 있지만, set은 Key값만을 중요하게 여긴다는 것입니다. 그런데, 뭔가 이상하지 않나요? HashMap하고, Set은 그것 말고는 거의 동일한 기능을 수행합니다. 상식적으로 생각해 보았을 때, HashSet 기능들을 일일히 다 구현을 하는 게 효율적일까요? 아니면 이미 구현된 HashMap의 기능을 이용하는 게 효율적일까요? 후자일 겁니다. 이 정도만 이해하셨다면, 이 글의 90%를 이해하신 겁니다. 나머지 10%는 밑에서 후술하도록 하겠습니다. 예제 프로그램을 보겠습니다. 간단하게 HashSet hs를 선언했습니다. 이것은 Integer를 Key로 가지는 자료 구조입니다. 안에 필드를..
전체 글 검색 결과
리눅스에서 몇몇 환경을 구축하고 있습니다. 구축을 하면서 프로그램을 실행시킬 때 만들어지는 에러 로그를 trace를 해야 하는 일이 생겼는데요. tail -f 옵션을 이용해 보라는 스택 오버플로우의 글이 있었습니다. 생각보다 유용한 명령어일 줄은 몰랐습니다. 단지, tail이 파일의 끝 몇 줄만 출력하는 줄로만 알았기 때문입니다. tail은 파일의 끝 부분을 출력하는 명령입니다. 그런데, -f 옵션을 주면, 파일을 모니터링 합니다. 어떻게 동작하는지 보겠습니다. 문구만 읽어보면, file이 grow함에 따라서, output이 append가 된다는 뜻으로만 보이는데요. 무슨 이야기를 하는지는 잘 모르겠으니, 직접 써 보겠습니다. 터미널 세션 2개를 열겠습니다. 하나는, 1.txt에 append하고, 다른 ..
ssh로 연결한 세션이 끊어지면 어떻게 될까요? 1.c는 위와 같습니다. 아시다시피, 그냥 의미없이 계속 무한 루프를 도는 코드입니다. 이것을 컴파일 해서 돌려보겠습니다. strace를 찍어볼 겁니다. 여기서, -o 옵션은 파일에다가, trace 내용을 뽑는 것입니다. strace -o trace.txt는 trace.txt에 트레이스를 한 내용을 출력합니다. ssh 접속을 끊은 다음에 다시 접속한 다음에, trace.txt를 열어봅시다. 그러면, SIGHUP라는 내용이 나왔음을 알 수 있습니다. signal(7) 문서를 보면 몇 가지 행동이 나와 있습니다. 이 중에서, Term은, Default action이 process를 종료하는 것임을 뜻합니다. Ign은 무시한다는 의미입니다. 밑에 부분을 보면, ..
System.gc 함수를 쓰지 말라는 이야기는 많이 듣곤 합니다. 왜 그럴까요? 예제 프로그램을 보겠습니다. class A가 있고, 이 클래스 내부에는 finalize가 오버라이딩 되어 있습니다. 이 메서드 안에 들어오면 shared.count가 하나 증가합니다. 정리를 하면, 객체 A가 정리가 되면, shared 클래스 내부에 있는 클래스 변수인 count가 하나 증가합니다. 그리고 class A 안에는 int형 배열 10개가 있습니다. 이제 Main 클래스의 main 메소드를 보겠습니다. 크게 어려운 것은 없어 보입니다. 10개의 객체 A 참조값을 저장할 수 있는 배열을 선언합니다. 그리고, 2만번의 loop를 돌 때 마다, 배열 A에 새로운 A의 참조값 10개를 넣습니다. 이를 그림으로 표현하면 위..
테이블에서 collation은 어떤 것일까요? 사실, 저는 별 게 아니겠구나. 라고만 생각하였습니다. 그냥 인코딩에 대한 것만 중요하겠거니, 싶었습니다. 결론부터 말하자면, 그런 제 생각은 오만했다는 것이였습니다. testVC 테이블에 있는 데이터를 모두 조회해 보겠습니다. 이것을 str 오름차순으로 정렬해 보겠습니다. heroes, HEROES, kiwoom, KIWOOM, kIWOOM, Lotte giant, ... 이렇게 8개의 레코드가 있습니다. 여기서 의문점이 들 수 있습니다. 왜 대문자 소문자 구분없이 sorting이 되어 있지? 이는 테이블의 Collation을 보면 알 수 있습니다. utf8mb4_*_ai_ci. 이것은 Accent와 Case 둘 다 INSensitive하다는 것입니다. 앞..
최근댓글