이번 시간에는 블로킹과 논블로킹에 대해서 간단하게 알아보도록 하겠습니다. 아래 코드를 생각해 보겠습니다. 문자열을 입력받고, 출력해 주는 프로그램입니다. 중요한 것은, 이 프로그램은, 제가 아무것도 입력을 하지 않으면, 입력을 받을 때 까지 대기를 한다는 것입니다. 더 정확하게 말하면, 엔터나 EOF가 들어올 때 까지 계속 입력을 받습니다. 이를 특정한 Event라고 칭하겠습니다. 이 프로그램의 순서도는 아래와 같이 그릴 수 있습니다. 이 중에서 fgets만 확대해서 그려보겠습니다. Main에서 fgets를 호출했기 때문에 Main은 caller가 되고, fgets는 Main에 의해 불려진 함수가 될 거에요. 그러면, 이 경우에는 Main으로 제어권이 넘어오지 않을 거에요. 즉, Main은 block이 ..
전체 글 검색 결과
안녕하세요. 백준에서 chogahui05로 활동하고 있는 조경완입니다. 백준의 공유기 설치 문제는 많이 풀어보셨을 겁니다. 정확히 말하면, N개의 point가 있고, 그 중, C개를 설치하려고 할 때, 가장 인접해 있는 두 공유기 사이의 거리를 최대화 하라는 문제입니다. 어렵네요. 이를, 먼저 결정 문제로 바꾸어 봅시다. 그러면, 먼저 f(x)의 값을 어떻게 구해야 할 지 생각해 봅시다. N개의 집을 x 좌표 오름차순으로 정렬했다고 해 봅시다. 그러면 첫 공유기는 어디에 설치해야 할까요? 1번째 집에 설치해야 합니다. 왜 그럴까요? 문제 조건에 따르면, 같은 x좌표를 가지는 집은 없다고 했습니다. 그렇기 때문에, 집이 n개가 있고, i번째 집의 위치를 x[i]라고 하면, 아래의 식이 성립합니다. 이는 집..
hashMap은 동기화가 된 클래스가 아닙니다. 그렇기 때문에, 두 Thread에서 같은 hashMap에 동시에 접근했을 때, 문제가 발생할 수 있습니다. 둘 다 write 연산을 수행할 때에도 문제가 발생할 겁니다. 그런데, 왜 문제가 될까요? 문제가 되는 시나리오가 없을까요? 그 시나리오는, 당황하면 쉽게 생각할 수 없습니다. 두 Thread가 있습니다. 이 Thread들은, 서로 다른 값의 Integer인, 6개의 Key 값을 넣습니다. 그러면 put 메서드를 실행을 하게 될 건데요. 어떠한 일이 벌어질까요? 저는, 12보다 작아질 수 있다고 답변했습니다. 그 말이 맞을까요? 먼저 hashmap을 간단하게 보도록 하겠습니다. 3개의 static 변수만 봅시다. DEFAULT_INITIAL_CAPAC..
오버로딩과 오버라이딩의 차이는 JAVA 면접에서, 흔히 나올 수 있는 질문입니다. 이 중에 오늘은 오버로딩 (overloading)에 대해서 간단하게 알아보도록 하겠습니다. 여기에서 언급되지 않은 내용들은, 심화 편에서 이야기를 해 보도록 하겠습니다. 먼저, overload는, 클래스 내에서, 같은 메소드를 여러 개 선언하는 것을 의미합니다. 예를 들어, ArrayList 클래스를 봅시다. List에 넣을 item 하나를 받는 add 메서드가 있습니다. 그리고 특정한 위치와, List를 넣을 item을 받는 add 메서드가 있어요. 분명한 것은 이 두 메서드의 이름은 add로 같았다는 것입니다. 오버로딩을 언제 쓰면 좋을까요? 부터 생각해 봅시다. ArrayList의 맨 뒤에 item을 추가하는 기능. ..
안녕하세요. chogahui05입니다. ps를 하시다 보면, 테스트 케이스 문제를 많이 보셨을 겁니다. 보통, vector를 클리어 할 때, clear 메소드를 많이 이용하고요. 여기서 한 가지 질문. clear 메소드는 정말 vector가 할당했던 모든 것을 깔끔하게 clear 할까요? 답은 그렇다는 보장이 없다입니다. 링크에서, reallocation is not granteed 라는 문구를 보시면 알 수 있습니다. 다음 코드를 보도록 하겠습니다. v에 5개의 원소를 넣습니다. 그리고 size와 capacity를 출력합니다. 다음에 vector의 clear 메서드를 호출한 다음에 다시, size와 용량을 출력해 주는 capacity를 출력합니다. 결과 값을 보면, 1번째 줄에는 5와 8이, 2번째 줄..
최근댓글