12 2010 档案
摘要:敏捷开发之 12条敏捷原则上篇敏捷开发之 4句敏捷宣言中讲了敏捷开发的价值观, 从这些价值观中可以引出下面的12条原则,它们是敏捷实践区别于重型过程的特征所在。在Agile Software Development - Principles,Patterns,and Practices(中文书名: 敏捷软件开发-原则、模式与实践)中对这12条原则分别进行了阐述,这里我就不重复解释书本的内容了,将从我个人的理解去讲解这些原则,希望大家多多补充独到见解。 1。我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意 规划迭代故事时必须按照优先级安排,为客户先提供最有价值的功能。通过频繁
阅读全文
摘要:个体与交互 胜过 过程与工具 可以工作的软件 胜过 面面俱到的文档 客户协作 胜过 合同谈判 响应变化 胜过 遵循计划 这四句价值观用语句表达就是: 自组织团队与客户紧密协作,通过高度迭代式、增量式的软件开发过程响应变化,并在每次迭代结束时交付经过编码与测试的有价值的软件 胜过 与客户确定合同后在初期制定并遵循基于活动的完整计划,在重型过程和工具指导下,通过完成大量文档进行知识传递,最后交付需求
阅读全文
摘要:Scrum是一种灵活的软件管理过程,它可以帮助你驾驭迭代,递增的软件开发过程。这个轻量的过程可以作为包装器,也就是说你可以把Scrum与其它灵活的过程框架组合起来,比如说RUP。RUP(Rational Unified Process,Rational 统一过程),是一种被广泛使用的软件过程框架。它可以很好地迎合你的软件开发过程的需要,还可以容纳其他技术。Scrum是一系列有趣的,用来包装灵活软件项目的项目管理模式。Scrum提供了一种经验方法,它使得团队成员能够独立地,集中地在创造性的环境下工作。它发现了软件工程的社会意义。这一过程是迅速,有适应性,自组织的,它代表了从顺序开发过程以来的重大
阅读全文
摘要:【改变输出swf的尺度,背景颜色或帧频】在"Navigator"窗框里右键你的项目选中"Properties"选中"ActionScript Compiler"在"Additional compiler arguments"里输入你所需要的命令如想改变背景颜色,请输入: -default-background-color 0xffffff【鼠标坐标】mouseX mouseY【检查变量类型并返回布尔值】is【检查变量类型并返回类型】typeof【检查对象类型并返回该对象】as【是数字但不是有效数字问题】var quantity:Number = 15 - "rabbits";trace(
阅读全文
摘要:目前关注了一下osgi,并在网上找了相关代码,最后分析了一下如何用到我们的统一支付,来解决平滑升级的问题,大家可以看一下。 什么是OSGI? OSGi(Open Service Gateway Initiative) OSGi事一个服务平台,提供在多种网络设备上无需重启的动态改变构造的功能 OSGI就像一个容器,往里面按照多个组件(bundle),各个bundle可以热插拔,而且可以访问到彼此 OSGi是一个Java框架,该框架能装载以bundle为单位的资源。Bundle能提供服务或响应处理请求,而他们之间的依赖都是被管理起来的,正如一个bundle能从容器中获得它所需要的管理。每个bun
阅读全文
摘要:一年一度的Ig Nobel prize典礼都都会带来一些非常新颖的观点、发现,这些内容甚至超过了Ig Nobel prizes本身。每位获奖者在做完七个字的总结后,还有机会利用24秒的时间对自己的新观点、新发现进行阐述。这是一个极其绝妙的主意,这对每位获奖者都是一个需要完成的挑战。OSGi是近来业界经常提到的事物,随着Equinox成为Eclipse的顶级项目,Felix被用于Sling和Glassfish V3的容器,以及Spring-Modules的发布。但是,很多人都不熟悉OSGi…而且一直不去了解它,也不在意他人正在循序渐进的了解OSGi。至于我,我不是OSGi的鼓吹者,仅仅是喜欢花些
阅读全文
摘要:不同于导航式容器如ViewStack等容器加载方式,从Flex2开始,Flex标准实现中包含了一种名称叫做ModuleLoader的容器。这个容器可以在需要的时候加载已经预编译过的各种Module模块,而不需要在容器初始化时强制地一次性加载所有容器模块。Module加载是Adobe解决Flex系统应用初始化时较大的下载负载而设计的一种折中方案。在后续的章节中我们会了解到在现实的企业开发中,尤其是大型的系统应用中,Module加载方式和Cairngorm架构的结合,基本上可以解决Flex应用的负载平衡问题。本章将就以下几个方面详细介绍Module加载方式的来龙去脉。1.Module加载方式概览2
阅读全文
摘要:参考应用Moduler方式重构应用Using the ApplicationDomain class加载和卸载模型关于flex的module开发ModuleModule加载是Adobe解决Flex系统应用初始化时较大的下载负载而设计的一种折中方案。Module是为自己项目准备的,如果你的项目编译后大小是1.5MB,那么也许在你使用module把项目合理分割以后大小会是700K+200K+100K+200K+200K+200K。为什么后面的模块体积会变小,就是因为公有的类引用没有重复编译到他们之中了。所以Module是为同一个项目准备的,他们之间有很强的依赖关系,并不是为其他项目提供"包"。Mo
阅读全文
摘要:现在说说Module,这篇教程代码不是最重要的,怎么样合理的使用Module以及注意的问题才是关键,所以建议大家注意下面红色语句。Module,可以将我们的项目按需划分为N个模块,在编译时将项目编译为主文件以及N个module的swf。Module基本上可以分为两种:完整的Module,可以被外部app所使用 -- 会将所有涉及到的引用编译到module中,主文件的体积得到缩减,但是Module本身的体积可能会很大,比如Module和主程序都应用了对象C,那对象C会被编译到主程序以及Module中,这样Module的体积就会很大。关联到主程序的Module -- 比如Module和主程序都应用
阅读全文
摘要:1.FLEX4状态概述 在很多富互联网应用,网页外观的改变基于用户的行为。一个状态就定义了组件的一种表现样式。要想使用状态,你应该首先定义一个默认的状态,然后在此基础上重写或者更改,这样就形成了一系列的其他样式。你可以添加、移除某些子元素,更改CSS或者属性的值,更改触发的事件。下面是一个简单的例子:?xml version="1.0" encoding="utf-8"?s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="l
阅读全文
摘要:APIs、Libs、Components1、as3ebaylibhttp://code.google.com/p/as3ebaylib/2、as3youtubelibhttp://code.google.com/p/as3youtubelib/3、as3flickrlibhttp://code.google.com/p/as3flickrlib/4、Yahoo ASTRA Flash Componentshttp://developer.yahoo.com/flash/astra-flash/5、facebook-as3http://code.google.com/p/facebook-as3
阅读全文
摘要:这段时间整理了一下TDD的一些认识:TDD路线需求(不清晰、不完整)-》设计(不清楚、不完整)-》测试(需求清晰化、设计清晰化)-》实现-》重构不是一开始就写测试,而是一开始分析需求,这个需求往往不清晰也不完整。针对这个需求我们要做大体的设计。然后开始针对某个需求编写测试用例,写测试用例的时候你会发现隐藏在背后的需求,这也是需求清晰化的过程。这样开发人员一开始就可以接触需求,而不是一开始搭框架。针对测试用例编写实现代码,然后适当重构。再继续针对下个需求编写测试,如此往复。这样不但紧紧的抓住需求,保证你的代码都的可测性,最后还留下监护代码质量的测试工程。这就好比造飞机按照当前我们的软件开发方式。
阅读全文
摘要:尽管在传统测试理论中,测试几乎已经伴随了整个开发周期:单元测试、集成测试、系统测试、验收测试。但是,更多的时候我们遇到的情况是:至少在项目开始集成之前,测试是基本不存在的。程序员不愿意在模块完成之后再花时间来写测试代码(事实上,很多程序员连文档都欠奉),而测试人员则不会写测试代码(能写代码的话通常都已经被抓去写代码了)。事实上,即使测试人员愿意写测试代码来完成对代码的单元测试,这样的分工也是不划算的,因为这引入了额外的人与人之间的交流成本。于是我们的测试通常是在集成阶段开始进入的,于是我们不得不在这个时候在来面对可能的模块质量问题、模块设计问题以及其他许多早在那之前就应该已经解决的问题。 这个
阅读全文
摘要:先考虑它是否可以单独到一个类,再考虑使用反射class Stranger { public Stranger(final String name) { this.name = name; } private final String greet(final String hello) { return hello + name; } private String name = "";}public class PrivateTest { public static void main(String args[]) throws Exception { Stranger testObj = ne
阅读全文
摘要:我们谈到的TDD技术主要是从设计的角度谈起,对于测试的全过程进行分析与总结,希望通过本文能对大家有所帮助。测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。本文从开发人员使用的角度,介绍了TDD技术优势、原理、过程、原则、测试技术、Tips 等方面。背景一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦。国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从。最近兴起的一些软件开发过程相关的技术,提供一些比较高效、实用的软件过程开发方法。其中比较基础、关键的一个技术就是
阅读全文
摘要:作为一个有理想、有追求的程序员,你成天被各种名词包围着,你对其中一个叫做敏捷的东西特别感兴趣,因为它特别强调人的作用,这听着都让做程序员的你感到舒服。为了让自己早日敏捷起来,你从众多的敏捷实践中选择了一个叫做测试驱动开发(Test Driven Development,TDD)的作为你的起始点。因为它对你周遭的环境要求是最低的:它不像结对那样,要求其他人和你一起合作;也不像采用Story那样改变你所在团队的做事方式……你所需要做的,只是在你编写业务代码之前,把测试先写好。这完全是一种润物细无声的做法,根本无需告诉你之外的任何人。就在别人忙碌的找bug时,你便开始享受敏捷带给你的快乐了。顺便带来
阅读全文
摘要:MySQL存储过程之事务管理ACID:Atomic、Consistent、Isolated、Durable存储程序提供了一个绝佳的机制来定义、封装和管理事务。1,MySQL的事务支持MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关:Java代码MyISAM:不支持事务,用于只读程序提高性能InnoDB:支持ACID事务、行级锁、并发BerkeleyDB:支持事务隔离级别:隔离级别决定了一个session中的事务可能对另一个session的影响、并发session对数据库的操作、一个session中所见数据的一致性ANSI标准定义了4个隔离级别,MySQL的InnoDB都支
阅读全文
摘要:一、使用Statement而不是PreparedStatement对象JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行. 例如, 假设我使用Employee ID, 使用prepared的方式来执行一个针对Employee表的查询. JDBC驱动会发送一个网络请求到数据解析和优化这个查
阅读全文
摘要:隔离级别(isolation level)l隔离级别定义了事务与事务之间的隔离程度。l隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。lANSI/ISO SQL92标准定义了一些数据库操作的隔离级别:l未提交读(read uncommitted)l提交读(read committed)l重复读(repeatable read)l序列化(serializable)l通过一些现象,可以反映出隔离级别的效果。这些现象有:l更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。l脏读(dirty read):当一个事务
阅读全文
摘要:引言作为多用户应用程序开发人员所面临的最为复杂的领域之一,基于服务器的系统必须处理好锁定策略的影响。如果实现得不好,将导致包括性能问题、死锁以及异常的应用程序行为等各类问题。本文的目的在于列出基本问题、常用策略和模式以及有关使用锁定策略的时机和方法的一般性建议。本文假设开发人员已经掌握所使用的 SQL,因而不会全面介绍使用对象关系(Object Relational,OR)映射工具的复杂细节。回页首事务锁定与会话锁定数据库管理系统在事务范围之内提供锁定机制。采用读取或更新锁可防止应用程序的不一致行为;锁的实际使用取决于开发人员使用的 SQL 语句类型以及在数据库连接中指定的隔离级别。但是,仅仅
阅读全文
摘要:丢失更新的定义:当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其他事务的存在。最后的更新将覆盖由其他事务所做的更新,这将导致数据丢失。典型事务序列是: begin Transaction; select col_value into :var_col_value from tableA where keyid=:keyid; ...... var_col_new_value=var_col_value+1 update tableA set col_value=:var_col_new_value where keyid=:keyid; com
阅读全文
摘要:事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了所使用的锁定行为:数据库在被广大客户所共享访问的操作过程中很可能出现以下几种不确定情况 :1. 更新丢失(Lost update):两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操作因此并发事务并没有被隔离开来2. 脏读取(Dirty Reads):一个事务开始读取了某行数据但是另外一个事务已经更新了此
阅读全文
摘要:Oracle的SelectForUpdate语句可以实现在读取数据后马上锁定相关资源,防止被其他session修改数据的目的。也就是我们常常谈到的“悲观锁定”(现实应用开发中,使用悲观锁定的情况少之又少,也许是因为乐观锁定的实现更加灵活和便捷的缘故)。这个小文儿做一个小小的实验,来看看Select For Update语句实现的行级锁定1.创建实验表table_sfu,并初始化三条数据sec@ora10g create table table_sfu (a number);Table created.sec@ora10g insert into table_sfu values (1);1
阅读全文
摘要:近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql。使用show status like 'table%'检查Table_locks_immediate和Table_locks_waited,发现Table_locks_waited偏大。出问题的表是MyISAM,分析大概是MyISAM的表锁导致。MyISAM适合于读频率远大于写频率这一情况。而我目前的应用可能会出现在某一时段读写频率相当。大致如下:一个客户端发出需要长时间运行的SELECT其他客户端在同一个表上发出INSERT或者UPDATE,这个客户将
阅读全文
摘要:再补充下哈虽然ConcurrentHashMap是线程安全的, 看看下面一段代码:Java代码查看源代码打印01.ConcurrentHashMap map; 02.String getString(String name) { 03.04.String x = map.get(name); 05.06.if (x == null) { 07.08.x = new String(); 09.10....
阅读全文
摘要:正文内容:原作:fanixdecorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在decorator模式中是必须的.decorator定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.为什么使用decorator?我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定
阅读全文
摘要:事务不应该由dao管理,而应该由service管理最重要的是如下四个类DataSource :数据库的Connection连接工厂DataSourceUtils:参与同一个事务的多个dao实际上应该是共享同一个conn的。DataSourceUtils.getConnection(dataSource)取得当前ThreadLocal的conn,如果没有从dataSource创建一个。DataSourceUtils.releaseConnection(conn, dataSource)未必真正关闭连接。DataSourceTransactionManagerTransactionProxyFac
阅读全文
摘要:前一段用到Spring的ApplicationContext接口,查看它提供的方法,打开jar包,看到的信息如下:Java代码publicabstractinterfaceorg.springframework.context.ApplicationContextextends...{publicabstractorg.springframework.context.ApplicationContextgetParent();...}发现interface前有个abstract,怎么还有抽象接口(abstract interface)一说,接口不都是抽象的吗,这样写难道还有什么特殊意义,很是纳
阅读全文
摘要:Spring 的骨骼架构Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图:图 1 .Spring 框架的总体架构图从上图中可以看出 Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。下面也将主要从这三个组件入手分析 Spring。Spring 的设计理念前面介绍了 Spring 的三个核心组件,如果再在它们三个中选出核心的话,那就非 Beans 组件莫属了,为何这样说,其实 Spring 就是面向 Bean 的编程(
阅读全文
摘要:一、前言cjdbc (http://c-jdbc.objectweb.org/) 是一个open source的数据库集群中间件,任何基于jdbc的应用都可以通过它透明地访问数据库集群,它可以进行各个节点之间的数据复制,并且可以实现各个节点的查询负载均衡。通过这样的软件,偶们可以方便的实现RAIDb - Redundant Array of Inexpensive Database 廉价数据库冗余阵列。大型应用随着用户量访问越来越大,增加数据库存储和做好数据库冗余可以增加系统的可靠性和性能。下面利用cjdbc,把两台对等的 Mysql 做 RAIDb,本文假定你已经搭建好两台对等的 Mysql
阅读全文
摘要:Spring是分层的java SE/EE应用一站式的轻量级开源框架,以IOC和AOP为内核,提供了展示层spring mvc和持久层spring jdbc,以及业务层事务管理等众多的企业级应用技术。相关的网站:spring.jactiongroup.netwww.springside.org.cnwww.javaeye.comspring的体系结构spring共有1400个类,其框架按功能分为7个模块。spring核心模块:实现了IOC的功能,将类与类之间的依赖关系从代码中脱离出来,用配置的方式进行依赖描述,其中BeanFactory是核心接口。ApplicationContext模块:核心模
阅读全文