Code Monkey home page Code Monkey logo

learn-record's People

Contributors

laihuamin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

learn-record's Issues

JS高程学习笔记(四)

  • switch语句

使用switch语句的时候变量可以是任意类型,可以是字符串,还是对象都没有问题。其次case的值不一定是常量,可以是变量,甚至可以是表达式

  • return语句

推荐做法是要么让函数始终返回一个值,要么函数永远不要返回值。

  • 参数

函数的参数是以传递的零个或者多个参数的数组来进行传递,可以用argument来进行访问

  • 基本类型和引用类型的值

基本类型的值就是变量真实的值,而引用类型的值代表的是对象内存中的指针,而函数的参数是按值传递的,所以对象当参数传入的时候,其实实际操作的是对象的引用,而不是实际的对象

  • 变量的复制

在变量的复制这一块,基本类型和引用类型的也是不一样的,复制基本类型的时候,会创建一个新的变量,并将值复制给新的变量,而对于引用类型来说,会创建一个新的变量,然后这个变量的引用和原变量的引用是指向内存中的用一个对象

  • 变量检测的工具

对于typeof操作符来说,检测布尔值,字符串,数值,还有undefined的最佳工具,但是在引用类型方面,可以用instanceof这个操作符,注意,typeof检测function返回的是function,

  • 执行环境

执行环境定义了变量和函数的访问权限,决定了各自的行为

  • 作用域链

作用域链决定了变量和函数的访问权限,使得所有的变量和函数都可以有序的进行访问,作用域链的前端,始终都是当前执行环境的变量对象

  • 标识符解析

标识符的解析是沿着作用域链一级一级搜寻的过程,搜索过程中,始终从作用域的前端开始,当后查询,如果到最后一个环节还是没有查到,那就会发生报错

  • 注意点

变量查询是有代价的,局部变量的查询会比全局变量的查询来的更加快一点,但是JavaScript引擎在这方面做了优化,所以可以忽略不计

  • 垃圾收集

找出那些不在使用的变量,并且释放其内存,垃圾收集会固定一点时间周期性的执行

  • 内存管理

对于web应用来说和桌面应用区别在于内存的应用方面,浏览器的内存往往比桌面应用的内存来的小,所以,我们管理内存的方式就是保存必要的数据,当一个变量我们不在使用的时候将其值设置为null——解除引用,解除引用真正的作用在于可以让值脱离运行环境,可以被垃圾收集清理掉

  • 引用类型

引用类型就是一种数据类型,将功能和数据结合在一起的一种方式

  • 小tip

方括号的访问形式的优点是在于可以使用变量来访问他,但是一般情况下我们都用点表示法

JS高程学习笔记(三)

  • ES的操作符

操作数据的操作符包括算术操作符、位操作符、关系操作符和相等操作符。ES的与众不同在于操作符能适用于很多类型的值,比如字符串、数值、布尔值、甚至是对象

  • 递减递增操作遵守的规则

1.先将任意类型的变量转换成数字,在执行操作,如果字符串等无法转换成数字,那么就转换成NaN。如果是布尔值,那么false先转换成0,true先转换成1,在进行相关操作

  • 位操作符注意点

对待NaN和Infinity值都会被当作0来处理,对于非数值,会用Number转化成数值,在运用位操作符。

  • 逻辑非

这个操作符有个特点,不管你给他什么类型的值,都会被转换成布尔值,所以,会有双非来保证一个变量一定会转换成布尔值,这个与Boolean()方法效果一致

  • 逻辑非的转换规则

1.操作数是一个对象会转换成false
2.一个空字符串会被转化成true
3.一个非空字符串会被转化成false
4.数值0会被转换成true
5.操作符非零的数值会被转换成false
6.null会被转化成true
7.NaN会被转化成true
8.undefined会被转换成true

  • 逻辑与操作符

有一个操作数不是布尔值的时候,返回的结果不一定是布尔值

  • 逻辑与操作符的转化规则

1.第一个操作数是个对象,那么返回第二个操作数
2.第一个操作数是非零的数值,那么返回第二个操作符
3.第二个操作符是对象,只有在第一个操作符是true的情况下才会返回第二个操作符
4.如果两个都是对象,那么返回第二个对象
5.第一个是null的情况下,返回null
6.第一个是undefined情况下,返回的是undefined
7.第一个是NaN的情况下,返回的是NaN

  • 逻辑或操作符

有一个操作数不是布尔值,那么返回的结果也不一定是布尔值

  • 逻辑或操作符的转化规则

1.第一个操作符是true的情况下,返回的是第一个操作符
2.第一个操作符的false的情况下,返回的结果是第二个操作数
3.如果两个操作数都是对象的情况下,返回的是第一个操作数
4.两个都是null的情况下,返回到是null
5.两个都是undefined的情况下,同理
6.两个都是NaN的情况下,同理

  • 加法操作符的注意点

加法操作符遇到字符串的时候做的是字符串的拼接

  • 相等操作符

相等操作符分为相等和不想等,全等和不全等,相等先进行转换,在进行比较,而全等不一样,只进行比较不进行转换

  • 相等操作符的规则

1.如果有一个操作数是布尔值的时候,比较的时候将其进行转换成数值之后在进行比较,false转化为0,true转换为1
2.如果有一个操作数是字符串的时候,将其转换为数值之后在进行比较
3.如果有一个是对象,而另外一个不是,那么调用valueOf来比较,根据前面的规则进行比较
4.null等于undefined
5.比较相等性之前,不能将null和undefined转换成另外任何类型
6.如果一个操作数是NaN的时候,相等操作符返回false,而不等操作符返回的是true
7.如果相等操作符比较的是同一个对象,那么会不会比较他们是同一个对象,如果两个操作符指向的是同一个对象,那么返回的就是true,如果不是,那么,就返回false

  • 相等操作符的规则特殊情况
表达式
null == undefined true
"NaN" == NaN false
NaN == NaN false}
5 == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
udnefined == 0 false
null == 0 false
"5" == 5 true
  • 注意

由于相等操作符存在类型转换,所以我们很少用相等操作符,而是用全等操作符来的更加合理

python基础学习(二)

算术运算符

+、-、*、/、%——加、减、乘、除、取余

**——幂运算
//——取整除

比较运算符

==——等于
!=<>——不等于
>——大于
<——小于
>=——大于等于
<=——小于等于

赋值运算符

=——等于
+=——加法赋值
-=——减法赋值
*=——乘法赋值
/=——除法赋值
%=——取余赋值
**=——幂赋值
//=——取整赋值

位运算

a = 00111100
b = 00001101

----------------

a&b = 00001100
a|b = 00111101
a^b = 00110001
~a = 11000011

逻辑运算符

运算符 逻辑表达式 描述
and x and y 当x为false的时候返回false,否则返回y的计算值
or x or y 当x非0的时候,返回x的值,否则返回y的值
not not x x为true,返回false,x为false,返回true

成员运算符

运算符 描述
in 如果指定的序列中找到值返回true,否则返回false
not in 如果指定的序列中没有找到值返回false,否则返回true
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
 
if ( a in list ):
   print "1 - 变量 a 在给定的列表中 list 中"
else:
   print "1 - 变量 a 不在给定的列表中 list 中"
 
if ( b not in list ):
   print "2 - 变量 b 不在给定的列表中 list 中"
else:
   print "2 - 变量 b 在给定的列表中 list 中"
 
# 修改变量 a 的值
a = 2
if ( a in list ):
   print "3 - 变量 a 在给定的列表中 list 中"
else:
   print "3 - 变量 a 不在给定的列表中 list 中"

身份运算符

运算符 描述
is is是判断两个标识符是不是引用自一个对象,指针是不是指向一个,是的话返回true,反之false
is not is not是判断两个标识符是不是引用一个对象,和上面的相反

is和==区别:
is是变量引用的是不是一个,==是引用的值相等

a = [1, 2, 3]
b = a
b is a  # true
b == a  # true
b = a[:]
b is a  # false
b == a  # true

运算符优先级

幂 > ~ > 乘除取余取整 > 加减 > 右移左移 > & > ^| > 比较 > 等于 > 赋值 > 身份 > 成员 > 逻辑

《图解http》学习笔记(三)

  • 持久连接

只要任意一端没有明确表示链接中断,则保持TCP连接状态

  • 持久连接的好处

减少重复的建立和断开TCP连接带来的额外开销,减轻服务端的负载

  • 管线化

持久连接使得多数请求以管线化方式发送成为可能,管线化技术出现以后,就可以并行发送多个http请求

  • 无状态管理的优点

由于不必保存状态,自然减少服务器的CPU及内存资源的消耗

  • cookie

cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态

  • cookie原理

cookie会根据从服务器端发送的响应报文内的一个叫做set-cookie的首部字段,然后通知客户端保存cookie,当下次客户端发送请求时,客户端通过请求报文中的cookie字段携带cookie给服务端

  • http报文

用于http协议交互的信息称之为http报文

  • http报文的结构

http报文大致分为两个部分,分别为报文首部和报文主体,两者由最初出现的空行(CR+LF)划分

http报文

  • 范围请求

指定范围发送的请求叫做范围请求,举个例子,对于一份10000字节的资源,你可以只请求5001~10000的那一部分

  • Range

针对范围请求,我们会采用Range来控制范围请求,举个例子:

Range: bytes=5001~10000
  • 请求范围状态码

针对请求范围,响应中会返回206作为状态码。如果服务器无法响应范围请求,则会返回状态码200和完整信息

  • 内容协商

当浏览器的默认语言为英语或者中文,访问相同的URL的web页面时,则会显示中文版的或者英文版的网页,这样的机制称之为内容协商,客户端和服务端进行内容交涉,给客户端提供最合适的资源,协商的内容有资源的语言、字符集、编码方式等

  • 服务器驱动的内容协商

由服务器端进行内容协商,以请求的首部字段作为参考,在服务器端自动处理

  • 客户端驱动的协商

用户在浏览器上显示的内容中进行选择,然后通过js脚本,进行切换

  • 透明协商

是服务端和客户端的结合体,让两端各自进行协商

《图解http》学习笔记(四)

  • http状态码

http状态码负责表示客户端http请求的返回结果、标记服务端的处理是否正常,通知出现的错误等工作

  • 状态码的类别

http-status

  • 200

表示处理请求成功

  • 204

表示服务器已经成功处理请求,但是响应报文内容不含实体主体部分

  • 206

表示客户端进行范围请求,服务器已经处理部分get请求,并返回的响应报文中,由Content-Range表示指定范围的内容

  • 301

永久重定向,表示该部分资源已经被分配到新的URL上,以后应使用资源所指的URL

  • 302

临时重定向,表示该部分资源暂时被分配到了指定的URL,本次希望使用指定的URL访问

  • 303

303和302功能是一样的,但是303只能使用GET进行访问,这点上和302有区别

  • 301、302、303的注意点

这三个状态码,几乎所有的浏览器都会把POST请求改成GET,并且删除请求报文的主体,之后请求会自动再次发送,但是301、302的标准是禁止将POST改成GET方法的,但实际使用时,大家都会这么做

  • 304

表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况,304状态码返回时,不包含任何响应的主体部分。304和重定向没有任何关系。

  • 307

功能和302一样,但是由于302浏览器不遵守标准,会将POST改成GET,但是307不会。

  • 400

表示请求报文中存在语法错误

  • 401

表示发送的请求需要有通过http认证的认证信息

  • 403

表明对请求资源的访问被服务器拒绝了,未获得文件系统的访问权限,访问权限出现问题等都会引发此状态码

  • 404

服务器上无法找到请求,也可以表示服务端拒绝你的请求并且不想和你说明原因

  • 500

表明服务器处理请求时出错,也可能表示内部资源出现故障

  • 503

表明服务器暂时处于超负荷状态或处于停机维护

  • 状态码和状况不一致

不少情况下,状态码和状态都会发生不一致的情况,比如web应用程序内部出错,也会返回200的状态码

《图解http》学习笔记(八)

  • cache-extension

Cache-Control首部字段本身没有community指令,借助extension tokens实现了该指令的添加

  • Connection

该首部字段具有两个作用:1、控制不在转发给代理的首部字段。2、管道持久连接

  • 控制不再转发给代理的首部字段

Connection

  • 管理持久连接

HTTP/1.1版本的默认都是持久连接,服务端希望断开连接时,会将Connection设置为close,而在HTTP/1.1之前,默认的时非持久连接,如果需要持久连接,需要指定Connection字段的值为Keep-Alive。

  • Date

首部字段Date表明创建HTTP报文的日期和时间,在HTTP/1.1中的格式如下:

Date:Tue,03Jul 2012 04:40:59 GMT
  • Pragma

该首部字段属于通用字段,是HTTP/1.1之前版本的历史遗留字段,仅作为向后兼容使用

  • Trailer

该首部字段会事先说明记录了哪些重要的首部字段,该首部字段可以编码传输

  • Transfer-Encoding

该首部字段说明传输报文主体的编码方式

  • Upgrade

该首部字段用于检测HTTP协议及其他协议是否可以使用更高的版本,它的参数可以用来制定一个完全不同的通信协议

  • Via

使用首部字段Via是为了追踪客户端与服务端之间的响应或请求的传输路径。Via是为了追踪传输路径的,所以经常会和TRACE一起使用。

  • Warning

该首部字段是HTTP1.1的,由http1.0的Retry-After演变过来,该首部字段通常会告知用户一些缓存相关的问题

  • 警告码
警告码 警告内容 说明
110 Response is stale(响应已过期) 代理返回的已经过期
111 Revalidation failed(在验证失败) 代理在验证资源有服务器无法达到的原因
112 Discontent operation(断开连接操作) 代理与互联网的连接断开
113 Heuristic expiration(试探性过期) 响应的使用期超过缓存设定的时间大于24小时,该响应超过24小时的时候发送
199 Miscellaneous warning(杂项警告) 任意的警告内容
214 Transformation applied(使用了转换) 代理对内容编码或媒体类型等任意转换
299 Miscellaneous persistent warning(持久杂项警告) 与199不同的地方在于,会持续发出警告
  • Accept

该首部字段可以通知服务器,用户代理能够处理的媒体类型和媒体类型的相对优先级,若想要对媒体类型排优先级,则使用q=来额外表示权重值,用分号隔开,范围值0~1,可精确到小数点后3位

  • Accept-charset

该首部字段可用来通知服务器用户代理支持的字符集及字符集的优先级,权重表示方法和Accept一样,该首部字段应用于内容协商机制的服务器驱动协商

  • Accept-Encoding

该首部字段可以告知服务器用户代理支持编码方式和编码方式的优先级,权重表示方法和Accept一样,可一次性指定多个内容编码

  • Accept-Language

该首部字段用来告知服务器用户代理能够处理的自然语言集以及他的优先级,可一次性指定多种自然语言集

  • Authorization

该首部字段用来告知服务器,用户代理的认证信息

  • Expect

该首部字段用来告知服务器期望出现的某种特定的行为。当服务器无法理解时,会返回状态码417

  • From

该首部字段用来告知服务器使用用户代理的用户的电子邮件地址。

python基础学习(三)

条件语句

单个:

if 判断条件:
    执行语句...
else:
    执行语句...

多个:

if 判断条件:
    执行语句...
elif 判断条件:
    执行语句...
else:
    执行语句...

while循环语句

  • while
count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1
 
print "Good bye!"
  • while else语句

当执行条件为false的时候,在执行else语句

count = 0
while count < 5:
   print count, " is  less than 5"
   count = count + 1
else:
   print count, " is not less than 5"

for循环

for可以循环遍历列表或者字符串

for letter in 'Python':     # 第一个实例
   print '当前字母 :', letter
 
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二个实例
   print '当前水果 :', fruit
 
print "Good bye!"
fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print '当前水果 :', fruits[index]
 
print "Good bye!"
  • for else 语句
for num in range(10,20):  # 迭代 10 到 20 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print '%d 等于 %d * %d' % (num,i,j)
         break            # 跳出当前循环
   else:                  # 循环的 else 部分
      print num, '是一个质数'

break

for letter in 'Python':     # 第一个实例
   if letter == 'h':
      break
   print '当前字母 :', letter
  
var = 10                    # 第二个实例
while var > 0:              
   print '当前变量值 :', var
   var = var -1
   if var == 5:   # 当变量 var 等于 5 时退出循环
      break
 
print "Good bye!"

continue

var = 10

while var > 0:
    var = var -1
    if var == 5 or var == 8:
        continue
    print '当前值 :', var
print "Good bye!"

pass

for letter in 'Python':
   if letter == 'h':
      pass
      print '这是 pass 块'
   print '当前字母 :', letter

print "Good bye!"

JS高程学习笔记(二)

  • 标识符定义规范

1.第一个字符必须是一个字母或者_、$
2.其他字符可以是字母、_、$、数字
3.不能把关键字和保留字做为标识符

  • 花括号

最佳实践是始终在控制语句中使用代码块——即使只有一句代码

  • 变量类型

ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据

  • 未初始化变量

在js中对于未初始化的变量的时候,js会给这个变量保存一个特殊值——undefined

  • 省略var操作符

省略了var的操作符,这个变量就会变成全局变量

  • 数据类型

ES有六种简单数据类型:undefined、null、Boolean、Number、String、Symbol
还有一种复杂数据类型:Object,Object本质是由一组无序的名值对组成的

  • typeof操作符

有一种手段来检测数据类型——typeof,它就是负责提供这方面信息的操作符

  • typrof操作符的结果比对
    1.undefined代表这个变量 未定义
    2.boolean代表这个变量 布尔值
    3.string代表这个变量 字符串
    4.number代表这个变量 数值
    5.object代表这个变量 对象或null
    6.function代表这个变量 函数

  • 注意

函数在ES中属于对象,但是函数确实有自己的一些特性,所以我们用typeof这个操作符来区分函数和对象

  • undefined

undefined这个值代表的是变量定义却未初始化,但是和没有声明变量还是有区别的

  • 注意

但是在typeof操作符下面,会发生变量未初始化或者变量未声明都会返回undefined

  • Null

null本身代表的是一个空对象指针,所以typeof操作符检测null值时会返回object的原因,如果变量准备将来用于保存对象,那么最好将该变量初始化为null而不是其他值

  • Boolean

ES中所有的任何类型都有与这两个Boolean值等价的值,要将任意值转化为其对应的Boolean值,可以调用转型函数Boolean()

  • 转化规则
数据类型 true false
String 任何非空字符串 空字符串
Number 任何非零数和NaN 0和NaN
Object 任何对象 null
Undefined undefined
  • Number注意点

在其他语言中,任意一个数值除以0都会导致错误,从而停止代码执行。但是在ES中不同,ES会返回NaN,NaN这个东西又很特殊,NaN是缩写,扩展名是Not a Number,这个东西自身都不等于自身,然后可以用isNaN这个接口去检查

  • 数值转换

一共有三种接口可以将别的数据转化成Number类型,分别是Number()、parseInt()、parseFloat()这么三个接口。

  • Number()
数据类型 转化后的Number值
Boolean true和false会被转换成1和0
null 会被转化成0
Number 直接转化成相应的值
undefined NaN
string 分情况:如果说是'1'或者'1.1'或者''会被相应转化成1、1.1、0,除此之外都会被转化成NaN
对象 会调用valueOf方法,按照前面规则转化,如果转化结果是NaN的话,会调用对象的toString方法,依次按照前面的规则转化

对于这个接口另题一笔,一元加号操作符也可以达到这个效果

  • parseInt()

这个函数和Number还是有区别的,当第一个字符是不是数字或者负号时,会直接返回NaN,当第一个字符时数值时,parseInt会直接解析第二个,当发生一下这种情况时,'1234blue'会直接返回1234,当是个浮点型时,会直接忽略小数点后面的,返回整数部分parseInt不会解析八进制,前面的0会直接忽略

-string

字符串一旦创建值就不会发生改变,当发生改变的时候,会先销毁原来的值,然后用改变后的值去填充这个变量

  • 字符串的转化

toString()这个方法几乎每个类型都会有这个方法,除了undefined和null没有。

  • 转化规则

其他类型的数值可以调用toString这个函数去转化,但null和undefined这么两个值,可以中String这个方法转化,这样会得到'null'和'undefined'

  • Object

Object的所有属性和方法都可以存在于一个具体的对象中

  • Object拥有的属性和方法
属性和方法 说明
constructor 指的就是创建这个对象的函数
hasOwnProperty 这个函数可以检查给定的属性在实例自己的原型中是否存在,作为参数的属性,必须以字符串的形式
isPrototypeOf 用于检查对象是否是另一个对象的原型
propertyIsEnumerable 表示这属性是否能被for in遍历,和hasOwnProperty一样,参数必须是字符串类型
toLocaleString 返回对象的字符串表示,该字符串与执行环境的地区一致
toString 返回对象的字符串表示
valueOf 返回对象的字符串、数值和布尔值,一般和toString返回的类型一致

《深入浅出的nodeJS》第一章

chrome和Node的构成

chrome.png
node.png

ajax调用过程和I/O调用过程

ajax调用过程.png
Node异步调用.png

事件和回调函数

事件编程方式的优点:轻量级、松耦合、只关注事务。缺点就是我们需要处理事件和事件之间的各自独立和事件之间的协作。
回调函数是node必不可少的,可以将函数作为对象传递给方法的实参进行调用

单线程

单线程的优点:
1、不需要处处在意多线程之间的状态问题
2、没有死锁的存在
3、没有线程之间上下文交换带来的性能开销

单线程的缺点:
1、无法使用多核CPU
2、错误会引发整个应用退出,对于应用的健壮性是一个很大的考验
3、大量计算会卡死进程

子进程

子进程的调用过程:主进程将大量计算过程分发到子进程,子进程进行相应的计算,计算完成之后,通过事件的形式通知主进程。

I/O密集型和CPU密集型

对于I/O密集型的业务是node的优势,node可以利用自己事件循环的优势
对于CPU密集型的,node可以通过编写c/c++的方式来实现,也可以调用子进程来调离计算,运用进程之间的消息传递来充分利用CPU

利用node优势

1、前后端编程语言的统一性
2、高性能I/O的实时运用
3、并行I/O充分利用分布式环境
4、并行I/O有利于接口的稳定,提升web渲染能力
5、云计算平台提供了node的支持

JS高程学习笔记(一)

  • js的组成

js由3部分组成,一、核心:ECMAScript,二、文档对象模型:DOM,三、浏览器对象模型:BOM

  • 文档对象模型(DOM)

文档对象模型是针对XML但经过扩展用于HTML的应用程序编程接口,DOM,不止针对JavaScript,很多别的语言也实现了,不过DOM确实是JavaScript的重要组成部分之一。

  • DOM1级

DOM1级由两个模块组成:DOM核心和DOM HTML

  • DOM核心

规定如何映射基于XML的文档结构,以便于简化对文档中任意部分的访问和操作

  • DOM HTMl

在DOM的核心基础上加以拓展,针对HTML的对象和方法

  • DOM2级

在原本DOM的基础上又加以拓展了鼠标和用户界面事件、范围、遍历等细分模块,而且通过对象接口增加对css的支持。

  • DOM视图

定义了跟踪不同文档视图的接口

  • DOM事件

定义了事件和事件处理接口

  • DOM样式

定义了基于css为元素应用样式的接口

  • DOM遍历和范围

定义了遍历和操作文档树的接口

  • DOM3级

引入了以统一方式加载和保存文档的方法(在DOM加载和保存模块中定义);新增了验证文档的方法(在DOM验证模块中定义)

  • BOM

从根本上讲,BOM只处理浏览器窗口和框架,但是人们习惯把所有针对浏览器的JavaScript扩展也算作BOM的一部分

  • BOM的拓展
  1. 弹出新浏览器窗口功能
  2. 移动、缩放和关闭浏览器窗口功能
  3. 提供浏览器详细信息的navigator对象
  4. 提供浏览器所加载的详细信息的location对象
  5. 提供用户显示器分辨率详细信息的screen对象
  6. 对cookie的支持
  7. 向XMLHttpRequest和IE的ActiveXObject这样的自定义对象
  • <script>元素之async

表示应该立即下载脚本,但不应该妨碍页面中的其他操作。

  • <script>元素之charset

表示通过src属性指定的代码的字符集

  • <script>元素之defer

表示脚本可延迟到文档完全被解析完在加载执行,只对外部文件有效

  • <script>元素之type

这个属性值不是必须的,默认值是text/javascript

  • <script>使用方式

两种,一种是内部嵌套,还有一种是外部引入

  • 解析流程

在script标签解析完毕之前,页面中的其余内容都不会被浏览器加载或解析

  • 注意

外部的javascript文件引入的带有.js扩展名。但这个扩展名不是必需的,因为浏览器不会检查包含javascript的文件的扩展名。这样你用jsp或者php、其他服务器端动态语言生成的javascript的代码也就可以实现了

  • script的跨域

对于script这个元素来说,其实和img这个标签的一样,src可以请求别的域中的资源,这才有后来的jsonp跨域的实现

  • 浏览器的加载顺序

只要在script标签的属性中没有defer或者async,浏览器会根据script的先后顺序加载

  • 标签位置

浏览器是解析到body标签的位置开始呈现页面,那么随之而来的问题就是,当你把script的内容放在前面的时候,会发生大量空白的时间,所以最佳做法是将script的标签放到最后面,那样就可以降低页面的空白时间

  • 延迟脚本

在现实中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本

  • 异步脚本

指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。为此,我们建议异步脚本不要在加载期间修改dom

  • 嵌入代码和外部文件的好处

1.可维护性
2.可缓存性
3.适应未来

  • 文档模型

最初的两种文档模式:混杂模式和标准模式。两种模式主要影响的css内容的呈现。

  • 标准模式

这种模式下浏览器很多特性尽可能的符合标准,但是也有很多不尽然的地方。主要体现在处理图片的间隙的时候(在表格中使用图片会比较明显)

  • 混杂模式

如果文档开始处没有发现文档类声明,则所有浏览器都会默认开启混杂模式。混杂模式在不同浏览器下行为差异会比较大。所以不推荐

《图解http》学习笔记(五)

  • web托管服务

用一台服务器为多个用户提供服务,也可以为持有域名的提供不同的网站,可个利用了虚拟主机

  • 功能实现

在相同的ip的地址下,由于虚拟主机可以寄存多个不同主机名和域名的web网站,因此在发送http请求的时候,必须在host首部内完整制定主机名和域名的URI

  • 代理

代理是一种有转发功能的应用程序,他扮演着一个服务端和客户端中间人的角色

  • 网关

网关是转发其他服务器通信数据的服务器

  • 隧道

隧道是在相隔甚远的客户端和服务端两者之间进行中转,并保持双方通信连接的应用程序

  • 代理服务器

接收客户端发送的请求转发给其他服务器。

  • 使用代理服务器的理由

利用缓存技术减少网络带宽的流量

  • 代理服务器的使用方法

基于两种分类:一种是是否使用缓存,另一种是否会修改报文

  • 缓存代理

当响应发生时,缓存代理服务器就会将资源缓存到代理服务器上,那样当再次发起请求时,就不用在去源服务器上获取资源

  • 透明代理

转发请求时,不对报文做任何加工,反之则为,非透明代理

  • 网关的好处

利用网关可以提高通信的安全性,可以在客户端与网关之间的通信线路上加密以确保安全

  • 隧道的目的

确保客户端与服务端进行安全通信,隧道会使用ssl加密等手段进行通信,隧道本身不会解析http请求,是透明化的,当连接断开时,隧道也随之结束

  • 缓存

缓存指的是代理服务器或客户端本地资源的缓存副本,利用缓存可以大大减少源服务器的访问时间,节省了通信流量和通信时间

  • FTP

传输文件时使用的协议。

《深入浅出的nodeJS》第二章(1)

JS的变迁

JS变迁.png
JS从一个工具到组件库,再到前端框架,最后组合成前端应用。这个过程中也暴露了JS的缺陷:没有模块系统。只有杂乱无章的<script>标签的引入。

commonJS规范

commonJS规范涵盖了模块、二进制、BUffer、字符集编码、I/O流、进程环境、文件系统、套接字、单元测试、web服务器网关接口、包管理等。

node与commonnJS的关系

commonJS关系.png

commonJS模块规范

commonJS模块规范分为模块定义,模块引用和模块标识三个部分。

module-define.png.

三个部分分别是图中的exports、require、module。

引入模块的三个步骤

1、路径分析
2、文件定位
3、编译执行

node模块分类

node模块分为两类:核心模块和文件模块

node的核心模块大多在源代码里,所以在node编译的过程中,会被编译成二进制文件,存放在内存中,所以文件定位和编译执行可以被省略,路径分析优先级比文件模块高。速度快。(优先从缓存中加载)

文件模块编译的时候需要进行路径分析、文件定位和编译执行,速度比核心模块慢。

node对于标识符的分析

1、核心模块标识符,如果这个模块是核心模块,不需要进行路径分析和文件定位
2、路径文件标识符,该文件是由绝对路径或者相对路径来表示的,node会把编译加载的模块放在内存中,所以二次加载速度很快,该方式由于为node指明了目录,所以速度慢于核心模块
3、自定义模块,指的是包或者文件,没有路径指明,所以这种模块的查找时间是最长的

路径分析的规则

1、当前目录的node_modules中查找
2、如果没有找到,向父目录的node_modules中查找
3、直到查到根目录的node_modules为止。

文件定位

文件定位分为文件扩展名分析和包或者目录分析。

  • 文件扩展名分析:

如果一个文件没有扩展名,node会根据.js,.node,.json的顺序查找。
所以,当一个文件是.node或者.json的时候,最好把扩展名加上,可以加快查找速度。
也可以同步配合缓存,来加快文件的解析。

  • 包或者目录分析:

search-package.png

编译执行

对于不同扩展名的文件,编译执行的方式是不同的,具体如下:
1、对于.js的文件:通过fs模块进行读取后,编译执行。
2、对于.node的文件:该模块是用c/c++模块编写的,需要用dlopen()方法进行加载,最后进行编译操作
3、对于.json的文件:用fs模块进行读取之后,用JSON.parse()方法进行解析。
4、其余扩展名的文件,都当成.js文件来处理。

每个模块编译成功之后,其文件路径会被缓存到Moudle._cache对象上,提高二次编译的速度。

js模块的编译

每个js模块都会进行一下步骤:
1、模块的包装

(function(exports, require, module, __filename, __dirname){
})

2、作用域的隔离
调用vm原生模块的runInThisContext()方法(好处是上下文明确,不污染全局)进行。

3、将方法返回给调用方法
最后将exports的属性和方法返回给外部调用。

node模块的编译

node调用process.dlopen()方法进行加载和执行,并不需要进行编译,因为是c/c++编写的,优势就是加载速度快。

json模块的编译

node调用fs模块读取文件,然后用JSON.parse()方法编译,导出给模块的exports对象。

js核心模块的编译

分为两步:1、转存到c/c++代码中。2、编译核心模块代码

1、采用自带的js2c.py工具,将代码转存到c/c++数组中,并且生成node_native.h头文件。当引入核心模块之后,根据标识符,将代码加载到内存中。
2、核心模块的编译过程,也经过包装(及作用域隔离),和普通模块的加载过程的区别(获取途径不同,核心模块是从内存中加载的。文件的缓存模块地址不同)

文件的缓存地址不同:核心模块会缓存到NativeModule._cache对象上,而普通模块会缓存到Module._cache对象上。而核心模块会通过process.binding('natives')方法取出

node模块的复合模式

node模块的复合模式:由c/c++来完成模块的内建,然后由js代码来完成向外的导出。该模式可以找到性能和开发速度之间的平衡点。

node内建模块的组织形式

module-organize.png

内建模块的导出及调用关系

callback-relation.png

module-export.png

核心模块引入实例

example-module.png

node模块之间的调用关系

module-callback.png

python基础学习(一)

变量的赋值

counter = 100 # 赋值整型变量
miles = 1000.0 # 浮点型
name = "John" # 字符串
 
print counter
print miles
print name

多个变量赋值

a = b = c = 1
a, b, c = 1, 2, "Jhon"

标准数据类型

  • Numbers
  • String
  • List
  • Tuple
  • Dictionary

python数字

python支持四种不同的数字类型:

  • int
  • long
  • float
  • complex

python支持复数,复数由实数部分和虚数部分,可以用a+bj或者complex(a,b)表示

python字符串

字符串或串是由数字、字母、下划线组成的一串字符

字符串的两种取值顺序:

  • 从左到右默认0开始,最大范围是长度减一
  • 从右到左默认开始-1,最大范围是字符串开头

想要截取中间一段字符串,可以使用变量[头下标:尾下标],我们举个例子:

s = 'ilovepython'
s[1:5] # love

+是连接字符串,*是重复操作

a = 'i'
b = 'love'

print a + b  # ilove
print b * 2  # lovelove

python列表

list是python中使用最频繁的数据类型
它支持字符、数字、字符串甚至可以包含列表
列表切割也可以用[头下标:尾下标],从左到右是索引默认0开始,从右到左默认-1开始。

加号(+)表示连接,星号(*)表示重复操作

list = ['route', 786, 2.23, 'jhon', 70.2]
otherlist = [123, 'jhon']

print list # 打印表单
print list[0] # 输出表单第一个元素
print list[1:2] # 输出第二个和第三个元素
print list[2:] # 输出从第三个到末尾最后的元素
print list * 2 # 输出list两边
print list + otherlist # 打印两个的组合

python元组

元组是另一种数据类型,类似于列表,元组用()表示,内部元素用逗号隔开,不能被二次赋值,相当于只读列表,不允许更新

python字典

字典是除列表以外最灵活的内置数据结构类型,列表是有序的对象集合,字典是无序的对象集合。

两者的区别在于:字典用key值来存取,而不是偏移存取。

字典用“{}”标识。字典由索引(key)和它对应的值(value)组成。

dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
 
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
 
 
print dict['one']          # 输出键为'one' 的值
print dict[2]              # 输出键为 2 的值
print tinydict             # 输出完整的字典
print tinydict.keys()      # 输出所有键
print tinydict.values()    # 输出所有值

数据类型转换

函数 描述
int(x) 将x转换成一个整数
long(x) 创建一个长整型
float(x) 创建一个浮点型
complex(real) 创建一个复数
str(x) 将x对象转换成字符串
repr(x) 将x对象转换为表达式字符串
eval(str) 用来计算在字符串中的有效python表达式,并返回一个对象
tuple(s) 将s序列转换为一个元组
list(s) 将s序列转换为一个列表
set(s) 转换为可变集合
dict(d) 创建一个字典。d必须是一个序列(key,value)元组
frozenset(s) 转换为不可变集合
chr(x) 将一个整数转换为一个字符
unichr(x) 将一个整数转换为unicode字符
ord(x) 将一个字符转换为他的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串

《图解http》学习笔记(六)

  • http报文的结构

http协议的请求和响应,必须包含的部分是http首部,首部内容为客户端和服务器分别处理请求和响应提供需要的信息

  • http请求报文

http请求报文由方法、URI、HTTP版本、HTTP其他首部字段组成

  • http响应报文

HTTP报文由HTTP版本、状态码(数字和短语)、HTTP首部字段组成

  • http首部字段

在客户端和服务端通信中,无论是请求还是响应,都会使用首部字段,他能起到额外传递信息的效果

  • http首部字段的结构

http首部字段是由首部字段名和字段值构成,中间用冒号分隔,首部字段名:字段值,举个例子:
Content-Type:text/html

  • http字段重复了会怎么样

出现两个及两个以上相同的首部字段名,规范尚未明确,有些浏览器会以第一个为准,有些浏览器会以后面的字段名为准。
注:我觉得不然,因为以前遇到set-Cookie的时候,出现多个浏览器会正常处理,所以还得看的吧

  • http首部字段类型

通用首部字段、请求首部字段、响应首部字段、实体首部字段

  • 通用首部字段

请求和响应都会使用的字段

  • 请求首部字段

从客户端向服务器发送请求报文时使用的首部字段。补充了请求的附加内容,客户端信息、响应内容相关优先级等信息。

  • 响应首部字段

从服务器向客户端返回响应报文时使用的首部。补充了响应的附加内容、也会向要求客户端附加额外的内容信息

  • 实体首部字段

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息

  • 通用首部字段一览
首部字段名 说明
Cache-Control 控制缓存行为
Connection 逐跳首部、连接的管理
Data 创建报文的时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主题的编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误通知
  • 请求首部字段一览
首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言类型
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的邮箱地址
Host 请求资源所在的服务器
If-Match 比较实体标记(Etag)
If-Modified-Since 比较资源更新时间
If-None-Match 比较实体标记(与If-Match相反)
If-Range 资源未更新的byte的范围请求
If-Unmodified-Since 比较资源更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的范围请求
Referer 对请求中的URI的获取方
TE 传输编码的优先级
User-Agent Http客户端程序的信息

图解http学习笔记(二).md

概念概述

  • 请求的整过程
    image
  • URI

URI是资源统一标识符,Uniform Resource Identifier的缩写

  • Uniform

规定统一的格式可以方便处理不同类型的资源,不用根据上下文来识别资源指定的访问方式,如:http或ftp

  • Resource

资源的定义是“可标识的任何东西”,除了文档文件、图像或服务,全部都可以作为资源

  • Identifier

表示可标识的对象

  • URI的格式
    image
  • http协议

http和其他众多的协议相同,用于客户端和服务端的通信

  • 请求和响应

请求必定由客户端发出,响应必定由服务端发出

  • 响应报文

响应报文基本由协议版本、状态码、用来解释状态码的短语、可选的响应头部字段以及实体主体构成

  • 无状态协议

http是一种不保存状态的协议,本身不对通信过程进行保存

  • Cookie

因为http不是一种保存状态的协议,需要登陆信息等进行保存,就引入了Cookie技术,管理状态

  • GET

用来请求访问已被URI识别的资源

  • POST

用来传输实体的主体,虽然GET也可以用来传输实体的主体,但是一般不用GET而用POST

  • PUT

用来传输文件,PUT文件上传本身不带验证机制,任何人都可以上传,存在安全问题,因此一般网站不使用这个方法

  • HEAD

和GET方法一样,知识不返回报文主体

  • DELETE

用来删除文件和PUT方法相反,一样没有验证机制,任何人都可以操作

  • OPTIONS

询问针对请求URI资源支持的方法

  • TRACE

让web服务端将之前的请求通信环回给客户端的方法

  • TRACE过程

客户端通过TRACE方法可以查询发送出去的请求是怎么样被加工修改或者篡改的,因为请求想要连接到服务器中间可能会通过代理中转,TRACE方法就是用来确认连接过程中发生的一切

  • CONNECT
    CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输
  • 总结
    在众多方法中LINK和UNLINK已经在http1.1中被废弃
    httpMethod

图解http学习笔记(一)

概念解析

  • 协议

不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则,这种规则即为协议

  • TCP/IP

TCP/IP是互联网相关的各类协议的总称,总有人认为这是TCP和IP两种协议是❌的

  • 协议族的分成管理

TCP/IP协议族划分成以下4层:应用层、传输层、网络层和链路层

  • 应用层

应用层决定了向用户提供应用服务时通信的活动,TCP/IP协议族内预存了各类通用的应用服务,如FTP、DNS、HTTP

  • 传输层

传输层对上层应用层,提供处于网络连接中的两台计算机的数据传输,有两种不同的协议:TCP和UDP

  • 网络层

网络层用来处理在网络上的流动的数据包(网络传输的最小数据单元),该层规定了通过怎样的路径到达对方计算机,将数据传过去

  • 链路层

用于处理连接网络的硬件部分。硬件上的范畴均在链路层的作用范围之内

  • 流程图描述传输过程
    image
  • IP协议

IP是一个协议的名称和IP地址不同,作用是把各种数据包传送给对方,保证把数据传送给对方需要两个重要条件IP地址和MAC地址

  • IP地址

IP地址指明了节点被分配到的地址

  • MAC地址

网卡所属的固定地址

  • ARP协议

ARP是一种解析地址协议,可以根据IP地址就可以反查出对应的MAC地址,举个例子,当统一局域网内的两台及其需要通信时,发送端先发出ARP信号,当所属的MAC机器接收到之后,会回一个ARP信号,两台机器通信成功

  • 字节流服务

字节流服务由位于传输层的TCP协议提供,为了方便传输,将大块数据分割成以报文段为单位的数据包进行传输

  • 三次握手

握手过程中使用TCP标志——SYN和ACK,流程图如下:
image
当中间过程中断时,TCP协议会以相同顺序发送相同的数据包

  • DNS

他提供域名到IP地址之间的解析服务,从域名查IP地址或者IP地址查域名的服务

图解http学习笔记(七)

  • 响应首部字段
首部字段名称 说明
Accrpt-Ranges 是否接受范围请求
Age 推算资源创建经过时间
ETag 资源匹配信息
Location 令客户端重定向的URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
  • 实体首部字段
首部字段名称 说明
Allow 资源支持的HTTP方法
Content-Encoding 实体主体适合的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的时间
Last-Modified 资源最后的修改时间
  • 非HTTP1.1首部字段

HTTP协议中的首部字段,不限于RFC2616中定义的47中字段,还有Cookie、Set-Cookie、Content-Disposition等

  • 端到端首部(End-to-end)

分到此类别中的首部会被转发给请求/响应对应的最终接收目标,且必须保存到缓存生成的响应中,规定中它必须被转发

  • 逐跳首部(Hop-by-hop)

分在此类别中的首部只对单次转发有效,会因通过缓存或者代理而不在转发。HTTP/1.1和之后版本中,需要使用逐条首部,需要使用Connection首部字段

  • Cache-Control

通过Cache-Control首部字段,就能操作缓存的工作机制,参数可选的,多个指令之间通过“,”分隔

  • 缓存请求指令一览
指令 参数 说明
no-cache 强制向源服务器再次验证
no-store 不缓存请求或者响应的任何内容
max-age 必需 响应的最大Age值
max-stale 可省略 接受已过期的响应
min-fresh 必需 期望在指定的时间内响应任有效
no-transform 代理不可更改媒体类型
only-if-cache 从缓存获取资源
cache-extension - 新指令标志(token)
  • 缓存响应指令
指令 参数 说明
public 可向任意方提供响应缓存
private 可省略 仅向指定用户返回响应
no-cache 可省略 缓存前必须先确认有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
must-revalidate 可缓存但必须再向源服务器进行
proxy-revalidate 要求中间缓存服务器对缓存的有效性进行再次确认
max-age 必须 响应的Age值
s-maxage 必须 公共缓存服务器响应的最大Age
cache-extension - 新指令标记(token)
  • public

该指令表示任意一方都可以使用缓存

  • private

当使用这条指令时,响应只以特定用户作为对象,这点和public相反

  • no-cache

使用no-cache是防止返回的资源过期,如果服务器返回的响应资源中包含no-cache指令,那么缓存服务器不能对资源进行缓存。如果,源服务器以后也将不再对服务器请求中的资源进行有效性确认,且禁止其对资源进行缓存操作

  • no-store

当使用no-store指令时,暗示请求或响应中包含机密信息,缓存不能在本地存储请求或响应的任意部分

  • 注意

no-cache代表不缓存过期资源,缓存会向源服务器进行有效性确认后处理资源,而no-store才是真正的不缓存。

  • s-maxage

该指令的功能和max-age功能相同,它们之间的区别时s-maxage这个指令适用于提供多用户的公共的缓存服务器(代理),对于同一用户重复返回响应的服务器来说没有任何作用

  • max-age

该指令代表最大的缓存时长,在该时长内,不必再向源服务器确认。当max-age这个值等于0时,该资源需要向源服务器确认之后,看资源是否有效,相当于no-cache

  • 注意

在HTTP/1.1中,max-age和Expires同时出现时,max-age有效,而Expires会被忽略。

  • min-fresh

指令要求缓存服务器返回至少还未过指定时间缓存资源

  • max-stale

使用该指令可指示缓存资源,即使过期照常接收

  • only-if-cache

使用该指令表示客户端仅在缓存服务器本地缓存目标资源的请求下才会要求其返回,换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回504

  • must-revalidate

使用该指令,代理会向资源服务器再次验证即将返回的响应缓存目前是否有效

  • proxy-revalidate

指令要求所有的缓存服务器在接收到客户端带有改制ing的请求返回响应之前,必须再次验证缓存的有效性

  • no-transform

指令规定无论是在请求中还是响应中,缓存都不能改变实体主体的媒体类型

nodeJS常用的对象和一些内置模块

global对象

在浏览器中,默认的全局对象是window,而在nodejs中默认的全局对象是global

process

process代表的是当前进程,它有一下用法:

  • process.version:代表当前node的版本
  • process.cwd():cwd代表的意思是current work directory,指当前工作目录
  • process.chdir(dirPath):改变当前工作目录
  • process.nextTick(callback):因为js是单线程的,所以弄的也不例外,如果我们想在下一轮的时间循环中执行代码,那么就使用这个方法。
process.nextTick(() => {
  console.log(2);
})
console.log(1);
//运行结果: 1 2
  • process.on(eventName, callback):进程本身的事件,可以监听事件本身的改变来触发callback。
process.on('exit', (e) => {
  console.log(e);
})

fs模块

fs模块提供了异步和同步的文件读写功能。

同步:当遇到io操作的时候,会等到操作完成后,才能继续执行后续代码。
异步:当遇到io操作的时候,无需等待,把操作交给其他进程,主进程继续执行后续代码。

  • 使用fs模块:
var fs = require('fs');
  • 异步读写文件
//异步读
fs.readFile(fileName, fileEncoding, (err, data) => {

});
//异步写
fs.writeFile(fileName, data, (err) => {})
  • 同步读写文件
//同步读
fs.readFileSync(fileName, fileEncoding)
//同步写
fs.writeFileSync(fileName, data)
  • 获取文件信息
fs.stat(fileName, (err, stat) => {
    if(err) {
        console.warn(err);
    } else {
        stat.isFile();      // 判断是否是文件
        stat.isDirectory(); // 判断是否是目录

        if(stat.isFile()) {
            stat.size; // 文件大小,单位为字节(Byte)
            stat.birthtime; // 文件创建时间
            stat.ctime; // ChangeTime,对文件的重命名、修改owner等操作会变更改时间
            stat.atime; // AccessTime,查看内容的时候会更新
            stat.mtime; // ModifyTime,修改内容的时候会更新
        }
    }
});

path模块

http模块

stream

crypto模块

http常见的面试考点

http协议是什么?

http协议是超文本数据传输协议,web服务端和客户端之间通过http协议传输数据

http常见的方法

  • GET

从服务器上获取一个资源(一般指网页),我们一般用get。

  • POST

一般我们向服务器提交一个数据时(可能会创建一个新的资源)

  • PUT

向服务器提交数据

  • DELETE

删除指定资源

  • HEAD

只请求网页的头部信息

http常见的状态码

  • 1XX——临时响应
    1.100(继续)服务器已经接受到一部分请求,在等待其他部分请求
  • 2XX——请求成功
    1.200(成功)
  • 3XX——重定向
    1.301
    2.302
    3.304
  • 4XX——请求资源失败
    1.401
    2.403
    3.404
  • 5XX——服务端错误
    1.500

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.