DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

原文链接

  1. 让每个程序都做好一件事。要做一件新的工作,写一个新程序,而不是通过添加“功能”让老程序复杂化。
  2. 期待每个程序的输出成为另一个程序的输入。不要将无关信息混入输出。避免使用严格的列数据或二进制输入格式。不要坚持交互式输入。
  3. 设计和构建软件,甚至是操作系统,要尽早尝试,最好在几周内完成。不要犹豫,扔掉笨拙的部分,重建它们。
  4. 优先使用工具来减轻编程任务,即使必须曲线救国编写工具,且在用完后很可能要扔掉大部分。

原文链接

首先经过token进行切词,然后通过ast node来进行组织

可以发现,ast parser 的时候,预先构造好状态空间,比如 select 的状态空间:

  1. expression list
  2. from tables
  3. where
  4. group by
  5. with …
  6. order by
  7. limit

在一个状态空间內,还可以根据 parse 返回的 bool 判断是否继续进入子状态空间,一直递归解析出整个 ast。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
bool ParserSelectQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
{
auto select_query = std::make_shared<ASTSelectQuery>();
node = select_query;

ParserKeyword s_select("SELECT");
ParserKeyword s_distinct("DISTINCT");
ParserKeyword s_from("FROM");
ParserKeyword s_prewhere("PREWHERE");
ParserKeyword s_where("WHERE");
ParserKeyword s_group_by("GROUP BY");
ParserKeyword s_with("WITH");
ParserKeyword s_totals("TOTALS");
ParserKeyword s_having("HAVING");
ParserKeyword s_order_by("ORDER BY");
ParserKeyword s_limit("LIMIT");
ParserKeyword s_settings("SETTINGS");
ParserKeyword s_by("BY");
ParserKeyword s_rollup("ROLLUP");
ParserKeyword s_cube("CUBE");
ParserKeyword s_top("TOP");
ParserKeyword s_with_ties("WITH TIES");
ParserKeyword s_offset("OFFSET");

ParserNotEmptyExpressionList exp_list(false);
ParserNotEmptyExpressionList exp_list_for_with_clause(false);
ParserNotEmptyExpressionList exp_list_for_select_clause(true);
...
}

原文链接

The attack is believed to be a key component of China’s Great Firewall, used by the Chinese government to censor the internet inside China.

the GFW may sometimes also want to allow a connection to be made, but to then kill it halfway through.

against long-lived connections

针对IPSec,针对ip级别的auth

虽然有TLS,但是基于tcp的协议,依然无效

Reconstructing segments into a stream requires care, because the internet is not reliable.重新组织tcp包

A successful TCP reset attack therefore requires a believable sequence number.

原理还是插入一个包,导致整个链路失效

udp协议intro1

UDP的连接是单向的,在调用connect的时候并不会产生任何通信流量,它只是在内核协议栈中绑定了一对五元组而已,该五元组是:UDP协议/源IP/源端口/目的IP/目的端口

UDP-端口复用的IP协议

UDP双方每次以512字节定长包通信

多点通讯

原文链接

There are only two hard things in Computer Science: Cache validation and naming things

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"command":"update",
"table":"test_db.test_tab",
"timestamp":1347876077,
"fieldnum":3,
"newrow":{
"0":"30020",
"1":"username1",
"2":"0"
},
"oldrow":{
"0":"30020",
"1":"username2",
"2":"16"
}
}

采用zk作为元数据的存储

mysql binlog ->gds -> GDS Kafka -> Consumer-> kafka queue -> Executor -> other db/redis

每个库一个队列

controller + zookeeper来管理,前者用来调度,后者用来存储元数据信息

利用goroutine来进行并发,同时,根据key来分发,也有一定顺序性