下面的类计算并缓存了一个总和,并且在另一个类中打印这个总和
class Cache{
static {
initializeIfNecessary();
}
private static int sum;
public static int getSum(){
initializeIfNecessary();
return sum;
}
private static boolean initialized = false;
private static synchronized void initializeIfNecessary(){
if(!initialized){
for(int i=0; i < 100; i++ )
sum+=i;
initialized = true;
}
}
}
pubic class Client {
pubilc static void main(String[] args){
System.out.println(Cache.getSum());
}
}
程序是一个典型的半开循环,应该打印出1到99的整数总和,即4950,但程序运行打印的为9900,是预期值的两倍。
程序在确保sum在使用之前就已经初始化这个问题上,遇到了麻烦。程序结合了惰性初始化和积极初始化,还使用上了同步,以确保缓存在多线程环境下也能工作,但程序无法完成预期的工作。
程序输出打印是控制标志initialized 的问题。qq上一个朋友问的一本书里的问题,我也找到那本书了,是惰性初始化(static初始化)的问题,控制标志在static完成初始化后又重新被构造器赋值为false,初始化总和值的方法被执行了两次。
posted @
2007-09-06 09:58 皇马啸西风 阅读(212) |
评论 (1) |
编辑 收藏
大概一年以前参与到一个大型信息管理软件系统的维护工作中,这个系统是B/S结构,主要负责某省煤炭资源运销管理,应用在了铁路这个渠道管理上,我们的主要的系统维护工作重心在铁路管理维护上,另外还负责一些网站信息发布管理功能的维护。
这个管理系统有自己的一套网络体系,因为我并没有参与其中的网络体系的搭建与后期的维护工作,只是大概的了解一些:
1.网络体系的结构为树状拓扑结构,主要依据该公司的组织机构建立,该公司组织机构分为总公司一级,分公司一级,县级公司一级以及直接负责煤炭运销具体的工作的公司一级。网络体系以此而建,也分为四级网络。
2.使用一套c/s体系的软件,完成基础数据的收集,并定时上报到县级公司或者直属的分公司,然后将数据汇总分析后通过这套软件提交,统一储存到总公司数据库服务器。
3.根据该行业的业务,每年全省的煤炭运量,特别是通过铁路渠道的运量,在年初通过签订的全年合同决定,该年的业务也以此运量为准。
这套软件成型与2002年,在当时的条件限制下这是一套最为有效的软件工作体系了,但也有其缺陷:
1. 尽管基础数据收集大都已经为通过电子称量系统实现自动数据提取,但在上报过程中,仍有可能对数据进行篡改,软件为此专门增设了一个子功能系统,但使用情况不容乐观,收效甚微。
2. 数据统一存储在总公司数据库服务器中,方便管理,在最初的设计中,数据库没有设计负载分流以及镜像备份的等处理,随着系统的使用,数据量的增加,数据库负载增大,软件反应速度越来越慢。
这个缺陷在今年年初运量提报和每个月初的各个分公司的运量提报中尤为明显,数据库出现多次当机情况,处理过多次,但收效不明显,在使用高峰期需要注意数据库的使用情况。
这个系统的网络部分就写这么多吧,毕竟不太熟悉,还是掺杂了软件的非网络部分,:-)。下一篇开始写这个软件的web架构部分,主要是mvc框架和dao框架部分。
posted @
2007-09-06 09:57 皇马啸西风 阅读(235) |
评论 (0) |
编辑 收藏
网站:
JavaEye 作者:
liuwei1981
发表时间: 2007-09-04 15:36 此文章来自于
http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接:
http://liuwei1981.javaeye.com/blog/120263
The Architect (dedicated non-programming technical decision maker and problem solver for business):
架构师(专用非编程技术决策者,业务问题解决者)
- Has outdated programming knowledge and experience, loss of touch with modern development approaches and practices. 过时的编程知识和经验,对现代的软件开发方式和实践缺乏关注。
- Don’t program and don’t know much about evolving system internals, but makes key technical decisions. Often has completely irrelevant and unreal picture what is happening with the system. 不进行软件开发,对系统内部知之甚少,但却要做出关键的技术决策。对系统经常有完全无关和虚幻的映像(不太会翻译这句)。
- Tends to complex, premature and generic solutions when the system is still in infancy and nothing is clear. Applies latest modern buzzword technologies as SOA, MDA, SaaS, Software Factories, etc. which look so beautiful in technical magazines, conferences and CV, but cause unnecessary headache for developers. 当系统仍处于起始阶段,都还不明晰的时候,常会做出复杂的,不成熟仅仅通用的决策。使用在技术杂志、技术大会和CV上看起来如此美妙的现代最新的口号,诸如SOA,MDA,SaaS,Software Factories等等,只是给开发人员带来不必要的头痛。
- Plays role of the middleman introducing complexity in coordination and project responsibilities. Represents software team in interactions with business customers reducing communication value for the rest of the team and impacting idea flow. 以中间人的角色,引入复杂的协调和项目的责任。代表开发组与客户进行交流,屏蔽了其他成员的发言权和开发思想上的交流。(翻译时候意思懂了,但就是表达不出来)
- Reduces quality of decisions, which become limited to one perspective; decision making starts lacking diversity, independence and decentralization, which are essential attributes of collective intelligence. 决定仅仅局限在某个角度 ,降低了决策的质量;最初的决定缺乏多样性,独立性和向下兼容,这些都是集体决策的本质。
- Creates tension with developers who experience mismatch between grand design and reality. Often continues pushing design decisions until the system becomes overly complex, difficult to change and becomes completely unusable. 在缺乏大型设计和实现经验的开发者之间制造紧张氛围。不断的做出决定,系统变得过度复杂,难于改变,和应用。
- Secures job and justifies high salary - becomes authoritative center for solving business problems without much input from the team. 有稳定的工作和高薪,成为解决业务问题的权威,但却从未融入到团队当中。
- Causes loss of sense of ownership, motivation and accountability in developers by detaching them from the key architecture decisions. 把开发人员排除在关键架构决策之外,让他们缺乏主动性和责任感。
- Concentrates project knowledge and the big picture in one head, limiting (and sometimes preventing) complete understanding for others. 只精通工程知识和大局一面,对其他方面几乎一无所知。
- Contributes to creation of specialized IT verticals that hurt relations with the business. 擅长在纵向专门的IT方面建立联系,但同时却切断了业务上的关联。
|
《 10条你不需要软件架构师的理由(Top 10 reasons why you don’t need Softwa)(转) 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
推荐相关文章:
学习英语,可能每个人都有自己喜欢的方法!
老爸的情书中英对照,爆笑
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
文章来源:
http://liuwei1981.javaeye.com/blog/120263
posted @
2007-09-04 15:36 皇马啸西风 阅读(396) |
评论 (1) |
编辑 收藏
网站:
JavaEye 作者:
liuwei1981
发表时间: 2007-09-03 18:30 此文章来自于
http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接:
http://liuwei1981.javaeye.com/blog/119882
完成该系统后,所完成的后期维护工作中,最大的以部分就是数据统计查询分析功能的完善了。
系统软件框架提供了一套报表生成系统来完成数据统计查询的功能。这条报表生成系统可以生成excel和pdf两种格式的统计报表。
这个系统使用报表的流程大致为:
1.每个功能都提供一系列的报表,在软件中这些报表以二维字符串数组的数据格式保存,每个字符串数组对象包括该报表的唯一键值,报表名称,报表条件提供页面以及生成该报表的具体的Java类。
2.选择需要生成的报表,系统将该报表的唯一键值传入统一的报表控制类,首先是跳转到生成该报表的条件页面,按照功能划分报表的主要原因就是每个功能的报表条件一致,可以使用统一的控制类。
3.提交条件后,统一的报表控制类会调用该报表的生成类,这些类需要继承统一的接口,提供了一个统一的方法,返回数据类型为Vector集合的对象,这个Vector对象容器数据对象要求为:
两个Vector对象,一个为表头Vector,一个为表体Vector,这两个Vector对象中存储的数据为字符串数组对象。
在具体应用中,只要将数据填充到字符串数组中,再依次放入Vector中,报表框架会生成报表。
这个框架的一个确定就是只能接受字符串数组对象,如果生成excel格式的报表,无法根据生成的报表进行计算,必须手动的将数据调整为数字型。
|
《 总结一下维护了一年的一个软件系统的软件体系(六) 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
文章来源:
http://liuwei1981.javaeye.com/blog/119882
posted @
2007-09-03 18:30 皇马啸西风 阅读(166) |
评论 (0) |
编辑 收藏
网站:
JavaEye 作者:
liuwei1981
发表时间: 2007-08-27 10:06 此文章来自于
http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接:
http://liuwei1981.javaeye.com/blog/117096
大家喝的是啤酒,这时你入座了,给自己倒了杯可乐,这叫低配置;给自己倒了杯啤酒,这叫标准配置;给自己倒了杯茶水,这茶的颜色还跟啤酒一样,这叫木马;给自己倒了杯可乐,还滴了几滴醋,不仅颜色跟啤酒一样,不冒热气还有泡泡,这叫超级木马;你同事给你到了杯白酒,这叫推荐配置。
人到齐了,酒席开始了。你现一个人喝了一小口,这叫单元测试;你跟旁边的人说哥们咱们随意,这叫交叉测试;但是他说不行,这杯要干了,这叫压力测试;于是你说那就大家一起来吧,这叫内部测试;这时候boss向全场举杯,这叫公开测试。
菜过三巡,你就不跟他们客气了,你向对面的人敬酒,这叫p2p;他回敬你,你又再敬他,这叫TCP;你向一桌人挨个敬酒,这叫令牌环;你说只要是兄弟就干了这杯,这叫广播。
有一个人过来向这卓敬酒,你说不行,你先过了我这关,这叫防火墙。你的小弟们过来敬你酒,这叫一对多。
酒过三巡后,你也该活动活动了,你一桌一桌的走,这叫轮询;你突然看见某一桌的漂亮mm,走了过去,这叫优先级;你去了坐下来就不打算走了,这叫死循环;你的老大举杯邀你过去,你只好走过去,这叫激活事件。
你向一桌敬酒,他们说:“不行,不行,我们都喝白的。”于是你也喝白的。这叫本地化;你向boss敬酒,可是boss被围起来,你只能站在外围,这叫排队;你终于到了内围,小心翼翼的向前一步,这叫访问临界区;你拍照boss的肩膀说哥们咱们再喝已被,这叫越界。 |
《 程序员是如何喝酒的?(转) 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
文章来源:
http://liuwei1981.javaeye.com/blog/117096
posted @
2007-08-27 10:06 皇马啸西风 阅读(135) |
评论 (0) |
编辑 收藏
网站:
JavaEye 作者:
liuwei1981
发表时间: 2007-08-27 09:18 此文章来自于
http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接:
http://liuwei1981.javaeye.com/blog/117084
一个程序员对自己的未来很迷茫,于是去问上帝:“万能的上帝啊,请你告诉我,我的未来会怎样?”
上帝说:“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的。”
于是他去问Lippman,Lippman说:“程序员的未来就是驾驭程序员。”
这个程序员对这个未来不满意,于是他又去问上帝:“万能的上帝呀,请你告诉我,我的未来会怎样?”
上帝说:我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的。”
于是他去问Gates,Gates说:“程序员的未来就是榨取程序员。”
这个程序员对这个未来不满意,于是他又去问上帝:“万能的上帝啊,请你告诉我,我的未来会怎样?”
上帝说:“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的。”
于是他去问侯捷。
侯捷说:“程序员的未来就是诱惑程序员。”
这个程序员对这个未来不满意,于是又去问上帝:“万能的上帝啊,请你告诉我,我的未来会怎样?”
上帝摇摇头:“唉,我的孩子,你还是别当程序员了。” |
《 程序员的未来(转) 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
文章来源:
http://liuwei1981.javaeye.com/blog/117084
posted @
2007-08-27 09:18 皇马啸西风 阅读(178) |
评论 (0) |
编辑 收藏
网站:
JavaEye 作者:
liuwei1981
发表时间: 2007-08-23 09:45 此文章来自于
http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接:
http://liuwei1981.javaeye.com/blog/115574
该系统软件框架对sql操作进行了封装,并提供了一批API帮助客户程序员更为简便的进行数据库操作。这些api包括:
-
统一的DbConnection管理,客户程序员只需将要执行的sql语句作为参数传入,api会将结果列表以二维字符串数组的形式返回。api提供特殊的方法,例如翻页处理等都提供了相应的处理。
-
按照功能划分dao操作类。类的编写有自身设计的一套规范。首先该功能的dao操作类设计为接口,然后按照数据库的不同特殊处理实现该接口。例如:接口为TestDAO.java,使用oracle数据库实现该接口,为OraTestDAO.java,使用sqlserver数据库实现该接口,为SqlTestDAO.java。dao操作类直接操作框架对数据库进行操作的DbConnection对象进行业务处理。
-
所有的接口实现的dao操作类在web服务器的一个特殊目录中存在一个xml格式的配置文件。
xml 代码
- <DAOLIST>
- <DAO>
- <NAME>testdaoNAME>
- <CLASSNAME>com.test.dao.OraTestDAOCLASSNAME>
- <DESCRIPTION>测试DESCRIPTION>
- DAO>
- DAOLIST>
-
在web服务器的同时,会同时启动一个线程,读入该xml文件,并读入数据库配置参数文件。与hibernate这个框架相比,这个dao管理只能在web应用中使用。
-
前几篇提到的web层使用的Ctrl控制类,在框架设计中不能直接操作dao操作类,而是存在一个中间层,包括BO类和VOListIter类,编写这两个类都需实现框架提供的接口。bo类主要包括数据库的除获取数据列表以外的所有操作,如录入,修改等,VOListIter类专门为实现数据列表翻页设计,通过该类获取翻页数据列表方法,需要首先声明一个长度为5的Integer类型的数组,DbConnection类的该方法需要这个参数,将该列表的当前页数和最大页数返回。
这个数据库框架还提供了一些方便编写代码的操作,例如拼装sql语句,提供了一个这样的方法:MakeUp类。代码如下:
java 代码
- String sql = " INSERT INTO test_t (testid,testname) "
- + " VALUES (@,'#') ";
-
- String[] key = {
- test.getId(),test.getName()
- };
- sql = MakeUp.makeUp(key, sql);
这个makeUp方法会将sql语句拼装好,@表示数字占位,#表示字符占位。
这个系统的数据库操作管理大致就是这样了,比较简单,总的来说就是对dbconncetion 操作进行了重新封装,方便客户程序员的使用。
|
《 总结一下维护了一年的一个软件系统的软件体系(五) 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
文章来源:
http://liuwei1981.javaeye.com/blog/115574
posted @
2007-08-23 09:45 皇马啸西风 阅读(160) |
评论 (0) |
编辑 收藏
网站:
JavaEye 作者:
liuwei1981
发表时间: 2007-08-22 09:38 此文章来自于
http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接:
http://liuwei1981.javaeye.com/blog/115158
维护的这个软件系统使用了一个比较复杂的系统权限管理系统,原本的设计是将用户对软件的使用权限控制到以最末级的菜单,并根据公司组织机构的设计,上级组织单位可以将自身所获得的权限继续授权到自己的下级公司。
为了授权权限的操作简单话,不然每次都从几百个菜单选项中选择给该用户授权的菜单权限,恐怕这个权限系统管理员就要崩溃了。:-),权限管理系统将权限分为了权限组,权限域,基本权限管理。
权限组和权限域的区别我至今没有太分的清楚,郁闷中····在不多的使用当中(主要是设置测试用户的权限)感觉上这两种权限范围设置是评级的,没有谁是谁的上级的关系,不清楚当初为什么设置成这样,我用的主要是权限域的设置。
给用户授权下权限,前提是已经有相应的权限域设置。
1.权限域设置:权限域需要相应的设置编码,并选择该权限域包括的菜单权限。
2.在设置好权限域后,就可以直接将该权限域授权到系统用户。
权限管理使用了数据库信息管理,现在使用起来比较笨拙,不过由于最初的设置过于复杂,如果使用现在比较统一的xml文件配置,可能使用起来也不是很方便。
每个菜单权限项都有一个自身的权限编码,该系统的菜单全部分为三级,编码规范为:一级菜单编码_二级菜单编码_三级菜单编码。这样,在授权权限的时候可以直接将一级菜单授权,用户相应的也获得该一级菜单下所有功能的使用权。
用户登录成功后系统会将该用户的合法权限值压到一个集合中,放到sessin对象里。
权限的控制在系统的页面和后台控制类都有实现。页面使用了上一篇提到的页面逻辑标签实现控制,在显示该页面之前,控制类使用了个系统框架提供的公共权限控制类将该用户的权限值压到页面值中。
在调用该功能之前,控制类现会判断该用户的权限,有一个通用类,将该功能的权限和当前的用户对象作为参数传入,该类会判断在用户的权限集合中是否包括该权限,以决定是否继续执行该功能流程。
这个系统的权限管理部分就是这么多了,下一篇讲讲这个系统的数据库管理部分。维护的这个软件系统使用了一个比较复杂的系统权限管理系统,原本的设计是将用户对软件的使用权限控制到以最末级的菜单,并根据公司组织机构的设计,上级组织单位可以将自身所获得的权限继续授权到自己的下级公司。
为了授权权限的操作简单话,不然每次都从几百个菜单选项中选择给该用户授权的菜单权限,恐怕这个权限系统管理员就要崩溃了。:-),权限管理系统将权限分为了权限组,权限域,基本权限管理。
权限组和权限域的区别我至今没有太分的清楚,郁闷中····在不多的使用当中(主要是设置测试用户的权限)感觉上这两种权限范围设置是评级的,没有谁是谁的上级的关系,不清楚当初为什么设置成这样,我用的主要是权限域的设置。
给用户授权下权限,前提是已经有相应的权限域设置。
1.权限域设置:权限域需要相应的设置编码,并选择该权限域包括的菜单权限。
2.在设置好权限域后,就可以直接将该权限域授权到系统用户。
权限管理使用了数据库信息管理,现在使用起来比较笨拙,不过由于最初的设置过于复杂,如果使用现在比较统一的xml文件配置,可能使用起来也不是很方便。
每个菜单权限项都有一个自身的权限编码,该系统的菜单全部分为三级,编码规范为:一级菜单编码_二级菜单编码_三级菜单编码。这样,在授权权限的时候可以直接将一级菜单授权,用户相应的也获得该一级菜单下所有功能的使用权。
用户登录成功后系统会将该用户的合法权限值压到一个集合中,放到sessin对象里。
权限的控制在系统的页面和后台控制类都有实现。页面使用了上一篇提到的页面逻辑标签实现控制,在显示该页面之前,控制类使用了个系统框架提供的公共权限控制类将该用户的权限值压到页面值中。
在调用该功能之前,控制类现会判断该用户的权限,有一个通用类,将该功能的权限和当前的用户对象作为参数传入,该类会判断在用户的权限集合中是否包括该权限,以决定是否继续执行该功能流程。
这个系统的权限管理部分就是这么多了,下一篇讲讲这个系统的数据库管理部分。 |
《 总结一下维护了一年的一个软件系统的软件体系(四) 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
文章来源:
http://liuwei1981.javaeye.com/blog/115158
posted @
2007-08-22 09:38 皇马啸西风 阅读(154) |
评论 (0) |
编辑 收藏