
전체 글
Garbage Collection
오늘은 자바의 Garbage Collection에 대해 정리해보려 한다. 자바는 메모리 해제를 위해 Garbage Collection(GC)을 사용한다. GC로 인해 개발자는 메모리 해제를 신경쓰지 않아도 되며, 명시적으로 메모리를 해제하려 하면 오히려 성능의 저하를 불러오게 된다. GC는 아래와 같은 두 개의 가정 하에 만들어졌다. 1. 대부분의 객체는 곧 접근 불가능한 상태가 된다. 2. 오래된 객체에서 새로운 객체로의 참조는 거의 일어나지 않는다. 이러한 가설을 weak generational hypothesis라 하며, 이에 따라 자바의 hotspot GM은 매번 힙의 모든 영역을 검사하지 않고 일부 영역만 검사할 수 있도록 힙을 세 개의 영역으로 나누고, 영역에 따라 Minor GC와 Major..
MVC 패턴
오늘은 기술 면접 단골 질문인 MVC 패턴에 대해 포스팅하기로 했다. 기존에도 MVC 패턴에 대해 어렴풋이 알고는 있었지만, 이번 기회에 확실히 개념을 잡아두려 한다. MVC 패턴 모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한..
정지 문제 (Halting problem)
정지 문제란? 임의의 튜링 머신에 유한한 상태를 거쳤을 때, 이 튜링 머신이 정지 상태로 가는지 아닌지를 판별 할 수 있는 알고리즘이 존재할까? 결론부터 말하자면 이러한 알고리즘은 존재하지 않으며, 이는 귀류법으로 증명할 수 있다. 튜링 머신은 하나의 프로그램으로 생각할 수 있으므로, 이를 함수로 바꿔서 생각해보기로 했다. 귀류법을 사용하기 위해, 다음과 같은 가정을 해보자. 어떤 함수가 특정 입력값에 대해 무한 루프에 빠지는지 아닌지를 판별할 수 있는 함수 H가 존재한다. 이와 같은 가정에 모순이 생긴다면, 귀류법에 의해 이러한 함수는 존재하지 않는다는 것을 증명할 수 있다. 함수 H(F, I)를 정의하자. F는 판별 대상 함수, I는 입력값이고, 함수 F가 I를 입력받았을 때 정상적으로 종료된다면 t..
2019 KAKAO BLIND RECRUITMENT - 매칭 점수
모든 문제는 C++로 구현되어 있습니다. 이 문제는 세 단계로 나눠서 생각할 수 있다. 1. 태그에서 페이지의 링크를 구하고, 이를 기본 점수 및 최종 점수를 저장하는 맵에 매핑시키기 2. 페이지 별 기본점수 구하기 3. 각 페이지의 외부 링크를 구하고, 이에 맞게 링크 점수 뿌려주기 1. 태그에서 페이지의 url을 구하고, 이를 기본 점수 및 최종 점수를 저장하는 맵에 매핑시키기 먼저 헤더에 있는 std::stringstream을 사용해서 공백을 기준으로 각 페이지의 단어를 나눠서 별도의 배열 wordList에 저장한다. 그 다음 wordList를 순회하면서 "