自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 SQL优化笔记

1.Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫FileSort排序。没有not null约束:InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为NULL,不为NULL,计数累加。count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加,最后返回累积值。

2023-10-06 16:07:12 73 1

原创 装饰者模式笔记

4.在如图的Component与ConcreteComponent之间,如果ConcreteComponent类很多,还可以设计一个缓冲层,将共有的部分提取出来,抽象层是一个类。前面分析到方案1因为咖啡单品+调料组合会造成类的倍增,因此可以做改进,将调料内置到Drink类,这样就不会造成数量过多,从而提高项目的维护性。6.问题:这样设计,会有很多类,当我们增加一个单品咖啡,或者一个新的调料,类的数量就会倍增,就会出现类爆炸。4.这样不管是什么形式的单品咖啡+调料组合,通过递归方式可以方便的组合和维护。

2023-09-26 08:23:14 66 1

原创 桥接模式笔记

3.Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责,它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。1.实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。2.对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其他的部分由具体业务来完成。

2023-09-19 19:27:43 57

原创 设计原则笔记

1.类A通过接口interface1依赖类B,类C通过接口inteface1依赖类D,如果接口interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。2.类A通过接口inteface1依赖类B,类C通过接口interface1依赖类D,如果接口interface1对于类A和类C来说不是最小接口那么类B和类D必须去实现他们不需要的方法。只有类中方法足够少,可以在方法级别保持单一职责原则。System.out.println(vehicle + "在公路上运行");

2023-09-05 15:29:31 90

原创 动态规划 斐波那契问题

Programming -在这里指用数学方法来根据子问题求解当前问题(通俗理解就是找到递推公式)Dynamic -指缓存上一步结果,根据上一步结果结算当前结果(多阶段进行)Dynamic-Programming - 由Bellman提出。将找出递归公式,将当前问题分解成子问题,分阶段进行求解。用一维或二维数组来保存之前的结算结果(可进一步优化)求解过程中缓存子问题的解,避免重复计算。从已知子问题的解,推导出当前问题的解。推导过程可以表达为一个数学公式。

2023-09-03 03:19:21 74

原创 JVM虚拟机内存结构笔记 上

ps H -eo pid,tid,%cpu | grep 进程id(用ps命令进一步定位是哪个线程引起的cpu占用过高)·jstack进程id 可以根据线程id找到有问题的线程,进一步定位到问题代码的源代码行。·每个栈由多个栈帧(Frame)组成,对应着每次方法调用所占用的内存。·每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。·如果方法内局部变量没有逃离方法的作用范围,它是线程安全的。·每个线程运行时所需要的内存,称为虚拟机栈。栈帧-每个方法运行时需要的内存。栈-线程运行需要的内存空间。

2023-09-03 02:19:02 95

原创 解释器模式笔记

1.在编译原理中,一个算数表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终行程一颗抽象的语法分析树,这里的词法分析器和语法分析器都可以看作是解释器。2.解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)1.当有一个语言需要解释执行,可将该语言中的句子表示为一个抽象语法树,就可以考虑使用解释器模式,让程序具有良好的扩展性。

2023-09-01 01:02:52 69 1

原创 策略模式笔记

3.体现了“对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,只要添加了一种策略(或者行为)即可,避免了使用多重转移语句(if..else if..else)1.策略模式(strategy pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。2.上面说的1的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改动会影响其他部分,会有溢出效应。//按照这个方式调用c。System.out.println("飞不了,飞不了一点");

2023-08-31 01:01:15 79

原创 状态模式笔记

问题分析:这类代码难以应对变化,再添加一种状态时,我们需要手动添加if/else,在添加一种功能是,要对所有的状态进行判断,因此代码会变得越来越臃肿,并且一旦没有处理某个状态,便会发生极其严重的BUG,难以维护。2.方便维护,将容易产生问题的if-else语句删除了,如果把每个状态的行为都放到一个类中,每次调用方法时都要判断当前是什么状态,不但会产出很多if-else语句,而且很容易出错。5.当一个事件或者对象有很多状态,状态之间会相互转换,对不同的状态要求有不同的行为时,可以考虑使用状态模式。

2023-08-30 01:47:59 78 1

原创 代理模式笔记

1.静态代理和JDK代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是Cglib代理。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。3.代理模式有不同的行驶,主要有三种 静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,他是属于动态代理的范畴)

2023-08-28 17:34:07 74 1

原创 备忘录模式笔记

而在软件层面,备忘录模式有这相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象例获取原来数据进行恢复操作(事务?游戏角色有攻击力和防御力,在大战boss前保存自身的状态(攻击力和防御力),当大战boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。System.ot.println("恢复到状态1,当前的状态是" + originator.getState());System.out.println("大战后,使用备忘录对象恢复到战前");

2023-08-27 14:38:08 86

原创 建造者模式笔记

2.每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便的替换具体建造者或增加新的具体建造者,用使用不同的具体建造者即可得到不同的产品对象。2.设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好,也就是说,这种设计方案,把产品和创建对象的过程封装在一起,耦合性增强了。5.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如产品之间的差异性很多,则不适合使用建造者模式,因此其使用范围收到一定的限制。System.out.println("给普通房子打地基5米");

2023-08-24 13:02:29 63 1

原创 享元模式笔记

ps:享元模式为计算机常用思想空间换时间,使用集合创建缓存空间加快系统的读取速度,在数据结构中树结构的减枝优化,常用中间件的池技术、缓存技术都是享元模式的应用,比较常见的例题如使用Integer类上线项目使用双等号判断造成公司亏损,为何出现此问题,如何解决?4.举个例子:围棋理论上有361个空位可以放棋子,没盘棋都有可能有两三百个棋子对象产生,因为存储空间有限,一台服务器很难支持更多的玩家玩围棋游戏,如果用享元模式来处理棋子,那么棋子对象就可以减少到只有两个实例,这样就很好的解决了对象的开销问题。

2023-08-23 20:52:30 58

原创 原型模式笔记

4.改进的思路分析:Java中Object类是所有类的根类,Object提供了一个clone()方法,该方法可以将一个Java对象复制一份,但是需要实现clone的Java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力 -> 原型模式。3.工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()2.创建新对象时,总是需要获取原始对象的属性,如果创建的对象比较复杂时,效率较低。

2023-08-23 10:51:24 68

原创 单例模式笔记

3.单例模式的使用场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等)public static synchronized Singleton getInstance(){//方法上加锁解决了线程问题,同时因为锁会排队降低了代码执行效率。//静态常量不可修改。1.单例模式保证了系统内存中只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

2023-08-22 10:40:18 65 1

原创 职责链模式笔记

/3.HandlerExecutionChain主要负责的是请求拦截器的执行和处理请求,但是他本身不处理请求,只是将请求分配给链上注册处理器执行,这是职责链的实现方式,减少了职责链本身与处理逻辑之间的耦合,规范了处理流程。System.out.println("请求编号 id=" + purchaseRequest.getId() + "被" + this.name + "处理");//1.传统方式是:接收到一个采购请求后,根据采购金额来调用对应的Approver(审批人)完成审批。

2023-08-21 11:01:16 52 1

原创 11.9面试总结

逼逼赖赖(小声)

2022-11-10 01:39:54 170 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除