![](https://img-blog.csdnimg.cn/20200422175149390.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 69
java技术相关
大米饭66
这个作者很懒,什么都没留下…
展开
-
Jdbc连接Mysql失败(非正常原因)
jdbc连接mysql失败,本地客户端可以连接原创 2023-02-07 14:28:55 · 1563 阅读 · 0 评论 -
jdk1.8 ConcurrentHashMap computeIfAbsent 死循环
jdk1.8 ConcurrentHashMap computeIfAbsent 死循环根因:调用computeIfAbsent 方法时,嵌套调用computeIfAbsent时,如果key的hashCode相同,逻辑中会产生死循环。原创 2022-11-08 11:02:55 · 682 阅读 · 0 评论 -
线上JVM thread 3000+ 未OOM的思考
jvm 线程数很多却没有oom?分析一下原因原创 2022-08-24 20:56:57 · 348 阅读 · 0 评论 -
CompletableFuture 异步编程
介绍 CompletableFuture 基本用法原创 2022-07-15 20:40:56 · 94 阅读 · 0 评论 -
如何计算java对象大小
在使用本地缓存时,需要知道本地缓存对堆内存占用的影响原创 2022-06-13 10:58:50 · 3585 阅读 · 0 评论 -
JackSon详解
Spring MVC 默认采用Jackson解析Json,尽管还有一些其它同样优秀的json解析工具,例如Fast Json、GSON,但是出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。转载 2022-04-07 20:03:01 · 5939 阅读 · 1 评论 -
Lombok常用注解
加入 maven 依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency>1. @Getter/@Setter自动产生 getter/setter2. @ToString自动重写toString()方法,会印出所有...原创 2021-01-13 20:24:44 · 214 阅读 · 0 评论 -
简单看一看ThreadLocal 源码
简单看一看ThreadLocal 源码常用方法 ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("aa"); threadLocal.get(); threadLocal.remove();ThreadLocal 数据结构Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量threadLocals,也就是说每个线程有一个自己的Thread原创 2020-12-08 16:54:28 · 317 阅读 · 0 评论 -
通过ReentranLock看AQS实现
通过ReentranLock看AQS实现ReentranLock 类实现我们常用的锁就是 ReentranLock 了,使用简单支持重入,可以支持我们大多数的场景。Lock lock = new ReentrantLock();// 加锁lock.lock();// 解锁lock.unlock();ReentranLock 内部有两种实现 ,公平锁 和 非公平锁。看下类图 ,内部类 sync 有两种实现,就是我们的公平锁和非公平锁。sync集成了AQS,重写了部分方法。看下 Ree原创 2020-12-07 15:47:17 · 133 阅读 · 0 评论 -
参考 二阶段事务 (2PC)思想 实现的 多线程事务
前言先提出需求,不贴合业务的技术实现都是耍流氓。我这里有1个50w~100w 的大数据量 excel导入 。 当月导入上个月的数据。实时性要求不高。导入的是子单明细,业务要全导入或者出错全部不导入。旧代码实现是逐行读取,然后达到执行行数,for 批量插入数据库,执行时间在10分钟左右。优化后可达1分钟。我提议空间换时间,做一次优化,因为这个功能只有几个的业务人员在用。一般都是先导入数据后再使用,所以放心大胆的导入就可以。思路分析贴出来 简单的思路代码,有了思路其他就是照着葫芦画.原创 2020-11-25 16:27:40 · 295 阅读 · 0 评论 -
你还敢说你看不懂阿里开源Java神器Arthas?
java排查神器Arthas -日常用法分析前言有时候线上出现问题,我们需要迫切的找寻解决方法,加日志再上线?查看修改的功能是否成功上线?现在有了Arthas一切都是那么简单。我们看下官网的描述:Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 d原创 2020-09-25 16:13:26 · 598 阅读 · 0 评论 -
Java8 新特性 详解
这篇最全 Java 8 讲解,有没有之一先看后说!一、基础知识1)为什么要学习 Java8Java 8 所做的改变,在许多方面比Java 历史上任何一次改变都更加深远,这些改变会让你的编程更加容易例子:传统写法:List<Person> personList = Arrays.asList(new Person(21,50),new Person(22,55),new Person(23,60));Collections.sort(pe...原创 2020-09-24 11:18:17 · 1149 阅读 · 0 评论 -
Spring Ant 路径匹配
背景最近有一个功能设计path匹配,开发说支持ant匹配,这是我第一次听说这个词,赶紧补一下功课。Ant匹配规则1.前言(1)SpringMVC的路径匹配规则是按照Ant来的,实际上不只是SpringMVC,整个Spring框架的路径解析都是按照Ant的风格来的。(2)AntPathMatcher不仅可以匹配Spring的@RequestMapping路径,也可以用来匹配各种字符串,包括文件路径等。2.基本规则wildcard description ? 匹配任何原创 2020-09-21 16:11:29 · 641 阅读 · 0 评论 -
mvn spring-boot:run 增加jvm启动参数
平时我们使用 java -jar 可以加 -Xmx 等 jvm参数进行调优,问题来了,如果使用mvn spring-boot:run 如何达到相同效果?命令:mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms128m -Xmx128m"插件官网文档有:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/maven-plugin/run-mojo.html可以再..原创 2020-09-10 16:56:30 · 2784 阅读 · 0 评论 -
maven 打包跳过测试
方式1:用命令带上参数mvn install -Dmaven.test.skip=true方式2:在pom.xml里面配置<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><confi...原创 2020-09-09 17:55:58 · 91 阅读 · 0 评论 -
Netty 解决 TCP 粘包/拆包
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。这里说明一下,由于oschina将“jie ma qi”认定为敏感文字,因而本文统一使用“解码一器”表示该含义1. 粘包和拆包产生粘包和拆包问题的主要原创 2020-09-03 09:59:15 · 248 阅读 · 0 评论 -
Canal入门
超详细Canal入门,看这篇就够了!思维导图本文章已收录到个人博客网站(我爱B站):me.lovebilibili.com前言我们都知道一个系统最重要的是数据,数据是保存在数据库里。但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、Redis等等。这时我注意到阿里开源的框架Canal,他可以很方便地同步数据库的增量数据到其他的存储应用。所以在这里总结一下,分享给各位读者参考~一、什么是canal我们先看官网的介绍...原创 2020-09-03 09:53:56 · 311 阅读 · 0 评论 -
netty中future.channel().closeFuture().sync()作用
future.channel().closeFuture().sync() 执行完 会使主线程 wait 阻塞后续逻辑执行我们看下官方的入门例子:启动一个nettyserver,监听8088端口,再通过命令行执行telnet localhost 8088来连接。完整的例子请参考之前的入门例子介绍:Netty入门官方例子解析(一)丢弃服务器《入门例子,不返回消息》章节public class DiscardServer { try { .原创 2020-08-25 16:52:55 · 13779 阅读 · 5 评论 -
maven导入第三方jar包
普通引入jar包,git推送到远程仓库可能会出现打包找不到jar包的错误idea maven项目在IDE下引入第三方jar包运行1、根路径建立lib包,将第三方jar复制进去;2、在pom.xml文件中进行引入,如: <dependency> <groupId>com.xxx</groupId> ...原创 2019-06-26 17:47:52 · 222 阅读 · 0 评论 -
Springboot 自动配置常用25 个注解
Spring Boot 最核心的 25 个注解1、@SpringBootApplication这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。其实这个注解就是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合,也可以用这三个注解来代替@SpringBootApplicat...原创 2020-08-18 11:35:44 · 3627 阅读 · 0 评论 -
idea 导入 springboot源码
1.拉代码首先我们先拉一下springboot的源码到本地网址:https://github.com/spring-projects/spring-boot建议用 git clone 把仓库拉下来,这样可以清晰的看到版本改动和提交。2.maven进行编译因为我们用不到单元测试 ,所以使用下面的命令进行操作。要求maven版本>=3.5.0,我这里用的是3.6.0mvn clean install -DskipTests -Pfast28分钟终于完了,最好弄一下阿里云.原创 2020-08-13 11:50:26 · 2392 阅读 · 0 评论 -
帖子中心,1亿数据,架构如何设计?
帖子中心,1亿数据,架构如何设计?帖子中心,是互联网业务中,一类典型的“1对多”业务,即:一个用户能发布多个帖子,一个帖子只有一个发布者。随着数据量的逐步增大,并发量的逐步增大,帖子中心这种“1对多”业务,架构应该如何设计,有哪些因素需要考虑,是本文将要系统性讨论的问题。什么是x对x?所谓的“1对1”,“1对多”,“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的映射关系。什么是“1对1”业务?用户中心,一个用户只有一个登录名,一个登录名只对应...转载 2020-07-30 10:25:01 · 186 阅读 · 0 评论 -
Jstack定位CPU过高问题
Jstack定位CPU过高问题1、定位进程top找到爆掉进程的PID2、定位线程top -H -p 进程号PID3、线程号将异常线程号转化为16进制printf "%x\n" PID4、定位异常代码jstack 进程PID|grep 16进制异常线程号 -A90ps:-A90是指输出90行日志...原创 2020-07-27 11:45:16 · 361 阅读 · 0 评论 -
用户中心,1亿数据,架构如何设计?
用户中心,1亿数据,架构如何设计?用户中心,几乎是所有互联网公司,必备的子系统。随着数据量不断增加,吞吐量不断增大,用户中心的架构,该如何演进呢。什么是用户中心业务?用户中心是一个通用业务,主要提供用户注册、登录、信息查询与修改的服务。用户中心的数据结构是怎么样的?用户中心的核心数据结构为:User(uid, login_name, passwd, sex, age, nickname, …)其中:(1)uid为用户ID,为主键;(2)login_nam...转载 2020-07-23 10:21:38 · 668 阅读 · 0 评论 -
Spring 源码中一些小工具
1. 包扫描方法,扫描指定包路径下的类org.springframework.context.annotation.ClassPathBeanDefinitionScanner#doScan在指定的基本包内执行扫描,返回注册的bean定义。核心扫描逻辑代码org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#scanCandidateComponents可以把这部分源码进...原创 2020-07-15 11:27:31 · 237 阅读 · 0 评论 -
mysql 特殊需求语句 关联更新update 查询插入 insert 关联删除 delete
1. 关联更新 update关联查询更新 updatestu(sid ,grade,cid)course(cid,cname,avggrade)将学生选课表 s 根据 课程表 c 的平均分进行成绩赋值 ①update stu s join course c ON s.cid = c.cidset s.grade = c.avgggradewhere c.cname = '数据结构';②update stu s,course c...原创 2020-07-09 16:52:07 · 347 阅读 · 0 评论 -
idea 导入spring 源码
参考https://blog.csdn.net/Dcwjh/article/details/104471560?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase...转载 2020-07-06 17:44:21 · 273 阅读 · 0 评论 -
poi 导出生成 java.io.IOException: No such file ordirectory
在生产环境上导出出现报错的问题,初步排查日志,发现是java.io.IOException: No such file ordirectory然后查看poi导出源码:发现下面一段逻辑 @Override public File createTempFile(String prefix, String suffix) throws IOException { // Identify and create our temp dir, if needed .原创 2020-07-06 11:20:04 · 4712 阅读 · 0 评论 -
一次数据库连接失败 CertPathValidatorException: Path does not chain with any of the trust
错误的初始是因为 数据库是数据库一直连接不上导致消息阻塞,后来发现是druid一直无法创建连接导致的debug发现错误信息java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors最后修改数据库连接useSSL=true 为useSSL=false 就可以解决问题,mysql5.7新增的连接加密安全认证,我们测试库没开,所以一直报错。...原创 2020-07-02 16:13:39 · 263 阅读 · 0 评论 -
java 泛型
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本转载 2020-06-30 16:07:52 · 123 阅读 · 0 评论 -
java 线程池ThreadPool
java 线程池1.为什么要使用线程池?使用线程池主要有下面三种有点:频繁的创建/销毁线程对系统资源消耗比较大,使用线程池可以复用已创建的线程。可以控制当前线程的数量,并发线程过多,可能会导致资源消耗过多,严重时会造成服务器崩溃。可以对线程进行统一处理,比如关闭应用,关闭线程池就可关闭线程。2.线程池实现jdk中 java.util.concurrent包已经帮助我们实现线程池的逻辑。 ThreadPoolExecutor的实现关系如下图。我们先看一下类的构造方法://原创 2020-06-10 14:17:28 · 117 阅读 · 0 评论 -
史上最全的 阿里 java规范
阿里的java规范官网下载 https://developer.aliyun.com/article/757672?utm_content=g_1000134073原创 2020-06-02 16:15:54 · 573 阅读 · 0 评论 -
JVM如何垃圾回收
JVM如何垃圾回收一、概述1. 什么样的对象才会被回收?1个对象在后续的程序中没有任何使用途径,不会被使用。2. 怎么确定对象已经死亡?引用计数法有一个引用就加 1 ,引用失效就减 1但是无法解决相互依赖的问题,所以jvm没有使用引用计数法。可达性分析算法GCroots对象 ,关联引用链,没有gcroots就是不可达的,对象就是死亡的,可以被回收 。3. 怎么回收已死亡的对象分代收集理论弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕原创 2020-05-22 17:38:07 · 181 阅读 · 0 评论 -
JVM参数使用手册
JVM提供了大量的参数配置,可以通过配置这些参数对JVM进行调优、记录GC日志等等,本章只罗列我自己用到过和了解过的参数,根据功能划分。声明:英文解释和使用方法多数来源于微信小程序JVMPocket和PerfMa,JVM交流QQ群号:462563010内存相关通过这些参数可以对JVM的内存分配做调整Xms英文解释:Initial heap size(in bytes)中文释义:堆区初始值使用方法:-Xms2g或-XX:InitialHeapSize=2048mXmx英文解释:..转载 2020-05-19 15:42:17 · 191 阅读 · 0 评论 -
JVM 简单入门 概述
一文看懂 JVM内存划分1. 概述对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”, 又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始 到终结的维护责任。对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不 过,也正是因为Java程序员把控制内存的权力交给了Java虚拟机,一旦出现内原创 2020-05-19 15:33:02 · 496 阅读 · 0 评论 -
JVM 常用排查命令工具
JVM (三) 常用排查命令工具jps 虚拟机进程状况工具jps(JVM Process Status Tool)它的功能也和ps命令类似:可以列出正在运行的虚拟机进 程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(LVMID,Local Virtual Machine Identifier)。命令格式jps [ options ] [ hostid ]列子^Croot@yut5:~# jps -l30113 admin2.原创 2020-05-14 16:47:50 · 889 阅读 · 0 评论 -
1分钟了解MyISAM与InnoDB的索引差异
B+树,它是一种非常适合用来做数据库索引的数据结构:(1)很适合磁盘存储,能够充分利用局部性原理,磁盘预读;(2)很低的树高度,能够存储大量数据;(3)索引本身占用的内存很小;(4)能够很好的支持单点查询,范围查询,有序性查询;数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index)。InnoDB和MyISAM是怎么利用B+树来实...转载 2020-04-20 17:51:19 · 126 阅读 · 0 评论 -
Springboot + MybatisPlus 入门例子
Springboot + MybatisPlus 入门例子默认我们已经新建一个springboot项目。1. 导入相关依赖如果项目中有mybatis可以直接删除了,plus里包含了mybatis的包 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybat...原创 2020-04-10 16:21:41 · 328 阅读 · 0 评论 -
Springboot (六) aop自定义注解开发
java自定义注解开发Springboot (六) aop自定义注解开发前言: 相信用过Spring的对Aop都不陌生,闲话不多说直接上列子。1. 导入依赖首先我们要导入aop的依赖,有了boot开发就是方便。<dependency> <groupId>org.springframework.boot</groupId> <artif...原创 2020-04-03 16:14:15 · 190 阅读 · 0 评论 -
Java之注解的定义及使用
1. 注解的语法注解的例子以Junit中的@Test注解为例@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Test { long timeout() default 0L;}可以看到@Test注解上有@Target()和@Retention()两个...原创 2020-04-03 14:03:50 · 181 阅读 · 0 评论