- 博客(126)
- 资源 (2)
- 收藏
- 关注

原创 Spring Bean的生命周期
Bean 的创建过程1. 生成BeanDefinition2.合并BeanDefinition3.加载类4.实例化前5.实例化5.1 Supplier 创建对象5.2 工厂方法创建对象5.3 推断构造方法6. BeanDefinition 的后置处理7.实例化后8.自动注入9.处理属性10. 执行部分 Aware11. 初始化前12. 初始化13. 初始化后Bean 的销毁过程判断是否属于 DisposableBean销毁过程
2022-10-25 17:41:24
1024

原创 DockerFile
文章目录DockerFileDockerFIle 介绍DockerFile 构建DockerFile 指令实操写DockerFile创建一个centos构建一个Tomcat镜像发布自己的镜像DockerHub阿里云镜像服务DockerFileDockerFIle 介绍dockerfile是用来构建docker镜像的文件!命令参数脚本。构建步骤:编写一个dockerfile文件docker build 构建成一个镜像docker run 运行镜像docker push 发布镜像(Docker
2022-03-30 21:02:42
1447
1

原创 JUC并发编程 进阶
Java JUC 并发编程进阶 笔记1.线程与进程2.Lock锁3.8锁现象4.多线程安全的集合5.Callable6.读写锁7.阻塞队列8.线程池9.函数式接口10.Stream流式计算11.ForkJoin12.异步回调13.JMM14.Volatile15.单例模式深究16.CAS17.原子引用18.常见锁
2022-03-06 11:45:54
993

原创 Java集合 HashMap 源码分析
HashMap介绍HashMap是Map接口使用频率最高的实现类HashMap是以key-val对的方式来存储数据(HashMap$Node)key不能重复,但是值可以重复,允许使用null键和null值如果添加相同的key,则会覆盖原来的key-val,等同于修改(key不会替换,val会替换)与HashSet一样不保证映射的顺序,因为底层是以hash表的方式来存储的(jdk8 数组+链表+红黑树)HashMap没有实现同步,线程不安全(线程安全的是ConcurrentHashMap)扩
2021-11-04 22:18:28
274

原创 编译原理 LL1文法分析器 实验二 (详细代码) 左递归&First&Follow&Select&预测分析表
LL(1)分析器 实验二实验要求简单要求:至少做到对下列已知的文法,用LL(1)分析法对任意输入的符号串进行分析:(1)E->TG(2)G->+TG(3)G->ε(4)T->FS(5)S->*FS(6)S->ε(7)F->(E)(8)F->I高要求:1、手动输入文法2、显示文法的非终结符的Follow集3、显示规则的可选集合3、构造预测分析表4、对任意输入的符号串进行分析记号和规定空串:$符号栈终止符:#规定第一个产
2021-10-20 10:51:20
4143
2
转载 彻底弄清:mvn编译正常,idea编译报错的问题
例如,如果项目是一个jar文件,那么当打包并将其放置在目标目录的某个位置(默认情况下)时,它将创建一个jar文件。idea打开的git项目,前几天还没有任何问题,今天在打开发现还多类找不到,一排查发现包不是最新的,mvn clean install能编译通过,但是,idea编译不通过。-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
2023-11-15 14:31:13
1119
原创 Spring 的简单模拟实现
Spring源码学习,进行简单模拟实现,一步步搭建。1. ComponentScan2. Scope3. Autowired 依赖注入4. BeanDefinition5. InitializingBean6. BeanPostProcessor7. Aware
2022-09-06 22:56:26
512
原创 Netty
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端注意:如果使用传统NIO,其工作量大,bug 多Netty 对 API 进行增强,使之更易用,如二、入门案例1、服务器端代码2、客户端代码3、运行流程左:客户端 右:服务器端channel 可以理解为数据的通道msg 理解为流动的数据,最开始输入是 ByteBuf,但经过 pipeline 中的各个 handler 加工,会变成其它类型对象,最后输出又变成 ByteBufhandler 可以理解
2022-07-27 17:25:54
378
原创 红黑树详解
有了二叉搜索树,为什么还需要平衡二叉树?二叉树容易退化成一条链此时查询的时间复杂度也由O(log2N)将退化成O(N)而平衡二叉树对左右子树高度差有限制,保证最坏的时间复杂度为O(log2N)有了平衡二叉树,为什么还要红黑树?AVL的左右子树高度差不能超过1,每次进行插入/删除操作时,几乎都需要通过旋转操作保持平衡在频繁进行插入/删除的场景中,频繁的旋转操作使得AVL的性能大打折扣红黑树通过牺牲严格的平衡,换取插入/删除时少量的旋转操作,整体性能优于AVL2N)时间内完成查找操作。...
2022-07-27 17:07:47
830
原创 AVL树(平衡搜索树)
AVL树是由GMAdelson-Velsky和EMLandis于1962年发明的。为了纪念其发明者,这树结构被命名为AVL。AVL树可以定义为高度平衡二叉搜索树,其中每个节点与平衡因子相关联,该平衡因子通过从其左子树的子树中减去其右子树的高度来计算。如果每个节点的平衡因子在-1到1之间,则称树是平衡的,否则,树将是不平衡的并且需要平衡。平衡系数(k)=高度(左(k))-高度(右(k))如果任何节点的平衡因子为1,则意味着左子树比右子树高一级。算法平均情况最坏情况空间O(n)...
2022-07-27 14:44:34
879
转载 Redis实现分布式锁
分布式锁是控制分布式系统不同进程共同访问共享资源的一种锁的实现。不同主机之间共享了某个临界资源,往往需要通过互斥防止彼此干扰,保证一致性。分布式锁特征互斥任意时刻,只能有一个客户端持有锁锁超时释放防止不必要的资源浪费,避免死锁可重入性一个线程获取锁后,可以再次对其请求加锁高性能和高可用加锁解锁开销尽量小,同时保证高可用,避免分布式锁失效安全性锁只能被持有的客户端删除,不可以被其他客户端删除。...
2022-07-27 10:17:33
182
原创 设计一个线程池
线程池使用了池化技术,将线程存储起来放在一个“池子”中,有任务时由空闲线程进行处理,处理完成后可用复用。若线程不足可以动态增加,线程空闲时间过长可以销毁。Java的线程池思想将任务提交与任务执行解耦。用户无需关心如何创建线程,如何调度线程里执行任务。用户只需要提供Runnable对象,由线程池执行器来完成线程的调配和任务的执行。...
2022-07-24 11:47:00
499
原创 python 多继承中方法的调用顺序
python支持多继承,如果子类没有重写方法,则默认会调用父类的方法。如果重写了则不会调用父类的,但是可以通过显示调用。这里通过来展示python在多继承中,方法的调用顺序。执行结果可以通过以上结果推断,python中类方法的执行顺序是通过 打印继承顺序...
2022-06-14 09:11:03
3692
原创 Git介绍以及Git的安装
对Git背景进行简单的介绍讲述了 集中式 与 分布式 两种版本控制工具,Git属于分布式版本控制工具Git的工作机制:工作环境->暂存区->本地仓库->远程仓库Git的安装过程(Windows 64)
2022-04-18 20:28:57
216
原创 设计模式-解释器模式
解释器模式解释器模式介绍定义给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。 用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。优点扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。缺点执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行
2022-04-16 11:21:37
143
原创 设计模式-备忘录模式(快照模式)
备忘录模式(快照模式)备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。备忘录模式介绍定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。优点提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部
2022-04-15 19:15:35
495
原创 设计模式-访问者模式
访问者模式访问者模式介绍定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。 它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。优点扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。灵活性好。访问者模式将数据结构与作用于结构上的操作解耦,使
2022-04-14 22:38:19
140
原创 设计模式-迭代器模式
迭代器模式设计模式介绍在日常开发中,我们几乎不会自己写迭代器。除非需要定制一个自己实现的数据结构对应的迭代器,否则,开源框架提供的 API 完全够用。定义提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。优点访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口。
2022-04-14 20:27:53
329
原创 设计模式-中介者模式
中介者模式中介者模式介绍定义**定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。**中介者模式又叫调停模式,它是迪米特法则的典型应用。优点将各同事对象解耦,使得对象易于独立地被复用减少子类的生成,中介者将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成新的中介者子类即可,这使得各个同事类可以被重用,无需对同事类扩展将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。应用场景事件驱
2022-04-13 22:43:07
269
原创 设计模式-观察者模式(发布-订阅模式)
观察者模式观察者模式介绍定义指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。优点降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。应用场景对象间存在一对多关系,一个对象的状态发生改变会影响其他对象。当一个抽象模型有两个方面,其中一个方面依赖于另一方面时,可将这二者封装在独立的对象中以使它
2022-04-12 23:53:44
334
原创 设计模式-状态模式
状态模式当控制一个对象状态转换的条件表达式过于复杂时,把相关“判断逻辑”提取出来,用各个不同的类进行表示,系统处于哪种情况,直接使用相应的状态类对象进行处理,这样能把原来复杂的逻辑判断简单化,消除了 if-else、switch-case 等冗余语句,代码更有层次性,并且具备良好的扩展力。做同样的事情,不同意的状态下,有不同的表现行为!状态模式介绍定义对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。优点结构清晰,状态模式将与特
2022-04-12 22:11:16
272
原创 设计模式-职责链模式(责任链模式)
职责链模式将一系列类似却职责不全相同的对象 像链表一样 链接起来,当有一个请求,需要找能处理请求的处理对象,针对每一个请求如果都需要记住能处理它的对象是非常麻烦的,于是可以通过这条职责链,一路暴力寻找,知道找到能处理它的对象为止。这样用户无需记住很多对象,只需要把请求交给职责链即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了。职责链模式介绍定义为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个
2022-04-12 17:14:00
577
原创 设计模式-命令模式
命令模式不直接操作接收者,而是通过下发命令来间接操作接收者命令模式介绍定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。 这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。优点扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。方便实现 Undo 和 Redo 操作。命令模式可以与备忘录模式结合,实
2022-04-12 14:08:44
479
原创 排序算法-基数排序
基数排序(Radix Sort)基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。算法描述取得数组中的最大数,并取得位数;(位数决定轮次)arr为原始数组,从最低位开始取每个位组成radix数组;对radix进行计数排序(利用计数排序适用于小范围数的特点);动图演示代码实现非负整数基数排序时间复杂度 O(n * ma
2022-04-12 11:33:09
310
原创 设计模式-策略模式
策略模式策略模式介绍定义**定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。**策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。优点策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。策略模式提供了对开闭原则的完美支持,可以在不
2022-04-12 09:13:10
349
原创 设计模式-模板方法模式
模板方法模式将一些固定流程创建一个模板,比如word模板、ppt模板、简历模板等。确定大致行为流程,具体行为内容交给实现类来实现。还可以通过钩子方法,在实现类中决定抽象类的执行行为!!!模板方法模式介绍定义定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 它是一种类行为型模式。优点模板模式定义好了执行顺序,具体的实现交给子类负责,子类无需关心执行顺序套用模板,代码复用反向控制,通过父类调用子类操作,扩展子类
2022-04-11 17:15:32
617
原创 设计模式-组合模式(整体-部分模式)
组合模式(整体-部分模式)组合模式介绍定义将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性优点[透明组合模式]用户可以一致的处理单个对象和组合对象,不需要辨别是树枝还是树叶,非常便利可以任意组合,无限嵌套组件,组合成用户需要的组件!符合开闭原则,便于添加新的组件应用场景在需要表示一个对象整体与部分层次结构的场合需要对用户隐藏组合对象与单个对象的不同,用户可以使用[透明组合模式]统一的接口应对所有对象场合。组
2022-04-11 11:23:53
358
原创 设计模式-享元模式
享元模式享元模式介绍定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。优点如果系统有大量类似的对象,开会节省大量的内存及CPU资源典型案例String、Integer、Long…com.sun.org.apache.bcel.internal.generic.InstructionConstants享元模式结构与实现其实享元模式好比 工厂方法模式 和 单例模式 的结
2022-04-11 10:20:53
159
原创 设计模式-外观模式(门面模式)
外观模式(门面模式)外观模式介绍定义通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。好比我们去封装工具类。优点简化客户端的调用代码复用,整合应用场景需要使用复杂的子系统,但想避免重复且复杂的调用过程子系统需要组织成层结构时经典案例org.apache.catalina.connector.RequestFa
2022-04-10 22:16:50
538
原创 设计模式-装饰器模式
装饰器模式装饰器模式介绍定义指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。优点不改变原有对象,扩展对象功能使用不同的组合可以实现不同效果符合开闭原则应用场景扩展一个类的功能或给一个类添加附加职责经典案例Servlet装饰器模式结构与实现具体的装饰器角色可以相互嵌套!!一层层装饰!!结构抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件(Conc
2022-04-10 20:37:33
430
Java面试汇总.pdf
2021-11-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人