自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

转载 Java并发框架AbstractQueuedSynchronizer(AQS)

1.前言  本文介绍一下Java并发框架AQS,这是大神Doug Lea在JDK5的时候设计的一个抽象类,主要用于并发方面,功能强大。在新增的并发包中,很多工具类都能看到这个的影子,比如:CountDownLatch、Semaphore、ReentrantLock等,其内部基本都有一个Sync对象是实现了这个AQS这个抽象类,只是实现的过程不同而已,造就了这些不同功能特点的并发工具类...

2018-07-24 21:28:00 203

转载 线程安全与锁优化

1.前言  之前的文章记录了一下Java的内存模型和线程的关系,其实已经由内存模型谈到了线程安全的问题。本文将对线程安全进行具体的描述,对锁的实现进行探究,要明白锁的原理是什么,才能更好的利用锁,排查相关问题。2.线程安全  《Java Concurrency In Practice》作者Brian Goetz对线程安全有一个比较恰当的定义:当多个线程访问一个对象时,如果不用...

2018-07-23 22:22:00 201

转载 Java内存模型与线程

1.前言  本文记录一下Java的线程与内存等知识,更好的理解Java的线程是如何工作的。  让计算机并发执行若干个运算任务和更充分地利用计算机处理器的效能之间看起来是因果关系,但实际上没那么简单。CPU的运算能力十分强大,但是任何任务都不太可能单单靠CPU就能够完成,比如读取内存,存储的数据,网络的请求等IO操作是很难消除的,更糟糕的是存储设备与CPU之间的运算差距过大,所以在...

2018-07-22 15:02:00 202

转载 Java的语法糖

1.前言  本文记录内容来自《深入理解Java虚拟机》的第十章早期(编译期)优化其中一节内容,其他的内容个人觉得暂时不需要过多关注,比如语法、词法分析,语义分析和字节码生成的过程等。主要关注的就是Java的一些语法糖是如何实现的。  语法糖不会提供实质性的功能改进,但是它们或能提高效率,或能提升语法的严谨性,或能减少编码出错的可能。大量使用语法糖可能会迷失其中,不得要领,下面就介...

2018-07-21 21:44:00 141

转载 虚拟机字节码执行引擎

1.前言  之前对虚拟机的加载机制进行了描述:这里,本章主要对虚拟机的运行机制进行记录说明。  虚拟机区别于物理机就在于运行方面,物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层次上的,虚拟机的执行引擎是自己实现的,可以自行定制指令集。所以JVM可以进行跨平台。2.栈帧的结构  在最早的文章中介绍了JVM的内存布局:这里。文章中提到了栈和程序计数器是线程私有的...

2018-07-20 22:17:00 79

转载 虚拟机类加载机制

1.前言  本章记录一下Class文件是怎么被加载到内存中进行执行的。  虚拟机并没有约束一定是本地文件才能进行加载,网络文件也是可以的,也没有约束必须是Java文件,一切遵守虚拟机解析规则的文件都能被加载,Java对应的就是Class字节码文件了。  不同于其他语言,在编译时就需要进行连接,Java语言中,类型的加载,连接和初始化都是在程序运行期间完成的,这会带来一定的开销...

2018-07-19 21:44:00 86

转载 常用的虚拟机监控、检测工具

1.前言  本篇文章记录一下常见的虚拟机性能监控和排查工具的作用和使用方法。2.JDK命令行工具  jdk的bin目录下有着很多exe可执行程序,我们常用的就是java、javac运行和编译命令了。但是还有很多其它用于检测虚拟机运行状态的命令。本章对其进行介绍,学习如何使用。这些工具体积一般很小,原因在于其真正的实现是在jdk/lib/tools.jar中。2.1 jps...

2018-07-18 19:08:00 2168

转载 Java垃圾回收机制

1.前言  本文归纳一下对Java内存管理机制的理解,尽可能通俗易懂,知识来自于深入理解Java虚拟机一书。2.起源  计算机简单理解就是根据执行计划,通过参数得到结果。执行计划就是程序了,参数就是实际变量,最终运行得到我们要的结果。磁盘由于其廉价且持久化,用于保存程序和数据,但是受制于执行速度,内存的作用就显现出来了。内存运行快,但是昂贵,易失数据(断电),容量远不及存储介...

2018-07-17 19:33:00 124

转载 MySQL笔记(8)---备份与恢复

1.前言  本章记录数据库的备份与恢复操作。MySQL提供了很多工具完成备份工作:mysqldump、ibbackup、replication,也可以使用一些第三方的工具完成,如xtrabacup、LVM快照等。2.备份与恢复概述  根据备份方法的不同,可以将备份分为:    Hot Backup(热备):指的是在数据库运行中直接备份,对运行没有影响    Cold ...

2018-07-12 19:40:00 115

转载 MySQL笔记(7)---事务

1.前言  前面具体讲了MySQL中的锁实现的方式,解释了是如何保证数据在并发情况下的可靠性,并提到了事务REPETABLE READ和READ COMMITTED,解释了一下这两种事务的不同。本章讲具体就事务的实现过程进行记录,扫除这块让人疑惑的知识点。  事务是数据库区别于文件系统的一个重要特性之一。文件系统中,如果写文件时系统崩溃了,可能文件就被损坏了。虽然有机制将一个文件...

2018-07-11 20:25:00 148

转载 MySQL笔记(6)---锁

1.前言  我们都知道在并发的情况下,修改数据时需要添加锁,但是却对数据库锁的工作原理不甚理解,不知道锁的运行机制,也就对数据的安全性无法明白。本章记录MySQL中锁的相关知识。2.什么是锁  锁是数据库系统区别与文件系统的一个关键特性,用于管理对共享资源的并发访问。InnoDB提供了行级别的锁,在数据库内部其他地方也使用了锁。例如:操作LRU列表,为了保证数据一致性就必须有...

2018-07-09 08:44:00 139

转载 MySQL笔记(5)---索引与算法

1.前言  本章记录MySQL中的索引机制,了解索引可以让数据库更快。索引太多会造成性能损耗,索引太少肯定查询效率不高。2.InnoDB存储引擎所有概述  InnoDB中常见的索引有:    B+树索引    全文索引    哈希索引  哈希索引是自适应的,无法人为干预是否在一张表中生成hash索引。  B+树不能找到一个给定键值的具体行,B+树索引能找到...

2018-07-08 09:28:00 182

转载 MySQL笔记(4)---表

1.前言  上一章记录了MySQL中的一些文件组成,以及相关作用和参数配置,本章开始记录深层次的存储结构,以便更好理解MySQL的设计。2.索引组织表  InnoDB中,表都是根据主键顺序组织存放的,这种方式称为索引组织表。每个表都有一个主键,没有主键会按照一定规则选择或创建主键:    判断表中是否有非空唯一索引,有则为主键,多个按建表时定义顺序的第一个作为主键,这个意...

2018-07-07 09:52:00 150

转载 MySQL笔记(3)---文件

1.前言  第二章简单记录了一下InnoDB存储引擎的一个基本内容,介绍了保证高效插入的Insert Buffer,change Buffer和确保数据安全的write ahead log以及double write机制,还介绍了查询和保存的内存策略,LRU列表、Free列表以及Flush列表,与此同时相关的线程操作,Purge Thread(回收undo页)、Page Cleane...

2018-07-06 08:56:00 104

转载 MySQL笔记(2)---InnoDB存储引擎

1.前言  本节记录InnoDB的相关知识点。2.InnoDB存储引擎简介2.1版本  MySQL5.1开始,允许用动态方式加载引擎,这样存储引擎的更新可以不受MySQL数据库版本的限制。下面是各个InnoDB版本功能对比:    老版本的InnoDB          支持ACID、行锁设计、MVCC    InnoDB 1.0.x 也称为InnoDB Plug...

2018-07-05 09:06:00 93

转载 MySQL笔记(1)---MySQL体系结构和存储引擎

1.前言  本系列记录MYSQL数据库的一些结构和实现特点,方便查询。2.基本概念  数据库:物理操作系统文件或者其他形式文件类型的集合。MySQL中数据库文件可以是frm、MYD、MYI、ibd结尾的文件。使用NDB引擎时,可以是内存中的文件。  实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。MySQL数据库实例在系统上的表...

2018-07-04 09:02:00 184

转载 Redis笔记(4)独立功能的实现

1.前言  本节记录一下redis的一些功能上的实现,包括发布订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志和监视器。2.发布订阅  上一章介绍sentinel的时候说到了sentinel会订阅主从服务器的hello频道,每个sentinel通过往这个频道中传递各自的状态,让其它sentinel发现自己并更新相关状态。  Redis的发布与订阅功能是由PUBLIS...

2018-07-03 09:10:00 109

转载 Redis笔记(3)多数据库实现

1.前言  本章介绍redis的三种多服务实现方式,尽可能简单明了总结一下。2.复制  复制也可以称为主从模式。假设有两个redis服务,一个在127.0.0.1:6379,一个在127.0.0.1:12345。我们登陆12345端口的redis,输入命令slaveof 127.0.0.1:6379就设置好了复制模式。此时6379就是主服务器,12345就是从服务器。  ...

2018-07-02 08:56:00 100

转载 Redis笔记(2)单机数据库实现

1.前言  上节总结了一下redis的数据结构和对象构成,本章介绍redis数据库一个基本面貌,是如何设计的。2.数据库  服务器结构redisServer:    redisDb *db: 一个数组,保存服务器中所有的数据库    dbnum:  服务器的数据库数量,默认16个    saveparam *saveparams: 设置的保存选项    lon...

2018-07-01 15:57:00 120

转载 Redis笔记(1)数据结构与对象

1.前言  此系列博客记录redis设计与实现一书的笔记,提取书本中的知识点,省略相关说明,方便查阅。2.基本数据结构2.1 简单动态字符串SDS(simple dynamic string)  结构体定义:    len: buf数组中已使用字节的数量,使用len判断实际内容长度,而不是'\0'字符    free: 未使用字节的数量,查询该值,杜绝内存溢出...

2018-06-30 18:45:00 119

转载 杂记---Mongo的Invalid BSON field name $gte

1.前言  这几天使用mongo的时候遇到了一个异常:Invalid BSON field name $gte,该问题可能会有很多小伙伴会遇到,因此记录一下解决过程。起因是用JAVA翻译一个其他语言写的程序,需要在mongo中保存某次的查询条件,以便下次使用。但是保存的时候抛出了这个异常,原程序却没有问题,这个肯定和JAVA的实现有关,与mongo服务本身关系不大了。下面是一个简略的...

2018-06-28 22:36:00 2374

转载 Netty核心概念(10)之内存管理

1.前言 之前的章节已经将启动demo中能看见的内容都分析完了,Netty的一个整体样貌都在第8节线程模型最后给的图画出来了。这些内容解释了Netty为什么是一个异步事件驱动的程序,也解释了Netty的线程模型的高效,但是并没有涉及到的一个方面就是Handler的解析过程。通过前面的知识点我们都应该明白了Handler用于对获取的数据按照相关协议进行解析,Java的NIO都是通过bu...

2018-05-07 21:42:00 204

转载 Netty核心概念(9)之Future

1.前言 第7节讲解JAVA的线程模型中就说到了Future,并解释了为什么可以主线程可以获得线程池任务的执行后结果,变成一种同步状态。秘密就在于Java将所有的runnable和callable任务,统一变成了callable,最终包装成了FutureTask对象,该类实现了Runnable接口和Future接口,所以FutureTask能够被线程执行。最终异步执行过程全部由该类控...

2018-05-04 22:18:00 155

转载 Netty核心概念(8)之Netty线程模型

1.前言 第7节初步学习了一下Java原本的线程池是如何工作的,以及Future的为什么能够达到其效果,这些知识对于理解本章有很大的帮助,不了解的可以先看上一节。 Netty为什么会高效?回答就是良好的线程模型,和内存管理。在Java的NIO例子中就我将客户端的操作单独放在一个线程中处理了,这么做的原因在于如果将客户端连接串起来,后来的连接就要等前一个处理完,当然这并不意味着多线...

2018-05-03 22:03:00 156

转载 Netty核心概念(7)之Java线程池

1.前言 本章本来要讲解Netty的线程模型的,但是由于其是基于Java线程池设计而封装的,所以我们先详细学习一下Java中的线程池的设计。之前也说过Netty5被放弃的原因之一就是forkjoin结构比较复杂,forkjoin也是JDK提供的一个基本线程模型,这里就不进行介绍。本节涉及知识点很多,可能有误,请对照JDK源码进行学习。 本章涉及的概念有Callable,Futur...

2018-05-02 21:30:00 212

转载 Netty核心概念(6)之Handler

1.前言 本节介绍Netty中第三个重要的概念——Handler,这个在前两节都提到了,尤其是Channel和Handler联系紧密。handler本身的设计非常简单,但是所起到的作用却很大,Netty中对于handler的实现非常多(handler是控制socket io的各个生命周期的业务实现,netty实现了很多种协议,自然有很多handler类)。本节并不关心各种不同功能的h...

2018-04-28 21:26:00 417

转载 Netty核心概念(5)之Channel

1.前言 上一节讲了Netty的第一个关键启动类,启动类所做的一些操作,和服务端的channel固定的handler执行过程,谈到了不管是connect还是bind方法最终都是调用了channel的相关方法,此节开始对channel进行说明。channel设置的概念非常多,而且都很重要,先放个NIO的客户端Channel的类结构图。2.主要概念2.1 channel...

2018-04-27 23:05:00 339

转载 Netty核心概念(4)之Bootstrap

1.前言 第三节介绍了Netty的一些基本概念,此节介绍Netty的第一个概念Bootstrap——启动类。Netty中服务端和客户端的启动类是不一样的,这个不要搞错了,类都在bootstrap包下。之后的所有章节都是基于目前最新版本的Netty 4.1.24.Final版本。2.结构详解 bootstrap中主要就两个内容:bootstrap和con...

2018-04-26 21:38:00 91

转载 漫谈NIO(3)之Netty实现

1.前言 上一章结合Java的NIO例子,讲解了多路IO复用的一个基本使用方法,通过实际编码加深对其理解。本章开始进入Netty的环节,前面两章都是为了Netty进行铺垫说明。此节将对比Java的NIO例子,说明Netty的一个基本设计,如果前面理解透彻,对Netty的学习将非常有帮助。 国际惯例,将Netty官网的基本描述放上:Netty是一个为了快速开发可维护的高...

2018-04-25 22:19:00 97

转载 漫谈NIO(2)之Java的NIO

1.前言 上章提到过Java的NIO采取的是多路IO复用模式,其衍生出来的模型就是Reactor模型。多路IO复用有两种方式,一种是select/poll,另一种是epoll。在windows系统上使用的是select/poll方式,在linux上使用的是epoll方式,主要是由于DefaultSelectorProvider具体选择的selector决定。epoll是在lin...

2018-04-24 17:27:00 103

转载 漫谈NIO(1)之计算机IO实现

1.前言 此系列将尽可能详细介绍断更博客半年以来个人的一个成长,主要是对Netty的源码的一个解读记录,将从整个计算机宏观IO体系上,到Java的原生NIO例子最后到Netty的源码解读。不求完全掌握,但求知道前因后果,设计思路,来检验半年所学(之前是懒,水平不够,现在写博客查漏补缺)。介绍过程中所涉及的知识点可能有错,请各位指教,相互学习。2.为什么关注IO 简...

2018-04-22 20:31:00 190

转载 commons-pool2

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7375611.html1.前言  本章介绍一下常用基础Jar包commons-pools2,最近使用到了thrift作为rpc服务通讯,但是没有找到其提供的连接池。百度了一下官方貌似没有提供,需要自己实现,所以根据网上的实现方法通过使用commons-pool2包来构建自己的thrift连接...

2018-04-15 21:29:00 348

转载 机器学习实战(二)决策树

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7603601.html1.原理  回顾上章所说的kNN算法,其利用输入样本和训练样本的特征点差异,来选择k个最小差异的标记样本,这k个样本大部分处于哪个分类就认定输入的样本是哪个分类的。为了处理各个特征取值范围不同对差异的影响,采取了数值归一化的处理方法。从以上步骤可以看出,kNN默认所有特...

2017-09-28 14:42:00 98

转载 机器学习实战(一)k-近邻算法

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7593656.html1.原理  本章介绍机器学习实战的第一个算法——k近邻算法(kNearest Neighbor),也称为kNN。说到机器学习,一般都认为是很复杂,很高深的内容,但实际上其学习门栏并不算高,具备基本的高等数学知识(包括线性代数,概率论)就可以了,甚至一些算法高中生就能...

2017-09-26 15:08:00 57

转载 Java之集合(二十七)其它集合

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7551368.html1.前言  本章介绍剩余的3个集合类:ConcurrentSkipListSet、CopyOnWriteArrayList、CopyOnWriteArraySet。因为这三个集合类的实现都比较简单,就一并描述了。Set相关的两个类不用说,一般都是借助其它集合实现的,所...

2017-09-19 13:27:00 103

转载 Java之集合(二十六)ConcurrentSkipListMap

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7542578.html1.前言  一个可伸缩的并发实现,这个map实现了排序功能,默认使用的是对象自身的compareTo方法,如果提供了比较器,使用比较器的比较方法。简单来说ConcurrentSkipListMap是TreeMap的并发实现,但是为什么没有称之为ConcurrentTr...

2017-09-18 18:27:00 125

转载 Java之集合(二十五)ConcurrentHashMap

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7520808.html1.前言  本章介绍使用的最频繁的并发集合类之一ConcurrentHashMap,之前介绍过HashMap和HashTable,指出了HashTable的问题。虽然可以使用Collections.synchronizedMap方法包装HashMap完成线程安全的Ma...

2017-09-15 15:09:00 55

转载 Java之集合(二十四)ConcurrentLinkedDeque

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7517454.html1.前言  本章介绍并发队列ConcurrentLinkedDeque,这是一个非阻塞,无锁,无界 ,线程安全双端操作的队列。简单说就是ConcurrentLinkedQueue的升级版,在JDK7之后才提供。该队列也不允许空元素,而且size方法并不是常量时间,其需要...

2017-09-14 13:37:00 263

转载 Java之集合(二十三)SynchronousQueue

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7515729.html1.前言  本章介绍阻塞队列SynchronousQueue。之前介绍过LinkedTransferQueue,特点提供了让生产者知道消费者消费了其产出,没消费就等待的模式,本章介绍的这个类则必须是生产者生产后消费者消费了才会继续下去,反之亦然,消费者必须等待生产者产出...

2017-09-13 16:37:00 55

转载 Java之集合(二十二)PriorityBlockingQueue

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7510799.html1.前言  本章介绍阻塞队列PriorityBlockingQueue。这是一个无界有序的阻塞队列,排序规则和之前介绍的PriorityQueue一致,只是增加了阻塞操作。同样的该队列不支持插入null元素,同时不支持插入非comparable的对象。它的迭代器并不保证...

2017-09-13 10:57:00 70

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除