어디까지 갈 수 있을까?
1. HTTP 1.1 Hypertext Transfer Protocol 1.2 client-service 모델의 req-res로 이루어짐 1.3 TCP 동작 : 유실X 1.4 stateless 1.5 HTTP response code 1.6 쿠키 stateless 보완 위해 나옴 1.7 proxy + 빠른 접근 + 인터넷 사용료 인하 1.8.1 if-modified-since 1.9 DNS 이름으로 매핑된 IP, 전화번호부 분산화 + 계층화 : 규모가 커서 짤라서 관리 이석복 - 컴퓨터네트워크 - 어플리케이션 계층 http://www.kocw.net/home/enrolment/enrolmentView.do?cid=6b984f376cfb8f70&lid=74b934572332b6ba
1. 운영체제란? 1.1 목적 1.1.1 효율성 : 주어진 자원으로 최대 성능 발휘 1.1.2 형평성 : 특정 사용자/프로그램의 지나친 불이익 발생 X 1.1 인터페이스 1.1.1 사용자와 하드웨어 사이의 인터페이스 1.1.2 memory, process 관리, I/O 처리 지원 1.1.3 어플리케이션이 하드웨어에 접근하는 것을 가능하게 함(커널) 1.1.4 컴퓨터의 기본 기능 지원하는 로우레벨 소프트웨어 1.1.5 하드웨어 관리 총괄 매니저 1.2 메모리 관리 1.2.1 사용/비사용 메모리 영역 분리 1.2.2 멀티 프로그래밍시, 각 프로세스의 메모리 할당량과 시점 지정 1.2.3 프로세스 종료/대기 상태시 메모리 해제 1.3 장치 관리 1.3.1 프로세스에 장치 할당 및 해제 관리 1.3.2 인터럽트..
DB 인덱스란 인덱스란?인덱스 생성를 생성하면 데이터가 정렬되고 물리적 주소와 함께 저장됨 DB 검색속도를 높여주는 자료구조 where 절의 효용성but, 인덱스는 풀스캔 X. 정렬돼있기 때문에 빠르게 찾을 수 있음 기본적으로 풀스캔, min/max의 효율성 양끝값을 가져오면 되므로 풀스캔보다 효율적 인덱스의 단점저장공간 추가적으로 필요 정렬된 상태를 유지해야 하기 때문에 insert, update, delete 시 복잡해짐 인덱스 생성 전략 조건절에 자주 등장 중복 데이터가 최소 order by에 자주 사용 조인에 자주 사용 조건절 호출 빈도가 높은 컬럼 b+tree 구조 사용 리프노드가 아닌 곳엔 key / 리프노드에 value 모든 리프노드가 연결리스트 -> 선형검사 시 유리 출처 https://v..
1. 문제 이해 2. 설계 - 시간복잡도로 방향성 잡기 - 아이디어 - To Do List 만들기 - 검증(입력예제 기반 손검증, 시간복잡도, boundary test) 3. 구현 4. 디버깅 설계 50%(최악의 경우) / 구현 + 디버깅 50% 시간분배가 적절 설계를 안 하고 풀었던 경우 디버깅에 시간이 다 가는 경우가 많았다. 앞으로 설계를 최우선으로 하고 문제를 풀어야겠다.
1. 단축키 breakpoint / toggle breakpoint f9 디버깅 시작 shift + f9 step over f8 resume shift + f8 step into f7 디버깅 종료 ctrl + f2 에디터로 포커스 변경 esc 2. 설명 resume : 다음 breakpoint로 이동 step over : 한줄한줄 실행 step into : 호출된 함수로 이동 step out : 함수에서 빠져나옴 run to cursor : 포커스 된 라인으로 이동 ** breakpoint / toggle breakpoint 은 기존 단축키를 변경함 3. 기타 evaluate : 수동 실행 watch : 삭제하기 전까지 자동 실행 특정 조건에서 멈추고 싶을 때? i==5와 같은 조건문을 추가하고 거기에 ..
-프로세스 : 운영체제가 작업을 처리하는 최소 단위, 운영체제가 pcb에 상태 저장 -스레드 : 프로세스가 작업을 처리하는 최소 단위, 스레드 별로 상태정보 가짐(pcb는 커널에서, tcb는 프로세스내에서 관리함) *멀티스레드의 장점 1. 컨텍스트 스위칭시 공유하고 있는 메모리만큼 메모리 자원을 아낄 수 있음 2. stack외에 모든 메모리를 공유하기 때문에 통신 부담이 적어 응답 시간이 빠르다 *멀티스레드의 단점 1. 하나의 스레드에 오류가 나면 모든 스레드가 종료될 수 있다. 2. 자원을 공유하기 때문에 동기화 문제가 발생한다 *멀티스레드의 동시성과 병렬성 동시성 : 싱글코어에서 멀티스레드를 동작시키기 위한 방식, 여러 개의 스레드를 번갈아가며 실행(시분할처럼 동시에 실행되는 것처럼 보이게 하는 거 ..
정리 하는중 최소 신장 트리 모든 노드를 이었을때 간선의 가중치의 합이 최소인 트리 크루스칼 from heapq import heappop, heappush def find(x): if x == parent[x]: return x parent[x] = find(parent[x]) return parent[x] def union(x,y): x,y=find(x),find(y) parent[x]=y def kruskal(): cost=0 while q: dist, v1, v2 = heappop(q) if find(v1) == find(v2): continue else: cost += dist union(v1, v2) return cost if __name__=="__main__": N = int(input()..
위상이 위치를 뜻한다고 한다 위상정렬은 각 노드들의 순서를 찾는 알고리즘이다 이 사진을 보고 바로 이해가 갔다. 0->1->2->4->3->5 순으로 진행해야 한다. 그림에서 보면 알겠지만 먼저 탐색을 시작하는 것은 진입차수가 0인 노드부터이다. 진입차수 배열을 따로 만들어서 진입 차수가 0인 정점을 모두 큐에 삽입 큐에서 정점를 빼며 진입차수를 감소시킴 진입차수가 0이 됐다면 큐에 삽입 순으로 진행하면 일의 순서를 알 수 있게 된다 from collections import deque def topology(): q = deque() ##진입 차수가 0인 정점을 모두 큐에 넣는다 for i in range(N): if cnt_input[i] == 0: q.append(i) while q: curr = ..