diff --git "a/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/http.js" "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/http.js" new file mode 100644 index 0000000000000000000000000000000000000000..d4decd268012bfad29c43932398981d774c83e49 --- /dev/null +++ "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/http.js" @@ -0,0 +1,23 @@ +let http = require("http"); +let fs = require("fs"); +let server=http.createServer(); + +server.on('request',function(req,res){ + res.setHeader('content-type','text/html;charset=utf-8'); + let url = req.url; + console.log(url); + if(url.indexOf('?page')>-1){ + //分割 /?page=10 + let pageInfo=url.split('?')[1]; + console.log(pageInfo); + let num = pageInfo.split("=")[1]; + let fileName='./files/'+num+'.txt'; + let bf= fs.readFileSync(fileName); + res.write(bf); + } + //请求结束 + res.end(); + +}) +//绑定80端口号 +server.listen(80); \ No newline at end of file diff --git "a/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/http\345\215\217\350\256\256\347\254\224\350\256\260.js" "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/http\345\215\217\350\256\256\347\254\224\350\256\260.js" new file mode 100644 index 0000000000000000000000000000000000000000..30e89c8b4de5397df8e3bd39145c47fe17f4f4e3 --- /dev/null +++ "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/http\345\215\217\350\256\256\347\254\224\350\256\260.js" @@ -0,0 +1,55 @@ +/*** + * 笔记部分: + * 1.http 协议(规定) 超文本传输协议 + * 2.cocos js node 后端 + * + * 拓展:1)微信 udp 协议 不保险 信息可能会丢失 + * + * 2)tcp 协议 可靠协议 + * + * 3)tcp/ip 可标识每部设备 + * + * 4)http 协议基于 tcp/ip 但是是一个短连接 + * + * 5)无状态: (cookie sessin localstore),每次请求并不知道与上次的区别 + * + * 6)媒体独立: + * + * http:认识 1.HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。 + * 采用这种方式可以节省传输时间。 + + 2.HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。 + 客户端以及服务器指定使用适合的MIME-type内容类型。 + + 3.HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息, + 则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 + + url 域名拼接上一些字符 + */ + + let http = require("http"); + /** + * createServer 创建一个web服务器 + * 知名的web服务器:nginx(Russia) apache(德国/美国) IIS window + */ + + let server=http.createServer((req, res) => { + + console.log(req.url); + res.setHeader("Content-Type", "text/html; charset=utf-8") + res.end("node创建服务器哦吼"); + if(req.url=='/?name=lilei'){ + res.end("连接上了嘛"); + } + + res.end("都结束了") + + }); + + server.on('connection',function(){ + console.log('我连接了吧'); + }) + + server.listen(8080) + + \ No newline at end of file diff --git "a/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/\344\272\214\345\217\211\346\216\222\345\272\217\346\240\221.txt" "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/\344\272\214\345\217\211\346\216\222\345\272\217\346\240\221.txt" new file mode 100644 index 0000000000000000000000000000000000000000..0792cdad5c1b3cab424f9a80a200088ff7ca765c --- /dev/null +++ "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-04-\344\275\234\344\270\232/\344\272\214\345\217\211\346\216\222\345\272\217\346\240\221.txt" @@ -0,0 +1,4 @@ +二叉排序树:或者是空树,或者是满足一下性质的二叉树: + 1.若他的左子树不空,则左子树上的所有关键字的值均小于根关键字的值。 + 2.若他的右子树不空,则右子树上的所有关键字的值均大于根关键字的值。 + 3.左右子树又各是一颗二叉排序树 \ No newline at end of file diff --git "a/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-08-\344\275\234\344\270\232/mysql.js" "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-08-\344\275\234\344\270\232/mysql.js" new file mode 100644 index 0000000000000000000000000000000000000000..a22d7a55e17b182e5890bbce748a7db92ed6344a --- /dev/null +++ "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-08-\344\275\234\344\270\232/mysql.js" @@ -0,0 +1,68 @@ +/**mysql相关笔记 + * mysql:对做后端必备 + * + * 一、安装mysql模块 + * 记得npm init + * npm i mysql + * 二、具体使用 + * + */ + + let mysql = require("mysql"); + + /** + * + * 二.1 建立连接 + * + * 可参考 navicat的连接 + * + * 主机,端口,用户名,密码 + * + */ + // 二.1.1 配置 + let connection = mysql.createConnection({ host: 'localhost', port: '3306', user: 'root', password: 'root', database: 'demo' }); + + //二.1.2 连接 + //connection.connect(); + + //二.2 操作 使用 query 方法 ,query 方法有三种 目前推荐大家使用 query(sql,callback) + + //后端工作:crud create read update delete + + + /** + * 查询 select * from 表明 (如有调教可加 where +条件) + * + * callback(err,rows(数组,可循环取出),FieldPacket 描述性对象,不管他) + * + */ + // let sql='select * from person where age>30'; + // connection.query(sql,function(err,rows){ + // if(err){ + // console.log(err.message); + // return ; + // } + // for(let i in rows){ + // console.log(rows[i].name); + // } + // }); + // //关闭连接 + // connection.end(); + + /** + * 新增: INSERT into 表名(字段,字段,....) VALUES(字段对应的值....) + * callback(err,OkPacket) OkPacket 插入完成对象,里面有个字段重要(insertId,这次写入数据的逐渐自增id) + * + */ + connection.connect(); + let names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']; + for (let i = 0; i < 1000; i++) { + let randKey = Math.round(Math.random() * 9); + let name = names[randKey]; + let sql = "INSERT into person(name,age) VALUES('"+name+"',"+Math.round(Math.random()*100)+")"; + connection.query(sql, function (err, OkPacket) { + console.log(arguments); + }); + connection.commit(); + } + connection.end(); \ No newline at end of file diff --git "a/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-08-\344\275\234\344\270\232/mysql\347\254\224\350\256\260.txt" "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-08-\344\275\234\344\270\232/mysql\347\254\224\350\256\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..325aca2682d6fb597896eff0c445c5833be7be1c --- /dev/null +++ "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-08-\344\275\234\344\270\232/mysql\347\254\224\350\256\260.txt" @@ -0,0 +1,9 @@ +mysql 数据库: + 1.免费 + 2.开源(现被 甲骨文公司收购,有免费版本和付费版) + 3.跨平台:Windows linux FressBsd..... + 4.功能强大:速度快,oracle(速度最快 要钱),事务,视图,存储过程,触发器 + 5.安全性高:灵活和安全的权限与密码系统 + +服务器:基本是linux (web服务器 比方说 nginx apache iis只是服务器上安装的一个程序) +mysql 安装命令行:npm init ---> npm i(install) mysql \ No newline at end of file diff --git "a/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-09-\344\275\234\344\270\232/\345\212\240\350\247\243\345\257\206.js" "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-09-\344\275\234\344\270\232/\345\212\240\350\247\243\345\257\206.js" new file mode 100644 index 0000000000000000000000000000000000000000..04814d1aa53e92dc9a581ad2b8a051e7345ef8f3 --- /dev/null +++ "b/\346\230\223\346\226\207\350\220\215\347\232\204\344\275\234\344\270\232/2022-03-09-\344\275\234\344\270\232/\345\212\240\350\247\243\345\257\206.js" @@ -0,0 +1,106 @@ +/** + * (重点) + * 一.1哈希算法:(md5为例)这是不可逆的,只能单向的,如果指明使用hex 十六进制的字符串表示,它的加密结果都是32位 + * + * md5update可多次执行, + * 比方数据: demo ----》 加密串 + * 正常数据用户名密码中密码大多数是 md5加密的 + * 使用的场景:数据库密码字段设计,支付中做数据的摘要. + * 可以使用常量去接收 require 的返回值 + */ +//引入模块 + +const crypto = require('crypto'); + +//创建个md5算法 +//let hash = crypto.createHash('md5'); +//数据的单向加密 +// let str1='thisisnode'; +// //具体的加密 +// hash.update(str1);//update可执行多次 +// let encodeStr=hash.digest('hex'); +// console.log(encodeStr.length);//十六进制的字符串表示 + +//数据的单向加密 +// let str2='thisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnodethisisnode'; +// hash.update(str2);//update可执行多次 +// let encodeStr2=hash.digest('hex'); +// console.log(encodeStr2.length);//十六进制的字符串表示 + +//比方一个字符串 123456789,可分割为 123+456+789 +// let totalStr = '123456789'; +// let str1 = '12'; +// let str2 = '3456'; +// let str3 = '789'; +//hash.update(totalStr);//update 就是md5单项加密的主逻辑 123456789 整个字符串密码结果为:25f9e794323b453885f5181f1b624d0b +//console.log(hash.digest('hex'));// +// hash.update(str1); +// hash.update(str2); +// hash.update(str3); +// console.log(hash.digest('hex')); //加密结果:123456789的分段加密结果为: 25f9e794323b453885f5181f1b624d0b + +//把一个字符串整体加密(一次update),和分段加密(分段可以任意分割,多次update) 结果是一致的. + +/** + * 哈希算法2.sha1,与md5大体类似,如制定16进制显示的话,返回40位长度的字符串 + */ +/** + * 了解下 + * 二.加解密算法: + * 1.对称加密:就是加密与解密的 秘钥一致,简单的说就是 加密时用到的 密码,与解密时用到的 密码一致 + * 2.非对称加密:就是加密与解密的 秘钥不一致,简单的说就是 加密时用到的 密码,与解密时用到的 密码不一致 + * 对称加密的算法一.AES,具体的实现在 crpto中已有对称加解密要稍微封装 + * 加密函数: + * data :被加密的数据 + * key :就是密码 + */ + +function aesEncrypt(data,key){ + /** + * 1.通过 crypto ,与key 创建一个ciper暗号 + * createCipheriv(algorithm,key) + * algorithm 加密类型 + * key 密码 + */ + let ciper=crypto.createCipher('aes192',key); + //把数据加密 + //update 有多种方法 + //推荐 update(data, inputEncoding, outputEncoding) + /** + * data 要加密的数据 + * inputEncoding 输入的编码,其实就是data的编码 + * outputEncoding 输出的编码,正常我们都使用hex 16进制的输出 + */ + let returnStr=ciper.update(data,'utf8','hex'); + //加入结尾符 + let final=ciper.final('hex'); + returnStr=returnStr+final; + return returnStr; +} + +console.log(aesEncrypt('hellword','node')); + +//aes 解密 + +function aesDecrypt(encrypted,key){ + + /**创建一个解密 */ + const deciper=crypto.createDecipher('aes192',key); + /** + * update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + * data 就是被加密的字符串,inputEncoding 这个加密的字符的字符串一般椒16进制字符串,outputEncoding 输出的字符串类型一般utf-8 + */ + let descrped = deciper.update(encrypted,'hex','utf8'); + descrped+=deciper.final('utf8') + return descrped; +} +let encrypted='ffd218a2ad04c95688534f4bd30a1c5d'; +let key='node' +console.log(aesDecrypt(encrypted,key)); + +/**注意: + * 非对称加密:加解密的key是不一样的 + * RSA 非对称加解密 + * 应用场景:支付,https + * + */ \ No newline at end of file