- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 new String("abc")创建了几个对象引发的思考
1.首先回到问题本身,new String(“abc”)到底会创建几个对象?1个?2个?正确的说应该是1个或2个吧情况一:String str = new String("abc");这种情况下回创建两个对象。一个是放在堆区的String对象。一个是放在字符串常量池中的“abc”对象。情况二:String str = "abc";String str2 = new String...
2020-03-16 16:37:01 535
原创 linux top过高问题拍查
最近测试环境的订单模块经常性的挂掉,查看其CPU使用率达到177%。CPU占用高一般是由以下情况导致的:1.代码中存在死循环,导致应用一直占用着cpu。2.某一张表数据量极大,查出来进行处理极其耗时,这时一般还伴随着内存溢出异常。3.内存中存在虚拟机无法回收的对象,当内存不足的时候,gc一直在运行,导致CPU使用率飙升。要确认是由于哪一种情况导致,一般可以按照以下步骤确定。一. 使用T...
2020-03-15 19:47:51 1523
原创 redis分布式锁的各种坑
用redis做分布式锁,看似是一个非常简单的问题,但是其中却蕴含着很多坑,我从单机方式开始把redis分布式锁的所有坑都踩一踩,豁然开朗。文字描述较少,直接上代码,相信大家一看就懂。尤其是点评把每一个情况的坑描述出来了。后一种情况会把上一种情况的坑给解决掉。第一种情况:单机方式我们对一个库存进行扣减的一个简单操作public class RedisService { @Autowi...
2020-03-15 19:25:01 893 2
原创 Condition的使用和理解
接上一篇AQS,所以编号从四开始四,Condition在前面学习 synchronized 的时候,有讲到 wait/notify 的基本使用,结合synchronized 可以实现对线程的通信。那么这个时候我就在思考了,既然 J.U.C 里面提供了锁的实现机制,那 J.U.C 里面有没有提供类似的线程通信的工具呢? 于是找阿找,发现了一个 Condition 工具类。Conditio...
2020-03-12 17:14:05 477
原创 手动实现jdk动态代理
一.代码实现前提知识:静态代理继承:代理对象继承目标对象,重写需要增强的方法;缺点:会代理类过多,非常复杂聚合:目标对象和代理对象实现同一个接口,代理对象当中要包含目标对象。缺点:也会产生类爆炸,只不过比继承少一点点总结:如果在不确定的情况下,尽量不要去使用静态代理。因为一旦你写代码,就会产生类,一旦产生类就爆炸。思路:要生成一对象一般来说都是通过class文件,被...
2020-03-12 16:59:00 132
原创 适配器模式
参考书籍:《java设计模式》对象适配器模式在对象适配器模式结构图中包含如下几个角色:Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee...
2020-03-12 16:46:01 128
原创 装饰器模式(包装器模式)
开发一套图形界面构件库VisualComponent,该构件库提供了大量基本构件,如窗体、文本框、列表框等,由于在使用该构件库时,用户经常要求定制一些特效显示效果,如带滚动条的窗体、带黑色边框的文本框、既带滚动条又带黑色边框的列表框等等,因此经常需要对该构件库进行扩展以增强其功能:这样设计:系统扩展麻烦,代码重复,系统庞大。通过装饰者模式的设计后:Component充当抽象构件类,...
2020-03-12 16:44:50 143
原创 适配器模式
参考书籍:《java设计模式》刘伟对象适配器模式在对象适配器模式结构图中包含如下几个角色:Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adapt...
2020-03-12 16:39:56 107
原创 模板方法
参考书籍:《java设计模式》刘伟1.模板方法模式的概念模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。2.模板方法模式的结构AbstractClass:实现一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。AbstractClass其实就...
2020-03-12 16:30:28 115
原创 java的七大设计原则
参考书籍:《java设计原则》单一职能原则:一个类只负责一个功能领域中的相应职责开闭原则::一个软件实体应当对扩展开放,对修改关闭。为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。里氏替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立。里...
2020-03-12 16:28:13 235
原创 装饰器模式(包装器模式)
参考书籍:《java设计模式》刘伟开发了一套图形界面构件库VisualComponent,该构件库提供了大量基本构件,如窗体、文本框、列表框等,由于在使用该构件库时,用户经常要求定制一些特效显示效果,如带滚动条的窗体、带黑色边框的文本框、既带滚动条又带黑色边框的列表框等等,因此经常需要对该构件库进行扩展以增强其功能:这样设计:系统扩展麻烦,代码重复,系统庞大。通过装饰者模式的设计后:...
2020-03-12 16:24:07 186
原创 深入理解AQS(源码)
一,Lock1. Lock 简介在 Lock 接口出现之前,Java 中的应用程序对于多线程的并发安全处理只能基于,synchronized 关键字来解决。但是 synchronized 在有些场景中会存在一些短板,也就是它并不适合于所有的并发场景。但是在 Java5 以后,Lock的出现可以解决synchronized 在某些场景中的短板,它比 synchronized 更加灵活。2. L...
2020-03-12 16:16:06 266
原创 Mysql的MVCC的理解
阅读前说明:关于mysql的理解因为没有参考专业的书籍(看过的《高性能mysql》和《mysql》技术内幕都没有相关介绍,难道是我看到?),所以对于这一块的理解完全出自自己的理解(也参考了其他博友的文章),如果哪里有问题,欢迎一起探讨。Undo和Redo在理解mvcc前应该要先知道这两个概念。1. Undo LogUndo Log 是什么: undo意为取消,以撤销操作为目的,返回指定某个...
2020-03-12 15:36:11 189
原创 Innodb存储引擎的锁机制(三)--怎么利用锁解决并发事务带来的问题?
1怎么利用锁解决并发事务带来的问题?1. 解决脏读:解释: 事务B在更新数据时,加上了X锁,则其他事务就不能读取和操作这条数据,事务A的select是不能直接从原表中查的,这时事务A会从快照中查询,因为快照中的数据是事务B 更新前保留的原始数据,所以事务A查到的结果不是18,而是16。2. 解决不可重复读解释: 事务A第一次查询的时候加了一把共享锁,此时其他事务只能读取,不能操作...
2020-03-12 14:36:18 229
原创 Innodb存储引擎的锁机制(二)-行锁的算法
以下几种锁,与其认为是一种锁,更可以理解为一种锁的算法。1.临键锁(Next-key locks):对应explain的type=range(范围查找)锁住记录+区间(左开右闭)当sql执行按照索引进行数据的检索时,查询条件为范围查找(between and、<、>等)并有数据命中则此时SQL语句加上的锁为Next-key locks,锁住索引的记录+区间(左开右闭)begi...
2020-03-12 14:22:17 157
原创 观察者模式
参考书籍:《java设计模式》 刘伟基础应用观察者模式定义如下: 观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(...
2020-03-12 14:14:00 93
原创 自动化部署springboot项目
在部署springboot项目时的痛点(这里直说jar部署方式):每次部署都要将完整的jar包发布到服务器上,但是jar有几百兆的大小(包含了依赖包),上传速度很慢。此时我们想到了方法一,将项目的依赖包和项目代码分开的方式(看下面详解),这的确带给我们很多方便,只需要部署项目代码即可(几百k大小),但是一但项目中有jar包引入,则必须将所有依赖包都替换(单独替换会有依赖的遗漏,除非你一个一个对比,...
2019-10-02 10:46:57 1756 1
原创 Innodb存储引擎的锁机制(一)
一,锁[外链图片转存失败(img-lmtV1JFs-1568648854110)(0677A7D9A267433F9A997388C7A5067A)]隔离级别到底如何实现的呢? --》 锁、MVCC锁是用于管理不同事务对共享资源的并发访问表锁与行锁的区别:锁定粒度:表锁 > 行锁加锁效率:表锁 > 行锁冲突概率:表锁 > 行锁并发性能:表锁 < 行锁Inn...
2019-09-16 23:48:34 206
原创 Maven的Missing artifact问题解决
在从中央仓库下载jar的时候总是提示Missing artifact 去网站找了下确实有这个jar但就是不能更新到本地仓库?哪位maven高手能指点一下啊,或者有没其它解决办法,或者怎么手动添加到本地仓库?谢谢了。 看看本地仓库是否有这个jar的目录,目录里是否有该jar的一个后缀为lastUpdated的文件。把这个文件删掉。再update一下dependency就行了。...
2018-12-06 13:49:51 542
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人