- 博客(12)
- 收藏
- 关注
原创 MapStruct使用方法
目前代码中对象的copy大家使用的基本都是spring提供的BeanUtils.copyProperties,但是这个方法的实现都是基于反射,性能差而且容易出异常,很多规范严禁使用这种途径。效率最高的还是传统的get、set方法类似这种,但是这种方法重复又无聊,那么有什么方法可以解决呢?我们可以试试MapStruct:1.引入依赖<mapstruct.version>1.3.1.Final</mapstruct.version>org.mapstructmapstru
2020-07-24 14:19:34
1205
原创 互斥锁和自旋锁的区别
这里写自定义目录标题互斥锁(mutexlock):最常使用于线程同步的锁;标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁;临界区和互斥量都可用来实现此锁,通常情况下锁操作失败会将该线程睡眠等待锁释放时被唤醒。在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。原子性:把一个互斥量锁定为一个原子操作,这意味着操作系统(或pthrea
2020-05-24 22:18:46
757
原创 Java并发容器和框架
ConcurrentHashMap为什么要使用 ConcurrentHashMap原因有三:并发编程中HashMap会导致死循环;HashTable效率又非常低;ConcurrentHashMap的锁分段技术可有效提升并发访问率。在并发编程使用HashMap会导致死循环。在多线程环境下,使用HashMap进行put操作会引起 死循环,导致CPU利用率接近100%,所以在并发情况下不能使用H...
2019-11-26 23:19:49
155
原创 为什么阿里巴巴开发手册强制规定POJO 类中布尔类型的变量,都不要加 is 前缀
在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个RPC接口的时候,我们一般会定义一个字段表示本次请求是否成功的。一般情况下,我们可以有以下四种方式来定义一个布尔类型的成员变量:以上四种定义形式,你日常开发中最常用的是哪种呢?到底哪一种才是正确的使用姿势呢?通过观察我们可以发现:(1)前两种和后两种的主要区别是变量的类型不同,前者使用的是boolean,后者使用...
2019-11-01 12:39:36
2868
4
原创 Java:如何更优雅的处理空值?
导语在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。业务中的空值场景存在一个UserSearchService用来提供用户查询的功能:p...
2019-10-29 15:15:14
224
原创 new一个对象有哪两个过程?
Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。我们先假设是第一次使用该类,这样的话new一个对象就可以分为两个过程:加载并初始化类和创建对象。一、类加载过程(第一次使用该类)java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程:双亲委托模...
2019-10-29 10:56:38
797
原创 分布式锁--Redlock
业务背景平时开发中都会遇到这样的业务背景:一个任务或者一个订单请求到你,你很强大有三台机器但是只希望任务在同一时间只有一台机器处理,这时候单机的加锁策略synchronized、Lock等通通就不管用了,这时候就需要用到分布式锁,多个终端抢占一个单例的分布式锁。以下是现有实现分布式锁的方法,使用的是redis的setnx命令,有值不做操作,无值设置成功,设置成功之后再设置超时时间。假设服务执...
2019-07-31 16:49:37
215
翻译 深度探究mq的一些问题
一、为什么要使用MQ?相信大家也听过这样的一句话:好的架构不是设计出来的,是演进出来的。这句话在引入MQ的场景同样适用,使用MQ必定有其道理,是用来解决实际问题的。而不是看见别人用了,我也用着玩儿一下。其实使用MQ的场景有挺多的,但是比较核心的有3个:异步、解耦、削峰填谷异步我们通过实际案例说明:假设A系统接收一个请求,需要在自己本地写库执行SQL,然后需要调用BCD三个系统的接口。...
2019-07-12 09:01:48
315
原创 mysql查询,插入的相关注意
1对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from...
2019-07-05 19:29:19
371
原创 DRUID-连接泄漏如何定位
http://www.cnblogs.com/dxxdsw/p/10667014.html分析原因应该是程序中有地方连接未关闭造成的。那如何来定呢?使用druid连接池的超时回收机制,在配置中增加以下内容: ...
2019-07-05 19:27:53
1343
原创 String,StringBuilder以及StringBuffer这三个类之间的区别
String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正。这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > S...
2019-03-11 20:24:28
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人