
JAVA
文章平均质量分 94
java专栏
理想万岁万万岁
毕业于重庆科技学院,从事java后端领域,热爱分享,热爱交友
展开
-
Java中Integer和int的区别
各位小伙伴们无论在工作还是学习中,与Integer都有着过硬的交情,我说的没错吧,大家都知道他可以表示一个整数,而且也知道可以表示整数的还有int,只是使用Integer的次数要比int多得多,今天我们就来好好探究一下Integer与int的区别以及更深处的知识。原创 2023-12-20 17:40:46 · 2010 阅读 · 0 评论 -
ThreadLocal详解,源码级的详解,快来学
先看一下的官方解释。我们可以通过实例隐式地给线程设置局部变量,即该实例可以在每一个线程内部创建一个变量的副本。而该实例我们就可以通过全局共享变量的方式创建。如下图所示很多文章中将解释为多线程环境中保证线程安全的一个类,但这种说法其实是十分片面的。从官方解释上来看,的功能仅仅是为了给多个线程设置局部变量,这和线程安全是没有关系的,线程安全针对的是全局的共享变量。从类路径来看,位于java.lang包,而非包。从其使用方法来看,无论是set()方法、get()方法、remove()方法,都。原创 2023-12-13 00:10:18 · 615 阅读 · 0 评论 -
java内部类详解
在java中,我们被允许在编写一个类(外部类OuterClass)时,在其内部再嵌套一个类(嵌套类非静态内部类(简称内部类)和静态内部类,如下所示嵌套类作为外部类的一个成员,无论其是否为静态内部类,我们都可以对其添加任何的访问修饰符(publicprotectedprivatedefault,如下所示非静态内部类对其外部类中的所有成员变量和方法都具有访问权,即便它被private修饰也可以。但是静态内部类对外部类中的成员变量和方法没有访问权。原创 2023-12-05 15:42:03 · 781 阅读 · 1 评论 -
设计模式之观察者模式
观察者模式(Observer Pattern),又称监听器模式(Listener Pattern)或发布-订阅模式(Publish-Subscribe Pattern),属于行为型设计模式。该模式定义了一种一对多的依赖关系,当一个对象状态发生改变或执行某个逻辑时,所有依赖于该动作的对象都会收到通知并作出相应的动作。该模式的目的就是为了使系统中的主线业务与各个与主线业务相关的支线业务之间实现解耦。原创 2023-11-02 22:51:19 · 718 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式(Memento Pattern),属于行为型设计模式。目的是用于保存一个对象在某一时刻的状态,以便于在将来某个时刻根据此状态恢复该对象。在我们日常生活中,备忘录的使用十分频繁。比如,有一个事情我们完成了35%的进度,这时有另一件更重要的事情需要处理,那么我们需要对这个已完成35%的事情进行记录(做了哪些事情,做到什么程度等),当那个更重要的事情完成后,就可以根据记录的内容(做了哪些事情,做到什么程度等)继续处理这件事情,而不至于因为忘记处理进度而导致重复或疏漏,这个记录的过程就是备忘。原创 2023-10-30 22:41:05 · 482 阅读 · 0 评论 -
设计模式之中介模式
中介模式(Mediator Pattern),属于行为型设计模式。目的是把系统中对象之间的调用关系从一对多转变成一对一的调用关系,以此来降低多个对象和类之间的通信复杂性。在很多情况下,一个类中对象于对象之间的调用往往很容易形成网状结构,此时倘若一个对象发生改变,那么将会导致其他所有与之关联的对象进行修改,从而导致系统复杂性增加,且难以维护。使用中介模式,可以通过向系统中引入中介类,将这种网状结构改为星型结构。原创 2023-10-26 16:09:03 · 548 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式(,属于行为型设计模式,在java和python中十分常见。目的是在不暴露集合内部结构的条件下,顺序访问该集合内部的元素。提供一种顺序访问一个集合中所有元素的方式, 而又无需暴露该对象的内部表示。在需要顺序访问集合元素的场景中,传统方式是通过以下方式对集合元素进行遍历i++) {在该方式中,对元素的获取是通过直接调用集合的get()方法完成的,即对元素的遍历由集合本身负责。而使用迭代器设计模式后,集合本身不负责元素的遍历,而提供一个获取迭代器的方法iterator()原创 2023-10-25 17:11:04 · 968 阅读 · 0 评论 -
设计模式之命令模式
命令模式(Command Pattern),属于行为型设计模式。指的是把方法调用封装成命令,然后执行该命令。目的是为了将类中的各个方法抽出来,形成独立的类,且该类只有一个方法execute(),调用该类的execute()方法就等同于调用原类中对应的方法。BCommondCCommondDCommond,这三个类都实现Command接口中的execute()方法,方法的具体实现与A类中的B、C、D三个方法相同。原创 2023-10-24 16:16:29 · 523 阅读 · 0 评论 -
设计模式之代理模式
代理模式(Proxy Pattern),属于结构型设计模式。主要目的是为了解决给对象方法进行增强,又不修改原对象方法。通过代理类对被代理对象进行代理,可以在被代理对象执行方法前后添加附加功能,丝毫不需要修改原方法中的逻辑。仅从字面意思我们也可以猜到,在代理模式中,从直接访问对象的方式转变为我们通过代理间接访问对象。这就需要我们引入一个代理类,我们只需要访问代理类即可,由代理类访问目标对象。为其他对象提供一种代理以控制对这个对象的访问。原创 2023-10-23 17:34:07 · 769 阅读 · 0 评论 -
设计模式之享元模式
享元模式(FlyWeight),属于结构型设计模式,主要解决实例化大量相同的对象,从而导致可能的内存泄漏的问题。为了解决这个问题,享元模式提出的解决办法是将相同的对象保存在内存中,且仅保存一个对象,因此该对象应该是不可被修改的,当需要获取该对象实例时,直接从内存中读取即可,从而避免了相同对象的重复创建。下面是享元模式的定义:运用共享技术有效地支持大量细粒度的对象。原创 2023-10-20 17:37:51 · 1035 阅读 · 0 评论 -
设计模式之外观模式
外观模式(Facade Pattern),又称为门面模式,属于结构型设计模式。外观模式为一组子系统的逻辑调用提供一个独立的接口调用。在不使用外观模式的情况下,实现一个功能时需要按照一定的顺序对多个方法调用,因此我们需要关注对哪些方法进行调用,以及按照什么样的顺序。而在外观模式中,我们通过调用外观类(Facade)的一个方法就可以实现该功能,该外观类(Facade)内部按照对应的顺序对这些方法进行调用,而具体按照什么样的顺序调用哪些方法我们无需关注,交给外观类(Facade)就可以了。原创 2023-10-19 14:59:11 · 674 阅读 · 0 评论 -
设计模式之装饰器模式
装饰器模式(Decoration Pattern),属于结构型设计模式,用于在不改变现有对象的基础上,对该对象的方法动态地添加新的功能,实现对该对象原有方法的增强。装饰器模式的设计思想是将对象的核心功能和附加功能独立开来。核心功能由现有对象提供,附加功能由装饰器提供。装饰器的实现思路是存在一个抽象的装饰器类,该装饰器类用于对现有的对象进行包装,然后通过该装饰器的具体子类对包装的类的方法进行增强。推而论之,在存在多个装饰器具体子类的情况下,可以动态地。原创 2023-10-18 17:22:51 · 895 阅读 · 0 评论 -
设计模式之组合模式
组合模式(Composite Pattern),属于结构型设计模式。组合模式常用于树形的数据结构多级菜单部门层级关系html文本中的dom树。它的特点是使用户对单个对象和组合对象的使用是相同的。原创 2023-08-29 17:20:51 · 953 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式,属于结构型设计模式。通过提供抽象与实现之间的桥接结构,把抽象化与实现化解耦,使得二者可以独立变化。《Head First 设计模式》:将抽象和实现放在两个不同的类层次中,使它们可以独立地变化。《图解设计模式》:将类的功能层次结构和实现层次结构相分离,使二者能够独立地变化,并在两者之间搭建桥梁,实现桥接。从专业术语对交接模式的解释来看,总是让人似懂非懂,即使懂了,从代码上实现又让人无法捉摸。典型的每个字都认识,连在一起就不懂了。原创 2023-08-29 14:21:47 · 1275 阅读 · 0 评论 -
设计模式之抽象工厂
抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。复杂到哪里了呢?工厂方法设计模式中,指定工厂只能创建对应的单个产品,是一对一的关系。抽象工厂模式中,不仅需要创建产品的工厂,还多了一个创建工厂的工厂(顶级工厂)。当顶级工厂创建一个工厂时,顶级工厂与工厂是一对一的关系(等同于工厂模式),被创建的工厂可以生产多个产品,因此顶级工厂与产品之间是一对多的关系。结婚是一件十分麻烦的事情,需要准备非常非常多的事情,比如婚车婚房婚纱照。原创 2023-08-25 17:40:39 · 1113 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式(Factory Pattern)是最常使用的设计模式之一,属于创建型设计模式。在该设计模式中,我们不再使用new来实例化对象,而是通过工厂对象来获取指定的对象实例,其中对象的实例化过程是在工厂中完成的。换句话说,就是将对象的实例化过程从调用方控制改变成工厂控制。说到这里,我愣了一下,这不就是控制反转(IOC)嘛?spring的IOC容器主要使用的设计模式之一就是工厂模式,它将我们对对象的控制权转移给了。原创 2023-08-24 16:44:45 · 657 阅读 · 0 评论 -
设计模式之创建者模式
建造者模式(Builder Pattern)属于创建型设计模式,很多博客文章的对它的作用解释为用于将复杂对象的创建过程与其细节表示分离。但对于初学者来说,这句话难免有点晦涩难懂,何为复杂对象?何为创建过程,何为细节表示?复杂对象:一个对象中的成员属性出了基本数据类型及其对应的封装类型,还包含有其他类型对象。例如:在对象A中包含对象B的引用,对象B中又包含对象C的引用。创建过程:一个对象的实例化和初始化过程。如new一个对象后再调用其set方法为其初始化。细节表示:在对一个对象初始化时,通过set。原创 2023-08-21 15:37:34 · 837 阅读 · 0 评论 -
设计模式之原型模式
原型模式属于创建型设计模式,用于创建重复的对象,且同时又保证了性能。该设计模式的好处是将对象的创建与调用方分离。其目的就是**根据一个对象(称为原型)创建一个与其完全相同的对象(当然内存地址不同)。**原对象被认为是新对象的原型。原型模式用于创建具有相同属性的重复对象。原型模式的实现就是实现Cloneable接口 + 重写clone()方法实现的。Object类的clone()方法实现由JVM实现,性能较好。但仅能实现浅拷贝。纸上得来终觉浅,绝知此事要躬行。原创 2023-08-18 15:58:27 · 720 阅读 · 0 评论 -
设计模式之单例模式
单例模式,属于创建型设计模式,单指一个,例指实例,就是说在一个程序的运行过程中,应用了单例模式的类始终只有一个实例,且不允许出现多个实例,并在整个程序中提供一个获取该实例的方法。spring中的bean默认就是单例模式,类的实例化由spring完成,我们只需要从框架中获取即可,而不是直接去new一个实例。web应用中的Servlet。我们在应用开发时,线程池也应当设计成单例模式。**何时使用:**如果一个类的实例在整个生命周期中是无状态的,则可以使用单例模式使整个应用程序中只有一个实例。原创 2023-08-17 15:15:19 · 829 阅读 · 0 评论 -
springboot自定义banner的输出与源码解析
Banner即横幅的意思,我们在庆祝某些事情时有些显眼包总会是拉个横幅以表明意图。在我们启动springboot项目时,springboot往往也会打印出一个默认的横幅,该横幅中包含了一些信息如springboot版本号等,如下图所示。既然有默认的,当然springboot也允许我们对banner进行自定义设置,如将banner设置为文本图片,甚至关闭banner的输出。如下所示是否略显炫酷?下面我们来介绍如何自定义banner,并通过源码进行分析。原创 2023-08-16 14:52:45 · 1685 阅读 · 0 评论 -
springboot使用configtree读取树形文件目录中的配置
在classpath下添加application.yml或application.properties配置文件,或通过指定配置文件位置。通过指定额外的配置文件位置。通过导入指定位置的配置文件。但无论通过哪种方式,其配置的形式都是通过在配置文件中通过的形式添加具体配置的,且配置文件类型为yaml或properties。如下所示:properties文件内容示例yaml文件内容示例其中key1作为配置名,value1作为配置值。今天给大家介绍另一种配置形式,该配置使用文件名作为配置名,文件内容。原创 2023-08-14 16:46:35 · 860 阅读 · 0 评论 -
关于ArrayList的十三连问
来修饰数组并不表示不将其序列化,ArrayList在序列化时,最主要的是将其内部元素进行序列化而不是数组,再加上数组中可能存在大量空元素,若将数组进行序列化,对时间和空间无疑都是一种消耗。方法得到的List实例为ArrayList 实例,但需要注意的是,此处返回的ArrayList 实例为Arrays的内部类,其全限定类路径为。————————————————我是万万岁,我们下期再见————————————————在序列化时,通过遍历数组中的元素,将元素进行序列化,而非数组。原创 2023-08-12 09:00:00 · 353 阅读 · 0 评论 -
xxl-job与其他调度框架比较与部署
XXL-JOB中**“调度模块”和“任务模块”完全解耦**,调度模块进行任务调度时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。下载源码,数据库工作与配置文件修改完成后,对xxl-job-admin模块源码进行部分必要的修改,如接口地址、接口参数等,通过maven打为jar包并导入运维平台,至此调度中心后端接口工作完成,只需要前端调用即可。任务服务只负责执行器的配置工作,具体任务的实现由对应的服务负责,比如视频问诊提醒的定时任务逻辑交给问诊模块开发。之内(基本为一次请求的网络开销);原创 2023-08-11 10:40:30 · 1810 阅读 · 0 评论 -
skywalking忽略调用链路中的指定异常
在前面介绍在微服务项目中使用skywalking进行全链路追踪时,我们发现当一次请求链路中某个服务出现异常时,在skywalking中会将该链路用红色标记为ERROR,在异常链路详情中也可以看出是哪个服务出现了异常并可以查看响应的异常信息。如下图所示。那么有没有办法忽略某个指定的异常呢?就是说如果一个请求链路中某个服务抛出了该异常,skywalking仍然认为该异常属于正常现象,并不会认为它是ERROR。答案是肯定的。我们往下看。项目结构依然参考skywalking安装教程。原创 2023-08-10 17:29:59 · 2753 阅读 · 0 评论 -
skywalking日志收集
在上一篇文章skywalking全链路追踪中我们介绍了在微服务项目中使用skywalking进行服务调用链路的追踪。本文在全链路追踪的基础上,我们介绍如何使用skywalking对一次调用链路上进行日志收集。skywalking日志收集方式有两种:从日志文件中收集在微服务项目中,每一个微服务所产生的日志均会保存到本地日志文件或远程文件服务器中,skywalking提供FilebeatFluentdFluent-bit三种方式通过kafka或http读取日志文件并将其按照调用链路进行收集。原创 2023-08-07 17:22:04 · 4760 阅读 · 4 评论 -
skywalking全链路追踪
在上一篇文章skywalking安装教程中我们介绍了skywalking的作用以及如何将其集成到我们的微服务项目中。本篇文章我们介绍在微服务架构中,如何使用skywalking对一次客户端请求进行全链路追踪。何为全链路追踪?个人理解:在微服务架构中,一次客户端请求在对应的接口中可能需要通过多次服务调用完成,以skywalking安装教程中的项目演示为例,一次成功结束的请求可能需要经过商品服务、订单服务以及支付服务三个服务共同处理,其中商品服务调用订单服务订单服务调用支付服务。这就是微服务架构的调用链。原创 2023-08-04 16:57:13 · 2800 阅读 · 1 评论 -
安装skywalking并集成到微服务项目
本片文章主要讲解skywalking的安装教程,及其在微服务架构中的链路追踪功能。:2020.0.6springboot:2.5.14jdk:1.8skywalking:9.4.0os:windowsskywalking是一个开源的应用性能管理系统和可观测性分析平台。用于收集分析聚合和可视化来自服务和云原生基础设施的数据。SkyWalking提供了一种简单的方法来保持我们的分布式系统的清晰视图,甚至跨云。这是一个现代的APM(应用性能管理和监控技术),专门为云本地的、基于容器的分布式系统而设计。原创 2023-08-02 17:12:23 · 5256 阅读 · 0 评论 -
springboot创建并配置环境(四) - 配置扩展属性(下集)
上一篇文章:springboot创建并配置环境(三) - 配置扩展属性(上集)中我们介绍了springboot对配置文件的处理逻辑,但是由于篇幅过长,决定分上下集两部分讲解。进入方法从该方法中看到,对中的进行遍历,从中获取key为的配置属性,将其添加到集合中并返回。进入Profiles的构造方法查看,该构造方法中定义了三种profiles,分别是定义的profiles、定义的profiles和定义的profiles。我们逐个查看定义的profiles从Profiles。原创 2023-07-30 09:30:00 · 896 阅读 · 0 评论 -
springboot创建并配置环境(三) - 配置扩展属性(上集)
在上一篇文章:springboot创建并配置环境(二) - 配置基础环境中,我们介绍了springboot如何配置基础环境变量。本篇文章讨论如何处理配置文件。classpath路径下的**使用注解指定的文件、以及来自项目外部的配置文件**等。原创 2023-07-29 09:30:00 · 701 阅读 · 0 评论 -
springboot创建并配置环境(二) - 配置基础环境
springboot启动过程中配置基础环境原创 2023-07-28 09:30:00 · 691 阅读 · 0 评论 -
springboot创建并配置环境(一) - 创建环境
springboot创建运行环境的源码解析原创 2023-07-27 11:17:33 · 1447 阅读 · 0 评论 -
源码分析:springboot如何确定当前应用程序类型
从源码分析springboot如何推断出当前应用为响应式的还是非响应式的原创 2023-05-25 17:09:54 · 1298 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个例子,现在市面上很多手机都是typeC的接口,但我们的U盘都是usb格式的接口,因此这两个接口是不兼容的,如果我们能在手机上使用usb的U盘,那将会方便很多。因此我们需要一个适配器,适配器的输入端插入U盘,输出端以TypeC的格式插到手机上,这样,手机就可以读取U盘中的文件了。原创 2023-04-08 10:00:00 · 510 阅读 · 2 评论 -
设计模式之策略模式
所谓策略模式,指的是做某一件事时有多种选择(即策略),且不同的策略之间相互独立,而且无论使用哪种策略,得到的结果都是相同的。例如你要从上海去重庆旅游,在选择交通工具时你可以选择高铁,也可以选择飞机,也可以自己开车自驾游。你要做的是从上海去重庆,在选择交通工具时面临多种选择,每一种选择就是策略。原创 2023-04-06 13:45:17 · 380 阅读 · 0 评论 -
设计模式之模版方法
模版方法是23种设计模式中的一个,属于行为性设计模式。是对算法行为方式的一类设计。所谓模版方法,就是在一个方法中,定义了一系列其他方法的调用顺序,而其他方法由各个子类实现。因此当调用这个方法时,它只提供了其他方法的调用顺序,其他方法的实现细节由调用方的实际类型决定。简单理解就是定义一个模版,模版内的不同模块该如何实现交给子类完成。打个比方,你是两个孩子(孩子A和孩子B)的爸爸,你给他们提出了一日三餐的规定,先吃早饭,再吃午饭,最后吃晚饭。两个孩子很乖孩子A早饭喝粥,午饭吃饭,晚饭吃屎。原创 2023-04-05 10:00:00 · 460 阅读 · 0 评论 -
java源码阅读 - LinkedHashSet
前面文章中我们从源码详细介绍了继承于HashMap的LinkedHashMap,并通过图片示例讲解了LinkedHashMap是如何在HashMap的哈希表上将各个节点通过双向链表串起来的。也讲解了基于HashMap实现的HashSet,那么是否存在类似于LinkedHashMap原理的一种Set集合?答案是肯定的,而且是我们本篇文章要讲的顾名思义,LinkedHashSet是基于LinkedHashMap实现的一个Set集合。HashMap(必选)红黑树(可选)(必选)HashSet(必选)原创 2023-03-30 10:00:00 · 464 阅读 · 0 评论 -
java源码阅读 - TreeSet
在上期文章中,我们从源码层面详细分析了java集合框架中Set一族的实现HashSet,它的内部维护了一个HashMap对象作为内部存储,也就是说HashSet的底层结构为哈希表,今天我们介绍Set的另一个实现——TreeSet,对标HashSet与HashMap的关系,我们猜想TreeSet可能会维护一个TreeMap作为内部存储,事实也确实如此,因此,TreeSet的特性均继承于TreeMap,如元素有序等。在学习TreeSet源码之前,必须对TreeMap的源码了如指掌。原创 2023-03-29 10:00:00 · 1235 阅读 · 0 评论 -
java源码阅读 - HashSet
在往期文章中,我们从源码层面详细分析了java集合框架中List的实现如ArrayListLinkedListVectorQueue的实现如ArrayDequeMap的实现如HashMapTreeMapHashTable。他们有各自的底层实现和不同的特点。今天开始,我们进入java集合框架的新篇——Set,先看一下jdk对Set的定义是什么翻译:不包含重复元素的集合。更正式地说,集合不包含e1.equals(e2)这样的元素对e1和e2,最多包含一个空元素。从Set的定义我们了解到Set集合中的元素。原创 2023-03-28 13:25:52 · 280 阅读 · 0 评论 -
java源码阅读 - HashTable
从源码层面深度解析HashTable原创 2023-03-27 23:49:33 · 578 阅读 · 0 评论 -
java源码阅读 - LinkedHashMap
通过源码对LinkedHashMap详细分析原创 2023-03-26 00:12:41 · 689 阅读 · 0 评论