实习
redis
redis是一个基于内存的键值对数据库,通常用作缓存数据库,减少对mysql等基于磁盘的数据库的访问次数,提高响应效率。
在安装完redis后,可以通过redis图形化界面连接redis(ip、端口号、密码、账号)。通过图形化界面来管理redis比较快捷,我这次使用的是redis desktop manager。
但还不清楚如何将redis与mysql进行整合使用。
若依后台管理系统
今天实习的老师介绍了开源的若依框架,将代码clone到cloud studio运行的时候,出现了too many file open的报错,但实际查看cloud studio环境时,发现并未对打开文件数量做限制。无奈将代码下载到本地运行后,发现windows平台下能够正常运行该前端项目,猜测可能是Linux系统下的一些环境配置问题……查找该问题时,发现mac平台上也会出现此问题,但mac上的命令无法在cloud studio环境下运行。
在运行若依后台管理系统的后端项目时,由于未配置好mysql和redis的连接设置而报错,最终修改默认设置后,能够正常运行该系统。
小林coding
图解网络
http/1.1优化
可以通过
- 避免发送http请求(使用强制缓存、协商缓存)
- 减少发送http请求(合并请求、减少资源重定向请求、延迟发送请求(在加载页面时,仅加载部分需要的数据))
- 减少http响应大小(gzip、br等压缩方式)
https 的RSA握手
TLS用于实现https的加密传输,而RSA是TLS的一种加密算法,选择该算法时,TLS的握手流程也固定。
RSA算法共有四次握手,第一次由客户端发起,第二次由服务器端发起,da- 减少发送http请求(合并请求、减少资源重定向请求、延迟发送请求(在加载页面时,仅加载部分需要的数据))
- 减少http响应大小(gzip、br等压缩方式) RSA算法共有四次握手,第一次由客户端发起,第二次由服务器端发起,第三次由客户端发起,第四次由服务器端发起。
- 第一次握手:传输客户端生成的随机数
- 第二次握手:传输服务器端生成的随机数及服务器端证书
- 第三次握手:在客户端验证证书后,再次发送生成的随机数
- 第四次握手:传输对于所有已发送信息计算出的摘要,防止信息被篡改 RSA握手的缺陷在于不具备前向保密性,一旦服务器私钥被泄露,之前的所有信息都能被解密
https的ECDHE握手
ECDHE算法基于椭圆曲线ECC
ECHDHE算法的前两次握手与RSA算法基本相同,但第二次握手时,服务器会发出Server Key Exchange消息,第三次握手时,客户端会生成一个椭圆曲线,并将公钥放在Client Key Exchange消息中,并且计算出摘要信息,第四次握手时,服务器端也会发送计算出的摘要信息,验证无误后,握手结束。
ECHDHE算法的优点在于具有前向保密性(密钥临时生成,一次性使用)且生成的密钥长度较小
https性能优化
- 硬件优化 支持AES-NI特性等的,在cpu层面优化加密算法的cpu
- 软件优化
- 软件升级 升级内核、openssl……
- 协议升级 TLS1.3 、密钥交换算法升级(RSA换为ECDHE)
- 证书优化
- 采用ECDSA(椭圆曲线)证书而非RSA证书,(ECC密钥短得多)
- 采用OCSP Stapling 替代CRL或OCSP, 使用服务器端缓存的证书状态查询
- 会话复用 (合理设置会话密钥过期时间) - 保持session ID(不具备前向保密性、有重放攻击问题) - 使用session Ticket(不具备前向保密性、有重放攻击问题) - Pre-shared key (类似 session Ticket,有重放攻击问题)http/2
- 头部压缩
- 静态字典
- 动态字典
- 压缩算法
- 二进制帧传输
- 并发传输
- stream 的使用(并发stream)
- 设置stream优先级
- 服务器主动推送资源 使用偶数号stream
http/3
- 使用UDP协议替换TCP协议(QUIC协议)
- 无队头阻塞 (UDP协议)
- 连接速度快(RTT次数少)
- 连接迁移 使用连接ID而非(源ip,端口号,目的ip,端口号)四元组标识连接
RPC(远程过程调用 remote process call)
- 服务发现机制 查找服务对应ip信息
- 连接池技术 复用TCP连接 -序列化协议 采用更优的序列化协议(HTTP采用Json)
WebSocket
- 建立TCP连接后,可升级HTTP为WebSocket协议
- 全双工通信,解决粘包问题
- 适用于客户端与服务器端频繁交互场景
rust
切片slice
slice能够生成对于数据的部分索引的引用,如:”hello world"的“world”是整个字符串的一个部分,slice能够生成对其的索引。
slice的目的在于保持索引与源数据的一致性,防止源数据删除后访问已经不存在的索引
结构体
结构体声明时,与JavaScript中对象的声明类似,但结构体声明中只能包含字段,方法的声明需要格外以impl structname的方式声明。
结构体包含普通结构体,元组结构体,类单元结构体三种
字段与引用
在结构体中,将字段赋值为其他对象的数据的引用,需要使用生命周期的概念
方法
方法与函数的不同点在于,方法与结构体紧密联系,只有结构体才能调用相应的方法,而函数可以在任意作用域中被调用。
方法的参数列表中,必须包含调用者本身的引用(类似与python中类方法的参数列表)