
Java
文章平均质量分 84
liangsheng_g
这个作者很懒,什么都没留下…
展开
-
AQS源码解读
AQS是AbstractQueuedSynchronizer的缩写,也是大神Doug Lea的得意之作。今天我们来进行尽量简化的分析和理解性的代码阅读。竞争资源总体分三步1. 尝试获取资源,成功就返回2. 失败了的线程封装成Node,加入到队列3. 加入到队列的Node,不停经历(阻塞-非阻塞-tryAcquire),直到获取资源成功释放资源分两步4. 尝试释放资源,失败了就返回5. 释放成功了,需要把头结点的waitStatus置空,唤醒下一个非CANCELED的Node进行资源获取操作。原创 2023-08-19 12:05:12 · 467 阅读 · 0 评论 -
mac下配置PrintAssembly
有时候难免想看下对应的Java代码JIT编译之后的汇编代码是什么样有了printAssembly方式,咱们相当于可以查看JIT下class对应的执行的汇编指令。所以我们可以看看加了volatile的变量执行方式上具体有什么差异,相关内容已更新到这篇文章,欢迎不吝赐教。原创 2021-11-01 15:10:52 · 1419 阅读 · 0 评论 -
spring循环依赖原理图解+bean的生命周期图解
Spring是如何处理循环依赖的,又是怎么做到,互相注入对方的proxy bean而不是raw bean的?现在就分析一下循环依赖其实耐下功夫读源码,也没有那么难。下次分享为什么循环依赖的其中一个类添加@Async有可能会导致注入失败而抛异常–这篇博客。原创 2021-08-15 12:20:57 · 450 阅读 · 0 评论 -
基于Spring,属性注入动态对象
文章目录前言一、思路二、使用步骤1.注入对象类型必须是接口2. 注入的实际对象必须是一个ObjectFactory3. 注入的对象属性必须在DefaultListableBeanFactory#resolvableDependencies里4. 测试实现三、ObjectFactory 和 FactoryBean3.1 ObjectFactory3.2 FactoryBean四、一个新方案(prototype + @Lazy)4.1 将WangObj的作用域scope改为prototype4.2 将WangO原创 2021-08-10 12:27:16 · 951 阅读 · 0 评论 -
关于Java的Interrupt的一些知识
文章目录前言一、interrupt()二、interrupted()和isInterrupted()1.interrupted()2. isInterrupted()3. isInterrupted(boolean ClearInterrupted)总结前言对于Java的InterceptException以及interrupt()等方法总会有疑惑,或者记不清,其实最好的解释就是方法的doc注释一、interrupt()咱们看看源码上,对于interrupt()方法的注释:/** *原创 2021-08-08 17:00:07 · 270 阅读 · 0 评论 -
spring源码解读:@Lazy延迟注入的逻辑
文章目录前言一、一个简单的小例子二、源码解读1. 注入2. 使用逻辑总结前言有时候我们会在属性注入的时候添加@Lazy注解实现延迟注入,今天咱们通过阅读源码来分析下原因一、一个简单的小例子代码如下:@Servicepublic class NormalService1 { @Autowired @Lazy private MyService myService; public void doSomething() { myService.getName(); }}作用原创 2021-08-03 18:11:39 · 1669 阅读 · 3 评论 -
为什么有了MESI还需要volatile关键字
MESI的概念此处不再累赘,有兴趣的可以搜索store buffer引入store buffer是为了将同步改为异步引入store forwarding技术是为了让CPU可以直接从store buffer里加载数据但是因此可能会发生乱序情况,譬如a在store buffer里,b在cache里,但是赋值操作虽然先设置了a,后设置了b,但是实际上却可能是b先被刷新到cache里,因为store buffer里的a在等待其他cpu返回invalid ack引入写屏障技术,添加smp_w原创 2021-07-08 10:45:45 · 1064 阅读 · 1 评论 -
Spring源码解读:Spring的Event编程以及实现原理
文章目录前言一、使用传统方式观察者模式二、源码解读1.引入库2.读入数据总结前言要想代码写得好,设计模式不可少。Spring框架启动过程中,有两个设计模式使用较多,一个是观察者模式,一个是processor处理时用的链式模式。今天我们来介绍观察者模式的Event一、使用传统方式咱们写业务代码,经常会涉及到某种业务场景,譬如A的改变,B或者C需要知道,以便改变。一般程序员写代码可能会写成下面这种@Servicepublic class AService { @Autowired pr原创 2021-02-02 18:08:54 · 1000 阅读 · 1 评论 -
基于AOP+Redis实现一个简单频控拦截器
文章目录前言一、定义注解二、Aspect三、使用示例总结前言为了实现频控,并且可插拔形式,那么AOP无疑是一个非常好的选择。咱们这个Aspect实现依赖了redis一、定义注解今天咱们做一个简单的频控组件,可以实现某个接口针对某个用户某个时间段只能调用1次注解如下:@Inherited@Documented@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface FrequencyC原创 2021-01-26 15:27:31 · 1495 阅读 · 0 评论 -
线上问题引发的对于Map.values()的探究思考
项目场景:项目场景:我们的数据需要同步到es,以供列表页查询。产品反映修改了数据之后,列表页显示的字段可能是修改之前的甚至更老版本的数据。问题描述:我们目前做的一个系统,表单数据会有多个版本,但是不同版本字段不一定相同。需要把所有数据同步到es,在es进行列表搜索显示。上线几天后发现一个诡异的事儿是,某些表单,在经过多次编辑之后,从es查到的列表数据某些字段会展示位旧数据,而表单详情是最新数据。定位问题,问题一定出现在表单多版本数据融合,然后同步到es的地方查看代码 List<S原创 2021-01-19 18:01:35 · 907 阅读 · 2 评论 -
Java,责任链模式:replaceAll报错Unclosed group near index 1
闲着没事儿做,写了一个 责任链模式 的demo,发现跟之前看过一个框架 Apache Commons Chain功能很像,当然从框架名应该也能看出来。主要就是链条类和责任类。我的代码是模拟web功能里面的filterChain,通过多个filter来检验request的合理性。不多废话,上代码。Request类:public class Request { private Strin原创 2016-12-08 11:26:51 · 6293 阅读 · 1 评论 -
n皇后问题
看剑指offer时,看到全排列算法,后面的扩展引申,说可以用此思路解决8皇后问题,我就改成了解决n皇后问题。之前出现函数引用值传递还是引用传递问题,就是由于此代码出问题引发的思考。代码如下:public class QueenProblem { /* * 不同行的皇后不能在同一列,且任意两个皇后不能在同一对角线上 */ public static void main(St原创 2016-06-17 11:06:04 · 549 阅读 · 0 评论 -
严重: Catalina.start: org.apache.catalina.LifecycleException: Failed to start component [StandardServ
SpringMVC+Hibernate项目改为SpringMVC+Mybatis需要注意的点。原创 2015-09-14 17:08:06 · 3905 阅读 · 0 评论 -
Java函数传递参数:值传递还是引用传递
昨天在写一个小程序时,遇到一点问题,想了很久定位到是函数参数的问题上。但是在把函数中的 int 类型换成 Integer 类型时,在我的函数体中,Integer类型涉及的操作只是自增,我发现最后读取的数值没有变化。一度让我对Java函数参数的传递产生了怀疑。写了个test程序,总结了下,若是有什么错误,还望有人能够指出来。import java.util.Lin原创 2016-06-17 10:35:08 · 413 阅读 · 0 评论 -
Java利用回溯思想解决迷宫问题(寻找最短路径)
利用Java编写迷宫问题,寻找最短路径。原创 2015-01-27 10:30:34 · 2763 阅读 · 0 评论