刷新Reload你的properties配置文件
Apache Commons Configuration是一个操作配置文件的工具包,它也支持动态的刷新重载Reload配置文件,包括xml和property文件。通过FileChangedReloadingStrategy刷新策略来支持动态的重载属性配置文件。
- public class DefaultRealTimeXMLConfiger {
- private static Log logger = LogFactory.getLog(DefaultRealTimeXMLConfiger.class);
- private String fileName;
- private long reloadPeriod;
- private XMLConfiguration config;
- public void init()
- {
- String filePath = GlobalConfigerImpl.getConfDir()+"/"+fileName;
- logger.debug("will config with XML file["+filePath+"]");
- File file = new File(filePath);
- if (!file.exists() || !file.isFile()) {
- logger.error(" can't find file[" + filePath + "]");
- throw new IllegalArgumentException("config error! can't find file[" + filePath + "]");
- }
- this.init(file);
- }
- public void init(File file) {
- try {
- config = new XMLConfiguration(file);
- FileChangedReloadingStrategy fs = new FileChangedReloadingStrategy();
- fs.setConfiguration(config);
- if(this.reloadPeriod>0)
- {
- fs.setRefreshDelay(this.reloadPeriod);
- }
- config.setReloadingStrategy(fs);
- } catch (ConfigurationException e) {
- logger.error("error! configer error["+file.getPath()+"]");
- logger.error(e);
- e.printStackTrace();
- }
- }
- public Object getProperty(String name) {
- Object s = this.config.getProperty(name);
- return s;
- }
- public String getString(String name) {
- Object s = this.config.getProperty(name);
- String result = null;
- if (s != null)
- result = (String) s;
- return result;
- }
- public String[] getStringArray(String name) {
- String[] target = this.config.getStringArray(name);
- return target;
- }
- /**
- * @return Returns the fileName.
- */
- public String getFileName() {
- return fileName;
- }
- /**
- * @param fileName The fileName to set.
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- /**
- * @return Returns the reloadPeriod.
- */
- public long getReloadPeriod() {
- return reloadPeriod;
- }
- /**
- * @param reloadPeriod The reloadPeriod to set.
- */
- public void setReloadPeriod(long reloadPeriod) {
- this.reloadPeriod = reloadPeriod;
- }
- }
苹果就像一家大型创业公司,成功产品的关键是小团队
本文原载 Sachin’s Posterous,作者曾在苹果公司工作过。
iPhone 上我最喜欢并且使用最多的应用是苹果的「Remote」,它让我可以遥控 iTunes ,后者通过我家里的 Airport Express 无线基站将音乐传送到客厅的立体声音响。不过,为什么这个应用已经有 8 个月没有更新了呢?
Gizmodo.com 写道
没错,按时间来说「Remote」这个应用确实该更新了。不过,它到目前仍然没有更新的原因是:写这个软件的人现在正忙于其他的事情。没错!是这个「人」,而不是这个「团队」。(他是我的一位非常好的朋友。)
苹果没有为他们生产的每个产品都建立一支很庞大的团队。相反,他们雇佣非常少的人,但这些人都非常聪明,他们可以在不同的项目里工作,并且可以按自己的意愿四处活动。
今天,你可能还在做 Remote 应用的开发,明天,你可能就被召集去做另一个需要你帮助的项目的工作。
Mac OS 和 iOS 团队的工程师们,经常根据产品的发布周期循环,以及下一步最紧急的任务,而在在这两个项目之间来回切换。
即便 Final Cut Pro 团队的成员,他们有时也会被叫去做其他专业应用开发的工作,
如果其他专业软件很需要帮助来及时推出产品。
苹果公司的工程师,他们不能假设自己永远只会在一个项目里工作。而在苹果的团队,他们的人数永远不会增长到「实际需要」的那个上限。
同样,创业公司也是因为保持「瘦小」才能快速成长。好的创业公司,总是拥有小型的团队,能快速建立产品,并根据需要随时做出调整。当你在创业公司工作的时候,你不仅要对一个软件的某一部分负责:你必须要去做任何需要你关注的事情的全部工作。
或许这就是微软的问题:他们认为自己可以用人海战术,放更多的人到项目中去就能解决更多问题。他们组建一支非常庞大的团队去开发产品,并且这么大的团队就需要很多管理人员。在软件开发型企业,我们需要的最多不过是「产品经理」就已足够。
淘宝系统的数据量及Hadoop架构
近日,由中科院计算所主办的“Hadoop 中国2010云计算大会”在北京召开。淘宝网作为国内最大的Hadoop应用商之一赞助与参与了这次会议。下面是ppt的一个节选:
淘宝网目前有会员2亿左右,日均UV高达4000万,日交易量高达10亿元,每天产生大量的数据,所以部署了一系列不同规模的Hadoop集群。淘宝生产所使用的Hadoop集群为目前国内规模最大的Hadoo集群之一。在会议前一天,这个集群的规模是
1.总容量为9.3PB,利用率77.09%。
2.共有1100台机器。
3.每天处理约18000道hadoop作业
4. 用户数474人,用户组38个
5.约18000道作业/天,扫描数据:约500TB/天用户数474人,用户组38个
然而就在这数天内,淘宝由于数据的快速增长,已经扩容至1300机器的规模,总容量达到14.1PB.
Hibernate执行更新sql和hql
String sql = "update Supplier set name = :newName where name = :name";
Query query = session.createSQLQuery(sql);
query.setString("name","Supplier Name 1");
query.setString("newName","s1");
int rowCount = query.executeUpdate();
System.out.println("Rows affected: " + rowCount);
String hql = "delete from Product where name = :name";
Query query = session.createQuery(hql);
query.setString("name","Product 1");
int rowCount = query.executeUpdate();
System.out.println("Rows affected: " + rowCount);
一些鲜为人知的编程事实
我的程序员经历让我明白了一些关于软件开发的事情。下面是一些在编程中可能会让人感到诧异的事情:
- 一个程序员用了大约只用了10%-20%的时间来编码,而且大多数程序员,无论他的水平如何,其平均每天只有10-12行的代码最终会进入最终的软件产品中。这是因为,优秀的程序员会花费90%的时间来思考、调查、研究最佳的设计。而糟糕的程序员则会花费90%的时间来调试代码,并随意地改动代码并尝试让代码工作起来。
“A great lathe operator commands several times the wage of an average lathe operator, but a great writer of software code is worth 10,000 times the price of an average software writer.” –Bill Gates
“一个优秀的车工其工资是一个普通车工的好几倍,但是一个优秀程序员写出来的代码比一个普通程序员要值钱一万倍。——比尔盖茨”
- 一个好的程序员比一个普通的程序员多十倍的生产率。而一个优秀的程序员的生产率则比普通程序员多20-100倍。这并不是夸张(自从上世纪60年代的研究一直表明这是一个事实)。一个糟糕的程序员并不只是没有产出的——他们并不仅是完成不不工作,而且还会制造出大量的让别人头痛并要去解决的麻烦。
- 优秀的程序员花少量的时间写代码——那些代码都会出现在最终的产品中。那些花大量的时间写代码的程序员其实是很懒惰、很无知,或是很自大的,以至于不能使用已经存在了的解决方案来解决已有的问题。优秀的程序员精通于对通用的模式的识别和重用。好的程序员并不害怕持续地重构/重写自己的代码,直到达到最理想的方案。糟糕的程序员的代码基本上都缺少概念一致性,代码冗长,缺少层次和模式,所以,也就很难被重构。所以,重写他们的代码要比重构他们的代码要容易得多。
- 软件和其它一切事物一样,都遵循着一致性规则。持续得更改只会让软件变成一潭烂泥,其破坏了原始设计的概念一致性。软件产品变成泥沼是不可避免的事情,但是因为程序员不考虑软件概念一致性而导致软件产品更为快速地成为泥沼,这种速度快得可能 会在软件产品还没有完成时,软件产品已经变得没有价值。设计概念一致性的失败通常都会导致软件项目的失败(而第二大导致软件项目失败的原因则是发布的软件并不是用户想要的)。软件变成烂泥的速度正在呈指数级下降,太多的项目在被完结前都面临着激增的时间和成本。
- 一个 2004 研究报告 指出,大多数的软件项目 (51%) 都会在关键环节出问题。而15%的项目则是完全失败,当然,这比1994年有了很大的进步,当时完全失败的项目是是31%。
- 虽然,几乎所有的软件产品都有些开发团队,但其并不是民主的。通常,只有一个人负责设计,而剩下的人去实现细节。
- 编程是一个辛苦的工作。其是一个巨烈的脑力劳动。好的程序员24×7地在思考他们的工作,他们一般都在在洗澡和梦中编写软件中最重要的代码。因为最重要的工作只能在键盘之外完成,软件项目不可能因为加班或是加人来加快进度。
文章来源:http://dotmac.rationalmind.net/2010/08/some-lesser-known-truths-about-programming/


