2023学习日志

2023-06-08 10:58:36 浏览数 (1)

实习

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中类方法的参数列表)

0 人点赞