- 博客(27)
- 资源 (2)
- 收藏
- 关注
原创 Java线程是如何启动的?
Thread.start()之后是如何调用run()方法的呢?前言我们在初学 Java 中的线程的时候,可能会写过如下代码:public static void main(String[] args) { Thread thread = new Thread(() -> System.out.println("当前线程名称:" + Thread.currentThread().getName()) , "jts-th
2021-09-26 22:24:53 518
原创 CAS真的无锁吗
CAS 真的是无锁吗?前言我们平时经常看到一些文章说 CAS 是无锁编程。那么在多CPU下,它是怎么保证原子性的呢?一、CAS 底层实现我们通过 Java 中的 AtomicInteger类中的 getAndIncrement()来看下 CAS 底层是怎么实现的。public final int getAndIncrement() { return uns
2022-08-30 12:43:43 477 2
原创 详解状态模式以及Spring状态机
详解状态模式以及Spring状态机前言讲设计模式之前我们先来了解下设计模式的SOLID原则:S(Single Responsibility Principle):单一职责原则,接口职责应该单一,不要承担过多的职责。O(Open Closed Principle):开闭原则,即对扩展开放,对修改关闭。简单来说就是代码的设计要达到:当别人要修改扩展功能的时候,最好能不要修改我们原有代码,而是新增代码来实现空能的扩展。这也是我们设计时要达到的目标。L(Liskov Substitution Princ
2022-04-21 21:30:00 5009 5
原创 分布式事务解决方案汇总
分布式事务解决方案汇总前言一般来说,涉及到多数据源的事务,我们称之为分布式事务。常见的分布式事务解决方案有以下几种:2PC(两阶段提交)3PC(三阶段提交)可靠消息队列TCCSAGA事务AT事务下面我们来看看这些解决方案是怎么解决分布式事务问题以及这些解决方案各有什么优缺点。2PC(两阶段提交)两阶段提交就是将事务提交拆成了准备阶段和提交阶段这两个阶段。那怎么协调准备阶段和提交阶段这两个阶段呢?这里我们需要引入协调者的概念,协调者就相当于一个总的事务管理器,它会根据事务的执行状
2022-04-09 21:42:18 1477
原创 Java各种内存溢出异常实践
Java各种内存溢出异常实践1.前言在生产环境运行中,我们可能见到过各种内存溢出异常,本篇文章我们来实践下可能出现的内存异常。一是可以验证运行时数据区域中存储的内容;二是我们在遇到内存溢出异常时,根据异常信息可以快速得知是哪个区域的内存溢出,可以帮助快速定位问题,以及出现这些异常后知道应该如何处理。2.回顾运行时数据区我的上一篇文章:《详解JVM运行时数据区》中讲过JVM运行时数据区主要包含以下内容:堆程序计数器Java虚拟机栈本地方法栈方法区除了程序计数器不会内存溢出外,其他数据区
2022-01-05 00:20:39 476
原创 如何处理InterruptedException异常
如何处理InterruptedException异常前言当你捕捉到InterruptedException异常时,在catch代码块里会如何处理呢?首先我们来看下什么时候会抛出InterruptedException异常。java.lang.InterruptedException类的注释中有提到:@see java.lang.Object#wait()@see java.lang.Object#wait(long)@see java.lang.Object#wait(
2021-12-20 23:15:23 3877 1
原创 如何获取线程返回结果
如何获取线程返回结果前言:1.思路2.获取线程调用返回值小结前言:我们知道 Thread.run() 返回值是 void, 那么当我们通过多线程执行任务的时候,如果想获取线程的返回值, 应该怎么做呢?思路是什么?1.思路如果你看过《Thread.start()之后是如何调用 run()方法的呢?》 这篇文章,会知道当线程启动之后,最终操作系统会回调 Thread.run() 方法。那么我们就可以在 Thread.run() 方法里面做文章。比如我们写了一个类实现了Runnable接口,publi
2021-12-19 21:51:59 3246
原创 distinct 和 group by 的区别
前言我们在sql里面经常看到 distinct 和 group by,那么两者到底有何区别呢?下面就来一探究竟。首先来看官方描述链接: Mysql distinct 传送门其中有这么一段描述:Generally speaking, the DISTINCT clause is a special case of the GROUP BY clause. The difference between DISTINCT clause and GROUP BY clause is that the G
2020-09-03 19:58:48 4021
原创 CompletableFuture 等待异步任务的多个返回结果 与 Guava 的ListenableFuture对比
前言如果我们有多个任务异步执行,等全部异步任务执行完,获取所有的异步任务结果,应该怎么做呢?大部分情况下可能直接使用CountDownLatch 来实现,那么,有没有更优雅一点的实现呢?下面我以抓取 非小号 的数据为例,分别用JDK1.8开始自带的 CompletableFuture 与Guava 提供的ListenableFuture来实现这个功能。首先贴出所有代码package com.jts.multithread.future;import com.alibaba.fastjson.JSO
2020-09-02 21:04:08 2623 3
原创 DateUtils兼容多种日期类型转换
org.apache.commons.lang3.time.DateUtilsorg.apache.commons.lang3.time.DateUtilspublic static Date parseDate(String str, String… parsePatterns) throws ParseException {return parseDate(str, (Locale)null, parsePatterns);}可以兼容多种日期格式化类型...
2020-08-21 10:09:33 523
原创 Annotation processing is not supported for module cycles. Please ensure that all modules from cycle
Annotation processing is not supported for module cycles. Please ensure that all modules from cycle 问题问题解决方案问题拉取公司代码之后,启动项目出现了一个问题 Annotation processing is not supported for module cycles. Please ensure that all modules from cycle,说是 module 循环依赖了,但是pom.x
2020-05-26 21:10:51 8111 2
原创 用Springboot进行单元测试
Springboot单元测试我们如何使用springboot来进行可以读取到配置的测试呢?引入测试依赖在测试类上添加@RunWith(SpringRunner.class)和@SpringbootTest注解我们如何使用springboot来进行可以读取到配置的测试呢?引入测试依赖 <dependency> <groupId>org.spri...
2019-02-11 11:45:08 477
原创 术语不是用来装逼的,而是用来提高沟通效率的
术语的目的首先声明一下术语的目的,术语不是用来装逼的,而是用来提高大家的沟通效率的。效率优先。之前未听过的术语收集(不定时更新)灰度发布(又名金丝雀发布)简单来说就是发布一些新功能特性的时候,让一部分用户可以用这些新功能,而另外的用户看不到这些功能。可以用来测试新功能。约定优于配置在设置框架的时候,我们给配置设置一些默认的值,如果使用者没配置这个参数,就使用默认的值,如果配置了,就使用...
2019-01-21 21:28:39 260
原创 在Springboot启动后执行代码
在Springboot启动后执行代码Springboot启动后执行代码Springboot启动后执行代码有时候我们需要在Springboot启动后就执行一些代码,这时候可以通过写一个类实现CommandLineRunner接口,然后在该类上加上@Component注解就可以了。代码如下:@Componentpublic class AfterStartDo implements Comma...
2019-01-09 19:39:03 3572
原创 一个案例让你彻底搞懂base64编码过程
声明:本文参考自云析学院的公开课。简介:Base64就是一种基于64个可打印字符来表示二进制数据的编码方法。为什么不直接用ASCII码呢?因为我们输入的字符可能有ASCII码中不可见的字符,为了完全可见,就用了base64编码。比如Hello这个单词,我们把它变成base64编码怎么做呢?首先引入ASCII对照表: 2.一个字节是8...
2018-10-29 16:43:56 9967 1
原创 手写jdk动态代理
之前的文章讲了动态代理的实现原理,这里我们来手写一下jdk的动态代理(支持实现多接口和带参数的方法)。主要原理就是生成一个和实现目标对象相同接口的一个代理对象,我们调用方法的时候实际调用的是生成代理对象的方法。1.手写InvocationHandler,用来调用代理类的方法import java.lang.reflect.Method;public interface JtsInvoc...
2018-09-30 14:36:46 638 1
原创 设计模式之-代理模式
什么是代理模式? 有很多事情不得不做,但是又不想自己做,我们就可以把自己的信息交给别人,让别人去做,这个就是代理模式。比如你是一个明星,要在杭州举行一场演唱会,是不是有找场地,发通知告诉粉丝等等很多事情要做?但是这些事情不能由你自己做吧,那不是累死了。再比如说我要抢火车票,总不能自己一直在12306刷有没有票吧?这个时候我们就可以把自己的信息提供给抢票软件,然后让抢票软件帮我...
2018-09-20 15:16:07 195
原创 java中的反射
java中很多框架都用到了反射,所以在造spring轮子之前,还是要彻底的了解一下反射。1.什么是反射?(what)在学习任意一个技术时,我们可以去官网看它的介绍,而不是先去百度。官网反射介绍:https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html介绍如下:Reflection i...
2018-09-12 15:24:21 152
原创 去除csdn广告
首先不知道这篇文章会不会被csdn封,不过对于一个又洁癖的人来说,并不喜欢csdn的(广告),于是花几分钟写了一个插件。核心代码就是移除广告的那两个div 下载链接:https://download.csdn.net/download/jtshongke/10626423如果被csdn封掉了,我将上传到百度云 ...
2018-08-24 18:14:21 1162 3
原创 linux cetos7关闭防火墙
最近在学习dubbo,启动项目时,一直不能访问虚拟机上的dubbo服务,刚开始是用service iptables stop 来关闭防火墙的,但是不知道为什么没有关闭成功。在网上百度的这个关闭防火墙的命令:systemctl stop firewalld.service执行过之后就成功了。 关闭防火墙的命令:systemctl stop firewalld.service开机不启...
2018-03-03 19:58:44 3260
原创 log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
搭建ssm工程后进行开发测试的时候,启动项目时卡住了。提示信息如下:信息: Initializing Spring root WebApplicationContextlog4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).log4j:WARN Please ...
2018-02-28 22:49:43 24906 1
原创 maven 报错
如果在下载maven项目中的jar包时网络不好,或者断网,会生成一个.lastUpdated为后缀的文件。如果这个文件存在,那么即使换一个有资源的仓库后,Maven依然不会去下载新资源。这个时候只要去自己本地的仓库中找到 .lastUpdated结尾的文件就可以重新下载jar包了。网上也有不删除这些文件就可以更新的方法,但是我没进行尝试。
2017-11-15 22:47:03 734
原创 springboot 单个input多图片上传
最近有用到多图片上传的功能,但是不能有多少个图片就写多少个标签,于是在网上找了一个js展现图片的模板,自己改造之后实现了单个input上传多个图片的功能。1.项目是基于springboot快速搭建springboot:http://start.spring.io/项目名是studySpringBoot,如下图,如不想搭建,可以直接用我后面的百度云源代码2.前台代码如下:
2017-11-13 01:49:35 6202 6
原创 离线方式安装svn插件到eclipse
1.下载svn离线版的插件:百度云盘链接:http://pan.baidu.com/s/1eSnMoHO 密码:6oef2.解压出来的目录如下:3.将features和plugins里面的jar包分别复制到eclipse安装目录下的相应的文件夹内,然后重启eclipse即可完成安装!
2017-11-12 12:48:44 3788 1
原创 总结Java中的集合类
单例集合:都继承自Collection接口:----------| Collection(List和Set):----------------------| List(特点是有序可重复)----------------------------| ArrayList,底层使用Object数组实现,所以特点就是查询快,增删改慢。在增和删的时候会牵扯到数组增容,以及元素拷
2017-06-12 12:41:18 331
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人