自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java集合源码-List、Set、Map系列——读懂源码,不背八股~

K key;V value;

2025-04-05 15:57:57 482

原创 数字与数学——常见面试算法题

在算法中,一般只会选择各个学科的基础问题来考察,例如素数问题、幂、对数、阶乘、幂运算、初等数论、几何问题、组合数学等等。

2025-04-05 14:25:14 504

原创 状态模式~

将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。状态模式的使用必然会增加系统类和对象的个数。状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。状态模式对"开闭原则"的支持并不太好 (添加新的状态类需要修改那些负责状态转换的源代码)。对象根据自身状态的变化来进行不同行为的操作时, 比如,购物订单状态。

2025-04-05 13:15:19 63

原创 MySQL体系架构

MySQL由 连接池、管理工具与服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。

2025-04-04 22:21:40 500

原创 MySQL系统库汇总

MySQL有4个系统数据库,这4个数据库包含了MySQL服务器运行过程中所需的一些信息以及一些运行状态信息。这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。其中包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些是一些描述性信息,称之为元数据。

2025-04-04 21:50:24 667

原创 搜索树——AVL、红黑树、B树、B+树

难度高,如果想要了解红黑树的增加、删除节点操作,一定要穷举画图理解!!!

2025-04-04 17:35:44 507

原创 字符串——面试考察高频算法题

给你一个字符串 s

2025-04-04 14:48:54 807

原创 责任链模式

降低了对象之间的耦合度该模式降低了请求发送者和接收者的耦合度。增强了系统的可扩展性可以根据需要增加新的请求处理类,满足开闭原则。增强了给对象指派职责的灵活性当工作流程发生变化,可以动态地改变链内的成员或者修改它们的次序,也可动态地新增或者删除责任。责任链简化了对象之间的连接一个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。责任分担。

2025-04-04 13:56:09 194

原创 策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。

策略类之间可以自由切换由于策略类都实现同一个接口,所以使它们之间可以自由切换。易于扩展增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“避免使用多重条件选择语句(if else),充分体现面向对象设计思想。客户端必须知道所有的策略类,并自行决定使用哪一个策略类。策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。策略模式使用场景一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。

2025-04-03 13:05:25 909

原创 位运算——面试前不看不会!

机器数:机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1;一个数在计算机中的二进制表示形式,叫做这个数的机器数。真值:将带符号位的机器数对应的真正数值称为机器数的真值。原码:即用第一位表示符号,其余位表示值反码:正数的反码是其本身,而负数的反码是在其原码的基础上,符号位不变,其余各个位取反。能保持加和减运算的统一正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1(即在反码的基础上+1)

2025-04-03 12:39:35 548

原创 MySQL 事务底层和高可用原理

MySQL底层原理之支撑事务的两类日志,通过深入此内容,会对MySQL事务相关的关键问题点有更透彻的认识!

2025-04-02 16:59:31 1121

原创 快速排序与归并排序

快速排序里的递归过程本质上就是二叉树的前序递归调用是 :通过一个标记pivot元素将n个元素的序列划分为左右两个子序列left和right,其中left中的元素都比pivot小,right的都比pivot的大。这样处理完之后pivot就在一个固定的位置了。然后再次对pivot左右两侧递归执行快速排序。上述过程是递归执行的,在将所有子区间排好序之后,整个序列就有序了。快速排序的时间复杂度计算比较麻烦一些。

2025-04-02 12:26:14 333

原创 二分查找与二叉树中序遍历——面试算法

始终保持nums1是较短的数组(减少边界处理)。递归或循环比较两个数组的k/2位置:排除较小元素的前半部分。更新k值(减去排除的数量)。处理边界(数组长度不足、k=1等)。通过不断排除不可能的部分,最终就能高效找到第k小的数啦!虽然细节有点多,但多举例子就能理解啦~ (๑•̀ㅂ•́)و✧。

2025-04-02 11:48:08 709

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

在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为模式。模板方法模式其结构中只存在父类与子类之间的继承关系。模板方法的作用主要是提高程序的复用性和扩展性:复用指的是,所有的子类可以复用父类中提供的模板方法代码扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。

2025-04-02 09:42:31 561

原创 观察者模式

观察者模式的优点降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。被观察者发送通知,所有注册的观察者都会收到信息【可以实现广播机制】观察者模式的缺点如果观察者非常多的话,那么所有的观察者收到被观察者发送的通知会耗时如果被观察者有循环依赖的话,那么被观察者发送通知会使观察者循环调用,会导致系统崩溃3 ) 观察者模式常见的使用场景当一个对象状态的改变需要改变其他对象时。比如,商品库存数量发生变化时,需要通知商品详情页、购物车等系统改变数量。一个对象发生改变时只想要发送通知,而不需要知道接收者是谁。

2025-04-01 23:08:20 925

原创 万字解析Spring简易版实现方案!

万字解析Spring简易版实现方案,IOC、DI、AOP、配置化解析等逐层递进;涉及多种设计模式,一篇教你会自己设计Spring!

2025-04-01 22:24:13 2090

原创 二叉树的深度优先经典问题——面试高频

二叉树的深度优先 面试经典问题

2025-03-31 22:18:50 400

原创 MySQL执行原理

 本文从单表查询时索引合并、连接查询执行原理、各类查询的成本、MySQL的执行优化原则多个维度学习MySQL的执行原理。

2025-03-31 11:33:52 967

原创 享元模式-用好有限资源

比如,使用 Integer.valueOf() 方法时,实际的代码实现中有一个叫 IntegerCache 的静态类,它就是一直缓存了 -127 到 128 范围内的数值,如下代码所示,你可以在 Java JDK 中的 Integer 类的源码中找到这段代码。如果不存在的话,则创建一个新的享元对象。抽象享元角色(Flyweight):通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)。

2025-03-31 08:49:04 252

原创 递归与非递归实现二叉树遍历

迭代方案实现二叉树的前中后序遍历。

2025-03-30 22:56:29 129

原创 外观模式(门面模式)

它对客户端屏蔽了子系统组件,减少了客户端所需要处理的对象数目,并使子系统使用起来更加的容易.通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少.它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可一个子系统的修改对其他子系统没有任何影响,而子系统内部变化也不会影响到外观对象.不能很好的控制客户端直接使用子系统类,如果客户端访问子系统类做太多的限制则减少了可变性和灵活性.

2025-03-30 16:29:13 858

原创 适配器模式——浅入浅出

将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,来实现,来实现。的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以些。

2025-03-30 16:21:03 266

原创 从全局观初步走进Redis

Redis是基于键值对的NoSQL数据库。使用C语言编写,支持网络、基于内存但支持持久化。Redis可以认为是两大维度和三大主线。缓存和集群是Redis 的两大广泛的应用场景。同时Redis 丰富的数据模型,就导致它有很多零碎的应用场景,很多很杂。而且,还有一些问题隐藏得比较深,只有特定的业务场景下(比如亿级访问压力场景)才会出现,所以同时还必须精通Redis的数据结构。

2025-03-30 16:05:38 859

原创 Mybatis整合Spring原理

配置文件中Mybatis集成到Spring中,进一步简化Mybatis的使用,所以只是封装并没有替换Mybatis中的核心。那么针对于Spring如何整合mybatis,我们要分析的对象还是那些:SqlSessionFactory、SqlSession、MapperProxy。那么,本文分析如下几个点,SqlSessionFactory在哪创建、SqlSession在哪创建,以及代理类在哪创建。

2025-03-30 13:57:03 696

原创 Mybatis源码 插件机制

插件是一种常见的扩展方式,大多数开源框架也都支持用户通过添加自定义插件的方式来扩展或者改变原有的功能,MyBatis中也提供的有插件,虽然叫插件,但是实际上是通过拦截器(Interceptor)实现的,在MyBatis的插件模块中涉及到责任链模式和JDK动态代理。

2025-03-29 16:28:51 571

原创 MyBatis基础模块-类型转换模块

MyBatis是一个持久层框架ORM框架,实现数据库中数据和Java对象中的属性的双向映射,那么不可避免的就会碰到类型转换的问题,在PreparedStatement为SQL语句绑定参数时,需要从Java类型转换为JDBC类型,而从结果集中获取数据时,则需要从JDBC类型转换为Java类型,所以我们来看下在MyBatis中是如何实现类型的转换的。因为我们在全局配置文件中指定了对应的别名,那么我们在映射文件中就可以简写我们的类型了,这样在解析映射文件时,我们同样也是需要做别名的处理的。

2025-03-29 15:33:00 524

原创 Mybatis源码-反射模块

JDBC优化时候,我们是可以通过反射和元数据来对相关的方法实现封装。在Mybatis中,参数处理与结果集映射等操作也使用了大量的反射操作。为了简化反射操作的相关代码,Mybatis提供专门的反射模块,将常见的反射行为做进一步封装,提供反射的API。那么,本文的研究内容就聚焦于Mybatis是如何实现反射模块的。整体的反射模块如图所示主要涉及到:Reflector、ReflectorFactory、Invoker、MetaClass、MetaObject。

2025-03-29 15:09:10 998

原创 Mybatis日志模块分析--适配器模式+代理模式

日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口也都不尽相同,为了统一这些工具,MyBatis定义了一套统一的日志接口供上层使用。

2025-03-29 13:18:32 467

原创 装饰器模式

本文以Mybatis源码中装饰器模式应用为例;对于扩展一个对象的功能,装饰模式比继承更加灵活,不会导致类的个数急剧增加可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为。

2025-03-29 12:25:22 790

原创 树——构造和遍历问题——面试专题

重点研究二叉树相关的算法题目,主要是层次遍历和深度优先遍历方面的问题。

2025-03-28 15:45:40 1074

原创 桥接模式——挺难拆分维度

虽然消息的行为比较统一,主要包括发送、接收、处理和回执,但其实具体客户端的实现通常却各不相同,比如,手机短信、邮件消息、QQ 消息、微信消息等。扩展抽象化(RefinedAbstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。桥接模式要求正确识别出系统中的两个独立变化的维度,因此具有一定的局限性,并且如果正确的进行维度的划分,也需要相当丰富的经验.抽象化(Abstraction)角色 :主要负责定义出该角色的行为 ,并包含一个对实现化对象的引用。

2025-03-28 14:16:56 351

原创 MySQL-事务与锁

本文将总结关于事务、事务隔离级别和数据库中的锁相关内容。

2025-03-28 11:29:45 700

原创 哈希和队列 互相实现 | n数之和 | 手撕LRU

哈哈,不知不觉今天就要结束了。本来想着梳理下关于AVL、红黑树方面的知识,感觉那些需要挺长时间啃的,不管了。来看看哈希与队列在面试算法中的高频考点。

2025-03-28 00:49:37 1008

原创 Mybatis缓存模块分析-源码

MyBatis作为一个强大的持久层框架,缓存是其必不可少的功能之一,Mybatis中的缓存分为一级缓存和二级缓存。但本质上是一样的,都是使用Cache接口实现的。缓存位于 org.apache.ibatis.cache包下。通过结构我们能够发现Cache其实使用到了装饰器模式来实现缓存的处理。“装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)。

2025-03-27 11:19:27 810

原创 代理模式(Proxy Design Pattern )-深入浅出

jdk代理和CGLIB代理:使用CGLib实现动态代理,CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,在JDK1.6之前比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的类或者方法进行代理,因为CGLib原理是动态生成被代理类的子类。

2025-03-27 10:17:59 1177

原创 MySQL-调优策略-SQL语句-超过20条建议!!

本文从SQL语句优化是否足够进行分析。

2025-03-26 10:59:50 976

原创 栈-常见考察面试算法题

栈,数据存储受限的线性表——插入和删除的操作只允许在一端进行。

2025-03-26 09:42:21 421

原创 数组&双指针———解决常见面试算法

给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。首先对整个数组实行翻转,例如 [1,2,3,4,5,6,7] 我们先将其整体翻转成[7,6,5,4,3,2,1]。最后将两个再次翻转就得到[5,6,7] 和[1,2,3,4],最终结果就是[5,6,7,1,2,3,4]数组中表示的数据可能是连续的,也可能是不连续的,如果将连续的空间标记成一个区间,就是新题目。

2025-03-26 00:23:17 819

原创 Mybatis核心工作原理(走进源码)

Mybatis核心流程,从源码入手

2025-03-25 14:46:11 1272

原创 从简单场景认识建造者模式

建造者模式除了上面的用途外,在开发中还有一个常用的使用方式,就是当一个类构造器需要传入很多参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用建造者模式进行重构。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指挥者类中对整体而言可以取得比较好的稳定性。建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。

2025-03-25 08:25:01 434

空空如也

空空如也

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

TA关注的人

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