 分布式 KV 存储系统 Cellar 演进之路分布式KV存储Cellar演进之路 美团点评·基础架构 齐泽斌 美团点评基础架构部,存储研发团队负责人 • Cellar:分布式KV存储服务 • Databus:数据库变更实时传输服务 • Venus:图片服务 11年毕业于天津大学 11 年到 14 年任职于百度,负责分布式文件系统和 KV 存储系统研发 有多年分布式存储研发经验 个人简介 • Cellar起源 • 中心节点架构演进 • 美团引入阿里Tair作为NoSQL存储 • 14年底 大范围应用,并对Tair修修补补,积累领域问题 • 16年初 基于开源版本研发新一代KV存储系统Cellar • Now Cellar日请求量达万亿级,美团点评最大NoSQL存储 Cellar起源 Cellar起源—Tair架构 路由表 Cellar起源—Tair架构 HASH Key 桶号 存储节点 固定HASH算 法 法 固定数目 数据分片 桶->存储节点 对照表 Cellar起源—Tair架构 服务层 请求 mdb 响应 ldb fdb rdb 引擎层 迁移 复制 • 中心化集群问题 • 可用性问题 • 性能问题 • 运维问题 Cellar起源—Tair问题 Cellar起源 架构升级 性能优化 可用性优 化 可运维性 Cellar 开源 Tair • Cellar起源0 码力 | 34 页 | 1.66 MB | 1 年前3 分布式 KV 存储系统 Cellar 演进之路分布式KV存储Cellar演进之路 美团点评·基础架构 齐泽斌 美团点评基础架构部,存储研发团队负责人 • Cellar:分布式KV存储服务 • Databus:数据库变更实时传输服务 • Venus:图片服务 11年毕业于天津大学 11 年到 14 年任职于百度,负责分布式文件系统和 KV 存储系统研发 有多年分布式存储研发经验 个人简介 • Cellar起源 • 中心节点架构演进 • 美团引入阿里Tair作为NoSQL存储 • 14年底 大范围应用,并对Tair修修补补,积累领域问题 • 16年初 基于开源版本研发新一代KV存储系统Cellar • Now Cellar日请求量达万亿级,美团点评最大NoSQL存储 Cellar起源 Cellar起源—Tair架构 路由表 Cellar起源—Tair架构 HASH Key 桶号 存储节点 固定HASH算 法 法 固定数目 数据分片 桶->存储节点 对照表 Cellar起源—Tair架构 服务层 请求 mdb 响应 ldb fdb rdb 引擎层 迁移 复制 • 中心化集群问题 • 可用性问题 • 性能问题 • 运维问题 Cellar起源—Tair问题 Cellar起源 架构升级 性能优化 可用性优 化 可运维性 Cellar 开源 Tair • Cellar起源0 码力 | 34 页 | 1.66 MB | 1 年前3
 高可用分布式流数据存储设计-李玥⾼高可⽤用分布式流数据存储设计 李玥 京东集团 技术架构部 架构师 ⾃自我介绍 ⾃自我介绍 李李玥 京东集团 技术架构部 架构师 负责主导设计新⼀一代京东消息中间件系统,专注于流数据的⼀一致性分发和可靠存储、分布式实时计算和⾼高可⽤用分 布式系统架构等技术领域。 从事互联⽹网研发、架构10余年年,曾在浪潮集团、当当⽹网等公司从事架构相关⼯工作。2017年年加⼊入京东,期间提升京 如何定位?如何融入生态系统? How 如何实现?如何优化? WHY 为什什么需要流数据存储? 单体应⽤用 烟筒式 SOA 微服务 那些年年的服务 MySQL ES HDFS KV HBase Hive 这些年年的数据 Services Data MySQL ES HDFS KV HBase Hive 统⼀一的流数据存储平台 我们的愿景 Services Streaming Storage Storage Data 有序 Append only:尾部写入,不变 顺序读取 分布式 高性能 可靠性 顺序一致性 (近乎)无限容量 我们需要什什么样的存储? WHAT Pub/Sub Powered by United Stream Store Streaming Connector Distributed Application Coordinating Service0 码力 | 36 页 | 6.02 MB | 1 年前3 高可用分布式流数据存储设计-李玥⾼高可⽤用分布式流数据存储设计 李玥 京东集团 技术架构部 架构师 ⾃自我介绍 ⾃自我介绍 李李玥 京东集团 技术架构部 架构师 负责主导设计新⼀一代京东消息中间件系统,专注于流数据的⼀一致性分发和可靠存储、分布式实时计算和⾼高可⽤用分 布式系统架构等技术领域。 从事互联⽹网研发、架构10余年年,曾在浪潮集团、当当⽹网等公司从事架构相关⼯工作。2017年年加⼊入京东,期间提升京 如何定位?如何融入生态系统? How 如何实现?如何优化? WHY 为什什么需要流数据存储? 单体应⽤用 烟筒式 SOA 微服务 那些年年的服务 MySQL ES HDFS KV HBase Hive 这些年年的数据 Services Data MySQL ES HDFS KV HBase Hive 统⼀一的流数据存储平台 我们的愿景 Services Streaming Storage Storage Data 有序 Append only:尾部写入,不变 顺序读取 分布式 高性能 可靠性 顺序一致性 (近乎)无限容量 我们需要什什么样的存储? WHAT Pub/Sub Powered by United Stream Store Streaming Connector Distributed Application Coordinating Service0 码力 | 36 页 | 6.02 MB | 1 年前3
 Laravel 5.1 中文文档bootstrap/cache 目录 在 bootstrap 目录中,创建 cache 目录,在该目录中创建一个.gitignore 文件,编辑文件 内容如下: *!.gitignore 该目录应该是可写的,用来存储临时优化文件如 compiled.php,routes.php,config.php 以及 service.json 新增 BroadcastServiceProvider 在配置文件 config/app all 方法: User::lists('id')->all(); 注意:Query Builder 的 lists 返回的仍然是数组。 日期格式化 以前,模型中的 Eloquent 日期字段存储格式可以通过重写 getDateFormat 方法来修改,现 在依然可以这么做;但是为了更加方便可以在模型中简单通过指定$dateFormat 属性来替代 重写方法。 在序列化模型到数组或 JSON 时,这 将会改变 JSON 序列化的日期字段的格式。想要在序列化模型中设置指定的日期格式,你 可以在模型中重写 serializeDate(DateTime $date)方法,这样就可以在不改变字段存储格 式的情况下对格式化序列化的 Eloquent 日期字段有着更加细粒度的控制。 本文档由 Laravel 学院(LaravelAcademy.org)提供 6 Collection0 码力 | 307 页 | 3.46 MB | 1 年前3 Laravel 5.1 中文文档bootstrap/cache 目录 在 bootstrap 目录中,创建 cache 目录,在该目录中创建一个.gitignore 文件,编辑文件 内容如下: *!.gitignore 该目录应该是可写的,用来存储临时优化文件如 compiled.php,routes.php,config.php 以及 service.json 新增 BroadcastServiceProvider 在配置文件 config/app all 方法: User::lists('id')->all(); 注意:Query Builder 的 lists 返回的仍然是数组。 日期格式化 以前,模型中的 Eloquent 日期字段存储格式可以通过重写 getDateFormat 方法来修改,现 在依然可以这么做;但是为了更加方便可以在模型中简单通过指定$dateFormat 属性来替代 重写方法。 在序列化模型到数组或 JSON 时,这 将会改变 JSON 序列化的日期字段的格式。想要在序列化模型中设置指定的日期格式,你 可以在模型中重写 serializeDate(DateTime $date)方法,这样就可以在不改变字段存储格 式的情况下对格式化序列化的 Eloquent 日期字段有着更加细粒度的控制。 本文档由 Laravel 学院(LaravelAcademy.org)提供 6 Collection0 码力 | 307 页 | 3.46 MB | 1 年前3
 Laravel 5.2 中文文档或者 DELETE 请求的 CSRF 令牌,因为 Laravel 自带的 HTTP 中间件 VerifyCsrfToken 会为我们做这项工作:将请求中输入 的 token 值和 Session 中的存储的 token 作对比来进行验证。 从 CSRF 保护中排除指定 URL 有时候我们需要从 CSRF 保护中排除一些 URL,比如,如果你使用了 Stripe 来处理支 付并用到他们的 webhook 5、可终止的中间件 有时候中间件可能需要在 HTTP 响应发送到浏览器之后做一些工作。比如,Laravel 内置 的“session”中间件会在响应发送到浏览器之后将 Session 数据写到存储器中,为了实现 这个,定义一个可终止的中间件并添加 terminate 方法到这个中间件: 存储 session 数据... } } terminate 方法将会接收请求和响应作为参数。一旦你定义了一个可终止的中间件,应该 将其加入到 HTTP kernel 的全局中间件列表中。0 码力 | 377 页 | 4.56 MB | 1 年前3 Laravel 5.2 中文文档或者 DELETE 请求的 CSRF 令牌,因为 Laravel 自带的 HTTP 中间件 VerifyCsrfToken 会为我们做这项工作:将请求中输入 的 token 值和 Session 中的存储的 token 作对比来进行验证。 从 CSRF 保护中排除指定 URL 有时候我们需要从 CSRF 保护中排除一些 URL,比如,如果你使用了 Stripe 来处理支 付并用到他们的 webhook 5、可终止的中间件 有时候中间件可能需要在 HTTP 响应发送到浏览器之后做一些工作。比如,Laravel 内置 的“session”中间件会在响应发送到浏览器之后将 Session 数据写到存储器中,为了实现 这个,定义一个可终止的中间件并添加 terminate 方法到这个中间件: 存储 session 数据... } } terminate 方法将会接收请求和响应作为参数。一旦你定义了一个可终止的中间件,应该 将其加入到 HTTP kernel 的全局中间件列表中。0 码力 | 377 页 | 4.56 MB | 1 年前3
 Laravel 5.6 中文文档tooManyAttempts 方法 该方法签名中未使用的 $decayMinutes 参数被移除。如果你通过自己的实现重写了该方法,也要从方法签名中移除该参数。 数据库 Morph 列的索引顺序 为了获得更好的性能,迁移方法 morphs 构建的列索引顺序倒过来了,如果你在某个迁移中使用了 morphs 方法,尝试运行该迁移的 down 方法时会报 错。如果应用还在开发中,可以使用 migrate:fresh logs 子目录,app 目录用于存放应用生成的文件,framework 目录用于存放框架生成的文件和缓存,最后,logs 目录存放的是应用的 日志文件。 storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,你还需要在 public (应 用根目录下的 public 目录)目录下生成一个软连接 storage 指向这个目录。你可以通过 终端中间件,可以理解为一个善后的后台处理中间件。有时候中间件可能需要在 HTTP 响应发送到浏览器之后做一些工作,比如,Laravel 内置 的 session 中间件会在响应发送到浏览器之后将 Session 数据写到存储器中,为了实现这个功能,需要定义一个终止中间件并添加 terminate 方法 到这个中间件:0 码力 | 377 页 | 14.56 MB | 1 年前3 Laravel 5.6 中文文档tooManyAttempts 方法 该方法签名中未使用的 $decayMinutes 参数被移除。如果你通过自己的实现重写了该方法,也要从方法签名中移除该参数。 数据库 Morph 列的索引顺序 为了获得更好的性能,迁移方法 morphs 构建的列索引顺序倒过来了,如果你在某个迁移中使用了 morphs 方法,尝试运行该迁移的 down 方法时会报 错。如果应用还在开发中,可以使用 migrate:fresh logs 子目录,app 目录用于存放应用生成的文件,framework 目录用于存放框架生成的文件和缓存,最后,logs 目录存放的是应用的 日志文件。 storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,你还需要在 public (应 用根目录下的 public 目录)目录下生成一个软连接 storage 指向这个目录。你可以通过 终端中间件,可以理解为一个善后的后台处理中间件。有时候中间件可能需要在 HTTP 响应发送到浏览器之后做一些工作,比如,Laravel 内置 的 session 中间件会在响应发送到浏览器之后将 Session 数据写到存储器中,为了实现这个功能,需要定义一个终止中间件并添加 terminate 方法 到这个中间件:0 码力 | 377 页 | 14.56 MB | 1 年前3 Laravel 5.3 中文文档....................................................................................... 321 9.4 文件存储 .................................................................................................. 服务器;通过 Laravel Scout 实现全文模型搜索;在 Laravel Elixir 中支持 Webpack;“可邮寄”的对象;明确分离 web 和 api 路由;基于闭包的控制台命令;存储上传文件的辅助函数;支持 POPO 和单动作控制 器;以及优化前端脚手架;等等等等。 通知(Notifications) 注:Laracasts 上有关于此特性的免费视频教程。 Laravel class WelcomeMessage extends Mailable implements ShouldQueue { // } 更多可邮寄对象细节请查看其对应文档。 存储上传文件 注:Laracasts 上有关于该特性的免费视频教程。 在 web 应用中,最常见的任务之一就是保存用户上传文件了,比如头像、照片、文档等等。Laravel 5.3 通过在上传文件实例上使用新的0 码力 | 691 页 | 9.37 MB | 1 年前3 Laravel 5.3 中文文档....................................................................................... 321 9.4 文件存储 .................................................................................................. 服务器;通过 Laravel Scout 实现全文模型搜索;在 Laravel Elixir 中支持 Webpack;“可邮寄”的对象;明确分离 web 和 api 路由;基于闭包的控制台命令;存储上传文件的辅助函数;支持 POPO 和单动作控制 器;以及优化前端脚手架;等等等等。 通知(Notifications) 注:Laracasts 上有关于此特性的免费视频教程。 Laravel class WelcomeMessage extends Mailable implements ShouldQueue { // } 更多可邮寄对象细节请查看其对应文档。 存储上传文件 注:Laracasts 上有关于该特性的免费视频教程。 在 web 应用中,最常见的任务之一就是保存用户上传文件了,比如头像、照片、文档等等。Laravel 5.3 通过在上传文件实例上使用新的0 码力 | 691 页 | 9.37 MB | 1 年前3 Laravel 6.0 中文文档这个调度器的执行逻辑反过来了,会在 4:00 到 23:00 之间每分钟 执行一次 list 命令,在 Laravel 6.0 中,这一错误行为被纠正。 存储 Rackspace 存储驱动被移除 影响级别:低 存储驱动 rackspace 被移除,如果你想要继续使用 Rackspace 作 为存储驱动,建议使用社区维护的扩展包来替代。 URL 生成 路由 URL 生成 & 提取参数 本文档由学院君提供 学院君致力于提供优质 都被绑定到一个控制台命令并且允许与命令行 IO 方法进行交互,尽 管这个文件并不定义 HTTP 路由,但是它定义了基于控制台的应用 入口(路由)。 channels.php 文件用于注册应用支持的所有事件广播频道。 文件存储目录 本文档由学院君提供 学院君致力于提供优质 Laravel 中文学习资源:https://xueyuanjun.com 47 storage 目录包含了编译后的 Blade 模板、基于文件的 子目录,app 目录用于存放应用生成的文件, framework 目录用于存放框架生成的文件和缓存,最后,logs 目录 存放的是应用的日志文件。 storage/app/public 目录用于存储用户生成的文件,比如可以被公 开访问的用户头像,要达到被 Web 用户访问的目的,你还需要 在 public (应用根目录下的 public 目录)目录下生成一个软连 接 storage 指向这个目录。你可以通过0 码力 | 1442 页 | 14.66 MB | 1 年前3 Laravel 6.0 中文文档这个调度器的执行逻辑反过来了,会在 4:00 到 23:00 之间每分钟 执行一次 list 命令,在 Laravel 6.0 中,这一错误行为被纠正。 存储 Rackspace 存储驱动被移除 影响级别:低 存储驱动 rackspace 被移除,如果你想要继续使用 Rackspace 作 为存储驱动,建议使用社区维护的扩展包来替代。 URL 生成 路由 URL 生成 & 提取参数 本文档由学院君提供 学院君致力于提供优质 都被绑定到一个控制台命令并且允许与命令行 IO 方法进行交互,尽 管这个文件并不定义 HTTP 路由,但是它定义了基于控制台的应用 入口(路由)。 channels.php 文件用于注册应用支持的所有事件广播频道。 文件存储目录 本文档由学院君提供 学院君致力于提供优质 Laravel 中文学习资源:https://xueyuanjun.com 47 storage 目录包含了编译后的 Blade 模板、基于文件的 子目录,app 目录用于存放应用生成的文件, framework 目录用于存放框架生成的文件和缓存,最后,logs 目录 存放的是应用的日志文件。 storage/app/public 目录用于存储用户生成的文件,比如可以被公 开访问的用户头像,要达到被 Web 用户访问的目的,你还需要 在 public (应用根目录下的 public 目录)目录下生成一个软连 接 storage 指向这个目录。你可以通过0 码力 | 1442 页 | 14.66 MB | 1 年前3 Hello 算法 1.1.0 Go版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 383 页 | 18.48 MB | 1 年前3 Hello 算法 1.1.0 Go版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 383 页 | 18.48 MB | 1 年前3 Hello 算法 1.2.0 简体中文 C# 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C# 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Kotlin 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 382 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Kotlin 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 382 页 | 18.48 MB | 10 月前3
共 463 条
- 1
- 2
- 3
- 4
- 5
- 6
- 47














 
  
 