- 博客(22)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 <MyBatis缓存机制>一级缓存源码浅析
前言昨天晚上在研究mysql不同级别日志的时候,发现了很多脏读情况,一些明明已经被测试用例修改过的数据在读取后还是原值,不用说,肯定是缓存在作祟。百度了一些资料,发现Mybatis和Hibernate一样,也是分级缓存,于是想着借此机会研究一下Mybatis自带的缓存机制,看了一会儿源码,把自己的一些浅见在这里记录一下,希望能给看到的人一点启示。如果这篇源码导读有什么地方逻辑不是很清楚的,欢迎各位看
2017-07-14 16:24:24
434
原创 Java集合归纳-<四>List
前言昨天无意间翻看自己的博客列表的时候才发现,集合部分的总结居然还有List的一部分没有记录,真是大意了。于是立刻翻出之前的读书笔记,稍作整理,今天特意来补上这部分。学习的事,无论大小都还是要有头有尾。List摘要List在存储元素的实现机制上,于Map和Set有很大的区别。List集合在添加元素时按照元素的添加顺序设置元素的索引,从0开始。因此List集合的元素时有序的,正因为其有序性,我们在取元
2017-09-23 11:33:18
340
转载 深入理解Java并发之synchronized实现原理
转载申明之前一直对“访问synchronized修饰的对象,获取的是对象的锁”这句话的语义认识很模糊,近日在博客上闲逛的时候看到这篇文章《深入理解Java并发之synchronized实现原理》,感到十分受用,自己平时也算是注意积累,随手瞎写一些个人的读书笔记,但相较于这篇文章,惊觉自己还有很长的路要走。 故通过对此文作者吴老师的意见征求,得到了转载的允许,现将此文转载到自己的博客,方便日后反复研
2017-09-12 20:22:56
267
原创 ThreadLocal示例及源码浅析
实现数据隔离了解一个东西,我们当然要先问为什么要了解他。在多线程的访问环境下,我们都会考虑线程安全的问题,所谓线程安全,就是为了确保多个线程访问的资源能与在单线程访问时返回的结果一致,不会产生二义性,也可以说是保证多线程安全访问竞争资源的一种手段。常规来说,synchronized关键字和Java5新增的java.util.concurrent.locks下的Lock和ReentrantLock包从
2017-08-30 16:06:04
353
原创 Java集合归纳-<三>Map
Map概要上一篇总结了Set集合的一些常用知识点,为何紧接着总结Map呢?因为Map和Set在底层实现上可以说是一种包装的关系,先看看Map的结构示意图。上图中的两个桶分别代表Map集合里保存的两组值,分别是Key值和Value值,Key和Value都可以是任何引用类型且他们之间保持着一一对应的关系,这一点是Map最基本的。Key值不允许重复,且无需,是不是和Set很像呢,其实把Map里的所有Key
2017-08-26 10:13:16
355
原创 Java集合归纳-<二>Set
Set概要上一篇说过,Set是Collection的实现之一,在这里我可以说其实Set和Collection基本相同,只是需要注意Set不得存放重复元素即可。下面详细说一下Set在日常开发中用的最多的两种实现,HashSet和TreeSet。HashSet特征HashSet正如其名,因为是按照Hash算法来存储集合中的元素,所以HashSet具有良好的存取和查找性能。还有一点要说的是,感觉很多人认为
2017-08-19 17:16:11
217
原创 Java集合归纳-<一>集合概述
前言Java的集合类可以说是我们编程中最常用的一种容器了,用来存放多个对象的引用,实现常用的数据结构,如队列、栈等。常用的集合类有Set、List、Map、Queue(Java5增加),但是大多数程序员还是会习惯性的忽略Queue,而只认为集合对象为前三者。划分按照接口的派生来说,集合可以划分为两大类。Collection接口派生:List、SetMap接口派生:Map但是按照我的理解,还可
2017-08-19 12:21:44
291
原创 一个Redis配置文件redis.conf上的小问题:JedisDataException
问题来源昨天因为电脑上的VMware不小心升级版本后,虚拟机莫名其妙运行不起来了,折腾了一晚上没搞定,索性重装了VMware和ubuntu虚拟机,自然的,原来安装在虚拟机上的一切服务都没有了。 在安装完Redis后,发现之前本地windows主机连接虚拟机Redis的Jedis测试代码连不上了,于是乎开始解决问题,其实第一次安装的时候就遇到过,不过太久远忘记了,这次正好记录下来,省的下次还要百度解
2017-08-03 18:41:26
862
原创 Java NIO学习(三)Selector监听事件+NIO服务器实例
书接上文上一篇博客说了一下SelectionKey这个对象的一些常用属性,为这一篇文章的NIO服务器实例算是做了一些铺垫。不过在展示服务端实例代码之前,还要说几点细节上的东西。Selector如何选择就绪的通道//这个方法可能会阻塞,直到至少有一个已注册的事件发生,或者当一个或者更多的事件发生时selector.select();NIO明明是非阻塞的IO,为何会阻塞这是第一章Java NIO学习(
2017-07-30 16:38:11
3216
原创 Java NIO学习(二)SelectionKey详解
书接上文上一篇博客中的结尾讲到将Channel注册在某个Selector的管辖范围之下:channel.register(selector, SelectionKey.OP_ACCEPT);由这个register()方法的第二个参数SelectionKey.OP_ACCEPT,我们引出关于SelectionKey的讨论。常量OP_ACCEPT是SelectionKey中一个重要属性Interest
2017-07-30 11:02:19
16801
3
原创 Java NIO学习(一)NIO相关概念
Netty 与NIONetty在各种应用场合听过无数次了,对它的了解也仅局限于知道Netty是一个NIO的框架,可以用于开发分布式的Java程序。网络编程正好也是自己比较薄弱的环节,所以需要好好整理一下散落的知识点,为学习Netty打好基础,所以觉得有必要重新学习一下NIO。BIO、NIO、AIO按照以往的认知,NIO是Java4以后才出现的一种非阻塞式IO,这是与之前存在的BIO(Blocking
2017-07-28 13:59:10
1320
原创 Spring+Dubbo+Zookeeper框架搭建–<三>服务注册示例
SOA一个基本的面向服务编程(soa)的分布式项目需要provider和consumer,也就是最基本的服务提供方和服务消费方,其中provider还可以细分为Interface和IService的实现关系进一步在业务上细分服务。本实例就不细分provider了,为了方便理解仅做最基本的provider和consumer划分。注:本实例的一切注入方式均为注解扫描注入方式。服务提供者Provider
2017-07-23 13:37:38
644
原创 Spring+Dubbo+Zookeeper框架搭建--<二>Dubbo-admin安装
书接上文1、同样的,首先下载dubbo-admin安装压缩包 http://dubbo.io/Download-zh.htm 下载 dubbo-admin-2.5.3.war,解压之后: 2、修改 META-INF/dubbo.properties文件dubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.admin.root.passw
2017-07-23 13:12:34
393
原创 Spring+Dubbo+Zookeeper框架搭建--<一>Zookeeper安装
前言DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架。 以上是阿里巴巴官网对于DUUBO的定义,就几天使用Dubbo的初步认识来看,dubbo的意义主要在于以下几点:分布式 可由多个服务器发布服务,业务组件调取服务的请求分散发出,类似于服务器集群的概念。服务 将系统的服务分组件剥离,面向服务编程。举个例子就是现在正在开发
2017-07-23 13:04:29
351
转载 JVM垃圾回收机制
范围:要回收哪些区域在JVM五种内存模型中,有三个是不需要进行垃圾回收的:程序计数器、JVM栈、本地方法栈。因为它们的生命周期是和线程同步的,随着线程的销毁,它们占用的内存会自动释放,所以只有方法区和堆需要进行GC。前提:如何判断对象已死所有的垃圾收集算法都面临同一个问题,那就是找出应用程序不可到达的内存块,将其释放,这里面得不可到达主要是指应用程序已经没有内存块的引用了, 在Java中,某
2017-07-18 20:59:27
252
转载 JVM内存模型
内存模型JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。JVM内存模型如下图所示: 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 由于Java 虚拟
2017-07-18 20:46:52
427
转载 类的加载机制
ClassLoaderJava程序并不是一个原生的可执行文件,而是由许多独立的类文件组成,每一个文件对应一个Java类。此外,这些类文件并非立即全部装入内存的,而是根据程序需要装入内存。ClassLoader专门负责类文件装入到内存。 数组类的 Class 对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建。数组类的类加载器由 Class.getClassLoader() 返回,该
2017-07-18 20:21:14
238
转载 JVM概述
JVM是什么JVM全称是Java Virtual Machine(Java虚拟机)。它之所以被称之为是“虚拟”的,就是因为它仅仅是由一个规范来定义的抽象计算机。我们平时经常使用的Sun HotSpot虚拟机只是其中一个具体的实现(另外还有BEA JRockit、IBM J9等等虚拟机)。 JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java
2017-07-18 20:16:10
411
原创 CountDownLatch解析和应用示例
前言在日常处理线程同步问题的时候我们经常联想到的可能有下面几种办法: 1.synchronized关键字 2.Java5引入的java.util.concurrent.locks包的显示锁 3.CountDownLatch今天要说的CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有
2017-07-17 17:58:34
367
原创 磨刀不误砍柴工-Windows下MySQL日志查看
缘起近日在研究MyBatis的缓存机制,作为前置条件,自然要了解一些JDBC的缓存机制,比如PreparedStatement就是JDBC缓存的一个体现,将预编译的SQL语句缓存在服务端数据库中,当然这是后话。 想要直观的看到PreparedStatement预编译的动作自然想到日志,毕竟日志分级就是为了记录所有服务端的操作信息。习惯了在Linux服务器下查看各种日志信息,现在想在家里的windo
2017-07-13 13:28:12
1205
原创 Nexus搭建Maven私服
由于最近需要在家练习一些之前spring框架集成相关的技术,为了方便管理jar包,自然考虑用maven项目来做。 但是不知道是网络原因还是怎样,setting.xml文件配置的服务器镜像地址更新jar包都异常缓慢,所以索性考虑在本机上搭建一个maven私服,现记载整个搭建流程方便未来回顾。环境需要: 1.jdk 2.Myeclipse/Eclipse 3.Maven会用到这篇攻略的话,上面3
2017-07-13 10:44:06
317
原创 第一篇博客
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-07-12 21:52:59
174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人