用法
全局作用域,声明或定义标识符(变量,函数),语义是该符号为内部链接
类定义中,声明方法时,说明该方法为静态方法
- 静态方法可以访问该类对象的私有成员和方法!
类定义中,声明变量时,说明该变量为静态数据成员
函数定义中,说明该变量为静态变量,存储于数据段
全局作用域,声明或定义标识符(变量,函数),语义是该符号为内部链接
类定义中,声明方法时,说明该方法为静态方法
类定义中,声明变量时,说明该变量为静态数据成员
函数定义中,说明该变量为静态变量,存储于数据段
resize
是调整string的size(length),操作后,[0, n)都可访问
若大于原有长度,则填充对应字符,默认\0
若小于原有长度,则截断
reserve
是预留空间,以便快速插入,操作后,元素仍保持原样
C风格字符串(\0
结尾),当使用这种语义时,只需传入该值即可。
1 | void print_as_string(const char *s) |
字节数组(内容中可能包含\0
),当使用此种语义时,还需传入长度
1 | void print_as_hex(const char *s, size_t len) |
很多时候,当传入一个字符串到函数时,往往只是读取字符串时
若使用std::string
,当实参为const char *
时,会分配内存并拷贝该字符串以生成一个std::string
当一个函数接受一个const std::string
,而在该函数内部,又需要传递该值到另一个函数,则又需要重新生成一个std::string
当某个接口参数是接受字符串类型时,为了减少不必要的开销
该类型可以接受const char *
,std::string
,减少冗余代码编写
StringPiece(google), StringRef(llvm), string_ref(boost)
,本质名,non-owning reference to a string
通过隐式转换,方便地从const char*, std::string
转换到此类型
该类通过保存字符串指针和长度,来避免不必要的复制
只支持非修改操作
开销很低,只需要sizeof(const char*) + sizeof(size_t)
字节
支持所有的类容器操作
因为StringPiece
不拥有数据,所以确保在StringPiece
生命期内,该数据可用
^M在vim中,是CR(回车符,0x0d)
(:help digraph
)
原因是该文件内容混合了DOS
和UNIX
格式,而vim识别为unix
格式,则多余的换行符,就使用^M
来显示
使用vim
:%s;\r;;g
在windows下,新建文件,默认文件格式为dos
在Linux下,新建文件,默认文件格式为unix
在windows平台下
输出时,\n(0x0d)
=>\r\n(0x0d 0x0a)
输入时,\r\n(0x0d 0x0a)
=>\n(0x0d)
1 | int main(int argc, char* argv[]) |
1 | [I] /m/s/T/file od -Ax -t x1 test.txt |
1 | [I] /m/s/T/file od -Ax -t x1 test.txt |
1 | int main(int argc, char* argv[]) |
1 | [I] /m/s/T/file od -Ax -t x1 test.txt |
1 | [I] /m/s/T/file od -Ax -t x1 test.txt |
效率
可读性
int
, char
, …)传入,则pass by value
传入传出,则pass by pointer
传出或传入传出参数,可以显式地知道该值会发生变化
当参数可以接受NULL
值时(若只作为传入,最好加上const
)
当返回一个新对象(new
)的引用时,意味着,调用者需要释放该对象
当作为类数据成员时
NULL
RSA是一种块加密,一个具体的RSA算法对应一个N(模数)
块加密:
密钥长度为工作长度
明文不足,则需填充(一般都有几种填充方式)
密文长度同密钥长度一致
N(模数)的二进制位数,称之为RSA长度(对应openssl函数,RSA_size(rsa)
),常用1024(128B),2048(256B)
公钥(N, E)
私钥(N, D)
RSA(1024)的D:3, 65537(0x10001),当N值大于65537时,默认用65537!
加密:公钥用来加密,私钥解密,保证信息被唯一持有私钥的接收((仅你可读但别人不可读,任何人都可写))
签名:私钥用来加密,公钥解密,保证信息是由唯一持有私钥的发送(仅你可写但别人不可写,任何人都可读)
RSA_PKCS1_PADDING
(最常用的模式)
RSA_PKCS1_OAEP_PADDING
RSA_NO_PADDING
服务端直接存储到数据库,客户端查询回去自行解码
服务器端实现简单
服务器端不需要依赖具体编码方式
服务器解码后,存储二进制到数据库,客户端请求时再编码返回给客户端
服务端多做工作,而且浪费时间
依赖客户端编码方式,可能会修改代码
服务器解码后,以文件形式存储到目录,客户端直接GET对应资源
无需存储到数据库
客户端实现简单
采用方案1.
自动获取所有依赖
go get .
usage: go build [-o output] [-i] [build flags] [packages]
编译指定包,以及其依赖
main
包,则在当前目录下生成一个可执行文件usage: go run [build flags] [-exec xprog] gofiles... [arguments...]
编译并运行main
包
main
包是由多个文件构成,则需要都指定!usage: go test [-c] [-i] [build and test flags] [packages] [flags for test binary]
自动测试指定包