Computer Science (252) 썸네일형 리스트형 2. Index란 1. 인덱스(Index)란? [ 인덱스(index)란? ] 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그러한 이유는 해당 연산을 수행하려.. 1. 인덱스에 대한 고찰 Spring boot quartz library를 사용하여 돌리는 Batch파일에 문제가 문제가 발생하였다. 결론부터 말하자면 서비스에 대한 수정을 요구한다. 해당 서비스를 수정하며 Select Query문을 보게 되었고, Plan을 돌려본 결과 2가지 문제에 대해 생각했다. 1년이 지난 회원을 계산하여 휴면계정으로 전환하는 배치였는데, 최근접속일시를 기준으로 접속여부를 판단했다. 중요한 부분은 최근접속일시가 null인 경우가 포함이 되어있다는 것과, varchar타입으로 되어 있다보니 Date타입으로 형변환을 하다보니 Index를 타지를 못하는 경우다. 1. 기존 Query에 대한 튜닝 Index를 태우기 위해서는 컬럼에 대한 가공은 해서는 안된다. 예를 들어 SUBSTRING을 사용한다는 경우 말이다.. 동기화 처리 및 데드락 Process Synchronization 협력하는 프로세스들 사이에서 실행 순서 규칙을 정하여 공유된 자원의 일관성 (consistency)을 보장하는 것 하나의 프로세스가 공유된 자원에 접근하고 난 뒤에 다른 프로세스가 쓰도록 만들어주어야 함 Critical Section (Shared Resource) nn개의 프로세스들이 있을 때, 이 프로세스들은 공유된 자원을 사용하기 위해 경쟁한다 (race condition). 각각의 프로세스에는 “code segment”라는 것이 있는데 일반적으로 “Critical Section (CS)”이라고 불린다. CS을 통해 공유된 자원에 접근할 수 있다. CS resource that “allows only one user at a time”. 위의 문장과 같이 .. CPU 스케쥴링 1. CPU 스케쥴링 1.1 CPU 스케쥴러 준비 상태에 있는 프로세스들 중 어떠한 프로세스에게 CPU를 할당할지 결정하는 운영체제의 코드 - 실행 상태에 있던 프로세스가 I/O 요청 등에 의해 봉쇄 상태로 바뀌는 경우 - 실행 상태에 있던 프로세스가 타이머 인터럽트 발생에 의해 준비 상태로 바뀌는 경우 - I/O 요청으로 봉쇄 상태에 있던 프로세스의 I/O 작업이 완료되어 인터럽트가 발생되고 그 결과로 프로세스의 상태가 준비 상태로 바뀌는 경우 - CPU에서 실행 상태에 있는 프로세스가 종료되는 경우 - 선점형 방식, 비선점형 방식이 존재 1.2 디스패처 새롭게 선택된 프로세스가 CPU를 할당받고 작업을 수행할 수 있도록 환경설정을 하는 운영체제의 코드 기존의 실행중이던 프로세스의 문맥을 PCB에 이양.. 프로세스 구조 및 관리 기법 1. 프로세스 관리 1.1 프로세스의 개념 메모리에 올라가 실행 중인 프로그램 일반적으로 잡(JOB)이라는 용어와 혼동해서 사용 시분할 시스템 환경에서는 문맥 교환(context switch)을 위한 PCB를 가지는 객체 1.2 프로세스의 상태 프로세스는 실행, 준비, 봉쇄의 세가지로 구분된다. 실행 상태 : 프로세스가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태. 준비 상태 : 프로세스가 CPU만 보유하면 당장 명령을 실행할수 있지만 CPU를 할당받지 못한 상태. 봉쇄 상태 : CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태. 1.3 프로세스 제어블록(PCB) 프로세스 관리를 위해 프로세스 정보를 담은 커널내의 자료구조 프로세스의 상태, 프로그램 카운터 값, CPU 레저스터값.. 3 vector와 priority_queue sorting하기 1. vector 내림 차순 : sort(v.begin(), v,end(), greater()); 오름 차순 : sort(v.begin(), v,end()); 2. map 내림 차순 : struct cmp { bool operator()(int n, int m){ return nm; } } or priority_queue q; 3. struct의 값을 비교할때 (priority_queue를 사용해서) #include #include #include using namespace std; typedef struct { int pos1; int pos2; }pos12; struct cmp { bool operator()(pos12 n, pos12 m) { if (n.pos1 == m.pos1) return n.. 1 map 사용하기 map은 key, value로 이루어진 자료구조이다. 맵 기본 함수 기본형태 map : key와 value를 pair 형태로 선언합니다. iterator(반복자) begin() : beginning iterator를 반환 end() : end iterator를 반환 추가 및 삭제 insert( make_pair(key,value) ) : 맵에 원소를 pair 형태로 추가 erase(key) : 맵에서 key(키값)에 해당하는 원소 삭제 clear() : 맵의 원소들 모두 삭제 조회 find(key) : key(키값)에 해당하는 iterator를 반환 count(key) : key(키값)에 해당하는 원소들(value들)의 개수를 반환 기타 empty() : 맵이 비어있으면 true 아니면 false를 반환.. 백준 17142 연구소 3 1. 연구소에 비활성 바이러스 5개가 존재하고 3개를 활성시킬시 5개에서 3개를 뽑는 경우의 수를 다 구해야 한다.(dfs로 구현했다) 2. 3개를 선정후 각 사항에 맞게 몇시간후에 바이러스가 연구소를 차게 하는지 bfs를 통해 계산한다. - 여기서 유의 사항에 주목해야 하는데 중요한건 '비활성 바이러스'를 벽으로 보면 안된다는 거다. 즉 다 채우고 비활성바이러스가 나머지 항목에 있으면 끝내줘야 한다. 비활성바이러스쪽으로 들어가면서 시간을 더 투자해선 안된다. 해결방법은 처음에 감염시켜야 할 연구소방의 갯수를 기억하고 나중에 비교한다. (처음 한 방법은 한번 탐색할때마다 전체 염구소를 탐색해서 끝났는지 확인하는건데 이 경우는 너무 많은 시간을 소비하는 별로인 알고리즘이였다.) 3. 위치를 변경하고 계산해.. 이전 1 ··· 26 27 28 29 30 31 32 다음