随笔分类 - 深挖计算机基础
摘要:一、课前问题 今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是看似越简单的东西往往越难掌握好,想要灵活应用就更加困难。老规矩,我们还是来看一道思考题。 假设我们有1000万个整数
阅读全文
摘要:一、课前问题 上两节中,我带你着重分析了几种常用排序算法的原理、时间复杂度、空间复杂度、稳定性等。今天,我会讲三种时间复杂度是O(n)的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂
阅读全文
摘要:一、课前思考 两节我们讲了二分查找算法。当时我讲到,因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗? 实际上,我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫作跳表(Skiplist),也就是
阅读全文
摘要:一、课前思考 前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构牛逼线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。 我反复强调过,带着问题学习,是最有效的学习方式之一,所以在正式的内容开始之前,我还是给你出几道思考题:二叉树有哪几种存储方式?什
阅读全文
摘要:一、课前思考 上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。 我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是O(1)。既然有了这么高效的散
阅读全文
摘要:一、课前问题 排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会遇到排序。排序非常重要,所以我会花多一点时间来详细讲一讲经典的排序算法。 排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、
阅读全文
摘要:一、开篇问题 推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多App都有这个功能。这个功能中,用户A推荐用户B来注册,用户B又推荐了用户C来注册。我们可以说,用户C的“最终推荐人”为用户A,用户B的“最终推荐人”也为用户A,而用户A没有“最终推荐人”。 一般来说,我们会通过数据库来记录这种推荐关
阅读全文
摘要:一、课前问题 我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反⽽会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。 当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线
阅读全文
摘要:一、引子 浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d,那就无法再通过前进、后退功能查看页面c了。 假
阅读全文
摘要:参考极客时间专栏《数据结构与算法之美》学习笔记 一、入门篇 数据结构与算法之美学习笔记:第三讲 数据结构与算法之美学习笔记:第四讲 二、基础篇 数据结构与算法之美学习笔记:第五讲 数据结构与算法之美学习笔记:第六讲 数据结构与算法之美学习笔记:第七讲 数据结构与算法之美学习笔记:第八讲 数据结构与算
阅读全文
摘要:参考极客时间专栏《趣谈Linux操作系统》学习笔记 核心原理篇:内存管理 趣谈Linux操作系统学习笔记:第二十讲 趣谈Linux操作系统学习笔记:第二十一讲 趣谈Linux操作系统学习笔记:第二十四讲 趣谈Linux操作系统学习笔记:第二十五讲 趣谈Linux操作系统学习笔记:第二十六讲 核心原理
阅读全文
摘要:参考极客时间专栏《Linux性能优化实战》学习笔记 一、CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记:第五讲 Linux性能优化实战学习笔记:第六讲 Linux性能优化实战学习笔记:第七讲 Linux性能优化实战学
阅读全文
摘要:参考极客时间专栏《深入浅出计算机组成原理》学习笔记 一、入门篇 深入浅出计算机组成原理学习笔记:第三讲 深入浅出计算机组成原理学习笔记:第四讲 二、原理篇:指令和运算(12讲) 深入浅出计算机组成原理学习笔记:第五讲 深入浅出计算机组成原理学习笔记:第六讲 深入浅出计算机组成原理学习笔记:第七讲 深
阅读全文
摘要:参考极客时间专栏《MySQL实战45讲》学习笔记 一、基础篇(8讲) MySQL实战45讲学习笔记:第一讲 MySQL实战45讲学习笔记:第二讲 MySQL实战45讲学习笔记:第三讲 MySQL实战45讲学习笔记:第四讲 MySQL实战45讲学习笔记:第五讲 MySQL实战45讲学习笔记:第六讲 M
阅读全文
摘要:一、本节概述 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 2 -1。 既然自增 id 有上限,
阅读全文
摘要:一、引子 这是我们专栏的最后一篇答疑文章,今天我们来说说一些好问题。 在我看来,能够帮我们扩展一个逻辑的边界的问题,就是好问题。因为通过解决这样的问题,能够加深我们对这个逻辑的理解,或者帮我们关联到另外一个知识点,进而可以帮助我们建立起自己的知识网络。 在工作中会问好问题,是一个很重要的能力。 经过
阅读全文
摘要:一、引子 磁盘→盘片→磁道→扇区(每个 512 字节) ext* 定义文件系统的格式 二、inode 与块的存储 1、块 2、不用给他分配一块连续的空间 我们可以分散成一个个小块进行存放 1、优点 2、存在的问题 3、如何解决 3、inode里面有哪些信息? 至于 inode 里面有哪些信息,其实我
阅读全文
摘要:一、引子 在这之前,有一点你需要注意。解析系统调用是了解内核架构最有力力的一把钥匙,这里我们只要重点关注这几个最重要的系统调用就可以了 1、mount 系统调用用于挂载文件系统;2、open 系统调用用于打开或者创建文件,创建要在 flags 中设置 O_CREAT,对于读写要设置flags 为 O
阅读全文
摘要:一、引子 在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇。在这些文章中,大家在评论区留下了很多高质量的留言。现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学提出了很多高质量的问题,更有一些同学帮忙解答其他同学提出的问题。 在浏览这些留言并回复的过程中,我倍
阅读全文
摘要:一、本节概述 我经常被问到这样一个问题:分区表有什么问题,为什么公司规范不让使用分区表呢?今天,我们就来聊聊分区表的使用行为,然后再一起回答这个问题。 二、分区表是什么? 为了说明分区表的组织形式,我先创建一个表 t: 图 1 表 t 的磁盘文件 我在表 t 中初始化插入了两行记录,按照定义的分区规
阅读全文