프로그래머스 문제 풀이
node js 챕터 1 9장 ~ 18장 보기
원리부터 배우는 관계형 베이스 입문 3, 4장 읽기
운영체제 챕터 3 복습
(만약 시간이 된다면) 리트코드에서 SQL 문제 풀기
https://school.programmers.co.kr/learn/courses/30/lessons/81301?language=javascript
문자열 관련 다루는거 아직 너무 어렵다..
https://github.com/ziishaned/learn-regex/blob/master/translations/README-ko.md
정규식 관련 괜찮은 레포!
const solution = (str) => {
const numbersRegex = [
/zero/g,
/one/g,
/two/g,
/three/g,
/four/g,
/five/g,
/six/g,
/seven/g,
/eight/g,
/nine/g,
];
for (let i = 0; i < 10; i++) {
str = str.replace(numbersRegex[i], i);
}
return Number(str);
};
다른 사람 풀이 오브젝트 써서 푸는거 궁금했는데 신기하다!
function solution(s) {
let charSet = {
"zero" : 0,
"one" : 1,
"two" : 2,
"three" : 3,
"four" : 4,
"five" : 5,
"six" : 6,
"seven" : 7,
"eight" : 8,
"nine" : 9,
}
for(let [key, value] of Object.entries(charSet)) {
let re = new RegExp(key, "g");
s = s.replace(re, value);
}
return parseInt(s);
}
**new RegExp(`${key}`,"g");**
코드 부분 ->
RegExp 백틱으로 변수 변환 필요 없음.
RegExp(key, "g");
로 적어주면 됨
더 쩌는 풀이
const solution = (s) => {
let numbers = [
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
];
var answer = s;
for (let i = 0; i < numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
};
join과 split을 그냥 단순히 배열<->문자열 전환으로만 생각하지 않고 정확하게 알고 있어야 함
arr이라는 변수를 따로 생성하지 않고 answer = answer.split(numbers[i]).join(i); 처럼 answer에 바로 대입하는 것도 괜찮을까요? arr를 생성해서 대입하는 이유
split함수의 반환값을 쓰기 위해서입니다. split을 쓴 answer는 변하지 않습니다.
const numToString = [
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
];
const solution = (s) => {
return +numToString.reduce((acc, cur, idx) => {
if (s.includes(cur)) {
return acc.replace(new RegExp(cur, "g"), idx);
} else return acc;
}, s);
};
아.. node js 관련 글 써둔거 다 날라갔다. ㅠㅠㅠㅠ 임시저장 불러오기 취소 눌러버림..
9장에서 23장까지 정리!
쿼리스트링: 65p ? 뒤에 나와있는 것들~

아무튼 핵심만..
url.parse 가 deprecate 되어서 21년도 3월 이후엔 작동이 되지 않습니다.
강의 진행 중 get을 읽을 수 없다던지 그런 메세지가 cmd에 뜨면 이렇게 바꾸면 됨
let queryData = url.parse(_url, true).query;
에서
var queryData = new URL('http://localhost:3000' + _url).searchParams;
var http = require('http');
var fs = require('fs');
var url = require('url');
// main.js에서 url이라는 변수를 통해 Node.js의 url모듈에 담긴 기능을 사용할 수 있다.
var app = http.createServer(function(request,response){
var _url = request.url; // 사용자가 요청한 url
if(_url == '/'){
url = '/index.html';
}
if(_url == '/favicon.ico'){
response.writeHead(404);
response.end();
return;
}
response.writeHead(200);
//console.log(__dirname + url);
response.end(queryData.id);
});
app.listen(3000);
let http = require("http");
let fs = require("fs");
let url = require("url");
let app = http.createServer(function (request, response) {
let _url = request.url;
let queryData = url.parse(_url, true).query;
let pathname = url.parse(_url, true).pathname;
if (pathname === "/") { // 홈일 때
if (queryData.id === undefined) {
let title = "Welcome"; // 홈 제목
let description = "Hello, Node.js"; // 홈 내용
let template = `
<!doctype html>
<html>
<head>
<title>WEB1 - ${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB</a></h1>
<ul>
<li><a href="/?id=HTML">HTML</a></li>
<li><a href="/?id=CSS">CSS</a></li>
<li><a href="/?id=JavaScript">JavaScript</a></li>
</ul>
<h2>${title}</h2>
<p>${description}</p> // 읽어온 파일 내용 표시
</body>
</html>
`;
response.writeHead(200);
response.end(template);
} else { // 홈이 아닐 때
fs.readFile(
`../data/${queryData.id}`,
"utf8",
function (err, description) {
/* fs.readFile(`../data/${queryData.id}`,"utf8", function(err, description) {
fs모듈의 readFile 기능으로 파일을 읽고,
그 내용을 description 변수에 저장
쿼리스트링이 있다면 홈이 아니고, 쿼리 스트링이 없다면 홈으로 구분할 수 있다.
즉, 사용자가 요청한 쿼리 스트링을 가지고 있는 queryData.id로 구분하면 됨 */
let title = queryData.id; // 쿼리 스트링에서 제목을 가져옵니다.
let template = `
<!doctype html>
<html>
<head>
<title>WEB1 - ${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB</a></h1>
<ul>
<li><a href="/?id=HTML">HTML</a></li>
<li><a href="/?id=CSS">CSS</a></li>
<li><a href="/?id=JavaScript">JavaScript</a></li>
</ul>
<h2>${title}</h2>
<p>${description}</p> // 읽어온 파일 내용 표시
</body>
</html>
`;
response.writeHead(200);
response.end(template);
}
);
}
} else {
response.writeHead(404);
response.end("Not found");
}
});
app.listen(3000);
여기 코드에서는 require 쓰는데 node js es6 import vs require 검색해보면
1. import * as fs from 'fs';
2. const fs = require('fs');
이런식으로 쓴다.. 여기서 궁금해서 찾아봄 es6란? 자바스크립트 버전 같은거다..
최근 ES6(ES2015) 모듈 시스템인 import가 많이 사용되고 있지만, 아직까지는 import 키워드가 100% 대체되어 사용될 수 없습니다.
<script> 태그를 사용하는 브라우저 환경과, NodeJS에서도 CommonJS를 기본 모듈 시스템으로 채택하고 있기 때문에, Babel과 같은 ES6 코드를 변환(transpile)해주는 도구를 사용할 수 없는 경우에는 require 키워드를 사용해야 합니다.
출처
https://nodejs.dev/en/learn/reading-files-with-nodejs

The simplest way to read a file in Node.js is to use the fs.readFile() method, passing it the file path, encoding and a callback function that will be called with the file data (and the error):
쉽게 배우는 운영체제 책 문제 풀이입니다
영상도 꼭 보기!

[연습문제]
프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야하는가?
PCB, 프로세스 제어 블록 = 메모리를 할당 받은 프로그램, p.137
운영체제가 해당 프로세스를 위해 관리하는 데이터 구조
프로세스 = 프로그램 + 프로세스 제어 블록
프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가?
준비 상태 p.139
프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태는 무엇인가?
대기 상태(Blocking status) p.140
CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업을 무엇이라고 하는가?
디스패치 p.140
디스패치는 보내다, 파견하다 의미 가짐 = 선택해서 꺼낸다 의미
NOTE: 대기 상태를 추가한 프로세스 상태: p.141
유닉스에서 Ctrl + Z 키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가?
휴식 상태 p.143~144 (cf. 보류: cpu 뺏긴다)
실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가?
문맥 교환(Context Switching) p.149
실행 중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가?
fork() 시스템 호출 p.153
프로세스의 골격은 그대로 둔 채 코드영역만 바꾸는 시스템 호출은 무엇인가?
exec() ~ execute 줄임말임 ~ p.153
부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아 있는 프로세스 무엇인가?
고아/미아/좀비 프로세스 p.162
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로서 가벼운 프로세스라고 불리는 것은 무엇인가?
스레드 p.164
미아 프로세스를 방지하기 위해 부모 프로세스는 어떤 시스템 호출을 사용하는가?
exit(), return(), wait() p.163, 185
작업이 끝난 프로세스의 자원을 회수하는 행위를 무엇이라고 하는가?
가비지 컬렉션 스레드 수집 p.162
모든 프로세스를 부모-자식 관계로 만들어 자원 회수를 용이하게 하는 프로세스의 구조는 무엇인가?
프로세스 계층 구조 p.160
[심화 문제]
다섯 가지 프로세스 상태도를 그리시오.
p.141, 145
프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명하시오.
p.143
프로세스 제어 블록의 구성에 대해 설명하시오.
p.137, 146
NOTE) 프로세스 구조: p.152, 179
문맥 교환에 대해 설명하시오.
p.149
프로세스를 구성하는 코드 영역, 데이터 영역, 스택영역에 대해 설명하시오.
p.152
fork() 시스템 호출의 장점을 설명하시오.
p.155, 180
exec() 시스템 호출의 장점을 설명하시오.
p.157
프로세스 계층 구조의 장점을 설명하시오.
p.161, 162 + 다중사용자 처리, 회수
멀티스레드, 멀티 태스킹, 멀티프로세싱, CPU 멀티스레드를 비교하여 설명하시오
멀티스레드: p.167
멀티태스킹: p.170
멀티프로세싱: p.168
CPU멀티스레드: p.168
추가 필기: 멀티스레드와 멀티태스킹 차이 (p.167)
동시성 문제 -> 동기화 이슈!피드백
관계형데이터베이스 cs 이론 공부를 빨리 끝내자!
이제 구현 위주로 공부 파보자
오늘 잘한 것
구현 관련 진도 더 많이 나가서 기분 좋다!
알고리즘 문제 풀이 요령을 알게되어서 다행인 것 같다.
프로그래머스 문제 1개 풀기
운영체제 공부 챕터 4
네트워크 공부