2007年03月
大家都知道Serializable是一个mark interface,告诉JVM这个对象可以被转换成二进制流来传输. 但是Serializable与Externalizable的转换二进制流的过程是不一样的. Serializable 在我们实现这个接口的时候,我们可以使用4个私有方法来控制序列化的过程: 我们来看一个例子: 代码。阅读全文>
发表于 @ 2007年03月28日 20:29:00|评论(loading...)|编辑
SVG是基于XML的专门为网络而设计的图像格式。SVG图像是与XML1.0兼容的文档,SVG元素是指示如何绘制图像的一些指令,阅读器(Viewer)解释这些指令,把SVG图像在指定设备上显示出来。Andrew Watt就制作了世界上第一个这样的全SVG站点( http://www.svgspider.com) .当然你首先得要安装一个SVG的阅读器,推荐使用Adobe公司的 Adobe SVG Viewer 2.0,但它只能用在MS Windows和MacOS上。虽然SVG的语法和格式仍是XML规范的一部分,但SVG有其自己的一些基本概念、SVG的渲染模型、SVG数据类型与坐标系设置等,详细内容请参照 参考资料。阅读全文>
发表于 @ 2007年03月28日 17:19:00|评论(loading...)|编辑
其中import static java.lang.Math.*;就是静态导入的语法,它的意思是导入Math类中的所有static方法和属性。这样我们在使用这些方法和属性时就不必写类名。需要注意的是默认包无法用静态导入,另外如果导入的类中有重复的方法和属性则需要写出类名,否则编译时无法通过。
在JDK5.0中引入了StringBuilder类,该类的方法不是同步(synchronized)的,这使得它比StringBuffer更加轻量级和有效。
阅读全文>
发表于 @ 2007年03月28日 15:11:00|评论(loading...)|编辑
I'd like to find a job which is more challenging. 阅读全文>
发表于 @ 2007年03月28日 08:50:00|评论(loading...)|编辑
1)机器思维
优秀的程序员最擅长和电脑程序打交道,并通过代码去控制反馈。
而管理需要和人打交道,需要收集人的反馈。电脑是按逻辑来执行的,而人却要复杂很多,
特别是团队中有女性成员,挑战难度就更大。
由于长期和电脑接触,很多程序员缺乏和别人沟通的技巧,或者说情商相对较低。
这在管理上是比较致命的缺点。
2)BUG思维
优秀的程序员追求完美,看自己或者别人代码时第一反应是看什么地方可能有BUG, 管理时如果带着BUG思维,就会只看到别人的不足和错误,而不去表扬其有进步的地方。
(完美思维的坏处还有一个,就是过于关注细节)如果方向和前提有问题,过于关注细节反而会带来延误
3)工匠思维
程序员靠手艺吃饭,创业总是会碰到各种困难,在碰到困境的时候程序员出身的创业者是有退路的,大不了我再回去写程序搞技术好了。
创业最需要的就是坚持,需要一种永不言弃的精神气,不能坚持到底,也就不能收获果实。
4)大侠思维
以技术创业起家的容易迷信技术,忽视市场,忽视管理,总以为只有自己的阅读全文>
发表于 @ 2007年03月27日 22:36:00|评论(loading...)|编辑
重载,继承,重写和多态的区别:继承是子类获得父类的成员,重写是继承后重新实现父类的方法。多态则是为了避免在父类里大量重载引起代码臃肿且难于维护。网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。阅读全文>
发表于 @ 2007年03月27日 11:54:00|评论(loading...)|编辑
1.CRUD型的用例可以合并成一个管理用例,以四个主场景分别表达。
2."老板问:你每天做什么阿?","我每天登陆系统"。这就是用例没有提供足够价值的明显标志。
3.用例中的每一个步骤,其实都可以写成一个独立的用例,分 or 不分?
4.用例的打包组织是一门艺术。
阅读全文>
发表于 @ 2007年03月26日 19:51:00|评论(loading...)|编辑
早就听说北京的生活节奏快,工作压力大,经常在电视上看到大都市形色匆匆的人群,地铁上利用点滴时间苦学的上班族;记得前年来过一次北京,当时第一次作地铁,上下班的人们大多手里拿着本书或者带着耳机,或者拿着手提笔记本,不知道在作什么,但我相信肯定是在学习,不学是不行的,特别是IT人!再就是北京的招聘,要人觉得不给培训的时间,是要上来就能干活的人,某些方面你不懂不行,懂但不懂原理也不行,这个有时间单独写写我的求职感受!阅读全文>
发表于 @ 2007年03月26日 19:39:00|评论(loading...)|编辑
印方经理问:"你们每月生产多少行代码?"我方经理掂量了很久,谦虚地说:"人均代码1万多行吧,不到2万行"。这是典型的小公司游击战的做法,一个人搞一个小软件,不需要任何流程,没有任何质量体系,除了写代码,测试以外,什么都不需要,非常自由,自以为"牛得不行",这很easy,那很容易,"管理是罗嗦,流程是麻烦",但实际的结果是什么样大家都知道。第二、一天能写400-500行代码,并不表示,你平均每个月能写12000-15000行代码,道理很简单,一个人100米速度是12秒,并不表示他的3000米速度是6分钟。阅读全文>
发表于 @ 2007年03月23日 17:05:00|评论(loading...)|编辑
每个资源适配器都被要求支持两套标准接口∶一组接口被应用程序服务器使用来与适配器交互作用,而另一套由客户/消费者使用与企业信息系统(当然也是通过适配器)相互作用。每个遵守JCA规范的资源适配器必须支持一套应用程序服务器用来管理适配器的标准接口。这套接口是在适配器和应用程序服务器之间的系统级协约,是由JCA委托的。创建资源适配器首先要正确地实现系统协定,而且它也带来了许多好处,我们举例子来说明其中一个好处,使用一个有连接管理协定的资源适配器能使应用程序服务器连接到一个基本企业级信息系统。阅读全文>
发表于 @ 2007年03月23日 11:59:00|评论(loading...)|编辑
事务概述。当事务再次执行查询,并发现一组结果自最后一次查询后由于另一个事务提交了新的数据而发生了更改,则会发生幻像读。Read committed(读已提交) —— 事务可以读取由另一事务提交的数据。事务再次读取某数据时发现它自最后一次读操作之后由于另一个事务修改并提交了该数据而发生了更改,则会发生不可重读。在部署过程中为 beans 定义的事务属性,确定了事务的范围。bean 必须将 EJB 部署描述符中的事务类型属性设置为 container,以便使用容器管理的事务。RequiresNew(需要新事务) —— 如果提供了事务,则暂停该事务。阅读全文>
发表于 @ 2007年03月21日 18:01:00|评论(loading...)|编辑
如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间J2EE应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?只能回到过去集中式数据库主机时代。现在软件都是面向互联网的,不象过去那样局限在一个小局域网,多用户并发访问量都是无法确定和衡量,依靠一台数据库主机显然是不能够承受这样恶劣的用户访问环境的。(当然搞数据库集群也只是五十步和百步的区别)。阅读全文>
发表于 @ 2007年03月19日 10:36:00|评论(loading...)|编辑
成事不说就是公司或领导已经决定的事情就不要评价,不要给出自己的想法和建议,无论你认为这些建议和想法对公司有多大的好处都要坚持不说的原则。但是在公司决定以前一定要把自己的想法说出来,这是你的职责,决定事情是公司领导的事,我们要认识清楚自己的职位和存在价值,不要给出超越职权的建议和想法,否则受到伤害的是你自己和公司。在生活中也是一样,你太太炒菜,四个菜中只有一个好吃,你吃饭的时候会说那三个不好吃,还是说那一个好吃呢?一定是说那一个好吃,因为你说那三个不好吃也没有用,再说好不好吃她和你一样清楚,为什么要说呢?工作中,这样的事情也经常有,总部任命了一个分公司经理,你自认为对他比较了解,他一定会把分公司搞垮。这个时候你要说吗?如果你说了,难道就能改变总部的决定吗?如果改变了,总部的权威何在!说了,反而增加了总部对你的看法:这个小子,总是这么窜,就你厉害,我们都是傻瓜,等着瞧,有你好受的。最后受害的是你自己。所以说要在事前,而不是事情已经决定了以后。
遂事不谏是说正在做的事情,也不要去劝谏。如果他是错的,就让他错到底,最后再来总结和检讨。对于企业来讲老板和经理每天都在做很多决策,有资料阅读全文>
发表于 @ 2007年03月18日 12:18:00|评论(loading...)|编辑
当一项“几乎不可能完成”的任务摆在整个团队面前时,经理认识到在非常短的时间内团队很难使用太多的规范从事开发工作;这位经理在随后的工作中设计了一种“系统下的附属系统”,通过使用最少的标准和规范进行专业化程序的开发。利用这种系统,我们的团队能够把一个庞大项目拆分成5 个项目同时进行开发,各自完成其独立任务,这花费原来时间的20%.显然,这是行之有效的一条捷径并能迅速突破时间限制的瓶颈。
阅读全文>
发表于 @ 2007年03月18日 12:02:00|评论(loading...)|编辑
需求变更处理流程
因为现实世界的软件系统可能有不同的严格程度和复杂性,所以事先预言所有的相关需求是不可能的。系统原计划的操作环境会改变,用户的需求会改变,甚至系统的角色也有可能改变。实现和测试系统的行为可能导致对正解决的问题产生新的理解和洞察,这种新的认识就有可能导致需求变更。CMM提出“分配需求的变更被复审,并加入到软件项目中来”,其关键是在需求发生变更时,没有必要马上把这些变更付诸于软件开发工作之中。实际上,坚持把需求变更付诸开发努力,企业就会形成一种混乱且不稳定的氛围,进而严重破坏项目的控制和管理。需求管理关键过程试图通过把分配需求的变更囤积到可管理的组中,等到开发工作允许的时候再引人相应的方法,避免产生这种混乱的氛围。结果,需求管理创建了一个隔绝开发工作与所有真实的、潜在无序的、来自于客户的变更。这个缓冲器允许真实的变更被注意、记录、追踪,同时开发工作又不会因此而被扰乱。开发项目应该周期性地暂停来吸收最新的需求变更积累,此时,所有的计划、设计、行为都根据刚刚吸收的需求变更的影响进行更新。
阅读全文>
发表于 @ 2007年03月18日 11:52:00|评论(loading...)|编辑
好的架构师通常有在具备定义良好的软件开发生命周期(Software Development Life Cycle,SDLC)的组织工作的经验。架构师必须理解在其所属专业内最重要的操作过程。这并不意味着需要有其他前提,例如,并不需要高能力成熟度模型(Capability Maturity Model,CMM)级别的工作经验。好的架构师可能来自使用 SDLC 的多个小型迭代的极限编程(Extreme Programming,XP)方法的组织。务必注意各种传统软件开发操作,如 Michael A. Jackson 的方法:Jackson 结构编程(Jackson Structured Programming,JSP)和 Jackson 系统开发(Jackson System Development,JSD)。Jackson 的研究对架构师职业发展的意义就像 Donald Knuth 的研究对程序员一样重要。架构师可以偏爱任何经典的、经过时间考验的软件系统开发方法。
阅读全文>
发表于 @ 2007年03月18日 11:45:00|评论(loading...)|编辑
PM都知道与项目沟通最多的是跟客户,而客户首先给我们提供的是业务需求,如果一开始就是比较完善的需求则是我们求知不得,但事事并非人愿他们总让我们在整个项目周期中循环,甚至停滞。正所谓天下有千万个上司,真正有英明领导却了了无几,有时上司不理解你所做的工作由于项目本身上存在诸多因素影响项目中的一些规范,上司认为你的工作在拖延时间,或没什么成果可言,在影响公司的运作,我们可考虑以下措施:3、项目变更也上下级最关心的,因为它涉及我们前面对项目风险是策划,把项目当前人的因素还是项目,做出时间的报告。阅读全文>
发表于 @ 2007年03月18日 11:31:00|评论(loading...)|编辑
从我的经验来看,开源软件基本上都不太好用,使用他的用户群基本属于计算机技术的高手,并不适合绝大部分仅仅把电脑当做一个工作或者娱乐工具的普通用户。很多时候,这些软件并不注意易用性,稳定性,因此对于普通用户并无太多的吸引力。阅读全文>
发表于 @ 2007年03月10日 13:14:00|评论(loading...)|编辑
·业务数据以何种方式表达。如一个员工有多个Email,你可以在T_EMPLOYEE表中建立多个Email字段如email_1、email_2、email_3,也可以创建一个T_EMAIL子表来存储,甚至可以用逗号分隔开多个Email地址存放在一个字段中。
·数据以何种方式物理存储。如大表的分区,表空间的合理设计等。
·如何建立合理的数据表索引。表索引几乎是提高数据表查询性能最有效的方法,Oracle拥有类型丰富的数据表索引类型,如何取舍选择显得特别重要。
在一般情况下,这样的设计并不会导致严重系统的性能问题,但是精益求精是每一位优秀软件设计师的品质,此外,对于设计师,一定要清楚这样一条规律:对于等质的性能提升,在编码层面往往需要比设计层面付出更多的艰辛。
在Oracle中提高数据库的性能需要考虑的问题,注意的误区还很多,本文涵盖是一些最常见的问题。下面,我们将提高数据库操作性能方法及一些误区作个小结:
·对于大表,可以考虑创建分区表,分区表有范围分区、散列分区、列表分区和散列分区几种,通过它可以达到化大表为小表的目的。
·考虑适量的阅读全文>
发表于 @ 2007年03月09日 21:02:00|评论(loading...)|编辑
jre\lib下的一个叫jaxp.properties文件,最后有三行是关于指定 xml parser的,将注释去掉,或者在程序中加入以下语句也可以:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");阅读全文>
发表于 @ 2007年03月02日 16:46:00|评论(loading...)|编辑
Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:阅读全文>
发表于 @ 2007年03月01日 16:11:00|评论(loading...)|编辑
Log4j是目前日志记录的业界标准,其强大,完善的功能可以满足我们大部分的需要。我们知道,在log4j中的日志级别分为 LOG、DEBUG、INFO、WARN、ERROR、和fatal六个级别。前几天,我下载一个jive 论坛,突然发现他的日志处理系统就是按照目标、级别分类,把不同的日志种类存放到不同的地方,我非常高兴的打开jive的发布包进行查看,令我有点失望的是jive采用的是自己的日志实现方式,没有采用log4j。阅读全文>
发表于 @ 2007年03月01日 15:36:00|评论(loading...)|编辑