3 alex-zhou96

尚未进行身份认证

我要认证

男儿欲遂平生志,五经勤向窗前读。

等级
TA的排名 1w+

代理模式(Spring AOP)

介绍在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外提供功能接口意图:为其他对象提供一种代理以控制对这个对象的访问主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销大,或者某些操作需要安全控制,或者需要进程外的范文),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。何时

2020-07-02 16:42:23

设计模式6大原则

开闭原则**开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能取修改原有的代码,实现一个热插拔的效果。简言之,是为了使得程序的扩展性好,易于维护和升级。要想达到这样的效果,我们需要使用接口和抽象类,后面的具体实现里氏替换原则历史替换的原则说,任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不收到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。历史替换原则是对开闭原则的补充。实现开闭原则的关键

2020-07-01 15:57:55

桥接模式

介绍桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。意图将抽象部分与实现部分分离,使得他们都可以独立的变化。主要解决在有多种可能变化的情况下下,用继承会造成类爆炸的问题,扩展起来不灵活。何时使用实现系统有可能有多个角度分类,每一中角度都可能变化。代码//品牌package FBridge;/** * @Author Zhou jian * @Date 20

2020-07-01 15:44:06

适配器模式

介绍将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作。角色分析目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口需要适配的类:需要适配的类或者适配者类适配器:通过包装一个需要适配的对象实例USB-上网//computerpackage Eadapter;/** * @Author Zhou jian * @Date 2020 ${month} 2020/6/30 0030 .

2020-06-30 16:23:35

原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。实现继承cloneable接口重写clone()方法可能存在浅拷贝的问题,对象的clon

2020-06-28 15:56:18

建造者模式

建造者模式建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式定义:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。主要作用:在用户不知道对象的创建过程和细节的情况下直接创建复杂的对象。主要解决在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内

2020-06-28 15:30:05

查询优化技术之多级缓存(数据库)

缓存设计原则用快速存取设备,用内存将缓存推到离用户最近的地方脏缓存处理(关键数据存储到数据库,数据库数据与缓存中数据的一致性问题)多级缓存redis缓存redis本质上是一个数据库,Redis商品详情动态内容的实现在商品详情页,当客户端频繁访问某个数据库的时候,可以将数据库中查询出来的内容缓存到redis中,下一次当客户端发出同样请求的时候不会访问数据库而访问redis缓存。 //商品详情页浏览 @RequestMapping(value = "/get",me

2020-06-28 02:28:01

工厂模式

文章目录简单工厂模式工厂方法模式抽象工厂模式优点使用场景简单工厂模式一个工厂,当添加一个产品的时候,需要破坏工厂的方法违反开闭原则。//car/** * @Author Zhou jian * @Date 2020 ${month} 2020/6/27 0027 16:16 */public interface Car { void name();}//Teslapackage BFactory.simple;/** * @Author Zhou

2020-06-27 17:49:21

单例模式

文章目录单例模式的实现饿汉式懒汉式 --DCL+volitale静态内部类枚举实现单例模式的实现饿汉式构造函数私有化迫不及待创建静态对象公有方法返回对象package ASingleTon;/** * @Author Zhou jian * @Date 2020 ${month} 2020/6/26 0026 20:58 * 饿汉式单例 * 可能会浪费空间 */public class Hungry { //可能会浪费大量的内存空间 privat

2020-06-26 23:48:23

Redis面试题

文章目录简述下Redis(为什么要选用Redis)为什么说Redis块或者性能高Redis中的5中数据类型,8大数据结构简单动态字符串SDS和C语言自带的字符串有什么不同Redis字典的底层实现hashTable相关问题压缩列表原理zset底层跳表原理(为什么不选择平衡树)Redis中过期策略与内存淘汰机制过期/删除策略(出现缓存雪崩的问题)两种策略可能出现缓存雪崩的问题从库的删除策略内存淘汰机制Redis中持久化机制介绍对比Redis集群的主从复制实现同步的两种机制部分重同步的实现(增量同步实现)Redi

2020-06-17 20:01:18

缓存的问题

缓存穿透缓存穿透是值缓存和数据库中都没有数据,而用户不断发起请求,如发起id为特别大或者不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决办法可以为这些key在缓存中设置对应的值为null,后面查询这个key的时候就不用查询数据库了boolem Filter使用不领过滤器,我们把有数据的key都放在布隆过滤器中,每次查询的时候都先去布隆过滤器中判断,如果没有直接返回null缓存击穿—大量请求一个key在高并发的情况下,大量的请求同时查询同一个key时,此时这个key正好失

2020-06-15 14:53:20

布隆过滤器

文章目录介绍布隆过滤器Redis中的布隆过滤器基本使用布隆过滤器的参数配置(和误判率有关)原理结论应用介绍去重的问题如果存储在关系数据库里,去重就需要频繁的对数据库进行exists查询,当系统并发量很高时,数据库是很难抗住压力的若使用缓存,,但是当许多的历史记录全部缓存起来,那得浪费多大存储空间?而且这个存储空间这时,布隆过滤器就可以使用到,它就是专门用来解决去重问题,它在起到去重的同时,在空间上还能节省90%布隆过滤器节省内存,判断是否存在,大量数据过滤本质:将内存中的数据转换为

2020-06-15 13:41:31

分布式会话管理

单体会话管理基于Cookie(传统)基于token传输分布式会话

2020-06-15 02:03:39

Redis对象的实现以及内存的管理

文章目录抽象出来的的对象使用对象的好处对象的类型和编码底层存储RedisObject对象字符串对象编码编码的转换列表对象编码hash对象集合对象有序集合对象类型检查和命令多态内存回收抽象出来的的对象Redis没有直接使用前面的几种数据结构来创建键值对数据库,而是对于这些数据结构来创建了一个对象系统。这个系统包含了字符串对象,列表对象,哈希对象,集合对象,有序集合对象使用对象的好处在指向命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令根据不同的使用场景,对对象设置多种不同的数据结

2020-06-14 22:28:35

Redis数据类型与底层实现

文章目录SDS(简单动态字符串)SDS的定义SDS与C字符串的区别:其实就是改善,根据自身需求完善数据结构常数复杂度获取字符串长度杜绝缓冲区溢出(类似StringBuilder)减少修改字符串时带来的内存重分配次数(分配合适的内存大小)空间预分配(减少重分配次数)惰性删除二进制安全兼容部分C字符串链表链表和链表节点的实现字典底层数据结构存储key的问题哈希算法解决键重提rehash何时rehash如何rehash渐进式rehash小结跳跃表Redis中应用跳跃表的实现小结整数集合作用实现元素类型升级升级的好

2020-06-14 19:55:12

Redis实现分布式锁

文章目录分布式场景下的同步问题分布锁的实现获取锁删除锁可重入性锁(在Java中可以使用ThreadLocal)集群环境下分布式锁的问题RedLock算法Redis的key可以作为分布式锁,下面我们介绍一下分布式锁的一些基本知识:分布式场景下的同步问题在单机系统下我们可以使用synchrtonized和lock等同步机制实现同步在多机分布式系统下,我们可以采用图中的一些同步方法;这里我们重点介绍Redis实现分布式锁的问题分布锁的实现分布式锁本质上要实现的目标就是在Redis里面占一个

2020-06-13 19:54:05

Redis的哨兵机制

文章目录哨兵机制介绍启动并初始化Sentinel服务器初始化服务器对Sentinel自身状态进行初始化--使用Sentinel专用代码建立与主服务器的连接--初始化Sentinel状态(往往根据文件配置,确定其主服务器)初始化Sentinel状态的masters属性(msters字典的初始化是根据被载入的Sentinel配置文件来进行的)创建连向主服务器的网络连接(主服务器同Sentinel建立Socket建立连接)Sentinel获取主服务器的信息---获取主服务器的从服务器的相关信息Sebtinel建立

2020-06-13 16:11:04

秒杀项目使用Ngix实现动静分离,反向代理

文章目录目前的架构--单机版本单机容量问题--水平扩展水平扩展ngix反向代理负载均衡目前的架构–单机版本单机容量问题–水平扩展水平扩展ngix反向代理负载均衡

2020-06-13 02:11:08

Redis复制(主从复制)

文章目录CAP原理Redis的最终一致性复制概念旧版复制功能实现同步(也叫快照复制)命令传播(同步完成之后的更新保持一致)旧版复制功能的缺陷新版复制功能的实现部分重同步的实现(增量同步)复制偏移量复制积压缓冲区服务器运行IDPSYNC的实现复制的实现(详细版本)设置主服务器的地址和端口建立套接字发送PING命令:测试连通性身份验证发送端口信息同步命令传播心跳检测CAP原理 C - Consistent , 一致性 A - Availability , 可用性 P - Partition to

2020-06-12 13:01:17

发现并发容量问题---tomcat内嵌容器参数调整

文章目录Server端并发线程数上不去查看内嵌的tomcat的容器的配置修改配置(显示)定制化内嵌tomcat开发(修改keepAlive)存在问题线程数据库 QPS查询优化QPSTPSServer端并发线程数上不去当使用jemeter工具时,把请求线程数压上可以看到报错此时服务端已经卡死查看内嵌的tomcat的容器的配置spring-configuration-metadata.json//配置的端口号 { "name": "server.port",

2020-06-11 22:19:56

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。