ARTS 0815: 分隔链表、大删除是加活不是减负与协议栈如何一层层拆信封

每周完成一个 ARTS: 至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tips、Share 简称 ARTS)

Algorithm

中等难度,题目 https://leetcode.cn/problems/partition-list/description/?envType=study-plan-v2&envId=selected-coding-interview

image-20260816173848428

有几点需要注意:

1)双指针的 small、large因为会一直向后走,最后拼接答案的时候需要第一个节点

2)第一个节点就 0 所以需要第一个节点的后面一个,也就是 begin.next 和 later.next

3)Java 是引用传递,如果把 head 用 tmp 接收,之后 tmp.next = 0 页就让 head 的内容直接消失

4)因为 small 和 large 最后面会出现长度更长的情况,所以需要最终结束循环吧 next 都设置为 null

▼
java
复制代码
class Solution { public ListNode partition(ListNode head, int x) { // 两个 piont 一个 res,最后 res 拼接两个 point ListNode small = new ListNode(); ListNode large = new ListNode(); ListNode begin = small; ListNode later = large; while (head != null) { if (x <= head.val) { large.next = head; large = large.next; } else if (x > head.val) { small.next = head; small = small.next; } head = head.next; } small.next = null; large.next = null; small.next = later.next; return begin.next; } }

Review

文章是这一篇:https://planetscale.com/blog/the-only-scalable-delete

原文讲 Postgres:大 DELETE 是加活不是减负。MySQL 结论一样,机制不同,InnoDB 的 DELETE 要注意这几件事:

删了不等于没了。InnoDB 只是打删除标记,旧版本在 undo 里,后台 purge 确认没有事务还要这个快照,才物理删行和二级索引。一次清几百万行会狂写 redo、undo、binlog,复制延迟容易飙升;长事务拖着旧 read view 时 purge 走不动,history list / undo 膨胀,别的一致性读还要顺着版本链回溯。删完页里的空洞只能给这张表后续插入用,.ibd 通常不缩小,想把磁盘还给操作系统得 OPTIMIZE TABLE 重建。

TRUNCATE (删除表的全部数据,但是表结构还在)是 DDL,隐式提交,事务里回滚不了,别先清空再插回。如果要删除的很多就通过建新表,而不是删除旧表的方式。要留的远多于要删的,就小批量 DELETE,让 purge 跟得上。日常过期数据按日期分区,到期 DROP PARTITION,别夜夜百万行 DELETE。外键 CASCADE 也可能把删一行变成一次巨型删除。

而且一般商业系统也不会删除用户的数据,普遍采取的做法是逻辑删除。

Tips

1、搜索资料可以尝试使用 pi + pi-autoresearch

▼
bash
复制代码
pi install npm:pi-autoresearch

2、cmd 脚本如果写中文的话,使用 GBK 编码(可以写一个 skill 专门用来写)

3、在 Vide Coding 的时候,如果有一些硬性条件比如:一个类不能超过 600 行、一个方法不能超过 40 行等,可以用 Hook 在编辑之后直接跑一个 bash 脚本,进行校验。这样虽然不会改变不合格的现实,但是会提醒 AI 你这里出问题了,记得修改!

4、agtens.md 最好做成「地图」而不是什么内容都写进去

5、为了方便 AI 读取代码,可以写一个 py 脚本,当作仓库的导览图,减少不必要的 tool call

6、如果有明确修改的类,直接 @xxx 不要再让 AI 浪费 token 使用工具去找相关的代码

Share

读《TCP/IP 详解》大概 5 页左右

一)

1、OSI 每一层数据叫 PDU (协议数据单元),当在网络层的 PDU 叫 IP 数据包

2、当第 N 层的 PDU 传输给 N - 1 层的时候,他会自动添加上标识信息,彼此之间不需要沟通。并且 N - 1 层承诺不查看 N 层的 PDU 信息。

image-20260816001925587

3、分层还有一个好处就是,不是所有的网络设备都需要实现完整的层,比如路由器、交换机、主机实现的层是不同的。理想情况下交换机只需要实现:数据链路层、物理层。

二)

1、下面演示了一台 Internet 主机分解 DPU 的大概流程:

image-20260816115902631

传入的以太网帧包含:48 位的目的地址(也叫 MAC 地址)和 16 位的以太网类型字段。这个 16 位以太网类型字段有三个:0x0800 表示 这个帧包含 IPv4 的数据报、0x0806 表示 ARP、0x68DD 表示 IPv6 的数据报。并且还会检测这个目的地址和接收到的地址是否匹配,这个帧被接收并且进行差错校验,以太网同类型字段用于处理他的网络层协议。

如果接受的帧包含 IP 数据报,以太网的头部和尾部的信息会被消除,并且将剩余的字节交给 IP 来处理,IP 会检测一些列字段如果发现目的 IP 地址和自己的 IP 地址匹配,并且数据报头部没有错误(不会检测有效荷载),那么就检测具体使用哪一个协议来解析,比如 1(ICMP)、2(IGMP)、4(IPv4)、6(IPv6)和 17(UDP) 等等。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
leikooo
作者分享
最近看了一个视频叫「被 Vibe Coding 抚平的大脑褶皱,还能救回来吗?」,聊的是 AI 时代学编程的困境,感觉说的挺好的,给鱼友们分享一下。 视频中提到现在学编程和以前最大的区别是,以前卡住了你只能自己想、查文档、翻 Stack Overflow,这个过程虽然痛苦,但你的脑子确实在转。现在有了 AI,卡住的第一反应就是打开 ChatGPT 问一句,代码瞬间就出来了,跑通了,感觉自己搞定了。但问题是,你的大脑在这个过程中几乎没有参与。视频里提到一个实验,有个学生读完题 10 秒钟就放弃思考去问 AI 了,事后还觉得是自己独立完成的。这就是 AI 带来的最大陷阱——你以为自己在学,其实只是在看AI 表演。 视频基于一项研究,总结了学编程时容易掉进去的 8 种思维陷阱。研究表明光是知道这些陷阱的存在,就能明显提升学习效果。前 5 种是编程学习中一直存在的,后 3 种是 AI 时代新出现的: 1)Forming(构建错误):你理解了问题,但用了错误的方法去解决。比如题目要你判断正数多还是负数多,你写了个求和的逻辑,方向对了路走偏了。 2)Dislodging(思维固着):你已经意识到方法不对,但就是转不过弯来换思路,反复在错误的方向上修修补补。 3)Assumption(假设偏差):你完美地解决了一个问题,但不是题目要求的那个问题。比如题目要处理任意个数字,你只处理了四个。4)Location(定位缺失):跳过了关键步骤就开始写代码,感觉快写完了,测试的时候才发现漏了循环或数据结构这种核心东西,得大改。 5)Achievement(成就幻觉):写了一大堆代码,明知道有问题但不愿意推倒重来,总想着再改改就好了,结果越改越乱。 6)Progression(进度错觉):AI 帮你写出了超出你水平的代码,作业都能交,但基础可能已经落后好几周了,自己完全不知道。这个是最危险的,等到面试或者独立写代码的时候才发现脑子里是空的。 7)Interruption(思维中断):你正在集中精力思考,AI 自动补全突然弹出来一段代码,思路直接被打断。有意思的是实验中表现好的学生大多直接忽略了 AI 的补全建议。 8)Mislead(误导跟随):信了 AI 给的一个看似合理但方向错误的建议,白白浪费时间走弯路。 大佬给出的建议是,遇到问题先别急着问 AI,给自己至少五分钟独立思考。卡住、沮丧、想摔键盘,这些不是你学不会的信号,这就是解决问题时的正常感受。AI 生成的代码跑通之后,试着关掉 AI 自己从零写一遍,能写出来才算真的会了。最重要的是分清场景,工作赶进度可以用 AI 提效,但练习和学习的时候请把「拐杖」放下,自己走。别让 AI 替你长脑子。
7
ARTS 0927: 单栈逐层展开嵌套字符串、包管理器与 Agent 沙箱本质同源与单次前向传播复刻极速决策模型
7
祝编程导航的鱼友们中秋快乐,愿代码顺利、生活如意,月圆人团圆,所愿皆可期!
13
ARTS 0913: 双栈互补实现队列、CIDR 聚合化解路由膨胀与 AI 作弊串通绝非偶然 Bug
8
微信爆出 P0 级漏洞😱,接到来电就中招,碰都不用碰手机。 怎么中招的? 黑客只需要是你的微信好友,然后给你打一个语音或视频通话,好了已经搞定了,你已经被黑了。 有多离谱? 完全不需要接这个电话。手机锁着屏扔在桌上,你看都没看一眼,只要响了几秒钟,恶意代码就已经在后台跑起来了。 黑客瞬间拿下你整个微信:翻你聊天记录、看你隐私、用你的身份给别人发消息。 更恐怖的是,你的微信紧接着会变成"丧尸",黑客可以自动给通讯录里所有好友挨个打电话,把他们也感染一遍。每个受害者又立刻变成新的传播者,像病毒一样指数级扩散...,不敢想象如果被利用了,理想情况下那需要多久就能扩散到全国的用户呢?30 分钟左右 好消息是这个 bug 微信团队已经知道了这个 bug ,坏消息这个 bug 好像不是微信团队发现的 文章来源:https://calif.io/research/weworm
7
下载 APP