自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 正确理解Threadlocal类以及内存泄漏问题

2017.8.5更新:tomcat低版本在reload或者stop一个web app时(一个tomcat可以运行多个web app),如果tomcat线程池中的线程中的threadlocalmap持有了由某个web app classloader加载的类,那么该web app classloader是无法被回收的,在tomcat7.0中,引入了ThreadLocalLeakPreventionLis

2017-03-12 21:59:55 1520 3

转载 MySQL联接查询算法(NLJ、BNL、BKA、HashJoin)

一、联接过程介绍为了后面一些测试案例,我们事先创建了两张表,表数据如下:CREATE TABLE t1 (m1 int, n1 char(1));CREATE TABLE t2 (m2 int, n2 char(1));INSERT INTO t1 VALUES(1, 'a'), (2, 'b'), (3, 'c');INSERT INTO t2 VALUES(2, 'b'), (...

2020-01-27 17:06:38 3522 1

转载 BigDecimal 舍入模式(Rounding mode)介绍

原文链接:https://my.oschina.net/sunchp/blog/6709091 RoundingMode介绍package java.math;public enum RoundingMode {    UP(BigDecimal.ROUND_UP),    DOWN(BigDecimal.ROUND_DOWN),    CEILING(BigDecima...

2018-10-29 11:59:16 3687 1

原创 动态代理在mybatis中的应用

mybatis最令人印象深刻的特性恐怕就是interface与mapper的映射了。开发者只需要声明接口,并编写对应在xml中的sql,一个可以提供服务的dao层功能就完成了,竟然不需要编写interface的实现类。这个感觉起来非常神奇也令人疑惑不解的特性正是利用jdk的动态代理技术实现的。事实上,mybatis内部使用了多种动态代理技术,包括jdk自带、javassist、cglib等,这篇文...

2018-05-08 00:08:05 3138 2

转载 Unique Paths

https://segmentfault.com/a/1190000009889212

2018-04-22 15:21:26 267

原创 偏向锁、轻量级锁、重量级锁之间的变迁

对象锁共有四种状态:无锁、偏向锁、轻量级锁、重量级锁,锁竞争程度依次加重。对象锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。自旋是一种获取锁的策略,存在于获取轻量级锁的过程中,不是一种锁,java的对象锁只有上述四种。假设现在有一个对象O,刚刚被新建,处于无锁状态。此时线程A尝试获取对象锁,如果此时jvm已经开启了偏向锁,那么线程A会尝试CAS操作将自己的线程Id...

2018-02-27 11:55:16 902

转载 https单向认证和双向认证

一、HttpHyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。使用TCP端口为:80二、HttpsHyper Text Transfer Protocol over Secure Socke

2017-09-15 16:43:59 485

原创 超清晰的java线程状态机图

http://www.uml-diagrams.org/examples/java-6-thread-state-machine-diagram-example.html

2017-09-10 19:28:54 3780

转载 简析TCP的三次握手与四次分手

原文:http://www.jellythink.com/archives/705TCP是什么?具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI

2017-09-09 15:49:58 333

原创 简明扼要阐述synchronized和lock的区别

简明扼要阐述synchronized和lock的区别

2017-09-04 22:28:41 1908

转载 jvm参数总结

http://blog.csdn.net/csujiangyu/article/details/52071473http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

2017-08-27 19:56:39 305

转载 直接内存DirectBuffer

原文:http://blog.csdn.net/dustin_cds/article/details/50857727直接内存大小设置:http://blog.csdn.net/cloud_ll/article/details/50815671直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存

2017-08-27 17:59:45 1264

转载 转:Leaf——美团点评分布式ID生成系统

好文章 https://tech.meituan.com/MT_Leaf.html

2017-08-26 18:23:22 898

原创 spring bean的生命周期

http://developer.51cto.com/art/201104/255961.htmhttp://www.cnblogs.com/redcool/p/6397398.html

2017-08-25 16:23:24 357

原创 spring bean实现init/destory生命周期方法的三种方式

实现InitializingBean和DisposableBean接口,实现afterPropertiesSet()和destroy()方法使用@PostConstruct和@PreDestroy进行方法注解在xml中用init-method和destroy-method指定init方法和destroy方法。

2017-08-25 15:48:10 534

原创 mysql innodb引擎 sql优化经验总结

sql大概有增删改查四种。 select语句 不要使用 select * ,需要什么字段,查什么字段,这样不仅能降低数据库服务器磁盘I/O压力,也能够降低网络传输I/O消耗。尽量不要在sql中使用join,过多的join会使数据库服务器消耗过多内存进行表关联,并且会加重数据库服务器cpu的负担,另外,如果一个很大的join查询语句被包裹在一个大事务中,而此事务包含其他更新操作,持有了共享锁或者

2017-08-24 15:15:02 544

原创 java集合类总结

集合接口java集合接口被分为了两大组,最基本的接口 java.util.Colllecttion,拥有如下的派生接口:java.util.Set 不重复的集合java.util.SortedSet 有序不重复集合java.util.NavigableSet 有序不重复集合,能够返回视图的能力java.util.Queue 队列java.util.concurrent.BlockingQu

2017-08-23 16:43:41 324

原创 springmvc拦截器工作源码

当一个请求到达后,会调用DispatcherServlet的doDispatch( )方法,在此方法中调用拦截器,调用方法栈如下:doDispatch( )方法源码如下:protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HandlerEx

2017-08-22 15:06:56 1062

转载 签名,验签的理解

一、公钥加密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上

2017-08-20 21:19:08 12899

转载 密码学中的“盐值 Salt”

原文链接:http://www.libuchao.com/2013/07/05/password-salt为什么要在密码里加点“盐”盐(Salt)在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。以上这句话是维基百科上对于 Salt 的定义,但是仅凭这句话还是很难理解

2017-08-20 21:13:49 1068

转载 MySQL索引背后的数据结构及算法原理

innodb主键索引是聚集索引,磁盘中数据文件即是一颗b+ tree,叶子节点中key是主键值,data就是真正的数据行,所以主键索引被称为聚簇索引,因为它和数据是长在一起的b+ tree 内层节点不存储data,只存储key。叶子节点存储key、data以及指向临近叶子节点的指针对于主键索引,叶子节点中key是主键值,data就是真正的数据行对于非主键索引,叶子节点key是索引的值,

2017-08-16 18:25:33 411

转载 如何实现一个简单的rpc框架

一、RPC简介RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。另外,RPC是与语言无关的。    RPC示意图如上图所示,假设Computer1在调用sayHi()方法,对于Comp

2017-08-15 17:52:34 5619

原创 理解spring事务传播机制

参考资料: http://blog.csdn.net/yuanlaishini2010/article/details/45792069 http://www.codeceo.com/article/spring-transactions.html1.spring实现对事务的控制,使用的是代理的技术。通过生成的代理类来捕捉被代理类(也就是我们编写的类)的异常,决定事务的提交或回滚。从某一角度来说

2017-08-13 13:49:04 14440 2

转载 Semaphore的简单理解

Semaphore的概念Semaphore是一个计数器信号量,它维护了一个许可集合,用来控制对一定资源的消费与回收。当线程调用acquire()方法时,如果许可不足,那么线程将block,直到有许可可用。release()方法则会释放一个许可。Semaphore的用法Semaphore提供了两个构造方法:public Semaphore(int permits) { //参数per

2017-08-10 11:30:32 376

原创 CyclicBarrier的简单理解

CyclicBarrier的概念字面翻译为回环栅栏,同CountDownLatch一样,也是concurrent包中提供的多线程之间通信的一种方式。它允许一组线程在等待某个状态后再全部同时执行。它允许一组线程互相等待对方,直到到达一个公共障碍点(barrier point)。它的一个典型应用是一组固定个数的线程需要互相等待,直到全部执行完成后,再继续执行。之所以称为Cyclic,是因为所有等待线程被

2017-08-10 11:11:26 583

原创 CountDownLatch的简单理解

CountDownLatch的概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后

2017-08-10 10:41:49 41589

转载 tomcat源码中用到的设计模式

原文: https://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/概览门面设计模式观察者设计模式命令设计模式责任链模式门面设计模式门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 Serv

2017-08-06 17:45:17 591

原创 tomcat线程池的配置及源码实现

tomcat中线程池的配置是哎server.xml中:<Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads=

2017-08-06 12:08:19 1412

转载 深入理解Java之线程池

原文:http://www.importnew.com/19011.html在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并

2017-08-05 14:58:24 281

原创 谜题4:It's Elementary 初级问题

public class Elementary { public static void main(String[] args) { System.out.println(12345 + 5432l); }}看起来输出66666,结果程序运行起来发现输出的17777。问题在于第二个操作数是long类型的5432,而不是54321。由于1和小写的l非常相似,导致代码阅

2017-08-02 23:37:02 250

原创 谜题3:Long Division 长整除

public class LongDivision { public static void main(String[] args) { final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;

2017-08-02 23:31:01 944

原创 谜题2:Time for a change 找零时刻

public class Change { public static void main(String args[]) { System.out.println(2.00 - 1.10); }}以上结果并不会输出0.9,而输出0.8999999999999999。问题在于 并不是所有的小数都可以用二进制浮点数精确表示,二进制浮点对于货币计算是非常不合适的。解决方法

2017-08-02 23:14:28 250

原创 谜题1:奇偶性

以下为一个判断int类型变量是否为奇数的方法public static boolean isOdd(int i) { return i % 2 == 1;}存在的问题:当i为负奇数时,方法返回的结果错误。对于java中的%运算符,满足以下等式: (a / b) * b + (a % b) == a也就是说,表达式 a%b结果的符号永远与a相同。因此当a为负奇数时,a%2的结果为-1。

2017-08-02 22:46:02 270

原创 关于Integer类和Long类对值的缓存问题

这是个老生常谈的问题了,在此不展开细说,具体细节大家看下jdk源码就可以了。 1. Integer和Long都默认缓存值从-128到127的对象,缓存工作在静态块完成,在类生命周期(loading verify prepare resolving initial using unload)的初始化阶段执行。 2. Integer的缓存上界high可以通过jvm参数-XX:AutoBoxCache

2017-08-01 14:02:44 1661

原创 Timer类jdk文档翻译及源码分析

Timer是进行任务调度的工具类,用来执行任务。Task可以被执行一次,也可以按照一个固定的时间间隔重复执行。每个定时器对象都维护一个single后台线程,它用于顺序执行该定时器对象的所有任务。因此提交给Timer对象的任务应当能够快速执行完。如果一个任务耗时太长,有可能导致后续任务延迟执行,或者导致很多个后续任务积压,并且快速的串行执行完成。当对Timer对象的最后一个引用消失,并且所有未完成的任

2017-07-29 20:49:14 367

转载 Callable和Future

原文: http://blog.csdn.net/ghsau/article/details/7451464接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。        Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功

2017-07-29 15:48:30 299

原创 mysql批量导入数据遇到的问题

最近项目中有一个需求,需要把大概150W条数据导入mysql数据库中,一共六张表,数据最多的表大概有100W条数据。 因为是一次性导入,不会经常使用,因此计划写成一个小程序,使用原生JDBC,打成jar包,放到服务器上运行。第一次写完,用maven打jar包,打出的jar包不包含mysql驱动等第三方jar,并且java -jar 时没有程序入口,需要在pom.xml文件中加入如下plugin:<

2017-07-28 16:41:52 1578

原创 commons pool2 之GenericObjectPool(未完)

commons pool2 的org.apache.commons.pool2.impl包下提供了一个对象池的具体实现GenericObjectPool。类内部使用一个ConcurrentHashmap存储所有的objects:private final Map<IdentityWrapper<T>, PooledObject<T>> allObjects = new Concurr

2017-07-23 22:58:05 597

原创 commons pool2对象池入门

apache commons pool,官方称之为 Generic object pooling component,即通用的对象池组件。 The Apache Commons Pool open source software library provides an object-pooling API and a number of object pool implementations. 既

2017-07-23 20:23:40 343

转载 java数据库连接池实现原理

原文:http://blog.csdn.net/frightingforambition/article/details/25464129 一、为什么在连接数据库时要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。  一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性

2017-07-22 17:52:07 736

空空如也

空空如也

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

TA关注的人

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