自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

super_scan的专栏

互联网技术博客

  • 博客(84)
  • 资源 (35)
  • 收藏
  • 关注

原创 JDK源码系列:StringBuffer与StringBuilder对比

一、源码分析StringBuffer与StringBuilder的区别1、StringBuffer是多线程安全的,StringBuilder是多线程不安全的多线程安全指的是 多个线程同时对一个对象进行append 等操作,不会出现覆盖、丢失的情况。看下StringBuffer是如何做到多线程安全的:StringBuffer类中除了构造方法,几乎所有方法都加了synchronized关键字来保证线程...

2023-11-25 23:26:08 189

原创 聊聊微服务到底该如何划分

背景现在动不动就是微服务架构,但是微服务划分的合理与否会极大的影响开发过程中的复杂度,划分的重要性不言而喻,但是在微服务划分这条路上并没有银弹,有的说DDD可以解决微服务的划分问题,吕哥想说的是那只是理论上的,实际上影响微服务划分的因素众多,不能死搬教条,每个项目都有自己的特点和实际情况,我们要做的把理论与实际结合,把知识融会贯通,走“自己特色的项目道路”.一、单体系统分解成微服务...

2023-06-18 15:31:10 2505

原创 简单工厂、工厂方法、抽象工厂模式-这仨货的区别

要想明白这三玩意的区别就需要知道这三玩意的优缺点;之所以有三种工厂模式,就说明它们各有所长,能解决不同场景的问题;一、简单工厂模式UML图代码public class MobileFactory { public static Mobile getMobile(String brand){ switch (brand){ case "apple":...

2023-05-28 13:40:35 713

原创 JDK源码系列:ThreadLocal弱引用真的是过度设计吗?

在《码处高效:Java开发手册》这本书上详细描述了ThreadLocal的原理,也有过度设计的说法,难道弱引用设计真的没必要吗?对此老吕要仔细分析分析,ThreadLocal到底该不该使用弱引用设计。JDK作为构建Java应用生态的原始生产资料和工具,它的每一行代码相信都是经过深思熟虑的(也有考虑不周的,后续版本会标上废弃或者改进代码)。回忆ThreadLocal原理ThreadLocal本质是一...

2023-04-02 20:00:17 357 1

原创 JDK源码系列:ThreadLocalMap内存泄漏“自动回收的触发场景”分析

在前面的文章中老吕分析了ThreadLocal的实现原理,ThreadLocal的内存泄漏,ThreadLocalMap 失效条目清理原理,本文分析下ThreadLocal内存回收的触发时机。一、getEntry(key)触发时机:发生哈希冲突时触发getEntry逻辑如下:1、直接命中,返回Entry结束,此种场景不会触发内存回收(对应key存在且没有hash冲突的场景)2、没有直接命中,通过线...

2023-03-23 17:30:08 568

原创 JDK源码系列:ThreadLocalMap到底是如何清理失效节点的?

在前面的关于ThreadLocal的文章中提到了所谓的内存泄漏问题,同时也提到了ThreadLocalMap在某些场景下会主动清理坏掉的Entry来释放内存,要理解它是怎么做到的,就必须理解它是怎么解决哈希冲突的,尤其是“真删除”Entry后如何保证不影响后续Entry的查找问题一、哈希冲突的解决:线性探测法在线性探测法中插入和查找和修改都比较容易理解,难点在于删除动作,因为删除动作可能会影响后续...

2023-03-22 16:02:21 647

原创 JDK源码系列:讲清楚ThreadLocal内存泄漏的来龙去脉

一、ThreadLocal\Thread\ThreadLocalMap的内存模型在研究过程中还思考了几个小问题:1、线程结束后Thread对象会被释放吗?Thread对象是线程状态的一个影像,线程状态的变化会反应到Thread.getState()方法上。线程结束后会将Thread.state置为“TERMINATED”,但是Thread内存对象的回收还是和其它Java对象一样的规则。线程在未结束...

2023-03-13 23:25:25 289

原创 老吕架构-2022~2021年文章索引

为方便查询阅读,增加2022年、2021年文章目录索引2023年1月份基于域控的SSO单点登录2022年8月份设计模式-桥接模式2022年7月份重构的艺术2022年5月份手撕一个解决ThreadLocal数据跨线程传递的实用工具聊聊代码复用2022年4月份JDK源码系列:子线程如何继承父线程上通过ThreadLocal绑定的数据JDK源码系列:ThreadLocal实现原理JDK源码系列:AQS(...

2023-02-16 09:51:43 162

原创 基于域控的SSO单点登录

大家好,好久不见,今天老吕给大家来一篇偏冷门知识的文章。一、需求大型集团企业内部会有许多业务系统,工作人员也往往需要登录多个业务系统才能完成工作,这就可能会存在一些问题1、多套账号与密码需要记录或者记忆2、多次登录,不太好的工作体验与工作效率二、解决方案问题的本质是需要一个企业内部工作人员办公时使用的单点登录SSO方案方案1:常用方案,统一账号系统,建立用户中心,统一用户创建与登录渠道,通过cas...

2023-01-15 20:05:41 1978

原创 设计模式-桥接模式

兄弟们,想写出好的Java代码,设计模式还是要烂熟于心的鸭。仔细理解实践每一种模式,体会设计模式之美。一、 模式定义桥接模式又叫接口模式。说白了就是将变化的部分抽象成接口,桥接模式是结构型模式,着重看下 结构上是如何实现的和应用场景。说到面向接口编程,那场景可多了去了,在基于Spring的工程架构中,是不是到处都是接口,可以看做是一种退化的桥接模式。桥接模式即将抽象部分与......

2022-08-14 22:54:11 278

原创 重构的艺术

在吗?在吗?在吗?---》不要慌,我还在经典重读:改善既有代码的设计一、重构的定义重构:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构:使用一些列重构手法,在不改变软件可观察行为的前提下,调整其结构。二、重构的时机1、如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便的达成目的,那就先重构那个程序,使特性的......

2022-07-10 22:31:53 194

原创 手撕一个解决ThreadLocal数据跨线程传递的实用工具

大家好,老吕在前面的文章中提到了如何解决不同场景下ThreadLocal数据传递问题,并且给出了阿里开源TTL框架和手写组件的方案。后来老吕还是觉得TTL的方案有点复杂,手写那个组件不够通用,所以就做了改进,使读写数据通用化。设计比较简单实用,一个类就搞定了,思路还是通过代理Runnable和Callable接口来增加数据中转的能力,我一直认为这个思路是最划算的。本次加强...

2022-05-23 20:24:43 517

原创 聊聊代码复用

大家好,我是老吕,今天聊聊代码复用。减少重复代码,对重复代码进行抽象、下沉,遵守设计原则,应用设计模式,都有一个共同的目的:发现变化,封装变化,提高代码的可复用性,减少需求变化影响的范围,使软件、系统、云服务、网站等能够可控的修改与升级,具有更长的生命周期。代码复用的级别或者复杂度级别1:复制粘帖如果只有一个地方用这段代码,也无可厚非,当有两个以上地方用的时候就需要考虑封...

2022-05-22 23:35:16 2332 1

原创 JDK源码系列:子线程如何继承父线程上通过ThreadLocal绑定的数据

上一篇中老吕介绍了ThreadLocal线程数据绑定的原理,今天聊聊父子线程之间如何继承ThreadLocal上维护的数据。开发过程中异步执行任务有两种情况,第一种情况是 主线程 通过 new Thread()的方式产生了一个子线程,然后把 task 交给子线程去执行;第二种情况是主线程将task提交到线程池去执行。不同的情况需要不同的方...

2022-04-26 17:56:23 1801 1

原创 JDK源码系列:ThreadLocal实现原理

大家好,在软件开发过程中,一般情况下方法之间调用时都是通过接口参数来传递数据的,但有一些公共参数(userId、token、orgId、roleId等)的传递就不能那么干了,在Java中一般用ThreadLocal 去解决这个问题,今天老吕来分析下ThreadLocal的源码。一、ThreadLocal的本质通过共享内存来传递数据。但它是如何做到多线程安全...

2022-04-25 15:49:54 340

原创 JDK源码系列:AQS(队列同步器)原理

大家好,好久不见,今天看下JDK中的JUC包中AQS(AbstractQueuedSynchronizer 队列同步器)的实现原理。JUCL下的锁和synchronized提供的锁的区别1、锁的获取和释放是显示的靠程序员用代码来控制的,增加了灵活性,可以实现更加复杂的应用场景2、尝试非堵塞式的获取锁3、可中断的获取锁4、可超时的获取锁5、等待队列可按条件分...

2022-04-17 20:03:03 312

原创 JDK源码系列:synchronized与wait、notify、notifyAll

大家好,今天聊一聊synchronized与obj.wait()、obj.notify()、obj.notifyAll() 之间的关系以及它们的实现原理。我们今天采用边写demo边分析的方式来进行。案例1:public class SyncDemo { public synchronized int add(int a,int b){ ...

2022-03-28 13:59:15 348

原创 JDK源码系列:Future是如何实现的?

大家好,我们在异步编程时向线程池提交(submit)一个任务后会得到一个 Future对象,通过 future.get() 方法可以堵塞等待结果的完成,例如:public ...

2022-03-20 23:33:55 482

原创 手撕分表方案

目标解决业务数据库中只有少数几个表数据量特大的问题,大部分普通表在百万级别,有几张特别大的接近1亿条数据了。针对这种情况,虽然可以通过增加分库解决,只是库的数量增长会比较快。如果只针对大表...

2022-03-01 16:46:45 587

原创 代码精进之路-设计模式-UML图(行为型)

十三、责任链模式请求与处理中解耦,不需要关注处理者是谁,把请求扔到这个处理链上即可比较常用的设计模式,对后继者的管理可以通过一个简单的链表实现,也可以通过数组实现,tomcat中实现的过滤...

2022-02-23 13:20:17 348

原创 代码精进之路-设计模式-UML图(构建型和结构型)

一、抽象工厂模式用于相关的一系列产品的生产,这样不容易出错二、构建者模式用于复杂对象分步骤可定制化构建,更好的用户体验三、 工厂方法模式具体产品和具体工厂同时增加四、原型模式对象的克隆,不...

2022-02-23 11:01:43 391

原创 手撕读写分离

目标横向水平分库+读写分离方案方案选择老吕知道的方案有三种:1、在应用层通过AOP实现,有少许代码耦合,但是可控性高,灵活2、通过分库中间件代理实现3、通过云厂商一键实现(和2同属代理模式...

2022-02-19 21:20:18 433

原创 代码精进之路-设计模式-(三)行为型模式

三、行为模式(11个)1、责任链模式//保存凭证之前的规则检查public class Client { public static void main(String[] arg...

2022-02-15 07:48:04 240

原创 代码精进之路-设计模式-(二)结构型模式

二、结构型模式(7个)1、适配器模式//针对的是已经存在的组件或者系统,而你也有自己的接口规范,你不想去依赖对方的接口,//这时候用适配器模式比较合适,用自己接口的一个实现去依赖对方的接...

2022-02-14 11:10:40 271

原创 代码精进之路-设计模式-(一)创建型模式

一、创建型模式(5个)抽象工厂模式//用于一个系列或风格的产品生成public class Client { public static void main(String[]...

2022-02-13 23:30:22 326

原创 JDK中Timer定时器底层到底是怎么实现的?

关于定时器在JDK中提供了两种方式,一种是 Timer(同步调度) ,另一种是ScheduledThreadPoolExecutor(异步调度)。更高级的任务调度开源框架就比较多了,但最核...

2022-01-14 21:26:45 619

原创 Dubbo的日志体系是怎么实现的?

日志组件是每个应用系统必备的组件,日志组件有多种开源实现,不同的项目可能选择了不同的日志组件。有这么一个场景,你的应用系统中可能采用了多种开源框架或者组件或者SDK,如果这些第三方组件中强...

2022-01-05 20:45:20 2564

原创 代码精进之路-设计模式-组合模式

组合模式属于设计模式中的"结构型模式"。组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。你可以使用它将对象组合成树状结构...

2021-12-29 20:41:58 645

原创 代码精进之路-设计模式-拦截器链模式

上一讲中说了《Tomcat的过滤器链 是如何实现的》,今天来看下 Spring的拦截器链是如何实现的。从位置上来说 过滤器是属于Servlet容器级别的规范,拦截器是Spring自身的东西...

2021-12-27 16:59:03 596

原创 代码精进之路-设计模式-过滤器链模式

过滤器链设计模式Java Web应用开发中过滤器Filter都用过,今天老吕带大家来看看最常用的tomcat中是如何实现 Servlet规范中过滤器链功能的。源码讲解javax.servl...

2021-12-26 23:56:00 1275

原创 代码精进之路-迪米特法则(最少知道原则)

在上一讲中迪米特法则没有细讲,补充下。一、迪米特法则的定义1、最少知识原则迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Princi...

2021-12-12 23:49:25 616

原创 代码精进之路-设计原则

设计原则是前辈的总结,为后来人提供经验,写出更好的代码,降低系统复杂度,提高代码的稳定性,可维护性。有时候你觉得这个方案这样设计也可以,那样设计也没问题,犹豫不决,这时不妨参考下设计原则,...

2021-12-11 23:20:10 490

原创 老吕架构-2021年文章精选

从2021年2月份到12月份陆续发了40多篇文章,这也是我第1年写公众号,排版各方面都没有特意装修过,质量可能也参差不齐,但是基本上遵守了原创和实践的承诺,能带上代码的尽量带...

2021-12-09 10:32:58 118

原创 代码精进之路-函数

编写好函数是编写好代码的基础,一个系统容易腐化的部分正是函数。不解决函数的复杂性,就很难解决系统的复杂性。虽然函数不像面向对象技术那么复杂,但要写好函数也不是一键容易的事情。好的函数能大大...

2021-12-06 23:13:33 311

原创 代码精进之路-命名与规范

一、命名1、有意义的命名如果你无法想出一个合适的名字,很可能意味着代码“坏味道”、设计有问题。这时可以思考一下:是不是方法里实现了太多的功能?或者类的封装内聚性不够?2、函数名函数命名要具...

2021-12-05 22:26:00 435

原创 轻重接口隔离

名词约定1、轻重接口轻接口=轻量级接口,运行时间短,性能高,对服务器资源(内存、CPU、数据库)占用少;重接口=重量级接口,运行时间长,性能差,对服务器资源(内存、CPU、数据库)占用多;...

2021-11-22 20:38:01 473

原创 长事务监控

在上篇文章《长事务问题的解决》中提到了长事务的监控,完善的监控可以加快解决问题的效率。今天老吕来说一种可行的监控实现方案:基于Druid连接池的事务监控实现。步骤一、增加一个Druid过滤...

2021-11-10 18:18:13 1062

原创 长事务问题的解决

背景长事务在DB服务端的表现是session持续时间长,期间可能伴随cpu、内存升高,严重者可导致DB服务端整体响应缓慢,导致在线应用无法使用,所以在线高并发业务中应该尽量...

2021-11-05 14:41:31 5753

原创 Dubbo IO异常的捕获

需求为什么要写这么一个小问题呢,可能有同学说了,发生异常后不是自动就体现到日志里面去了吗?有啥可捕获的?想想这么一个场景:生产环境中众多日志中发现了如下异常信息:[New I/O work...

2021-11-01 11:56:42 390

原创 编程的逻辑-用面向对象方法实现复杂业务需求

虽然不少同学一直在使用面向对象的语言进行项目开发,但是在分析、设计和编码过程中不一定用是真正的OOA/OOD/OOP的思想,贫血模型由于快速高效易上手,使用的项目不在少数,...

2021-10-31 23:25:10 1134

jasperreports-6.0.0.jar.zip

jasperreports-6.0.0

2021-07-07

itext-2.1.7.js6.jar.zip

itext-2.1.7.js6.jar

2021-07-07

olap4j-0.9.7.309-JS-3.jar.zip

olap4j-0.9.7.309-JS-3

2021-07-07

gradle-5.6.4

gradle-5.6.4-bin.zip 某些人的账号一个开源工具下载居然要几十个积分,真是过分,我这个是bin版本(不包括源代码),直接使用,轻巧方便,只需要1个积分

2020-10-11

分布式任务调度框架 ElasticJob 中文文档 PDF 带目录

分布式任务调度框架 ElasticJob 中文文档 PDF 带目录

2020-10-10

javafx_scenebuilder-2_0-macosx-universal.dmg.zip

javafx_scenebuilder-2_0-macosx-universal.dmg mac 版本的 JavaFx开发设计工具,外网下载很慢,我贡献出来

2020-03-25

VisualVM_144.dmg.zip

VisualVM_144.dmg JDK9 之后 移除了 JVisualVM 工具,如果用到的需要单独下载安装,这个是目前的最新版,适用于 Mac OS。

2019-11-27

Java13 语言规范与虚拟机规范

Java13 语言规范 虚拟机规范 官方文档英文原版

2019-11-19

汇编语言 第三版 王爽 pdf + 课件ppt +习题答案

汇编语言助你深入理解计算机工作原理,如果你是学生,尽量好好学计算机专业课,将来对工作都是有好处的,这就是在修炼你的内功。如果你毕业了在从事编程行业,也别忘了汇编语言,这是区别优秀程序员与一般程序员的依据,基础知识与原理是你的内功。

2017-11-16

aopalliance.jar

spring3.x 环境依赖的 jar文件 aopalliance.jar

2014-07-21

lucene_2_9API

lucene_2_9APIlucene_2_9APIlucene_2_9APIlucene_2_9API

2010-03-12

项目管理师考试资料大全项目管理师.part1.rar.part5

项目管理师考试资料大全项目管理师.part1.rar.part5 项目管理师考试资料大全项目管理师.part1.rar.part5

2010-03-12

项目管理师考试资料大全项目管理师.part1.rar.part4

项目管理师考试资料大全项目管理师.part1.rar.4 项目管理师考试资料大全项目管理师.part1.rar.4

2010-03-12

项目管理师考试资料大全项目管理师.part1.rar.part1

项目管理师考试资料大全项目管理师.part1.rar.part3项目管理师考试资料大全项目管理师.part1.rar.part3

2010-03-12

项目管理师考试资料大全项目管理师.part1.rar.part2

项目管理师考试资料大全项目管理师.part1.rar.part2 项目管理师考试资料大全项目管理师.part1.rar.part2

2010-03-12

项目管理师考试资料大全项目管理师.part1.rar.part1

项目管理师考试资项目管理师考试资料大全项目管理师.part1.rar.part1料大全项目管理师.part1.rar.part1

2010-03-12

精通eclipse整合web开发struts hibernate spring jbpm 第18章源代码(source )

精通eclipse整合web开发struts hibernate spring jbpm 第18章源代码(source )

2010-03-01

精通eclipse整合web开发struts hibernate spring jbpm 第20章源代码(source sql)

精通eclipse整合web开发struts hibernate spring jbpm 第20章源代码 文件审批系统(source和sql) (由于太大,一次上传不完,articleaudit.war 见本账号另外资源) 学习jbpm的好实例

2010-02-06

精通eclipse整合web开发struts hibernate spring jbpm 第20章源代码(部分)

精通eclipse整合web开发struts hibernate spring jbpm 第20章源代码 文件审批系统 articleaudit.war (由于太大,一次上传不完,source和sql见本账号另外资源) 学习jbpm的好实例

2010-02-06

EXT 中文手册.pdf

EXT 中文手册.pdfEXT 中文手册.pdfEXT 中文手册.pdfEXT 中文手册.pdfEXT 中文手册.pdf

2010-01-19

Ext 3.0 API中文版.CHM

Ext 3.0 API 中文版.CHM Ext 3.0 中文版.CHM Ext 3.0 中文版.CHM

2010-01-19

张孝祥JAVA就业培训教程.pdf

张孝祥JAVA就业培训教程 pdf版本 讲的都是经常用到的知识,专为就业培训使用

2010-01-19

JAVAEE5英文帮助文档(chm)

JAVAEE5 J2EE5 英文 API 帮助 文档(chm)

2009-12-04

sybase数据库命令详解

sybase数据库命令详解,sybase数据库电子书,sybase数据库sql指南

2009-03-05

javascript宝典

javascript宝典,经典,详细讲解,高级应用

2008-07-16

Spring2.0中文帮助文档

Spring2.0中文帮助文档,绝对不错!必须的,绝对的,肯定的!

2008-06-26

activation.jar

activation.jar如果你希望通过网页的形式发送邮件,必须把这个包复制到lib目录下

2008-04-17

javamail开发包

javamail开发包javamail开发包

2008-04-11

EL表达式详解

EL表达式语法详细介绍,实例演示

2008-04-09

JSTL详解

JSTL语法详解,里面有实例演示

2008-04-09

空空如也

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

TA关注的人

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