- 博客(107)
- 资源 (8)
- 收藏
- 关注

原创 HTTP相关RFC
HTTP1.1 RFC7230HTTPS RFC2818HTTP/2 RFC7540HTTP/3 draft-ietf-quic-http-33
2021-01-24 14:32:28
790
原创 浙大陈越何钦铭数据结构08-图7 公路村村通【循环和最小堆版】
随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。典型的Prim应用,姥姥没有讲最小堆的具体实现,代码磨了很久,终于过了。简言之,只有对最小生成树算法逻辑有深刻的认识,同时有足够的耐心和细心,实际动手写,才能提高代码能力。现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。一个典型的最小生成树问题,可以用Prim或Kruskal实现,本文使用Prim用循环和最小堆2种方式实现。
2023-09-07 16:03:55
620
原创 浙大陈越何钦铭数据结构07-图6 旅游规划【最小堆实现】
本题的最小堆比用循环的方式实现FindMinDist要难一些,主要是要理解和修改堆的几个实现,核心是构造和维护最小堆要根据dist的值,来保存相应的顶点。是一样的,不同的是用最小堆实现函数【FindMinDist】。该函数的时间复杂度从N^2降低为NlogN。
2023-08-30 23:42:09
866
1
原创 07-图5 Saving James Bond - Hard Version
1.1.2对于顶点和邻接表用typedef结构数组的方式表示,而不用结构数组指针,更方便调试。非常精彩的一道题,是无权图单源最短路的一个典型应用,需要对该算法有有深刻的认识,并灵活应用。典型的无权单源最短路径算法,一点改动是需要对当前的顶点做判断,是否已经是出口。对顶点按从近到远排序和对邻接表按从近到远排序,保证优先处理“最小第一跳”。1.1.3边是动态生成的,所以没有必要用Edge结构表达和传递。1.1.4边是跳跃距离D,根据跳跃距离,连接顶点,构造图。根据题目输出要求:优选有最小第一条的路径。
2023-06-30 23:53:25
246
原创 06-图2 Saving James Bond - Easy Version
可以把改问题抽象为一个图,James是否能跳出,抽象为一个ListComponents问题,即对连通分量遍历,并在满足特定条件时就退出。对图做ListComponents,选择一个顶点,满足【FirstJump】,并没有被访问过,用Visited数组跟踪顶点访问情况;尝试跳跃到其它顶点【CanJumpOnto】,并判断是否到边【CanReachBank】;顶点:鳄鱼位置的结构数组,每个鳄鱼有一个编号V,对应坐标V(x,y)生成一个图,图只有顶点,没有边。到边即退出,否则对它的邻接点做DFS,直至结束;
2023-06-21 23:31:17
481
原创 2023春期末考试选择题R2-9AVL树插入调整详解
将 8, 9, 7, 2, 3, 5, 6, 4 顺序插入一棵初始为空的AVL树。下列句子中哪句是错的?C. 7 是根结点 √。A. 4 和 6 是兄弟 √。D. 3 和 8 是兄弟 √。需要对AVL树的4种旋转方式熟悉。B. 5 是 8 的父结点 ×。另附代码模拟AVL树的插入和调整。B. 5 是 8 的父结点。A. 4 和 6 是兄弟。D. 3 和 8 是兄弟。
2023-06-11 16:48:53
2042
原创 2023春期末考试选择题R2-8计算最小生成树总权重详解
V3 ----- V1[和V1-V3重复,忽略]V4 ----- V3[和V3-V4重复,忽略]V5 ----- V1[和V1-V5重复,忽略]V1 ----- V3[cost:1,收集]V1 ----- V5[cost:1,收集]V3 ----- V4[cost:1,收集]V3 ----- V6[cost:2,收集]V1 ----- V2[cost:3,收集]V3 ----- V1[环路,丢弃]V5 ----- V3[环路,丢弃]V ----- V6[环路,丢弃]
2023-06-11 16:34:27
785
原创 2023春期末考试R5-1另类选择排序详解
所以需要判断当maxi==i,将mini位置的值和最后位置做交换swap(&r[mini], &r[n - i + 1])如果maxi=i,则说明最大值在序列头部,而swap(&r[mini], &r[i])会交换原来i位置的元素到mini。1.1待排元素的范围是1-n,对应的数组下标是r[1],r[n+1],每轮循环上下边界向中间移动一个位置,外循环右边界可以选择循环到n-1或n,代码中i
2023-06-07 11:53:12
1083
原创 HTTP Range,If-Range,If-Match比较和实践
Range,If-Range,If-Match是HTTP中的几个头字段,其中Range和If-Range配合可以实现断点续传,If-Match也可以和Range配合,但底层逻辑确是不同。Range: 按指定范围获取资源,范围越界报416。If-Range: 断点续传恢复时,用If-Range携带上次获得的资源的etag或Last-Modified检查资源是否已发生变化,是则需要重新下载整个资源,否则取本次Range指定范围的资源。无论是否匹配都只会返回200。If-Match: 如果资源未变动,则上传
2022-04-06 11:09:31
1666
原创 一文读懂nginx gzip_static
Nginx支持静态和动态两种gzip包体压缩方式,分别对应模块ngx_http_gzip_static,ngx_http_gzip。我们知道gzip是CPU密集型应用,实时动态压缩比较消耗CPU资源。为进一步提高Nginx的性能,我们可以使用静态gzip压缩,提前将需要压缩的文件压缩好,当客服请求到达时,直接发送压缩好的.gz文件,如此就节省了CPU资源,提高了性能。缺省ngx_http_gzip_static模块并未启用,需要重新编译,并使能它#注:根据需要添加其它参数./configure --w
2022-02-23 12:16:40
4945
2
原创 一文读懂nginx gzip
HTTP中body包体压缩对应Accept-Encoding/Cotent-Encoding头字段。nginx支持对body的gzip压缩,nginx的ngx_http_gzip_module对此有较为精细的控制。包括:是否开启gzip压缩 gzip on|off对何种类型的文件进行压缩: gzip_types设置多大的文件才启用压缩 gzip_min_length设置压缩率: gzip_comp_level查看压缩率: $gzip_ratio是否插入Vary: Accept-Encoding
2022-02-18 11:35:34
1978
原创 一文读懂nginx charset
作为HTTP内容协商的一部分,charset通常和Accept/Content-Type,Accept-Charset头字段配合使用。nginx中可以对charset的值进行控制,直接看配置和说明#本配置文件测试charset,对应模块为ngx_http_charset_module #source_charset 指定响应使用的字符集,定义响应本身的字符集,
2022-02-08 10:57:50
4905
原创 一文读懂4个HTTP条件请求头部
HTTP常用的条件请求头部有4个,它们是If-Modified-Since,If-Unmodified-Since,If-Match,If-None-Match。深刻理解其适用的场景和解决的问题,是灵活应用它们的关键。If-Modified-Since: 使用最简单1. 只能用于GET/HEAD方法2. 只有一个应用场景,更新cache3. 如果同时存在If-None-Match,则If-None-Match生效如果在设定时间之后,资源发生了修改,则返回完整资源和200,否则返回304【更新cac
2022-01-12 15:23:46
1968
原创 sed踩坑与实践
sed是linux中常用的文本查找替换工具,其功能强大,使用繁复,本文以2例介绍sed实践中的需要注意的小细节。实验文本:t.txt,目标是通过sed把#root html;前的#去掉。 #root html;先用grep过滤一下,找到并验证需要sed处理的对象是否满足需要。注:sed里使用时需要把-re替换为-rl[root@test01 vimtest]# grep -re "#root html" t.txt#root html;然后用sed做替换,下面是正确的命令及替换的效果。
2021-12-07 09:33:54
1020
原创 Nginx使用ngx_http_realip模块获取用户真实IP实践
Nginx使用ngx_http_realip模块获取用户真实IP实践一个典型的web应用拓扑如下图。client — proxy1 — proxy2 … proxyn — web server由于client并不直接和web server建立连接,所以web server无法直接获得用户的IP。而web server有根据用户IP进行访问控制策略的需求。对于这一问题,一个常用的解决方案是代理服务器添加在HTTPX-Real-IP或X-Forwarded-For头字段,把client ip传递给web
2021-11-28 23:22:13
3090
原创 Nginx热升级回滚实操
Nginx 1.20.0<—>1.20.1升级回滚实操准备好Nginx二进制文件并做好备份,nginx/nginx.old是1.20.0,nginx.new是1.20.1。[root@test01 sbin]# lltotal 23868lrwxrwxrwx. 1 root root 32 May 29 20:30 n -> /root/openresty/nginx/sbin/nginx-rwxr-xr-x. 1 root root 8144640 Nov 9 10
2021-11-09 10:53:39
2266
原创 BPF(Berkeley Packet Filter)伯克利抓包过滤器实践
BPF(Berkeley Packet Filter)伯克利抓包过滤器实践BPF Berkeley Packet Filter是驱动级抓包过滤接口,多数抓包工具都支持该语法过滤器就是一个表达式,由原语,运算符组成。原语: 原语是限定符qualifiers(有时也称为keywords)+ID(字符或数字),如 host www.baidu.com, port 80限定符:typehost, net/mask,port, portrangedirdst, src, dst or src[缺省
2021-08-11 13:11:14
4973
原创 vim行内编辑的一些通用规则:
vim行内操作的一些通用规则:vim的行内操作可以归纳为at— a表示action,可以是c(change),y(yank),d(delete)— t表示target,可以是w(word),e(end),$(行尾),0(行首)— w和e的区别在于如何处理空格,w把空格当做当前word的一部分,e则不处理空格。— W或E表示在action处理时包括标点。— 一个例外是关于word间的空格,c不处理,所以cw和ce是一样的,而y,d则会处理空格,所以yw,ye,或dw,de不一样。所以cw/ce表
2021-06-09 10:30:49
337
原创 Nginx *.conf文件Vim语法高亮问题
Vim中Nginx语法高亮问题123如果用vim编辑nginx配置文件缺少语法高亮,则用户体验相当不好。新版的nginx已经提供了vim语法高亮文件,具体使用如下:在nginx源文件夹中找到contrib/vim文件夹,其中包括了vim语法高亮文件。/root/n/nginx-1.20.0/contrib/vim[root@test01 vim]# lltotal 16drwxr-xr-x. 2 1001 1001 4096 Apr 27 22:05 ftdetectdrwxr-xr-x. 2
2021-05-30 23:12:35
1033
4
原创 罗剑锋透视HTTP协议学习笔记---29 | 我应该迁移到HTTPS吗?
##29 | 我应该迁移到HTTPS吗?升级到HTTPS的流程申请证书 收费 免费 Let's encrypt 自动化部署协议ACME 客户端工具Certbot,acme.sh 注意事项: 双证书 RSA 2048, SHA2 ECDSA 自动部署 crontab配置HTTPS基本配置 开HTTPS服务 配置双证书 SNI【Server Name Indication】 用来解决HTTPS虚拟主机问题,即1个IP对应多个域名,HTTP时期用
2021-04-24 16:00:37
219
原创 罗剑锋透视HTTP协议学习笔记---28 | 连接太慢该怎么办:HTTPS的优化
28 | 连接太慢该怎么办:HTTPS的优化HTTPS太慢主要指的是连接慢,而不是使用慢。所以优化的重点集中在连接上。TLS连接除了交互消息,还有一些隐性的时间消耗,比如客户端需要验证证书。TLS握手过程中,客户端验证证书真伪,有一种情况,证书是真的,但证书已经废弃,或者被加入了黑名单。所以,对于一些重要的网站【chrome的策略是EV证书,mark1无法验证,apple,招行】,除了验证证书真伪,还需要验证证书的有效状态。有3种方式验证证书是否有效其中CRL是指被废弃的证书列表,CRL需要客户端
2021-04-24 12:02:06
420
原创 罗剑锋透视HTTP协议学习笔记---27 | 更好更快的握手:TLS1.3特性解析
27 | 更好更快的握手:TLS1.3特性解析TLS1.3 发布于2018年,在保证兼容性的背景下,增强了安全性,提高了性能。兼容性:为了兼容性大量支持TLS1.2的老旧设备,TLS1.3采用了和1.2一样的报文格式,甚至版本号都伪装成1.2,它通过extension:support_versions字段标识其支持1.3。注1:wireshark有一定的智能型,能够根据Server Hello的回应,把Client Hello标记为1.2,即使Client Hello消息是按1.3格式发送的注2:
2021-04-23 20:21:33
454
原创 罗剑锋透视HTTP协议学习笔记---26 | 信任始于握手:TLS1.2连接过程解析
26 | 信任始于握手:TLS1.2连接过程解析TLS的几种子协议及结构记录协议(Record Protocol),相当于是一个消息容器,承载其它协议,它包括一个TVL,描述其承载的其它协议如上图,这是一个Server Hello消息,一条TLS报文,包含了4条TLS handshake Protocol警报协议(Alert Protocol)握手协议(Handshake Protocol), type=22,wireshark 中过滤条件tls.record.content_type22或t
2021-04-23 16:38:56
1262
原创 罗剑锋透视HTTP协议学习笔记---25 | 固若金汤的根本(下):数字签名与证书
25 | 固若金汤的根本(下):数字签名与证书黑客虽然拿不到会话密钥,无法破解密文,但可以通过窃听收集到足够多的密文,再尝试着修改、重组后发给网站。因为没有完整性保证,服务器只能“照单全收”,然后他就可以通过服务器的响应获取进一步的线索,最终就会破解出明文。—这里说的是对称加密的安全性和算法,秘钥长度,分组模式相关。比如以AES128-ECB方式加密,明文特征无法被隐藏,容易被破解;AES-CBC缺少hmac,无法保证消息的完整性;所以安全套件通常选AES-GCM,明文特征被隐藏并带有hmac,所以数据
2021-04-22 15:25:46
602
原创 罗剑锋透视HTTP协议学习笔记---24 | 固若金汤的根本(上):对称加密与非对称加密
24 | 固若金汤的根本(上):对称加密与非对称加密对称加密加密速度快,无法解决秘钥传递问题,目前常见的有AES256,CHACHA20。注:和一般意义上认知的密码不同,TLS中的“密钥”就是一长串的数字,不包括字符。对称分组加密模式因为AES只能对固定长度的数据加密,因此需要配合分组算法,常用的分组模式又ECB,CBC,CCM,GCM非对称加密RSA 秘钥交换+加密解密DH 秘钥交换ECDHE 椭圆曲线密码交换ECDSA 数字签名常用曲线:P-256[别名:prime256v1:se
2021-04-21 16:53:30
239
原创 罗剑锋透视HTTP协议学习笔记---23 | HTTPS是什么?SSL/TLS又是什么?
23 | HTTPS是什么?SSL/TLS又是什么?为什么要有 HTTPS?因为HTTP消息是明文传输的,任何中间人都可以截获,查看,修改HTTP消息,所以HTTP是不安全。什么是安全?网络通讯安全,要解决4方面的问题:机密性: 用加密算法加密来保证消息的机密性,即消息只对通讯双方可见,中间人即使截获,也无法看到消息内容。对称加密速度快,但秘钥交换是个问题,而且最好秘钥不固定,每会话一个秘钥。通常用非对称算法加密对称秘钥,秘钥产生,交换过程是重点和难点完整性: 消息不允许被篡改,如果没有完整
2021-04-21 15:11:29
410
1
原创 罗剑锋透视HTTP协议学习笔记---32 | 未来之路:HTTP/3展望
32 | 未来之路:HTTP/3展望HTTP/2 的“队头阻塞”HTTP/2部分解决了HTTP的队头阻塞问题,但由TCP带来的队头阻塞问题,不从协议底层改造是无法解决的。TCP有丢包重传机制,所有数据对TCP而言就是有序的字节流,所以虽然在HTTP层面流是乱序的,收发次序互不影响,但在TCP层面TCP分组仍然是有序的,在弱网场景下,如果队头发生丢包重传,就会有队头阻塞问题。HTTP/3从协议底层进行改造,底层协议替换为UDP,并实现了QUIC协议,QUIC协议集成了TLS,并实现了类似HTTP/2的多
2021-04-13 12:32:51
283
原创 罗剑锋透视HTTP协议学习笔记---33 | 我应该迁移到HTTP/2吗?
33 | 我应该迁移到HTTP/2吗?HTTP/2的优点兼顾安全和性能,同时语义完全兼容HTTP/1,上层应用无需修改,就可以运行在HTTP/2上。安全:TLS1.2+性能:HPACK报头压缩解决问题:HTTP队头阻塞HTTP基于请求-响应工作模式,它是半双工且串行的,对于HTTP/1而言,一个TCP连接资源利用率很低。所以HTTP/1中,一个域名会最多并发6个连接。HTTP/2中,一个域名对应一个TCP连接,利用多路复用多个请求应答流并行,提高了TCP连接的利用率。另外配合流的优先级调度,服
2021-04-06 15:40:39
297
原创 罗剑锋透视HTTP协议学习笔记---31 | 时代之风(下):HTTP/2内核剖析
31 | 时代之风(下):HTTP/2内核剖析连接前言连接前言 connection prefacePRI * HTTP/2.0\r\n\r\nSM\r\n\r\n在wireshark里称为magic,是一个纯HTTP/1消息,意思是以后的消息切换到HTTP/2本来h2在ALPN或h2c的connection/upgrade就已经确认了使用h2,发送magic似乎有点多余。实际的magic消息包括3个流,其中Magic是一个标准HTTP/1消息settings,windows_upda
2021-04-06 14:43:58
662
原创 罗剑锋透视HTTP协议学习笔记---30 | 时代之风(上):HTTP/2特性概览
30 | 时代之风(上):HTTP/2特性概览为什么不是 HTTP/2.0HTTP/2的前身是GOOGLE研发的SPDY协议,经过IETF的规范,目前的标准是RFC7540。HTTP/2的命名不是HTTP/2.0,它摒弃了小版本号,以后只有HTTP/2,HTTP/3。这是因为HTTP是互联网基础技术,版本的进化需要相对的稳定性,频繁的版本变更容易造成混乱。兼容 HTTP/1因为有大量现有资源基于HTTP/1,所以必须要兼容HTTP/1。HTTP/2在URI层面,没有引入新的scheme,还是htt
2021-04-05 22:29:26
212
1
原创 罗剑锋透视HTTP协议学习笔记---22 | 冷链周转:HTTP的缓存代理
22 | 冷链周转:HTTP的缓存代理HTTP的缓存代理就是提供缓存服务的代理服务器,由于它处于HTTP传输路径的中间,所以它兼具Cache-control在服务器,客户端2个方向的设置,同时又特有代理服务器的若干缓存配置属性。缓存是怎么来的?缓存是某次用户的直接或间接请求,存储在客户端或缓存代理服务器上的某个URI标识的资源。缓存策略按方向可以分为web服务器缓存策略,客户端缓存策略web服务器缓存策略应用到客户端和缓存服务器,是一组Cache-Control的设置,且并不会区分,即客户端,代理
2021-03-24 08:53:33
281
原创 罗剑锋透视HTTP协议学习笔记---21 | 良心中间商:HTTP的代理服务
21 | 良心中间商:HTTP的代理服务代理服务典型的HTTP模型是一发一收,只有2个角色参与,即客户端和服务端。但HTTP真实应用场景,往往在二者之间的传输链路上引入代理服务器。代理服务器在HTTP通讯中扮演双重角色,从客户端看来,它是服务器,从服务器看来它是客户端。代理服务器可以有多个,形成有序的数据传输链条,对任意2个临近的节点,它们仍然遵循HTTP一发一收的工作模式。代理服务器不产生数据,但会对数据进行加工,分发,缓存。client — proxy server — origin serve
2021-03-22 11:47:58
273
1
原创 罗剑锋透视HTTP协议学习笔记---20 | 生鲜速递:HTTP的缓存控制
20 | 生鲜速递:HTTP的缓存控制缓存是计算机系统中加快访问速度的常用手段,基于HTTP的工作模型,缓存既可以保存在客户端,也可以保存在服务器端,本节讲的是缓存保存在客户端。缓存保存的是请求资源的副本,网络上的请求资源可能会动态更新,一段时间前取得的资源,可能已经变更,如何在效率和可用性间达成平衡是一个问题。HTTP采取的策略是区分资源,频繁更新的数据,动态生成的数据,不缓存。另外,为可缓存资源做有效期标记,根据资源更新的频率,设定不同长度的缓存有效期。缓存有效期只是个估计值,资源是否过期,不
2021-03-21 17:30:28
285
原创 罗剑锋透视HTTP协议学习笔记---19 | 让我知道你是谁:HTTP的Cookie机制
19 | 让我知道你是谁:HTTP的Cookie机制Cookie【RFC6265】是服务器委托浏览器存储在浏览器本地的数据,其目的是维护HTTP会话的状态信息工作流程:服务器端响应报文用Set-cookie: key=value + 若干参数设置cookie客户端请求消息中带上相关cookie,标识客户端注: Cookie不是HTTP标准,它的分隔符是";“而不是”,"max-age: date+t1+t2, 消息接收时间+t2,优先级高于expires注: date是消息生成时刻,t1是
2021-03-20 12:00:01
263
PY301-SunSign.csv
2020-03-02
Python等级考试一道关于血压的综合题解析_数据文件xueyajilu.txt
2020-01-17
Python文件处理练习8---神雕侠侣
2019-12-06
python文件处理练习12
2019-11-26
python文件处理练习14--10个csv文件.zip
2019-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人