오전 공부

근데 이거 책 개요에 초심자 대상이 아니라 DB응용 프로그램 개발한 경험이 있는 경험자를 대상으로 하고 있다는데 속독하고 나중에 다시 읽어야 할 듯함
오후 공부
저녁 공부
개인 학습용으로 정리한 내용입니다.
어차피 이해 다 못할거라서..
챕터 1, 2장 읽을거임~
3.5까지 읽었다.
대충 요약..인데 키워드만 살짝 적어둠
SQL이란 관계형데이터베이스(이하 RDB)에 질의를 하기 위한 언어이다.
SQL은 관계형 모델을 기반으로 한 질의 언어지만 관계형 모델을 충실하게 재현하지는 않는다.
관계형 모델이 나타내는 데이터 모델은 설계의 의미가 아니라 데이터를 어떻게 표현할까의 개념이다.
~라는 개념을 써서 데이터를 보여주세요 라고 정하는 것이 데이터 모델이고, 관계형 모델은 그중 하나라고 한다.
관계형 모델을 이해할 때 가장 중요한 것이 관계(릴레이션)이다.
릴레이션이 테이블 사이의 관계라고 이해하는 것은 잘못된 오해다!
SQL에 있어 릴레이션에 해당하는 것은 테이블이다!
SQL과 관계형모델은 다른 것이고 집합론적 관점에서 바라봐야 SQL을 정확히 관계형모델로서 사용할 수 있다.
SELECT 칼럼의 목록
FROM 테이블의 목록
WHERE 검색 조건
SQL에서 쓰는 SELECT문도 3개의 릴레이션 연산을 동시에 수행하는 작업이다.
1. 테이블 목록 (곱집합)
2. 검색조건 (제한)
3. 칼럼의 목록 (프로젝션)
관계형 모델에서 릴레이션을 저장하는 변수는 Relvar(관계 변수)라고 한다.
https://www.oreilly.com/library/view/sql-and-relational/9781449319724/ch01s08.html
대충 말고 집합론 관련해서 내용도 나와있었는데, 책에서 보면 됨 그리고 집합론 부분은 완벽히 이해하고 넘어가지 않았음.
https://school.programmers.co.kr/learn/courses/30/lessons/64061
const solution = (board, moves) => {
const boardWidth = board[0].length;
let boardStacks = [];
for (let i = 0; i < boardWidth; i++) {
const boardStack = board.map((row) => {
return row[i];
});
boardStacks.push(boardStack);
}
const arrangement = boardStacks.map((a) =>
a.reverse().filter((elem) => elem > 0)
);
//[ [ 3, 4 ], [ 5, 2, 2 ], [ 1, 4, 5, 1 ], [ 3, 4 ], [ 1, 2, 1, 3 ] ]
let stack = [];
let total = 0;
moves.forEach((action) => {
const selectedItem = arrangement[action - 1].pop();
if (stack[stack.length - 1] === selectedItem && selectedItem) {
stack.pop();
total++;
} else if (selectedItem) {
stack.push(selectedItem);
total++;
}
});
return total - stack.length;
};
console.log(
solution(
[
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1],
],
[1, 5, 3, 5, 1, 2, 1, 4]
)
);
stack 자료 구조 이용함
그래도 이제 생각한 대로 구현할 수 있다는 감각이 대박 좋다!
코드 퀄리티는 별로다. let이 너무 많아..!! 어떻게 고쳐야할지 모르겠다.
https://school.programmers.co.kr/learn/courses/30/lessons/12906
const solution = (arr) => {
return arr.filter((num, numIndex) => {
return num !== arr[numIndex + 1];
})
}
const solution = (arr) => {
return arr.reduce((acc, cur) => {
const length = acc.length;
if (acc[length - 1] === cur) {
acc.pop();
}
// return [...acc, cur]; // 배열을 새로 만든다. 시간 초과 acc + cur -> O(n^2);
acc.push(cur);
return acc;
}, []);
};
뻘짓 목록
1. return [...acc, cur];
배열을 새로 만들고 할당하는 거라 시간 복잡도 n만큼 나올 것이다.
따라서 reduce 시간 복잡도 O(n)안에 spread 연산자를 쓰므로 시간 복잡도 O(n^2)가 나옴
배열 arr의 크기 : 1,000,000 이하의 자연수이므로 10^12만큼 나온다.
return acc.push(cur); 라고 함... [연습문제]
CPU의 구성에 대해 설명하시오.
산술논리 연산장치, 제어장치, 레지스터
p.85
폰노이만 구조의 가장 중요한 특징을 설명하시오.
모든 프로그램은 메모리에 올라와야 실행할 수 있다.
p.80
버스의 종류를 나열하시오.
cpu 내부버스, 시스템 버스 p.84
제어버스, 주소버스, 데이터 버스 p.92
단방향 버스에 대해 설명하시오.
주소버스 p.91
cpu에서 메모리나 주변 장치로 나가는 주소 정보는 있지만 주소 버스를 통해 cpu로 전달되는 정보는 없다.
다음에 실행할 명령어의 주소를 가지고 있는 레지스터는 무엇인가?
PC, 프로그램 카운터 p. 88
다음에 실행할 명령어를 보관하는 레지스터는 무엇인가?
명령어 레지스터 (IR) p.88
6번 오류... 현재 실행할 명령어를 보관하는 레지스터! 라고 해야 함
메모리 주소를 보관하는 레지스터는 무엇인가?
주소 레지스터(AR) p.88
메모리에 저장할 데이터나 메모리에서 가져온 데이터를 임시로 보관하는 레지스터는 무엇인가?
데이터 레지스터(DR) p.88
주소 버스와 연결되어 있는 레지스터는 무엇인가?
메모리 주소 레지스터(MAR) p.88
데이터 버스와 연결되어 있는 레지스터는 무엇인가?
메모리 버퍼 레지스터(MBR) p.92
프로그램을 보호하기 위해 사용하는 두 가지 레지스터는 무엇인가?
경계 레지스터, 한계 레지스터 p.96
속도 차이가 나는 두 장치 사이에서 속도를 완화하는 장치를 무엇이라고 통칭하는가?
버퍼 p.100
응용 프로그램과 프린터 사이에서 속도 차이를 완화하는 소프트웨어를 무엇이라고 하는가?
스풀러 p.100
부팅 시 운영체제를 메모리로 가져오기 위해 사용하는 작은 프로그램은 무엇인가?
부트스트랩 코드 p.97
속도가 빠르고 값이 비싼 저장장치를 CPU 가까운 쪽에 두고, 값이 싸고 용량이 큰 저장 장치를 반대쪽에 배열하는 방식을 무엇이라고 하는가?
저장장치의 계층 구조 p.105
작업의 효율성을 높이기 위해 CPU가 입출력 관리자에게 입출력 작업을 요청하면 작업을 마친 입출력 관리자는 CPU에 무엇을 보내는가?
인터럽트 p.107
CPU의 도움 없이도 메모리를 사용할 수 있도록 입출력 관리자에게 주는 권한을 무엇이라고 하는가?
직접 메모리 접근(DMA) p.109
CPU와 입출력 관리자가 서로 다른 메모리 영역을 사용하는 기법을 무엇이라고 하는가?
메모리 매핑 입출력(Memory Mapped I/O, MMIO) p.109
CPU가 병렬 처리를 지원하지 않을 때 소프트웨어적으로 병렬 처리를 하는 기법을 무엇이라고 하는가?
VLIW 기법(Very Long Instruction Word) p.119
[심화문제]
페이지로 표기
컴퓨터에서 클록이 하는 역할을 설명하시오.
p.83
프로그램 카운터 레지스터의 역할을 설명하시오.
p.88
제어 버스, 주소 버스, 데이터 버스에 대해 설명하시오.
p.92
휘발성 메모리와 비휘발성 메모리를 비교하여 설명하시오.
p.93
DDR SDRAM에 대해 설명하시오
p.94
챕터 8까지 찢.었.다.
근데 기본 세팅에 기본 구성에 자바스크립트 기초만 본거라 한게 없다.
var http = require("http");
var fs = require("fs");
var app = http.createServer(function (request, response) {
var url = request.url;
if (request.url == "/") {
url = "/index.html";
}
if (request.url == "/favicon.ico") {
return response.writeHead(404);
}
response.writeHead(200);
console.log(__dirname + url);
response.end(fs.readFileSync(__dirname + url)); // 웹서버가 웹브라우저 요청에 응답하는 명령,
});
app.listen(3000);
// node.js를 웹서버로 만들어주는 코드