
Java
文章平均质量分 83
Java实践
西魏陶渊明
稻盛和夫说:你不会的东西,觉得难的东西,一定不要躲,先搞明白,后精湛,你就比别人优秀了。因为大部分人都不舍得花力气去钻研,自动被淘汰,所以你执着的努力,就占了大便宜。
展开
-
SpringBoot2.0中MVC和WebFlux控制层Controller对比
本篇文章是SpringBoot2.0关于Controller控制层的对比,相信很多开发最好奇的也是这块。那么小编就带着大家一起先来看一下尝尝鲜,本篇文章比较短小精悍,只讲如何使用,至于原理剖析,后面会讲。阅读时间大概3分钟,现在开始!原创 2022-12-09 10:23:49 · 649 阅读 · 0 评论 -
高级Java开发者都知道的Hook钩子函数,你还不知道吗?
什么是钩子函数,在学习钩子函数之前,小编先提一个问题。请问在Spring中,如果JVM异常终止,Spring是如何保证会释放掉占用的资源,比如说数据库连接等资源呢?钩子函数非常简单,简单到小编只用摘抄一段Spring代码即可。走你,现在开始。问题Spring 容器中 Bean 在什么时候执行销毁方法?我们知道在Spring中定义销毁方法有两种方式实现 DisposableBean 的 destroy 方法。使用 @PreDestroy 注解修饰方法@Componentpublic c.原创 2020-05-15 00:30:34 · 3775 阅读 · 0 评论 -
程序员快速弄清Java异常体系,拒绝痛苦编程,开发效率加倍
知己知彼方能百战不殆,在小编初学Java时候特别怕程序报异常,经常会因为异常不知所措,相信这个问题应该是所有初学者都会有的心理感受;如果你也有这种感受,那么只有一种解决方法:迎难而上,攻克Java异常体系,长痛不如短痛,只要清楚了Java的异常体系,就不会再有这种感受了。下面跟着小编来窥探Java的异常体系吧。一、Java异常体系其实很简单其实Java的异常体系是非常简单的,简单到只要你看过本文就能明白百分之八九十的样子。当你清楚了Java的异常体系那么在遇到项目执行异常的时候,基本看报错的异常.原创 2020-05-13 23:14:05 · 661 阅读 · 0 评论 -
高级Java开发工程师带你走进原子操作,一篇文章搞清楚原子操作
原子特性: 原子是最小的粒子,不可再分这并不是一个化学课,而是巧妙的借用了化学上的一个概念,即原子是最小的粒子,不可再分;原子操作也是不能再分的操作;为了能把这个讲明白,下文基本都是大白话,其实Java本来并不是很难,而是总有一些人喜欢把简单的概念给复杂化。小编不喜欢那种说辞,所以尽量简单易懂。如有问题,欢迎提出问题。共同交流进步,最后谢谢你的阅读。举例说明原子操作重要性在很多场景中我们需要我们的操作是原子特性的,如果我们写的程序都是单线程的,其实我们没必要考虑原子操作。但是假如我们写多线程.原创 2020-05-13 23:04:35 · 695 阅读 · 9 评论 -
程序猿不要在写日期转换工具了,万能代码片段直接拿走使用。
作为开发者,每个开发项目中一定有很多的工具类,而其中百分之六七十就有一个DateUtils工具。每次都要写日期格式,yyyyMMdd。每个项目项目中使用的日期格式都不一样。终于有一天,一堆程序猿受不了了。于是把所有的日期格式都写完。放到一个工具里。使用就完了。文尾提供代码。欢迎收藏使用。目录1.JDK中DateTimeFormatter与SimpleDateFormat的区别2.Date...原创 2020-03-27 20:26:51 · 831 阅读 · 0 评论 -
「解决方案」幂等并发重复提交探究
一款专门为SpringBoot设计的防重幂等组件本文以下的讨论,都是假设我们数据库没有做唯一约束和乐观锁的场景下的分析。关于防重和幂等判断的讨论,欢迎留言讨论,感谢关注大佬支持。一、问题重现下面这段逻辑,在正常情况下是没有问题的,①也算进行了幂等校验,先判断状态在进行处理。但是当用户重复提交导致并发问题,两次请求都执行到了④步骤,而因为④并没有用乐观锁处理,就会导致幂等性问题。两次提交都...原创 2020-01-01 11:48:54 · 745 阅读 · 0 评论 -
看Mybatis如何花样设计Cache.md
看Mybatis如何花样设计 Cache为什么说花样设计 Cache , 是因为Mybatis只是对 Map数据结构的封装, 但是却实现了很多挺好用的能力。如果单单从设计模式上的角度来,其实就是典型的装饰器模式, 装饰器模式其实并不难,所以我们不讲设计模式, 本篇文章我们来看看Mybatils 缓存设计巧妙的点。通过简单的代码review来分析下这十个缓存类设计的巧妙点。一、模式分析......原创 2019-12-23 20:33:32 · 833 阅读 · 0 评论 -
Java多线程之隔离技术ThreadLocal源码详解
本篇文章是对ThreadLocal和InheritableThreadLocal,TransmittableThreadLocal的原理和源码进行深入分析,并举例讲解,其中前两个是JDK自带的。原理相对比较简单,其解决了单线程环境和在单线程中又创建线程(父子线程)中线程隔离的问题, TransmittableThreadLocal主要是解决,线程池中线程复用的场景。全文涉及到源码比较多阅读起来需要...原创 2018-07-17 09:37:15 · 3361 阅读 · 2 评论 -
Java开发者们for(;;)和while(true)的区别应该了解下
在我们阅读源码的时候经常会看到源码中会有下面这样的代码,当我看到这段代码自然而然就明白,这不就是一个无线循环吗?为什么不使用while呢?我们不禁疑问?那么带着这样的疑问,我们来探索一下吧 !for(;;)和while(true)区别从寓意上来看,两种写法都是无限循环从效率上看,while(true)每次循环要判断循环条件,for(;;)循环没有判断,理论上...原创 2018-07-17 09:39:11 · 10821 阅读 · 1 评论 -
Springboot2.0中webflux到底优秀在哪里
Spring-boot-webflux中所说的反应堆式编程reactor到底优秀在哪里?小编的Springboot2.0的课程已经快全部写完了。总结来看,对于有基础的同学学习难度不是很大,一周内就能上手。但是在小编看来编程如果说只会用,而不了解其编程模型和这样设计的好处,其实对于开发人员来说,并没有多大的收获!所以为了让感兴趣的同学对2.0编程模型反应式编程和Mono,Flux有一个清醒的认识......原创 2018-07-17 09:42:47 · 49173 阅读 · 9 评论 -
Springframework-ioc学习(一)之Xml配置文件加载
本篇文章是Springframework源码阅读系列第一章第一节,其主要讲解Spring是如何把xml配置文件一步一步加载成Document对象最终被装换成Bean对象的。主要通过代码领读的方式去深入探索(图中的注解同样重要,注意查看)。 Spring加载bean的流程: ①读取xml文件->②生成Document对象->③根据命名空间策略处理Document生成BeanDef...原创 2018-08-06 08:28:49 · 736 阅读 · 0 评论 -
引入Mockito测试用@Spy和@Mock
关于这个问题,小编百度了很多,基本都没有一个简单清晰的解释。或者是没有一个良好的实践例子,在此小编举例说明,希望大家能懂如果还不会用Mockito的同学,请移步 教程标题@Spy与@Mock区别和实践@Spy修饰的外部类,必须是真实存在的,如果没有我们要自己生成创建 Mockito.doReturn(response).when(creditpaymentTxnManageFacad...原创 2018-10-23 15:50:37 · 9619 阅读 · 2 评论 -
Elastic-Job源码解析(一)之与Spring完美整合
看过小编写SpringFramework源码解析的同学应该对Spring支持自定义标签还有点印象吧,没有的话我们回顾下,然后看看Elastic-Job是如何巧妙的利用自定义标签生成Job任务的吧。请注意这里用了一个巧妙关键字。我们看它如何巧妙的吧。Spring自定义标签在Spring中实现自定义标签只用继承NamespaceHandlerSupport类,然后定义自己的BeanDefini...原创 2018-11-08 17:33:17 · 899 阅读 · 0 评论 -
基于Apache commons-pool2的池化技术
使用的是Apache commons-pool2包 Common-pool2由三大模块组成:ObjectPool、PooledObject和PooledObjectFactory。 ObjectPool:提供所有对象的存取管理。 PooledObject:池化的对象,是对对象的一个包装,加上了对象的一些其他信息,包括对象的状态(已用、空闲),对象的创建时间等。 ...原创 2018-07-17 09:44:36 · 899 阅读 · 0 评论 -
作为Java程序猿synchronized关键字你真的理解吗?
synchronized 修饰 非静态方法当修饰非静态方式时候,我们知道非静态方式,是属于对象的,那么锁住了对象,意味这个,这个对象在并发情况下,只能执行一个.但是: 如果是多个对象的情况下,并不能有同步的作用synchronized(this){...}理解:所以当用synchronized修饰的时候,是在当前对象上加锁,仅会在当该对象要并发时原创 2018-02-09 11:00:11 · 721 阅读 · 0 评论 -
一篇文章,让你明白重入锁,自旋锁,公平锁及非公平锁
公平锁,就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中取到自己非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式白话文:就是公平锁是先到先得,按序进行. 非公平锁就是不排队直接拿,失败再说//在Java中是通过构造指定原创 2018-02-09 10:59:38 · 1021 阅读 · 0 评论 -
阿里云基于ECS的SLB负载均衡策略科普文章
本篇文章主要解释阿里云的SLB策略,主要内容来源自阿里云,是小编在选择购买服务器时候看到的,作为科普文章分享给大家,其实在小编看来,这个主要是给大公司企业做的,因为价格不菲,对于小企业公司,其实并不划算,其次对于用户量并不是很大的企业并没有这个需求我们知道如果要保证架构设计的高可用就要有一定的容错,其实对于企业来说解决措施就是在服务应用前用nginx作代理,让nginx去分发到正常的应原创 2018-02-09 10:59:04 · 3059 阅读 · 0 评论 -
整合阿里dubbo服务的项目搭建实战(springboot)
“看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然。所以,无论什么事情,仔细想一想,都没有什么大不了的。这能帮助自己在遇到挫折时稳定心态,想得更开。”– 《腾讯传》摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket本文跟着我学习的脚步,进行一步一步的探索。一、下载zookeeper服务注册管理器下载ZooKeeper地址:原创 2018-02-09 10:58:18 · 2015 阅读 · 0 评论 -
Java开发框架时编写的小功能(反射获取Method参数描述及注解描述)
本篇提供两个有用的工具类,是小编在写某web框架时候开发的,挺有用的.分享给大家.该项目包含很多工具类,本文只描述这两个简单的工具类,希望为你的工程有所帮助! 该源码中还有很多的有用的小工具,eg:json,xml,cache,sftp,ftp,io,proxy等,接下来小编会一个一个分享给大家,在年前的最后几天里,小编也会分享谷歌guava工具集的使用场景记录,分享给大家,希望大家多多关注! 点原创 2018-02-09 10:57:41 · 2320 阅读 · 0 评论 -
SpringBoot可插拔开箱即用之组件开发
问题由于适应公司不断发展带来的,售后问题,要求我们要对所有服务进行,主动检查.避免服务异常,造成损失。在这里将该项目的思路及springboot的自动化配置使用分享给大家,希望共同进步。学习。有共同爱好的童鞋,可以点击关注小编,如果看完本文想学习下源码,可以私信我,发送autoconfig关键字获取,地址。目前的方式是这样:网关部门定时扫描各个服务,进行监控状态检查,并原创 2018-02-09 10:57:00 · 4808 阅读 · 6 评论 -
谷歌Java开发工具包Guava之String字符串处理工具
在日常的开发中我们经常会对字符串(String)进行处理,转换成我们目标格式,简单的就没啥好说的,今天我们说下稍微有点难度的,准确的说,不是有难度而是,处理啰嗦复杂的那种,本篇以提出问题,然后解决问题的思路,进行讲解.使用的工具为Google的Guava工具集合本文亮点重点讲解:Joiner 连接工具及Splitter拆分工具基础问题-1:长度补全,将目标src长度补全为5原创 2018-02-09 10:56:18 · 2573 阅读 · 0 评论 -
谷歌Java开发工具包Guava之Collection扩展集合类
本篇文章,从命名规则的方向作为起始点,主要解释两个关键字,让你对Guava的扩展集合类型有一个清晰的认识,因为Guava集合非常精准地遵循了JDK接口契约,所以当你认识了之后,就可以直接查看API文档进行使用http://tool.oschina.net/apidocs/apidoc?api=guavaImmutable adj. 不变的;不可变的;不能变的被Imm原创 2018-02-09 10:55:08 · 1617 阅读 · 0 评论 -
深入浅出Mybatis系列(一)Mybatis入门
最早接触Mybatis是在2016年,那时候学习只会用,根本不知道什么原理,不懂的原理的地方只能死记。搭建一个小的demo放到github,工作需要的时候就直接复制黏贴,虽然也能满足工作需要但是总感觉到不带劲。在找到工作后大概2017年时候就对Mybatis的源码进行了阅读,其实相对于Dubbo,Spring,之类的源码Mybatis的源码还是非常简单的,现在也经常推荐给刚开始学习看源码的同学。...原创 2019-01-16 17:06:24 · 744 阅读 · 0 评论 -
SpringBoot2.0学习第一篇之构建RESTful Web服务
教程目录SpringBoot2.0学习第一篇之快速构建RESTful Web服务目标是什么?构建一个RESTful Web服务的过程。简单来讲就是区别于传统的Web服务,传统Web服务是需要视图引擎的,即做一个网站之类的,而RESTful Web服务主要是做数据处理的。因为它并不返回可视化的页面。只是处理后的数据而已开发环境JDK1.8或更高版本MavenIntelliJ ID...原创 2019-03-04 20:47:35 · 745 阅读 · 0 评论 -
快速理解Java字符串常量池
快速理解Java字符串常量池本篇课程不来虚的,上来就是干活,现在发车。小编通过代码案例及比喻,带你一窥究竟。为什么会有常量池的概念?不知道小伙伴们是否有思考过这个问题? 没有思考也无所谓,小编在这里类比一下,大家就会清晰了。什么是池? 我们听的最多的池,应该是数据库连接池. 为什么会有数据库连接池,其实就是为了节省资源,提高性能,防止重复创建连接,避免占用内存和网络资源。常量池其实就是...原创 2019-09-06 21:13:16 · 610 阅读 · 0 评论 -
一个程序猿的自我修炼之独孤九剑
不喜欢读书,却热爱武侠。不喜欢学习,却热爱编程。 以武会友,思考人生原创 2019-06-27 18:00:56 · 665 阅读 · 0 评论 -
幽你一默:江湖上流传只有程序猿才懂的幽默
亲试只有程序猿知道的梗1.一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”2.某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world。3.今天在公司听到一句惨绝人寰骂人...原创 2019-06-19 21:04:59 · 797 阅读 · 0 评论 -
SpringBoot分布式限流组件零配置
EasySentinel 是一款专门为SpringBoot项目设计的限流组件,利用Redis+lua从而来实现高性能和分布式的能力。使用比较简单。通过半嵌入式的开发即可使用分布式注解。引用使用Redis作为注册中心,所以需要添加redis依赖SpringBoot2版本之后官方强烈建议以此来替换spring-boot-starter-redis<dependency> ......原创 2019-04-25 18:12:45 · 2287 阅读 · 1 评论 -
深入浅出Mybatis系列(五)Mybatis事务篇
在学习Mysql事务开始,分为两步。一.先看下Mysql的事务级别都有什么,然后看Mysql的事务级别设置命令。及常见问题。二.JDK是如何处理数据库操作的呢? Mybatis是如何实现JDK定义的事务级别操作。一.Mysql的事务级别及常见概念MySQL事务隔离级别事务隔离级别脏读不可重复读幻读解释读未提交(read-uncommitted)是是是......原创 2019-04-26 10:41:30 · 29484 阅读 · 2 评论 -
深入浅出Mybatis系列(三)Mybatis核心配置解析
在本系列的第二篇文章中小编就说了,Mybatis的配置信息都是由Configuration来保存的,本篇文章我们就重点来看Mybatis的解析过程。在学习完本篇,你会完全掌握对Mybatis配置的认识,是你产生新的认识。本篇的源码就从下面的代码片段中开始。 @Test public void configurationTest() throws Exception { /...原创 2019-04-26 10:40:33 · 698 阅读 · 0 评论 -
深入浅出Mybatis系列(二)Mybatis核心配置篇
在本篇中小编主要对SqlSession及Configuration重点介绍,这两块知识点可以说是Mybatis中最重要的知识点,只有对SqlSession和Configuration有清醒的认识后,学习效率就翻倍提升。以下所有知识点都是小编所学所悟。如有问题,请留言评论指出,欢迎讨论,一起学习。关键词①SqlSession ②Configuration概念介绍SqlSessio...原创 2019-04-26 10:39:35 · 691 阅读 · 0 评论 -
Dubbo源码解析之Cluster集群容错策略介绍
前面说过了dubbo中Invoker代表了一个执⾏体,当我们在服务器启动一个dubbo 服务,其指定的每一个服务接口,都会⽣成一个Invoker对象,而在集群中因为我们的dubbo部署在了多个服务器所以会每一个Invoker对象都会有⼀个List集合。 而Cluster就负责对这些Invoker集合进⾏处理而执行。 而Cluster有多个实现类, 每个实现类都是⼀种策略。我们可以在SPI⽂件中...原创 2019-04-25 20:14:39 · 665 阅读 · 0 评论 -
Logback高级用法
在日常的生产中,尤其是在微服务盛行的今天,我们的服务很可能是作为分布式应用上的一个点,会接受来自不同客户端的请求,那么在服务的为每行日志标记出来自的客户端呢?本篇我们通过介绍Logback的高级用法,来为大家实现。日志扩展扩展知识在分布式应用的今天,如何通过日志把客户端请求的不同应用的日志串起来,展示呢首先分析原理其实很简单,就是为每个线程保存点私有变量,这个私有变量的值,由我们...原创 2019-04-25 20:13:41 · 726 阅读 · 0 评论 -
SpringBoot2.0学习第七篇之Asyn异步任务
异步任务 ?异步任务常用来处理对性能要求比较高的应用,通过减少阻塞,增加并行查询,来提高性能。其实实现异步任务也非常的简单,在Java中也有原生的API。本篇文章教你如何在SpringBoot项目下,优雅方便的使用异步编程。public interface ExecutorService extends Executor { <T> Future<T> submi......原创 2019-04-25 20:11:15 · 1296 阅读 · 2 评论 -
SpringBoot2.0学习第六篇之Endpoint监控端点扩展
什么是端点? 端点就是SpringBoot通过web或者jmx的方式向外部暴露应用的信息,或者上下文的信息。SpringCloud-Admin就是根据此技术来进行实现的。他们用到的技术就是@Endpoint,而不是通过自己@GetMapping之类进行实现的。下面小编就带大家一起来学习端点的使用。学会本文后在利用前面我们讲过的autoconfigure的自动化配置后,你就可以开发更高级的Spr......原创 2019-04-25 20:10:32 · 2637 阅读 · 0 评论 -
SpringBoot2.0学习第五篇之autoconfigure自动化配置
何为自动化配置?通读全文大概需要1分钟不知道用过SpringBoot的同学,有没有发现在SpringBoot的maven依赖中经常会有很多的starter之类的依赖,往往这些依赖的框架,在加入到pom之后,当应用启动时候就会自动的被应用整合起来比如昨天我们的thymeleaf教程中,SpringBoot在整合thymeleaf的时候,只是引入了spring-boot-starter-t......原创 2019-04-25 20:09:46 · 1316 阅读 · 0 评论 -
SpringBoot2.0学习第四篇之拦截器过滤器配置
对于JavaWeb开发,拦截器和过滤器无疑是两个非常重要的知识点,在传统SpringMVC的框架配置中,是令人很头疼的一个事情,因为需要在web.xml中配置,但是自从有了SpringBoot这一切都变得非常的简单,没有任何复杂点。任何人都能在1分钟内学会如何进行配置整合,下面跟着小编来一起配置拦截器和过滤器。通读全文大概需要1分钟教程目录目标是什么?过滤器和拦截器的根本区别快......原创 2019-04-25 20:09:02 · 1434 阅读 · 0 评论 -
SpringBoot2.0学习第三篇之整合thymeleaf模板引擎
在Java开发中如果说要问最近几年最流行的Web开发框架是什么?可能只会有一个答案。那就是SpringBoot,造成这样的最大原因是,SpringBoot极大的简化了Web的开发流程,可以说是零配置搭建开发环境。甚至web.xml的配置也没有了。使任何新手都可以在5分钟之内搭建一个Web项目,下面跟着小编来看看,如何在5分钟内搭建开放环境。通读全文需要3分钟。教程目录SpringBoot...原创 2019-04-25 20:08:04 · 763 阅读 · 0 评论 -
SpringBoot2.0学习第二篇之Configuration配置类
目标是什么?使用SpringBoot的方式去创建一个Bean,以代替传统通过xml的方式声明BeanSpring中如何优雅的注入配置参数开发环境JDK1.8或更高版本MavenIntelliJ IDEA 开发工具项目目录|____resources| |____application-test.properties| |____spring-context.xml|...原创 2019-03-04 20:49:25 · 1325 阅读 · 0 评论 -
谷歌Java开发工具包Guava之EventBus事件总线
事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉。事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。是不是觉得有点难,不要着急,文章后面会让你一眼让你学会使用这里面就涉及了两个主要事件:1. 注册事件(添加订阅者)2. 发起事件通知,依次通知这些订阅者eg原创 2018-02-09 10:54:07 · 3191 阅读 · 0 评论