- 浏览: 155218 次
- 性别:
- 来自: 杭州
最新评论
文章列表
一、并发问题的产生
多线程/进程同时操作(读/写)同一数据
二、并发问题的种类
丢失更新(lost update)
第一类更新丢失(回滚丢失): 当2个事务更新相同的数据源,如果第一个事务被提交,而另外一个事务却被撤销,那 ...
- 2012-08-23 00:13
- 浏览 697
- 评论(0)
1.软件构建即编程,主要包括编码与调试、详细设计、规划构建、单元测试、集成、集成测试。构建是软件开发的核心活动,主要精力集中之处,产物是源代码。
2.软件的隐喻——建筑
3.三思而后行:前期准备(设计蓝图和建筑许可证在软件业的等价物,包括问题/产品定义、需求分析、架构)——目的:尽早发现并处理问题,识别并降低风险
3.1 前期准备的重要性:类比
在一个被污染了的环境中,水虱在受到核沾染的水中游泳,鲫鱼体内积聚了滴滴涕,而沙丁鱼生活的水域又遭受了石油污染,那么,不幸的海鸥由于处在食物链的最后一环,因此,它吃的不仅仅是沙丁鱼体内的石油,还有鲜鱼体内的滴滴涕和水虱体内的核废料。在程序设计中,如 ...
- 2012-05-01 15:24
- 浏览 705
- 评论(0)
桥接模式:将抽象部分与它的实现部分分离,使得二者可以独立地变化。(说实话,这个很难理解!!!)
抽象部分:继承关系里的抽象类,一般位于上层,平台无关
实现部分:继承关系里的实现类,一般位于底层,平台相关、实现细节
还是不理解,看实例讲解吧!
比如对一个操作系统来说,平台无关的是高层代码,属于抽象部分,而底层Bootloader、驱动程序则属于实现部分,是平台相关的。这里假设该操作系统具有良好的可移植性,即遵循DIP原则。
图1:可以移植的操作系统模型
对一个操作系统只要遵循这个模型,那么它就具备非常高的移植性。我们来看如何将这个操作系统轻松的移植到不同的硬件平台上去,假设需要移植 ...
- 2012-03-26 23:12
- 浏览 803
- 评论(0)
代理——控制对主题的访问,有时控制主题的创建,完全代替主题,或者什么都不做,只是简单转发
装饰者——只添加新功能,不做其他控制
从使用者的角度看,代理一般不改变对象行为,装饰肯定会增加对象行为。
代理:
装饰者:
- 2012-03-25 01:36
- 浏览 678
- 评论(0)
装饰者和被装饰者实现了同一个接口,给被装饰者增加功能。即装饰者和被装饰者一定是在同一继承体系的。
适配器和被适配者不实现同一接口,适配器将被适配者转换成客户适用的接口暴露给客户使用。
装饰者:
适配器:
- 2012-03-25 01:25
- 浏览 592
- 评论(0)
一、状态模式实现:
1.每个动作一个方法
2.每个状态一个类
二、状态模式和策略模式的区别:
状态模式——状态频繁的发生变化
策略模式——策略在制定后,一般不变
状态:
策略:
- 2012-03-25 01:22
- 浏览 404
- 评论(0)
今天又复习了一遍命令模式
命令模式是指,将“请求”封装成命令对象。命令对象是通过封装接收者和绑定一组动作来封装请求的。
通过命令模式,将动作的请求者和动作的执行者进行解耦。即请求的调用者只接收并处理命令对象,但并不知道命令对象所封装的特定接收者。
command模式的结构图:
即,客户使用命令接收者(Receiver)来创建命令对象(ConcreteCommand),并将命令对象交给调用者(Invoker),执行调用者的相应动作,触发命令执行(execute),最终由命令对象调用接收者的action。
命令模式的参与者:
• Command
声明执行操作的接口。• Co ...
- 2012-03-21 00:04
- 浏览 719
- 评论(0)
什么是单件?
单件就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。——GOF
单件模式简单吗?
简单,的确简单,因为只有一个类。
单件不简单!
其实单件并不见得简单,而且还有点小复杂。其复杂度正是为了保证单件所要达到“仅有一个实例”的宏伟目标而引起的。
当然在一般情况下,单件是简单的。但是在考虑了懒加载、并发、反射、序列化、子类化等诸多因素后,为了保证只有一个实例,复杂度就大大提高了。
下面就从这些方面一一来看如何保证单件只有一个实例,然后看看是不是并不像想象的简单。
1.So easy!饿汉
很简单,直接访问静态域,为防修改,定义成final的。当然构造函数必须 ...
- 2012-03-20 00:59
- 浏览 590
- 评论(0)
简单工厂:
提供一个方法创建单个对象(方法内部往往包含对参数的判断来创建具体的对象),供外部对象使用——组合
工厂方法:
是一个特殊的模板方法,由子类创建具体的对象,供父类使用——继承
抽象工厂:
提供一组方法创建对象家族,供外部对象使用——组合
PS:简单工厂可以看成是简单的抽象工厂,只创建一个对象的抽象工厂
- 2012-03-17 02:32
- 浏览 596
- 评论(0)
系统设计的本质
•系统设计的本质是寻找隐藏于应用背后抽象
•需求和用例不会表述或提及这些抽象,它们太过专注细节以至于不能表达底层抽象的一般性
如何抽象
•抽象需要根据需求的全局来展开
•不能只按个别用例来展开
•抽象就是归纳、总结,并提炼需求的共同逻辑
关于数据库
•数据库是实现细节!应该尽可能的推迟考虑数据库。有太多的应用程序之所以和数据库绑定在一起而无法分离,就是因为一开始设计时就把数据库考虑在内了。请记住抽象的定义:“本质部分的放大,无关紧要部分的去除。”在项目的分析设计阶段数据库就是无关紧要的,它只不过是一项用来存储和访问数据的技术而已!
面向对象的 ...
- 2012-03-14 00:43
- 浏览 517
- 评论(0)
Command模式
Command模式的3种用法Active object模式
是对Command的应用
是实现多线程的基础技术
Active Object 并发模式在 Java 中的应用
http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/index.html模板方法与策略模式
为什么说组合由于继承 ...
- 2012-03-14 00:39
- 浏览 611
- 评论(0)
Ubuntu11.10下编译 OpenJDK7
http://blog.csdn.net/yhmhappy2006/article/details/7281710基本垃圾收集算法
标记-清除(Mark-Sweep)
效率问题
内存碎片
适用于老年代复制(Copying)
解决碎片问题
可用内存缩小(一半)
存活率高时,复制效率低
用于新生代标记-整理(Mark-Compact)
适用于老年代
老年代存活率高,不适合复制算法垃圾收集器
新生代垃圾收集器-基于复制
Serial
单线程(暂停用户线程)
复制
Client模式默认ParNew
多线程并行(暂停用户线 ...
- 2012-03-13 23:41
- 浏览 570
- 评论(0)
线上系统出现问题时,需要记载系统当前运行状况,总结一下,大概需要关注以下几个方面:
1.负载:——top命令
在linux上,执行top 等命令,关注load, Memory, CPU 等系统概况,以及关注CPU和memory 占用较多的进程。
使用top -H, 并按 shift+p 对CPU进行排序,找到当前占用CPU最多的线程。(top -u bpm -H),-H 按线程显示,否则按进程显示
使用 ps -T <pid> |wc -l 找到当前运行的java 进程的线程数。
2.Thread dump——jstack
kill -3 <pid>
jst ...
- 2012-03-08 17:40
- 浏览 686
- 评论(0)
文章:
1.Thread Dump分析:http://blog.csdn.net/wanyanxgf/article/details/6944987
2.jstack和线程dump分析:http://jameswxx.iteye.com/blog/1041173
3.
threaddump
:http://blog.sina.com.cn/s/blog_53b6edca0100gm69.html
插件:
Lockness:http://lockness.plugin.free.fr/home.php
- 2012-03-08 17:18
- 浏览 682
- 评论(0)
eclipse启动参数优化
-Xms512m
-Xmx512m
-Xmn128m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-XX:+DisableExplicitGC
-Xnoclassgc
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=85
-Xverify:none
- 2012-02-29 00:13
- 浏览 575
- 评论(0)