自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

空杯

永远要对知识不知足

  • 博客(102)
  • 收藏
  • 关注

原创 十、方法调用的底层实现

Lambda 语言实际上是通过methodhanle方法句柄来完成的,大致这么实现(JVM 编译的时候使用 invokedynamic 实现 Lambda 表达式,invokedynamic的是使用 MethodHandle 实现的,所以 JVM 会根据你编写的 Lambda 表达式的代码,编译出一套可以去调用 MethodHandle 的字节码代码,参考实例类:MethodHandleDemo)句柄类型(MethodType)是我们对方法的具体描述,配合方法名称,能够定位到一类函数。

2023-12-28 22:21:52 874

原创 九、SPI详解

熟悉JDBC的都知道,在 jdbc 4.0之前,在使用 DriverManager 获取 DB 连接之前,我们总是需要显示的实例化 DB 驱动。try{// 注册 JDBC driver, 加载数据库驱动class// 获取连接// 执行一条sql// 数据解包// 根据列名获取列值// ...// ...} final {try {if (stmt!

2023-12-27 14:44:07 942

原创 八、类加载机制与类加载

ClassLoader 中的 loadClass 方法中的代码逻辑就是双亲委派模型:在自定义 ClassLoader 的子类时候,我们常见的会有两种做法,一种是重写 loadClass 方法,另一种是重写 findClass 方法。其实这两种方法本质上差不多,毕竟 loadClass 也会调用 findClass,但是从逻辑上讲我们最好不要直接修改 loadClass 的内部逻辑。建议的做法是只在 findClass 里重写自定义类的加载方法。

2023-12-26 23:33:04 1011

原创 七、Class文件结构及深入字节码指

不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础。Java 虚拟机不和任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机指令集和符号表以及若干其他辅助信息。任何一个 Class 文件都对应着唯一一个类或接口的定义信息,而且Class 文件实际上它并不一定以磁盘文件的形式存在(比如可以动态生成、或者直接送入类加载器中)。

2023-12-25 13:53:32 956

原创 六、ZGC深度剖析

停顿时间不超过10ms(JDK16已经达到不超过1ms)停顿时间不会随着堆的大小,或者活跃对象的大小而增加;也就是说,几十G堆的停顿时间是10ms以下,几百G甚至上T堆的停顿时间也是10ms以下支持8MB~4TB级别的堆,JDK15后已经可以支持16TB最糟糕的情况下吞吐量会降低15%。这都不是事,停顿时间足够优秀。至于吞吐量,通过扩容分分钟解决。

2023-12-11 11:44:04 1156

原创 五、HotSpot细节实现

问题:三色标记到底发生在什么阶段,替代了什么。并发标记。

2023-12-08 14:20:08 1234

原创 四、分代垃圾回收机制及垃圾回收算法

自动化的垃圾回收机制回收区域:堆:堆中的对象是垃圾回收的重点方法区/元空间:这一块也会发生垃圾回收,不过这块的效率比较低,回收 class,常量,静态常量,字符串常量池CMS 问题比较多,所以现在没有一个版本默认是 CMS,只能手工指定。但是它毕竟是第一个并发垃圾回收器,对于了解并发垃圾回收具有一定意义,所以我们必须了解。

2023-12-07 19:13:43 1461

原创 三、jvm中的对象及引用

检查加载-->分配内存-->内存空间初始化-->设置-->对象初始化。

2023-12-06 21:42:16 1020

原创 2.3、Bean的管理

创建应用组件之间的协作的行为通常称为装配(wiring)。Spring IOC通过应用上下文(ApplicationContext)装载Bean的定义并把他们组装起来。Spring应用上下文(ApplicationContext)全权负责对象的创建和组装。ApplicationContext是Spring IoC容器实现的代表,它负责实例化,配置和组装Bean。容器通过读取配置元数据获取有关实例化、配置和组装哪些对象的说明。配置元数据可以使用XML、Java注解或Java代码来呈现。

2023-06-26 00:23:51 918

原创 2.2、IOC容器的实现流程

Spring容器并不是只有一个。Spring自带多个容器实现,可以归位两种不同的类型。(1)Bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是简单的容器实现工厂,提供基本的DI支持。(2)应用上下文(由org.springframewor.context.ApplicationContext接口定义)基于BeanFactory构建,并提供应用框架级别的服务,例如从属性文件解析文本信息以发布应用事件给感兴趣的事件监听者。

2023-06-25 23:47:42 622

原创 java四大内置函数

Consumer、Supplier、Function、Predicate

2023-03-15 00:02:29 388

原创 (19)命令模式

命令模式

2022-07-21 00:10:42 168

原创 (18)责任链设计模式

责任链设计模式

2022-07-17 23:53:11 171

原创 (17)状态设计模式

状态设计模式

2022-07-17 20:38:18 92

原创 (16)观察者模式

观察者设计模式

2022-07-17 14:21:35 100

原创 (25)中介者模式

中介者设计模式

2022-07-11 23:37:09 86

原创 (24)解释器设计模式

解释器设计模式

2022-07-11 23:17:26 149

原创 (14)享元设计模式

享元设计模式

2022-07-11 00:50:35 101

原创 (13)桥接设计模式

桥接设计模式

2022-07-08 18:53:14 154

原创 (12)适配器模式

适配器设计模式

2022-07-07 11:06:53 164

原创 (11)组合设计模式

组合设计模式

2022-07-05 11:30:31 76

原创 (10)外观模式

门面模式

2022-07-04 11:33:02 100

原创 (7)原型模式

原型设计模式

2022-06-30 22:14:47 643

原创 (5)建造者模式

建造者设计模式

2022-06-29 23:32:51 226

原创 (1)设计模式概念及分类

设计模式概念

2022-06-29 23:18:31 106

原创 (4)抽象工厂模式

一、概念简单工厂模式和工厂模式,不管工厂怎么拆分抽象,都只是针对一类产品Phone(AbstractProduct),如果要生成另一种产品PC,比如小米电脑,苹果电脑应该怎么表示呢?最简单的方式是把工厂方法模式完全复制一份,不过这次生产的是PC。但同时也就意味着我们要完全复制和修改Phone生产管理的所有代码,显然这是一个笨办法,并不利于扩展和维护。抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的......

2021-12-19 16:53:58 275

原创 String底层解析

String解析

2021-12-18 19:07:46 1868

原创 类变量和实例变量的区别是什么?

类变量也叫静态变量,也就是在变量前加了static 的变量;实例变量也叫对象变量,即没加static 的变量;区别在于: 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;调用类变量可以用对象和类名调用;实例变量只能用对象调用;存储类变量存储与方法区的常量...

2021-12-17 16:34:14 346

原创 XML解析

1.什么是XML,作用是什么可扩展标记语言(Extensible Markup Language ),XML是一种数据格式,类似 HTML,是使用标签进行内容描述的技术,与HTML不 同的是,XML的标签和属性 都是根据业务需求自定义的。XML在企业开发中主要有两种应用场景:1)XML可以作为数据交换的载体,也就是说使用XML格式进行数据的传输2)XML可以作为配置文件的载体。2.如何去写一个XML(重点)XML的编...

2021-11-11 23:40:52 1209

原创 (26)委托模式

一个对象接收到了请求,但是自己不处理,交给另外的对象处理,就是委托模式,例如 老板接到了活,然后把活转手给了工人去做。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承。不属于 23 种设计模式之一,是面向对象设计模式中常用的一种模式。特点:持有被委托人的引用,不关心过程,只关心结果......

2021-11-11 17:57:03 246

原创 (15)模版方法设计模式

模板设计模式—基于抽象类的,核心是封装算法

2021-11-11 15:42:00 500

原创 JDK8-方法引用

我们用Lambda表达式来实现匿名方法。但有些情况下,我们用Lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作,在这种情况下,我们倾向于通过方法名来调用它,而Lambda表达式可以帮助我们实现这一要求,它使得Lambda在调用那些已经拥有方法名的方法的代码更简洁、更容易理解。方法引用可以理解为Lambda表达式的另外一种表现形式。方法引用可以使语言的构造更紧凑简洁,减少冗余代码。方法引用通过方法的名字来指向一个方法。 方法引用使用...

2021-07-19 23:36:11 172

原创 并发工具类之CountDownLatch

一、概念闭锁或叫发令枪,CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。CountDownLatch 是通过一个计数器来实现的,计数器的初始值为初始任务的数量。每当完成了一个任务后,计数器的值就会减1(CountDownLatch.countDown()方法)。当计数器值到达 0 时,它表示所有的已经完成了任务,然后在闭锁上等待 CountDownL...

2021-07-15 23:48:15 215

原创 并发工具类之Fork-Join

一、分而治之思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。策略:对于一个规模为 n 的问题,若该问题可以容易地解决(比如说规模 n 较小)则直接解决,否则将其分解为 k 个规模较小的子问题,这些子问题互相独立且与原问题形式相同(子问题相互之间有联系就会变为动态规划算法),递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。举例:归并排序(降序图示)该算法是采用分治法的...

2021-07-15 16:42:01 348

原创 JDK8 - Lambda表达式

我的理解匿名实现类的简写,也可以称为闭包例:类型 变量 = (参数类型 param1, 参数类型 param2 ...)->{实现};Lambda表达式只能引用标记了final的外层局部变量,这就是说不能在lambda内部修改定义在域外的局部变量,否则会编译错误。可以直接在 lambda 表达式中访问外层的局部变量,lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)

2021-07-13 13:34:29 734

原创 一、JVM内存分布

一、JVM(Java Virtual Machine)基础知识JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。1、java程序的运行过程java文件通过javac命令编译成.class字节码文件,然后JVM将其加载到方法区(jdk7以及之前叫永久代,jdk8叫元空间),JVM执行引擎会将字节码翻译成机器码,操作系统...

2021-07-12 11:35:54 771

原创 Git 入门概念

概念Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 与 SVN 区别Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。区别:Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。 Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统.

2021-03-17 18:32:26 100

原创 3.spring依赖注入(DI)

IoC与DI区别同一件事,站在不同角度上看待问题的不同描述IoC:Spring立场DI:应用程序立场 什么是依赖?既java对象的引用 通过DI,对象的依赖关系将由系统中负责协调各个对象的第三方组件(spring的容器)在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系。指应用程序依赖Spring为其提供运行时所需的资源 依赖DI依赖注入带来的最大的收益就是松耦合,配置方式,第一种是xml,第二种是java描述配置 什么叫装配?创建应用组件之间的...

2021-03-09 22:19:17 284

原创 2.1、IOC容器和Bean的介绍

spring实战第4版阅读总结1.依赖注入(DI)DI所带来的最大收益---松耦合配置方式,第一种是xml,第二种是java描述配置2.面向切面编程(AOP)DI能够让相互协作的软件组件保持松散耦合,而面向切面编程允许你把遍布应用各处的功能分离出来形成可重用的组件3.spring容器spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联spri...

2021-01-17 22:19:52 494 1

原创 1、Spring介绍

spring是一个开源的框架,底层Java实现,spirng的目标简化java开发为了降低java开发的复杂性,spring采取一下4种关键策略基于pojo的轻量级和最小侵入性编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模版减少样板式代码Spring的优良特性① 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API② 依赖注入:DI——Dependency Injection,反转控制(IOC)最经典的实现。③...

2021-01-17 20:34:19 137

空空如也

空空如也

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

TA关注的人

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