从 HashMap 关联到的
上周说面试复盘整理了一部分,这周继续。blog 里 Java 相关的文档以前记得有些零散,重新整理一下。
HashMap 关联的东西其实挺多的…
先是解决哈希冲突主要的两条路:开链法和开放地址法。链表长到一定程度会转成红黑树,于是又去看了红黑树。哈希值怎么来的又牵出随机数——xorshift、LCG。再往下是 CPU 层面的事:加法/乘法/除法消耗的时钟周期不一样,缓存的空间局部性会直接影响这类数据结构的实际性能。横向看,Python 的 dict、Go 的 map 用的 Swiss Table,思路各不相同。
Swiss Table 这条又牵出 SIMD,还挺有意思的。1997 年的 Pentium MMX 就带了 MMX 指令集,不过只能做整数;AMD 1998 年 K6-2 上的 3DNow! 把单精度浮点加了进来;到 1999 年 Pentium III 的 SSE,才有了独立的 128 位寄存器。早年这套指令主要是拿来做多媒体和图形的。
而 Swiss Table 用 SIMD 一次比对一组控制字节来定位槽位,Go 的 map 后来换成了这个结构——中间隔了二十多年。一个 90 年代末为了跑多媒体加进来的特性,现在被用来加速哈希表的查找。
JVM 这边也一并整理了:HotSpot 的 GC 和 JIT。中间还跑偏去看了下 Linux 的进程调度。
starlabrys:把公司的壳先搭起来
和朋友聊天,有人找到了工作但不太理想,有人还在面试。我之前注册了营业执照,就在想我们是不是可以一起做点什么。
有人建议建一个 GitHub organization,这样想贡献代码的人可以加进来。公司暂时没业务,但有件事是现在就能做的——把官网建起来。
于是注册了域名 starlabrys.com,建了 GitHub org,把仓库和权限用 OpenTofu 管起来,后来又把这部分 IaC 从我自己的配置仓库拆出去,单独放进了 starlabrys-infra。
官网用 Next.js 搭的,多语言、几个基本页面。我自己做了一版,但感觉不够美观。后来邀请了 ew8 加入 org,他提了一版页面设计,我把设计合并到主线的 Next.js 技术栈上,官网就这么上线了。感谢 ew8 贡献的设计方案。上线之后我又接了 Umami 做访问统计。
我在想是不是可以这样:如果有人愿意加入,我们可以把简历合并一下、脱敏,这些做过的项目大概可以当作公司的过往案例,然后带着这些案例看看能不能接到新项目。公司有个官网,应该也能增加一些潜在客户的信任度。
enx 支持 Claude 的博客
enx 这边给 Chrome 扩展加了对 Claude 博客页面的支持,调整了正文节点的识别和单词处理逻辑。另外之前那版 Java API 也合并进主线了,后面又修了扩展登录和登出的问题。
小红书和墨问
开始让 openclaw 帮我维护小红书和墨问,把周记发到这两个平台上。
之所以交给它,是因为维护小红书要用一个 Chrome 扩展,而我不太想在开发用的机器上装太多 MCP。干脆把这两个平台的 agent skill 和 MCP 都放到 openclaw 那边,顺带还能优化一下——一条指令就把某个 blog 文档发到小红书和墨问。安装了好几个月的 openclaw 总算派上用场了。
结果有点意外:墨问上的浏览量比小红书还多,而且还收到了一条用户评论。
感冒终于轮到我
上周写过,女儿先感冒,然后传给了老婆,当时我还没什么症状。
这周轮到我了。周六全天带娃,从下午到晚上嗓子越来越难受,讲话开始吃力,可能还有点低烧——当时人在外面,没有体温计。周日嗓子还是不太行,讲话很费劲。老婆带娃去游泳,给我放了一天假。
一家人一个接一个,这轮总算绕完了。