- 博客(12)
- 收藏
- 关注
转载 分布式锁之三:基于ZooKeeper的分布式锁
实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookeeper的方案,其中前两种方案网络上有很多资料可以参考,本文不做展开。我们来看下使用Zookeeper如何实现分布式锁。 什么是Zookeeper? Zookeeper(业界简称zk)是一种提供配置管理、分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而且...
2019-05-23 01:07:24 91
转载 分布式锁之二:基于Redis的分布式锁
Redis分布式锁的正确实现方式 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。 可靠性 首先,为了...
2019-05-23 01:04:26 90
转载 分布式锁方式一 . 基于数据库的分布式锁
乐观锁 基于数据库资源表做乐观锁,用于分布式锁: 1. 首先说明乐观锁的含义: 大多数是基于数据版本(version)的记录机制实现的。何谓数据版本号?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个 “version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。 在更新过程中,会对版本号进行比较,如果是一致的,没...
2019-05-23 00:05:05 233
转载 Java源码分析:HashMap 1.8 相对于1.7 到底更新了什么?
前言 HashMap 在 Java 和 Android 开发中非常常见 而HashMap 1.8 相对于 HashMap 1.7 更新多 今天,我将通过源码分析HashMap 1.8 ,从而讲解HashMap 1.8 相对于 HashMap 1.7 的更新内容,希望你们会喜欢。 本文基于版本 JDK 1.8,即 Java 8 关于版本 JDK 1.7,即 Java 7,具体请看文章Jav...
2019-05-22 11:07:13 133
原创 什么是指令重排序?
什么是指令重排序? 有两个层面: **在虚拟机层面,**为了尽可能减少内存操作速度远慢于CPU运行速度所带来的CPU空置的影响,虚拟机会按照自己的一些规则(这规则后面再叙述)将程序编写顺序打乱——即写在后面的代码在时间顺序上可能会先执行,而写在前面的代码会后执行——以尽可能充分地利用CPU。拿上面的例子来说:假如不是a=1的操作,而是a=new byte1024*1024,那么它会运行地很慢,此时...
2019-05-11 03:08:42 7323
转载 Integer与int的种种比较你知道多少?
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。 首先看代码:...
2019-05-11 03:04:47 107
转载 用过哪些JDK自带的命令行工具
一、jps:虚拟机进程状况工具二、jstat:虚拟机统计信息监视工具三、jmap:Java内存映像工具四、jhat:虚拟机堆转储快照分析工具五、jstack:Java堆栈跟踪工具六、jinfo:Java配置信息工具 java和javac这两个命令行工具我们应该都很熟悉,但是除了这两个工具jdk/bin里面还提供了很多工具给我们使用,今天就简单介绍有关虚拟机监控且助于故障排查的工具。 jd...
2019-05-11 03:03:50 256
原创 堆栈异常
Java栈 Java Stack: Java栈总是与线程关联在一起的,每当创建一个线程,JVM就会为该线程创建对应的Java栈,在这个Java栈中又会包含多个栈帧(Stack Frame),这些栈帧是与每个方法关联起来的,每运行一个方法就创建一个栈帧,每个栈帧会含有一些局部变量、操作栈和方法返回值等信息。每当一个方法执行完成时,该栈帧就会弹出栈帧的元素作为这个方法的返回值,并且清除这个栈帧,...
2019-05-11 03:03:01 3432
转载 面试官:你知道并发Bug的源头是什么吗?
讲实话听到这个问题,不太熟悉并发编程的同学有点晕,你可能只能答个因为多线程之间的竞争共享资源啊。对说的没错。 但是呢感觉不够亮眼!我们的目的就是让面试官眼前一亮,让他颤抖!心里鼓掌:"牛批牛批!" 万剑归宗 多线程,给我们的感觉像啥?就像《风云》里面的无名的"万剑归宗"!《雪中悍刀行》里面老剑神李淳罡一声“剑来!”。哗哗哗的好多剑同时操作着一起飞!多帅哦! 但实际上CPU的执行是...
2019-05-11 02:50:22 219
转载 JMM和底层实现原理
1.并发编程领域的关键问题 1.1 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息。在编程中,线程之间的通信机制有两种,共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。 在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信...
2019-05-11 02:25:16 457 1
原创 SQL 性能调优--持续更新
我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! SQL优化是一个分析,优化,再分析,再优化的过程。站在执行计划的角度来说,我们这个过程,就是在不断的减少rows的数量。主要步骤有: 通过explain 来查看执行计划。通过这一步骤,我们能够分析出,该语句有没有走索引,索引合不合理的重要依据。《读懂MySQL执行计划》 缩小范围。例如使...
2019-05-10 03:28:54 144
转载 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题:...
2019-05-10 01:02:07 122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人