下面的类计算并缓存了一个总和,并且在另一个类中打印这个总和
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 皇马啸西风 阅读(236) |
评论 (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) |
编辑 收藏