• 等级
  • 466988 访问
  • 127 原创
  • 5 转发
  • 3085 排名
  • 1493 评论
  • 164 获赞

一篇文章读懂 MySQL 中的锁

数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以 MySQL 自然也不能例外。MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引...

2018-11-28 20:57:06

一篇文章读懂java线程池

在日常的工作当中,线程池是我们经常使用的。但是我们在使用过程中并没有考虑过会不会有什么问题,我们配置的参数是否正确,到底应该如何配置线程池的各个参数,才能使机器发挥最大的性能。所以根据作者多年的使用线程池的经验,做本次分享,让众多的工程师的门更能详细的了解线程的使用,能够更加正确使用线程池。 通过本次分享,您将能知道: 常用的线程池都有哪些? 线程池的参数配置。 如何做线程池的监控? 原地...

2018-08-09 16:15:43

如何彻头彻尾了解 MySQL 的索引

如果正确合理设计并且使用索引的 MySQL 是一辆兰博基尼的话,那么没有设计和使用索引的 MySQL 就是一个人力三轮车。没有索引的表,单表查询可能几十万数据就是瓶颈,那到底该如何应对互联网企业的上亿的数据? MySQL 中的 InnoDB 存储引擎的核心在于索引,索引的核心在于 B+tree,所以说要想了解 MySQL 中索引,我们必须要先了解 B+tree ,而 B+tree 的说白了就是一...

2018-07-20 17:21:47

史上最全面的线程池介绍

敬请期待 https://gitbook.cn/gitchat/activity/5b4731ca260b1f16129ecb0f

2018-07-13 17:03:26

基于 AbstractQueuedSynchronizer 的并发类实现

公平模式ReentrantLock实现原理 前面的文章研究了AbstractQueuedSynchronizer的独占锁和共享锁,有了前两篇文章的基础,就可以乘胜追击,看一下基于AbstractQueuedSynchronizer的并发类是如何实现的。 ReentrantLock显然是一种独占锁,首先是公平模式的ReentrantLock,Sync是ReentractLock中的基础类

2017-08-31 20:59:41

JAVA REENTRANTLOCK、SEMAPHORE 的实现与 AQS 框架

ReentrantLock是JDK提供的一个可重入互斥锁,所谓可重入就是同一个锁允许被已经获得该锁的线程重新获得。可重入锁的好处可以在递归算法中使用锁,不可重入锁则导致无法在递归算法中使用锁。因为第二次递归时由于第一次递归已经占有锁,而导致死锁。本文我们将探讨JDK中ReentrantLock的实现。 Semaphore是JDK提供的一个可共享的同步组建,有n个许可,多个线程可以共同去获得许

2017-08-31 20:58:34

消息队列设计

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。 本文不会一一介绍这些消息队列的所有特性,而是探讨一下自主开发设计一个消息队列时,你

2017-08-17 14:25:19

Zookeeper全解析—Paxos灵魂

原计划在介绍完ZK Client之后就着手ZK Server的介绍,但是发现ZK Server所包含的内容实在太多,并不是简简单单一篇Blog就能搞定的。于是决定从基础搞起比较好。 那么ZK Server最基础的东西是什么呢?我想应该是Paxos了。所以本文会介绍Paxos以及它在ZK Server中对应的实现。 先说Paxos,它是一个基于消息传递的一致性算法,Leslie Lamp

2017-08-13 16:33:23

3des 加密

有两句话是这么说的:  1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。  2)编程就是算法和数据结构,算法和数据结构是编程的灵魂。  注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用。

2017-07-30 21:30:26

加密

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。本文给大家分享java常用的几种加密算法,需要的朋友可以参考下,对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,

2017-07-30 21:27:01

zabbix 监控jvm

Zabbix版本: Zabbix 3.0.2 一、服务端配置 1、安装jdk(版本1.7.0_79) 安装与配置比较简单,过程省略。执行java -version命令,出现类似界面表示成功。   2、安装Zabbix-Java-gateway Zabbix2.0起添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”,它是用java写的一个程

2017-06-30 22:16:24

HashMap的工作原理

1.前言     在探讨HashMap源码之前,先说一下HashCode,为什么呢?因为HashMap有一个特性是Key是唯一值,如何确定key的唯一性呢,这就用到了hash算法。在HashMap(jdk1.7)的put方法实现中首先利用了hash()生成key的hashCode,然后比较key的hashCode是否已经存在集合,如果不存在,就插入到集合,如果已存在,则返回null。   

2016-09-07 18:49:42

将字符串转json

第一种方式: 使用js函数eval(); testJson=eval(testJson);是错误的转换方式。 正确的转换方式需要加(): testJson = eval("(" + testJson + ")"); eval()的速度非常快,但是他可以编译以及执行任何javaScript程序,所以会存在安全问题。在使用eval()。来源必须是值得信赖的。需要使用更安全的json解析器。在服

2016-08-05 16:13:15

Maven+Jetty运行项目无法热修改html处理

今天在使用Maven+Jetty运行JavaWeb工程时,发现无法在运行状态下修改JS、HTML文件,即无法热修改,网上搜了一下,整合了很多文章最终搞定。 现象 此时在Eclipse中修改index.html文件时 不允许进行修改。 原因:如果NIO被支持的话,Jetty会使用内存映射文件来缓存静态文件,其中包括.js文件。在Windows下,使用内存映射文件会导致文件被锁定。

2016-08-03 15:56:52

Java并发编程:Lock

上一篇博客写了synchronized, 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的缺陷讲起,然后再讲述java.util.concurrent.locks包下常用的有哪些类和接口,最后讨论以下一些关于锁的概念方面的东西   以下是本文目录大纲:   一.synchr

2016-05-31 19:33:56

Java并发编程:阻塞队列

使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。

2016-05-27 21:38:33

synchronized详解

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。      二、然而,当一个线程访问object的一个synch

2016-05-26 18:11:19

彻底理解java语言的线程安全volatile用法

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。 锁提供了两种主要特性

2016-05-18 17:53:58

nio详解

下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。 复制代码 代码如下: IO                NIO 面向流            面向缓冲 阻塞IO            非阻塞IO 无                选择器 面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓

2016-04-30 21:46:12

io详解

一、什么是流        首先什么是流:流(Stream)的概念来源于UNIX中的管道(pipe)概念,在unix中,管道是一条不间断的字节流,用来实现程序和进程间的通信,或者读写外围设备、外部文件等。流,必须有源端和目的端,可以是文件,内存或者网络等。流的创建是为了更方便的处理数据的输入输出。        其次,对于输入流输出流如何区分,相信有很多人闹不清楚,本人也是很长时间弄不

2016-04-30 21:44:32

张宏杰

关注
  • 计算机软件/开发组长/高级工程师/技术专家
  • 北京 朝阳区