摘要: 把Linux内核当成一家软件外包公司的老板 操作系统其实就像一个软件外包公司,其内核就相当于这家外包公司的老板。所以接下来的内容中,请你将自己的角色切换成这家软件外包公司的老板,设身处地地去理解操作系统是如何协调各种资源,帮客户做成事情的。 “双击 QQ”这个过程,都需要用到哪些硬件? 用户开始对着 阅读全文
posted @ 2020-05-02 15:16 小萝卜鸭 阅读(281) 评论(0) 推荐(0) 编辑
摘要: [toc] 二进制编码 理解二进制的“逢二进一” 二进制和我们平时用的十进制,其实并没有什么本质区别,只是平时我们是“逢十进一”,这里变成了“逢二进一”而已。每一位,相比于十进制下的 0~9 这十个数字,我们只能用 0 和 1 这两个数字。 任何一个十进制的整数,都能通过二进制表示出来。把一个二进制 阅读全文
posted @ 2020-05-01 14:11 小萝卜鸭 阅读(1455) 评论(0) 推荐(1) 编辑
摘要: [toc] 计算机指令 在软硬件接口中,CPU 帮我们做了什么事? 我们常说,CPU 就是计算机的大脑。CPU 的全称是 Central Processing Unit,中文是中央处理器。 从硬件的角度来看,CPU 就是一个超大规模集成电路,通过电路实现了加法、乘法乃至各种各样的处理逻辑。 从软件工 阅读全文
posted @ 2020-04-30 14:29 小萝卜鸭 阅读(2022) 评论(0) 推荐(2) 编辑
摘要: 总结回顾面向对象、设计原则、编程规范、重构技巧等知识点 设计原则和思想包括:面向对象、设计原则、规范与重构三个模块的内容。除此之外,还有代码质量评判标准。 一、代码质量评判标准 如何评价代码质量的高低? 代码质量的评价有很强的主观性,描述代码质量的词汇也有很多,比如可读性、可维护性、灵活、优雅、简洁 阅读全文
posted @ 2020-04-29 11:52 小萝卜鸭 阅读(972) 评论(0) 推荐(0) 编辑
摘要: [toc] 查询优化器 我们总是希望数据库可以运行得更快,也就是响应时间更快,吞吐量更大。想要达到这样的目的, 我们一方面需要高并发的事务处理能力, 另一方面需要创建合适的索引,让数据的查找效率最大化。 事务和索引的使用是数据库中的两个重要核心,事务可以让数据库在增删查改的过程中,保证数据的正确性和 阅读全文
posted @ 2020-04-28 14:48 小萝卜鸭 阅读(1017) 评论(0) 推荐(1) 编辑
摘要: [toc] 冯·诺依曼体系结构 计算机的基本硬件组成 CPU CPU是计算机最重要的核心配件,全名你肯定知道,叫中央处理器(Central Processing Unit)。计算机的所有“计算”都是由 CPU 来进行的。 内存(Memory) 你撰写的程序、打开的浏览器、运行的游戏,都要加载到内存里 阅读全文
posted @ 2020-04-27 14:23 小萝卜鸭 阅读(1442) 评论(0) 推荐(2) 编辑
摘要: [toc] 索引的使用原则 创建索引有哪些规律? 创建索引有一定的规律。当这些规律出现的时候,我们就可以通过创建索引提升查询效率,下面我们来看看什么情况下可以创建索引: 字段的数值有唯一性的限制,比如用户名 索引本身可以起到约束的作用,比如唯一索引、主键索引都是可以起到唯一性约束的,因此在我们的数据 阅读全文
posted @ 2020-04-26 19:21 小萝卜鸭 阅读(476) 评论(0) 推荐(0) 编辑
摘要: [toc] 思考数据库调优维度选择 下面进入了 SQL 性能优化篇,关注如何提升 SQL 查询的效率。 其实关于数据库调优的知识点非常分散。不同的 DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同。为了能让你对数据库调优有一个整体的概览,我把这些知识点做了一个梳理。 数据库调优的目标 阅读全文
posted @ 2020-04-25 12:24 小萝卜鸭 阅读(1102) 评论(0) 推荐(0) 编辑
摘要: 最快速地改善代码质量的20条编程规范 编码规范分别有三个部分:命名与注释(Naming and Comments)、代码风格(Code Style)和编程技巧(Coding Tips)。 命名 大到项目名、模块名、包名、对外暴露的接口,小到类名、函数名、变量名、参数名,只要是做开发,我们就逃不过“起 阅读全文
posted @ 2020-04-24 11:17 小萝卜鸭 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 重构的概括介绍 “重构”这个词对于大部分工程师来说都不陌生。不过,据了解,大部分人都只是“听得多做得少”,真正进行过代码重构的人不多,而把持续重构作为开发的一部分的人,就更是少之又少了。 一方面,重构代码对一个工程师能力的要求,要比单纯写代码高得多。重构需要你能洞察出代码存在的坏味道或者设计上的不足 阅读全文
posted @ 2020-04-23 18:50 小萝卜鸭 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 如何透明地支持数据库分库分表? 下面主要讨论,一个分布式数据库领域的需求。设计一个中间层,让应用逻辑不必关心数据库的物理分布。这样,无论把数据库拆成多少个分库,编程时都会像面对一个物理库似的没什么区别。 分布式数据库解决了什么问题,又带来了哪些挑战 随着技术的进步,我们编写的应用所采集、处理的数据越 阅读全文
posted @ 2020-04-22 15:08 小萝卜鸭 阅读(952) 评论(0) 推荐(0) 编辑
摘要: 作用域和生存期:实现块作用域和函数 什么是作用域和生存期,它们的重要性又体现在哪儿呢? “作用域”和“生存期” 是计算机语言中更加基础的概念,它们可以帮你深入地理解函数、块、闭包、面向对象、静态成员、本地变量和全局变量等概念。 作用域(Scope) 作用域是指计算机语言中变量、函数、类等起作用的范围 阅读全文
posted @ 2020-04-21 15:30 小萝卜鸭 阅读(669) 评论(0) 推荐(0) 编辑
摘要: 业务系统的开发如何做需求分析和设计 对于一个工程师来说,如果要追求长远发展,你就不能一直只把自己放在执行者的角色,不能只是一个代码实现者,你还要有独立负责一个系统的能力,能端到端(end to end)开发一个完整的系统。这其中的工作就包括:前期的需求沟通分析、中期的代码设计实现、后期的系统上线维护 阅读全文
posted @ 2020-04-20 15:39 小萝卜鸭 阅读(565) 评论(0) 推荐(0) 编辑
摘要: [toc] 视图 视图,也就是我们今天要讲的 虚拟表 ,本身是不具有数据的,它是 SQL 中的一个重要概念。 从下面这张图中,你能看到,虚拟表的创建连接了一个或多个数据表,不同的查询应用都可以建立在虚拟表之上。 视图一方面可以帮我们使用表的一部分而不是所有的表, 另一方面也可以针对不同的用户制定不同 阅读全文
posted @ 2020-04-19 14:31 小萝卜鸭 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 控制反转、依赖反转、依赖注入 在前面讲到,单一职责原则和开闭原则的原理比较简单,但是,想要在实践中用好却比较难。而下面我们要讲到的依赖反转原则正好相反。这个原则用起来比较简单,但概念理解起来比较难。 比如,下面这几个问题,你看看能否清晰地回答出来: “依赖反转”这个概念指的是“谁跟谁”的“什么依赖” 阅读全文
posted @ 2020-04-18 10:14 小萝卜鸭 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 单一职责原则 下面开始学习一些经典的设计原则,其中包括,SOLID、KISS、YAGNI、DRY、LOD 等。 这些设计原则,从字面上理解,都不难。你一看就感觉懂了,一看就感觉掌握了,但真的用到项目中的时候,你会发现,“看懂”和“会用”是两回事,而“用好”更是难上加难。 所以,在接下来的讲解中,不仅 阅读全文
posted @ 2020-04-17 11:47 小萝卜鸭 阅读(420) 评论(0) 推荐(0) 编辑
摘要: [toc] 用数据库的方式思考SQL是如何执行的 虽然 SQL 是声明式语言,我们可以像使用英语一样使用它,不过在 RDBMS(关系型数据库管理系统)中,SQL 的实现方式还是有差别的。今天我们就从数据库的角度来思考一下 SQL 是如何被执行的。 Oracle 中的 SQL 是如何执行的 我们先来看 阅读全文
posted @ 2020-04-16 10:34 小萝卜鸭 阅读(1063) 评论(1) 推荐(0) 编辑
摘要: 正则文法和有限自动机 解析 age = 45 词法分析示意图: 我们来描述一下标识符、比较操作符和数字字面量这三种Token的词法规则。 标识符: 第一个字符必须是字母,后面的字符可以是字母或数字。 比较操作符: 和 =(其他比较操作符暂时忽略)。 数字字面量: 全部由数字构成(像带小数点的浮点数, 阅读全文
posted @ 2020-04-15 15:25 小萝卜鸭 阅读(1043) 评论(0) 推荐(0) 编辑
摘要: 虚拟钱包系统的开发案例 前面学习了面向对象的一些理论知识,比如,面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格、基于接口而非实现编程和多用组合少用继承设计思想等等。接下来,通过两个更加贴近实战的项目来进一步学习,如何将这些理论应用到实际的软件开发中。 据了解,大部分工程师都是做业务开发的 阅读全文
posted @ 2020-04-14 15:24 小萝卜鸭 阅读(629) 评论(0) 推荐(1) 编辑
摘要: 什么是面对对象 什么是面向对象编程和面向对象编程语言? 面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming。 面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language。 面向对象编程中有两个 阅读全文
posted @ 2020-04-13 09:45 小萝卜鸭 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 介绍 在之前我们介绍和使用了 BERT 预训练模型和 GPT 2 预训练模型,分别进行了文本分类和文本生成次。我们将介绍 XLNet 预训练模型,并使用其进行命名实体识别次。 知识点 XLNet 在 BERT 和 GPT 2 上的改进 XLNet 模型结构 使用 XLNet 进行命名实体识别次 谷歌 阅读全文
posted @ 2020-03-25 09:46 小萝卜鸭 阅读(5671) 评论(10) 推荐(0) 编辑
摘要: 介绍 在本次将学习另一个有着优秀表现的预训练模型:GPT 2 模型,以及使用它进行文本生成任务实践。 知识点 GPT 2 的核心思想 GPT 2 模型结构详解 GPT 2 进行文本生成 OpenAI 在论文 "Improving Language Understanding by Generativ 阅读全文
posted @ 2020-03-16 14:08 小萝卜鸭 阅读(20785) 评论(9) 推荐(0) 编辑
摘要: 利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。 比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。 提示: 字符串长度在[0, 50000]范围内。 链接:https://l 阅读全文
posted @ 2020-03-16 09:25 小萝卜鸭 阅读(275) 评论(0) 推荐(1) 编辑
摘要: 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。) 注意: 给定的矩阵grid 的长度和宽度都不超过 阅读全文
posted @ 2020-03-15 17:11 小萝卜鸭 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 给定一个无序的整数数组,找到其中最长上升子序列的长度。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? https://leetcode cn.com/problems 阅读全文
posted @ 2020-03-14 11:05 小萝卜鸭 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 https://leetcode cn.com/problems/majority element 摩尔投票法 先将第一个数字假设为过 阅读全文
posted @ 2020-03-13 09:28 小萝卜鸭 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i+1 bool: s=sum(A) if s%3!=0: return False left=right=0 i,j=0,len(A) 1 avg=s/3 while 阅读全文
posted @ 2020-03-11 10:10 小萝卜鸭 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目 阅读全文
posted @ 2020-03-10 10:05 小萝卜鸭 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 1。 说明: 你可以认为每种硬币的数量是无限的。 https://leetcode cn.com/problems/coin change 动 阅读全文
posted @ 2020-03-08 10:20 小萝卜鸭 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 示例 2: https://leetcode cn.com/problems/merge intervals/ 简单合并 首先要做的就是给区间集排序,由于我们要排序的是个结构体,所以我们要定义自己的 comparator,才能用 sort 来排 阅读全文
posted @ 2020-03-07 11:41 小萝卜鸭 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 1 示例 1: 输入: 示例 2: 限制: 1 queue; deq 阅读全文
posted @ 2020-03-07 10:13 小萝卜鸭 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 介绍 在该节中我们将对用户产生的真实评论数据进行情绪分析。 知识点 文本分词 Word2Vec 方法 决策树分类 本文所涉及到情绪分析,又称为文本情绪分析,这是自然语言处理和文本挖掘过程中涉及到的一块内容。简而言之,我们通过算法去判断一段文本、评论的情绪偏向,从而快速地了解表达这段文本的原作者的主观 阅读全文
posted @ 2020-03-06 12:30 小萝卜鸭 阅读(6391) 评论(1) 推荐(1) 编辑
摘要: 给定一个整数数组 ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 示例 2: https://leetcode cn.com/problems/maximum product subarray/ 动态规划 其实这道题最直接的方法就是用 DP 来做,而且要用两个 dp 数组 阅读全文
posted @ 2020-03-06 12:28 小萝卜鸭 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 示例 2: 限制: 1 findContinuousSequence(int target) { int i = 1; // 滑 阅读全文
posted @ 2020-03-06 09:57 小萝卜鸭 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 上篇 "4_Random Forests and K Nearest Neighbours" 5 总结 5.1 关于这个项目 我们的目标是根据历史数据,利用时间和天气来预测建筑的能源需求。该模型将产生准确的能源需求预测,这将有助于智能电网技术的发展。如果哈佛大学能够预测所有校园建筑的能源需求,他们将 阅读全文
posted @ 2020-03-05 20:10 小萝卜鸭 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉树, "原地" 将它展开为链表。 例如,给定二叉树 将其展开为: https://leetcode cn.com/problems/flatten binary tree to linked list/ 递归 先利用 DFS 的思路找到最左子节点,然后回到其父节点,把其父节点和右子节点断 阅读全文
posted @ 2020-03-05 10:18 小萝卜鸭 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 排排坐,分糖果。 我们买了一些糖果 ,打算把它们分给排好队的 个小朋友。 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 颗糖果。 然后,我们再回到队伍的起点,给第一个小朋友 颗糖果,第二个小朋友 颗,依此类推,直到给最后一个小朋友 颗糖果。 重复上述过程(每次都比 阅读全文
posted @ 2020-03-05 10:15 小萝卜鸭 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动 阅读全文
posted @ 2020-03-04 11:38 小萝卜鸭 阅读(131) 评论(0) 推荐(0) 编辑
摘要: "994. 腐烂的橘子" 在给定的网格中,每个单元格可以有以下三个值之一: 值 代表空单元格; 值 代表新鲜橘子; 值 代表腐烂的橘子。 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 。 示例 1: 阅读全文
posted @ 2020-03-04 11:34 小萝卜鸭 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 介绍 在该章节中我们将根据用户产生的数据对潜在的会员用户(可能产生购买会员的行为)进行预测。 知识点 朴素贝叶斯 人工神经网络 越来越多的用户开始购买的会员服务,享受更多的优质课程,以及最为完整的线上操作体验。但是,的一位注册用户是否购买会员的行为应该是建立在一定背景条件下。相信很少有用户刚刚完成注 阅读全文
posted @ 2020-03-03 11:59 小萝卜鸭 阅读(1365) 评论(0) 推荐(1) 编辑