摘要算法:
md5,sha1,sha256
特点:不可逆,并且, 一个安全的摘要算法是无法找到碰撞的
碰撞是说, 两个不一样的数据, 产生了一样的结果
通常只被用来做数据完整性验证
比如网站在下载页面公布文件的 sha1 摘要结果
你下载后自己生成结果来对比
就能知道文件是否被篡改
或者是用来加密用户密码
加盐:密码加上一段随机字符串(盐),在进行加密
邮件安全的重置密码功能:不能让别人随意冒充用户,需要给用户分配一个毫无规律的字符串作为重置密码链接的参数
数据库索引原理:mysql-create index
{
# 用id查找,建立的索引
1: {
"note": "吃瓜",
"username": "gua",
"id": 1,
"password": "123"
},
2: {
"note": "note",
"username": "gua1",
"id": 2,
"password": "123"
}
'索引': {
# 用username查找,建立的索引,指向id
'username': {
'gua': 1,
'gua1': 2,
},
'note': {
'吃瓜': 1,
'note': 2
}
},
}
MongoDB增删改查、管理软件robomongo,C盘新建data/db
html和js:
JavaScript操作DOM:
查找:querySelector(三种选择器),#id,.class,标签h1
undefined在js中表示不存在
操作元素属性:用.,例如input.value=xxx
操作元素:
insertAdjacentHTML()添加元素
remove()删除元素
修改元素的值:
innerHTML 不会转义字符串
innerText 会转义字符串
添加事件:addEventListener(event,fuction)
js的序列化和反序列化:转json:JSON.stringify(obj),json转对象:JSON.parse(json)
通过 event.target 来得到被点击的元素:
var self = event.target
classList 属性保存了元素的所有 class:
// 判断是否拥有某个 class 的方法如下
if (self.classList.contains('todo-delete')) {
log('点到了 删除按钮')
// 删除 self 的父节点
// parentElement 可以访问到元素的父节点
self.parentElement.remove()
}
/*
ajax 函数
*/
var ajax = function(method, path, data, responseCallback) {
var r = new XMLHttpRequest()
// 设置请求方法和请求地址
r.open(method, path, true)
// 设置发送的数据的格式为 application/json
// 这个不是必须的
r.setRequestHeader('Content-Type', 'application/json')
// 注册响应函数
r.onreadystatechange = function() {
if(r.readyState === 4) {
// r.response 存的就是服务器发过来的放在 HTTP BODY 中的数据
responseCallback(r.response)
}
}
// 把数据转换为 json 格式字符串
data = JSON.stringify(data)
// 发送请求
r.send(data)
}