领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Alex Blewitt and Charles Humble 译者 张龙 发布于 2010年5月5日
近日JSR 310 Date与Time API的领导Stephen Colebourne发布了该提案(准备加入到Java语言中)的早期草案。InfoQ有幸在QCon London上采访到了Stephen以深入了解该项目。
InfoQ:我们为何需要一个新的Date与Time API?现有的怎么了?
Stephen:目前API(java.util.Date与java.util.Calendar)的一个主要问题在于他们是可变的。换句话说,请看如下代码:
public class Employee {
private final Date startDate;
public Employee(Date date) {
startDate = date;
}
public Date getDate() {
return startDate;
}
}
即便将startDate标识为final,但返回的java.util.Date实例依然是可变的,这样在外面就可以通过调用setYear()修改雇员的起始日期。此外,还有其他一些小问题,比如年份是从1900开始计算的而月份则从0开始,但关键问题还是可变性。这些问题没法修复。
InfoQ:在JSR 310中对应于java.util.Date的是什么?
Stephen:JSR 310实际上有两个日期概念。第一个是Instant,它大致对应于java.util.Date类,因为它代表了一个确定的时间点,即相对于标准Java纪元(1970年1月1日)的偏移量;但与java.util.Date类不同的是其精确到了纳秒级别。
第二个对应于人类自身的观念,比如LocalDate和LocalTime。他们代表了一般的时区概念,要么是日期(不包含时间),要么是时间(不包含日期),类似于java.sql的表示方式。此外,还有一个MonthDay,它可以存储某人的生日(不包含年份)。每个类都在内部存储正确的数据而不是像java.util.Date那样利用午夜12点来区分日期,利用1970-01-01来表示时间。
InfoQ:你方才提到了时区这个令人苦恼的概念,在这方面,新的API有什么与众不同之处么?
Stephen:首先我们要区分时区(比如Europe/Paris与America/New_York)和距UTC的偏移量(比如+01:00与-08:00)之间的差别。偏移量仅仅是UTC和本地时间之间的差值,而时区则是一个具名的规则集合,描述了偏移量该如何随着时间的变化而变化。比如说,时区会描述一个特定的区域(如纽约)在给定的一个时刻具有某个偏移量,之后具有另一个偏移量(在本地时间线上创建一个间隙或是重叠,如春秋夏时制的变换等)。
有3个级别的类支持这些概念。LocalDateTime无需使用偏移量和时区就能表示时间。OffsetDateTime额外地指定了偏移量而ZonedDateTime则增加了时区规则。过去,很多应用都喜欢使用时区,但他们真正需要的其实只是偏移量而已(使用偏移量更简单、更快且不易出错)。XML Schema规范就是一个典型,它只支持偏移量而不支持时区。JSR 310可以明确表示出这些差别。
最后我想说的是,时区规则会随着时间的推移而不断发生变化。就在千禧年之前,一些国家将时区由国际日界线之后改为之前;此外,夏时制也在不断变化。比如说,美国最近将夏时制的开始时间推后了,这样现在已经进入了美国的夏时制而尚未进入欧洲的夏时制。还有一些国家几乎每年都在变化,比如巴西。JSR 310 API支持时区的版本化,新版的时区数据可以替换掉旧版的。虽然这种替换取决于具体的实现,但组织可以通过将新数据追加到类路径之前以将新规则加到现有的VM中,这样就无需更新整个JVM的安装文件了。
InfoQ:开始与结束时间之间的范围是如何界定的呢?
Stephen:可以使用Duration界定任意两个Instant之间的范围。对于目前使用了开始与结束日期的代码来说,这是最接近的类比。
如前所述,现在有一些具体的概念来表示YearMonth和MonthDay,在适当的时候应该使用这两个类。还有一个Period类来表示任意的时间周期,如“两年、3个月、7天、4小时、50分钟”等。
InfoQ:那么其他日历如何呢?
Stephen:核心日历是ISOChronology,默认情况下使用它来映射时间,就像目前Java API中的GregorianCalendar一样。然而,我们对其他一些年代也提供了支持,如CopticChronology和ThaiBuddhistChronology,如果需要还可以支持更多。
InfoQ:上面一些概念已经出现在了JodaTime中,那么JodaTime与JSR 310是什么关系呢?
Stephen:很多开发者已经开始使用JodaTime了,现在是时候改进Java基类了。最明显的变化就是包名(从org.joda.time变为javax.time),但实际上还有一些细小的差别。
首先,很多Joda Time API都接受null值来表示0时间或是间隔。虽然这么做很诱人,但这会导致大量的小错误(在没有恰当地返回值的情况下)。JSR 310通过抛出null参数异常修复了这个问题。
其次,与计算机相关的时间(Instant)和与人类相关的时间(DateTime)之间的差别变得更明显了。我们使用父接口InstantProvider替换掉之前的ReadableInstant以将任意时间转换为Instant。
第三,现在所有抛出的异常都是CalendricalExcpetion的子类。虽然CalendricalExcpetion是一个RuntimeException,但客户端的库调用都可以捕获这个父类。
InfoQ:最后我想问的是,目前JSR 310的状态如何?
Stephen:JSR 310专家组维护着一个开放的邮件列表,3周前也已经发布了规范的早期草案供大家审查。审查周期截止到3月28日;如果你有任何意见或建议,请直接发给dev@jsr-310.dev.java.net,或是在Expert Draft Review wiki上留下你的意见。
查看英文原文:JSR 310 Date and Time API for Java
译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
5 条回复
关注此讨论 回复