- 博客(20)
- 资源 (14)
- 收藏
- 关注
转载 项目经理责任
1、对复杂问题,会去考虑“怎么思考”,再去思考要思考的问题。2、能够从操作层面、细节层面考虑计划的可行性,并主动征求他人意见。3、时刻关注质量,深信质量是决定成败的要素。4、众说纷纭的时候,会选择到现场获得一手资料,独立思考和判断。5、先设想事情最坏的结局是什么,再努力避免无法挽回的错误。6、遇到困难时积极寻找解决问题的方法,而不是找“行不通”的借口。
2013-06-27 20:12:52 575
原创 ORA-03113: 通信通道的文件结束
启动数据报错SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 27 17:40:21 2013Copyright (c) 1982, 2005, Oracle. All rights reserved.已连接到空闲例程。SQL> startup mount;ORACLE 例程已经启动。T
2013-06-27 17:41:04 850
原创 代码问题讨论
最近同事们一直在讨论代码问题:1.代码在经过3人以上的维护,冗余堆砌,重复的复制粘贴随处可见。2.代码分层问题:Service层与Dao层中间基本没有业务处理,Service层直接返回Dao的结果,建议直接在Service层封装SQL语句,系统只需要一个通用Dao的。3.项目以功能分割,导致模块不清晰。4.基础代码混乱,开发人员到处写自己的方法,重用性太少,不便维护。解
2013-06-26 12:03:47 609
原创 网络事故分析
Linux系统下的WEB应用突然无法访问,发现IP也Ping不通,通过其他网段可以访问这台服务器。1.怀疑应用有问题,端口未监听netstat -nutlop 检查端口是监控状态2.怀疑路由有问题1.命令格式:route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Met
2013-06-19 09:48:58 1073
转载 聊聊并发(六)——ConcurrentLinkedQueue的实现原理分析
1. 引言在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环 CAS 的方式来实现,本文让我们一起来研究下 Doug Lea 是如何使用非阻塞的方式来实现线程安全队列 Conc...
2013-06-13 11:09:43 729
转载 聊聊并发(五)——原子操作的实现原理
1. 引言原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在 Intel 处理器和 Java 里是如何实现原子操作的。2. 术语定义术语 英文 解释 缓存行 Cache line 缓存的最小操作单位 比...
2013-06-13 11:08:42 876
转载 聊聊并发(四)——深入分析ConcurrentHashMap
术语定义术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表 hash table 根据设定的哈希函数 H(key) 和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈...
2013-06-13 11:02:45 649
转载 聊聊并发(三)——JAVA线程池的分析和使用
1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。2. 线...
2013-06-13 10:57:57 680
转载 聊聊并发(二)——Java SE1.6中的Synchronized
1 引言在多线程并发编程中 Synchronized 一直是元老级角色,很多人都会称呼它为重量级锁,但是随着 Java SE1.6 对 Synchronized 进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了 Java SE1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义 术语 英...
2013-06-13 10:55:55 675
转载 聊聊并发(一)——深入分析Volatile的实现原理
引言在多线程并发编程中 synchronized 和 Volatile 都扮演着重要的角色,Volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比 synchronized 的开销更小,本文将深入分析在硬件层面上 Inter 处理器是如何实现 Vola...
2013-06-13 10:52:52 750
转载 JVM执行篇:使用HSDIS插件分析JVM代码执行细节
在《Java虚拟机规范》之中,详细描述了虚拟机指令集中每条指令的执行过程、执行前后对操作数栈、对局部变量表的影响等细节。这些细节描述与Sun的早期虚拟机(Sun Classic VM)高度吻合,但随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述产生越来越大的差距,虚拟机规范中的描述逐渐成了虚拟机实现的“概念模型”——即实现只能保证规范描述等效。基于上面的原因,我们分析程...
2013-06-13 10:48:46 735
转载 内存屏障与JVM并发
内存屏障,又称内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制。本文介绍了内存屏障对多线程程序的影响。我们将研究内存屏障与JVM并发机制 的关系,如易变量(volatile)、同步(synchronized)和原子条件式(atomic conditional)。本文假定读者已经充分掌握了相关概念和Java内存模型,不讨论并发互斥、并行机制和原子性。内存屏障用来实现并发编程中称为 可见性(v...
2013-06-13 10:45:59 732
转载 Java 并发核心编程
1、关于java并发自从java创建以来就已经支持并发的理念,如线程和锁。这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发集合类、线程协作摘要、Executors。开发者通过这些基础的接
2013-06-04 14:08:10 790
转载 深入理解Java内存模型(七)——总结
处理器内存模型顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。根据对不同类型读 / 写操作组合的执行顺序的放松,可以把常见处理器的内存模型划分为下面...
2013-06-04 12:55:30 594
转载 深入理解Java内存模型(二)——重排序
数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量。 读后写 a = b;b = 1; 读一个变量之后,...
2013-06-04 10:13:44 668
转载 深入理解Java内存模型(六)——final
与前面介绍的锁和 volatile 相比较,对 final 域的读和写更像是普通的变量访问。对于 final 域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序。下面,我们通过一些示...
2013-06-04 10:04:59 654
转载 深入理解Java内存模型(五)——锁
锁的释放 - 获取建立的 happens before 关系锁是 java 并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放 - 获取的示例代码:class MonitorExample { int a = 0; public synchronized void writer() { //1 ...
2013-06-04 10:03:49 700
转载 深入理解Java内存模型(四)——volatile
volatile 的特性当我们声明共享变量为 volatile 后,对这个变量的读 / 写将会很特别。理解 volatile 特性的一个好方法是:把对 volatile 变量的单个读 / 写,看成是使用同一个监视器锁对这些单个读 / 写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { volatile ...
2013-06-04 10:02:35 597
转载 深入理解Java内存模型(三)——顺序一致性
数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java 内存模型规范对数据竞争的定义如下:在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM 对正确同步的多线程程序的内存一致性做...
2013-06-04 10:00:57 654
转载 深入理解Java内存模型(一)——基础
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写 - 读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必...
2013-06-04 09:56:22 702
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人