技术分享
文章平均质量分 87
__技术分享__
这个作者很懒,什么都没留下…
展开
-
透彻的掌握 Spring 中@transactional 的使用
事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Tr转载 2017-08-16 11:09:01 · 901 阅读 · 0 评论 -
《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论。MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis内部实现的一个特性转载 2017-03-14 23:08:11 · 191 阅读 · 0 评论 -
《深入理解mybatis原理》 MyBatis的二级缓存的设计原理
MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将全面分析MyBatis的二级缓存的设计原理。1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键转载 2017-03-14 23:07:01 · 251 阅读 · 0 评论 -
《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能。本文的目的则是向读者详细介绍MyBatis的一级缓存,深入源码,解析MyBatis一级缓存的实现原理,并且针对一级缓存的特点提出了在实际使用过程中应该注意的事项。转载 2017-03-14 23:01:12 · 230 阅读 · 0 评论 -
全面分析 Spring 的编程式事务管理及声明式事务管理
关于本教程本教程将深切讲授 Spring 庞杂而丁壮夜的事务治理功用,包括编程式事务和声明式事务。经由进程对本教程的进修,您将可以理解 Spring 事务治理的实质,并无邪运用之。先决前提本教程假定您已掌控了 Java 根蒂根抵常识,并对 Spring 有一定意见。您还需求具有根抵的事务治理的常识,好比:事务的界说,隔离级其他概念,等等。本文将直接行使这些概念而不做具体正文转载 2017-03-14 18:48:26 · 324 阅读 · 0 评论 -
每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正转载 2017-03-14 14:24:58 · 213 阅读 · 0 评论 -
编程中的命名设计那点事
在我开始设计系统的时候,我会花去很多时间去设计命名,因为好的命名和好的设计是分不开的。In the beginning was the Word, and the Word was with God, and the Word was God太初有道。道与神同在,道就是神。 (约翰福音第一章,第一节)在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但转载 2017-03-14 13:50:17 · 221 阅读 · 0 评论 -
如何读懂并写出装逼的函数式代码
今天在微博上看到了 有人分享了下面的这段函数式代码,我把代码贴到下面,不过我对原来的代码略有改动,对于函数式的版本,咋一看,的确令人非常费解,仔细看一下,你可能就晕掉了,似乎完全就是天书,看上去非常装逼,哈哈。不过,我感觉解析那段函数式的代码可能会一个比较有趣过程,而且,我以前写过一篇《函数式编程》的入门式的文章,正好可以用这个例子,再升华一下原来的那篇文章,顺便可以向大家更好的介绍很多基础知识,转载 2017-03-14 11:45:14 · 241 阅读 · 0 评论 -
非阻塞算法思想在关系数据库应用程序开发中的使用
非阻塞算法的关键思想就是CAS,CAS是compare and set的缩写,也常被称为lock-free或者wait-free,通过把compare和set两个操作原子化,使得不需要使用锁,但是能够解决并发中的资源争用问题。由于CAS常常是一个回退算法+死循环,所以又被称为spin-lock。由于CAS没有使用锁,线程持续执行,又称为非阻塞算法(non-blocking)。术语不统一,但是都差不转载 2017-03-14 09:57:49 · 181 阅读 · 0 评论 -
多版本并发控制(MVCC)在分布式系统中的应用
问题最近项目中遇到了一个分布式系统的并发控制问题。该问题可以抽象为:某分布式系统由一个数据中心D和若干业务处理中心L1,L2 … Ln组成;D本质上是一个key-value存储,它对外提供基于HTTP协议的CRUD操作接口。L的业务逻辑可以抽象为下面3个步骤:read: 根据keySet {k1, … kn}从D获取keyValueSet {k1:v1, … kn:vn}do: 根转载 2017-03-14 09:41:28 · 254 阅读 · 0 评论 -
性能调优攻略
关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈转载 2017-03-13 19:37:21 · 178 阅读 · 0 评论 -
由12306.CN谈谈网站性能技术
转自http://coolshell.cn12306.cn网站挂了,被全国人民骂了。我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西)业务任何技术都离不开业转载 2017-03-13 18:17:23 · 381 阅读 · 0 评论 -
IOC/DIP其实是一种管理思想
关于IoC的的概念提出来已经很多年了,其被用于一种面象对像的设计。我在这里再简单的回顾一下这个概念。我先谈技术,再说管理。话说,我们有一个开关要控制一个灯的开和关这两个动作,最常见也是最没有技术含量的实现会是这个样子:然后,有一天,我们发现需要对灯泡扩展一下,于是我们做了个抽象类:但是,如果有一天,我们发现这个开关可能还要控制别的不单单是灯泡的东西,我们就发转载 2017-03-13 14:48:25 · 658 阅读 · 0 评论 -
[Java基础要义] Java语言中Object对象的hashCode()取值的底层算法是怎样实现的?
Java语言中,Object对象有个特殊的方法:hashcode(), hashcode()表示的是JVM虚拟机为这个Object对象分配的一个int类型的数值,JVM会使用对象的hashcode值来提高对HashMap、Hashtable哈希表存取对象的使用效率。 关于Object对象的hashCode()返回值,网上对它就是一个简单的描述:“JVM根据某种策略生成的”,那转载 2017-03-14 23:10:15 · 1769 阅读 · 0 评论 -
如何细粒度地控制你的MyBatis二级缓存(mybatis-enhanced-cache插件实现)
前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能。本文就是从问题入手,一步步分析现存的MyBatis的二级缓存的不足之处,探讨一点可以改进的地方,并且对不足之处开发一个插件进行弥补。本文如下组织结构:一个关于MyBatis的二级缓存的实际问题当前MyBatis二级缓转载 2017-03-14 23:16:00 · 595 阅读 · 0 评论 -
[Java基础要义] HashMap的设计原理和实现分析
HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。 本文主要从源码角度来解析HashMap的设计思路,并且详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题,并且在文中贯穿着一些关于HashMap常见问题的讨论。 读完本文,你会了解到:转载 2017-03-14 23:16:22 · 221 阅读 · 0 评论 -
高性能场景下,Map家族的优化使用建议
1. HashMap 在JDK 7 与 JDK8 下的差别顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础。1.1 获取key的HashCode并二次加工因为对原Key的hashCode质量没信心,怕会存在大量冲突,HashMap进行了二次加工。JDK7的做法:h ^= (h >>> 20) ^ (h >>> 1转载 2017-07-24 12:53:45 · 598 阅读 · 0 评论 -
性能优化:Trove集合库
本文转自http://mccxj.github.io/blog/20130602_introduce-to-trove.html1 初见Trove昨天在Startup News上看到一篇文章:优化技巧分享:把内存消耗降低至原来的1/20。里边提到了一个案例,Java应用中如何降低内存消耗,总结了他的优化过程:开始时,存放1.3M个Person对象,消耗堆空间1.5G转载 2017-07-20 20:34:30 · 930 阅读 · 0 评论 -
《Spring设计思想》AOP设计基本原理
目录(?)[+]0、前言spring 提供了AOP(Aspect Oriented Programming) 的支持, 那么,什么是AOP呢?本文将通过一个另外一个角度来诠释AOP的概念,帮助你更好地理解和使用Spring AOP。读完本文,你将了解到:1. Java程序运行在JVM中的特征2. Java程序的执行流【了解AOP、转载 2017-03-16 18:00:37 · 356 阅读 · 0 评论 -
[Java基础要义] HashMap的设计原理和实现分析
HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。 本文主要从源码角度来解析HashMap的设计思路,并且详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题,并且在文中贯穿着一些关于HashMap常见问题的讨论。 读完本文,你会了解到:转载 2017-03-16 17:49:23 · 243 阅读 · 0 评论 -
Java 8系列之重新认识HashMap 前利 ·2016-06-24 11:58
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口j转载 2017-03-16 16:03:35 · 426 阅读 · 0 评论 -
为什么一般hashtable的桶数会取一个素数
为什么一般hashtable的桶数会取一个素数 设有一个哈希函数H( c ) = c % N;当N取一个合数时,最简单的例子是取2^n,比如说取2^3=8,这时候H( 11100(二进制) ) = H( 28 ) = 4H( 10100(二进制) ) = H( 20 )= 4这时候c的二进制第4位(从右向左数)就”失效”了,也就是说,无论第c的4位取什么值,转载 2017-03-16 16:03:00 · 327 阅读 · 0 评论 -
《Spring设计思想》AOP实现原理(基于JDK和基于CGLIB)
版权声明: 转自http://blog.csdn.net/luanlouis/article/details/51155821目录(?)[-]前言Spring内部创建代理对象的过程Spring AOP的核心---ProxyFactoryBean基于JDK面向接口的动态代理JdkDynamicAopProxy生成代理对象基于Cglib子类继承方式的动态代理CglibAop转载 2017-03-16 14:24:22 · 310 阅读 · 0 评论 -
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象: class字节码文件是根据JVM虚拟机规范中规转载 2017-03-15 23:28:07 · 223 阅读 · 0 评论 -
Java虚拟机原理图解
共10篇博文《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程一、Java语言的跨平台性的含义 Java语言之所以说它是跨平台的、可以在当前绝大部分的操作系统平台下运行,是因为Java语言的运行环境是在Java虚拟机中。 Java虚拟机消除了各个平台之间的差异...2016-01-23 19:17 4169《Java虚拟机原理图解》4.J转载 2017-03-15 23:00:55 · 444 阅读 · 0 评论 -
java常量池概念
在class文件中,“常量池”是最复杂也最值得关注的内容。 Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名; 字段的名称和描述符; 方法和名称和描述符。 在C语言中,如果转载 2017-03-15 18:38:16 · 300 阅读 · 0 评论 -
《Java虚拟机原理图解》4.JVM机器指令集
0. 前言 Java虚拟机和真实的计算机一样,运行的都是二进制的机器码;而我们将.java 源代码编译成.class 文件,class文件便是Java虚拟机能够认识的二进制机器码,Java能够识别class文件中的信息和机器指令,进而执行这些机器指令。那么,Java虚拟机是如何运行这些二进制的机器码的呢? 本文将通过一个非常简单的例子,带你感受一下Java虚拟机运行机器码的过程转载 2017-03-15 11:30:23 · 501 阅读 · 0 评论 -
[Java基础要义]HashMap、LinkedHashMap元素遍历机制探讨
Map作为键值对Entry的的容器,对其内部 键值对Entry 的遍历总归是要有一个顺序的。 本文重点讨论HashMap及其子类LinkedHashMap的遍历机制,总结出两者的特点和适用情况。 CSDN-2014博客之星投票啦CSDN-2014博客之星 评选开始啦,如果您觉得我的文章对您有所帮助,请您点击左边栏的图片投我一票,您的支持是我分享知识的强原创 2017-03-14 23:20:18 · 375 阅读 · 0 评论 -
缓存更新的套路
看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这转载 2017-03-13 14:13:48 · 199 阅读 · 0 评论 -
Java内存模型
java并发采用的是共享内存模型,线程之间的通信对程序员来说是透明的,内存可见性问题很容易困扰着java程序员,今天我们就来揭开java内存模型的神秘面纱。在揭开面纱之前,我们需要认识几个基础概念:内存屏障(memory Barriers),指令重排序,happens-before规则,as-if-serial语义。什么是 Memory Barrier(内存屏障)?内存转载 2017-03-22 15:19:27 · 340 阅读 · 0 评论 -
jvm 总体梳理
转自http://www.importnew.comjvm体系总体分四大块:类的加载机制jvm内存结构GC算法 垃圾回收GC分析 命令调优当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点击右键下载了放大查看。类的加载机制主要关注点:什么是类的加载类的生命周转载 2017-03-22 15:10:44 · 340 阅读 · 0 评论 -
设计模式(Design Patterns)——可复用面向对象软件的基础
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每转载 2017-02-04 15:26:43 · 489 阅读 · 0 评论 -
第十四篇 浅谈千万级PV/IP规模高性能高并发网站架构
说明:此篇文章转自老男孩 文章架构简图: 高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储)。如:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了转载 2015-03-20 10:38:16 · 730 阅读 · 0 评论 -
第十三篇 在使用spring AOP中, Service中使用service出现的异常
Transaction has been rolled back because it has been marked as rollback 框架采用的是spring管理声明式事务,这几天业务开发时遇到了点麻烦,记录下备忘。 场景:在Service类中使用子事务(saveponit)时,当子事务抛出异常后,此异常处理掉不继续往外抛,spring在提交主事务时会抛出org.sprin原创 2013-10-06 18:32:03 · 2164 阅读 · 0 评论 -
第二篇 Web应用URL伪静态化
作为一个程序员,我们对action访问路径非常敏感,但是在开发或者在使用其它系统的时候,发现这些系统中的URL地址是静态的,并不会显示出真正的URL路径,对于刚开始跨入程序员这个领域的人,可能会感觉很苦恼,因为这样就不能根据URL去找到对应的ACTION了,片面的说这只是对一些程序带来的问题,但是对于工作两年程序员来说,影响并不但是,我们先先简单的了解一下使用Url重写能给你网站带来哪些好处:原创 2013-05-15 16:59:47 · 748 阅读 · 0 评论 -
第十二篇 Spring Web Flow 2简化页面流的开发,结合Spring MVC更俊,Spirng Security 3添加安全机制
闲来无事,看看Spring这个生态系统中的各个模块挺不错,简化了很多事情,本文参考Spring Web Flow项目中的booking-mvc这个sample进行了仔细学习,很有收获,该sample主要讲解了Spirng Web Flow的一些核心概念,以及与spring mvc,spring security的组合使用,功力大大增强。 还是典型的3层模型,dao,service,c转载 2013-05-23 18:12:22 · 1220 阅读 · 0 评论 -
第十一篇 RMI远程方法调用之Java项目实例
上一篇我们简单的介绍了一下RMI。这篇文章中我们针对JAVA做一个RMI的Java项目实例,供大家参考。创建远程方法调用的5个步骤:1、创建一个Java项目2、定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。3、定义一个实现该接口的类。4、编写服务器程序代码。5、创建一个客户程序与服务器进行RMI调用。6、启动Regi原创 2013-05-21 17:46:03 · 843 阅读 · 0 评论 -
第十章 RMI远程方法调用图解
因为昨天笔者写了一天的代码,太忙了,所以昨天没有发表文章。对于WebService,hessian,HttpInvoker大家并不陌生,都属于远程调用的技术,今天主要介绍一下RMI的远程方法调用。我们先介绍一下RMI是什么吧。 RMI(即Remote Method Invoke 远程方法调用)。远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算原创 2013-05-21 16:18:11 · 830 阅读 · 0 评论 -
第八篇 Hibernate之9种查询方式
Hibernate总的来说共有四种查询方式:HQL、QBC、QBE和SQL四种。但是细分可以有如下几种:一、HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多。条件查询、分页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象。其它的,包括一些查询函数(count(),sum()等)、查询原创 2013-05-17 13:42:26 · 749 阅读 · 0 评论 -
第九篇 sping深入学习之ContextLoaderListener与ContextLoaderServlet
在之前发表过的文章中【第四篇 常用开源框架的核心类介绍】提到过Spring之ApplicationContext——的核心类ContextLoaderListener和ContextLoaderServlet,今天在这篇文章中,我们详细了解一下CntextLoaderListener和ContextLoaderServlet。 Spring的三个核心类是BeanFactory,Aplic原创 2013-05-17 17:19:40 · 1405 阅读 · 0 评论