自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

avengerEug的博客

Github: https://github.com/AvengerEug </br> Email:[email protected]

  • 博客(66)
  • 资源 (2)
  • 收藏
  • 关注

原创 滑稽之事:学习Spring源码半年后,我成为了Dubbo的贡献者

前言2021年6月23日,我向Dubbo发起了我人生中第一个开源框架的PR(pull request),就在今天(2021年6月28日),被maintainer merge了。是的,这是值得记录的一天!借此机会,我想把我的历程记录下来。一、提交的PR的内容是什么?我提交的PR的内容是什么?换句话说:我发现了Dubbo的什么bug(添加查看PR)?大致的背景就是:项目中的模块A和模块B同时依赖的相同的二方库dubbo-starter,并且这个二方库内部定义了协议为Dubbo、Netty的

2021-06-28 23:07:00 1025 10

原创 程序员节日,来凑一波热闹。

背景听说在10月24日发文章会收获一个徽章。正文最近不是入职阿里了嘛,刚好凑上双11的这个特殊时间,基本上没有时间能留给自己提升能力。这篇文章就先水一水吧,待我强势回归。

2021-10-24 12:41:01 291

原创 我惊呆了!阿里P7面试官问我:存在一个事务方法,参数是一个list,内部遍历list循环更新商品信息。这个api会出现死锁吗?

前言如标题所示,我们把这个事务方法的原型展示出来了,其代码如下所示:@Transactionalpublic void updateGoodsList(List<Goods> goodsList) { for (Goods goods : goodsList) { goodsDao.updateById(goods); }}逻辑非常简单,就是循环更新传入的goods,然后根据id更新goods表中对应的行信息,而且还拥有事务功能。但就是这么简单的一

2021-07-16 08:47:38 525 1

原创 Spring 事务的独门绝技:钩子函数的使用技巧

前言经过前面对Spring AOP、事务的总结,我们已经对它们有了一个比较感性的认知了。今天,我继续安利一个独门绝技:Spring 事务的钩子函数。单纯的讲技术可能比较枯燥乏味。接下来,我将以一个实际的案例来描述Spring事务钩子函数的正确使用姿势。一、案例背景拿支付系统相关的业务来举例。在支付系统中,我们需要记录每个账户的资金流水(记录用户A因为哪个操作扣了钱,因为哪个操作加了钱),这样我们才能对每个账户的账做到心中有数,对于支付系统而言,资金流水的数据可谓是最重要的。因此,为了防止支付系

2021-07-14 08:42:09 1509 1

原创 Spring 事务原理篇:@EnableTransactionManagement注解底层原理分析技巧,就算你看不懂源码,也要学会这个技巧!

前言学习了关于Spring AOP原理以及事务的基础知识后,今天咱们来聊聊Spring在底层是如何操作事务的。如果阅读到此文章,并且对Spring AOP原理不太了解的话,建议先阅读下本人的这篇文章:Spring AOP原理篇:我用上我的洪荒之力来帮你彻底了解aop注解@EnableAspectJAutoProxy的原理的文章,后文的内容与这篇文章有很大的关联关系。一、先说说@EnableTransactionManagement注解内部有哪些方法我们看下@EnableTransactionM

2021-07-08 22:43:41 1561 6

原创 Spring事务使用篇:学习spring事务传播机制的7种姿势

前言在上篇spring aop原理篇:我用上我的洪荒之力来帮你彻底了解aop注解@EnableAspectJAutoProxy的原理的文章中,我们熟悉了Spring如何找到切面、如何找到通知、如何生成代理对象以及代理对象的执行顺序。现在,我们再来学习下Spring事务相关的知识点,这篇文章比较简单,适合入门,主要来学习下如何使用Spring的事务以及相关传播机制的特性。一、以测试用例的方式认识Spring的事务机制案例背景:以支付系统的转账业务为例,我们的转账业务一定是一个原子性的操作。A向B转

2021-07-02 23:46:15 246 1

原创 Spring AOP原理篇:我用上我的洪荒之力来帮你彻底了解aop注解@EnableAspectJAutoProxy的原理

前言在上篇文章spring aop使用篇:熟悉使用前置通知、后置通知、返回通知、异常通知,并了解其特性中我们知道了如何使用aop以及其的一些特性,同时还提出来如下所述的疑问点:1、源码中是如何将我们定义的各种通知与目标方法绑定起来的2、aop代理对象生成的策略3、我们的aop代理对象的执行顺序是怎样的接下来,我们继续以上篇文章的测试案例为例,从源码的角度来分析这三个点。废话不多说,直接开干!一、源码中是如何将我们定义的各种通知与目标方法绑定起来的如果让各位自己来实现aop你会采用

2021-06-28 13:58:44 696 1

原创 Spring AOP使用篇:熟悉使用前置通知、后置通知、返回通知、异常通知,并了解其相关特性

前言本次将会总结5篇关于spring aop的知识点,主要围绕:AOP使用篇、AOP原理篇、事务使用篇、事务原理篇、事务同步器使用篇 五个主题进行阐述。AOP原理篇分为两个主题:1、源码中是如何将我们定义的各种通知与目标方法绑定起来的2、我们的aop代理对象的执行顺序是怎样的事务原理篇主要是以一个事务传播机制的案例来讲解spring事务在底层的执行过程而本次总结的核心为:如何使用Spring AOP,以及了解相关通知的特性(相关的概念在这就不再累述了,大家可以参考其他文章),废

2021-06-20 22:24:16 1546 9

原创 采坑经验:Dubbo 2.6.x版本中隐式参数attachment的错误使用方式,稍不注意就会出现生产事故

前言接触dubbo分布式框架的开发也有一段时间了,其中为了解决项目中遇到的一些杂症,还特意学习了一下Dubbo服务暴露和服务引入的一些源码知识点。最近在项目开发的过程中,有使用到了dubbo的隐式参数技术点,但发现了几个在使用上非常容易出错并且一出错就是生产事故的坑,现在记录一下。一、了解Dubbo隐式参数之前先了解下Dubbo的上下文信息什么是Dubbo的上下文信息?这里总结下自己的理解:上下文中存放的是当前调用过程中所需的环境信息。所有的配置信息都将转换成URL的参数。RpcConte

2021-06-11 18:14:06 1263

原创 干货:自己开发了一个starter,如何轻松嵌入到使用不同版本的springboot框架的对接方

背景最近应公司需求,开发了一个公司内部共用的二方库包。这里科普下:什么叫一方库,二方库,三方库。在阿里巴巴出品的 泰山版《Java开发手册》附 2:专有名词解释`章节中有提到一方库:本工程内部子项目模块依赖的库(jar 包)依赖本工程内部的common模块,里面通常会定义一些所有模块都会用到的一些基础功能,比如全局异常码、分布式锁、统一响应实体等等二方库:公司内部发布到中央仓库,可供公司内部其它应用依赖的库(jar 包)在互联网公司通常都是分事业部的,然后会存在一个叫基础部门/基

2021-06-04 22:32:18 597 1

原创 一份12W+字数的踩坑总结,覆盖前端、后端、运维三个维度,一步一个脚印,我们一起成长!(实时更新)

文章目录1.1 Css/Scss1.1.1 层叠性1.1.2 继承性1.1.3 优先级1.1.4 backgroud设置背景图片样式顺序决定是否生效1.1.5 Vue在元素中要使用当前vue对象的属性作为图片路径显示在 background-image: url() css上解决办法1.1.6 div里面的内容如何垂直居中1.1.7 RGBA1.1.8 块级元素1.1.9 行级元素1.1.10 行内块元素1.1.11 行高1.1.12 浮动1.2 Java Script1.2.1 Object.assig.

2021-04-03 10:47:24 7097 3

原创 IO系列学习总结八:以Netty的聊天室程序为例,再聊聊拆包粘包的解决方案

前言在上篇文章:IO系列学习总结七:从官网Factorial协议的视角来理解出站、入站及数据碎片化(粘包拆包)中,针对Factorial协议做了一些解析,其中包含netty的入站出站处理顺序以及粘包拆包的概念及处理方案。在Factorial协议的拆包粘包部分总结的可能还有点模糊,接下来我们针对netty的聊天程序做一个简单的demo,把拆包粘包的现象给展示出来,同时并给予对应的解决方案。话不多说,我们直接看下面的内容。一、实现聊天室的基本思路先说说这个聊天室的基本功能:启动服务器,当用户A上线

2021-04-01 19:24:52 256

原创 IO系列学习总结七:从官网Factorial协议的视角来理解出站、入站及数据碎片化(粘包拆包)

前言上篇文章中,我们基于Netty开发了discard和time协议的网络应用程序。但我们还不是特别了解客户端与服务端在netty中的数据处理大致流程。本次总结的目的就在于:了解netty在交互数据时涉及到的一些基础知识:出站入站(数据处理流程)、粘包拆包。本次,我们还是使用官网的案例(Factorial Protocol)来说明问题,但官网的案例支持了SSL,为了增加代码的阅读和理解,本人将部分内容做了改版,升级成一个简单版基于factorial protocol的网络应用程序。接下来一起来了解下官网

2021-03-22 19:51:32 257

原创 IO系列学习总结六:拜读Netty 4.x版本官网,熟悉官网discard protocol & time protocol

前言对于Netty这种通讯框架而言,它最简单的一个实现(也就是我们常说的Hello World程序)也得需要客户端和服务端进行通讯,而这实际上就是一种协议。在Netty官网中有提到,最简单的协议实现就是:Discard Protocol,在这种协议下,服务端和客户端不需要做任何事情。它的最主要功能就是:接收客户端的请求,但是却丢弃它。通过Discard Protocol的入门程序编写,我们可以了解Netty的开发模式。当然,Netty是一个通讯的框架,我们最后还得通过官网的Time Protocol来了

2021-03-16 19:10:06 1563

原创 IO系列学习总结五:拜读Netty 4.x版本官网 《User guide》文档,了解Netty的使用背景

前言通常,我们学习一个新技术时。最需要做的一件事就是看官方的《User Guide》文档,每一种技术都会在官网中介绍它是什么?它解决的问题(痛点)是什么?它有哪些优点?今天,咱们就朝着这三个方向去看官方文档。一般情况下,我们是先介绍它是什么,然后再说明它解决了哪些问题,有哪些优点。而在Netty的官方文档中《User Guide》中,它为我们提供的阅读思路是:先列出目前有哪些问题,然后是Netty针对这些问题的解决方案,最后是教我们写hello world程序。一、Netty官网中列出了哪些问题?

2021-03-12 08:35:46 288 1

原创 IO系列学习总结四:NIO的三种reactor模型

前言上篇文章:IO系列学习总结三:三张图带你了解NIO通信程序的执行流程我们了解了一个普通NIO应用程序的通信执行流程。了解到了NIO的非阻塞具体体现在哪个地方。并对它的Selector、SelectedKey、Channel组件有了基础的了解。在上篇文章中的程序案例中,虽然它解决了BIO的阻塞问题,但它的吞吐量还不是特别高,因为它是单线程的。对于selector而言,它的工作太繁重了,需要管理服务端ServerSocketChannel的accept事件,还要管理连接到服务端的SocketChanne

2021-03-03 21:52:57 483 3

原创 IO系列学习总结三:三张图带你了解NIO通信程序的执行流程

前言上篇文档:IO系列学习总结二:认识NIO,从ByteBuffer开始,我们了解了NIO解决了BIO阻塞的问题来达到高并发的目的。其中,还用了三张图了解了NIO中的ByteBuffer及常用API。上文总结到NIO的几个核心组件:Selector、SeletedKey、ByteBuffer、ServerSockerChannel、SocketChannel,我们详细了解了ByteBuffer组件的底层原理。今天,我们以三张图类来认识NIO程序通信的流程。废话不多说,咱们直接进行今天旅程。一、三张图

2021-02-27 15:31:59 569

原创 IO系列学习总结二:认识NIO,从ByteBuffer开始

前言上篇文章:IO系列学习总结一:做实验,从BIO单线程版本过渡到BIO多线程版本中介绍了什么是IO、BIO以及BIO阻塞的两个关键点,并针对BIO的两个阻塞点做了一定的扩展,使之能支持有限的连接请求达到伪并发的效果。虽然能绕开BIO的两个阻塞点来实现伪并发效果,但它毕竟是伪的。那要如何来解决根本问题呢?在JDK的api中,衍生出来了一个叫NIO的东西。它全称叫:No Blocking IO。顾名思义,它的出现就是用来解决BIO的阻塞问题的。下面我们来认识下NIO吧。一、NIO(No Blockin

2021-02-24 20:42:38 308

原创 IO系列学习总结一:做实验,从BIO单线程版本过渡到BIO多线程版本

一、什么是IO?要说BIO之前,还得说一说什么是IO。记得自己在某一次面试过程中,面试官问自己:Q:如果一个http请求在线上环境执行的非常慢,你会如何定位问题?A:而我却挠了挠脑袋,支支吾吾的说了半天。最终在面试结束之前的你有什么要问我的吗?环节,我主动向面试官请教了这个问题,其中,面试官说的最多的就是IO这两个字。那IO到底是什么呢?概念:我们都知道unix世界里、一切皆文件、而文件是什么呢?文件就是一串二进制流而已、不管socket、还是FIFO、管道、终端、对我们来说、一切都

2021-01-04 21:16:48 385 1

原创 Dubbo2.7.3版本源码学习系列七: Dubbo服务引入源码解析

前言上篇文章: Dubbo2.7.3版本源码学习系列六: Dubbo服务导出源码解析咱们了解了服务导出的过程,这里再提一下,服务导出分为三个阶段1、前置工作:主要用于检查参数、组装URL <=====> 类似于Spring在初始化bean时定义的一系列BeanDefinition2、导出服务:包括服务导出到本地和导出到远程3、服务注册:向注册中心注册当前被导出的服务本篇文章,咱们继续往下走,进入Dubbo服务引入的源码解读。一、服务引入的两种方式引入官方文档内容:

2020-12-01 20:38:44 353 2

原创 我在Dubbo的服务提供者中使用@Reference注解引入自己,结果被项目组通报批评了

背景最近,项目正在紧急迭代的过程中,由于我们内部的一个系统A任务量比较大,因此,组内的大多数人都来帮忙开发了。而我,也不例外,一起去帮忙了。在我负责模块中,有一段逻辑是依赖于其他同事开发的接口,因此我就写了个Todo进行标识。在他告知我接口开发完成并且它是一个Dubbo服务接口后,我很熟练的将todo移除,并将代码进行了同步,同时使用了@Reference接口把服务引入了进来。在进行单元测试的过程中,我本着好奇的心态,想学习下同事写的代码内涵时,我发现了一个奇怪的问题:我居然在同一个项目(服务提供者)中

2020-11-23 21:22:59 1092 1

原创 Dubbo2.7.3版本源码学习系列六: Dubbo服务导出源码解析

前言上篇文章: Dubbo2.7.3版本源码学习系列五: 学习Dubbo服务导出源码前置知识点(ProxyFactory和Wrapper类),咱们了解了Dubbo的ProxyFactory和Wrapper类的作用。本篇文章,咱们开始进入Dubbo服务导出的源码解读,在这个环节,咱们会用到之前Dubbo系列总结到的知识点(自适应扩展类、Wrapper、ProxyFactory)。一、官网对服务导出的简介官网描述Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到

2020-11-01 21:56:13 318 1

原创 Dubbo2.7.3版本源码学习系列五: 学习Dubbo服务导出源码前置知识点(ProxyFactory和Wrapper类)

前言上篇文章: Dubbo2.7.3版本源码学习系列四: 阅读Dubbo源码基石 - 自适应扩展机制,咱们了解了Dubbo的自适应扩展机制,这个东西很重要,在看源码的时候经常能看到获取自适应扩展类的源码。下阶段打算开始总结服务导出相关的源码总结,在写服务导出流程之前,咱们先来了解下Dubbo比较重要的几个类的作用1、org.apache.dubbo.common.bytecode.Wrapper2、org.apache.dubbo.rpc.ProxyFactory3、org.apache.

2020-10-28 19:42:59 762 1

原创 Dubbo2.7.3版本源码学习系列四: 阅读Dubbo源码基石 - 自适应扩展机制

前言今天,咱们来聊聊Dubbo的自适应扩展机制。PS:此功能比较重要,是Dubbo的一个比较核心的功能,后续的源码中都能看到它的身影刚刚说到了Dubbo自适应扩展机制的重要性,那么到底什么叫自适应扩展机制呢?,我来引用官网中的话:有时,有些拓展并不想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。这听起来有些矛盾。拓展未被加载,那么拓展方法就无法被调用(静态方法除外)。拓展方法未被调用,拓展就无法被加载。对于这个矛盾的问题,Dubbo 通过自适应拓展机制很好的解决了

2020-10-26 21:32:23 283

原创 SpringBoot 处理@ConditionalOnBean注解的顺序问题

前言由于最近自己有些懒散,导致自己已经很长时间没有学习技术并撰写博客来沉淀自己了。最近公司有一个业务中台功能需求的任务,大致需求简述如下:需要为Spring操作MongoDB的save方法添加一个切面,来对指定PO对象的save操作进行一个日志追溯功能(记录前后功能的变化)。当这个需求下来的时候,我内心OS为:以我对spring的熟悉程度,这个任务简直是为我量身定做的。于是我主动请战,揽下了这个需求,并进行了开发。一、设计思路主要核心的设计思路这里就不阐述了。但有这么一个功能,

2020-10-17 15:42:18 3235 6

原创 初识Elasticsearch & Elasticsearch相关总结

Elasticsearch(7.4.2 <=> 7.x)一、Elasticsearch介绍1.1 是什么?Elasticsearch时一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch基于Apache Lucene的基础上开发而成,于2010年首次发布,它将Lucene复杂的api操作抽象成非常简单的REST风格的API。以简单的REST风格API、分布式特性、速度和扩展性而闻名,是Elastic Stac

2020-08-08 19:53:14 208

原创 手把手教你如何写vue.js的插件,跨项目依赖。学不会你来打我!

前言vue.js作为前端三大框架之一,它的快速开发特点深受开发者的喜爱。通常,我们使用vue.js会集成Router、Axios、Vuex、Element-UI等插件,那么你知道它们是如何无缝对接vue.js的吗?接下来,将基于Router插件无缝对接vue.js的原理来手动开发一个插件,并以npm的方式导入项目中。你准备好了吗?(ps:接下来的内容,你需要有ES6语法基础、Vue.js插件,混入,组件,指令相关知识点才能看懂)一、vue-router集成vue.js的原理我们知道,在使用vue

2020-07-06 20:56:13 2571 4

原创 动态规划(二):以计算路径总数为例,继续总结动态规划解题思路

前言在上篇文章:以最简单的斐波拉契数列为例子初步认识动态规划中末尾,有讲到动态规划的解题思路,但在解析斐波拉契数列时,也许是大家对它很熟悉,所以对于递归 + 记忆化这一步骤感受可能不是特别深。接下来,将严格按照上篇文章所说的解题思路来解决计算路径总数问题。一、计算路径总数问题描述根据图中问题的描述,其中一个解法其实可以用高中所学的排列组合来做,奈何本人高中数学是体育老师教的,这里就不献丑了! 咱们作为一名程序员,还是通过程序来解决吧~由文章主题可知,计算路径总数是一道动态规划的题,根据咱们在上篇

2020-07-03 22:18:30 953

原创 动态规划(一):以最简单的斐波拉契数列为例子初步认识动态规划

前言你问我为什么要学习算法?我的回答是:多一个技能点就多一个机会。程序员越来越多,门槛也越来越高。学如逆水行舟,不进则退,咱们得保持一直持续学习的心态。算法和数据结构作为程序员的内功,能决定你以后职业生涯的高度!无论如何,咱们都得客服困难,攻克它!那为什么第一篇与算法有关的文章就是大家望而却步的动态规划呢?因为它很难,有必要总结下~那我们现在就开始斐波拉契数列之旅吧一、什么是斐波拉契数列我相信在大家学习递归算法时,第一个接触的就是斐波拉契数列问题吧。我这里重温下,斐波拉契数列问题:存在这

2020-07-02 21:25:16 331

原创 并发系列五:基于两种案例来认识ReentrantLock源码解锁过程(公平锁)

前言上篇文章咱们基于两个案例了解了ReentrantLock(公平锁)的加锁过程。接下来咱们继续基于相同的案例来认识它的解锁过程。两个案例1.线程A单独加锁再解锁2.线程A正在持有锁的过程中,线程t1来加锁,线程t1阻塞后,线程A解锁一、案例1:线程A单独加锁再解锁还是使用相同的代码:public class SimpleThreadLock { static ReentrantLock lock = new ReentrantLock(true); public

2020-06-23 19:45:48 289

原创 JVM系列二:jvm内存模型与实战jvm调优demo

前言上文我们从类加载器、全盘委派机制、双亲委派机制开始认识jvm。接下来咱们来认识下它的内存结构,并来个jvm调优的demo。一、jvm内存模型结构图二、线程私有区域线程私有的区域包含:程序计数器、线程栈、本地方法栈,其中线程栈内部存储的是栈帧,其中栈帧又包括局部变量表、操作数栈、动态链接、方法出口。说的有点绕,接下来将以表格的方式来呈现。整理下jvm线程私有的内存结构类目作用备注程序计数器类似于pc寄存器,用来存储下一步jvm要处理的指令无本地方法栈jv

2020-06-18 22:20:26 383

原创 JVM系列一:从类加载器、全盘委派机制、双亲委派机制开始认识jvm

前言最近在做知识总结,当总结在jvm这一块时,发现脑海中对jvm的知识点并没有清晰,不能张口就说。于是想通过对jvm系列的知识总结,为jvm添加一个hash类型的索引(哈哈哈,不小心又张口说了一个知识点:hash类型的索引适用于等值查询)。废话不多说,直接切入正题。一、类加载器类型及功能在学习java时,我相信绝大多数人都写过下面一个类Test.java:public class Test { public static void main(String[] args) {

2020-06-17 22:49:14 490 2

原创 并发系列四:基于两种案例来认识ReentrantLock源码加锁过程(公平锁)

前言上篇文章咱们证明了synchronized关键字的特性:无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁。可以说synchronized是jvm层面实现同步的方式。在jdk中,存在一个叫java.util.concurrent的包,简称JUC,它是一个jdk层面的并发包,里面存在了大量与并发编程相关的api,其中最代表意义的就是atomic和lock两种类别,前者是基于乐观锁CAS(Compare And Swap)的实现,后者是基于AQS(Abstract Queued S

2020-06-09 23:34:06 267

原创 并发系列三:证明分代年龄、无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁

前言[上篇文章]咱们了解了synchronized关键字的常见用法、对象头以及证明了一个对象在无锁状态下的对象头markwork部分的前56位存储的是hashcode。接下来,咱们继续来根据对象头分别证明分代年龄为什么是15、无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁,这些锁是真实存在的,咱们可以通过代码来重现。废话不多说,咱们一一来证明一、证明分代年龄为什么为15大家都知道,在jvm中,若一个对象在survivor区经过了15次的young gc。当再进行一次yo

2020-05-31 20:13:03 844

原创 并发系列二:synchronized关键字常见api、对象头及证明hashcode

前言上篇文章总结了java线程与os线程的联系,以及模拟java调用os函数创建线程。通过上篇文章的总结,咱们了解了java的线程与os线程是一一对等的。同时也了解到了使用多线程的原因。凡事都有利与弊,在多线程提升程序运行效率的优点下,也带来了另外的问题——同步。没错,只要使用到多线程,咱们就要考虑同步,不然就乱套了!在同步问题中,java有一个亲儿子——synchronized关键字。在jdk 1.5后,它就有了一些孪生兄弟 ——JUC包下的各种锁实现。它们之间的特点将在后续的文章中做出总结。一、

2020-05-28 21:43:58 478

原创 并发系列一:初识java线程与os的关系,模拟java调用os函数创建线程

前言并发,这是一个值得深思的话题。它似无形却有形。我们平常的工作都是面向业务编程,CRUD居多,基本上与并发没什么交集。ok,并发是一个广泛的概念。那么咱们来聊聊多线程(java 多线程)。这里咱们来思考下问题:为什么要使用多线程?俗话说,一方有难八方支援。在今年的疫情初期,武汉的疫情非常严峻,如果仅靠武汉的白衣天使来医治病患,这无疑是一个长征项目,这就等同于单线程在干活。于是一批批来自于五湖四海的白衣天使前往武汉进行支援(点赞!),此时就是多线程在协同工作。是的,你没想错,使用多线程的就是为了加快程序

2020-05-27 19:49:32 526

原创 都0202年了还在说spring@Autowired是byType注入的?

前言基于上篇文章从源码的角度查找Spring @Autowired注解不能依赖注入静态变量的原因的启发,我觉得还有必要再总结下spring中@Autowired注解的原理。本人在未读spring源码时一直认为@Autowired的依赖注入模式是byType,直到我看了源码我才打破了这个误区!一、Spring依赖注入类型的基础知识在上篇博客中也有提到,spring的依赖注入主要包含如下...

2020-05-06 18:42:01 1133

原创 从源码的角度查找Spring @Autowired注解不能依赖注入静态变量的原因

前言本文将总结下Spring依赖注入静态属性失败的原理以及如何解决依赖注入静态属性一、测试项目AppConfig.java@Configuration@ComponentScan("com.eugene.sumarry.csdn.autowiredstatic")public class AppConfig {}UserDao.java@Repositorypublic ...

2020-05-01 08:57:55 617

原创 基于mysql 5.7 docker镜像搭建mysql主从复制集群

前言本文将开始基于mysql 5.7镜像搭建主从复制集群。其实,我发现了,这玩意跟redis的集群搭建一样,都是玩配置文件说明:mysql 5.7镜像为本人自己基于docker hub官网镜像5.7版本的镜像进行二次构建,主要是添加了中文的支持,即在官方镜像的/etc/mysql/mysql.conf.d/mysqld.cnf文件添加了character-set-server=utf8的...

2020-04-28 22:33:28 349

原创 从jdk1.8版本的jvm角度来理解String str = "a" + "b";创建了几个对象

前言话不多说直接进入正题一、三道面试题Q1:如下代码一共创建几个对象?String str = "a" + "b";A1:emmm,刷过面试题的肯定会这么回答:三个!因为String是final的,所以会创建 "a", "b"两个String对象以及一个str对象,它指向"ab"这一个字符串。我相信大多数人都是这么回答的,那么到底是不是呢?咱们以jdk1.8中jvm的角度来验证...

2020-04-27 11:55:58 2306 4

Win64OpenSSL_Light-1_1_1j.exe

window一键安装openssl命令

2021-03-25

elasticsearch-analysis-ik-7.4.2.zip

因部分用户通过github下载ik分词器网速不是特别友好,特使用csdn共享文件功能。 感谢CSDN资源下载功能。

2020-08-05

空空如也

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

TA关注的人

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