首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
进阶之路
南橘ryc
创建于2021-06-04
订阅专栏
一步一天,是为通天,我们一起向成为优秀程序员的道路上进阶吧!
等 12 人订阅
共44篇文章
创建于2021-06-04
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
【进阶之路】SM4国密算法与实现
最近在工作中,突然一个交易异常缓慢,调用时间高达40wms,严重影响了整个集群的生产效率。得知这个情况,我开始对整个交易进行剖析,最终发现原来是RSA非对称加密算法的锅。 RSA非常安全,但是效率却很低,本身的秘钥长度就是1024bit,随着大数解析技术的发展,秘钥的长度还要进…
【进阶之路】Java代码性能调优(一)
String对象是java中重要的数据类型,在大部分情况下我们都会用到String。在java语言漫长的进化过程中,开发人员也对String做了大量的优化,其中字符串的不变性和常量池复用也是String的重要特点 String类以final进行了修饰,在系统中就不可能有Stri…
【进阶之路】Java代码性能调优(二)
上一章介绍了字符串、数字和集合类的一些高效用法,这一章就继续查漏补缺、介绍更多的性能优化技巧。 从之前的文章可以得知,int到String的转换是一个耗时的操作,因为我们需要尽量避免做这些转换。如果实在需要,也可以动用上期Integer自动拆包装包的方法,预先将一部分的int值…
【进阶之路】操作日志、加解密与嵌套循环优化
最近在工作中涉及到一些关于后台信息修改的日志内容记录,涉及到多个表与多个类数据的修改,获取对象的属性成了一个比较麻烦的事情。 同时,因为不知道每次具体修改的对象的信息,为了减少代码量,所以我用到反射来动态的获取对象的属性。 下面的代码是利用反射来获取对象属性值变化的比较简单的一…
【进阶之路】理解结构型模式开发(桥接模式)
结构型模式主要描述如何将类或对象通过组合新来实现功能。它主要分为类结构型模式和对象结构型模式,类结构型模式采用继承机制来组织接口和类,对象结构型模式釆用组合或聚合来组合对象。 首先回到开头,我们为什么要使用设计模式?很好理解,设计模式就是前人经验的结晶,每一种设计模式都解决了特…
【进阶之路】理解结构型模式开发(享元模式)
说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用。在之前的代码调优的过程中,我就稍微触碰了一下享元模式,但是没有具体来解释。 这篇文章,我就和大家一起分享一下我对享元模式的理解。 首先还是从常量池来一起学习享元模式。 相…
【进阶之路】理解结构型模式开发(适配器模式)
之前的文章,我们讲过桥接模式。桥接模式是我们代码里抽象与现实之间的桥梁,而今天要讲的适配器模式,则可以理解为不兼容的接口(类)之间的桥梁,就像读卡器至于手机卡(现在已经没有手机卡了吧),转接头之于HTML线一样。 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼…
【进阶之路】理解行为型模式开发(责任链模式)
之前和大家分享了设计模式中的结构型模式,它主要是描述如何将类或对象通过组合新来实现功能,而我也是挑选了结构型模式中一些新接触设计模式的同学们不太能注意到的与大家分享(像代理模式、装饰模式等都是平常学习中接触较多的)。分享的初衷也是自己在工作中灵光一现发现可以用这种模式来提高效率…
【进阶之路】深入了解volatile、内存屏障与happens-before规则
大家都知道,在阿里巴巴泰山版开发手册中有这一段,在并发情况下使用延迟初始化的方法实现单例模式时,需要将目标属性声明为volatile。 volatile关键字在 Java 中的作用是保证变量的可见性和防止指令重排。 线程在运行的过程中会把主内存的数据拷贝一份到线程内部cache…
【进阶之路】Mybatis-Plus中乐观锁@version注解的问题与解决方案
这篇文章源于周五一次生产问题,公司代码紧急上线之后,突然出现信息无法更新的问题。在排查日志文件以后,惊奇的发现没有任何错误日志,同时一个事务中的两个update方法竟然只有一条执行成功。 大家都感觉比较惊奇,然后开始肉眼对代码进行review,这次出问题的代码比较特殊,在测试环…
【进阶之路】算法的时间复杂度与空间复杂度
因为最近在学习软件设计师、正巧遇上了概念性的算法题。因为之前学习并不系统的原因,虽然能做题,但是却不是非常了解算法中时间复杂度。本着研究学习的心理,这几天就开始研究算法中的时间复杂度,还真学到了一些东西。 1、时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机…
【进阶之路】定时任务调用平台xxl-job
很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多可以相互替换场景。如,发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列,然后去消费mq消息,发送短信。但是在很多情况…
【进阶之路】线程池配置与调优的一些高级选项(一)
corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads方法,线程…
【进阶之路】基于ShardingSphere的线上业务数据脱敏解决方案
因为某种原因,需要去考虑数据脱敏的问题,但是既不想因为脱敏而影响数据的操作性,又需要对一些敏感信息进行可靠的保护。因此,正好解决了手头问题的我就开始研究各种脱敏手段、寻求最适合目前现状的脱敏解决方案。 Apache的ShardingSphere进入了我的视野,Apache Sh…
【进阶之路】线程池拓展与CompletionService操作异步任务
ThreadPoolExecutor是可以扩展的,它内部提供了几个可以在子类中改写的方法(红框内)。JDK内的注解上说,这些方法可以用以添加日志,计时、监视或进行统计信息的收集。是不是感觉很熟悉?有没有一种spring aop中 @Around @Before @After三个…
【进阶之路】并发编程(三)-非阻塞同步机制
近年来,并发编程的领域更多的偏向于使用非阻塞算法,这种算法底层用原子机器指令(如比较交换CAS之类的)来替代锁用以确保数据在并发访问中的一致性。这样的非阻塞算法广泛的用于在操作系统和JVM中实现线程/程序调用机制、垃圾回收算法等。 java5.0后,使用原子变量类(例如Atom…
【进阶之路】分布式项目中的链路追踪
在单体服务的架构中,所有的服务,组件都在一台机器上,如果需要监控服务的异常与耗时,往往是比较简单的。我们可以使用 AOP 在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间。在问题追踪的时候,也可以在关键节点打印日志。 但是在微服务架构里就不同了,一次请求会涉及到…
【进阶之路】和南橘一起探索连接池(一)
什么叫连接池?顾名思义,连接池就是将应用所需的连接对象放在池中,每次访问时从池中获取,使用完毕再放回池中,以达到连接复用的目的。连接池和线程池很像,都是为了减少连接对象在创建、销毁连接过程中不必要消耗的资源。 大家接触最多的连接池、大概是数据库连接或者tomcat连接池,C3P…
【进阶之路】调用链监控原理
前段时间与大家分享了定时任务调用平台xxl-job,也简单地讲了讲平台的结构模式、调度方法。 调用任务的过程中,如果xxl-job的代码能够顺利执行,但是本身需要执行的任务没有顺利执行成功,或者因为一些问题导致任务延迟执行甚至没有执行,xxl-job并不会正常报错通知。这个时候…
【进阶之路】服务网格Service Mesh到底是什么
首先,看到Service Mesh这个词,相信很多同学都听说过这个词,但是具体它是干什么的,每个人就各有各的理解了。我第一次系统地了解Service Mesh的时候,也是通过帮同事买课返现,意外地看到这个名词,旺盛的好奇心迫使我点了进去。然后,不多时,我便一头雾水的走了出来。啊…
下一页