 Nacos架构&原理
虎牙直播在微服务改造的实践总结 239 虎牙在全球 DNS 秒级生效上的实践 249 叽里呱啦 Nacos 1.1.2 升级 1.4.1 最佳实践 267 服务发现最佳实践 281 Eureka 平滑迁移 Nacos 方案 281 Nacos 打通 CMDB 实现就近访问 288 跨注册中心服务同步实践 298 配置管理最佳实践 310 Nacos 限流最佳实践 310 Nacos 无缝支持 confd 配置管理 是什么? 这个问题应该说⼀直持续,但是我们定下来开源、自研、商业化三位⼀体的战略,以开源为内核, 以商业化为扩展;开源做生态,商业化做企业级特性,阿里内部做性能和高可用;开源做组件,商 业化做解决方案;并且随着时间推移,基本按照这思路完成的正循环,全面系统的打造了 Nacos 各 个维度的能力。 前言 < 12 随着 Nacos 日益强大, 我们⼀直想写⼀个 Nacos 电子书系统介绍 Nacos 长链接协议,能 最大限度发挥 Nacos 性能。阿里微服务 DNS(Dubbo+Nacos+Spring-cloud-alibaba/Seata/ Sentinel)最佳实践,是 Java 微服务生态最佳解决方案;除此之外,Nacos 也对微服务生态活跃 的技术做了无缝的支持,如目前比较流行的 Envoy、Dapr 等,能让用户更加标准获取微服务能力。 生态仓库:https://github.com/nacos-group0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
虎牙直播在微服务改造的实践总结 239 虎牙在全球 DNS 秒级生效上的实践 249 叽里呱啦 Nacos 1.1.2 升级 1.4.1 最佳实践 267 服务发现最佳实践 281 Eureka 平滑迁移 Nacos 方案 281 Nacos 打通 CMDB 实现就近访问 288 跨注册中心服务同步实践 298 配置管理最佳实践 310 Nacos 限流最佳实践 310 Nacos 无缝支持 confd 配置管理 是什么? 这个问题应该说⼀直持续,但是我们定下来开源、自研、商业化三位⼀体的战略,以开源为内核, 以商业化为扩展;开源做生态,商业化做企业级特性,阿里内部做性能和高可用;开源做组件,商 业化做解决方案;并且随着时间推移,基本按照这思路完成的正循环,全面系统的打造了 Nacos 各 个维度的能力。 前言 < 12 随着 Nacos 日益强大, 我们⼀直想写⼀个 Nacos 电子书系统介绍 Nacos 长链接协议,能 最大限度发挥 Nacos 性能。阿里微服务 DNS(Dubbo+Nacos+Spring-cloud-alibaba/Seata/ Sentinel)最佳实践,是 Java 微服务生态最佳解决方案;除此之外,Nacos 也对微服务生态活跃 的技术做了无缝的支持,如目前比较流行的 Envoy、Dapr 等,能让用户更加标准获取微服务能力。 生态仓库:https://github.com/nacos-group0 码力 | 326 页 | 12.83 MB | 9 月前3
 Hello 算法 1.1.0 Java版逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 hello‑algo.com 13 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 构, 拼装积木的步骤则对应算法。 17 第 2 章 复杂度分析 Abstract 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Java版逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 hello‑algo.com 13 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 构, 拼装积木的步骤则对应算法。 17 第 2 章 复杂度分析 Abstract 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。0 码力 | 378 页 | 18.47 MB | 1 年前3
 Linux Docker Messcom/ Linux的特点 n Linux is free n 开放性 n 可靠的系统安全 n 良好的可移植性 n 多用户性 n 多任务 n 良好的用户界面 n 设备独立性 n 强大的网络功能 n Linux的版本一般指内核版本; n Linux通过不通的命名机制来区分内核类别,采用三个由“.”分割的数字来表示内核 版本号。第一个数字叫主板本号,第二个次版本号,第三个叫修订版本号。次版本号 Kernel File System Applications Architecture Kernel n 内存管理 n 进程管理 n 文件系统(虚拟文件系统 VFS) n 设备驱动 n 网络接口 建议阅读Linux内核源代码,可以从Linux-0.11入手,推荐Linux内核完全注释 (赵炯著) Architecture Shell n 系统的用户界面 n 提供用户与内核进行交互操作的一种接口 链接文件:指向同一个文件或目录的的文件 n 设备文件:与系统外设相关的,通常在/dev下面,分为块设备和字符 设备 n 管道(FIFO)文件 : 提供进程建通信的一种方式 套接字(socket) 文件: 该文件类型与网络通信有关 Architecture File System 标准化的目录结构 tree –L 1 Architecture File System tree –L 1 –p /dev 显示文件类型及权限0 码力 | 77 页 | 7.40 MB | 1 年前3 Linux Docker Messcom/ Linux的特点 n Linux is free n 开放性 n 可靠的系统安全 n 良好的可移植性 n 多用户性 n 多任务 n 良好的用户界面 n 设备独立性 n 强大的网络功能 n Linux的版本一般指内核版本; n Linux通过不通的命名机制来区分内核类别,采用三个由“.”分割的数字来表示内核 版本号。第一个数字叫主板本号,第二个次版本号,第三个叫修订版本号。次版本号 Kernel File System Applications Architecture Kernel n 内存管理 n 进程管理 n 文件系统(虚拟文件系统 VFS) n 设备驱动 n 网络接口 建议阅读Linux内核源代码,可以从Linux-0.11入手,推荐Linux内核完全注释 (赵炯著) Architecture Shell n 系统的用户界面 n 提供用户与内核进行交互操作的一种接口 链接文件:指向同一个文件或目录的的文件 n 设备文件:与系统外设相关的,通常在/dev下面,分为块设备和字符 设备 n 管道(FIFO)文件 : 提供进程建通信的一种方式 套接字(socket) 文件: 该文件类型与网络通信有关 Architecture File System 标准化的目录结构 tree –L 1 Architecture File System tree –L 1 –p /dev 显示文件类型及权限0 码力 | 77 页 | 7.40 MB | 1 年前3
 Hello 算法 1.0.0 Java版− 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 hello‑algo.com 13 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 式等代表数据结构, 拼装积木的步骤则对应算法。 17 第 2 章 复杂度分析 � 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。如图 2‑14 和以下代码所示,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类0 码力 | 376 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Java版− 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 hello‑algo.com 13 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 式等代表数据结构, 拼装积木的步骤则对应算法。 17 第 2 章 复杂度分析 � 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。如图 2‑14 和以下代码所示,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类0 码力 | 376 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Java 版逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 www.hello‑algo.com 13 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能 问题就会越深入,问题就能被解决得更优雅。 17 第 2 章 复杂度分析 Abstract 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 www.hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Java 版逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 www.hello‑algo.com 13 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能 问题就会越深入,问题就能被解决得更优雅。 17 第 2 章 复杂度分析 Abstract 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 www.hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0b5 Java版− 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 hello‑algo.com 12 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 方式代表数据结构,拼 装积木的步骤则对应算法。 16 第 2 章 复杂度分析 � 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 17 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内,可靠地求得问题的正确解。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。如图 2‑14 和以下代码所示,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类0 码力 | 376 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 Java版− 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 第 1 章 初识算法 hello‑algo.com 12 图 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 方式代表数据结构,拼 装积木的步骤则对应算法。 16 第 2 章 复杂度分析 � 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 17 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内,可靠地求得问题的正确解。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。如图 2‑14 和以下代码所示,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类0 码力 | 376 页 | 30.69 MB | 1 年前3
 Hello 算法 1.0.0b4 Java版− 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是「贪心算法」。 } return count; } Figure 2‑7. 线性对数阶的时间复杂度 阶乘阶 ?(?!) 阶乘阶对应数学上的「全排列」问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类推,直至第 「逻辑结构」揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照顺序依次排列,体现了数据之间的 线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构 成,反映了复杂的网络关系。 逻辑结构通常分为“线性”和“非线性”两类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线 性结构则相反,呈非线性排列。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表。 ‧ 非线性数据结构:树、堆、图、哈希表。0 码力 | 342 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 Java版− 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 20 + 10 + 1 = 31 元。 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是「贪心算法」。 } return count; } Figure 2‑7. 线性对数阶的时间复杂度 阶乘阶 ?(?!) 阶乘阶对应数学上的「全排列」问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类推,直至第 「逻辑结构」揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照顺序依次排列,体现了数据之间的 线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构 成,反映了复杂的网络关系。 逻辑结构通常分为“线性”和“非线性”两类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线 性结构则相反,呈非线性排列。 ‧ 线性数据结构:数组、链表、栈、队列、哈希表。 ‧ 非线性数据结构:树、堆、图、哈希表。0 码力 | 342 页 | 27.39 MB | 1 年前3
 Apache Shiro 1.2.x Reference Manual 中文翻译所须的选项和内部组件进行配置会让人感觉有点小痛苦--而将这些 SecurityManager 配置用一个灵活的配置文件实现就会简单地多。 为此,Shiro 默认提供了一个基本的 INI 配置文件的解决方案,人们已经对庞大的 XML 文件 有些厌倦了,而一个 INI 文件易读易用,而且所依赖的组件很少,稍后你就会通过一个简单易 懂的示例明白 INI 在对简单对象进行配置的时候是非常有效率的,比如 SecurityManager setSessionDAO(sessionDAO); ... 使用这些函数,你可以配置 SecurityManager 视图(graph)中的任何一部分。 虽然在程序中配置很简单,但它并不是我们现实中配置的完美解决方案。在几种情况下这种 方法可能并不适合你的程序: 它需要你确切知道并实例化一个直接实现(direct implementation),然而更好的做法是 你并不需要知道这些实现也不需要知道从哪里找到它们。 isPermitted* 方法实现的一部分。默 认的 Realm/WildcardPermission 存在的支持覆盖了大多数用例的80~90%,但它可能不是在 运行时拥有大量权限需要存储或检查的应用程序的最佳解决方案。 为文档加把手 我们希望这篇文档可以帮助你使用 Apache Shiro 进行工作,社区一直在不断地完善和扩展文 档,如果你希望帮助 Shiro 项目,请在你认为需要的地方考虑更正、扩展或添加文档,你提供0 码力 | 196 页 | 2.34 MB | 1 年前3 Apache Shiro 1.2.x Reference Manual 中文翻译所须的选项和内部组件进行配置会让人感觉有点小痛苦--而将这些 SecurityManager 配置用一个灵活的配置文件实现就会简单地多。 为此,Shiro 默认提供了一个基本的 INI 配置文件的解决方案,人们已经对庞大的 XML 文件 有些厌倦了,而一个 INI 文件易读易用,而且所依赖的组件很少,稍后你就会通过一个简单易 懂的示例明白 INI 在对简单对象进行配置的时候是非常有效率的,比如 SecurityManager setSessionDAO(sessionDAO); ... 使用这些函数,你可以配置 SecurityManager 视图(graph)中的任何一部分。 虽然在程序中配置很简单,但它并不是我们现实中配置的完美解决方案。在几种情况下这种 方法可能并不适合你的程序: 它需要你确切知道并实例化一个直接实现(direct implementation),然而更好的做法是 你并不需要知道这些实现也不需要知道从哪里找到它们。 isPermitted* 方法实现的一部分。默 认的 Realm/WildcardPermission 存在的支持覆盖了大多数用例的80~90%,但它可能不是在 运行时拥有大量权限需要存储或检查的应用程序的最佳解决方案。 为文档加把手 我们希望这篇文档可以帮助你使用 Apache Shiro 进行工作,社区一直在不断地完善和扩展文 档,如果你希望帮助 Shiro 项目,请在你认为需要的地方考虑更正、扩展或添加文档,你提供0 码力 | 196 页 | 2.34 MB | 1 年前3
 Hello 算法 1.0.0b1 Java版有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 3 轮以上后,往往就能牢记于心了。 3. 搭建知识体系。在学习方面,可以阅读算法专栏文章、解题框架、算法教材,不断地丰富知识体系。在 刷题方面,可以开始采用进阶刷题方案,例如按专题分类、一题多解、一解多题等,相关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段”,致力于帮助你更高效地开展第二、三阶段的学习。 Figure 0‑2 } return count; } Figure 2‑7. 线性对数阶的时间复杂度 阶乘阶 ?(?!) 阶乘阶对应数学上的「全排列」。即给定 ? 个互不重复的元素,求其所有可能的排列方案,则方案数量为 ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,⋯⋯,直至到第 ? 逻辑结构:线性与非线性 「逻辑结构」反映了数据之间的逻辑关系。数组和链表的数据按照顺序依次排列,反映了数据间的线性关系;树 从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。0 码力 | 186 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 Java版有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 3 轮以上后,往往就能牢记于心了。 3. 搭建知识体系。在学习方面,可以阅读算法专栏文章、解题框架、算法教材,不断地丰富知识体系。在 刷题方面,可以开始采用进阶刷题方案,例如按专题分类、一题多解、一解多题等,相关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段”,致力于帮助你更高效地开展第二、三阶段的学习。 Figure 0‑2 } return count; } Figure 2‑7. 线性对数阶的时间复杂度 阶乘阶 ?(?!) 阶乘阶对应数学上的「全排列」。即给定 ? 个互不重复的元素,求其所有可能的排列方案,则方案数量为 ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,⋯⋯,直至到第 ? 逻辑结构:线性与非线性 「逻辑结构」反映了数据之间的逻辑关系。数组和链表的数据按照顺序依次排列,反映了数据间的线性关系;树 从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。0 码力 | 186 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 Java版有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 3 轮以上后,往往就能牢记于心了。 3. 搭建知识体系。在学习方面,可以阅读算法专栏文章、解题框架、算法教材,不断地丰富知识体系。在 刷题方面,可以开始采用进阶刷题方案,例如按专题分类、一题多解、一解多题等,相关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段”,致力于帮助你更高效地开展第二、三阶段的学习。 Figure 0‑2 } return count; } Figure 2‑7. 线性对数阶的时间复杂度 阶乘阶 ?(?!) 阶乘阶对应数学上的「全排列」。即给定 ? 个互不重复的元素,求其所有可能的排列方案,则方案数量为 ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,⋯⋯,直至到第 ? 逻辑结构:线性与非线性 「逻辑结构」反映了数据之间的逻辑关系。数组和链表的数据按照顺序依次排列,反映了数据间的线性关系;树 从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。0 码力 | 197 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 Java版有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 3 轮以上后,往往就能牢记于心了。 3. 搭建知识体系。在学习方面,可以阅读算法专栏文章、解题框架、算法教材,不断地丰富知识体系。在 刷题方面,可以开始采用进阶刷题方案,例如按专题分类、一题多解、一解多题等,相关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段”,致力于帮助你更高效地开展第二、三阶段的学习。 Figure 0‑2 } return count; } Figure 2‑7. 线性对数阶的时间复杂度 阶乘阶 ?(?!) 阶乘阶对应数学上的「全排列」。即给定 ? 个互不重复的元素,求其所有可能的排列方案,则方案数量为 ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,⋯⋯,直至到第 ? 逻辑结构:线性与非线性 「逻辑结构」反映了数据之间的逻辑关系。数组和链表的数据按照顺序依次排列,反映了数据间的线性关系;树 从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排 成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。0 码力 | 197 页 | 15.72 MB | 1 年前3
共 22 条
- 1
- 2
- 3













