经验分享
文章平均质量分 92
南橘ryc
《Java今法修真》
展开
-
【进阶之路】持续集成、持续交付与持续部署(CI/CD)
由来记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:“南橘,CI/CD有没有研究过?”我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我斩钉截铁的说:“老大,我不知道CI/CD是个啥。”老大当即对诚实的我进行了一顿夸耀,并且高兴地奖励我回去研究CI/CD的机会,并且告诉我,我们team的ScrumMaster马上要入职了,加下来的工作会采取持续集成(CI)和持续交付( 持续部署)(CD) 的模式。没过几天,新的ScrumMaster(就叫他S哥)就来了,项目原创 2021-09-08 09:56:54 · 394 阅读 · 0 评论 -
【进阶之路】Java的类型擦除式泛型
Java选择的泛型类型叫做类型擦除式泛型。什么是类型擦除式泛型呢?就是Java语言中的泛型只存在于程序源码之中,在编译后的字节码文件里,则全部泛型都会被替换为原来的原始类型(Raw Type),并且会在相应的地方插入强制转型的代码。因此,对于运行期间的Java程序来说ArrayList< Integer>和ArrayList< String>其实是同一个类型。这也就是Java选择的泛型类型叫做类型擦除式泛型的原因。ArrayList<String> stringArr原创 2021-08-07 12:04:53 · 233 阅读 · 1 评论 -
【进阶之路】动态代理与字节码生成
这段时间换了新工作,因为去了外企,所以对英语的要求突然猛增,现在每天靠着谷歌翻译过日子。在开会的时候,经常遇到不懂的单词,很多时候都需要记下读音,事后再慢慢根据语境去找对应的单词,日子过得可谓是有滋有味。于是乎,自我充电的时间大部分用来学习英语了,所以这段时间更新的节奏会很慢~对于大多数Java程序员而言,我们会经常用到字节码生成与动态代理技术,比如编译时织入的AOP框架中,在Spring的Bean组织管理中,亦或是Web服务器的JSP编译器里。总之,我们在不知不觉中已经大量的用到了这些技术了。动态.原创 2021-07-31 11:50:34 · 455 阅读 · 0 评论 -
【进阶之路】深入理解Java虚拟机的类加载机制(长文)
我们在参加面试的时候,经常被问到一些关于类加载机制的问题,也都会在面试之前准备的时候背好答案,但是我们是否有去深入了解什么是类加载机制呢?这段时间因为一些事情在家看了些书,这次就和大家分享一些关于Java类加载机制的知识。虚拟机的类加载机制:Java虚拟机把数据加载到内存,同时对数据进行校验、解析、初始化等一些列操作,最终把Class文件变为虚拟机可以直接使用的Java类型文件。一个类从被加载到虚拟机内存开始,直到卸载出内存为止,他的生命周期会经历加载、验证、准备、解析、初始化、使用和卸载七个阶段(原创 2021-06-29 12:03:07 · 134 阅读 · 1 评论 -
【进阶之路】多线程条件下分段处理List集合的几种方法
这两个月来因为工作和家庭的事情,导致一直都很忙,没有多少时间去汲取养分,也就没有什么产出,最近稍微轻松了一点,后续的【进阶之路】会慢慢回到正轨。开门见山的说,第一次接触到多线程处理同一个任务,是使用IO多线程下载文件,之后也一直没有再处理这一块的任务,直到前几天有同事问我,为什么多线程处理一个list集合会出现各种bug,以及如何使用多线程的方式处理同一个list集合。第一、为什么会出现类似于重复处理某一个模块的问题?我们都知道,在Java中,每个线程都有自己独立的工作内存,线程对共享变量的所有操.原创 2021-06-04 16:47:40 · 1859 阅读 · 2 评论 -
【进阶之路】自定义注解介绍与实战
在使用spring框架的时候,我们经常会感叹注解式编程真是大大简化了开发的时间,几个小小的注解,就能解决一系列的配置问题,让写代码像写诗一样轻松明快。我们都知道,在spring框架的前期,大多使用XML配置进行开发。XML配置起来有时候冗长,如实体类的映射,使用XML进行开发会显得十分复杂。同时注解在处理一些不变的元数据时有时候比XML方便的多,比如spring 声明式事务管理,如果用XML写的代码会多的多。注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与原创 2021-02-24 16:06:05 · 221 阅读 · 0 评论 -
历时六个月项目开发的心得与我的庚子年
回家之前今天就要回家了,也终于在农历新年到来之前完成了到新公司的第一个项目,现在只有一个感觉,就是累。(我现在就像垮起了批脸的啾啾)从八月初至今,时逾6个月,从项目立项到线上测试收尾,真正在写代码的时间大概也就一个多月。软件开发模型上我们选择的螺旋模型。(螺旋模型中分周期推进项目,每一周期都包括需求定义、风险分析、代码实现和项目评审4个阶段,由这4个阶段进行迭代,软件开发过程每迭代一次,软件开发就前进一个层次)本来预计是在十月份上线第一期,之后慢慢优化迭代。因为项目经理能力超群,设计迭代的速度过快,原创 2021-02-08 12:26:14 · 297 阅读 · 1 评论 -
【进阶之路】服务网格Service Mesh到底是什么
首先,看到Service Mesh这个词,相信很多同学都听说过这个词,但是具体它是干什么的,每个人就各有各的理解了。我第一次系统地了解Service Mesh的时候,也是通过帮同事买课返现,意外地看到这个名词,旺盛的好奇心迫使我点了进去。然后,不多时,我便一头雾水的走了出来。啊这,里面的弯弯绕绕比盥洗室之主还复杂啊!于是乎,在经过一段时间的学习,对Service Mesh有所了解之后,我决定写下这篇文章与大家分享我的理解。一、什么是Service Mesh开门见山,先站在前辈的肩膀上给出定义:Ser原创 2021-01-26 16:01:25 · 328 阅读 · 0 评论 -
【进阶之路】调用链监控原理与zipkin项目简单搭建
在单体服务的架构中,所有的服务,组件都在一台机器上,如果需要监控服务的异常与耗时,往往是比较简单的。我们可以使用 AOP 在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间。在问题追踪的时候,也可以在关键节点打印日志。但是在微服务架构里就不同了,一次请求会涉及到多个模块与系统,往往需要多台机器的相互协作才能完成。而一系列的请求,不仅会涉及到串联并联、还有同步异步之分。这个时候,如果依然采取单体架构中服务监控的方式,那么确定这个请求背后调用了哪些服务,哪些模块,哪些节点及调用的先后顺序,调用的原创 2021-01-15 15:57:08 · 325 阅读 · 2 评论 -
【进阶之路】和南橘一起探索连接池(一)
一、连接池的定义什么叫连接池?顾名思义,连接池就是将应用所需的连接对象放在池中,每次访问时从池中获取,使用完毕再放回池中,以达到连接复用的目的。连接池和线程池很像,都是为了减少连接对象在创建、销毁连接过程中不必要消耗的资源。大家接触最多的连接池、大概是数据库连接或者tomcat连接池,C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等。这些连接池的目的都非常的纯粹,即在服务启动的时候,预先生成若干条连接,每当有请求过来,就从中取出一个,执行操作,执行完成后再放回,从而避免反原创 2021-01-11 20:32:20 · 118 阅读 · 0 评论 -
【进阶之路】任务调度监控开发详解
新的一年、旧的方式,这一次就从一个需求开发的角度和大家分享监控系统的开发。前段时间与大家分享了定时任务调用平台xxl-job,也简单地讲了讲平台的结构模式、调度方法。【进阶之路】定时任务调用平台xxl-job调用任务的过程中,如果xxl-job的代码能够顺利执行,但是本身需要执行的任务没有顺利执行成功,或者因为一些问题导致任务延迟执行甚至没有执行,xxl-job并不会正常报错通知。这个时候,我们就需要用一些其他的方法来协助监控定时任务的执行。在大佬的要求下,我这边设计了一个方案,如图所示:.原创 2021-01-08 09:15:24 · 999 阅读 · 0 评论 -
【进阶之路】并发编程(三)-非阻塞同步机制
导言这一篇的内容主要来自于《java并发编程实战》,有一说一,看这种写的很专业的书不是很轻松,也没办法直接提高多少开发的能力,但是却能更加夯实基础,就像玩war3,熟练的基本功并不能让你快速地与对方拉开差距,但是却能再每一次团战中积累优势。近年来,并发编程的领域更多的偏向于使用非阻塞算法,这种算法底层用原子机器指令(如比较交换CAS之类的)来替代锁用以确保数据在并发访问中的一致性。这样的非阻塞算法广泛的用于在操作系统和JVM中实现线程/程序调用机制、垃圾回收算法等。java5.0后,使用原子变量原创 2021-01-01 11:50:51 · 228 阅读 · 0 评论 -
【进阶之路】线程池拓展与CompletionService操作异步任务
大家好,我是练习java两年半时间的南橘,小伙伴可以一起互相交流经验哦。一、扩展ThreadPoolExecutor1、扩展方法介绍ThreadPoolExecutor是可以扩展的,它内部提供了几个可以在子类中改写的方法(红框内)。JDK内的注解上说,这些方法可以用以添加日志,计时、监视或进行统计信息的收集。是不是感觉很熟悉?有没有一种spring aop中 @Around @Before @After三个注解的既视感?我们来对比一下ThreadPoolExecutorspring.原创 2020-12-22 09:15:21 · 262 阅读 · 0 评论 -
【进阶之路】Java代码性能调优-基准测试工具JMH(三)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助第一件事还是把思维导图贴给大家,因为用的是免费版,所以有水印,如果需要原始版本的话,可以加我的微信:【进阶之路】Java代码性能调优(一)【进阶之路】Java代码性能调优(二)前两章介绍了JA原创 2020-06-22 20:08:26 · 575 阅读 · 0 评论 -
【进阶之路】Java代码性能调优(二)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助第一件事还是把思维导图贴给大家,因为用的是免费版,所以有水印,如果需要原始版本的话,可以加我的微信:上一章介绍了字符串、数字和集合类的一些高效用法,这一章就继续查漏补缺、介绍更多的性能优化技巧。【进阶原创 2020-06-11 21:10:28 · 268 阅读 · 0 评论 -
【进阶之路】Java代码性能调优(一)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助第一件事还是把思维导图贴给大家,因为用的是免费版,所以有水印,如果需要原始版本的话,可以加我的微信:一、字符串的优化1、String优化String对象是java中重要的数据类型,在大部分情况下我们都原创 2020-06-08 20:58:02 · 414 阅读 · 0 评论 -
【进阶之路】SM4国密算法与实现
一、起因最近在工作中,突然一个交易异常缓慢,调用时间高达40wms,严重影响了整个集群的生产效率。得知这个情况,我开始对整个交易进行剖析,最终发现原来是RSA非对称加密算法的锅。RSA作为一种非对称的加密算法,其中很重要的一特点是当数据在网络中传输时,用来加密数据的密钥并不需要也和数据一起传送。因此,这就减少了密钥泄露的可能性。RSA在不允许加密方解密数据时也很有用,加密的一方使用一个密钥,称为公钥,解密的一方使用另一个密钥,称为私钥,私钥需要保持其私有性。RSA非常安全,但是效率却很低,本身的秘原创 2020-05-26 20:18:23 · 14588 阅读 · 7 评论 -
【进阶之路】分布式系统中的柔性事务解决方案
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是消息中间件的文章,大家没有看过的可以跟着看一下【进阶之路】消息队列——原理及选型(一)...原创 2020-04-25 19:59:28 · 660 阅读 · 0 评论 -
【进阶之路】消息队列——RocketMQ原理(三)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是消息中间件的文章,大家没有看过的可以跟着看一下【进阶之路】消息队列——原理及选型(一)【...原创 2020-04-19 13:59:12 · 1078 阅读 · 0 评论 -
【进阶之路】消息队列——RabbitMQ原理(二)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是消息中间件的文章,大家没有看过的可以跟着看一下【进阶之路】消息队列——原理及选型(一)【...原创 2020-04-12 15:55:05 · 3063 阅读 · 0 评论 -
【进阶之路】消息队列——原理及选型(一)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助第一件事还是把思维导图贴给大家,因为用的是免费版,所以有水印,如果需要原始版本的话,可以加我的微信...原创 2020-04-09 21:34:12 · 1184 阅读 · 0 评论 -
【进阶之路】攻克JVM——JVM的垃圾收集器(三)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是之前的两篇,没看过的可以一起看一下攻克JVM——JVM对象及对象的访问定位(一)攻克JV...原创 2020-04-07 20:37:45 · 342 阅读 · 0 评论 -
【进阶之路】攻克JVM——JVM的垃圾回收(二)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是之前的几篇文章,有兴趣的同学可以看看(暗搓搓给自己打广告)索引中一些易忽视的点Redis...原创 2020-04-05 12:54:42 · 172 阅读 · 0 评论 -
【进阶之路】攻克JVM——JVM对象及对象的访问定位(一)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是之前的几篇文章,有兴趣的同学可以看看(暗搓搓给自己打广告)索引中一些易忽视的点Redis...原创 2020-04-01 09:46:19 · 345 阅读 · 0 评论 -
【进阶之路】包罗万象——JAVA中的锁
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是之前的几篇文章,有兴趣的同学可以看看(暗搓搓给自己打广告)索引中一些易忽视的点Redis...原创 2020-03-30 20:44:30 · 921 阅读 · 0 评论 -
【进阶之路】Redis基础知识两篇就满足(二)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这篇文章的出现,首先要感谢一个人三太子敖丙 ,就是他的文章让我发现,原来Redis的知识如此的多...原创 2020-03-28 21:35:59 · 246 阅读 · 0 评论 -
【进阶之路】Redis基础知识两篇就满足(一)
导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这篇文章的出现,首先要感谢一个人三太子敖丙 ,就是他的文章让我发现,原来Redis的知识如此的多...原创 2020-03-27 20:55:18 · 442 阅读 · 0 评论 -
【进阶之路】基于ShardingSphere的线上业务数据脱敏解决方案
因为某种原因,需要去考虑数据脱敏的问题,但是既不想因为脱敏而影响数据的操作性,又需要对一些敏感信息进行可靠的保护。因此,正好解决了手头问题的我就开始研究各种脱敏手段、寻求最适合目前现状的脱敏解决方案。对于已经上线的业务,如何在不修改业务逻辑、业务SQL的情况下,透明化、安全低风险地实现无缝进行脱敏改造呢?Apache的ShardingSphere进入了我的视野,Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Shardin原创 2020-12-14 19:38:43 · 457 阅读 · 0 评论 -
【进阶之路】线程池配置与调优的一些高级选项(一)
这一篇的内容主要来自于《java并发编程实战》,有一说一,看这种写的很专业的书不是很轻松,也没办法直接提高多少开发的能力,但是却能更加夯实基础,就像玩war3,熟练的基本功并不能让你快速地与对方拉开差距,但是却能再每一次团战中积累优势。一、线程池的基础1、线程池的相关属性:corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的.原创 2020-12-08 11:08:05 · 350 阅读 · 0 评论 -
【进阶之路】定时任务调用平台xxl-job
大家好,我是练习java两年半时间的南橘,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和工作中的重点(自我认为),希望给大家带来一些帮助定时任务很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多可以相互替换场景。如,发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列.原创 2020-12-04 14:50:45 · 2001 阅读 · 0 评论 -
【进阶之路】算法的时间复杂度与空间复杂度
大家好,我是练习java两年半时间的南橘,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和工作中的重点(自我认为),希望给大家带来一些帮助因为最近在学习软件设计师、正巧遇上了概念性的算法题。因为之前学习并不系统的原因,虽然能做题,但是却不是非常了解算法中时间复杂度。本着研究学习的心理,这几天就开始研究算法中的时间复杂度,还真学到了一些东西。一、时间复杂度在计算机科学中,时.原创 2020-11-30 15:19:17 · 830 阅读 · 0 评论 -
【进阶之路】索引中一些易忽视的点
导言从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助这是这篇文章的思维导图,因为用的是免费版的软件,所以有不少水印,需要的可以问我要从索引开始为什么会选择从索引开...原创 2020-03-26 20:02:06 · 317 阅读 · 1 评论