ARTS-week03

Algorithms

本周leetcode Longest Substring Without Repeating Characters

思路: 从左往右开始,保持变量i和j来维持一个新的子串,j不断移动,每加入一个新的字符,判断是否有重复的,如果有重复的,移动i,生成新的子串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char,int> searchmap;
unordered_map<char,int>::iterator search;
int len = 0, i = -1;
for(int j=0; j < s.length(); j++)
{
search = searchmap.find(s.at(j));
if(search != searchmap.end())
i = std::max(search->second, i);
searchmap[s.at(j)] = j;
len = std::max(len, (j-i));
}
return len;
}
};

Review

本周阅读英文文章:The WannaCry virus was just the beginning

Zero-Day Exploits:”零日”指的是开发人员有“零日”来解决刚刚暴露的问题,可能已经被黑客利用。漏洞公开后,供应商必须快速解决问题以保护其用户。但是如果软件供应商未能及时发布补丁并且黑客设法利用安全漏洞,则可能发生所谓的零日攻击。

能够降低安全风险的操作:
1)保持软件与安全补丁最新
2)提高个人的安全意识
3)对操作系统和安全软件进行设置

物联网设备将加剧威胁,每个支持WIFI的设备都可能被黑客入侵,被劫持,并被用到执行大规模DDoS网络攻击中。由此想到在工控领域的安全防御也应该重视起来。越来越多的移动设备,随处可见的无线网络,带来的隐私等问题,构建安全的网络环境是重要的。

Technique

这周将代码升级至Python3,加入了Function Annotations,可以看一下官方文档中的例子再阅读一下PEP3107PEP484

1
2
3
4
5
6
7
8
9
>>> def f(ham: str, eggs: str = 'eggs') -> str:
... print("Annotations:", f.__annotations__)
... print("Arguments:", ham, eggs)
... return ham + ' and ' + eggs
...
>>> f('spam')
Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
Arguments: spam eggs
'spam and eggs'

这样Python代码更容易进行静态分析和重构,进行类型检查。

Share

本周想分享的是《HTTP权威指南》一书,日常工作中经常要抓包分析,但之前并未系统的学习过HTTP相关的知识。目前阅读到第五章,学习到一些自己以前不知道的知识点,对网页的运作方式有了更深刻的认识。

关于Connection首部

HTTP 允许在客户端和最终的源端服务器之间存在一串HTTP中间实体(代理、高速缓存等)。可以从客户端开始,逐跳地将HTTP报文经过这些中间设备,转发到源端服务器上去(或者进行反向传输)。

在某些情况下,两个相邻的HTTP应用程序会为它们共享的连接应用一组选项。HTTP的 Connection首部字段中有一个由逗号分隔的连接标签列表,这些标签为此连接指定了一些不会传播到其他连接中去的选项。比如,可以用 Connection:close 来说明发送完下一条报文之后必须关闭的连接。

Connection首部可以承载3种不同类型的标签:
1)HTTP 首部字段名,列出了只与此连接有关的首部;
2)任意标签值,用于描述此连接的非标准选项;
3)值close,说明操作完成之后需关闭这条持久连接。

如果连接标签中包含了一个HTTP首部字段的名称,那么这个首部字段就包含了与一些连接有关的信息,不能将其转发出去。在将报文转发出去之前,必须删除 Connection 首部列出的所有首部字段。由于Connection首部可以防止无意中对本地首部的转发,因此将逐跳首部名放入Connection首部被称为“对首部的保护”。

0%