自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (3)
  • 收藏
  • 关注

原创 Spring源码系列-第2章-后置工厂处理器和Bean生命周期

*** @param bean the new bean instance 正在创建的bean的实例* @param beanName the name of the bean 该bean的名称返回的bean是包装过后的bean*/ /*** 这个方法是BeanPostProcessor接口中的一个方法,* 用于在bean初始化回调之前(如InitializingBean的afterPropertiesSet或自定义init-method),

2023-07-12 19:53:51 743

原创 Spring源码系列-第1章-Spring源码纵览

Spring源码纵览这一节,主要是先了解下Spring的一些核心东西,所以前后可能关联不是特别深,跳跃性比较大,往后看就行。环境类的意思就是谁持有这个策略;这里就解释了上文说ResourceLoader是环境类接口(怎么会冒出来一句这样的话?为了解释环境类是什么?// 策略模式的环境类 private ResourcePatternResolver resourcePatternResolver;

2023-07-10 18:31:39 738 5

原创 HashMap-JDK8源码讲解及常见面试题

在JDK8中,优化了HashMap的数据结构,引入了红黑树。即HashMap的数据结构:数组+链表+红黑树。HashMap变成了这样。

2023-07-06 08:36:03 313

原创 java开发必备技能之Java泛型

​ Java的泛型是伪泛型,为什么说Java的泛型是伪泛型呢?因为在编译期间,所有的泛型信息都会被擦除掉,我们常称为泛型擦除。​ Java中的泛型基本上都是在编译器这个层次来实现的,在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,编译器在编译的时候去掉,这个过程就称为类型擦除。​ 如在代码中定义的和等类型,在编译后都会编程List,JVM看到的只是List。而由泛型附加的类型信息对JVM来说是不可见的。

2023-07-01 14:07:51 265

原创 java开发必备技能之Spring常用注解(重点)

(结合上面ComponentScans value值看)/*** metadataReader:读取到的当前正在扫描的类的信息* metadataReaderFactory:可以获取到其他任何类信息的//获取当前类注解的信息 AnnotationMetadata annotationMetadata = metadataReader . getAnnotationMetadata();

2023-06-28 20:13:30 244

原创 设计模式-05.01-行为型-观察者&模板

EventBus 翻译为“事件总线”,它提供了实现观察者模式的骨架代码。我们可以基于此框架,非常容易地在自己的业务场景中实现观察者模式,不需要从零开始开发。其中,Google Guava EventBus 就是一个比较著名的 EventBus 框架,它不仅仅支持异步非阻塞模式,同时也支持同步阻塞模式现在,我们就通过例子来看一下,Guava EventBus(可以简单了解一下,但也可直接略过)具有哪些功能。

2023-06-27 09:35:56 639

原创 设计模式-05.02-行为型-策略&职责链

策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。// 具体的算法... } } public class ConcreteStrategyB implements Strategy {// 具体的算法... } }

2023-06-26 19:38:22 546

原创 设计模式-04.01-结构型-代理&桥接&装饰器&适配器

原理和实现讲完了,都不复杂。我们再来看,到底什么时候会用到适配器模式呢?一般来说,适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式算是“无奈之举”。如果在设计初期,我们就能协调规避接口不兼容的问题,那这种模式就没有应用的机会了。前面我们反复提到,适配器模式的应用场景是“接口不兼容”。那在实际的开发中,什么情况下才会出现接口不兼容呢?我建议你先自己思考一下这个问题,然后再来看下面的总结。

2023-06-20 09:16:47 1143

原创 如何学好计算机专业,不然毕业及失业

开始计算机相关专业的学习。作为已经工作了十来年的前辈,我想分享一些经验和建议,希望在学习编程时对你们有所帮助。

2023-06-14 16:04:40 846

原创 Java中的动态链接VS操作系统动态链接

在操作系统OS中为了优化内存的使用会采用一种动态链接方式,一个文件想要在操作系统中运行必须经过编译、汇编译、链接、装载等步骤。可以参考Java程序是怎么跑起来的。本篇主要讲解Java栈帧中动态链接部分与操作系统的的动态链接的区别与联系。

2023-06-13 10:32:43 622

原创 设计模式-03.02-创建型-工厂&建造者&原型

讲完了简单工厂、工厂方法,我们再来看抽象工厂模式。抽象工厂模式的应用场景比较特殊,没有前两种常用,所以不是我们学习的重点,你简单了解一下就可以了。在简单工厂和工厂方法中,类只有一种分类方式。比如,在规则配置解析那个例子中,解析器类只会根据配置文件格式(Json、Xml、Yaml……)来分类。但是,如果类有两种分类方式,比如,我们既可以按照配置文件格式来分类,也可以按照解析的对象(Rule 规则配置还是 System 系统配置)来分类,那就会对应下面这 8 个 parser 类。

2023-06-10 18:18:43 948 1

原创 设计模式-03.01-创建型-单例

23 种经典的设计模式。它们又可以分为三大类:创建型、结构型、行为型。对于这 23 种设计模式的学习,我们要有侧重点,因为有些模式是比较常用的,有些模式是很少被用到的。对于常用的设计模式,我们要花多点时间理解掌握。对于不常用的设计模式,我们只需要稍微了解即可。按照类型和是否常用,对这些设计模式,进行了简单的分类,具体如下所示。

2023-06-08 09:37:27 687

原创 设计模式-02.经典设计原则-第二节[必读]

前面讲了控制反转、依赖注入、依赖注入框架,现在,我们来讲一讲今天的主角:依赖反转原则。依赖反转原则的英文翻译是 Dependency Inversion Principle,缩写为 DIP。中文翻译有时候也叫依赖倒置原则。

2023-06-07 19:17:09 258

原创 设计模式-02.经典设计原则-第一节[必读]

单一职责原则,开闭原则,里式替换原则

2023-06-06 09:45:20 277

原创 设计模式-01.设计思想

看了刚刚的讲解,你可能会有这样的疑问:为了满足这条原则,我是不是需要给每个实现类都定义对应的接口呢?在开发的时候,是不是任何代码都要只依赖接口,完全不依赖实现编程呢?做任何事情都要讲求一个“度”,过度使用这条原则,非得给每个类都定义接口,接口满天飞,也会导致不必要的开发负担。至于什么时候,该为某个类定义接口,实现基于接口的编程,什么时候不需要定义接口,直接使用实现类编程,我们做权衡的根本依据,还是要回归到设计原则诞生的初衷上来。

2023-06-04 22:31:59 586

原创 Java并发体系-第四阶段-AQS源码解读(有时间就了解一下)

调用unpark(thread)方法后,就会将thread线程的许可permit设置成1(注意多次调用unpark方法,不会累加,permit值还是1)会自动唤醒thread线程,即之前阻塞中的LockSupport.park()方法会立即返回。permit默认是0,所以一开始调用park()方法,当前线程就会阻塞,直到别的线程将当前线程的permit设置为1时,park方法会被唤醒,然后会将permit再次设置为0并返回。permit只有两个值1和零,默认是零。permit相当于1,0的开关,默认是0,

2023-06-04 09:44:40 221

原创 Java并发体系-第三阶段-JUC并发包-[2]-CompleableFuture,SynchronousQueue

java7中引入了一种新的可重复使用的同步屏障,称为移相器Phaser。Phaser拥有与和类似的功能.但是这个类提供了更加灵活的应用。CountDownLatch和CyclicBarrier都是只适用于固定数量的参与者。移相器适用于可变数目的屏障,在这个意义上,可以在任何时间注册新的参与者。并且在抵达屏障是可以注销已经注册的参与者。因此,注册到同步移相器的参与者的数目可能会随着时间的推移而变化。

2023-06-02 18:58:15 608

原创 Java并发体系-第三阶段-JUC并发包-[1]

StampedLock,ReadWriteLock,Condition,Semaphore,ReentrantLock,CyclicBarrier,CountDownLatch

2023-06-02 10:23:08 264

原创 Java并发体系-第二阶段-锁与同步-[3](仅做了解吧不好理解)

字面意思就是锁记录。通过对Java对象头的介绍可以看到锁信息也是存在于对象的mark word中的。当对象状态为偏向锁(biasable)时,mark word存储的是偏向的线程ID;当状态为轻量级锁(lightweight locked)时,mark word存储的是指向线程栈中的指针;当状态为重量级锁(inflated)时,为指向堆中的monitor对象的指针。

2023-05-29 20:24:52 367

原创 Java并发体系-锁与同步-[2]

1、为了实现MESI协议,有两个配套的专业机制要给大家说一下:flush处理器缓存、refresh处理器缓存。flush处理器缓存,他的意思就是把自己更新的值刷新到高速缓存里去(或者是主内存),因为必须要刷到高速缓存(或者是主内存)里,才有可能在后续通过一些特殊的机制让其他的处理器从自己的高速缓存(或者是主内存)里读取到更新的值除了flush以外,他还会发送一个消息到总线(bus),通知其他处理器,某个变量的值被他给修改了。

2023-05-26 10:07:28 976

原创 Java并发体系-锁与同步-[1]

冯诺依曼,提出计算机由五大组成部分,输入设备,输出设备,存储器,控制器,运算器。输入设备:鼠标,键盘等等输出设备:显示器,打印机等等存储器:内存条运算器和控制器组成CPU一方面,程序员需要JMM提供一个强的内存模型来编写代码;另一方面,编译器和处理器希望JMM对它们的束缚越少越好,这样它们就可以最可能多的做优化来提高性能,希望的是一个弱的内存模型。JMM考虑了这两种需求,并且找到了平衡点,对编译器和处理器来说,

2023-05-25 19:10:49 608

原创 JVM系列-第12章-垃圾回收器

垃圾收集机制是Java的招牌能力,极大地提高了开发效率。这当然也是面试的热点。那么,Java常见的垃圾收集器有哪些?截止JDK1.8,一共有7款不同的垃圾收集器。每一款的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器(重点记忆图)。

2023-05-24 09:21:09 1907

原创 JVM系列-第11章-垃圾回收相关概念

1、一般的垃圾回收算法至少会划分出两个年代,年轻代和老年代。但是单纯的分代理论在垃圾回收的时候存在一个巨大的缺陷:为了找到年轻代中的存活对象,却不得不遍历整个老年代,反过来也是一样的。2、如果我们从年轻代开始遍历,那么可以断定N, S, P, Q都是存活对象。但是,V却不会被认为是存活对象,其占据的内存会被回收了。这就是一个惊天的大漏洞!因为U本身是老年代对象,而且有外部引用指向它,也就是说U是存活对象,而U指向了V,也就是说V也应该是存活对象才是!而这都是因为我们只遍历年轻代对象!

2023-05-22 09:48:39 538 1

原创 JVM系列-第10章-垃圾回收概述和相关算法(JVisualVM)

垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。外文:An object is considered garbage when it can no longer be reached from any pointer in the running program.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。十几年前磁盘碎片整理的日子。

2023-05-19 13:45:07 449

原创 JVM系列-第9章-StringTable(字符串常量池)

String被声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了用于存储字符串数据。JDK9时改为byte[]

2023-05-16 09:59:16 395

原创 JVM系列-第8章-执行引擎

解释器:当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行。JIT(Just In Time Compiler)编译器:就是虚拟机将源代码一次性直接编译成和本地机器平台相关的机器语言,但并不是马上执行。(没有明白,感觉两个是一样的东西?(我的理解:解释器是把源码解释成执行引擎能识别的指令(和操作系统能执行的指令还是有区别的),及时编译器是直接把源码编译成操作系统能执行的指令,我理解对了没有。。。

2023-05-12 09:26:15 551

原创 JVM系列-第7章-对象的实例化内存布局与访问定位

① 加载类元信息 - ② 为对象分配内存 - ③ 处理并发问题 - ④ 属性的默认初始化(零值初始化) ⑤ 设置对象头的信息 - ⑥ 属性的显式初始化、代码块中初始化、构造器中初始化① 属性的默认初始化 - ② 显式初始化 - ③ 代码块中初始化 - ④ 构造器中初始化从字节码角度看 init 方法/*** 测试对象实例化的过程* ① 加载类元信息 - ② 为对象分配内存 - ③ 处理并发问题 - ④ 属性的默认初始化(零值初始化)

2023-05-11 09:16:51 380

原创 JVM系列-第6章-方法区

不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区/*** 查看直接内存的占用与释放。

2023-05-10 09:34:43 666

原创 JVM系列-第5章-堆(JVisualVM)

从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为快速分配策略。据我所知所有OpenJDK衍生出来的JVM都提供了TLAB的设计。1、每个线程都有一个TLAB空间2、当一个线程的TLAB存满时,可以使用公共区域(蓝色)的。

2023-05-08 09:19:30 1192

原创 第4章-虚拟机栈(多使用到jclasslib工具查看字节码)

栈顶缓存技术:Top Of Stack Cashing前面提过,基于栈式架构的虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然需要使用更多的入栈和出栈指令,这同时也就意味着将需要更多的指令分派(instruction dispatch)次数(也就是你会发现指令很多)和导致内存读/写次数多,效率不高。由于操作数是存储在内存中的,因此频繁地执行内存读/写操作必然会影响执行速度。为了解决这个问题,HotSpot JVM的设计者们提出了栈顶缓存(Tos,Top-of-Stack Cashing)技术,

2023-05-04 10:07:13 419

原创 第3章-运行时数据区

本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区加载 --> 链接–> 初始化类比一下也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品。

2023-04-25 09:51:27 401

原创 第2章-类加载子系统

英文版中文版注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器执行引擎System . out . println("你的大恩大德,我下辈子再报!");} }它的加载过程是怎么样的呢?执行 main() 方法(静态方法)就需要先加载main方法所在类 HelloLoader加载成功,则进行链接、初始化等操作。完成后调用 HelloLoader 类中的静态方法 main加载失败则抛出异常。

2023-04-23 10:07:18 394

原创 第1章-JVM与Java体系结构

你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了。每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。

2023-04-14 09:16:50 424

原创 rabbitmq面试必懂之解耦,异步,削峰

rabbitmq解耦,异步,消峰解耦项目中为什么需要解耦?如何解耦异步为什么需要异步如何异步削峰为什么要削峰如何削峰解耦项目中为什么需要解耦?讲一个真实的项目案例,项目是一个根据国际黄金行情进行实时交易的系统,分了两个微服务,一个是纸黄金实时交易系统,一个是实物黄金交易系统,两个系统都需要接收实时黄金行情数据,得到用户的交易价格,并且都有一个需求,能人工控制开市和闭市,也就是什么时候可以交易,什么不可以交易,那么这个时候就需要在后台管理系统进行控制,如果没有解耦,那么后台管理系统就需要直接通过dubb

2021-01-31 18:35:03 4228

原创 如果你不懂锁和事务同时使用的问题,你一定不是一个合格的程序员

如果你不懂锁和事务同时使用的问题,你一定不是一个合格的程序员这里直接写一些伪代码,插入一条测试记录(mysql隔离级别是可重复读)@Transactionalpublic void insertTestData(){ //新建锁,3000为获取锁的等待时间3秒 Lock lock=new lock(3000); //尝试获取锁 boolean flag=lock.tryLock(); //如果获取锁成功 if(flag){ try{ //通过手机号查询用户使

2020-09-29 10:29:09 833

原创 gradle复制xml文件输出到指定目录

在build.gradle中加入如下代码task mapperXmlCopy(type: Copy) { copy { from("src/main/java") { include ("**/*Mapper.xml") } into("${buildDir}/classes/java/main") } print "Copy Success\n"}说明:新建一个任务task, 把src/main/java...

2020-07-23 15:29:41 611 1

原创 关于dubbo版本导致的消费者无法获取生产者提供的接口问题的总结

项目的需要,部分生产者的代码在很早之前就写好并上线了,现在新开发其他业务,直接调用现成的生产者接口,需要说明一下,我们使用的注册中心是nacos,生产者端使用的dubbo是<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.8</version></dependency...

2020-07-17 17:52:50 1165 2

原创 每天一道面试题之如何控制多线程执行顺序

问题:三个线程的执行顺序是什么?public class Test { public static Thread t1=new Thread(new Runnable() { @Override public void run() { System.out.println("t111111进行执行"); } ...

2019-08-12 15:22:13 208

原创 简单到你一看就懂的分布式锁:redisson分布式锁

在分布式环境中,很多场景都需要分布式锁如:秒杀、ID生成等,今天介绍一种redis官方推荐的方法——使用redission实现分布式锁,这是最常用的锁,可重入锁的实现方式引入jar包: <dependency> <groupId>org.redisson</groupId> <artifactId>redis...

2019-08-08 14:26:14 136

原创 rabbitmq延时队列

Rabbitmq最纯粹的事务应用通过延时队列讲述rabbitmq事务定义延时队列功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入...

2019-07-18 11:29:47 114

springboot-mybatis-atomikos.zip

使用atomikos,mybaits,mysql,druid,springboot实现的两阶段提交分布式事务,真实能够运行,放心下载

2019-08-22

北大青鸟超市账单管理系统完整代码

北大青鸟超市账单管理系统完整代码,在老师的指导下,完成的功能基本都实现,有点瑕疵,可供基础者参阅

2014-11-30

北大青鸟Oracle数据库单元项目答案

单元项目的详细答案,有助于初学者进行学习,望大家提出建议,谢谢

2014-11-03

空空如也

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

TA关注的人

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