목록분류 전체보기 (50)
손영배 블로그 누구나 쉽게 이해하고 습득하기
List 타입이면서 사용자 지정 Class 타입의 List를 오름차순 or 내림차순으로 정렬하고 싶을 때 (코딩테스트에서 이런 상황이 나온다. Java로 푸시는 분들..) static class Node implements Comparable{ int value = 0; public Node(int value) { this.value = value; } //올름차순 @Override public int compareTo(Node obj) { if(this.value > obj.value) { return 1; } else if(this.value < obj.value) { return -1; } return 0; } } Collections.sort(list); - 인자로 전달된 obj가 작다면 양의 정..
스케줄러는 ready queue에 존재하는 프로세스들을 특정 우선순위를 기반으로 CPU를 할당받게 해주는 역할이다. 스케줄러가 스케줄링을 하는데에 2가지 중요한 요소, 최대관심사, 기준 첫번째, 대기 시간(waiting time), CPU 할당시간 두번째, 스케줄링을 어떻게 구현할 것인가? 어떤 자료구조인가? 스케줄링의 목표는? CPU 활용을 최대화 평균 대기 시간을 최소화 처리량 최대화 선점 과 비선점의 차이는? - 1. 선점 : 뺏을 수 있는 방법 한 프로세스가 CPU를 할당받아 실행중이라도 다른 프로세스가 현재 프로세스를 중지 시키고 CPU를 강제적으로 뺏을 수 있는 스케줄링 방식 장점 : 긴급하게 처리해야 할 높은 우선순위를 가진 프로세서들을 빠르게 처리가능 단점 : 프로스세 간 문맥 교환이 자주..
1. 프로세스란 프로그램이 실행 중인 상태(더블클릭이 되어, 메모리를 할당받은) 프로세스는 함수 매개변수, 복귀주소, 로컬변수 등 임시적인 자료를 가지는 프로세스 스택 전역변수를 저장하는 데이터 섹션, 동적 할당 메모리를 위한 힙 등으로 구성된다. 2. 프로세스 상태 프로세스는 다음 상태 중 하나를 가진다. new : 프로세스가 생성 중이다. running : 명령어들이 실행되고 있다. waiting : 프로세스가 어떤 사건(입출력 완료 또는 신호의 수신 등)이 일어나기를 기다린다. ready : 프로세스가 처리기에 할당되기를 기다린다. terminated : 프로세스가 실행을 종료 3. 프로세스 제어 블록(PCB: Process Control Block) 다른 말로 테스크 제어 블록이라고도 한다. Pr..
프로세스의 스케줄링을 위해서 OS는 큐(Queue)를 지원한다. (Queue는 Linked List로 구현되어 있다. header end PCB를 가리키는 포인터를 가지고 있다). 큐에는 job queue, ready queue, device queue,waiting queue가 있다. - job queue는 프로세스가 시스템에 처음 들어와서 대기하는 큐 - ready queue는 주기억 장치에 적재되어 실행을 기다리는 프로세스를 유지하는 큐 - device queue는 장치를 사용하기 위해 기다리는 큐 - waiting queue는 특정한 event마다 대기하는 프로세스를 유지시켜주는 큐 근데 여기서 스케줄러는 각 큐마다 다음 차례의 프로세스를 결정하기는 기법이다. 크게 세 가지 종류 1. 장기 스케줄..
Scanner을 쓸때 직관적이고 편하다. 하지만 시간이 많이 걸린다. Scanner scan = new Scanner(System.in); R = scan.nextInt(); C = scan.nextInt(); int x = scan.nextInt(); int y = scan.nextInt(); BufferedReader와 StringTokenizer 콜라보 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); //여기서 이미 콘솔에서 한 줄 읽었다. R = Integer.parseInt(st.nextToken()); C = ..
- 총 구매액이 1000 이상인 사용자에게만 사은품을 증정하고 싶다면 where 구문으로 생각했을 것이다. SELECT userID AS '사용자', SUM(price*amount) AS '총구매액' FROM buyTbl WHERE SUM(price*amount) > 1000 GROUP BY userID; 하지만 오류가 난다. 집계 함수(SUM,,,)는 where절에 나타날 수 없다는 얘기이다. 이럴 때 사용되는 것이 HAVING절이다. HAVING절은 WHERE와 비슷한 개념으로 조건을 제한하는 것이지만, 집계함수에 대해서 조건을 제한하는 것이라고 생각하면 된다. 그리고 HAVING절은 꼭 GROUP BY절 다음에 나와야 한다. 순서가 바뀌면 안된다. select userID AS '사용자', SUM(..
예외 발생 시 try -> catch -> finally의 순서로 실행되고 예외 미발생 시 try -> finally의 순서로 실행 try 또는 catch 블럭에서 return 문을 만나도 finally불럭은 수행됩니다. try { // 프로그램 실행 로직 } catch(Exception e) { // 예외발생 시의 로직 } finally { /* 1. 기본 실행 순서: try문에서 예외가 발생하지 않았으면 catch문은 생략되어 try문이 실행된 이후에 finally문이 실행되고, try문에서 예외가 발생했으면 try문, catch문 순서로 실행된 이후에 finally문이 실행된다. try문이나 catch문 안에 return문 또는 throw문이 있다면, 그 return문 또는 throw문 전까지 로직..
INNER JOIN : 양쪽 테이블에 모두 내용이 있는 것만 조인되는 방식 SELECT FROM INNER JOIN ON [WHERE 검색조건] 위의 형식에서 INNER JOIN을 그냥 JOIN이라고만 써도 INNER JOIN으로 인식한다. 구매 테이블 중에서 JYP라는 아이디를 가진 사람이 구매한 물건을 발송하기 위해서 이름/주소/연락처 등을 조인해서 검색 select * from buyTbl INNER JOIN userTbl ON buyTbl.userID = userTbl.userID where buyTbl.userID = 'JYP'; 코드를 좀 더 명확히 하기 위해서 select 다음의 컬럼 이름(열 이름)에도 모두 '테이블이름.열이름'식으로 붙여 준다. SELECT buytbl.userID, us..