Intelligence without ambition is a bird without wings.

2016-02-18
链表

优点

  • 动态存储分配

  • 数据更新效率高,O(1)

缺点

  • 浪费了部分空间用来存储指针域

  • 查询效率低,O(n)

增加一个头节点

空节点,不存储数据

  • 优化链代码效率,避免了链表是否为空的判断

技巧

  • 判断链表是否为空

    头节点到链域为空,则链表为空

  • 定位到尾节点

    尾节点的特点是链域为空。

    所以挨个遍历,当当前节点到链域为空时,说明当前节点为尾节点

阅读此文

2016-02-18
tcp

首部

  • PSH(push)

    置位后,数据立马发送,而不是填充到缓冲区等待发送

  • 窗口值

    报文发送方的接收缓冲区大小(tcp是双工的),允许对方发送的最大数据量

常见问题

  1. 3次握手中,为什么客户端最后还需要确认一次?

    为了防止服务端响应了已失效的连接请求报文。

    假设没有再次确认,当客户端发出一次连接请求时,由于某种原因,该报文被滞留。
    后续客户端又重新发送报文,与服务端建立了连接。
    而此时服务端收到了之前的连接请求报文,又建立了连接,此时便导致错误。

阅读此文

2016-01-18
电影网站

阅读此文

2016-01-15
linux-最大打开文件数

要点

  • linux下,默认最大打开文件数为1024(ulimit -n)

  • 一个进程打开,默认占用3个文件描述符(0,1,2分别对应标准输入,标准输出,标准出错)

结论

  • 默认情况下,单进程最大打开文件数为1021个([3,1023])

  • 单进程,最大连接数为1021

阅读此文

2016-01-15
服务端编程步骤

步骤

  1. 创建监听套接字

  2. 配置监听地址信息

  3. 套接字绑定监听地址

  4. 开始监听

  5. 连接处理/数据IO

阅读此文

2015-11-26
nginx-gzip

1
2
3
4
5
6
7
http {
gzip on; # 开启gzip
gzip_min_length 1k; # 大于等于1K才压缩
gzip_comp_level 1; # 压缩级别(1~10),值越大,压缩程度越高
gzip_proxied any; # 所有代理的返回都压缩
gzip_types text/plain application/x-javascript text/css text/javascript application/json; # 当Content-Type为这些值时才压缩
}

参考

  1. http://nginx.org/en/docs/http/ngx_http_gzip_module.html
阅读此文

2015-11-25
rfc-表示要求的动词

阅读此文

2015-11-25
http-content-type

application/json

  • 数据必须是Unicode编码,默认编码方式为UTF-8

  • 因为json数据前2个字符总是ASCII字符({",与[空格]的组合),所以可以推断出其编码方式

    1
    2
    3
    4
    5
    00 00 00 xx  UTF-32BE
    00 xx 00 xx UTF-16BE
    xx 00 00 00 UTF-32LE
    xx 00 xx 00 UTF-16LE
    xx xx xx xx UTF-8
  • 若采用UTF-16UTF-32,则需要设置content-transfer-encodingbinary??

参考:

  1. http://www.ietf.org/rfc/rfc4627.txt

参考

  1. http://stackoverflow.com/questions/9254891/what-does-content-type-application-json-charset-utf-8-really-mean
阅读此文

2015-11-18
go

语言特性

  1. 代码风格统一(命名,缩进)

    • 以首字母大小写区分成员是public还是privite

    • 强制缩进风格

  2. 错误处理方式优雅统一

    • 错误作为最后一个返回值
  3. 资源释放方式优雅统一(defer)

  4. 非侵入式接口

  5. 发布,运维方便

  6. 包管理机制

    • 革新了项目管理方式,项目结构和构建顺序依赖于目录组织,引用(import)关系
  7. 垃圾自动回收

  8. 静态类型

  9. 反射

    • 常用于对象的序列化(json, xml, gob,…)
  10. 函数多返回值,提供多重赋值

    • 优雅地同时返回结果和错误

    • 返回多个结果不用像C/C++那样,定义额外的结构体或多个传出参数

  11. 高效并发,方便的同步机制

  12. 自带单元测试

  13. 自带很多好用的库,如log,encoding/json,net/http,…

  14. 强大好用的命令行工具,如gofmt,gocode,…

  15. 方便的枚举常量定义(iota)

阅读此文

2015-11-17
nginx-CORS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#
# Om nom nom cookies
#
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}

参考

  1. http://enable-cors.org/server_nginx.html
阅读此文