[周回顾] 2017 12 10

Untitled

这几天又被燕姿姐姐单曲循环了~~~ 好了,听着 天天年年 来总结下这周的学习。

ES6学习

  • Generator函数
    ES6提供的一种异步编程解决方案,语法行为非常溜,运行机制就类似一个状态机似的。主要有两个特征:
    1.定义的时候function关键字与函数名之间有一个星号。
    2.另外函数体内使用yield表达式定义不同的“状态”。
    调用Generator函数时返回的是一个指向内部状态的指针对象,通过调用该指针对象的next方法使得该指针指向下一个状态对象。
    换句话说,Generator函数是一个可以分段执行的函数。
  • Class关键字
    其主要是ES6中定义一个类的语法糖,使得定义一个类的行为看上去与其他面向对象语言(Java,C++)等一致。通过ES6之前的function定义类基本都能实现相同的功能。
  • let与const
    let用于声明变量,类似var,但是let声明的变量只在let语句所在的代码块内有效。另外let声明的变量不存在变量提升的概念,即一定是先声明,后使用。
    const用于声明一个常量,其本质上是指变量指向的内存地址不变,对于普通类型来说,该内存地址存储的就是变量值,这时候就等同于值不可变的常量。但是对于复合数据类型,变量指向的内存地址保存的只是一个指针,所以此时const只能保证该指针固定,至于指针指向的数据是否改变是无法保证的。

网络学习

  • NAT超时
    简单理解,由于ip地址资源有限,我们平常上网使用的ip地址都是内网地址,而当需要访问内网之外的资源时就需要在内网环境中有一台具备NAT功能的路由器帮助我们完成NAT(网络地址转换),即将内网的地址转换成一个公网的ip地址,内网的设备才能与外网的设备通信。但网络运营商在一条建立好的链路上一段时间没有数据通讯时会淘汰对应NAT表中的对应项,这时候相当于路由器不再维护我们内网设备的内网ip和对应外网ip的映射关系,导致连接断开。这里的“一段时间”即NAT超时。
    虽然理论上认为只要在设备与服务器之间建立起一条TCP连接后,这条连接就是可靠的了。实则不然,这条连接可能由于NAT超时而断开。
    不同运营商和网络环境下NAT超时时间也不一致,少则几分钟多则几十分钟。
  • 心跳保活
    理想情况下要保证一条TCP长连接真正不断开,至少得避免NAT超时对它的影响,也就是我们常说的心跳包间隔必须小于NAT超时时间。
    这里就衍生出了微信使用的比较优秀的动态NAT超时计算方案。
  • webSocket
    webSocket是基于TCP的一种新的网络协议,它可以实现服务端和客户端的全双工通信,重点是,它允许服务端主动发送信息给客户端。
    在没有webSocket之前,要实现类似服务端push功能,只能客户端通过http来轮询服务端,因为http是基于request与response的协议。这对客户端的性能和网络带宽来说都有额外的开销,而webSocket就是为了完美解决类似问题而诞生。

邪门歪道
那天看到一个有趣的玩意儿,因为RGB像素值(0-255)的范围同ascii码表示字符的范围刚好匹配,可以将写的代码用ascii码表示分组后分别用RGB色值“画出来”。嗯嗯嗯 可以试试哦

算法
最近又开始刷Leetcode了~坚持下去!