Profilo di 贤达Daniel the creepFotoBlogElenchiAltro Strumenti Guida

Blog


18 luglio

笔记一:BETTER JAVA

找到以前看林锐那本书的Java笔记,整理了一下,内容很简略,不过每次看都觉得值得再看一遍,分享一下^-^。以后继续有其它笔记








 


1.  异常


异常有两种,一种是类库内置的检查,一种是程序包创建的检查。


异常使用的时机:必须是偶然性的事件才可使用异常,即是大频度出现的错误不应使用异常


替代异常处理的方法有:使用特殊返回值;使用前导检查(如下)


使用不需查异常强化方法的约定:不实现该方法使用UnsupportedOperationException;检查参数用IllegalArgumentExceptionNullPointerException


需查异常与不需查异常:前者不从RuntimeException继承,必须在抛出异常的方法中进行catch或声明为throws;后者从RuntimeException继承,不必声明为throws也不应在抛出的方法中catch


不要在finally中抛出任何异常


要使用链式异常保留初始异常信息


 


* 构造函数抛出异常时对象不被创建,但不回滚抛出前的操作


* 系统级异常从Error继承,不必处理,也不应使用


* finally是释放非内存资源的最佳场所


 


2.  内存管理


减少中间对象:用StringBuffer代替迭代使用的String;使用parseDouble(…)


手工清除短期对象的引用:将引用指向null;创建弱引用


内存泄漏:指JVM之外的内存分配,可达但不再使用的对象


解决内存泄漏:及时释放对对象的引用


 


* 引用类型:强引用、软引用(SoftReference)、弱引用(WeakReference)、幻引用(PhantomReference);后三个为Reference的子类


* 拷贝数组:System.arrayCopy(Object[] arc, int index1, Object[] dest, int index2, int len)


 


3.  面向对象设计


对象的设计:类的设计;类之间关系的设计


类的设计:方法(重载、覆盖);域


类之间关系的设计(体系结构设计):接口(方法继承);继承(方法优先);组合(域优先)


不涉及实现时用接口代替抽象类:接口只定义功能;抽象类包括提供部分实现


不要同时使用重载和覆盖:重载在编译期起作用;覆盖在运行期起作用;同时使用使代码难以理解


继承和组合的选择:需要重用方法时用继承,体现分类关系;需要共享数据时用组合,体现包含关系


组成和聚集的区别:组成对成分对象有依赖性,其成分对象是唯一的,权限受控制的,异构的,对组成对象使用消息转发操作;聚集的构成对象是同构的,可共享的,聚集本身可为空,对构成对象使用遍历操作


避免方法的副作用:分离动作和查询;设计不可变类


不可变类:不提供修改对象的方法,不能被继承,域是私有而且final的,其动作方法的参数是const


重构的时机及目标:先写出正确程序然后进行重构,重构后作单元测试;目标是在新要求出现时可通过重构继续扩展设计


如何描述体系结构:构成元素的描述;元素间交互的描述;组合模式及模式的限制;可使用包图、配置图……


 


* 两个对象用equals()比较相等时hashCode()也应返回相等的整数;因此在覆盖equals()同时应覆盖hashCode()


 


4.  集合


核心接口:CollectionListSet);Map


ListArrayListLinkedList


SetHashSetTreeSetLinkedHashSet


MapHashMapTreeMapLinkedHashMap


使用集合时的选择:尽量使用接口,并针对不同的实现进行性能测试


支持快速访问:HashSetHashMap


支持自动排序:TreeSetTreeMap


保持插入顺序:LinkedHashSetLinkedHashMap


支持快速随机访问:ArrayList


支持快速增删:LinkedList


排序:Collections.sort(List)Collections.sort(List, Comparator)Collections.reverseOrder()Comparator接口的一个反序实现


几个封装:线程安全synchronized;不可变unmodifiable;单件singleton


不可变的空集合:Collections.EMPTY_LISTCollections.EMPTY_SETCollections.EMPTY_MAP;常用于参数、返回值


 


* RandomAccess:该接口用于标记快速访问内部对象的集合


* 集合类的clone()方法及Collections.copy()只提供浅拷贝


* Collections.reverse():求逆


* Collections.nCopies(int n, Object o):返回不可变的noList


 


5.  性能调整


减少创建对象:使用对象池、数据库连接池、单件;使用原始类型的对象;使用后期初始化


优化执行代码:减少循环体中函数调用、数组操作、异常捕捉;不使用函数体作为循环条件;用System.arrayCopy()拷贝数组;能用==则不用equals();尽量不使用递归


减少IO时间:将多个小IO合成批量IO;大文件分段并行处理;减少输出信息(考虑使用断言);不要让程序等待IOIO时响应其它动作)


JDBC Connection的优化:连接池;不使用时显式关闭


JDBC Statement的优化:选择适当接口,少使用存储过程;批量执行,批量获取数据;使用DBMS组织数据


JDBC ResultSet的优化:批量读取;设定适当滚动方向;使用最匹配类型进行get/setget/set时用整数代替字段名


 


* 对象池的接口:ObjectPool ObjectPoolFactoryPoolableObjectFactoryKeyedObjectPoolKeyedObjectPoolFactoryKeyedPoolableObjectFactory


* 批量执行和获取:addBatch()executeBatch()getFetchSize()setFetchSize()


* 获取方向:setFetchDirection( FETCH_FORWARD / FETCH_BACKWARD / FETCH_UNKNOWN )





 

其实看完这本书之后俺没再使用过Java,之前使用得也不多,但Java的很多思想对C++程序员及OOA、OOD人员(etc...)是很有帮助的。(……嗯,真是废话)
23 marzo

使用教育网


用回教育网,感觉真不错,正在下载FC2-x86_64,虽然只有几十K的速度,但已经很满足了,呵呵,公网哪这么容易下这样的东东啊……


送上一首Only You,Portishead在New York的Live作品,不知道公网速度如何,应该很流畅~~


算来已经换了不少经典歌曲作背景音乐了,找个时间全部收录一下列出来。

12 febbraio

(转载)Borland将出售旗下IDE业务,包括Delphi和Jbuilder



http://www.matrix.org.cn/resource/news/501_Borland+IDE.html

admin 发表于2006-02-10
作者:matrix 来自:Borland
评论数:19 点击数:807




摘要:

今天,2006年2月8日,星期三,太平洋时间凌晨1点,在副总裁David I致开发者社区的一份信中提到,Borland宣布为他的IDE产品线寻求买主。将要出售的产品线包括Delphi, C++Builder, C#Builder, JBuilder(含Peloton), InterBase, JDataStore, nDataStore, Kylix。

 

今天,2006年2月8日,星期三,太平洋时间凌晨1点,在副总裁David I致开发者社区的一份信中提到,Borland宣布为他的IDE产品线寻求买主。

将要出售的产品线包括Delphi, C++Builder, C#Builder, JBuilder(含Peloton), InterBase, JDataStore, nDataStore, Kylix, 以及早期的Borland及Turbo语言产品和工具。

Borland 官方表示,他们将会把更多的精力投入到ALM工具市场。自从04年来由IBM所领导的开源 IDE Eclipse 所掀起的开源工具热潮逐渐的挤压着Borland的开发工具市场。

实际上,Jbuilder在市场上几乎完全被迅猛发展的Eclipse击溃,况且还有Netbeans和Ideaj在后面虎视耽耽。

一位来自Gartner的分析师说:“我认为 Borland 没能抵挡住 Eclipse的成功,而仅仅是在历史的开发工具市场取得了成绩。”

Serena Software 表示:“转型后的Borland 同样会面临激烈的竞争,例如Serena Software, Compuware 和 Mercury Interactive 等. 但是从今天的新闻可以看出Borland做了正确的决定,作为市场的演变,转向软件开发周期管理是必要的也是用户的需求。”

Borland终于要离去了,这位曾经辉煌的IDE巨人。

我们希望Borland能够重整旗鼓,也希望Delphi阵营不会被完全打乱。正如Borland 副总裁David I 说的:“泪水将离开我的眼睛,而微笑将留在我的脸上“。
27 novembre

谈论转载 界面设计规范

好像只转了一部分,自己点下面的链接进去看全文吧 

引用

转载 界面设计规范

以下内容都转载至:(忘了),反正是一篇好文章,值得推荐。

 

 

在参考了很多资料后,整理出来的一份界面规范(是c/s程序的,但其中的原则部分对任何界面都是具有参考价值的),希望能给大家带来帮助。
其中的图片没有贴上来,因为文字已经足够描述清楚了。
-------------------------------------
1. 界面规范
1.1. 总体原则
l 以用户为中心。设计由用户控制的界面,而不是界面控制用户。
l 清楚一致的设计。所有界面的风格保持一致,所有具有相同含义的术语保持一致,且易于理解
l 拥有良好的直觉特征。以用户所熟悉的现实世界事务的抽象来给用户暗示和隐喻,来帮助用户能迅速学会软件的使用。
l 较快的响应速度。
l 简单且美观。
1.2. 原则详述
1.2.1. 用户控制
用户界面设计的一个重要原则是用户应该总是感觉在控制软件而不是感觉被软件所控制。
l 操作上假设是用户--而不是计算机或软件--开始动作。用户扮演主动角色,而不是扮演被动角色。在需要自动执行任务时,要以允许用户进行选择或控制它的方式来实现该自动任务。
l 提供用户自定义设置。因为用户的技能和喜好各不相同,因此他们必须能够个性化界面的某些方面。Windows为用户提供了对许多这方面的访问。您的软件应该反应不同的系统属性--例如颜色、字体或其他选项的用户设置。
l 采取交互式和易于感应的窗口,尽量避免使用模态对话框,而使用"非模式"辅助窗口。 "模式"是一种状态,它排除一般的交互,或者限制用户只能进行特定的交互。当最好使用一个模式或该模式只是可替换的设计时--例如,用于在一个绘图程序中选定一个特定感觉--请确保该模式是显然的、可见的,是一个明确的用户选定的结果,并且容易取消。
l 在后台运行长进程时,保持前台式交互。例如,当正在打印一个文档,即使该文档不能被改变,用户也应该可以最小化该窗口。
l 谅解。用户喜欢探索一个界面,并经常从尝试和错误中学习。一个有效的界面允许交互式的发现,它只提供一组合适的选择,并在用户可能破坏系统或数据的情况时发出警告。如果可行,还应提供可逆转或可还原的操作。即使在设计得很好得界面中,用户也可能犯错误。这些错误既可以是物理上得(偶然地指向了错误的命令或数据),也可以是逻辑上的(对选定哪一个命令或哪些数据做出了错误的决定)。有效的设计避免很可能导致错误的情况。它还包容潜在的用户错误,并且使用户易于还原。
1.2.2. 清楚一致的设计
一致允许用户将已有的知识传递到新的任务中,更快地学习新事物,并将更多的注意力集中在任务上。这是因为他们不必花时间来尝试记住交互中的不同。通过提供一种稳定的感觉,一致使得界面熟悉而又可预测。一致在界面的所有方面都是很重要的,包括命令的名称、信息的可视表示,操作行为,以及元素在屏幕和窗口内部的放置。
l 相同含义的词使用统一的术语。比如对于仓库中存放的物料,不可同时又称为物品、货物、备品、产品和材料等等,而统一约定一个称谓,且此称谓是用户熟悉的和易于理解的。
l 使用一组一致的命令和界面来展示常见功能。例如,避免一个"复制"命令在一种情况下立刻执行一个操作,但在另一种情况显示一个对话框要求用户键入目标然后才执行。应该使用同样的命令来执行对用户来说相似的功能。
l 操作环境内的一致。保持Windows提供的交互操作和界面约定之间的高度一致,用户将能很快熟悉软件的使用。
l 使用隐喻的一致性。如果一个特定的行为更多的是一个不同的事物的特征,而不是它的隐喻的含义,那么用户可能在学习将行为和该事物相关联时遇到困难。例如,对于放在回收站中的对象而言,焚烧炉和废纸箩代表不同的模型。
l 建立项目保留字。通过建立保留字来明确和统一术语和操作命令。
l 提供可视反馈。在后台运行长进程时(时间超过1~10秒,视具体情况而定),必须提供进度条等信息指示。
l 除非特别必要时,不要提供声音反馈。在有严重的问题发生时,可以使用声音来提示用户,但是通常应该允许用户取消声音。
l 保持文字内容清楚。信息的表达要言简意赅,易于理解而又不罗嗦;避免使用冗长的文字给用户反馈。
1.2.3. 有良好的直觉特征
l 用熟悉的隐喻为用户的任务提供直接而直观的界面。通过允许用户利用他们的知识和经验,隐喻使得预测和学习基于软件的表示的行为更加容易。
l 在使用隐喻时,不需要将基于计算机的实现局限在真实世界的对应物上范围之内。例如,与其基于纸张的对应物不同,Windows桌面上的文件夹可以被用来组织各种对象,例如打印机、计算器、以及其他文件夹。同样,Windows文件夹可以其真实世界对应物不可能的方式被排序。在界面中使用隐喻的目的是提供一个认知的桥梁;隐喻并不以其自身为最终目的。
l 隐喻支持用户认知而不是记忆。用户记起与一个熟悉的事物相关联的意义要比他们记起一个特定命令的名称要容易得多。
l 同常见软件保持一致性。出色的用户界面在程序中将实现同用户以前用过的其它成功软件一致的动作。
1.2.4. 较快的响应速度
l 保持界面能很快对用户操作作出反应。
l 提供快捷键。特别对于有大量录入项的界面,能让用户不使用鼠标即可完成快速数据录入。在用户界面中加入一些功能,这些功能可以让熟练用户在不同的区域快速的输入数据。这些功能包括重复功能、快捷键、带有有意义的图标的按钮等等,所有这些可以使速度快的用户可以控制界面并加快数据的输入。
l 除非必要,不要重绘屏幕。
1.2.5. 简单且美观
l 简单。界面应该很简单(不是过分单纯化)、易于学习、并且易于使用。它还必须提供对应用程序的所有功能的访问。在界面中,扩大功能和保持简单是相互矛盾的。一个有效的设计应该平衡这些目标。支持简单性的一种方法是将信息的表示减少到进行充分交流所需的最少信息。例如,避免命令名和消息的文字描述。不相关或冗长的句子扰乱了您的设计,使得用户难以很容易地提取重要信息。另一个设计简单而有用的界面的方法是使用自然的映射和语意。界面元素的排列和表示影响它们的意义和关联。简单还与熟悉相互关联。熟悉的事物通常似乎更简单。尽可能尝试建立利用用户已有的知识和经历的联系。您可以使用渐进揭示来帮助用户管理复杂的事物。"渐进揭示"涉及到仔细的信息组织,以便只在恰当的时候才显示信息。通过隐藏向用户表达的信息,您减少了用户必须处理的信息数量。例如,您可以使用菜单来显示操作或选择的列表,还可以使用对话框来显示一组选项。渐进揭示并不意味着对显示信息使用非传统的技术,例如需要一个修饰键作为访问基本功能的唯一方法,或者强迫用户通过一个更长的分级交互序列。这会使用户界面更加复杂和麻烦。
l 美观。可视设计是应用程序界面的重要部分。可视属性提供了非常好的印象,并传达特定对象的交互行为的重要线索。同时,出现在屏幕上的每一个可视元素也是很重要的,它们可能竞争用户的注意。提供清楚地促进用户对表达的信息的理解的连贯环境。图形或可视设计器的技巧对于这一方面是无价的。

1.3. 细节约定
1.3.1. 界面风格
1.3.1.1. 普通外观
l 使用一致性一致的外观将使用户界面更易于理解和使用。用户界面控件看起来应该是一致的。
l 使用安排和流程在西方文化中(包括中国),人们习惯于从左到右,从上到下进行阅读,因此,应该将重要信息放在上面和左边。左上角最容易吸引起人们的注意力。
l 使用对齐通常,使用左对齐来使用户界面控件更易于浏览。对于数值文本,应该使用小数点对齐或右对齐。对于非数值文本,应该避免使用右对齐或居中对齐。不必对什么都使用中间对齐,或者使它们保持对称形式。在右边或底部保留空白区域更适合习惯。
l 使用分组将相关的用户界面控件分成组,以体现它们之间的关系。同时,还要显示相关信息。将控件放在它所作用的对象旁。使用空格、分组框、线条和标签,或者其它分隔符对用户界面控件进行分组。
l 使用强调使用焦点、位置、分组、层次、启用/禁用、大小、颜色或者字体等,来将注意力集中在需要首先看到的用户界面控件上。尽量以可视的方式指明用户接下来应该进行的操作。
l 使用可视的提示尽量使用近似的大小和间距来指出用户界面控件是相似的,而使用不同的大小和间距来指出用户界面控件视是不同的。
l 使用空格使用空格来创建一个"透气室",以使窗口布局更易于理解,并且查看起来更舒服。空格的多少要适当,不要显得太分散。但是,要避免过多地使用空格。如果可能,尽量使窗口小一些。
l 警惕空洞不要到处粘贴公司或产品的名称及徽标。虽然在启动屏或"关于"框中出现公司或产品名称及徽标是完全可以接受的,但其他窗口中的可用空间应该出现其他内容。如果没有其他内容,那么应尽量使窗口小一些。
l 注意大小使用用户界面控件的分辨率具有独立性。使用系统规格(使用GetGystemMetrics API 函数)或文本规格(使用GetTextMetrics或GetTextExtentPoint32 API 函数)来确定用户界面控件的大小。任何显示文本的对象(如对话框或定义的文本文档)
28 ottobre

在Linux下创建DB2实例的SQL6048N错误的一种解决办法

第一篇技术文章

新安装的redflag上,在一堆groupadd和useradd之后使用以下命令创建DB2实例

/opt/IBM/db2/V8.1/instance/db2icrt -u db2fenc1 db2inst1

出现错误,日志文件中发现SQL6048N错误。

网上搜索好像只有一个相同的情况,那位老兄最后一次回自己帖子的时候说是主机名解析出了问题。

后来试了一下,在/etc/hosts中添加主机名和IP后,创建实例成功

 

可能没弄过的人不知道我说什么,不过真遇到这个问题的话上来看一看吧,可能网上就这么一个solution了