CSRF 攻击

CSRF 攻击

CSRF:(Cross-site request forgery),中文名称,跨站请求伪造。也被称为 one click attack/session riding。
可以这么理解 CSRF 攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。

阅读全文 →

Post 请求的 Content-Type 设置

Post 请求的 Content-Type 设置

前几天在测试 HttpServletRequest 获取参数的时候使用 Postman 这个工具发送请求的时候遇到了问题,Post 请求不管怎么发送,始终拿不到数据,Get 请求一点问题都没有。查了好几次终于明白是因为 Content-type 的问题。

阅读全文 →

HTTP2 介绍

为什么我们需要 HTTP/2

  • 解决 HTTP/1.1 的队头阻塞问题(传输效率问题)
  • 降低传输流量
  • 真正的支持多路复用

HTTP/2 的优点

HTTP/2 源自 SPDY/2

  1. HTTP/2 采用二进制格式传输数据(HTTP/1.x 采用文本格式)。

二进制协议的解析效率高,几乎没有解析代价。
二进制协议没有冗余字段,占用带宽少。
压缩及 https 技术弱化了文本协议的价值。

阅读全文 →

服务器 time_wait 和 close_wait 详解

有的时候 netstat 查看会看到非常多的 tcp 连接状态为 time wait 或者 close wait。这两个问题都不算难处理,这里分别解释一下两个问题出现的原理。

tcp 挥手状态转换

首先理一下 tcp 挥手时的状态转换。

阅读全文 →

go 的栈空间管理

栈空间管理的基本逻辑

go 语言通过 goroutine 提供了并发编程支持,goroutine 是 go 运行库的功能,而不是操作系统线程实现的,goroutine 可以被理解成一个用户态的线程。

阅读全文 →

go 格式化输出(format)使用

各类动词解释

通用

动词 示例 含义
%v 默认格式输出,当输出结构体时,扩展标志(%+v)会添加字段名
%#v 值的 Go 语法表示
%T 值的类型的Go语法表示
%% 百分号

布尔类型

动词 示例 含义
%t true 单词 true 或 false

整数类型

动词 示例 含义
%b 表示二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"

浮点数和负数

动词 示例 含义
%b 无小数部分、二进制指数的科学计数法,如-123456p-78
%e 科学计数法,如-1234.456e+78
%E 科学计数法,如-1234.456E+78
%f 有小数部分但无指数部分,如123.456
%F 等价于%f
%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)

对于浮点数,宽度设置输出总长度;精度设置小数部分长度(如果有的话),除了%g/%G,此时精度设置总的数字个数。例如,对数字123.45,格式%6.2f 输出123.45;格式%.4g输出123.5。

阅读全文 →

Delve 使用

Delve 是一个 Golang 的调试工具,比 GDB 要好用很多,能支持协程的调试。使用的时候可以直接运行程序调试,也可以 attach 到一个正在运行中的程序。

安装

Delve 的安装很简单,它本身也是 go 写的。

阅读全文 →

编写 Golang 单元测试(Unit Test)

单元测试文件和用例方法命名

Go 语言推荐测试文件和源代码文件放在一起。测试文件以 “_test.go” 结尾(这样在 go build 的时候才不会被包含)。

example/
    |-- biz.go
    |-- biz_test.go

普通测试 TestXxx

普通测试用例的方法以 Test 开头,参数为 t *testing.T

阅读全文 →

tmux 使用

为什么使用 tmux

在操作 linux 的使用,使用 ssh 连接终端是很常见的事情,但是有几个问题

  • 无法切换。比如 ssh 上去一台机器,然后执行正常操作,因为要查看目录,或者其他操作,需要频繁的切换到其他目录然后切换回来。一般的解决方式是开启多个终端。
  • 如果在 ssh 远程执行一个耗时长的命令,容易因为 ssh 断开而中断。
  • 断开 ssh 后,下次再连接又得重新 cd 到之前的目录,打开之前的文件。
    tmux 就可以解决这些问题。ssh 上一台服务器,在上面开启 tmux,然后正常像平时 ssh 操作一样。需要查看其它目录,直接通过 tmux 建立一个新的窗口,操作完再切回当前窗口即可。ssh 断开后,tmux 会帮你在服务器上继续维护当前的会话状态,下次 ssh 上来打开 tmux,所有的窗口,文件都和上次关不一样。同理,长时间的命令也不会受 ssh 断开影响。

安装

直接安装

sudo apt-get install tmux

编译安装新版

sudo apt-get update
sudo apt-get install -y libevent-dev libncurses-dev make
cd /tmp
wget https://github.com/tmux/tmux/releases/download/2.7/tmux-2.7.tar.gz
tar xvzf tmux-2.7.tar.gz
cd tmux-2.7/
./configure && make
sudo make install
cd ..
rm -rf ./tmux-2.7*

有时需要手动在当前目录下复制 tmux 二进制文件。

阅读全文 →

手动安装 Command line tools

什么是 command line tools?

Command Line Tools 是苹果的一个小型独立包,适用于 macOS,为终端扩展了额外的功能。包括但不限于:svn、git、make、GCC、clang、perl、size、strip、strings、libtool、cpp、what、codesign以及其他很多能够在Linux中找到的命令。

阅读全文 →