오전
운영체제 챕터 6 공부
네트워크 공부하기 (1강)
오후
자료구조 및 알고리즘 1문제 풀이
Node js 구현 (1-43 ~ 48)
저녁
자바스크립트 객체 ~ 클래스 개념 이해하기
Node js 구현 (챕터 2 시간 되는 만큼)
집에 가서 관계형 데이터 베이스 이론 책 읽기
쉽게 배우는 운영체제 개인 학습용입니다.
2개 이상의 프로세스가 서로의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 무엇이라 하는가?
교착상태
p.293
프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 나타내는 방향성이 있는 그래프를 무엇이라 하는가?
자원할당 그래프
p.295
네가지 교착 상태 필요조건에 대해 설명하시오.
원형 대기
점유와 대기를 하는 프로세스 간의 관계가 원 모양이여야 함
상호배제
한 프로세스가 사용중인 자원은 다른 프로세스와 공유 불가
비선점
한 프로세스가 사용중인 자원은 다른 프로세스가 빼앗을 수 없음
점유와 대기
프로세스가 어떤 자원을 할당 받은 상태에서 다른 자원을 기다림
p.297-298
교착 상태 해결 방법 중, 교착 상태를 유발하는 네 가지 조건을 무력화하는 방법은 무엇인가?
교착상태 예방
p.302
교착 상태 해결 방법 중, 교착 상태가 발생하지 않는 수준으로 자원을 할당하는 방법은 무엇인가?
교착상태 회피, 은행원 알고리즘
p.308
교착 상태 해결 방법 중, 자원 할당 그래프를 사용하여 교착 상태를 발견하는 방법은 무엇인가?
무거운 교착상태 검출
p.312
교착 상태 해결 방법 중, 타임아웃을 이용하여 해결하는 방법은 무엇인가?
가벼운 교착상태 검출
p.312
교착 상태 해결 방법 중, 은행원 알고리즘을 사용하여 해결하는 방법은 무엇인가?
교착상태 회피
p.309
교착 상태 해결 방법 중, 모든 자원에 번호를 부여하고 낮은 번호의 자원을 사용할 수 없도록 하는 방법은 무엇인가?
원형대기 예방
p.306
교착 상태 해결 방법 중, 프로세스가 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나, 그렇지 못할 경우 자원을 모두 반납하는 방법은 무엇인가?
점유와 대기 예방
p.304
교착 상태 해결 방법 중, 교착 상태가 검출되면 교착 상태를 일으킨 모든 프로세스를 종료하는 방법은 무엇인가?
교착 상태 회복
p.317
자원 할당 그래프에서 무엇이 발견되면 교착 상태라고 판단 할 수 있는가?
사이클
p.315
p.305
p.312
p.313
https://velog.io/@dorito/1.-네트워크란
function templateHTML(title, list, body, control) {
return `
<!doctype html>
<html>
<head>
<title>WEB1 - ${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB</a></h1>
${list}
${control}
${body}
</body>
</html>
`;
}
function templateList(filelist) {
let list = "<ul>";
for (let i = 0; i < filelist.length; i++) {
list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
}
list = list + "</ul>";
return list;
}
이렇게 연관된 데이터나 함수는 객체로 묶어서 처리하는 것이 좋다.
template
라는 객체 만들기
let template = {
HTML: function (title, list, body, control) {
// 함수 내용
},
list: function (filelist) {
// 함수 내용
};
templateHTML(title, list, body, control)
template.HTML(title, list, body, control)
templateList(filelist)
template.list(filelist)
로 가져옴객체가 많아지면 모듈로 정리!!
모듈 만들어서 객체나 함수 묶고, 이를 파일로 분리해서 외부에 독립적으로 공유할 수 있다.
https://ko.javascript.info/modules
https://baeharam.netlify.app/posts/javascript/module
링크로 상위디렉터리나
path 모듈의 parse aptjem tkdydgotj ../password.js
경로를 보니 객체 출력
디렉터리 경로 ..
는 dir 프로퍼티
확장자 .js
는 ext 프로퍼티로 분류
경로에서 파일명 password.js
-> base 프로퍼티
let path = require('path');
추가해줌..
let filteredId = path.parse(queryData.id).base;
fs.readFile(
`data/${filteredId}`,
"utf8",
function (err, description)
url을 통해서 상위 디렉터리로 접근하려는 것을 막는다.
npm 모듈 사용
사용자가 입력한 정보를 웹으로 출력할 때 정보 필터링 (html 태그 이런거)
XSS
: Cross - Site Scripting 약자
내용에
해석하지 않고 그대로 출력하게 만들기 ->
<
(less than)= <
>
(greater than) = >
=> html entities
사용!,
=> 사이트를 오염시키는 데이터를 소독한다 = npm sanitize html
검색해보기! https://www.npmjs.com/package/sanitize-html
npm, yarn 차이
=> https://seogeurim.tistory.com/12, [개발상식] npm과 yarn
yarn은 페이스북에서 만든 자바스크립트 패키지 매니저.
리액트(React)와 같은 프로젝트를 진행하며 겪었던 어려움을 해결하기 위해 개발되었고, npm과 같은 기능을 수행하나, npm 레지스트리와 호환하면서 속도나 안정성 측면에서 npm보다 향상되었다고 한다. 그러나!
요즘은 압도적으로 성능차이가 나지는 않는다고 한다. 또 npm은 유저수가 넘사벽이라서 처음 만져볼 때 npm으로 시작하는 것도 나쁘지 않다고 함!
yarn init // package.json 생성
yarn or yarn install // package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치
yarn add package_name@버전 // 특정 패키지의 특정 버전 설치
yarn add 주소 //특정 저장소 내 패키지 설치. 주로 github을 이와 같이 설치합니다.
yarn global add package_name // 옵션. 글로벌로 설치. 로컬의 다른 프로젝트도 이 패키지를 사용 가능하게 됩니다.
yarn remove // 패키지 삭제 명령어입니다.
yarn upgrade // 설치한 패키지들을 업데이트해줍니다.
npm dedupe // 중복 설치된 패키지들을 정리해주는 명령어입니다.
// In ES modules
import sanitizeHtml from 'sanitize-html';
// Or in CommonJS
const sanitizeHtml = require('sanitize-html');
let sanitizedTitle = sanitizeHtml(title);
let sanitizedDescription = sanitizeHtml(description, {
allowedTags: ['h1']
});
https://whyprogrammer.tistory.com/467 이 사람이 그 내가 보는 강좌 잘 정리해둠
https://school.programmers.co.kr/learn/courses/30/lessons/42578
맵 관련 공부 기록은 여기에서 볼 수 있다.
const solution = (clothes) => {
// map 구조에 집어넣는다
let map = new Map();
for (let [value, key] of clothes) {
map.set(key, map.get(key) + 1 || 1);
// map.set(key, value) – key를 이용해 value를 저장
// or 연산자가 첫번째 true를 갖고 옴, 다 false면 마지막 값 가져옴
}
const totalCases = [...map.values()].reduce((acc, cur) => {
return acc * (cur + 1);
}, 1); // map은 iterable이므로 spread연산자 쓸 수 있다.
return totalCases - 1;
};
솔루션.. 이 분 글 참고함
내일 다시 풀어야 함
https://velog.io/@dorito/리눅스-유닉스는-뭐고-맥os는-무슨-운영체제일까