摘要:
应用开发过程中,由于我们种种原因,会导致出现各种SQL慢查并且导致各种系统瓶颈,如何优化我们的SQL,让我们的系统更稳定有时会变得越来越重要。通过一些SQL优化步骤及案例分析希望能够帮助到大家。SQL优化一般步骤:1、通过慢查日志等定位那些执行效率较低的SQL语句;2、explain 分析SQL的执行计划3、show profile 分析;4、trace;5、确定问题并采用相应的措施。 阅读全文
摘要:
所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。遍历方式分别为:先序遍历、中序遍历、后序遍历。二叉树前序遍历:根-> 左-> 右;二叉树中序遍历:左-> 根-> 右;二叉树后序遍历:左-> 右-> 根 阅读全文
摘要:
关于MySQL的锁,看这一篇就够了。锁机制用于管理对共享资源的并发访问。 lock的对象是事务,用来锁定的是数据库中的对象,如表、页、行。并且一般lock的对象仅在事务commit或rollback后进行释放。不同事务隔离级别释放的时间可能不同,所以分析lock问题,要先看事务隔离级别。不同类型的锁,锁的算法,如何查看死锁。 阅读全文
摘要:
应用架构,指软件系统中固定不变的代码结构、设计模式、规范和组件间的通信方式。在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全、稳定、快速迭代。但是今天我们在做业务研发时,更多会关注一些宏观的架构,而忽略了应用内部的架构设计,希望能通过案例分析和重构,推演出一套高质量的DDD架构。 阅读全文
摘要:
回溯算法本质就是枚举,在给定的枚举集合中不断从其中尝试搜索找到问题的解,如果在搜索过程中发现不满足求解条件,则回溯返回,尝试其他路径继续搜索解决,这种走不通就回退再尝试其他路径的方法就是回溯法。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考3个问题:1. 路径;2. 选择列表:3. 结束条件。回溯算法解决全排列问题。 阅读全文
摘要:
动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。整体框架:状态转移方程、备忘录存储重复子问题、最小子问题、求最值。斐波那契数列不算动态规划,但是解决问题的思路与动态规划很像,再加上大家上学的时候基本都接触过斐波那契数列,通过它来理解动态规划就很不错了。 阅读全文
摘要:
滑动窗口算法可以用以解决数组/字符串的子元素问题,它可以将嵌套的循环问题,转换为单循环问题,降低时间复杂度。 阅读全文
摘要:
战略设计为我们提供一种高层视野来审视我们的软件系统,主要包括领域/子域、通用语言、限界上下文和架构风格等概念,
而战术设计则将战略设计进行具体化和细节化,它主要关注的是技术层面的实施,也是对程序员来得最实在的地方。
战术设计的目的是保证战略的实现。在DDD中,代码就是设计本身,你不再需要那些繁文缛节的并且永远也无法得到实时更新的设计文档。
警惕贫血对象,要创建行为饱满的领域对象并不难,我们需要转变一下思维,将领域对象当做是服务的提供方,而不是数据容器,多思考一个领域对象能够提供哪些行为,而不是数据。 阅读全文
摘要:
实现领域驱动设计。领域是一个组织所做的事情以及其中所包含的一切。如何分析领域。划分子域,核心域、支撑域、通用域。问题空间和解决空间。通用语言。限界上下文,上下文映射。 阅读全文
摘要:
2003 年埃里克·埃文斯(Eric Evans)发表了《领域驱动设计》。DDD全称Domain-Driven Design, 是一种处理复杂领域的设计思想,它试图分离技术实现的复杂性,并围绕业务概念构建领域模型来控制业务的复杂性,以解决软件难以理解,难以演进的问题,是面向对象的设计思想,是面向对象设计的一种升华。 阅读全文