首页
flameking
取消

深入浅出索引

索引的实现模型 哈希表 模型结构如下: 本哈希表以数组和链表为数据结构,哈希表通过哈希函数计算出索引可能的下标,并将值存在数组当中,如果不同的索引值命中相同的下标,那么会作为节点链接在数组元素后面; 以Java的hashMap为例,数据以key-value键值对存在底层哈希表中,正如hashMap不会维护key值有序性,当我们针对一个区间查找数据的时候就会很麻烦,比如我的hashMa...

日志系统:一条SQL更新语句是如何执行的?

MySQL 的数据以数据页为单位,按偏移量寻找记录的具体位置,所以每次IO操作都是一个个数据页加载到内存。 但是我们需要查询或修改的数据也许就是一条记录,甚至对于更新操作,又会将数据页整个的刷新到磁盘,所以IO成本非常高,因而为了降低 IO 操作的成本,MySQL 做了大量的努力。 更新操作牵涉两个重要的日志:redo log 和 binlog redo log 怎么起作用的 r...

基础架构:一条SQL查询语句是如何执行的

架构流程图 连接器 长连接可能出现的问题 当连接器使用长连接管理MySQL客户端和服务端的连接时,容易因为内存过大,导致MySQL服务重启;原因是因为:MySQL执行过程中连接对象是被管理在了内存中,连接断开,内存才会释放,所以当我们全部使用长连接时,内存就会涨的特别快,甚至导致服务被系统强制杀死,从现象看就是MySQL服务异常重启。 如何解决: 1.定期断开连接 2.在MySQ...

事务隔离:为什么你改了我还看不见?

事务隔离级别 读未提交(read uncommitted),事务未提交,它做的变更就可被其他事务看见 读已提交(read committed),事务提交后,它做的变更才可见 可重复读(repeatable read),事务在执行过程中看到的数据,与事务开启时看到的数据是一致的 串行化(serializable),顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁...

字典项自动翻译器

需求 把注解标注在JavaBean上能很方便的标识出需要翻译的字段。这种方式在每个方法返回一个对应的 VO 这样的规范下是没有问题的。但如果开发者的开发不规范,也就是每个方法它可能都返回同一个 VO 对象, 但是每个方法它需要翻译的字段又可能不一样,这样就容易多翻,造成性能损失。可不可以支持多种方式,比如我可以在类上面去标识需要翻译的字段,也可以在方法上去标识要翻译的字段。 字典项...

积分体系设计

积分体系设计的必要性 互联网平台积分体系是一个独立、完整的系统模块。 主要用于激励和回馈用户在平台的消费行为和活动行为,通过积分体系可以激发与引导用户在平台的活跃行为,逐步形成用户对平台的依赖性和习惯性,提升用户对平台的黏度,提高用户和平台的交易频率。 积分体系在保持系统独立性的同时,又与平台会员系统、商品系统、订单系统等具有紧密的关联性,因此积分体系的规划设计需与平台其他系统模块同时设...

职责链模式

定义 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在这之上每个接收对象承担自己独有的处理职责(或者说每个接口对象能实现的功能应该不同) 实现方式 链表式 /** * 接收对象抽象类 */ public abstract class Handler { protected Han...

状态模式

定义 状态模式一般用来实现状态机常用在游戏机,而状态、工作流引擎等系统开发中。不过,状态机的实现方式有多种,除了状态模式,比较常用的还有分支逻辑法和查表法。从状态模式的设计来看,它有点像组合模式。 有限状态机 简称为状态机。状态机有 3 个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状...

观察者模式

观察者模式原理和实现 定义 观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-SubscribeDesign Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。 一般来说依赖的对象被称为观察者(Observer) 标准实现(模板代码) /** * 被观察者的上层接口 */ pub...

模板模式

原理与实现 模板模式是我认为最简单的一种设计模式,因为学 java 的对继承一定再熟悉不过了吧,而模板模式就是基于继承,或者说就是继承的衍生用法。 定义 模板方法模式在一个方法中定义一个算法骨架(即模板),并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。 简单实现 /** * 模板父类 */ public abstract ...