分类: 计算机科学

模板方法模式

概述TemplateMethod 模板方法模式即由父类定义算法逻辑骨架,由子类提供具体逻辑步骤的实现。 《设计模式:可复用面向软件的基础》讨论了以下案例:应用框架 Application 类负责打开一个外部存储的文档,应用就会将文档表示为 Document 对象。基于 Application、Document 框架,实现具体逻辑的子类如绘图应用中的 DrawApplication、DrawDocu

组合模式

Composite 组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。因为使用了树形结构,组合模式使单个对象和组合对象有使用一致性。比如在图形编辑器或图形捕捉系统中,可以采用宜搭似的设计方案,Input、Textarea、Text、Line 等作为普通图元,Row 等作为这些图元的容器 Container,在容器和图元两层中,容器层具有添加图元的接口,图元没有,这样两者没有使用一致性,

编译原理踩点

基础及前言编译器由 analysis 分析(也称为前端部分)、synthesis 综合(也称为后端部分)两部分构成。编译器执行的各 phase 步骤如下: 词法分析 lexical analysis:将字符流源程序解析成 token 词法单元。这一部分将收集源程序的变量信息,并存入 symbol table 符号表。 语法分析 syntax analysis:构建词法单元的语法结构 —— syn

算法分析点到

算法分析的逻辑线条比如自然科学中的经典方法:通过观察或实验收集数据;抽象简化的假设性模型;基于模型预测未来;通过实验数据核实并校准分析模型。这方面耳熟能详的先例有:牛顿爵士推演得来的万有引力定律仰赖于第谷、开普勒的数据;借助万有引力定律,科学家后来成功预测了海王星的存在。简单地说,这种经典方法在定性和定量分析中往复折返,基于定性分析推断第一、第二自变量,基于定量分析明确因变量和自变量的关系(甚或将

架构入门

面向服务架构富客户端、客户端-服务器模式、基于 ESB 企业服务总线的 SOA 服务导向架构、microservices architecture 微服务架构,微服务架构是循着这条演进路线发展而来的。客户端-服务器模式可用于解释现行的很多架设,如 hsf 服务即包含客户端和服务端,此外还有微服务架构中的配置中心;redis 消息服务;sql 服务器和应用服务器的关系也是客户端-服务器模式。基于 E

电商后台建模

系统建模系统建模是对软件系统的抽象,滤除了对细节的关照,通常需要包含如下内容: 上下文模型:说明系统在上下文环境中有怎样的构成,边界如何。上下文模型并未说明各系统的交互关系。 业务过程模型:说明系统中某个业务人工或自动化的处理过程,并交代各系统在该业务过程中的交互行为。可使用 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 也是