自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高性能MySQL —— 存储引擎

innodb_file_per_table:每张表都建立一个表空间。page是磁盘操作的最小单元,区大小固定为1M,页大小固定为16K.通过API与服务器交互。是存储数据、更新查询数据、建立索引的实现方式。支持hash索引,存放在内存中,速度快。兼顾了高可靠和高性能。适用于改、删多的场景。适用于仅需增、删场景。

2023-08-18 13:41:02 152

原创 高性能MySQL —— 并发控制

当执行一个UPDATE或DELETE操作并且命中了索引(无论是唯一索引还是非唯一索引),InnoDB会尝试仅仅对满足条件的那些行加锁。对于非唯一索引,会对查询结果范围左侧的间隙和右侧的间隙加间隙锁(避免重复值的插入)bin log是实现主从复制的核心,主服务器上的所有数据更改(在Binary Log中记录)会被复制到从服务器。脏页是指还未来的及刷新到磁盘的buffer pool中的数据。update读的是当前(最新的)。正是MVCC的存在,MySQL在可重复读的隔离级别解决了幻读问题。

2023-08-18 09:51:08 369 1

原创 MySQL —— 存储对象

即使当前视图不加check,也会去级联检查所依赖的视图。为当前视图和依赖的视图一同开启check。视图可更新/插入的原则:视图中的行必须与基础表中的行能够一一对应,则视图可更新。不管是local还是casded都会去检查依赖链上的check条件。数据库只存储视图的定义,动态产生的一张临时表(内存)。,是默认操作,即若当前视图是基于另外一个视图创建,将对。对视图进行插入数据的操作,实际上是插入到基表中。local:只为当前视图开启check。2.屏蔽基表的变换对业务的影响。依赖的视图的检查条件。

2023-08-17 10:14:49 262

原创 高性能MySQL —— SQL优化

innoDB采取逻辑删除的方式。当一个页中被标记删除的节点达到阈值(默认50%)。会尝试页合并,即如果逻辑上相邻的页能与当前页合并成一整个页就会合并。优化原则:order by的内容应尽量符合索引顺序的正序或倒序【注要么一起倒序要么一起正序】。否则将会 using filesort:指利用内存中的缓冲区/或磁盘对查询结果进行重排序。页的节点可以为空,也可以占一半空间,也可以占满空间。MyISAM引擎将表的总数存储在磁盘上,故无条件count(*)时效率高。核心思想:1. 需要判断是否为null的最慢。

2023-08-14 14:21:28 120

原创 高性能MySQL —— 索引

MySQL会尽量将更多的查询条件推送到索引搜索过程中,这样在从索引中检索数据时就可以更早地过滤掉不匹配的记录,从而减少从表中检索的行数。【也就是说,即使非索引条件,也会代入到索引的B+树中进行判断比较,以减少回表次数,即下推到执行引擎去做】这显然是利用了mysql过多的索引失效情况的特性而进行的优化。缺失时,按索引顺序之后的列索引失效】,如果某一列缺失,那么查询条件第一次不匹配的列及之后的列将。二级索引,叶子节点上挂的是主键,而不是row数据。索引可以关联多个字段,分为组合索引和单例索引。

2023-08-12 19:08:28 153 2

原创 设计模式 —— 解释器模式

SymbolExpression是一个空实现,通过继承让子类实现相应的方法。SubExpressin实现减法,addExpression实现加法。给的一段语言,给出语法规则,解释器用来解释这段语句并输出结构。非终结符:在编程语言的上下文中,你可以把非终结符看作是语言的。VarExpression:根据变量的名称获取具体的值。终结符:在编程语言的上下文中,你可以把终结符看作是。Expression: 获取具体的值。

2023-07-31 11:09:49 56

原创 设计模式自用笔记 —— 备忘录模式

备忘录管理对象: RoleStateCaretaker:聚合备忘录,提供获取和设置备忘录的方法.用于备忘录的保存。游戏角色类: 发起人.通过new备忘录对象来保存角色状态及功能.通过读取备忘录可以复原角色状态.备忘录存储的是发起人【宽接口】的数据状态。管理者【窄接口】不能访问和修改备忘录。memento对象可以在任意地方被访问与修改.故引申出黑箱备忘录.,这样可以仅为发起人提供宽接口,对其他类提供窄接口.宽窄指的是能否看到和修改备忘录内的数据.备忘录类设置成游戏角色类的内部类。将备忘录角色作为宽接口.

2023-07-30 21:11:56 71

原创 设计模式自用笔记 —— 访问者模式

如果通过this指定出具体的变量,就可以在运行时决定应调用哪个方法。具体而言,在动物类中通过重写某方法实现动态分派;同时,在每个继承子类中,将Excute作为形成,通过this作为参数调用exectute的execute方法,实现后期绑定。==基于的原理就是this的指向是具体的,即当前子类。==访问者模式就实现了双分配。封装一些用于某种数据结构的各种元素的操作,它可以在不改变数据结构的前提下定义用于这些元素的新操作。Home: 对象结构角色。聚合所有的animal,并以person为参数进行喂食动作。

2023-07-30 17:37:58 68

原创 设计模式自用笔记 —— 迭代器模式

StudentIterator : 抽象迭代器StudentAggregate : 抽象聚合类,可有可无。主要是再封装一下迭代器,使其与添加、删除等功能放在一个类内。Student :StudentIeratorImpl : 具体迭代器角色类,聚合了List。StudentAggregateImpl :具体聚合类,可有可无。ArrayList就是一个具体聚合类。

2023-07-29 22:29:01 82

原创 设计模式自用笔记 —— 中介者模式

MeditorStructure: 具体中介者,聚合HouseOwner。某个对象与多个对象有关系。若修改该对象,其他对象也要跟着修改。HouseOwener: Teneat租房子:具体同事类。抽象同事类是个抽象类,需聚合中介者实现公共功能。中介者:负责注册和转发同事信息。Meditor: 抽象中介者。Person: 抽象同事类。同事和中介之间相互聚合。

2023-07-29 11:31:49 72

原创 设计模式 —— 观察者模式

抽象主题:就是发布者。发布者通过聚合抽象观察者的方式操作每个观察者。观察者就是订阅者。

2023-07-28 21:52:39 54

原创 设计模式 —— 状态模式

Context: 环境类。聚合LifeState,以实现具体的状态操作和初始化。聚合具体状态类的final static常量,以实现行为操作。LifeState:用来封装环境中特定的对象。Opening等4个具体状态类。不同的操作可以改变状态。

2023-07-28 20:19:46 47

原创 设计模式 —— 责任链模式

因为每个对象的处理权限不同,顺着请求链往下走直到遇到能够处理该请求的对象。

2023-07-28 14:53:52 88

原创 设计模式—— 命令模式

将命令发出者与命令接收者解耦,通过一个中间对象(命令类)来连接二者,命令类中实现命令接受方法与命令调用方法。Watiter:调用者,持有并调用多个Command。OrderComamd:具体命令类,继承抽象命令类。SeniorCheif: 执行者。Command:抽象命令类。执行者和Order订单。

2023-07-28 14:19:10 44

原创 设计模式 —— 策略模式

很常用!将职责与实现分离。

2023-07-28 11:19:32 51

原创 设计模式—— 模板方法模式

钩子方法:由抽象类声明并且实现,子类也可以选择加以扩展。通常抽象类会给出一个空的钩子方法,也就是没有实现的扩展。它和具体方法在代码上没有区别,不过是一种意识的区别;而它和抽象方法有时候也是没有区别的,就是在子类都需要将其实现的时候。而不同的是抽象方法必须实现,而钩子方法可以不实现。模板方法固定了基本方法的执行顺序,应该用final修饰,以禁止子类的重写。倒油、热油、翻炒是公用一致的,是具体方法。到蔬菜、倒调料品 是抽象方法。

2023-07-28 10:07:34 78 1

原创 设计模式——享元模式

在任何装箱操作时,都会尝试获取缓存作为Integer变量的指向。如果获取不到才会尝试去new一个Integer对象。jvm的众多池就是利用了享元模式。如串池、IntegerCache等。首先明确,这是两个截然不同的概念。所谓自动装箱是自动将int类型转变为Integer类型。,并在工厂中预先放置具体享元(HashMap存放),且不开放更改HashMap的接口。实际上自动装箱操作的底层都是调用valueOf方法。注意:装箱没有数值范围限制,任何范围都可以装箱。内部状态:抽象享元模式、具体享元。

2023-07-27 19:55:01 106 1

原创 设计模式 —— 组合模式

用于把一组相似的对象当成单一对象。它依据树形结构来组合对象,用来表示部分与整体层次。将整体(树枝节点)与部分(叶子节点)进行一致性对待。抽象根节点: MenuComponet(抽象类,将仅需要树枝节点实现的方法,设置为非抽象非法;都需要实现的方法,设置为抽象方法)叶子节点:MenuItem。

2023-07-27 19:18:46 66 1

原创 设计模式 —— 外观模式

一个大的on/off方法,调用所有的子系统角色的on/off方法,来实现所有子系统角色的统一的控制。又名门面模式,为多个子系统提供一个一致的接口。外部程序不用关心子系统的细节。

2023-07-27 16:05:59 57 1

原创 设计模式 —— 桥接模式

将抽象与实现分离,使其可以灵活变化。使用组合来代替继承关系来实现。抽象化角色: OperatingSystem,聚合了实现化角色。装饰者模式是主体与附加功能的解耦,桥接是抽象与具体的解耦。具体实现化角色:AVIFile,RMVB File.扩展抽象化角色:Windows、Mac。实现化角色: VideoFile.

2023-07-27 15:14:08 91 1

原创 设计模式笔记 —— 装饰者模式

【装饰者类聚合地目的是为了使用具体构建角色/继承地目的是为了让装饰者角色的父类的父类为抽象构建角色,从而抽象构建的变量也能够指向具体装饰者角色】 因此聚合是实现装饰者模式的核心。了FastFood(抽象类,抽象构建角色). FriedRice和noodles是具体构建角色,继承了FastFood。Egg和Bach是具体装饰角色,在不改变现有对象结构的情况下,动态地给对象增加一些额外功能。Garnish是装饰者类,它。

2023-07-27 10:28:50 94 1

原创 设计模式笔记 —— 适配器模式

StreamDecoder的作用是字节流转换为字符流,实现了字符流Reader接口,通过将适配者作为成员变量实现字节流的读取,并完成转换。(合成复用原则(Composite Reuse Principle,也称为组合/聚合复用原则)是面向对象设计中的一种指导原则,它主张在软件复用时,应优先使用组合或聚合关系实现,其次才考虑使用继承。这样,只能传入适配者类接口的调用者类就可以将该适配器类作为参数传入。通过适配者类将适配器类转换为目标接口。适配器类继承适配者类,实现目标类接口。的方式实现适配器类。

2023-07-26 22:25:50 94 1

原创 设计模式自用笔记 —— 代理模式

动态代理不需要定义代理类的.java源文件——>jdk运行期间动态创建class字节码并加载JVM——>代理对象在程序运行的过程中动态在内存构建,可以灵活的进行业务功能的切换。代理模式是在不修改目标对象(被代理对象)的基础上,通过代理对象(扩展代理类),进行一些功能的附加与增强——>静态代理是在不改变源代码的基础上增加新的功能。通过定义代理工厂,利用Proxy的newProxy方法,实现代理对象的创建。它不能代理final修饰的类\方法(final修饰的类不能有子类,final修饰的方法不能重新)

2023-07-26 18:57:11 63 1

原创 设计模式 —— 建造者模式

将对象的构建与表示分离。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。用户操作Direcor控制哪个builder创建对象,并返回对象。指导了哪个构建者构建产品。抽象类builder可以和director整合在一起,但违法单一职责原则。具体而言,就是通过在类中定义static final的内部类,通过链式编程来实现。在lombok中,直接.Builder.参数名(参数值)就可以使用。

2023-07-24 19:24:19 51

原创 设计模式 ——原型模式

Clonable就是抽象原型类。一个类实现Cloneable接口是为了向Object.clone()方法表明,该方法对该类的实例进行字段对字段的复制是合法的。通过序列化的方式可以实现深拷贝。也可以通过挨个实现成员对象的值拷贝实现深拷贝。java Object中的clone实现浅拷贝。以已经创建的对象作为原型,通过复制该原型对象。对于值数据类型,内容相同。对于值数据类型,内容相同。

2023-07-24 14:51:27 47

原创 设计模式自用笔记 —— 工厂模式

工厂方法模式真正实现了开闭原则,但是一个工厂只能建造一种类造成了容易发生类爆炸。故提出抽象工厂模式,它是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须要修改工厂类,加入必要的处理逻辑,这就违背了“开闭原则”。有多个类,它们(产品) 类似但有细微差别,并且可能不断有新的相似类被后续创建,如何优雅的管理这些类的创建呢?具体来说,就是在简单工厂的基础上再抽象一层,具体工厂是抽象工厂类的子类,由具体工厂实例化一种对象。

2023-07-24 13:48:37 72 1

原创 JVM自用笔记 —— 串池

String类由final修饰,故不可被继承。1.8及之前底层有private final char 数组存储数据;1.9及以后由private final byte数组存储数据。(StringBuffer和StringBuilder底层也做了同样的调整)。由于成员变量由final修饰,因此字符串对象具有不可变性。

2023-07-21 10:13:02 83 2

原创 JVM自用笔记 —— 执行引擎

执行引擎将字节码指令解释/编译为对应平台上的本地机器指令。

2023-07-19 19:26:53 71 1

原创 JVM自用笔记 —— 方法区

用于存储类的结构信息、常量、静态变量、即时编译器优化后的代码等数据的内存区域。方法区通过元空间实现。对于GC而言,较多的收集新生代,较少的收集老年代,几乎不动元空间。线程共享的区域。在虚拟机启动时被创建,是堆空间的逻辑上的一部分。该内存在物理上不连续,在逻辑上连续。方法区的大小可以固定或可扩展,该大小决定了系统可以保存多少个类。JDK7以前,习惯上把方法区称作永久代;JDK8以后,元空间取代了永久代。元空间相比永久代,不设置在虚拟机内存中,而使用本地内存。从而避免了永久代容易OOM的缺点。

2023-07-18 20:48:28 170 1

原创 JVM自用笔记——堆

几乎所有的对象实例和数组都应该在运行时分配到堆上。JVM启动时创建,一个jvm实例(一个进程)只有一个堆区,创建时便确定空间大小。堆的大小是可调节的。堆在物理上可以非连续,但是在逻辑上连续。但是不是所有堆空间都是线程共享的,还可以划分线程私有缓存区(TLAB)方法结束后,堆空间不会被立即回收,需要等待GC。

2023-07-14 16:36:26 199 1

原创 栈与队列总结

做栈的题目有一种玩消消乐的感觉。

2023-07-13 14:21:44 55 1

原创 设计模式自用笔记 —— 单例模式

创建者模式:处理对象创建的设计模式结构型模式:是软件设计模式中的一类,用于解决在系统中对象的组合和类之间的关系。这些模式关注如何通过将对象和类组合成更大的结构来实现灵活和可维护的系统。行为型模式:行为型模式(Behavioral patterns)是软件设计模式中的一类,用于处理对象之间的交互和职责分配。这些模式关注对象之间的通信和协作方式,以实现灵活和可复用的系统。

2023-07-12 19:37:52 90 1

原创 JVM自用笔记 —— 本地方法

本地方法就是一个调用非JAVA代码的接口。通过native关键字修饰,且没有方法体。

2023-07-11 19:53:28 139

原创 JVM自用笔记 —— 虚拟机栈

为了实现跨平台性,java的指令都是根据栈来设计的。

2023-07-11 19:16:00 130

原创 双指针与滑动窗口

滑动窗口的问题往往不同窗口之间存在公共前缀或者后缀的关系,为了避免重复运算,才会进行滑动窗口进行优化。本文试图总结滑动窗口与双指针的思想。因为二者实在太过类似,因此放在了同一篇总结文章中。双指针是解数组、链表题中最常见的思想之一。当然这个分类很主观,种类间也有思想重叠。

2023-07-07 15:17:31 337 1

原创 二分法与循环不变性

在螺旋矩阵系列题目中,深切地体现了发现循环不变性的重要性。这系列题目显然是简单地模拟题,但是如果不能有效地确定好每次循环所要处理的区间,将一团乱麻。

2023-07-07 13:48:32 70 1

空空如也

空空如也

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

TA关注的人

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