07 2018 档案

摘要:[TOC] 1.从Spring容器的核心谈起 使用过Spring框架进行web开发的应该都知道,Spring的两大核心技术是IOC和AOP。而其中IOC又是AOP的支撑。IOC要求由容器来帮我们自动创建Bean实例并完成依赖注入。IOC容器的代码在实现时肯定不知道要创建哪些Bean,并且这些Bean 阅读全文
posted @ 2018-07-28 10:05 takumiCX 阅读(1982) 评论(0) 推荐(3) 编辑
摘要:1.什么是注解 注解是java1.5引入的新特性,它是嵌入代码中的元数据信息,元数据是解释数据的数据。通俗的说,注解是解释代码的代码。这个定义强调了三点, 1.注解是代码 这意味着注解可以被程序读取并解析。它可以被编译器编译成class文件,也可以被JVM加载进内存在运行时进行解析。JDK中的"@O 阅读全文
posted @ 2018-07-23 21:30 takumiCX 阅读(2087) 评论(0) 推荐(3) 编辑
摘要:[TOC] 1. ReentrantLock简介 jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富 阅读全文
posted @ 2018-07-19 23:11 takumiCX 阅读(101022) 评论(14) 推荐(30) 编辑
摘要:[TOC] 1.LockSupport功能简介 在java并发包下各种同步组件的底层实现中,LockSupport的身影处处可见。JDK中的定义为用来创建锁和其他同步类的线程阻塞原语。 我们可以使用它来阻塞和唤醒线程,功能和wait,notify有些相似,但是LockSupport比起wait,no 阅读全文
posted @ 2018-07-18 12:14 takumiCX 阅读(13397) 评论(3) 推荐(1) 编辑
摘要:[TOC] 1. 从一次项目经历说起 在上家公司做spark的任务调度系统时,碰到过这么一个需求: 1.任务由一个线程执行,同时在执行过程中会创建多个线程执行子任务,子线程在执行子任务时又会创建子线程执行子任务的子任务。整个任务结构就像一棵高度为3的树。 2.每个任务在执行过程中会生成一个任务ID, 阅读全文
posted @ 2018-07-16 22:58 takumiCX 阅读(2341) 评论(1) 推荐(1) 编辑
摘要:[TOC] 1. 从乐观锁和悲观锁谈起 乐观锁和悲观锁是两种不同的解决并发问题的策略。悲观锁策略假定任何一次并发都会发生冲突,所以总是采用最严格的方式来进行并发控制。java中的独占锁(synchronized和重入锁)就是典型悲观锁实现,它只允许线程互斥的访问临界区,也就是阻塞式的同步方式。而乐观 阅读全文
posted @ 2018-07-14 18:58 takumiCX 阅读(3141) 评论(0) 推荐(0) 编辑
摘要:[TOC] 1. 关于synchronized关键字 java中要实现多线程的互斥同步访问,最简单的方式就是使用synchronized关键字。被其修饰的代码,相当于加了独占锁,线程只能互斥的访问,即同一时间只有一个线程能够访问这部分代码,其他线程只能在外等待。那么synchronized是如何做到 阅读全文
posted @ 2018-07-13 21:59 takumiCX 阅读(1187) 评论(0) 推荐(0) 编辑
摘要:[TOC] 1.关于volatile volatile是java语言中的关键字,用来修饰会被多线程访问的共享变量,是JVM提供的轻量级的同步机制,相比同步代码块或者重入锁有更好的性能。它主要有两重语义,一是保证多个线程对共享变量访问的可见性,二防止指令重排序。 2.语义一:内存可见性 2.1 一个例 阅读全文
posted @ 2018-07-12 23:13 takumiCX 阅读(5338) 评论(9) 推荐(2) 编辑
摘要:[TOC] 1. 前言 代理模式可以说是生活中处处可见。比如说在携程上定火车票,携程在这里就起到了一个代理的作用,比起我们在官网上或者直接去柜台订票,携程可以为用户提供更多人性化的选择。再比如代购,我自己的mbp就是委托别人从香港买回来的,那么那个代购人就相当于代理,免去了我来回的车费以及办签证的麻 阅读全文
posted @ 2018-07-09 18:19 takumiCX 阅读(1849) 评论(0) 推荐(1) 编辑
摘要:[TOC] 1. 前言 现实世界中山寨这种行为往往意味着假冒伪劣,备受批判。但是在软件开发中,山寨却又不少可取之处。首先其“成分”和“质量”和原创不相上下;其次相比原创一个东西的时间开销,山寨一个出来总归是省时省力的,毕竟对于计算机,克隆一个对象要比创建一个对象性能好得多(拷贝对象不会执行构造方法) 阅读全文
posted @ 2018-07-08 18:59 takumiCX 阅读(347) 评论(0) 推荐(0) 编辑
摘要:[TOC] 1. 前言 插头转换器我们应该都用过。当我们要使用二插头的电器而身边只有3孔的插座时,一个插头转换器就能解决插头和插座不匹配的问题。如下图所示 插头转换器其实只做了一件事,就是把原本不能使用的三孔插座转换成了能使用的二孔插座。而这也正是我们接下来要讲的适配器模式的本质:把不能被客户端使用 阅读全文
posted @ 2018-07-07 23:12 takumiCX 阅读(701) 评论(0) 推荐(0) 编辑
摘要:[TOC] 1.前言 直接new一个对象是最简单的创建对象的方式,但大量出现在业务代码中会带来至少两个问题。1:创建对象的细节直接暴露在业务代码中,修改实现细节必须修改相关的大量客户端代码。2:直接面向具体类型编程,违反了面向接口编程的原则,系统进行扩展时也不得不进行大量修改。要使得系统具有的良好的 阅读全文
posted @ 2018-07-06 23:28 takumiCX 阅读(1251) 评论(0) 推荐(3) 编辑
摘要:[TOC] 1. 前言 单例模式可以说是最简单也是最常见的设计模式了,有些语言比如scala甚至在语言层面对其进行了支持。单例是指类的实例在全局只有一个。什么时候我们希望类的实例在整个JVM进程中只有一个?比如说线程池:创建开销很大;还有缓存:占用内存空间很多,而且超过一个也不利于维护。还有其他比如 阅读全文
posted @ 2018-07-05 22:10 takumiCX 阅读(2529) 评论(0) 推荐(1) 编辑
摘要:1. 前言 在平时的项目开发中,我们常会碰到这样的需求。整个业务流程可以由若干操作完成,其中某些操作对所有客户都一样,是不变的,而有些操作确需要由客户端决定,是经常会改变的。比如事务操作,流程可以定义为: 1.开启事务 2.对数据库进行操作 3.成功则提交事务否则回滚 在这个事务操作流程中,1和3是 阅读全文
posted @ 2018-07-05 14:55 takumiCX 阅读(409) 评论(0) 推荐(0) 编辑