分类: 计算机科学

电商后台建模

系统建模系统建模是对软件系统的抽象,滤除了对细节的关照,通常需要包含如下内容: 上下文模型:说明系统在上下文环境中有怎样的构成,边界如何。上下文模型并未说明各系统的交互关系。 业务过程模型:说明系统中某个业务人工或自动化的处理过程,并交代各系统在该业务过程中的交互行为。可使用 UML 活动图绘制。 交互模型:说明系统与外部参与者(用户或其他系统)之间的交互关系,其中传递的数据可通过文本或结构化表

进程与线程踩点

前言本篇基于《现代操作系统》整理。虽然笔者也不甚理解,但是这篇总结可以为后续深入探究 node 进程、java 并发、react 调度算法打个桩,从中也确实增进了对进程、中断等的理解。 进程进程概要单核 CPU 一瞬只能运行一个进程,因此需要通过多道程序设计实现多进程的伪并行,营造在 1 秒钟内有多个进程同时运行的错觉。一个进程就是一个正在执行程序的实例,包含程序计数器、寄存器和变量的当前值。程序

符号表与二叉查找树

符号表符号表用于存储键值对。通常符号表按功能提供了如下 API(由 API 可逐步深入到设计决策、测试用例、实现等): get: 获取指定 key 键的值。 put: 将键值对存入符号表中。 delete: 删除指定的键值对。 contains: 判断符号表中是否包含指定的键。 isEmpty: 判断符号表是否为空。 size: 获取符号表中键值对的数量。 keys: 获取符号表中所有 key

透过散列表看HashMap

散列表用于存储键值对。先举两个例子:如果使用有序数组存储键值对,那么当存在某个较大的键时,整个数组所占用的内存空间就会很大;如果使用无序数组存储键值对,那么在查找元素时就需要遍历数组项,造成了性能的低效。与这两个例子不同的是,散列表有效地平衡了时间和空间复杂度。创建散列表的流程分为: 通过散列函数将键转化为散列码,以作为数组的索引。 通过碰撞处理解决两个或多个散列码等值的情况。 散列函数制作散

HashMap中的红黑树

HashMap 预期以链表数组的形式存储数据,即以 key 键的散列码计算索引,然后将元素插入到作为数组项的链表中(每个数组项称为桶)。为了提升查询的效率,HashMap 中存在一个阈值,当桶中的元素量超过这个阈值时,桶的数据结构就会从链表转变成红黑树。与红宝书中基于 2-3 树实现的红黑树不同,HashMap 中的红黑树基于 2-3-4 树实现。补充说明的是,Java 中的 TreeMap 也是

红黑树

与数组相比,链表提升了插入元素的效率。因为数组在插入元素时,需要移动后续元素的位置;而链表只需要改变后继元素的 prev 属性。然而在查询元素时,链表需要遍历所有元素,并不高效。借助于红黑树,既能提升查询的效率,又能保证插入的效率。 为什么说红黑树有助于提升查询和插入的效率呢?因为红黑树本质上是一棵完美平衡的二叉查找树,可以通过节点的有序性保证查找和插入操作的便捷,其作时间复杂度就是树的高度 O(

代理模式

概述代理模式(proxy pattern) 的主要处理逻辑为,构建代理对象以桥接对实际对象的访问。因此,可以在访问过程中构建附加的间接性操作如请求处理、权限校验、内务处理(housekeeping task)等,也可以为多种实际对象提供统一的接口。 《设计模式:可复用面向对象软件的基础》中的说法是: Provide a surrogate or placeholder for another ob

职责链模式

概述职责链模式(Chain of Responsibility)的主要实现逻辑为,将请求的处理对象构造为链式结构,然后在这条链上依序传递请求,直到请求被某个对象处理,或者最终得不到处理。 《设计模式:可复用面向对象软件的基础》一书将职责链模式描述为: Avoid coupling the sender of a request to its receiver by giving morethan

策略模式

概述状态模式(Strategy pattern,也称为算法簇模式)的主要实现逻辑为,构建多个策略类用于封装不同的算法,并将这些算法的其中一个以引用形式注入给上下文对象,以使上下文对象可以将其行为委托给策略类处理。相较于状态模式内部封装了状态切换,上下文对象的行为多数委托给状态对象加以处理,策略模式委托给策略类的处理通常只是单个行为,即算法,并且,设置策略(即替换算法)的过程由外部调用者完成。 《设