![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 62
鲫鱼哥
hello work
展开
-
阿里巴巴P3C java编程规范(最新版github下载)
阿里java编程规范推荐,以及最新版下载方法原创 2022-02-24 09:59:15 · 3280 阅读 · 0 评论 -
深拷贝(clone)最佳实践 -- 考虑拷贝消耗的cpu和拷贝速度
深拷贝(clone)是java开发过程中经常遇到问题,有人用io流、有人用json序列化、有人循环拷贝属性等等,网上文章都能实现功能。问题:clone是计算操作,消耗cpu如果速度慢(高并发场景几十ms也是非常慢的)会导致程序卡顿,qps降低。网上解决方案都没有提到性能问题,我实际使用后对性能进行了优化,最后推荐:FastCloneFastClone介绍FastClone是一款非常好用,支持大部分场景深克隆和浅克隆的工具。被推荐的不多,被埋没了。<dependency> <gr原创 2021-08-07 09:49:53 · 1819 阅读 · 3 评论 -
Arthas jvm诊断工具入门到精通
我举个常见场景,你有没有遇到有没有觉得难搞,熟练使用Arthas会让以下问题非常简单:生产环境慢接口分析,不知道接口耗时的原因 (trace命令)生成环境断点,查看某个方法入参返回值(watch命令)觉得运维发版的代码和我本地代码不一样,需要反编译 (Decompile Class Jad 命令)查看内存中,变量的值 (OGNl表达式)cpu高时,分析造成cpu高的代码 (thread命令)拦截某个方法,并且以同样的入参进行重试调用 (TT命令)调用代码中任意方法 (OGNl表达式)a原创 2021-08-06 23:34:46 · 234 阅读 · 0 评论 -
一条sql造成死锁
问题背景 访问量增加,突然大量死锁报警,看日志是一条这样sql:insert into tableName (uid,name) select ?,? from dual where not exists (select 1 from tableName where uid=? and name=?); uid,name有唯一索引。知识点这个问题有几个知识点:insert后面的select会当前读,隐式加锁查询不存在,会降级为间隙锁间隙锁查询不是互斥的,会造成死锁案例分析间隙锁死锁原创 2020-12-10 10:12:33 · 791 阅读 · 0 评论 -
MybatisPlus动态修改表名或增加库名
背景 在数据库操作过程中,经常有修改表名的需求,例如:分表时,修改表名加上分表前后缀;多数据库一个实例,表名前面加上库名,实现本地跨库事务等等。 我用到的场景是后者,动态加库名。由于使用了MybatisPlus,整个开发过程中不会自己写sql,也没办法通过硬编码修改表名。解决方案 MybatisPlus中只需要一个配置类即可自定义,动态修改表名,代码如下:@Configurationpublic class MybatisPlusConfig { List<String> t原创 2020-12-06 21:22:11 · 8728 阅读 · 3 评论 -
线程池正确用法
背景 对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。 随着jdk1.8的普及,多线程处理问题,除了使用使用线程池(ExecutorService),很多人选择了parallelStream() 并行流,底层使用forkjoin实现并行处理。 那么并行和并发又有什么区别?究竟改如何选择?滥用时又会有什么影响? 这些问题我分以下几篇文章进行详细说明: 1. 多线程并发和并行的区别 2. parallelStream()并行滥用的后果 3原创 2020-09-13 20:34:54 · 8932 阅读 · 0 评论 -
forkjoin和forkjoinpool讲解
forkjoin和forkjoinpool讲解背景为什么需要forkjoin先看代码结合多线程理解forkjoin代码forkjoin主要的类forkjoin常用方法forkjoin设计原理forkjoin整体工作流程工作队列和线程池背景 对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。 随着jdk1.8的普及,多线程处理问题,除了使用使用线程池(ExecutorService),很多人选择了parallelStream() 并行流,底层使用fork原创 2020-09-13 17:20:37 · 9200 阅读 · 0 评论 -
parallelStream()并行滥用的后果
背景 对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。 随着jdk1.8的普及,多线程处理问题,除了使用使用线程池(ExecutorService),很多人选择了parallelStream() 并行流,底层使用forkjoin实现并行处理。 那么并行和并发又有什么区别?究竟改如何选择?滥用时又会有什么影响? 这些问题我分以下几篇文章进行详细说明: 1. 多线程并发和并行的区别 2. parallelStream()并行滥用的后果 (本文原创 2020-09-13 16:52:11 · 18556 阅读 · 1 评论 -
多线程并发和并行的区别
背景 对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。 随着jdk1.8的普及,多线程处理问题,除了使用使用线程池(ExecutorService),很多人选择了parallelStream() 并行流,底层使用forkjoin实现并行处理。 那么并行和并发又有什么区别?究竟改如何选择?滥用时又会有什么影响? 这些问题我分以下几篇文章进行详细说明: 1. 多线程并发和并行的区别 2. parallelStream()并行滥用的后果 3原创 2020-09-13 14:35:34 · 12351 阅读 · 0 评论 -
@Value(“${}“) 采坑记录
背景今天排查一个老代码bug,最终定位到是配置文件使用@Value注解获取,实际使用时值为null。对@value进行一下用法总结问题详细说明我们是一个加密盐存放在application.yml中,工具类中使用如下注解获取,结果为null,大家能看出问题吗? @Value("${md5_salt}") private static String md5Salt;问题就在static上,使用static修饰,会在spring初始化之前完成初始,无法注入。错误用法总结使用static或原创 2020-08-05 00:47:20 · 8858 阅读 · 0 评论 -
java正则表达式类用法
背景关于正则表达式的语法随处可见,java中正则的常用类究竟有哪些用法,应该如何使用呢?本文给出详细例子正则类说明import java.util.regex.Matcher;import java.util.regex.Pattern;最常用的两个工具类:Pattern类用于创建一个正则表达式Matcher类用于处理字符串。构造方法是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例方法说明Pattern.com原创 2020-08-01 16:00:40 · 11250 阅读 · 0 评论 -
正则表达式拆分url
背景做web开发的同学,经常会有从url中获取二级域名或者主域名或者参数等等需求,需要扎实的正则功底。本文提供一个全面的url拆分案例,需要哪个部分用哪个部分。案例将url的各个部分拆开,让我想取哪部分就取哪部分?url: http://www.baidu.com/love/java?lang=javaregex: (\w+):\/\/([^/:]+)(:\d*)?([^# ]*)使用js举例var url = "http://www.baidu.com:80/love/java?lang=原创 2020-08-01 15:41:42 · 13856 阅读 · 1 评论 -
java中将GMT-8时间输出为CST时间字符串
背景今天公司一个模块从服务器迁移到k8s,出现时间toString()以后输出结果和以前不一致的情况,原因是以前是CST时间,k8s上统一设置环境时区为GMT-8了。CST:China Standard Time(老外认为有其他含义,中国就这个缩写),中国标准时。GMT:Greenwich Mean Time,格林威治标准时,地球每15°经度 被分为一个时区,共分为24个时区,相邻时区相差一小时;例: 中国北京位于东八区。如何设置-Duser.timezone=GMT+08 启动命令设置jvm参数原创 2020-07-31 01:25:06 · 12264 阅读 · 0 评论 -
Asia/Shanghai与GMT-8的区别
背景今天公司一个模块从服务器迁移到k8s,出现时间toString()以后输出结果和以前不一致的情况,原因是以前是CST时间,k8s上统一设置环境时区为GMT-8了本文会讲清楚中国使用时区的来龙去脉。下一篇文档,会讲java中,遇到改时区问题,如何解决。先了解冷知识知识很重要,理解了这些才是时区的关键。DST:Daylight Saving Time中文名叫“夏令时”,一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。中国1986-199原创 2020-07-31 01:13:03 · 28510 阅读 · 9 评论 -
IaaS、PaaS、SaaS、BaaS和FaaS英文全称以及解释说明
IaaS、PaaS、SaaS、BaaS和FaaS先说aaS:As-a-ServiceIaaS:Infrastructure as a ServicePaaS:Platform as a ServiceSaaS:Software as a ServiceBaaS:Backend as a ServiceFaaS:Function as a service其他最近几年,各种分享会,总后有这些听起来很相似的名字,究竟有啥区别呢?先说aaS:As-a-ServiceAs-a-Service的首字母,也就是作为原创 2020-07-19 22:38:20 · 14819 阅读 · 0 评论 -
Sonar报错Unknown url : /api/alm_settings/list解决
问题描述SonarQube 8.4.0版本,按照报错,如图:Unknown url : /api/alm_settings/list解决方案已提交官方,官方给出恢复在下一个版本(8.4.1 release)会修复影响范围对功能无影响,放心使用其他功能,关掉弹层即可。...原创 2020-07-14 23:18:04 · 11061 阅读 · 0 评论 -
java项目使用Sonar进行质量管理(最新版-增量代码扫描)
java项目使用Sonar进行质量管理百度搜索各种坑本文介绍1. SonarQube 8.4.0下载和安装2. IDEA SonarLint插件安装和使用3. mvn 命令扫描项目4. Sonar 增量代码扫码的使用百度搜索各种坑看到这篇文档的相信已经看了不少文章了,主要两个问题:版本老旧,5.x、6.x、7.x都有,而且安装复杂,新版本做了很多优化,简洁了很多搜索“增量代码扫描”,全都是一个人答案,而且是个老旧的答案。其实新版本,首页默认已经支持了增量代码扫码。教程都是配置mysql,新版so原创 2020-07-14 23:10:00 · 16885 阅读 · 11 评论 -
Netty线程模型
Netty线程模型Netty解决的问题Netty的使用场景Netty线程模型ByteBuf详解Netty解决的问题NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、SocketChannel、 ByteBuffer等。开发工作量和难度都非常大: 例如客户端面临断连重连、 网络闪断、心跳处理、半包读写、 网络拥塞 和异常流的处理等等。Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装,解决了上述问题。且Netty原创 2020-07-12 23:32:48 · 10543 阅读 · 0 评论 -
java IO模型详解
IO模型介绍java IO模型BIO(Blocking IO)缺点:应用场景:NIO(Non Blocking IO)应用场景:AIO(NIO 2.0)BIO、 NIO、 AIO 对比java IO模型IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIOBIO(Blocking IO)同步阻塞模型,一个客户端连接对应一个处理线程缺点:1、IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源 2、如果线程很多,会原创 2020-07-12 23:24:02 · 10880 阅读 · 0 评论 -
Sharding-JDBC多数据源动态切换
Sharding-JDBC多数据源动态切换背景介绍方案介绍版本说明实现方式1. spring-boot依赖2. 启动类配置3. yml配置4. 自定义强制路由5. AOP切换数据源6. 编写事务代码7. 源码下载背景介绍我们公司项目使用多个mysql实例,业务分库,无需分表。需要实现如下功能:多数据源动态切换读写分离分布式事务(XA)方案介绍通过阅读Sharding-Sphere官方文档,结合业务进行了设计,给出如下解决方案:使用Sharding-JDBC管理数据源,自带读写分离和分布原创 2020-07-12 22:59:15 · 26708 阅读 · 17 评论 -
分布式事务核心理论
分布式事务理论基础背景介绍CAP理论和BASE理论CAP理论BASE理论刚性事务和柔性事务DTP模型(刚性事务)最大努力通知(柔性事务)可靠消息最终一致性(柔性事务)TCC模式(柔性事务)背景介绍公司系统最近完善了微服务架构,以前单实例主从mysql进行了多实例拆分,根据业务分摊主库压力。基于微服务架构设计功能,总是绕不开分布式事务的问题,针对各种分布式事务解决方案进行了详细调研,这一篇文章,主要介绍一下分布式事务理论基础,有了这些理论才能结合业务选择合适的方案。(ps:最佳实践是,通过合理设计尽量避免原创 2020-07-08 01:16:31 · 10614 阅读 · 1 评论 -
RocketMq架构脑图
RocketMq架构和名词介绍原创 2020-06-13 19:01:43 · 10670 阅读 · 0 评论 -
ELK 7.6.2 安装文档
ELK 7.6.2 安装文档技术栈介绍一. 安装Elasticsearch(一主一从)二. 安装kibana三. 安装Filebeat技术栈介绍文档时间: 2020-04-05 (ps:elastic版本迭代非常快,每个月都不一样)当前版本:7.6.2官方文档:https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html文档包括elastic-stack6个组件,本次调研ELK,只安装前三个原创 2020-06-13 18:23:23 · 10930 阅读 · 0 评论 -
maven打包常用命令总结
maven打包常用命令总结基本命令介绍1、mvn clean2、mvn compile3、mvn package4、mvn install5、mvn deploy生产环境打包举例1、生产环境根据源码构建项目:2、可用用到的其他mvn参数介绍:开发过程中常见以下几个命令,这些命令执行后程序究竟发生了什么变化?生产环境如果使用shell脚本配置jenkins构建项目,如何使用命令呢?下面介绍一下我常...原创 2019-10-24 23:37:05 · 12141 阅读 · 0 评论 -
maven配置总结(pom.xml和settings.xml)
maven配置总结一、pom.xml配置1、自定义参数2、依赖包版本管理3、depoly发布路径配置4、设定远程仓库下载路径,按设定顺序依次下载5、环境变量配置(一般用于打包控制配置)二、setting.xml配置1、配置镜像(可以理解为代理)2、配置服务密码3、配置统一远程仓库一、pom.xml配置1、自定义参数 <properties> <slf4j.ve...原创 2019-10-24 23:01:16 · 11761 阅读 · 0 评论