java
风起尘落
我只需努力,剩下的交给时光。
展开
-
凤凰架构--阅读记录二
隔离级别与mvcc的关系原创 2023-03-12 18:57:43 · 307 阅读 · 1 评论 -
凤凰架构阅读记录
凤凰架构原创 2023-03-06 18:50:39 · 179 阅读 · 0 评论 -
idea扫描过时方法
idea扫描过时方法原创 2023-02-28 17:03:34 · 468 阅读 · 0 评论 -
@TableField不生效
@TableField原创 2023-02-09 15:26:07 · 1061 阅读 · 0 评论 -
List对象转map, jackJson
Map<Long, AchievementConfiguration> configurationMap = configurationList.stream().collect(Collectors.toMap(AchievementConfiguration::getId, t->t,(k1,k2)->k2));原创 2022-01-10 14:52:16 · 455 阅读 · 0 评论 -
通过上下文获取HttpServelet对象
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();原创 2021-07-21 18:59:44 · 217 阅读 · 0 评论 -
mybatisplus设置字段为空仍然更新
mybatisplus设置字段为空仍然更新@TableField(updateStrategy= FieldStrategy.IGNORED)private Long transitionsSkinStatusId;原创 2021-07-14 16:30:40 · 908 阅读 · 0 评论 -
ThreadLocal使用
场景:同一个线程,不同的类之间的变量传递。public class StrokeUtil { private static ThreadLocal<ConcurrentHashMap<String, Long>> strokeThreadLocal = new ThreadLocal<>(); public static void remove(){ strokeThreadLocal.remove(); }原创 2021-07-05 19:14:22 · 115 阅读 · 0 评论 -
@Transactional事务传播分析
1.场景一:两个service类ClassAServiceImpl ,ClassBServiceImpl;A类的testA调用B类的testB方法,A类中testA方法添加事务注解并且调用B类的testB方法时添加try catch,分析testB方法是否添加事务注解对程序的影响。 A类:@Servicepublic class ClassAServiceImpl implements IClassAService { private final IClassBServ...原创 2021-05-14 19:37:41 · 2749 阅读 · 1 评论 -
maven依赖冲突查询
使用idea下载插件maven helper原创 2021-01-21 18:36:49 · 213 阅读 · 0 评论 -
LockSupport实现线程交替打印
public class AlternatePrint { public static Thread a = null; public static Thread b = null; public static void main(String[] args) { lockSupport(); } public static void lockSupport(){ char [] dataOne = "123456".t.原创 2020-11-20 09:25:19 · 771 阅读 · 0 评论 -
集合框架图
转载 2020-10-20 10:39:54 · 247 阅读 · 0 评论 -
为什么String要设计成不可变的?
这是一个老生常谈的话题(This is an old yet still popular question). 在Java中将String设计成不可变的是综合考虑到各种因素的结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑. 在下文中,我将为各种原因做一个小结。1. 字符串常量池的需要字符串常量池(String pool,String intern pool, String保留池) 是Java堆内存中一个特殊的存储区域, 当创建一个String对象时,假如此字符串值已经存在.转载 2020-10-10 17:37:36 · 208 阅读 · 0 评论 -
使用线程池造成堆内存泄露
场景:使用线程池上传数据内存泄漏原因: 对接的webservice接口,使用了XStream,并且在遍历每条数据的时候都new了一个XStream。XStream官方有一段话:The XStream instance is thread-safe. That is, once the XStream instance has been created and configured, it may be shared across multiple threads allowing objects t原创 2020-09-25 18:50:04 · 981 阅读 · 0 评论 -
事务死锁案例
工作流程:事务传播级别,隔离级别:默认A服务新增建档接口在新增建档数据后,调用B服务进行医保数据新增,同时B服务新增医保后会回调A服务的更新建档数据接口,造成事务死锁。原因分析:新增建档数据后,这条数据在数据库中是被锁定的,因为当前事务并没有执行完成,在B服务中又去调用A服务的更新数据接口,操作这条被锁定的数据,此时只有等待这条数据被释放,然后A服务只有B服务成功执行完成后才会提交事务,释放锁,造成死锁。...原创 2020-09-24 15:39:03 · 313 阅读 · 1 评论 -
linux下通过关键字查询日志并定位
1.通过关键字查询日志行数grep -n 关键字名 log-info.log(文件名)2.通过行数定位:从第10行开始显示15行cat access.log(文件名) | tail -n +10 | head -n 15原创 2020-09-21 18:52:44 · 2266 阅读 · 0 评论 -
@Value注入静态属性
1. 定义一个静态属性的副本,然后通过@value注入,最后赋值。@Value("${sourceCode}")private String sourceCode;private static String SOURCE_CODE_STATIC; @PostConstruct public void init() { SOURCE_CODE_STATIC= sourceCode; }2.这样是无法获取到值的,会拿到一个null。@Va.原创 2020-09-18 11:51:38 · 3662 阅读 · 0 评论 -
Error、Exception与RuntimeException的区别
先搞清楚它们三者的关系。Error与Exception都继承自Throwable,而RuntimeException则继承自Exception。在Java中只有Throwable类型的实例才可以被抛出(throw)或捕获(catch)。Error和Exception体现了Java平台设计者对不同异常情况的分类。Exception是程序正常运行中可以预料的意外情况,可能并且应该被捕获,进行相应处理。Error则是指在正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM)处于非正转载 2020-09-13 21:52:11 · 879 阅读 · 0 评论 -
String s = “123“; 到底创建了几个对象
创建了1个或者0个对象。分析:1个:字符串产量池中不存在“123”的情况下,这时会新建一个“123"的字符串常量对象。0个:字符串常量池存在“123”,直接把s指向字符串常量池中的“123"常量对象,不会新建对象。...原创 2020-09-13 21:42:07 · 1171 阅读 · 0 评论 -
RestTemplate 发送post请求
private RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplate(); ExtendMappingJackson2HttpMessageConverter convert = new ExtendMappingJackson2HttpMessageConverter(); convert.setObjectMapper(new...原创 2020-09-11 11:26:11 · 8975 阅读 · 0 评论 -
spring如何解决循环依赖
1. 构造器注入:无法解决 构造器注入时,A,B都没有进行初始化对象(构造方法无法执行完成)2.Spring 为了解决单例的循环依赖问题,使用了三级缓存。其中一级缓存为单例池(singletonObjects),二级缓存为提前曝光对象(earlySingletonObjects),三级缓存为提前曝光对象工厂(singletonFactories)。假设A、B循环引用,实例化 A 的时候就将其放入三级缓存中,接着填充属性的时候,发现依赖了 B,同样的流程也是实例化后放入三级缓存,接着...原创 2020-09-09 09:21:33 · 249 阅读 · 0 评论 -
关于volatile、MESI、内存屏障、#Lock
最近又看了下Disruptor,里面提到了内存屏障,突然想到了指令重排、还有可见性,感觉里面关系有点乱,就翻了下,因此就写了这篇文章带着几个问题:1.volatile,是怎么可见性的问题(CPU缓存),那么他是怎么解决的--->MESI 2.CAS指令,确保了对同一个同一个内存地址操作的原子性,那么他应该也会遇到和上面可见性一样的问题,他是怎么解决的,是不是和volatile的底层原理类似?--->是的,也是利用了MESI 3.volatile还避免了指令重排,是通过内存屏障解决的?转载 2020-08-06 12:37:52 · 1517 阅读 · 1 评论 -
webserive联调第三方接口
1. 通过soapui新建一个soapui project并填上项目一个地址类似这样:http://127.0.0.1:8888/EsbBusService.asmx?WSDL2.输入请求xml 类似这样:需要在body外加上:<![CDATA[]]><soap:Envelope xmlns:soap="" xmlns:tem="/"> <soap:Header/> <soap:Body> <tem:Process...原创 2020-07-23 10:59:58 · 595 阅读 · 0 评论 -
list转tree和list中查找某节点下的所有数据
类的实例化顺序父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量(父类实例成员变量)、父类构造函数、子类非静态变量(子类实例成员变量)、子类构造函数。已知组织类Org{String id,String name,String parentId},现在一List<Org>中存放无序的Org数据,求一个组织id下的所有组织。...原创 2020-07-21 09:29:34 · 423 阅读 · 0 评论 -
线程池处理数据代码
1.创建线程池public class ThreadUtil { public static ThreadPoolExecutor DATA_FIX_POOL = new ThreadPoolExecutor(30, 30, 300, TimeUnit.SECONDS, new LinkedBlockingDeque<>(), new ThreadFactoryBuilder().setNameFormat("thread_pool").build());原创 2020-07-08 09:08:07 · 245 阅读 · 0 评论 -
mysql隐式转换导致索引失效(失效原因分析)
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。某些隐式转换会导致索引失效。1. in 参数包含多个类型2. 判断符合左边是字符串,右边是数字,列如 where a = 123 其中a是字符类型 左边是数字,右边是字符串,这种隐式转换后索引仍然有效。 分析: 根据官方转换规则, 一边数字一边字符串,两边都会转换为浮点数进行比较。 a: 左边数字,右边字符串情况: 索引有效: 左边作为检索项,数...原创 2020-07-07 12:50:55 · 1199 阅读 · 0 评论 -
公平锁/非公平锁源码深入分析
目标掌握AQS基本原理,理解ReentrantLock的具体实现挖掘体会AQS精妙设计总之,学习AQS过程,要多思考为什么要这样实现,善于带着问题主动探索答案,不断的回过头去看,去思考,我们对并发会有更深的理解。在学习过程中沉淀的“pattern”认知和学习能力能够轻松的复制到我们工作实践和其它优秀代码的学习中。工作后时不时会遇到业界通用方案不匹配自身业务,到造轮子的时候可能才会后悔之前没有多多沉淀吧~。同时感谢我参考学习过的大神资料。准备知识ReentrantLock类图:理想情况下转载 2020-07-06 13:00:37 · 460 阅读 · 0 评论 -
非公平锁抢锁分析
1.非公平锁有两次的抢锁机会 1.进入AQS同步队列之前 2.进入AQS同步队列后非公平锁第一次抢锁失败后,会进入AQS同步队列排序,当位于队首时会和其他线程开始抢锁。2.性能分析:公平锁和非公平锁的性能是不一样的,非公平锁的性能会优于公平锁。为什么呢?因为公平锁在获取锁时,永远是等待时间最长的线程获取到锁,这样当线程T1释放锁以后,如果还想继续再获取锁,它也得去同步队列尾部排队,这样就会频繁的发生线程的上下文切换,当线程越多,对CPU的损耗就会越严重...原创 2020-07-06 12:48:32 · 822 阅读 · 4 评论 -
easypoi导出excel表格数据
@ApiOperation(value = "列表数据导出")@PostMapping(value = "/preFollowListExport", produces = "application/json;charset=UTF-8") public Response<Boolean> export(HttpServletResponse servletResponse) throws IOException { String nam.原创 2020-07-01 18:55:08 · 534 阅读 · 0 评论 -
SpringBoot跳过权限验证配置
security.basic.enabled = falseinterceptor.exclude.path = /**原创 2020-07-01 18:39:39 · 5705 阅读 · 2 评论 -
ThreadLocal分析
1.ThreadLocal的作用:ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定的线程中可以获取到存储的数据,对于其他线程来说则无法取到数据。2.TheadLocal的set方法(存入数据) public void set(T value) { Thread t = Thread.currentThread(); //获取当前线程 ThreadLocalMap map = getMap(t)..原创 2020-06-29 19:31:07 · 173 阅读 · 0 评论 -
git 删除本地未提交的内容
1.将未提交的内容存到堆栈区git stash2.清空堆栈区git stash clear二:其他相关命令将未提交的内容存到堆栈区并且命个名 : git stash save 名字查看堆栈区列表: git stash list把堆栈区最近的一次提交恢复(先进后出): git stash pop删除指定的列表项: git stash drop 名称(类似:stash@{0})...原创 2020-06-28 17:36:54 · 2115 阅读 · 0 评论 -
git 回滚到某次提交
1. 查看提交日志: git log2. 回滚到某个指定的版本:git reset --hard 版本号(commit后的字符串)原创 2020-06-28 17:23:13 · 648 阅读 · 0 评论 -
java 单例模式中双重检查锁 volatile 的作用?
作用:保证有序性,禁止指令重排序。原因: 在执行instance = new Singleton()语句时,一共是有三步操作的。1.堆中分配内存2.将创建的对象放到分配的内存中3.将instance引用指向内存地址。在这三步有可能会产生指令重排序即有两种结果可能产生:123与132。只产生两种结果的原因是存在as-if-serial语义(不管怎么重排序,单线程程序的执行结果不会改变),as-if-serial语义决定了12与13的依赖关系即23肯定在1之后执行,但是23之...原创 2020-06-12 14:53:40 · 614 阅读 · 0 评论 -
mybatis中将数据库表名或列名当作参数
1.操作方式: 在mybatis xml中使用 ${列名/表名} 而不是 #{列名/表名}说明:${} 只是简单的字符串替换,#{}则是预编译。2.产生问题: 问题:${}会产生sql注入问题。 解决方式: 1.如果只是select 语句 ,可以在service方法中添加@Transactional(readOnly = true) (只读事务),也可以在service方法中限制列名和表名的范围。 2.如果是in...原创 2020-06-12 11:16:27 · 2925 阅读 · 0 评论 -
ForkJoinPool线程池原理分析
一、引言算法领域有一种基本思想叫做“分治”,所谓“分治”就是将一个难以直接解决的大问题,分割成一些规模较小的子问题,以便各个击破,分而治之。比如:对于一个规模为N的问题,若该问题可以容易地解决,则直接解决;否则将其分解为K个规模较小的子问题,这些子问题互相独立且与原问题性质相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解,这种算法设计策略叫做分治法。许多基础算法都运用了“分治”的思想,比如二分查找、快速排序等等。基于“分治”的思想,J.U.C在JDK1.7时引入了一套Fork/转载 2020-06-11 19:24:41 · 1784 阅读 · 0 评论 -
git拉取远端分支到本地
git init 本地初始化git remote add origin url地址 建立联系git fetch origin 远端分支名git checkout -b 本地要创建分支名 origin/远端分支名git pull origin 远端分支名...原创 2020-03-10 17:38:27 · 256 阅读 · 0 评论 -
github通过git创建分支并且修改提交分支
1. 初始化git init2. 设置姓名邮箱git config --global user.name "Your Name"git config --global user.email "email@example.com"3.生成ssh-keyssh-keygen -t rsa -C "email@example.com"4.github配置sshkey(百...原创 2020-03-10 16:23:38 · 658 阅读 · 0 评论 -
根据 HttpStatus配置默认错误页面
@Configurationpublic class WebServerStatusConfiguration { @Bean public ConfigurableServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory factory = new TomcatSer...原创 2020-01-19 15:43:41 · 516 阅读 · 0 评论 -
@Transactional失效场景及其原理分析
1.数据库引擎是否支持事务(Mysql的MyIsam引擎就不支持事务)2.注解所在的类是否注入spring容器中3.注解所在方法是否为public修饰或者final(方法实现了接口是否为public,方法没有实现接口是否为final)分析:这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional ...原创 2019-12-23 11:00:45 · 789 阅读 · 3 评论