Discover代码时光机
代码时光机
Claim Ownership

代码时光机

Author: 里维糖

Subscribed: 2Played: 10
Share

Description


一个有话想说的程序员。



50 Episodes
Reverse
我们对于无穷的计算有着浪漫的想象,光是科幻小说,就有阿西莫夫《最后的问题》、亚当斯《银河系漫游指南》的经典科幻梗。但是我们从世界体验中认知到的无穷、数学世界中勾勒的无穷以及计算机所能够触达的无穷有什么区别和联系呢?附关于无穷的一些小趣闻:1. 为什么 [0,1] 区间的实数无法和自然数一一对应?第一步:简化实数的表示[0,1] 里的任何实数,都能写成 “无限小数”(有限小数补无限个 0,比如 0.5=0.5000...,避免 0.4999... 和 0.5 重复)。第二步:假设 “能对应”,列一张 “全包含表格”如果 [0,1] 的实数能和自然数一一对应,意味着能把所有实数按序号排成一张无限长的表格,比如:自然数 1 → 实数 a₁ = 0.a₁₁a₁₂a₁₃a₁₄...(a₁₁是小数点后第 1 位,a₁₂是第 2 位,依此类推)自然数 2 → 实数 a₂ = 0.a₂₁a₂₂a₂₃a₂₄...自然数 3 → 实数 a₃ = 0.a₃₁a₃₂a₃₃a₃₄...自然数 n → 实数 aₙ = 0.aₙ₁aₙ₂aₙ₃...aₙₙ...表格里的 “加粗数字”,是从每个实数里取 “第 n 位”(第 1 个数取第 1 位,第 2 个数取第 2 位,...,第 n 个数取第 n 位),构成一条 “对角线”。第三步:构造一个 “不在表格里的实数”根据这条对角线,造一个新的实数 b = 0.b₁b₂b₃...,规则很简单:如果对角线第 1 位 a₁₁≠1,就设 b₁=1;如果 a₁₁=1,就设 b₁=2(只要和 a₁₁不一样就行);同理,对角线第 2 位 a₂₂≠1,就设 b₂=1;否则 b₂=2;以此类推,bₙ永远和对角线第 n 位 aₙₙ不一样。这个 b 肯定是 [0,1] 的实数(因为是 0 开头的无限小数),但它不在刚才的表格里—— 因为它的第 1 位和 a₁不同,不可能是 a₁;第 2 位和 a₂不同,不可能是 a₂;...;第 n 位和 aₙ不同,不可能是 aₙ。这说明:“能把所有 [0,1] 实数列成表格” 的假设是错的,所以 [0,1] 的实数无法和自然数一一对应。2. 为什么有理数可以和自然数建立一一对应?有理数的核心是 “能写成分数 p/q(p 是整数,q 是正整数,且 p 和 q 互质,避免重复,比如 2/2=1 就只算 1/1)”。关键是用 “分组 + 遍历” 的方式,给每个有理数编上序号:第一步:按 “分母 q” 分组把有理数按分母 q 的大小分成无限组,每组里的分数按分子 p 的大小排列(注意去重,比如 2/2=1 已在 q=1 组里):q=1 组(分母为 1):1/1(即 1)、-1/1(即 - 1)、2/1(即 2)、-2/1(即 - 2)、...q=2 组(分母为 2):1/2、-1/2、3/2(2/2=1 已去重)、-3/2、...q=3 组(分母为 3):1/3、-1/3、2/3、-2/3、4/3(3/3=1 已去重)、-4/3、......第二步:“蛇形遍历” 每组,编序号因为每组里的数是 “有限个基础项 + 无限延伸”,但可以按 “先小分母、再小分子” 的顺序,像 “走蛇形” 一样逐个编号:先取 q=1 组第 1 个:1/1(序号 1)再取 q=1 组第 2 个:-1/1(序号 2)取 q=2 组第 1 个:1/2(序号 3)取 q=2 组第 2 个:-1/2(序号 4)取 q=1 组第 3 个:2/1(序号 5)取 q=1 组第 4 个:-2/1(序号 6)取 q=3 组第 1 个:1/3(序号 7)取 q=3 组第 2 个:-1/3(序号 8)取 q=3 组第 3 个:2/3(序号 9)取 q=3 组第 4 个:-2/3(序号 10)...第三步:验证 “一一对应”每个有理数都能在某一组里找到,且会被 “蛇形遍历” 编上唯一的自然数序号;每个自然数序号,都对应一个唯一的有理数(不会重复,因为提前去重了)。
网络对于今天的我们来说似乎和空气一样司空见惯,也和空气一样受之不觉、失之难存。但网络带来的信息传播的颠覆是空前的,并不亚于计算机本身带来的颠覆,毕竟从信息还无法被抽象出来的时代开始,它就被束缚在低频率、低容量的载体中,锁死了流动性,所以才会有“烽火连三月,家书抵万金”。那么关于网络,这个和我们原始直观的世界经验并不兼容的科技产物,我们在谈论它的时候到底在谈论什么?
Nginx (engine X) 在我个人心目中可能算是最好的开源服务器,尽管掺杂个人感情,但它实际上从很大程度上代表了我们所身处的这个宏大的Web2.0时代,阐释了一个优雅的、灵活的同时又是无私的Web后端的应有之义。最近又开始做Nginx有关的工作,所以有感而发聊一聊:)附:W3Techs 统计的web server使用量(比节目中聊的数据更新...)
近来工作繁忙,想着干脆来聊聊程序员工作中的脏活累活——给线上的软件程序验尸。当然这里我聊的还是coredump和gdb的古法验尸,倒不是说那些新的debugger做得不好,而是当火急火燎的debug工作到来时,可能只有corefile和gdb才不会给人添堵……
最近看到暴雪游戏要正式对粉丝运营的知名私服“乌龟魔兽世界”发起诉讼,不由得心生感慨。在所有的游戏侵权中,“私服”是一种很独特的存在,毕竟对于联网的在线游戏来说,官方掌握着游戏服务器的绝对控制权,那为什么私服还会存在呢?于是我想聊一聊这个话题,从技术上,或者从某种更感性的层面上,聊聊为什么联网在线游戏会存在私服。
根据一句话创作图片,对于人类来说是一项专业性很强的工作,但在今天越来越多的AI模型已经可以通过计算来完成。在使用之余,你有没有想过这究竟是如何实现的?它违反直觉的地方是如此之多,例如从文字prompt到图片输出,实现了信息载体从一维到二维结构的跨越;除此之外,AI还有着和人类截然不同的创作路径,它的绘画就像把布朗运动的分子重新排布得井然有序一样,是一种违反直觉的熵减过程。前面的节目基于LLM解释了大模型的基本架构和底层原理,基于此我们继续向图片模型走去,一窥AI生图的底层秘密。
C,C++和C#看起来就像是一家子,讲完C++自然就该聊聊C#——因为它看上去就像是C++++。附:在音乐中,sharp相当于法语dièse或希腊语diesis,表示音高升高。升号符号 表示该符号对应的音符高出一个半音。
三种有些小众的编程语言,一块聊聊。附:编程语言排行榜 TIOBE for July 2025 TOP50
俗话说,没有人能精通C++。我们常见到Java程序员、Golang程序员的title,却鲜见有开发者自诩为“C++程序员”。一直以来C++似乎都站在鄙视链的顶端,OS、交易、通信、仿真或是渲染等各种高性能计算场景几乎都无法脱离C++而存在。所以C++到底意味着什么?为什么现代C++在高度复杂化的演变之路上一去不返?Vibe coding的热潮下C++会被Rust取代吗?
接着上一期,我们来聊一个更常出现在Leetcode面试题里的性质:同构性。或者说它们更常被提及的名字:深度/广度优先搜索、动态规划……
最近多次提到面试和算法题的话题,没想到我陆陆续续收到了好几封邮件,这几位听友向我大倒苦水,痛斥面试题给校招带来的痛苦。于是我想直接来聊聊这些Leetcode算法题,虽然我给不了什么秒杀的捷径,但是希望能为减轻算法题的痛苦尽一些绵薄之力 :)第一期聊聊单调性话题。
嘉宾是我的朋友阿泽,目前在美国某500强企业做全栈工程师。又是一年校招季,近年来关于校招的话题热度一直有增无减,竞争愈演愈烈之态势有目共睹。我们常以“大环境”解释这种困顿的处境,但当局者迷,我们需要一个旁观的视角来弄清楚校招的全貌。而最适合作为对照的就是处在地球另一端的美国。美国应届生们的校招又是怎样的情景呢?这非常令我好奇,所以有了这期节目。
目睹应届生秋招之激烈焦灼,有感而录制这期节目,回忆面试中Leetcode、算法题的过往以及聊聊当下的现状。列了个自测题单,有兴趣的可以看看:https://leetcode.cn/problem-list/OBMMTKks/
每一个席卷全人类的科技产品都有最后一层需要捅破的窗户纸,从PC到移动设备莫不如此。那么……AI又如何呢?
贝叶斯定理 Bayes' theorem 被誉为统计学的勾股定理,是一种用似然概率更新先验概率的工具,它深刻地参与了现代世界的构造,却往往作出有悖于我们直觉的姿态。通过几个故事,或许你可以直观地体会贝叶斯定理的魅力,并尝试用它构建一个更有力的认识论框架。1. 贝叶斯定理2. 蒙提霍尔问题:固执己见的胜率
面向准大学生们的一期节目。
最近Google如期召开了2025年的I/O大会,有人说又是一次乏善可陈的演示,有人说这是一次AI产品化的真正标杆。借此咱也来聊一聊这场科技发布会,同时聊一聊AI产品化的事。
SQL,或者读作sequel,几乎已经成为数据库的代名词。不止程序员,今天一切和数据库打交道的职业都需要SQL的帮助。我们在数据库之上构建了庞大的信息世界,SQL这样一种形式化推理系统值得我们好好聊聊它的过往和去处。
五一假期,聊点轻松话题 :)
排序算法可以说是最具有普遍性的算法,但为什么它的算法被锁死在了O(nlogn)的“光速”?从香农的视角看,排序算法几乎可以视作“软件程序”这一抽象概念的一种概括,让我们试图从信息论出发重新审视软件究竟是怎么一回事。附:nlogn是怎么来的:timeline by AI02:11 解密程序员心中的排序算法:初级知识背后的挑战与准备04:13 不比较也可以排序?了解基于区间划分的排序算法。06:16 算法的时间复杂度:了解插入排序的真相与优化方向08:23 冯诺依曼的计算机程序设计艺术:归并排序与时间复杂度的挑战10:29 冯诺依曼的思考:计算机排序算法与IBM专用排序机的对比分析12:32 霍尔的快速排序算法:超越插入排序的高效排序方法14:34 计算机科学中的速度限制:NLOG N算法的巅峰之作16:51 算法排序的奥秘:NLOG N时间复杂度的上限与信息熵的奇妙关系19:13 信息熵的解释:熵表示混乱程度,信息中的不确定性通过排序过程消除21:34 信息论视角下的排序算法:熵、概率和效率的关系24:03 编程工作中的排序算法:从信息论到实际应用的优化路径26:27 人工智能程序的效率评估:从信息熵到人类易感知的表达形式
loading
Comments