- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 spring-session简介、使用及实现原理
一:spring-session 介绍 1.简介 session一直都是我们做集群时需要解决的一个难题,过去我们可以从serlvet容器上解决,比如开源servlet容器-tomcat提供的tomcat-redis-session-manager、memcached-session-manager。 或者通过nginx之类的负载均衡做ip_hash,路
2017-03-16 16:45:04
84081
1
原创 内存模型笔记
问题:未正确同步代码块 对于两段理应整体互斥执行的代码块,没有做正确同步。问题2:编译器 或者 CPU处理器 对指令的优化,导致指令重排序 编译器和处理器为了提升执行性能,可能会对指令代码进行优化,比如重排序、前向替换。注:不同的编译器、处理器的优化手段也并不相同。以上两个问题在多线程同时 对 同一个共享变量做读写操作时,可能会导致一些令人奇怪的问题。为了解决这个
2017-03-13 18:23:58
696
原创 第三章:服务设计原则
1.简介 1)标准化服务合约原则 服务合约原则指的是为服务建立标准化服务合约,通过标准化服务合约来规范限定我们的服务设计(逻辑依赖于合约,技术依赖于合约),从而抑制了服务在未来时间的演化。比如说服务的逻辑修改,服务的技术改变。 读者也许会疑问抑制了服务的演化究竟有什么好处?我们可以从思考问题的角度出发: 1.服务是否能随便变更服务的功能?(逻辑) 2.服务的功能变更、技术变
2016-08-05 13:18:38
4408
原创 第1章:服务化介绍 和 快速入门
第1章:服务化介绍 和 快速入门 1.简介 当我们使用java语言来编写代码时,通常是以面向对象的视角来把现实中的事物抽象到java程序中的类对象来表现,类对象里封装了该对象特有的属性和行为,这类编程方式能让我们更好的把现实中的事物转化为计算机程序来表示。那为何还要存在面向服务呢? 面向对象是一种细粒度的把现实事物转化为计算机程序,在这个转换过程中会引入许多的设计模式
2016-06-12 16:52:45
4702
原创 SOA服务化 目录
IT信息的规划: 规范化:应该具有自身的IT规范,研发规范,大家做事有一致性的指导基础。这样才能使整个企业的IT在不杂乱中长远发展,易维护(也意味着减少维护成本) 平台化:企业的IT应该沉淀出一套符合自身的IT体系,IT资源,比如IT划分为各类部门(技术架构,业务架构,研发,数据库,系统维护),部门各司其职,互相协作。 工程化:工程化是指要借助前面所有的技术和管理手段,最终达到
2016-06-08 18:02:33
2003
原创 线程池(ThreadPoolExecutor JDK1.7)
平常我们经常都会使用到线程池,但是有没考虑过为什么需要使用线程池呢?下面我列举一下问题,大家可以思考一下 1.当前服务器的硬件环境是多少核的CPU,它和线程的关系又是什么? 2.jvm能创建多少个线程? 3.多线程主要解决什么问题? 4.你使用线程池的目的是什么? 以上几个问题都是帮助你更好的使用java的线程(还可以衍生更多的小问题,如:jvm维护线程的消
2016-05-08 15:17:37
7890
9
转载 OpenJDK 7的HotSpot VM目录结构(转)
转自:http://hllvm.group.iteye.com/group/topic/26998 ├─agent Serviceability Agent的实现 ├─make 用来build出HotSpot的各种配置文件 ├─src
2016-01-08 10:54:37
551
原创 FutureTask源码分析(JDK 1.7)
FutureTask只实现RunnableFuture接口: 该接口继承了java.lang.Runnable和Future接口,也就是继承了这两个接口的特性。 1.可以不必直接继承Thread来生成子类,只要实现run方法,且把实例传入到Thread构造函数,Thread就可以执行该实例的run方法了( Thread(Runnable) )。 2.可以让任务独立执行,
2015-12-30 15:13:20
3105
1
原创 ReentrantReadWriteLock源码分析(JDK 1.7)
ReentrantReadWriteLock是ReadWriteLock接口的具体实现类。ReadWriteLock描述: ReadWriteLock维护了一组相对应的锁。只读锁和写锁。只要没有写操作,那么只读锁可以同时被多个线程所持有(并发访问共享数据)。写锁是独占锁,同一时刻只允许一个线程持有。所有的ReadWriteLock实现类一定要保证writeLock操作的内存同步效果。如果一个线程成
2015-12-29 14:01:09
1716
转载 JVM可支持的最大线程数(转)
摘自:http://sesame.iteye.com/blog/622670工作中碰到过这个问题好几次了,觉得有必要总结一下,所以有了这篇文章,这篇文章分为三个部分:认识问题、分析问题、解决问题。一、认识问题: 首先我们通过下面这个 测试程序 来认识这个问题: 运行的环境 (有必要说明一下,不同环境会有不同的结果):32位 Windows XP,Sun JDK 1.6.0_18, eclipse
2015-12-27 14:19:44
1002
原创 ReentrantLock源码分析(JDK 1.7)
eentrantLock是一个可重入的互斥锁(独占锁),它和隐式锁(使用Synchronized修饰的方法)一样有着相同的功能和语义。但是ReentrantLock还扩展了一些特别功能。ReentrantLock属于最后一个成功lock的线程,且在该线程未释放(unlock)之前。 成功获取lock分为下面两种情况 1.在当前没有任何其他线程拥有锁(lock过且未unlock)情况下,一个线程调
2015-12-22 22:28:58
1293
原创 AQS源码分析(AbstractQueuedSynchronizer)
前言:最近在学习AQS源码,学习过程中也查找过很多资料,但是大都只是翻译了源码的英文意思,并没有对一些难点做出分析和对AQS的队列结构进行讲解。所以我打算写下这篇文章,希望能帮助到有需要的人。 下面我说下我学习AQS源码的过程。如果文章有错误的地方,还望指出。谢谢1.AQS介绍 AQS是为实现依赖于先进先出 (FIFO) 等待队列 的阻塞锁和相关同步器(信号量、事件,等等
2015-11-27 14:38:41
5323
原创 LockSupport源码分析(JDK 1.7)
LockSupport是用来创建锁和其他同步类的基本线程阻塞基本体(primitives)。通过调用LockSupport的park方法可以申请一个许可,如果当前许可可用的话,那么则立即返回,否则则阻塞等待许可。直到另外一个线程调用unpark方法对被阻塞的线程的许可进行释放。(默认许可阻塞)park方法还支持Blocker对象参数,在调用park方法对当前线程进行阻塞时候,可以把Blocker对象
2015-11-24 17:59:16
1956
2
原创 9.Subject(用户安全操作门面)
Subject几乎代理了所有有关用户的Security的操作。如:验证、授权、session管理..,它也可以说是用户安全相关安全操作的门面。通常我们可以通过SecurityUtils.getSubject()来获取一个Subject。 我们知道在基于WEB的应用中,shiro在生成Session后,然后把SessionID保存在客户端浏览器的cookie value中。当请求再次过来时,根据c
2015-09-12 19:51:04
3826
原创 8.Session(Shiro会话)
Session是个状态性的数据上下文,可以理解为每个用户都有一个特定数据库,该数据库存储着每个用户自己的数据,在shiro里,它是和Subject绑定在一起的,通常用户通过Subject.getSession来获取使用。它在系统内会存活一段时间为用户提供客户端浏览器和应用服务器通讯的一些功能。以下是一些关于Session的使用场景。 1.用户登陆成功后,应用服务器产生个Session,且返回该S
2015-09-09 10:27:25
6719
2
原创 7.SessionManager(session生命周期管理)
SessionManager负责管理shiro自己封装的session的生命周期。 为什么shiro要自己封装session? 1.可以为任意应用提供session支持,不依赖于底层容器 2.简单扩容session管理容器,可以实现任何数据源(redis,ehcache)来管理session,而不必担心jvm内存溢出 1.SessionManagerpublic interface Sess
2015-09-07 15:27:13
22410
原创 6.Authorizer(授权、访问控制)
Authorizer主要是执行授权操作,即访问资源的控制。在shiro里,authorizer通常不直接使用,而是配置在SecurityManager里,由SecurityManager委托调用。 AuthorizingRealm和ModularRealmAuthorizer 前面讲过一个AuthorizingRealm,它也实现了Authorizer的接口。 AuthorizingRealm
2015-09-07 12:38:14
2206
原创 5.Authenticator(登录验证器)
Authenticator在shiro中是主要负责验证用户登录,它通常和一组Realm来协调、交互验证用户登录。一般情况下我们不会直接使用Authenticator。而是交由SecurityManager来委托使用。 1.Authenticatorpublic interface Authenticator { //根据用户输入的AuthenticationToken(账号密码)然后去和
2015-09-06 23:37:31
9607
原创 4.Realm(数据处理,交互)
上一章我们讲完了CacheManager,我们这一章讲的是Realm. Realm是一个Security组件,它主要职责是通过各种手段(JDBC、hibernate、FILE IO..)从数据库(关系数据库、NOSQL、文件..)中访问应用程序的用户的验证信息(账户密码),授权信息(资源路径)。然后根据这些信息来操作用户的登陆验证操作,和访问资源文件的授权操作。 一般不直接实现该接口,而是继
2015-09-03 16:54:47
3720
原创 3.CacheManager(shiro缓存管理)
上一章我们讲了SecurityManager,接下来的章节顺序是根据SecurityManager的依次实现类的依赖组件来讲。在讲cacheManager前,我们先了解下Cache。Cache有效的存储临时对象来提升应用的性能。由于Cache不属于安全框架的核心功能,所以shiro本身并没有完全实现Cache机制。Cache接口相当于底层的缓存框架的顶层接口,shiro的一切的缓存操作都与这
2015-09-02 14:33:14
13662
原创 2.详解SecurityManager(shiro权限管理门面)
SecurityManager 接口主要作用 为什么要先说SecurityManager呢?因为我觉得他是shiro的主要入口,几乎所有相关的权限操作,都由他代理了。 1.可以说是所有配置的入口,简化配置,方便使用。 2.一个接口就可以实现,验证的操作(登录、退出)、授权(授权访问指定资源、角色)、Session管理,相当于这些操作的门面(门面模式,也叫外观模式)。从上图我们可以看出Secur
2015-08-31 18:25:19
10365
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人