保存成功
保存失败,请重试
提交成功
氢氧化钠

氢氧化钠

资深软件工程师
资深程序员,中兴通讯 PON 业务软件开发经理,《算法的乐趣》作者以及 SourceInsight 开源外挂 TabsiPlus 的作者,18 年软件开发相关经验。在 Windows 系统软件开发、加密解密和软件架构方面有一些经验和见解。...更多
文章4
专栏1

一个配置数据管理功能的设计、重构过程

因为要支持新特性,我重构了一个小型配置数据管理模块。起初因不合理的设计而引入效率问题,继而又为解决效率问题走火入魔导致过度设计,最后通过对“单一职责原则”的应用,得到一个简单够用的设计。 在这个 Chat 中,你会看到: - 软件设计需要对一个事物的认识保持足够的抽象,过早地考虑实现的细节将导致畸形的设计。本篇 Chat 演示了一次对抽象的错误认识的改正过程,在这个过程中对各种问题的应对思路,各种试错的经验总结。 - 软件设计需要正确识别出“变化”,并且使不变的部分感知不到变化对自身的影响。本篇 Chat 介绍了一个因错误识别变化导致抽象设计应用到错误的对象上,产生了一个混乱的抽象接口的例子,当然,还有对这个错误的改正过程。 - 对 SRP 的理解和应用,一个因违 SRP 导致的 BUG 实例。
125 订阅

一个对弈游戏框架的重构过程

为了演示博弈树的搜索和评估算法,对比各种评估算法 AI 的智商,我做了一个井字棋(TIC-TAC-TOE)游戏的对战框架,让人类玩家可以和游戏的 AI 进行对战博弈。这个 Chat 的内容就是这个框架的设计和重构的过程,这是一个从朴素的面向对象实现到面向接口实现,并引入模式的设计过程。完整看完这个重构的过程,读者可以加深对“要对接口编程,而不是对实现编程”这句话的理解,了解“虚的接口”如何解除“实的对象”之间的耦合,并给设计带来灵活性的实现原理。 本场 Chat 的主要内容: 1. 玩家对象、搜索算法对象和棋局评估算法对象的抽象接口设计,以及它们的设计原则; 2. 模板方法(Template Method)模式的原理和使用实践; 3. 一个井字棋(TIC-TAC-TOE)棋类游戏框架的完整设计。
严选
154 订阅

Fizz-Buzz-Whizz 小游戏算法解析

Fizz-Buzz-Whizz 游戏(报数游戏)是个很简单的小程序,写个程序实现起来也是毫不费力,但今天我要介绍一种实现方法,将这个不起眼的小算法提升到软件架构的层次来实现。站在算法的角度理解这个实现方案,你可能觉得这是“杀鸡用牛刀”、“高射炮打蚊子”,但是站在软件设计的角度看这个实现方案,这是一个难得的“小问题也有大设计”的例子。说到软件架构和设计,其实很难找到规模合适的问题作为例子,如果问题规模太小,很难找到设计点(问题的痛点),如果问题规模太大,则会讲得人昏昏欲睡。 本场 Chat 的主要内容有: 1. 谓词(Prediction)、动作(Action)和规则(Rule)的抽象接口设计和设计原则; 2. 解释器模式的理解和应用; 3. 一个精心“架构”的算法实现。 更多算法相关的内容请订阅精品课[《算法应该怎么“玩”?》](https://gitbook.cn/m/mazi/comp/column?columnId=5b6d05446b66e3442a2bfa7b&utm_source=chat0907)。
严选
506 订阅

用 C++ 和 Java 写算法,差别大吗?

前段时间,我在 GitChat 上写了一门[《算法应该怎么“玩”?》](https://gitbook.cn/m/mazi/comp/column?columnId=5b6d05446b66e3442a2bfa7b&utm_source=chat0828)的畅销课,这门课选了三十多个简单且实用的算法实例,基本覆盖了各种算法比赛中经常出现的题目以及生活中常见的一些有趣的算法实现,在介绍每个算法实现时其侧重点会放在各种算法的设计方法和思想上,让读者拥有将具体问题抽象为数据模型的能力。 课程上线后,收到了读者的不少好评,也收到了一些反馈:“算法为什么用 C++,而不用 Java 写呢?” 我打算写一篇文章来比较一下用 C++ 和 Java 在写算法时的差异,通过对比,Java 程序员能快速理解我用 C++ 实现算法的例子,C++ 程序员也能看懂简单的 Java 算法代码,两种语言的对比会放在一起展示。 此外,C++ 语法层面使用的版本是 C++ 11 和 C++ 11 之后的版本,Java 使用的标准是 Java 6 和 Java 6 以后的版本。
免费严选
1615 订阅
微信扫描登录