[TIL 007] 20220308
최근에 계속 sqld 공부만 해서 따로 기록을 하지는 않았었다.
01 | 학교 수업 - 운영체제
컴퓨터 시스템의 개요
1) 기본 구성요소 - 처리기 주기억장치 입출력모듈 시스템 버스
2) 명령어 수행 - 명령어의 형식 Opcode 처리기-메모리 처리기-입출력
3) 인터럽트 - 프로그램 / 타이머 / 입출력 / 하드웨어 실패 인터럽트
- 인터럽트가 있는 경우와 없는 경우의 제어 흐름
- 짧은 / 긴 I/O 대기
- 간단한 인터럽트 처리
- 인터럽트로 인한 메모리와 레지스터의 변화
- 중첩 인터럽트
4) 메모리 계층 구조 - 레지스터 캐시 주기억장치
5) 캐시 메모리 - 캐시 읽기 연산 RA(Read Adress) LRU locality (Time, space)
6) 직접 메모리 접근 - Programmed I/o Interrupt-driven I/O DMA
7) 대칭형 멀티프로세스
8) 멀티코어 컴퓨터
02 | 프로젝트
studied_article_ids = Study.objects.filter(
user=self.current_user
).values_list("article__id", flat=True)
# queryset = queryset.filter(id__in=studied_article_ids)
기존 코드.
당시 이해한 문제점으로는 쿼리셋 즉 article 전체 객체의 id 들을 studied_article_ids 와 비교하며 필터링하는 과정에서 article의 id 순서대로 즉 아티클이 조회된 것이 아니라 생성된 순서대로 정렬되는 것이었다.
elif tab == "study":
studied_article_ids = Study.objects.filter(
user=self.current_user
).values_list("article__id", flat=True)
queryset = []
for studied_article_id in studied_article_ids:
queryset.append(Article.objects.get(id = studied_article_id))
이를 해결하기 위해서 for문을 이용해서 아예 studied_article_ids 라는 리스트에 담긴 article들의 id 순서대로 queryset 이라는 리스트에 append 하는 방식으로 바꾸었다..
상당히 비효율적이라는 생각이 들지만 구글링을 해봐도 별다른 수가 보이지 않아서 우선은.! for 문으로 했다.
실패한 방법은 합집합으로 하는 것이다.
elif tab == "study":
studied_article_ids = Study.objects.filter(
user=self.current_user
).values_list("article__id", flat=True)
queryset = Article.objects.get(id=studied_article_ids[0])
for studied_article_id in studied_article_ids:
article = Article.objects.get(id=studied_article_id)
queryset = queryset|article
위와 같이 기존의 쿼리셋과 article의 합집합을 통해 해결하고자 했다. 그러나 이렇게 할 경우 기존에 존재했던 문제가 똑같이 발생했다. 순서가 article 이 생성된 순서대로 할당되었다.
교집합을 이용하려고 했는데, 이는 article 객체 전부가 쿼리셋에 담겨 문제가 생겼다. (윗 부분에서 queryset 에 아티클 전부를 할당해서 그런 것 같다.)
추후에 더 좋은 방법을 알게 되면 업데이트 해야겠다.
03 | sqld
startwith 시작 데이터는 포함된다.
PRIOR 은 WHERE SELECT CONNECT BY 모두에서 사용 가능하다.
뷰는 정의만을 갖고 있다.
뷰는 테이블 구조가 변경되어도 변경하지 않아도 된다.
04 | 크롤링
셀레니움에서만 xpath 활용 가능. bs4 활용 불가능
find_element_by_xpath find_elements_by_xpath
문법 //tagname[@Attribute='value']
/ 절대경로 나타냄
// 상대경로
*[@href] href 인 태그 모두 선택
div[@*] 속성이 하나라도 있는 경우의 div 태그 특정 행 선택 (//tr)[last()] 마지막 행 (//tr)[position()=2] 두번쨰 행
아무 속성이나 //p[@*] p 태그인데 어떤 속성이든 가진 경우