读《底层逻辑》

本文分享了对《底层逻辑》一书的阅读感悟,强调了书中关于事实与观点的区分在沟通中的重要性,以及如何透过现象看本质,运用复利思维、概率思维和系统思维解决问题。作者提出,知识应能改变行动,并通过黄金三问深入挖掘需求。书中的数学思维和系统思考方法对工作和生活有所启发,但部分读者认为内容不够系统且有重复感。

1b84b13713b3880f11f3db92ea55df15.png

《底层逻辑》本书作者是刘润,他在得到上开设了课程《5 分钟商学院》,我也是在得到上知道的这本书,这本书在豆瓣上的评分不是很高,褒贬不一,不过我看着觉得挺好。

看了一些豆瓣的评论,觉得这本书不好有这么几个原因:

  • 书中的内容很多在公众号和《5 分钟商学院》中有写过,有点像是一个内容的合集;

  • 书内容不是很系统;

  • 觉得内容很鸡汤;

对我来说,首先这本书我很容易读进去,而且我之前也没看过公众号和《5 分钟商学院》,内容对我来说是全新的。

另外本书从是非对错、如何思考、个人能力提升、与人协作等方面来进行讲述,一些知识点对我来说还挺长见识和开阔眼界的。比如:数学思维中提到的概率论、数字的方向性、博弈论等,都能跟思维、认知结合起来。

今天再次看了下豆瓣的评分,已经降到 7 分以下了。不过豆瓣的评分只是一个参考,主要的还是看书是否能读得进去,是不是对现阶段的自己有用处。

下面说说我比较有印象的一些点。

1、事实和观点

事实:独立于人判断的客观存在,比如:今天的气温是 18 度。

观点:对事物的看法。会受到你的认知、当下掌握的信息和思维模式的影响,比如:我觉得今天很热。

不止一本书中都提到了事实和观点,比如在《沟通的方法》中,作者讲到作为沟通中的讲述者,需要时刻注意自己的语言中是在讲事实,还是带有情绪。

这对日常的沟通和管理非常重要,无论是对上、平级或对下,一定要做到的是只陈述事实,陈述事实就不会有个人主观情绪因素掺杂在内,不带情绪是良好沟通的开始。

教育小孩也是如此,我对女儿说:“这种题这么简单,怎么总是做错了?”,「简单」是我的一种主观判断,而「总」也是我的一种主观印象,这样说话,女儿的情绪就会立即爆发,后面就无法正常地沟通的。这种场景以前经常发生。如果换成:“这道题的解题步骤有 3 步,我们一起来分析下”,就会好很多。

2、透过现象看本质

现象千千万,往往本质都是相同,这个相同的部分就是底层逻辑。在软件开发中有两个重要的地方需要看清本质:

  • 跟客户需求调研时,要找到客户背后的真实需求,在《有效需求分析》等书中都有详细介绍;

  • 代码出现 Bug 后不能只打个补丁解决当前的问题,而要找到根本原因。

只有找到这些本质的东西,才能算是在做正确的事情,否则看着很努力,却是在做无用功。比如产品中的 Bug,如果不找到根因,那就只能在外围打补丁,看似解决了问题,但代码会越来越混乱,总有崩溃的那一天。

这些本质的东西往往埋比较深的黑盒子里,书中将这个黑盒子比作一个系统,系统是由一些元素和之间的关系构成(软件好像也是如此),然后将系统分成了 5 个模块:变量、因果链、增强回路、调节回路和滞后效应,这几个概念看书时能够理解,但怎样用到实际中,我还没有想好,也就是说没有形成自己的知识。

3、几种思维模式

在思考问题的底层逻辑一章中,讲到复利思维、概率思维、数学思维、系统思维几种思维模型。其中数学思维让我很受启发。

我们大学都学习过微积分,但毕业就还给老师了,书中用简单的例子来解释了什么是微积分,还将其延伸到我们的日常生活,就是要用动态的眼光来看问题。

对程序员来说,能够拥抱变化,快速响应需求,得益于长期以来的代码重构、优化等,这是一个累积的过程,这就是积分;而当系统出现问题,事后复盘时,不能只看出现问题那一刻的现象和特征,而是要顺藤摸瓜,找到最小的触发点,这就是微分。

作者确实很善于总结,这种能力是值得学习的。

4、知识、技能

在《好好学习》一书中,成甲认为只有能改变你行动的才是知识,否则只是信息,刘润觉得知识是已经被发现和证明的规律,是确定的。

我更认同成甲的定义,而且我认为行动不局限在动手去做,思维方式上的转变也算是行动。有句名言:学了很多知识,知道很多道理,但依然过不好这一生。原因就是,了解到的只是信息,而不是知识。

技能是一个具体的,可操作的,通过重复训练能够学会的能力,比如:游泳、骑自行车、演讲等,这里的关键是重复训练,别人教的、书中讲的都是学习技能的步骤,而不是技能本身。

结合起来就是,通过书籍、公众号、等各种渠道获取大量信息,经过筛选、过滤、思考将其转化为自己的知识,这个过程中,需要学习很多的技能来加以支撑。

5、黄金三问

黄金三问就是对任何一项任务,要搞清楚要做什么?怎么做?为什么要做?

很多时候,我们提出的问题往往不是问题本身,而是解决问题的答案。比如:你让一个 Java 程序员看一个 .NET 项目的代码,分析一些业务逻辑,一会,他可能会问你,操作系统怎么重装?但真实的问题是怎么装系统吗?深入了解才知道是想安装 VS 来打开项目,但提示系统有些不兼容,想要升级系统。最初的任务是代码阅读,代码阅读可以用很多的工具,记事本、VS Code 都可以。

在需求调研的时候,客户给我们提的需求很多时候也不是真正的需求,而是客户自己针对问题想出的解决方案,就算我们“完美”地满足了客户提出的“方案级需求”,最终的结果也未必能让客户满意。所以需要用黄金三问去进行深挖,找到最底层、最真实的想法,才更容易达成共识。

产品经理在提需求的时候,多提提问题,可能问着问着,需求就不用做了。

<think>嗯,我需要理解用户的问题和提供的上下文。用户的问题是:"我想了解平台算法的底层逻辑和工作原理请问平台算法底层实现逻辑及原理"。结合之前的引用,用户特别提到了倒排索引、MySQL索引和HashMap的实现原理,可能是在寻找通用数据结构和算法在大型系统中的应用。首先,平台算法这个词比较广泛,可能指推荐系统、搜索引擎或数据库索引等。根据引用中的例子,用户似乎对高效数据检索和存储的底层机制感兴趣。比如引用[1]提到的倒排索引和FST算法,引用[2]讨论的数据库索引结构如B+树,引用[3]中的哈希碰撞处理。这些都属于平台常用的核心算法。接下来需要拆解平台算法的常见组件。数据存储方面,B+树在数据库索引中很重要,因为它的磁盘写优化(如引用[2]提到的减少IO次数)。查询优化部分,倒排索引用于文本搜索(引用[1]的字典例子),哈希表(引用[3])用于快速查找。复杂处理如推荐系统中的协同过滤可能需要引入矩阵分解或近邻算法。考虑用户可能的深层需求:用户可能是开发者或技术人员,希望理解这些原理来优化系统性能。因此回答应强调实际应用,比如为什么用B+树而不是二叉树(磁盘访问优化),或者倒排索引如何加速搜索。还需要注意引用标识的正确使用。例如,在讲倒排索引时引用[1],B+树部分引用[2],哈希表引用[3]。保持术语一致性,比如"跳表"对应LSM树,"概率分布模型"对应BloomFilter等。用户提到"平台算法"较笼统,因此可以分模块说明,确保覆盖存储、索引、查询三个层面。同时,相关问题的设计可以引导用户深入特定方向,比如推荐算法优化或大数据分治,这样既解答当前问题又提供扩展路径。</think> 以下综合引用内容,为您解析平台算法(特别是搜索引擎/大数据系统)的底层逻辑和核心实现原理: --- ### 一、基础数据结构:高效存储与检索的基石 1. **倒排索引(核心存储结构)** - **原理**:将内容映射到文档位置的索引结构,类似于字典的拼音检索 *示例*:搜索"算法" → 先定位"算"($w_1$)和"法"($w_2$) → 合并包含这两个词的文档列表 *公式表示*:$$ \text{Result} = \text{Postings}(w_1) \cap \text{Postings}(w_2) $$ - **优化**:使用**FST算法(有限状态转换器)** 压缩存储词典,内存占用降低50%+[^1] 2. **B+树(磁盘型数据库索引标准)** - **优势**: - 树高仅 $O(\log_b N)$($b$=节点分支数) - 叶子节点形成有序链表,范围查询效率 $O(\log_b N + k)$[^2] - **与二叉树的对比**: $$ \begin{array}{c|c|c} & \text{BST} & \text{B+Tree} \\ \hline \text{磁盘IO} & O(h) & O(\log_b N) \\ \text{范围查询} & O(N) & O(\log_b N + k) \end{array} $$ --- ### 二、分布式系统核心机制 1. **分片(Sharding)与路由** - **数据分片**:$$ \text{ShardID} = \text{hash}(key) \mod K $$ - **路由优化**:一致性哈希算法减少数据迁移量 2. **写入优化(LSM树)** ```plaintext 写入流程: 1. 写入内存MemTable (O(1)) 2. MemTable满 → 转磁盘SSTable (顺序写) 3. 后台Compaction合并文件 ``` 3. **容错机制** - **副本策略**:Raft/Paxos协议保证数据一致性 - **故障转移**:心跳检测+主从切换(毫秒级) --- ### 三、查询优化关键技术 1. **布隆过滤器(Bloom Filter)** - **原理**:位图+$k$个哈希函数 $$ \text{误判率} = (1 - e^{-kn/m})^k $$ - $m$=位图大小,$n$=元素数量 - **作用**:快速判断"数据不存在",减少90%+磁盘查询[^3] 2. **CBO优化器(基于代价优化)** ```python def optimize_query(plan): for predicate in predicates: # 计算谓词选择率 selectivity = estimate_selectivity(predicate) # 重排序谓词(高选择率优先) reorder_predicates(selectivity) ``` --- ### 四、典型算法实现原理 | 算法类型 | 底层实现 | 时间复杂度 | 应用场景 | |----------------|---------------------------|------------------|-----------------------| | **排序(TopK)** | 堆排序(小顶堆) | $O(N \log K)$ | 热搜榜单 | | **推荐模型** | 矩阵分解$M_{m×n}=U_{m×k}V^T_{k×n}$ | $O(k^3)$ | 个性化推荐 | | **图计算** | Pregel模型(顶点为中心) | $O(\text{diameter})$ | 社交网络分析 | --- ### 五、性能瓶颈突破点 1. **磁盘VS内存** - 磁盘寻址10ms → 内存访问0.1μs(相差$10^5$倍) - **解决方案**: - OS页缓存(Page Cache) - 内存映射文件(Mmap) - SSD优化随机 2. **数据局部性原理** ```plaintext 性能对比: 顺序:100MB/s 随机:<1MB/s ``` *设计启示:将随机写转化为顺序写(如LSM树)* --- ### 六、引用关键结论 1. **索引本质**:用空间换时间,通过预排序/哈希减少数据扫描量[^1][^2] 2. **哈希碰撞解决**: - JDK1.8:链表→红黑树(阈值=8) - 负载因子 $\lambda = 0.75$ 平衡空间与冲突概率[^3] 3. **分布式核心**:分而治之(Divide and Conquer)+冗余备份
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值