国内 rust 开发工程师好像很难找工作?
感觉各大厂里招研发方向 ,招 Java 的是最多的, C/C++ (做 游戏 unity相关 )其次 , nodeJs 再次 ...
我们组现在做公司的 Embedding 服务,要对业务的 Markdown 的数据进行额外清洗,清除掉 URL 等额外格式,变成更纯粹的文本。
同事提了一个 AI 用正则实现的方案。
我???阁下是不是不知道,有一个 Java 库叫做 commonmark-java。
显示更多
你知道 Linux 内核有一个 1997 年就引入的特性,让 Apple Silicon Mac 能高效运行 x86 容器吗?
它叫 binfmt_misc,Linux 2.1.43 引入,距今快 30 年了。
原理极其简单: Linux 内核在执行一个二进制文件时,会先读取文件头的 magic number。如果你提前在 /proc/sys/fs/binfmt_misc/ 注册了一条规则 —— "遇到这种 magic 的文件,交给某个解释器处理" ——
内核就会自动把执行权转交给那个解释器。和 #!/bin/bash 的 shebang 机制本质一样,只是匹配的是二进制文件头。
最早它是用来让 Linux 直接 "运行" Java class 文件和 Windows PE 可执行文件的。后来 QEMU 利用这个机制实现了用户态跨架构模拟 —— 在 ARM 的 Linux 上直接执行 x86 ELF,内核自动调用 qemu-x86_64
翻译。
然后 Apple 来了。在 Apple Silicon Mac 上用 Colima / Lima 启动一个 Linux VM(使用 macOS 的 Virtualization.framework),打开 rosetta: true 后,会发生这些事:
1. macOS 通过 virtio-fs 把 Rosetta 翻译器二进制挂载进 Linux VM 的 /mnt/lima-rosetta/rosetta
2. VM 内部用标准的 binfmt_misc 注册一条规则:遇到 x86_64 ELF magic (7f454c46...02003e00),交给 /mnt/lima-rosetta/rosetta 处理
3. 从此,VM 里任何 x86_64 二进制的执行都会被内核自动转交给 Rosetta 翻译
对容器来说完全透明 —— docker run --platform linux/amd64 nginx,Docker 拉下来的是 x86 镜像,容器里的进程是 x86 ELF,Linux 内核通过 binfmt_misc 自动调用 Rosetta
翻译执行。容器自己完全不知道发生了什么。
性能对比:
- Rosetta 方案:接近原生 70-90% 的性能(JIT 翻译,指令级优化)
- QEMU 全虚拟化方案:仅约 10-30%(完整模拟 x86 CPU)
一个 1997 年为了跑 Java class 文件设计的内核特性,在 2024 年成了 Apple Silicon 跑 x86 容器的关键基础设施。有时候最持久的架构决策,就是那些足够简单、足够通用的抽象。
$ colima ssh
$ cat /proc/sys/fs/binfmt_misc/rosetta
enabled
interpreter /mnt/lima-rosetta/rosetta
flags: OCF
magic 7f454c4602010100000000000000000002003e00
显示更多
芒格说:每天睡觉前,努力让自己比那天早上起床时更聪明一点点。
段永平说:找到对的事情,然后坚持做。
巴菲特讲:人生就像滚雪球。重要的是发现很湿的雪和一条很长的坡。
这些大佬,讲的内容本质,其实都是复利。不只是金钱可以复利,思想也可以复利,影响力也可以复利,健康身体也可以复利。
让奶子哥戒烟,每天阅读6小时+学习2小时英文,每天坚持健身跑步,真的不是励志和自律。(2022年奶子哥推特写过,自己从183斤减肥到133斤,以及每天早九晚六去上课学习java)。
因为自律和励志需要每天消耗能量,但是习惯不需要消耗能量,一个好的行为方式,一旦养成习惯,是不需要说我很克制,我自律,我很励志。(可以把抽烟当成一个习惯,不抽烟也是一种习惯,仅仅是一个习惯。)
自律本质是反人性的,习惯本质是顺人性的。
习惯就是复利,复利就是习惯。
好的习惯让你复利(1.01的365次方为37.38),坏的习惯也让你复利(0.99的365次方为0.025)。
上士闻道 勤而行之 中士闻道 若存若亡 下士闻道 大笑之。不笑不足以为道。
说到底,每个人都有自己梦想的中的生活方式。奶子哥梦想的生活方式,就是每天读8小时书,跟爱的人全球旅居生活,成为伟大的投资者,给社会做贡献。
有些人赚钱目的就是为了去ktv喝酒,奶子哥赚钱是为了别人不敢对我进行服从性测试让我去ktv喝酒。喝酒对喜欢酒精的人讲,是一种幸福,对奶子哥这种酒精过敏的人是一种肉体上巨大的折磨。
为自由。
显示更多
最近公司 领导 和我聊起面 向对象(OOP)和设计模式。并说想要在公司中推广设计模式。但是我表示了 反对。
我想聊聊我为什么不喜欢设计模式,以及我信奉的软件 “设计模式”。
说实在的,我其实没看过 GoF 那本设计模式的书。以后也大概不会去读。但是设计模式的大名还是有听过
我之前在 Vue 团队写 Vapor 模式时。发现 Vue 的响应式系统确实使用了 OOP,但主要是出于性能上的考虑。当优化达到一定层级之后,哪怕是引擎层面的微小实现差异也会影响性能。所以我们选择 OOP,是因为它带来的优化便利,并不是因为我们想要套用某种具体的设计模式。
* Vue 的源代码中 ReactiveEffect、Dep、ComputedRefImpl 这些类的存在,是因为 V8 的 hidden class / inline cache 对固定形状的对象优化更好。
(如果理解有误,欢迎指出)
我在入行的初期学过 OOP,大约是 8 年前的事了,已经很久了。但是过去这几年,我逐渐觉得设计模式并不太适合 Vue 3 + TypeScript 的开发。如果不是为了性能优化,我现在也很少使用面向对象。我会这样看,一部分原因是受到了像 Anthony Fu (antfu) 这些人的影响。
* GoF 是 1994 年的 C++/Java 世界的产物。如今语言进化了,很多模式从"需要刻意设计"退化成了"语言原生特性"。 这就是为什么 antfu、Evan、Anthony Fu 那一派人不太谈 GoF。不是反对它,而是它已经融进语言里了,再单独命名反而显得笨重。
“ 模式之所以叫模式,是因为语言没原生支持它,你得手动重复实现。”
去年我读了一本关于如何更好的编程的书,我很快就爱上了它。我试着推荐给我的推友们,结果发现推友中已经有不少人读过了。而且也很喜欢!
这本书是《软件设计的哲学》(A Philosophy of Software Design)
我特别喜欢书中对复杂度的阐释方式,现在仍会时常翻阅。
我的 CLAUDE.md 提示词里也用了这本书的概念:
- 深模块(Design Deep Modules)
- 消除错误(Define Errors Out of Existence)
- 向下沉淀复杂性(Pull Complexity Downwards)
- 不同层不同抽象(Different Layer, Different Abstraction)
这边篇幅有限,就不展开这几个概念了。如果感兴趣的话,我可以之后仔细写写我自己的理解。
让我疑惑的问题:
设计模式如今还被使用,似乎更多是一种沟通时的共同语言。但是我们是否真的按照它的模式来设计代码架构呢?
它作为大家交流的语言和思想的工具如今是否还是合适的选择。是否落后,又是否有着与时俱进的新选择呢?
* 写了好多,以上都是我自己的主观想法,可以随便聊 🤗
显示更多
关于AI时代的职业发展,吴恩达和Lawrence在斯坦福的AI时代职业发展讲座内容很详实,分享下我的收获。
1️⃣ AI能力在加速
有一项研究让吴恩达反复引用:AI能完成的任务复杂度,每7个月翻一倍。
衡量复杂度的方式是:这个任务让一个人做需要多久?
几年前 GPT-2 能完成的任务,换成人类来做也只需要几秒钟,但现在已经进化到AI能够完成需要人类几十分钟甚至几小时的工作。
AI编程方向的翻倍周期更短,大概70天。
但有意思的是,很多人对这个加速的感知是被扭曲的。
原因很简单,评估 AI 能力的 benchmark,满分是100%,你做到90%之后再进步10个点,数值的绝对值变化看起来很小。
于是去年有段时间整个互联网在讨论 AI 是不是在走下坡路,这是因为用一把只能量到100的尺子去量一个还在生长的东西,当然会产生这种幻觉。
真正能衡量 AI 是否变的更智能的指标,不是在 benchmark 测试上的分数,而是 AI 能够处理的任务的复杂度这条曲线,目前看,还在往上走。
2️⃣ PM 和工程师的比例在变
当 Build is Cheap,瓶颈就转移到了决策。
传统硅谷的工程师和 PM 比例大概在4:1到8:1。一个 PM 负责写需求、定方向,四到八个工程师负责执行。
这个比例背后的假设是:执行很贵,写代码很贵,所以你需要大量人手把一个清晰的 spec 变成可运行的代码。
但现在这个假设已经失效了,编码成本在快速下降,但产品决策的成本没有同等下降。于是工程师和 PM 的比例开始向1:1靠近,甚至有团队开始践行这个配比。
更进一步,吴恩达说他现在最欣赏的那批工程师,是能写代码也能跟用户聊的人。
这两件事以前被认为是不同人来做,现在越来越多地被要求长在同一个人身上。
他自己说:在生涯早期,他曾经试图说服一批工程师多做产品工作,结果把一些真正优秀的工程师弄得很沮丧,因为他们不擅长做 PM 工作;他说那是他做过的错误决策之一,后悔了很多年。
然后他说,他觉得自己现在正在重蹈同样的错误。
这句话有点绕,但我觉得他说的是真话:不是所有工程师都应该变成 PM,但如果你恰好能做这件事,你现在的优势会比任何时候都大。
3️⃣ 团队 > 公司
这部分我觉得是整场讲座信息密度最高的地方,也启发了我的机会选择思路。
他讲了一个案例:有个斯坦福的学生,被一家很热门的 AI 公司录用,但对方拒绝事先告知他会加入哪个团队,说有什么 rotation 机制,入职之后再分配。这个学生因为公司品牌够大,就签了 offer,结果被分配去做 Java 后端支付系统。做了一年之后觉得无聊,离职了。
然后吴恩达说,他在 CS230 课上分享过这个案例之后,另一个学生在几年后去了同一家公司,遇到了一模一样的情况。不是 Java 后端,是另一个跟 AI 八竿子打不着的方向。
如果一家公司入职前不告诉你会在哪个团队,这件事本身就是信息。
logo 不大但团队很强的地方,往往比 logo 大但团队一般的地方学得更快。你不是从走进大门那一刻的兴奋感里学东西的,你是从每天打交道的人身上学东西的。
在这个时代,能去到一个足够强的AI Native的小公司,一定比进入大厂的某个传统业务团队更好、成长更快,团队 > 公司。
4️⃣ AI时代的三个能力支柱
接下来换成 Lawrence Moroni 做分享,他是互联网科技的数十年老兵,呆过Google、Microsoft、Meta等公司,他接着讲了他看到当前 AI 人才身上的三个最重要的能力。
1.深度理解:不只是会调 API,而是要真的能读懂论文、理解模型架构、知道什么是信号什么是噪音。这个护城河现在比任何时候都值钱,因为现在社交媒体通过 AI 生成内容、制造噪音的成本降到了零。
2.业务聚焦:你能不能把技术能力翻译成商业价值。他讲了一个案例:一家欧洲公司来找他说想做 Agent,他直接问的第一个问题是为什么,不是要做什么 Agent。剥洋葱剥到最后,CEO 想要的其实是让销售团队更有效率。这个目标里从头到尾都没出现 AI 这个词。从这个真实需求出发,才能做出真正有用的东西,而不是一堆漂亮的演示。
3.Bias toward delivery:这个是他说的,想法很便宜,执行才是一切。他见过很多人带着半生不熟的想法进面试,也见过很多人带着不完整但落地得很扎实的方案进面试,通常都是后者能拿到结果。
5️⃣ 深刻理解技术债
每一行你使用AI生成的代码都是债。
Bug、文档、维护、新需求,这些都是你在还债。问题不在于要不要用 AI 生成代码,而在于你生成的每一行代码是好债还是坏债。
把 technical debt 当成财务债务来理解:买房贷款是好债,冲动刷信用卡买鞋是坏债。
判断标准就三条:你的目标清不清楚?有没有真正的业务价值被交付?别人能不能看懂这段代码?
他说他在硅谷见过太多人把 vibe 出来的代码直接 check in 进仓库,然后没人知道那堆代码在干什么,原作者后来找到了更好的工作,离开了,那些代码就留在那里成了一块永久的技术债。
最后:一些职业建议
Lawrence 说,他预测未来五年 AI 会发生分叉:一边是越来越大的 frontier model,另一边是越来越小、可以自部署的 open weight model。
他的判断是,大模型这边的泡沫会先破,小模型这边的泡沫会晚一些。
好的工程师应该同时押注两边,而不是把所有技能集中在一个方向上;会训练、微调模型的人才很重要,未来会有越来越多企业自部署小型模型。
相比于做一个领域的专家,更推荐做多个领域的复合人才。
显示更多
求职系列(1):如何准备一份让面试官想面你的简历
最近又到了春招和暑期实习招聘季,有不少同学找我咨询简历和面试的问题。
先说说我的背景:在职大厂工程师,从实习、校招到社招,累计面试超过上百场。给几十位同学做过模拟面试和求职辅导,现在在牛客上还能搜到我的号(安妮的心动录),校招时拿下了多个大厂的 offer,最近在看新机会,社招通过面试率也超过 90%。
这些数字不是用来装的,是用来告诉你:接下来说的东西,全都是亲身总结出来的真本事,放在别人那里是可以拿去卖课的。
同样的话我重复说了太多遍,决定把整套求职心得整理出来开源,帮到更多的人。
这是求职系列的第一篇,聊聊简历。
简历的本质
很多人把简历当成个人信息登记表来写。教育经历、工作经历、技能列表,从上到下老老实实填一遍。
但你想想,面试官看一份简历平均花多少时间?绝对不到10秒。
10秒,他要决定你值不值得花一个小时聊。
所以你的简历不是一份档案,它是一份销售文案。 它唯一的目的就是在10秒内让面试官得出一个结论:这个人好像很厉害,我想面面。
所有的技巧都围绕这一个目标展开。
1️⃣ 只能有一页
不管你有多少年经验,不管你做过多少项目,简历只能有一页。超过一页的简历,面试官大概率不会翻到第二页。
一页纸的限制会逼你做一件极其重要的事:筛选。你不得不砍掉那些可有可无的内容,只留下最能证明你价值的部分。这个筛选过程本身,就已经在帮你梳理自己的核心竞争力了。
如果你觉得一页放不下,说明你还没想清楚自己最值钱的东西是什么。
2️⃣ 一行一句话,一句话一行
这是排版层面最重要的原则。
每一个点尽量只写一句话,并且尽量这句话不换行,在一行内说完。
面试官扫简历是跳着看的,如果一个要点写了三行,他大概率只看第一行的前半段就跳过了。
一行一句话还有一个好处:强迫你精简表达。 如果一句话说不完,说明你要么没提炼出重点,要么塞了太多细节。
3️⃣ 最亮的点放在最前面
大部分人写简历按时间倒序:最近的工作排第一,然后依次往前。
这在大多数情况下没问题。但如果你有一个特别亮眼的经历,哪怕它发生在三年前,打破时间顺序,把它放到最前面。
面试官的注意力在前5秒最集中。前5秒他看到了什么,决定了后面5秒他是继续看还是扔掉。你最强的武器必须第一时间亮出来。
比如你大二做过一个开源项目拿了几百个 star,但后来的实习经历平平。那就把那个开源项目提到工作经历前面。
规则是死的,说服力是活的。在必要的时候,请你主动站出来,让我看到你的优秀。
4️⃣ 量化一切,遵循 STAR 法则
每段经历都用 STAR 来组织:
-Situation:什么背景
-Task:你负责什么
-Action:你做了什么
-Result:结果如何,用数字说话
举个例子
-坏的写法:负责服务端性能优化,提升了系统性能。
-好的写法:主导核心接口性能优化,P99 延迟从 800ms 降至 120ms,QPS 提升 5 倍,直接支撑了 10 万级并发。
同样一件事,第二种写法的信息密度和说服力碾压第一种。没有数字的作为论据,在面试官眼里就是空气。
每段经历的 bullet point 控制在 1-5 个,最多不超过 5 个。太多了面试官不会看,太少了显得没做什么事。
5️⃣ 不要堆技能列表
很多人简历上专门有一栏 Skill Set,列了一排技术名词:Java、Python、MySQL、Redis、Kafka、Docker、Kubernetes……
大部分面试官看到这种列表的反应是:所以呢?
列了20个技术名词,我不知道你哪个精通哪个只是了解,不知道你在实际项目中怎么用的,不知道你解决了什么问题。这就是一堆没有上下文的关键词,毫无说服力。
更好的做法是让项目经历来证明你的技能。你写了一个高并发系统用了 Redis 做缓存、Kafka 做异步解耦,面试官自然知道你会这些。而且他知道你不是停留在知道的层面,你是真正用过、解决过问题的。
技能列表可以保留,但只作为补充,不要指望它帮你加分。
因为同一个岗位大部分候选人的skill list都是高度趋同的,所以很难通过skill list脱颖而出,它更多的作用是过机筛,以及充当一个背景板(校招、实习除外)。
6️⃣ 不要写空话,要有论据
简历里最常见的废话:
-自驱力强
-学习能力强
-团队协作好
-责任心强
面试官每天看几十份简历,每一份都写着这些。你写了和没写一样。
空洞的形容词没有任何信息量。
加上论据:
-自驱力强,半年减重 50 斤。
-自驱力强,非科班出身自学编程拿到大厂 offer。
-自驱力强,工作之余坚持技术博客输出,累计阅读量 10W+。
一个具体的事实胜过一百个形容词。
7️⃣ 埋钩子
简历上不要把一件事说得太详细。要留白,让面试官好奇。
比如你写:主导 XX 平台架构设计,上线一周用户数突破 1000+。
面试官看到这行,自然会想:怎么做到的?架构怎么设计的?遇到了什么挑战?
这个好奇心会驱动他在面试时主动问你这个问题。而这个问题,恰恰是你最擅长回答的,因为你做过。
好的简历是一个钩子矩阵。 每一行都在埋一个问题,每个问题你都有准备好的深度回答。你在用简历引导面试官走你的剧本。
8️⃣ 实事求是
这一条听起来很基本,但很多人做不到。
有些人为了让简历好看,把别人做的事写成自己做的,把参与写成主导,把了解写成精通。
短期内可能骗过简历筛选,但面试官一问就穿帮。你说你主导了一个系统的架构设计,面试官问你为什么选 A 方案而不是 B 方案,你答不上来,当场社死,面试通过率骤降。
实事求是不是软弱,是自信。
做得好的地方大方展示,做得不够好的地方也坦然面对。面试官更看重的是你的思考过程和成长潜力,而不是你是不是每件事都做到了完美。
一个项目的 well done 和 bad done 都说出来,反而体现你有复盘意识和自我认知。
9️⃣个人总结怎么写
个人总结很重要!很重要!很重要!并且推荐写!推荐写!推荐写!
很多简历的自我评价写得像小学生作文:热爱技术、积极向上、吃苦耐劳,这种话跟没写一样。
个人总结只写三句话:
第一句:你在行业或专业上取得的结果。比如大厂 T7 工程师,开源项目 500+ star,某个方向的技术专家。用事实建立第一印象。
第二句:你是一个什么样的人,带论据。比如坚持每天阅读一小时,累计阅读时长 500 小时以上。比如投资年化收益 30%+,具备独立的判断力和风险管理能力。
第三句:你未来想成为什么样的人。这句表达你的方向感和成长诉求。比如希望在 AI Agent 方向深耕,成为该领域的核心开发者。
三句话,过去、现在、未来。面试官 10 秒扫完就能对你形成一个清晰的画像。
最后
把你的简历拿出来,对照上面的每一条检查一遍。
-超过一页了吗?砍。
-有没有量化?没有数字的经历,删掉或者补上数字。
-有没有空话?每一句自我评价都问自己:我有论据吗?
-最亮的点在哪?它是不是在简历的第一屏?
简历不是写给自己看的。它是你递给面试官的一张名片,只有 10 秒的生命。
在这 10 秒内,让他觉得你值得花 60 分钟来聊。这就够了。
显示更多