短信息,使用书面或邮件的方式记录;长信息,使用ppt记录。
观众总是先看到逻辑关系的存在,然后才能理解它
。
人生苦难重重。解决人生问题的关键在于自律。
回避问题和逃避痛苦的倾向,是人类心理疾病的根源。自律是解决人生问题最主要的工具,也是消除人生痛苦最重要的方法。所谓自律,就是主动要求自己以积极的态度去承接痛苦,解决问题。
思考:
有点心理学的范畴,讲述影响你生活行为的一些因素
。举几个案例:
常有的因素:
阐述与拖延
有关的行为、心理、大脑等内容
拒绝拖延,执行提示点:
视觉提示
(或者听觉提示),使用便签罗列做事项要事第一
,罗列清单,每天不超过5个深度学习是机器学习的一个分支领域,而机器学习属于人工智能的范畴。机器学习(特别是深度学习),较少的数学理论,并且以工程为导向,需要上手实践的学科。
利用机器学习,输入的是数据和从这些数据中预期得到的答案,系统输出的是规则。
这些规则随后可用于新的数据,并使计算机自主生成答案。
机器学习是将输入(比如图像)映射到目标(比如标签“猫”),这一过程是通过观察许多输入和目标的示例来完成的。
在深度学习中,分层几乎都是通过神经网络
的模型来学习得到的。神经网络中每层对输入数据所做的具体操作保存在该层的权重中,其本质上是一串数字
。
参数化
,从技术角度上看,就是把待分类的图像拆分成许多通道像素点,这些数据通过坐标转换(模型),最终得到期待值。这个期待值一开始可能是错的,但通过不断迭代学习,可以提高这个期待着的概率。
传统JS只能运行在浏览器中(沙箱环境),除了V8解释JS语法字符串外,还有WebKit(渲染内核)、HTML/DOM接口以及浏览器环境提供的事件循环。
Node去除跟UI相关的WebKit、HTML/DOM等接口,使用Libuv作为环境提供事件循环,使得使用上基本一致(浏览器通过事件驱动服务界面交互,Node通过事件驱动服务I/O)。
Node意义:Node打破了过去JavaScript只能在浏览器中运行的局面。前后端编程环境统一,大大降低前后端切换所需要的上下文交换代价。
HTTP基于请求响应,一问一答。 从协议角度看,浏览器其实是一个HTTP的代理,用户的行为将会通过它转换为HTTP请求,发送给服务端。
对TCP连接的读操作,http模块将其封装为ServerRequest对象。报文头通过http_parser进行解析
报文头第一行(请求行)
如: GET / HTTP/1.1
其余报头(首部字段)是很规律的
报文体部分抽象为一个只读流
。如果业务逻辑要读取报文中的数据,要在这个数据流结束后才能操作。如:function(req, res) {
var buffers = []
req.on('data', trunk => buffers.push(trunk))
req.on('end', () => {
var buffer = Buffer.concat(buffers)
// TODO
res.end('hello world')
})
}
HTTP请求对象和HTTP响应对象是相对较底层的封装,现行的Web框架如Connect和Express都是在这两个对象的基础上进行高层封装的。
务必在结束时调用res.end结束请求。
一旦开始了发送数据,setHeader和writeHeader将不再生效
软件开发的经典,生动阐述了重构原理和具体做法。
稍有不足的是案例都是Java语言,更偏向于面向设计的写法,有些内容不太适合目前前端主流的函数式编程。
《撒哈拉的沙漠》
讲述三毛和荷西在撒哈拉沙漠里的故事
《梦里花落知多少》
讲述荷西意外身亡后对他的思念,字里行间能感受到他们之间的爱情以及失去爱人后的痛苦
断舍离思维
,失去也是得到。强烈推荐第一部
必读书,阮一峰老师经典书籍。
let a = [{a: 1}, {a:2}]
let b = a.map(i => ({...i, label: i.a, value: i.a}))
// or Object.assign浅拷贝
// let b = a.map(i => Object.assign({}, i, { label: i.a, value: i.a }))
console.log(b) // [ { a: 1, label: 1, value: 1 }, { a: 2, label: 2, value: 2 } ]
代理。Proxy用于修改某些操作(如in/apply/get/set等)的默认行为,相当于对编程语言进行编程。
function createProxyArray(arr) {
return new Proxy(arr, {
get(target, propKey, receiver) {
console.log(target, propKey, receiver) // target: [1, 2, 3] propKey: '-1' receiver: Proxy
let index = Number(propKey)
// 负数处理
if (index < 0) propKey = String(target.length + index)
return Reflect.get(target, propKey, receiver)
}
})
}
// 拦截数组可为负数
let arr = createProxyArray([1, 2, 3])
arr[-1]
修饰器只能作用在类或类的方法上
,不能作用在普通函数上,因为存在变量提升问题。
作用在类上:
@decorator
class A {}
// 等同于
class A {}
A = decorator || A
作用在类的方法上:
class A {
@readonly
name() {
console.log(1)
}
}
// 等同于
readonly(target, name, descriptor) // 装饰器内可修改descriptor值
Objeact.defineProperty(A.prototype, 'name', descriptor)
举例mixin:
function mixin(...args) {
return function(target) {
Object.assign(target.prototype, ...args)
}
}
@mixin({ foo() {console.log(1)} })
class MyClass() {}
new MyClass().foo() // 1