![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
语言
c412745699
这个作者很懒,什么都没留下…
展开
-
@Transactional注解回滚失效问题
首先,@Transactional注解常见的几个失效原因: 1. 抛出了checked异常:需要指定(rollbackFor=Exception.class)解决 2. 注解标注的方法不是public 3. 数据表(Mysql) 不是innodb引擎 4. 同类非public方法调用注解方法 5. 未配置<tx:annotation-driven transaction-manag...原创 2020-03-11 10:34:27 · 883 阅读 · 0 评论 -
20200223_Caffeine缓存
Caffeine是一个高性能的本地缓存,相比Guava缓存的性能更加优秀,接近于最优。值得一提的是,Caffeine缓存的api于Guava基本一致,熟悉Guava的同学可以无缝切换。 Caffeine的设计十分精妙,有几个点: 近似统计LFU的算法Count-Min Sketch。 借鉴了kafka的时间轮调度。 数据结构采取了Ringbuffer。 这几个点可以深入去学习:https:...转载 2020-02-23 15:38:24 · 144 阅读 · 0 评论 -
20200214_Disruptor框架
Disruptor是一个高性能的并发队列,三个特性保障了它的高效性: 1. CAS乐观锁: 利用CAS(compare and swap) 乐观锁代替了重量级的lock锁, 提升了性能。 2. 消除伪共享 伪共享是计算机的CPU缓存导致的。现在的计算机的CPU缓存一般是以行的形式来保存,一行大概是64个字节。java中一个Long是8个字节,所以一行能存8个Long。但是这...原创 2020-02-23 15:19:13 · 114 阅读 · 0 评论 -
20200203_本地缓存_GuavaCache原理
Guava Cache原理类似ConcurrentHashMap,支持多线程安全的本地缓存。 Guava Cache也加入了自己的特性,当从缓存里查询不到所查询的key时,就执行用户自定义的操作去获取值,并增添至缓存。同时可以防止多线程重复加载,只会有一个线程进入load方法,而其他线程则等待,直到缓存值被生成。这个听起来似乎是一种很危险的操作啊!不用担心,Guava还提供了另一种缓存策略,缓存...原创 2020-02-03 21:51:44 · 442 阅读 · 0 评论 -
20191116_ThreadLocal源码解析
ThreadLocal是用来存储线程的本地数据的。 ThreadLocal的设计算是十分巧妙的。 每一个线程Thread持有ThreadLocalMap, ThreadLocalMap是ThreadLocal下的一个内部静态类。ThreadLocalMap并没有继承Map, 而是持有了一个Entry[]的table。Entry的key是ThreadLocal (弱引用), value是存储的值。 ...原创 2019-11-16 15:52:17 · 108 阅读 · 0 评论 -
20191028_字节码加强
美团技术博客:https://tech.meituan.com/2019/09/05/java-bytecode-enhancement.html转载 2019-10-28 11:42:37 · 112 阅读 · 0 评论 -
20191027_java_Class文件
class文件是一组以8位字节为基础的二进制流。 ClassFile { u4 magic; // 魔法数字,表明当前文件是.class文件,固定0xCAFEBABE u2 minor_version; // 分别为Class文件的副版本和主版本 u2 major_version; u2 constant_pool_count; // 常量池计数 cp...原创 2019-10-27 13:10:16 · 164 阅读 · 0 评论 -
20191501_ClassLoader源码解析
/* * A class loader is an object that is responsible for loading classes. The * class <tt>ClassLoader</tt> is an abstract class. Given the <a * href="#name">binary name</a>...原创 2019-10-20 15:05:40 · 91 阅读 · 0 评论 -
20191020_java类加载器机制
双亲加载机制 JDK提供了几种默认的ClassLoader: Bootstrap ClassLoader 使用c++编写,负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。 Extensions ClassLoader 负责加载JRE的扩展目录,li...原创 2019-10-20 15:01:21 · 88 阅读 · 0 评论 -
20171204_ConcurrentLinkedQueue源码的一些问题
今天在看ConcurrentLinkedList的1.8源码,结合网上的一些博客,发现有一些地方有坑,不是太好理解,就写下来总结一下吧。 首先,ConcurrentLinkedList是一个并发容器,它的并发性是通过CAS来实现的,这是实现非阻塞并发算法的基础。然后,head/tail 并非总是指向队列的头 / 尾节点,也就是说允许队列处于不一致状态,这个特性把入队 / 出队时,原本需要一起原子化原创 2017-12-04 20:58:06 · 236 阅读 · 0 评论 -
20171021_python内存回收机制
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!看到一篇不错的文章,转了。语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的语言的内存管理方式。 对象的内存使用 ##赋值语句是语言最转载 2017-10-21 10:14:25 · 258 阅读 · 0 评论 -
20171001_链接原理
链接器必须对这些可重定位目标文件完成两个主要任务: 符号解析。将每个符号引用刚好和一个符号定义联系起来。重定位。链接器把每个符号定义与一个虚拟地址联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储位置,从而重定位这些节。 符号分为四类: 导出符号(export,本地符号), 导入符号(import,外部符号), 静态符号(本地符号), 局部符号(本地符号,不出现在符号表中)。转载 2017-10-01 20:29:27 · 352 阅读 · 0 评论 -
20171001_Alfred介绍和一些workflow推荐
尽管MacOS下自带的Spotlight已经是一款非常高效率的软件了,但是被称为神器的Alfred有过之无不及。 Alfred 的名字可能是因为作者是蝙蝠侠迷吧(^_^ 笑),下面简单介绍一下Alfred并且给出一些workflow推荐和下载地址。 Alfred 是一个用键盘通过热键、关键字、自定义插件来加快操作效率的工具,它不但是搜索工具,还是快速启动工具,甚至能够操作许多系统功能原创 2017-10-01 18:52:09 · 2647 阅读 · 0 评论 -
20170930 编译型语言和解释型语言
我们平时使用的高级语言无法直接被计算机识别,计算机要想识别并运行高级语言,必须将高级语言翻译成机器码。“翻译”的方式有两种,一种为编译,一种为解释,二者的主要区别是翻译的时机不同。下面分别对编译型语言和解释型语言作出介绍以及二者的优劣势。原创 2017-09-30 09:47:36 · 246 阅读 · 0 评论