关于作者

姓名:

性别:其他

出生日期:--

地区:

联系电话:

QQ:--

婚否:保密
用户名:passersby23
笔名:passersby23
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:17
评论个数:1
留言条数:0




Powered by BlogDriver 2.1

passersby23的博客

 

欢迎访问passersby23的博客

文章

中国独特概念词英文表达法
                                      

1.中华民族的喜庆节日(Chinese Festivial

国庆节 National Day

中秋节 Mid-Autumn Festival

春节 Spring Festival

元宵节 Lantern Festival

儿童节 Children’s Day

端午节 Dragon Boat Festival

妇女节 Women’s Day

泼水节 Water-Splashing Day

教师节 Teachers’ Day

五四青年节 Youth Day



2.
中国意念词(Chinesenesses

八卦 trigram

阴、的阳 yin, yang

Daocf. logo

江湖(世界) the jianghu World the traits’ world

e.g. You can’t control everything in a traits’ world. (
人在江湖,身不由己)

DaoismTaoism

上火 excessive internal heat

儒学 Confucianism

红学(《红楼梦》研究) redology

世外桃源 Shangri-la or Arcadia

开放 kaifang Chinese openness to the outside world

大锅饭 getting an equal share regardless of the work done

伤痕文学 scar literature or the literature of the wounded

不搞一刀切 no imposing uniformity on …

合乎国情,顺乎民意 to conform with the national conditions and the will of the people

乱摊派,乱收费 imposition of arbitrary quotas and service charge

铁交椅 iron (lifetime) post’s; guaranteed leading post

脱贫 to shake off poverty; anti-poverty

治则兴,乱则衰 Order leads to prosperity and chaos to decline



3
、中国独特的传统饮食(Unique Traditional Chinese Foods

馄饨 wonton

锅贴 guotie (fried jiaozi)

花卷 steamed twisted rolls

套餐 set meal

盒饭 box lunch; Chinese take-away

米豆腐 rice tofu

魔芋豆腐 konjak tofu

米粉 rice noodles

冰糖葫芦 a stick of sugar-coated haws (or apples,etc.)

火锅 chafing dish

八宝饭 eight-treasure rice pudding

粉丝 glass noodles

豆腐脑 jellied bean curd



4
、中国新兴事物(Newly Sprouted Things

中国电信 China Telecom

中国移动 China Mobile

十五计划 the 10th Five-Year Plan

中国电脑联网 Chinanet

三峡工程 the Three Gorges Project

希望工程 Project Hope

京九铁路 Beijing CKowloon Railway

扶贫工程 Anti-Poverty Project

菜篮子工程 Vegetable Basket Project

温饱工程 Decent-Life Project

安居工程 Economy Housing Project

扫黄 Porn-Purging Campaign

西部大开发 Go-West Campaign



5
、特有的一些汉语词汇


禅宗 Zen Buddhism

dhyana; dhgaya

混沌 chaos

Daosim, the way and its power

四谛 Four Noble Truth

八正道 Eightfold Path

无常 anity

五行说 Theory of Five Elements

无我 anatman

坐禅 metta or transcendental meditation

sunyata

虚无 nothingness

双喜 double happiness()a doubled stroke of luck()

小品 witty skits

相声 cross-talk

噱头;掉包袱 gimmick, stunt

夜猫子 night people; night-owls

本命年 this animal year of sb.

处世之道 philosophy of life

姻缘 yinyuanprefixed fate of marriage

还愿 redeem a wish (vows)



6
、具有文化特色的现代表述

大陆中国 Mainland China

红宝书 little red book

红色中国 socialist China

四化 Four Modernizations

终生职业 job-for-life

铁饭碗 iron rice bowl

大锅饭 communal pot

关系户 closely-related units

外出打工人员 migrant workers

关系网 personal nets, closely-knitted guild

五讲(讲文明、的讲礼貌、的讲卫生、的讲秩序、的讲道德)the Five Merits focus on decorum, manners, hygiene, disciplines and morals

四美(心灵美、的语言美、的行为美、的环境美): the Four Virtues are golden heart, refined language, civilized behavior, and green environment



7
、中国古代独特事物(Unique Ancient Chinese Items

宣纸 rice paper

衙门 yamen

叩头 kowtow

孔子Confucius

牌楼 pailoupai-loo

武术 wushuChinese Martial Arts

功夫 kungfu kung fu

中庸 the way of medium cf. Golden Means

中和 harmony (zhonghe)

孝顺 to show filial obedience

孝子 dutiful son

家长 family head

三纲:君为臣纲,父为子纲,夫为妻纲 three cardinal guides: ruler guides subject, father guides son husband guides wife

五常:仁、的义、的理、的智、的信 five constant virtues: benevolence (humanity), righteousness, propriety, wisdom and fidelity

八股文 eight-legged essays

多子多福:The more sons/children, the more blessing/ great happiness

养儿防老:raising sons to support one in one’s old age




8
、近期常见诸报端的中国现代特色词汇翻译

基层监督 grass-roots supervision

基础税率 base tariff level

婚介所 matrimonial agency

婚外恋 extramarital love

婚纱摄影 bride photo

黑心棉 shoddy cotton

机器阅卷 machine scoring

即开型奖券 scratch-open ticket/lottery

集中精力把经济建设搞上去 go all out for economic development

价格听证会 public price hearings

A球队 Division A Soccer Team

家政服务 household management service

加强舆论监督 ensure the correct orientation is maintained in public opinion

假帐 accounting fraud

叫板 challenge; pick a quarrel

矫情 use lame arguments

渐进式台独 gradual Taiwan independence

借调 temporarily transfer

扩大中等收入者比重 Raise the proportion of the middle-income group

扩大内需,刺激消费expand domestic demand and consumption

- 作者: passersby23 2006年01月18日, 星期三 16:01  回复(0) |  引用(0) 加入博采

Java性能优化技巧集锦
Java性能优化技巧集锦
发表:2005-12-9 12:48:02 出处:你的博客网(yourblog.org)
Java性能优化技巧集锦

  可供程序利用的资源是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。

  可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。

  一、通用篇

  “通用篇”讨论的问题适合于大多数Java应用。

  1.1 不用new关键词创建类的实例

  用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

  在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:

public static Credit getNewCredit()
{
 return new Credit();
}  

  改进后的代码使用clone()方法,如下所示:

private static Credit BaseCredit = new Credit();
public static Credit getNewCredit()
{
 return (Credit) BaseCredit.clone();
}  

  上面的思路对于数组处理同样很有用。

  1.2 使用非阻塞I/O

  版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。

  JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。

  1.3 慎用异常

  异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。

  异常只能用于错误处理,不应该用来控制程序流程。

  1.4 不要重复初始化变量

  默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

  1.5 尽量指定类的final修饰符

  带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。

  另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

  1.6 尽量使用局部变量

  调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。

  1.7 乘法和除法

  考虑下面的代码:

for (val = 0; val < 100000; val +=5)
{
 alterX = val * 8;
 myResult = val * 2;
}  

  用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:

for (val = 0; val < 100000; val += 5)
{
 alterX = val << 3;
 myResult = val << 1;
}  

  修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。

  二、J2EE篇

  前面介绍的改善性能技巧适合于大多数Java应用,接下来要讨论的问题适合于使用JSP、EJB或JDBC的应用。

  2.1 使用缓冲标记

  一些应用服务器加入了面向JSP的缓冲标记功能。例如,BEA的WebLogic Server从6.0版本开始支持这个功能,Open Symphony工程也同样支持这个功能。JSP缓冲标记既能够缓冲页面片断,也能够缓冲整个页面。当JSP页面执行时,如果目标片断已经在缓冲之中,则生成该片断的代码就不用再执行。页面级缓冲捕获对指定URL的请求,并缓冲整个结果页面。对于购物篮、目录以及门户网站的主页来说,这个功能极其有用。对于这类应用,页面级缓冲能够保存页面执行的结果,供后继请求使用。

  对于代码逻辑复杂的页面,利用缓冲标记提高性能的效果比较明显;反之,效果可能略逊一筹。

  2.2 始终通过会话Bean访问实体Bean

  直接访问实体Bean不利于性能。当客户程序远程访问实体Bean时,每一个get方法都是一个远程调用。访问实体Bean的会话Bean是本地的,能够把所有数据组织成一个结构,然后返回它的值。

  用会话Bean封装对实体Bean的访问能够改进事务管理,因为会话Bean只有在到达事务边界时才会提交。每一个对get方法的直接调用产生一个事务,容器将在每一个实体Bean的事务之后执行一个“装入-读取”操作。

  一些时候,使用实体Bean会导致程序性能不佳。如果实体Bean的唯一用途就是提取和更新数据,改成在会话Bean之内利用JDBC访问数据库可以得到更好的性能。

  2.3 选择合适的引用机制

  在典型的JSP应用系统中,页头、页脚部分往往被抽取出来,然后根据需要引入页头、页脚。当前,在JSP页面中引入外部资源的方法主要有两种:include指令,以及include动作。

  include指令:例如<%@ include file="copyright.html" %>。该指令在编译时引入指定的资源。在编译之前,带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定,比运行时才确定资源更高效。

  include动作:例如<jsp:include page="copyright.jsp" />。该动作引入指定页面执行后生成的结果。由于它在运行时完成,因此对输出结果的控制更加灵活。但时,只有当被引用的内容频繁地改变时,或者在对主页面的请求没有出现之前,被引用的页面无法确定时,使用include动作才合算。

  2.4 在部署描述器中设置只读属性

  实体Bean的部署描述器允许把所有get方法设置成“只读”。当某个事务单元的工作只包含执行读取操作的方法时,设置只读属性有利于提高性能,因为容器不必再执行存储操作。

  2.5 缓冲对EJB Home的访问

  EJB Home接口通过JNDI名称查找获得。这个操作需要相当可观的开销。JNDI查找最好放入Servlet的init()方法里面。如果应用中多处频繁地出现EJB访问,最好创建一个EJBHomeCache类。EJBHomeCache类一般应该作为singleton实现。

  2.6 为EJB实现本地接口

  本地接口是EJB 2.0规范新增的内容,它使得Bean能够避免远程调用的开销。请考虑下面的代码。

PayBeanHome home = (PayBeanHome) javax.rmi.PortableRemoteObject.narrow (ctx.lookup ("PayBeanHome"), PayBeanHome.class);
PayBean bean = (PayBean) javax.rmi.PortableRemoteObject.narrow (home.create(), PayBean.class);  

  第一个语句表示我们要寻找Bean的Home接口。这个查找通过JNDI进行,它是一个RMI调用。然后,我们定位远程对象,返回代理引用,这也是一个RMI调用。第二个语句示范了如何创建一个实例,涉及了创建IIOP请求并在网络上传输请求的stub程序,它也是一个RMI调用。

  要实现本地接口,我们必须作如下修改:

  方法不能再抛出java.rmi.RemoteException异常,包括从RemoteException派生的异常,比如TransactionRequiredException、TransactionRolledBackException和NoSuchObjectException。EJB提供了等价的本地异常,如TransactionRequiredLocalException、TransactionRolledBackLocalException和NoSuchObjectLocalException。

  所有数据和返回值都通过引用的方式传递,而不是传递值。

  本地接口必须在EJB部署的机器上使用。简而言之,客户程序和提供服务的组件必须在同一个JVM上运行。

  如果Bean实现了本地接口,则其引用不可串行化。

  2.7 生成主键

  在EJB之内生成主键有许多途径,下面分析了几种常见的办法以及它们的特点。

  利用数据库内建的标识机制(SQL Server的IDENTITY或Oracle的SEQUENCE)。这种方法的缺点是EJB可移植性差。

  由实体Bean自己计算主键值(比如做增量操作)。它的缺点是要求事务可串行化,而且速度也较慢。

  利用NTP之类的时钟服务。这要求有面向特定平台的本地代码,从而把Bean固定到了特定的OS之上。另外,它还导致了这样一种可能,即在多CPU的服务器上,同一个毫秒之内生成了两个主键。

  借鉴Microsoft的思路,在Bean中创建一个GUID。然而,如果不求助于JNI,Java不能确定网卡的MAC地址;如果使用JNI,则程序就要依赖于特定的OS。

  还有其他几种办法,但这些办法同样都有各自的局限。似乎只有一个答案比较理想:结合运用RMI和JNDI。先通过RMI注册把RMI远程对象绑定到JNDI树。客户程序通过JNDI进行查找。下面是一个例子:

public class keyGenerator extends UnicastRemoteObject implements Remote
{
 private static long Keyvalue = System.currentTimeMillis();
 public static synchronized long getKey() throws RemoteException { return Keyvalue++; }  

  2.8 及时清除不再需要的会话

  为了清除不再活动的会话,许多应用服务器都有默认的会话超时时间,一般为30分钟。当应用服务器需要保存更多会话时,如果内存容量不足,操作系统会把部分内存数据转移到磁盘,应用服务器也可能根据“最近最频繁使用”(Most Recently Used)算法把部分不活跃的会话转储到磁盘,甚至可能抛出“内存不足”异常。在大规模系统中,串行化会话的代价是很昂贵的。当会话不再需要时,应当及时调用HttpSession.invalidate()方法清除会话。HttpSession.invalidate()方法通常可以在应用的退出页面调用。

  2.9 在JSP页面中关闭无用的会话

  对于那些无需跟踪会话状态的页面,关闭自动创建的会话可以节省一些资源。使用如下page指令:

<%@ page session="false"%>

  2.10 Servlet与内存使用

  许多开发者随意地把大量信息保存到用户会话之中。一些时候,保存在会话中的对象没有及时地被垃圾回收机制回收。从性能上看,典型的症状是用户感到系统周期性地变慢,却又不能把原因归于任何一个具体的组件。如果监视JVM的堆空间,它的表现是内存占用不正常地大起大落。

  解决这类内存问题主要有二种办法。第一种办法是,在所有作用范围为会话的Bean中实现HttpSessionBindingListener接口。这样,只要实现valueUnbound()方法,就可以显式地释放Bean使用的资源。

  另外一种办法就是尽快地把会话作废。大多数应用服务器都有设置会话作废间隔时间的选项。另外,也可以用编程的方式调用会话的setMaxInactiveInterval()方法,该方法用来设定在作废会话之前,Servlet容器允许的客户请求的最大间隔时间,以秒计。

  2.11 HTTP Keep-Alive

  Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。市场上的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive功能对资源利用的影响尤其突出。

  2.12 JDBC与Unicode

  想必你已经了解一些使用JDBC时提高性能的措施,比如利用连接池、正确地选择存储过程和直接执行的SQL、从结果集删除多余的列、预先编译SQL语句,等等。

  除了这些显而易见的选择之外,另一个提高性能的好选择可能就是把所有的字符数据都保存为Unicode(代码页13488)。Java以Unicode形式处理所有数据,因此,数据库驱动程序不必再执行转换过程。但应该记住:如果采用这种方式,数据库会变得更大,因为每个Unicode字符需要2个字节存储空间。另外,如果有其他非Unicode的程序访问数据库,性能问题仍旧会出现,因为这时数据库驱动程序仍旧必须执行转换过程。

  2.13 JDBC与I/O

  如果应用程序需要访问一个规模很大的数据集,则应当考虑使用块提取方式。默认情况下,JDBC每次提取32行数据。举例来说,假设我们要遍历一个5000行的记录集,JDBC必须调用数据库157次才能提取到全部数据。如果把块大小改成512,则调用数据库的次数将减少到10次。

  在一些情形下这种技术无效。例如,如果使用可滚动的记录集,或者在查询中指定了FOR UPDATE,则块操作方式不再有效。

  1.14 内存数据库
 
  许多应用需要以用户为单位在会话对象中保存相当数量的数据,典型的应用如购物篮和目录等。由于这类数据可以按照行/列的形式组织,因此,许多应用创建了庞大的Vector或HashMap。在会话中保存这类数据极大地限制了应用的可伸缩性,因为服务器拥有的内存至少必须达到每个会话占用的内存数量乘以并发用户最大数量,它不仅使服务器价格昂贵,而且垃圾收集的时间间隔也可能延长到难以忍受的程度。

  一些人把购物篮/目录功能转移到数据库层,在一定程度上提高了可伸缩性。然而,把这部分功能放到数据库层也存在问题,且问题的根源与大多数关系数据库系统的体系结构有关。对于关系数据库来说,运行时的重要原则之一是确保所有的写入操作稳定、可靠,因而,所有的性能问题都与物理上把数据写入磁盘的能力有关。关系数据库力图减少I/O操作,特别是对于读操作,但实现该目标的主要途径只是执行一套实现缓冲机制的复杂算法,而这正是数据库层第一号性能瓶颈通常总是CPU的主要原因。

  一种替代传统关系数据库的方案是,使用在内存中运行的数据库(In-memory Database),例如TimesTen。内存数据库的出发点是允许数据临时地写入,但这些数据不必永久地保存到磁盘上,所有的操作都在内存中进行。这样,内存数据库不需要复杂的算法来减少I/O操作,而且可以采用比较简单的加锁机制,因而速度很快。

  三、GUI篇

  这一部分介绍的内容适合于图形用户界面的应用(Applet和普通应用),要用到AWT或Swing。

  3.1 用JAR压缩类文件

  Java档案文件(JAR文件)是根据JavaBean标准压缩的文件,是发布JavaBean组件的主要方式和推荐方式。JAR档案有助于减少文件体积,缩短下载时间。例如,它有助于Applet提高启动速度。一个JAR文件可以包含一个或者多个相关的Bean以及支持文件,比如图形、声音、HTML和其他资源。

  要在HTML/JSP文件中指定JAR文件,只需在Applet标记中加入ARCHIVE = "name.jar"声明。

  3.2 提示Applet装入进程

  你是否看到过使用Applet的网站,注意到在应该运行Applet的地方出现了一个占位符?当Applet的下载时间较长时,会发生什么事情?最大的可能就是用户掉头离去。在这种情况下,显示一个Applet正在下载的信息无疑有助于鼓励用户继续等待。

  下面我们来看看一种具体的实现方法。首先创建一个很小的Applet,该Applet负责在后台下载正式的Applet:

import java.applet.Applet;
import java.applet.AppletStub;
import java.awt.Label;
import java.awt.Graphics;
import java.awt.GridLayout;
public class PreLoader extends Applet implements Runnable, AppletStub
{
 String largeAppletName;
 Label label;
 public void init()
 {
  // 要求装载的正式Applet
  largeAppletName = getParameter("applet");
  // “请稍等”提示信息
  label = new Label("请稍等..." + largeAppletName);
  add(label);
 }
 public void run()
 {
  try
  {
   // 获得待装载Applet的类
   Class largeAppletClass = Class.forName(largeAppletName);
   // 创建待装载Applet的实例
   Applet largeApplet = (Applet)largeAppletClass.newInstance();
   // 设置该Applet的Stub程序
   largeApplet.setStub(this);
   // 取消“请稍等”信息
   remove(label);
   // 设置布局
   setLayout(new GridLayout(1, 0));
   add(largeApplet);
   // 显示正式的Applet
   largeApplet.init();
   largeApplet.start();
  }
  catch (Exception ex)
  {
   // 显示错误信息
   label.setText("不能装入指定的Applet");
  }
  // 刷新屏幕
  validate();
 }
 public void appletResize(int width, int height)
 {
  // 把appletResize调用从stub程序传递到Applet
  resize(width, height);
 }
}

  编译后的代码小于2K,下载速度很快。代码中有几个地方值得注意。首先,PreLoader实现了AppletStub接口。一般地,Applet从调用者判断自己的codebase。在本例中,我们必须调用setStub()告诉Applet到哪里提取这个信息。另一个值得注意的地方是,AppletStub接口包含许多和Applet类一样的方法,但appletResize()方法除外。这里我们把对appletResize()方法的调用传递给了resize()方法。

  3.3 在画出图形之前预先装入它

  ImageObserver接口可用来接收图形装入的提示信息。ImageObserver接口只有一个方法imageUpdate(),能够用一次repaint()操作在屏幕上画出图形。下面提供了一个例子。

public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
{
 if ((flags & ALLBITS) !=0 { repaint();
}
else if (flags & (ERROR |ABORT )) != 0)
{
 error = true;
 // 文件没有找到,考虑显示一个占位符
 repaint();
}
return (flags & (ALLBITS | ERROR| ABORT)) == 0;
}  

  当图形信息可用时,imageUpdate()方法被调用。如果需要进一步更新,该方法返回true;如果所需信息已经得到,该方法返回false。

  3.4 覆盖update方法

  update()方法的默认动作是清除屏幕,然后调用paint()方法。如果使用默认的update()方法,频繁使用图形的应用可能出现显示闪烁现象。要避免在paint()调用之前的屏幕清除操作,只需按照如下方式覆盖update()方法:

public void update(Graphics g) { paint(g);}  

  更理想的方案是:覆盖update(),只重画屏幕上发生变化的区域,如下所示:

public void update(Graphics g)
{
 g.clipRect(x, y, w, h);
 paint(g);
}  

  3.5 延迟重画操作

  对于图形用户界面的应用来说,性能低下的主要原因往往可以归结为重画屏幕的效率低下。当用户改变窗口大小或者滚动一个窗口时,这一点通常可以很明显地观察到。改变窗口大小或者滚动屏幕之类的操作导致重画屏幕事件大量地、快速地生成,甚至超过了相关代码的执行速度。对付这个问题最好的办法是忽略所有“迟到”的事件。

  建议在这里引入一个数毫秒的时差,即如果我们立即接收到了另一个重画事件,可以停止处理当前事件转而处理最后一个收到的重画事件;否则,我们继续进行当前的重画过程。

  如果事件要启动一项耗时的工作,分离出一个工作线程是一种较好的处理方式;否则,一些部件可能被“冻结”,因为每次只能处理一个事件。下面提供了一个事件处理的简单例子,但经过扩展后它可以用来控制工作线程。

public static void runOnce(String id, final long milliseconds)
{
 synchronized(e_queue)
 {
  // e_queue: 所有事件的集合
  if (!e_queue.containsKey(id))
  {
   e_queue.put(token, new LastOne());
  }
 }
 final LastOne lastOne = (LastOne) e_queue.get(token);
 final long time = System.currentTimeMillis();
 // 获得当前时间
 lastOne.time = time;
 (new Thread()
 {
  public void run()
  {
   if (milliseconds > 0)
   {
    try
    {
     Thread.sleep(milliseconds);
    }
    // 暂停线程
    atch (Exception ex) {}
   }
   synchronized(lastOne.running)
   {
    // 等待上一事件结束
    if (lastOne.time != time)
    // 只处理最后一个事件
     return;
   }
  }}).start();
 }
 private static Hashtable e_queue = new Hashtable();
 private static class LastOne
 {
  public long time=0;
  public Object running = new Object();
 }


  3.6 使用双缓冲区

  在屏幕之外的缓冲区绘图,完成后立即把整个图形显示出来。由于有两个缓冲区,所以程序可以来回切换。这样,我们可以用一个低优先级的线程负责画图,使得程序能够利用空闲的CPU时间执行其他任务。下面的伪代码片断示范了这种技术。

Graphics myGraphics;
Image myOffscreenImage = createImage(size().width, size().height);
Graphics offscreenGraphics = myOffscreenImage.getGraphics();
offscreenGraphics.drawImage(img, 50, 50, this);
myGraphics.drawImage(myOffscreenImage, 0, 0, this);  

  3.7 使用BufferedImage

  Java JDK 1.2使用了一个软显示设备,使得文本在不同的平台上看起来相似。为实现这个功能,Java必须直接处理构成文字的像素。由于这种技术要在内存中大量地进行位复制操作,早期的JDK在使用这种技术时性能不佳。为解决这个问题而提出的Java标准实现了一种新的图形类型,即BufferedImage。

  BufferedImage子类描述的图形带有一个可访问的图形数据缓冲区。一个BufferedImage包含一个ColorModel和一组光栅图形数据。这个类一般使用RGB(红、绿、蓝)颜色模型,但也可以处理灰度级图形。它的构造函数很简单,如下所示:

public BufferedImage (int width, int height, int imageType)  

  ImageType允许我们指定要缓冲的是什么类型的图形,比如5-位RGB、8-位RGB、灰度级等。

  3.8 使用VolatileImage

  许多硬件平台和它们的操作系统都提供基本的硬件加速支持。例如,硬件加速一般提供矩形填充功能,和利用CPU完成同一任务相比,硬件加速的效率更高。由于硬件加速分离了一部分工作,允许多个工作流并发进行,从而缓解了对CPU和系统总线的压力,使得应用能够运行得更快。利用VolatileImage可以创建硬件加速的图形以及管理图形的内容。由于它直接利用低层平台的能力,性能的改善程度主要取决于系统使用的图形适配器。VolatileImage的内容随时可能丢失,也即它是“不稳定的(volatile)”。因此,在使用图形之前,最好检查一下它的内容是否丢失。VolatileImage有两个能够检查内容是否丢失的方法:

public abstract int validate(GraphicsConfiguration gc);public abstract Boolean contentsLost();  

  每次从VolatileImage对象复制内容或者写入VolatileImage时,应该调用validate()方法。contentsLost()方法告诉我们,自从最后一次validate()调用之后,图形的内容是否丢失。

  虽然VolatileImage是一个抽象类,但不要从它这里派生子类。VolatileImage应该通过Component.createVolatileImage()或者GraphicsConfiguration.createCompatibleVolatileImage()方法创建。

  3.9 使用Window Blitting

  进行滚动操作时,所有可见的内容一般都要重画,从而导致大量不必要的重画工作。许多操作系统的图形子系统,包括WIN32 GDI、MacOS和X/Windows,都支持Window Blitting技术。Window Blitting技术直接在屏幕缓冲区中把图形移到新的位置,只重画新出现的区域。要在Swing应用中使用Window Blitting技术,设置方法如下:

setScrollMode(int mode);  

  在大多数应用中,使用这种技术能够提高滚动速度。只有在一种情形下,Window Blitting会导致性能降低,即应用在后台进行滚动操作。如果是用户在滚动一个应用,那么它总是在前台,无需担心任何负面影响。

- 作者: passersby23 2006年01月17日, 星期二 23:49  回复(0) |  引用(0) 加入博采

Call, CallB与CallP的区别

有点困惑,于是google了一下,有几篇E文讲得不错,试翻译并合并之

首先,CallB比Call快,因它调用的是已经静态绑定了的对象.但实际上CallP已经被不建议使用.
CallP是用来代替CallB和Call的。当你使用CallP时,你必须在D规范表中定义一个过程原型。在原型声明中,你可以定义静态或者动态绑定的调用连接。关键字EXTPROC被用来指定静态调用连接,而EXTPGM被用来指定动态调用连接。(缺省是静态绑定).因此当进行RPG IV编程时,建议全部使用CallP方式.

CallP和CallB,Call的主要区别在于CallP提供更好的参数类型检查。它同时也提供更丰富的功能如使用值传递或者常量传递参数。

通过定义一个相应的原型,可以很容易地用CallP去调用当前使用Call或者CallB调用方式的程序。只需检查*ENTRY PLIST中定义的变量的类型并定义一个具有跟它对应类型的参数的原型。需要注意的是CallP的类型检查比Call更严格,所以你定义参数的时候要非常小心。 例如,如果你想传递变长的字符型或者数组型参数就需要指定OPTIONS(*VARSIZE)选项。如果某些参数是可选的,你需要指定OPTIONS(*OMIT)或者OPTIONS(*NOPASS)选项。

你不需要对被调用的程序作任何改变来使得它可以被用CallP方式调用。如果你想利用新的语言特性,你可以为该程序定义一个过程接口来代替*ENTRY PLIST。 这样当为它增加新功能时,你可以使用子过程来进行编程。

当给模块定义原型时,我们建议把该模块的原形定义放在一个/COPY成员里然后在模块源代码其它所有调用该模块的模块的源代码里包含这个/COPY成员。

ILE Concepts里有更详细的关于400下模块化程序设计的说明.

- 作者: passersby23 2006年01月13日, 星期五 17:12  回复(1) |  引用(0) 加入博采

ZZ 一些平淡的话语教会我们如何生活


1.在当今世界上,你可以听到很多宽容、谅解甚至鼓励的话语,这些话往往很动听,但是这些话所铺就的道路,不是指向前方,而是宽阔的后路而已。

2.有很多人想先追求物质,再建筑精神家园,这种想法使他们的生活缺少了最起码的是非标准而不自知。

3.人生需要一定的纯度。不是每一个生活原则都可以那样轻易地通融、改变,甚至践踏;幸与不幸往往只在一念之间,那些看似平坦的捷径往往是以榨取人的心灵原汁为代价的。

4.对于普通人来说,有一点纯理论的关于情人的认知就已经足够了。

5.我认为最惨的是:自取其辱。

6.爱一个人,忘记一个人,恨一个人都不是一件容易的事情。它的不容易不仅仅在于深度,更在于跨度。

7.人不应该自私一点,人不可以自私一点,人应该对自己有一个把握,做自己能做的事情,然后对这个事情负责。

8.离开一个不怎么样的人,该庆幸;错过一个特优秀的人,那才值得遗憾。而优秀不是靠他在某一件事情上做得成功,得看他怎么做人。

9.爱有许多种,靠近是的,远离也是;开始是的,结束也是;行动是的,等待也是;记得是的,忘记也是。

10.那些被称为思想家留名于后世的人,至少做过一件事------写作,把他们的思想写下来。如果他们连这个也不做的好,就算他们想过一辈子最妙的念头,他们死了,也没了。

11.只要可以拿出来比的,都不算多。

12.对一份真挚的感情就是唯一的,没有什么我比你更如何,你比我还怎样的说法,不可比,不能比,无法比,没有可比性,因为不舍得比。

13.一般别人给你的回答往往可以非常冠冕堂皇,关键是你的感觉。

14.生活不完美,这没办法,我们总会发觉这边那边有缺,这缺口一时间还填不满,靠我们兴许半辈子,兴许一辈子努力地填。

15.如果有人对我说了这样的话,他就没有机会跟我说第二句话了。

16.我们一辈子有机会交往的人很多,何必在这种人身上费功夫?跟人交往我觉得有一点是很重要的,那就是欣赏。

17.你总能在这一个人的眼里是好人,就是好,好得无法让人替换。到这个份上,就算是恋爱了。如果虽然与你交往,但还会想你怎么这样,你怎么那样,你怎么都不如他。但凡有这些想法的,其实还没有到可以谈恋爱的地步。

18.放弃的最简单的方法就是去告诉他,然后被拒绝。

19.你所做的事,你所说的话,都是别人重复过的,所以说这一切都没什么了不起。

20.思念是一种病。

21.你也会有很多很多的机会去积累你的失望。有了足够多的失望之后你才可能平淡地面对。

22.不存在该不该只有想不想,以及告诉了之后能不能有你想要的结果。

23.你想得太多而行动太慢。一个心里装满事情的人,往往不受欢迎,是因为他的心太封闭。会想很多很多事情的人不受欢迎之处就在于:凡跟你打交道的人,都会觉得自己很傻。

24.什么样的人谈不成恋爱,可以做朋友呢?就是那种:我也觉得跟你在一起太累,你也觉得跟我在一起太累,我觉得咱们不谈恋爱兴许轻松,你也一样这样想;我也觉得其实你这个人不错,只要不跟你太近的话,你绝对是一个很不错的朋友,你也一样这样想,那么,这两个人就有可能在谈不成恋爱后做朋友。还有就是:我对你感觉很浅,就是觉得你很好的,但是我绝对不会为你死去活来,你呢非常爱我。当你爱上别人了,但是我觉得没有什么关系,本来嘛我对你的感觉就是淡淡的,你要跟别人谈恋爱那就谈吧。

25.所谓的曾经沧海,万一你这辈子就没有见过水,总共你见过的最多的水也就是你家浴缸的水,后来有一天你看见了太湖,那算是水了吧,然后我告诉你有大海你还不信,你说你可悲吗?万一再来一个人根本不跟你说海,劈头就给你来一个大洋,你更不信了。你说这是不是一种损失呢?所以说到底就得看你对自己经历的重视程度。如果你十四岁的时候,我就给你颁一个终身荣誉奖,你这一辈子也别干什么了,你还能超过这个荣誉吗?结论下的过早的坏处就在于此。

26.不管发生什么事情,不是每一个事情都值得这样去解释的。

27.亲密关系应该容的下一层面纱。

28.你是否认为赢得别人的尊重很重要?

29.爱,是没有错的,关键是为了爱,凭着爱,你做了什么?也许你凭着爱做的是错的,爱没有错,但,做错了。

30.他这个人不好,他就已经不在我的眼里了。

31.我觉得对每一个人来说,内心深处的那份感情都是很珍贵的,得看对象才给的,不是什么人来问你要就这样付出了。

32.别人的事情你负不了责,而应该为自己负责的时候你不要逃。

33.位不正,其言不顺。

34.两个人在一块儿,如果有什么问题的话,把责任推到第三方,说,那是因为谁出现了,或身不出现,所以我对你怎么样,说这种话的人太次了,这种人是没有资格谈“爱”这个词儿的。

35.记得,有时候记得就足够了,足够了。

36.当一样东西,可以有标价出售的时候,这样东西已经不值钱了。

37.生活中避免不了失落,生活中起起伏伏不可能一帆风顺,生活中有很多无奈,生活中你眼巴巴的看着别人生活得比你好,没有能力去改变自己的处境,因为你不可以拖人下水,做你的垫脚石,让你爬上岸。这是做人的原则。不可以这样对待别人的。每个人都是平等的,他不欠你的,不可以随便被你抓过来,往自己的脚底下垫的。

38.我不认为你可以成为别人的救世主,没有人会因为没有你而活不下去,恰恰相反。

39.没有规矩,无以成方圆,可是偏偏有那么一些人希望自己例外。

40.觉得自己活得不怕被任何人看到,不怕被任何人说起,不怕听到任何人的评论,而你有这份坦然吗?

41.有的人是有标价的,但是人的标价不像物品挂个牌子,只要你发现了他的标价,那你就知道了这个人不可贵了。

42.世界上好人很多,如果你对朋友的要求高一点的话,你身边的好人就会更多一点;如果你对朋友的要求提的低一点呢,你身边会有很多人,但是好人只占一定的比例,那就显的少一点。

43.爱一个人得因为爱了才去爱他的,你不能够说你的开心比他的开心重要。

44.你当然没有想过要伤害她,谁会杀了自己的宠物?既宠了就不会去伤害了,但是不平等。

45.感情供过于求的话,市场规律是怎样的,你应该知道。

46.你不是活在过去,而是活在现在。

47.面对心爱的人,不是每一个愿望都可以实现,不是每一次失望都导致怨恨,所以对自己说:多想飞进你的视线,只是想想而已。

48.如果懂得享受这一段张力的美,那是多么有意思的时光啊!

49.我知道你这个人有各种各样的缺点,可我只有和你在一起才最快乐。

50.谈恋爱最重要的一点就是平等。男人之所以不喜欢待自己过于好的女人,是因为这种消耗不持久,而且不是那种我要你才给我,而是不管我要不要你都要给我的。这种感觉不好,一般来说我们都是珍惜我们急需的东西,或期盼已久的东西,而不大珍惜随手可得的,富富有余的东西。

51.“你可以把我当疯子,可我自己知道再不说我就真疯了。”

52.能发现别人发现不了的他的美,是一种享受。

53.每个人以自己的行动对自己负责,你代替不了她的,替得一时,替不了一世。

54.爱有的时候不是施与别人的,不是付出了就没有了的,有爱的人心是满的,以爱作为筹码,以爱不换一些什么东西的人,心是空的。当他把爱付出的时候筹码就花光了,就像坐吃山空,那种人太可怜。你不可以亏欠这个世界,如果世界曾经亏欠你,那只是一时的,他会补偿你,但在未来。而如果你恨这个世界,你会被这个世界抛弃。生活在邪恶里的人,是不会有满足感的。

55.这个世界的确不会亏欠任何人,不能简单地用愤懑之心去抱怨命运。这个世界上或许没有命运,所有的只是你的一颗或柔韧或粗糙的心。如果你愿意以善心来看这个世界,那么有许多无可奈何之处,你要有足够多的同情;如果你不愿意,那么整个世界都会与你作战,所有的不公平都会在你的门口排着队等着你。而你会变的越来越愤世嫉俗,你会毫不留情一去利用这个世界去营造你想要的所有结果,不择手段而且理由充分。当你看到这个结果的时候,你又会看轻这个世界,看轻这个结果,你会认为这一切都没有什么了不起。所以,你努力或者放弃都那样的轻易,这一切的一切都是因为你辜负了这个世界,而现在世界以一段情感的漠然结束来提醒你:你不能用这样的态度来看待世界。

56.

57.他心里到底是怎么想的,整个过程到底是怎么走过的,只能是一个谜。然而,不是所有的谜都能揭开谜底的。

58.暗恋:这份感情很纯,装在密封口袋里的东西能不纯净吗?但是一个没有开始的故事很难结尾。

59.没有一个男人是靠乞求获得幸福的。

60.一个心中有爱的人,才会发现这个世界的美好和惊奇。

61.真正能够留住的记忆是需要呵护和培养的。

62.天上飘下的不是音符,而是灰尘;身边走过的不是有情有义,而是陌生;躺下去没有好猛,醒过来没有惊喜,世界就是这样平凡。

63.有人说,遗忘是一门世界上最难学的功课,因为需要忘记的东西不是装在脑子里,而是藏在心底。

64.所谓的冲淡,并不是说以前的一切都被淹没了,被磨损了,不是的。而是我有一间小屋,这个小屋或许只有四个平米,在这里我留下了很多的记忆,我一直希望有一个人与我共享这个空间。但是,这个人再也不来了,结果即使是这样一个小屋我也呆不下去了。于是,我就出去了。在毗邻的地方,我又盖了另一间全新的住所,也许它会比先前的那一间小屋大一点,但是有发生了什么问题,我还会离开,像离开那一间小屋一样。而后,我还会在毗邻的地方盖一座楼,以前的小屋还在那儿,只是我不会再去住了,它曾几何时是我生活的全部,而现在在我的生活当中,所占的比例已经小得微乎其微了。我想这样来解释时间会淡化一切比较合理一点。因为谁知道呢?在某一个兴致所致的午后,你会从高楼下来,造访那间小屋,或许你还会遇到那时的人,但是你的心情已经改变了,因为你已经拥有了新的生活,在你面对这间小屋的时候,也许你还会有亲切的感觉,但你的心毕竟不会在此停留了。

65.记得不记得不说明这个人重要不重要。这个记得不是此时此刻来评判的,是二十年五十年以后,你还记得你的初恋情人吗?到那个时候来评判的。

66.在生活当中,我们会从心眼里说很受冲击,很受震撼似乎不大可能,没有大风大浪不有机会去体验这种情感,更多的是很小很小的感动,是怦然心动,一点欣赏啊,一种心有灵犀的默契啊,就这么一点小东西,因为它太小太小,所以需要一颗敏锐的心去捕捉才能够不辜负。如果你打心眼里认定此处非巫山,此处没有云,那么,你除了错过还是错过。

67.一个人一辈子要记的东西很多,我们说得再近一点,就从今天算起往后退十年,发生的事情太多了,你所能记得的就是重要的,你记不清的就不那么重要。如果你有足够好的记忆力,或者有一个别的人来替你记忆,那么她会告诉你,你忘记了很多很多曾经让你情绪波动的事情。之所以你会忘记,是因为没有必要记得,它不重要。

68.一个根本不懂责任为何物,对自己的行为处事根本不负责任的人,就不要谈爱,不要去爱,不要伤害他人。

69.在她的心里有没有你原该早一点探知而一直没有探知的角落;在她的生活中有没你早该填补却无法填补的空白;爱你们的世界里有没有不应该存在却一直存在的对你而言的禁区;这一切组成了你所谓的突然。

70.笼统的说是因为寂寞。具体地说可不可能出现这样的情况:一个人,一颗心沉寂很久,本来想等这世界上最好的人来抚慰,等啊等,等到忘了等不下去的时候,来了个人。心里很清楚这不是最好的那一个,这不是正是等的那一个。可是因为寂寞,太久太久的寂寞,在“等”和“这一个”之间,选择了“这一个”。走到一起会有许多快乐,当然这些快乐是很实在的。这有点像你是一个代理皇权的人,真命天子大概游山玩水去了,哪天回来了,不管你是否曾经很好地治理过王国,因为他头戴金冠,他就可以对你说,现在你可以走了。故事就这样讲完了。这很不公平,很不应该,但是存在。

71.慢慢地忍受着吧,总会过去的。我们常说,应该珍惜每一个瞬间,珍惜此时此刻,就是因为会有你这种情形出现。我们在一起很开心很奢侈,却不自知,因为我们不知道哪一天是我们在一起的最后一天。如果知道大概会惶惶不可终日吧。因为不知道,才生活的那样奢侈。那一天来临了,回过头去想,好像有很多空挡本来可以填补的更好,后悔吧,要弥补只有将来。

72.要说失恋,我们一生中总会经理一次两次的吧,它可以教会我们怎么去珍惜每一种情感,怎么去尊重自己,然后学会尊重别人,学会用平常心看生活。

73.如果你是为了把这事儿忘了,所以才去做其他的事儿,那么这事儿是忘不掉的。因为这是你的目的,这是你做所有事情的目的,你做事情的时候怎么可能把目的给忘掉呢?你只能够因为这些事情有意义,有吸引力,去做了,才可能把这事儿忘掉。

74.爱一个人就会以他为骄傲,就会以为他是全世界最好的人;唯有不爱他,才有可能冷静的去判断他的缺点。

75.有的时候,我们会为了被爱的感觉而付出一点情感,但这不叫爱。当你为爱而爱的时候消耗是很大的,不知道你有多少能量去消耗?总之你现在能做的仅仅是为你自己要爱而去爱。有的事情尽管有指向性,可以说我是为了你这样我是为了你那样,但是实际上呢,这一切都是出于我自己的一种需求。我根本没有去关心你到底是要不要我这样做,而确确实实是我自己要做。所以这些帐不能算到对方的头上。即使你付出了再多也不是对方要你付出,你要付出没办法的。如果你老想着我已经为你这样做了你还不懂吗?我已经做到这个份上你还不心动吗?我已经这样努力了你还不回头吗?那想法就完全错了。对方可以对你说我不需要,然后离你而去。

76.生活中也许可以多交一点一些这样的朋友:如果多一点机会,兴许真可以走的很近,但是,如果没有机会的话,我们也不会因此而痛不欲生。

77.如果我拿出来的是手表,你拿出来的是指南针,看着像也没有用,那就只好各自走开,你找指南针,我找手表。

78.如果你真的要拒绝一个人,那么这个人在你的生活当中是没有位置的。至于他到底在哪,你是没有办法去关照的。

79.这个世界上没有免费的午餐,所以,你做任何事情不可能在先期的筹备当中,就把别人的帮助作为你自己预算的一部分。

80.我觉得不是没有好的老师,老师就在那儿,静静地在书架上,没有好学的学生,为什么?就因为浮躁。

81.如果你觉得你做的事情是正确的,而别人居然用异样的眼光看你,那么,你只需还他们同样一个异样的眼光就可以了。

82.多么私人的话,你会对街上的任何人去说吗?为什么你会对那个人讲?你把他当成什么人,你会对他讲那么私人的问题,这是一个位置问题。你不是想要摆正你们的位置吗?既然你把他放在这么近的位置,你怎么能责怪他亲近你?

83.一个你真的想要放弃的人,其实你什么都不必跟他说明;一个你真的想要放弃的人,不管他怎么来理解你的这种放弃都已经与你没有办法有关了。而你现在还是很想要把这个关系理顺。一个你真正想要摆脱的人是没有位置的。所以没有什么摆正你们彼此间的位置一说。

84.跟她见面之前心里头想着,这是因为爱她,所以只想和她在一起。快见到她的时候,只想着马上就要到了,再过几分钟就能够看到她了。在一起的时候,小小的走神想着:“啊,能在她的身边真好!”到说“再见”的时候想着再等一分钟,一分钟也好啊!这就是我所说的激情。

85.想一想吧,你对她的情感是否可以称为爱?想一想心里头寸着的这份感情是不是爱?如果这个世界没有这个人,你的世界会不会缺?如果有这个人你要把她放在哪里?你需要她在你的生活当中所占的份额到底有多大?然后你希望自己在对方的生活当中扮演的又是怎样的角色?你有很多人,在谈恋爱的时候会不知不觉地走入误区,那就是静止状态。栽连爱刚开始的时候,彼此有一种接近的愿望,等到差不多确立了关系之后,彼此都忘记主动去做点什么,而是坐享其成,感受着你应该给我的一切,至于我对你做的事情也不过是出于习惯而已,既然我曾经这样干过,那么就继续。这是恋爱吗?单一的营养会使植物不精神,也许你也在这个状态之中。要改变它的计划,与其很绝情地去想分手,不如先冲出这个让人窒息的氛围,再作别的打算。下决心大概需要一个月,分手需要一小时,和好却只需要一秒钟。

86.可能这是一个错不开的过程:握在手里时你不需要她,放开她你忽略她,她终于消失的无影无踪了。每个人以不同的状态存在:有的人只存在于意念,有的人存在于身边,能够连空间带心灵一块占据的人本来就不多,不必抱怨也不必遗憾,这是我们不够优秀才造成的局面。如果我们能力再强一点,也许我们就能够安排的很好,就不容自己错过任何自己真正想要的东西。而现在往往最珍贵的就这样在我们的身边划过去了,这是我们成长中的烦恼。

87.我看你们的问题是在于你们都不太会点菜,你们都饿了,你们都在饭店里,你们很明白什么东西是你们不要的,却不明白什么东西是你们要的,所以,你们根本不会对对方提要求,对方也没有办法来满足你们。

88.一个人虽然会愿意为了自己爱的人做一些改变,但是,这种改变绝对不可能触及到他真正的原则,谈恋爱的过程就是,让我们去了解一些我们所恪守的东西。如果你恪守的和我恪守的不矛盾,那么可以谈恋爱;反之,虽然你是好人,我也是,但是就是不能谈恋爱。谈恋爱是一种很自然的事情,不能够有一方说,好,我听你的,放弃我的,这是不行的。一定得是你的道理就是我的道理,我们讲这个到哦里,那才可以谈。

89.你们肯定在谈恋爱之前,就有了自己的标准。谈恋爱就是拿出自己的标准,对一对看看一样不一样,如果不一样是不是可以换算?换句话说,你们是不合适的,生活就是通过这样的形式来提醒你的。

90.如果你遇上的是一个好人也罢了,如果不是,只怕你付不起他要求你付的代价。

91.有的人是有这种本领,一辈子戴着假面具生活。单元我的世界里,不要有这种人混入,因为用真心去和戴着假面具的人交往太奢侈了!

92.我所能告诉你的答案只有一个字,那就是真,真实的真,真心实意的真,真诚的真,你能作对到吗?然后在真的基础上很可能需要添两个字,那就是持恒。如果没有这份真,你也没有什么可守的也没什么可持续的没什么可永恒的。如果你有了这份真,你真的觉得这份情感是你生命当中最重要的,为了她你愿意付出所有的一切,那么,你的这种信念持续的时间越长,你成功的可能性也就越大。恋爱,只能够有两个人参加,而且恋爱的排他性甚至于包括:当我一心想和你谈恋爱的时候,我根本就没有时间也没有心思去跟其他的异性交往,这种交往甚至包括见面打声招呼,我会忽略掉。

93.在你真正做到去面对一份感情,而且很严肃地去面对这份感情之前,你最好不要标榜自己为之付出了代价。

94.任何一种不良倾向都不应该得到鼓励,不是所有的弱者都应该得到同情。一个人满大街地去叫嚷:“我太痛苦了,我要去自杀。”并不说明他有资格获得帮助。有些事得自己来学着渡过难关,该让自己学着坚强。

95.有很多人,因为这样那样的原因,造成他们没有办法走到一起,他们都是好人,都是善良的人,都没存坏心眼,都特愿意为别人带来快乐和幸福。可就是不巧,你爱了他不爱,他爱了你不爱,怎么办呢?别人,“挥一挥手,不带走一片云彩。”

96.谈恋爱不能算复杂的事,只需要彼此真诚相见即可。

97.爱的痛苦就像毒药,不能通过加大计量去暂时的止疼,治病要治根。

98.我觉得人生最懊丧的事情是,你走进一幢你最喜欢的房子,你穿上你最喜欢的衣服,你露出最动人的笑容,突然灯光暗了,一个冰冷的声音告诉你,你的戏完了,走吧!而我要对你说的就是,在灯光暗下来之前离开。

- 作者: passersby23 2006年01月10日, 星期二 10:17  回复(0) |  引用(0) 加入博采

Meta标签详解(转载)

 Meta标签详解,在网上转的,希望对大家有用
  引言

  您的个人网站即使做得再精彩,在“浩瀚如海”的网络空间中,也如一叶扁舟不易为人发现,如何推广
个人网站,人们首先想到的方法无外乎以下几种:
  
  ● 在搜索引擎中登录自己的个人网站
  
  ● 在知名网站加入你个人网站的链接


  ● 在论坛中发帖子宣传你的个人网站


  很多人却忽视了HTML标签META的强大功效,一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性,有兴趣吗,谁我来重新认识一下META标签吧!


  META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之间,它提供用户不可见的信息。meta标签通常用来为搜索引擎robots定义页面主题,或者是定义用户浏览器上的cookie;它可以用于鉴别作者,设定页面格式,标注内容提要和关键字;还可以设置页面使其可以根据你定义的时间间隔刷新自己,以及设置RASC内容等级,等等。

 

  详细介绍


  下面介绍一些有关 标记的例子及解释。


  META标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。

 

  ★HTTP-EQUIV


  HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。常用的HTTP-EQUIV类型有:

 

  1、Content-Type和Content-Language (显示字符集的设定)


  说明:设定页面使用的字符集,用以说明主页制作所使用的文字已经语言,浏览器会根据此来调用相应的字符集显示page内容。


  用法:<Meta http-equiv="Content-Type" Content="text/html; Charset=gb2312">
      <Meta http-equiv="Content-Language" Content="zh-CN">


  注意: 该META标签定义了HTML页面所使用的字符集为GB2132,就是国标汉字码。如果将其中的“charset=GB2312”替换成“BIG5”,则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时,IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面META标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集,则IE就提示下载。其他的语言也对应不同的charset,比如日文的字符集是“iso-2022-jp ”,韩文的是“ks_c_5601”。
      
  Content-Type的Content还可以是:text/xml等文档类型;
  Charset选项:ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-Jis、Euc、Koi8-2、us-ascii, x-mac-roman, iso-8859-2, x-mac-ce, iso-2022-jp, x-sjis, x-euc-jp,euc-kr, iso-2022-kr, gb2312, gb_2312-80, x-euc-tw, x-cns11643-1,x-cns11643-2等字符集;Content-Language的Content还可以是:EN、FR等语言代码。


  2、Refresh (刷新)


   说明:让网页多长时间(秒)刷新自己,或在多长时间后让网页自动链接到其它网页。
   用法:<Meta http-equiv="Refresh" Content="30">
      <Meta http-equiv="Refresh" Content="5; Url=http://www.xia8.net">
   注意:其中的5是指停留5秒钟后自动刷新到URL网址。


  3、Expires (期限)


   说明:指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。
   用法:<Meta http-equiv="Expires" Content="0">
      <Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT">
   注意:必须使用GMT的时间格式,或直接设为0(数字表示多少时间后过期)。


  4、Pragma (cach模式)


   说明:禁止浏览器从本地机的缓存中调阅页面内容。
   用法:<Meta http-equiv="Pragma" Content="No-cach">
   注意:网页不保存在缓存中,每次访问都刷新页面。这样设定,访问者将无法脱机浏览。


  5、Set-Cookie (cookie设定)


  说明:浏览器访问某个页面时会将它存在缓存中,下次再次访问时就可从缓存中读取,以提高速度。当你希望访问者每次都刷新你广告的图标,或每次都刷新你的计数器,就要禁用缓存了。通常HTML文件没有必要禁用缓存,对于ASP等页面,就可以使用禁用缓存,因为每次看到的页面都是在服务器动态生成的,缓存就失去意义。如果网页过期,那么存盘的cookie将被删除。
   用法:<Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday,
       21-Oct-98 16:14:21 GMT; path=/">
   注意:必须使用GMT的时间格式。


  6、Window-target (显示窗口的设定)


   说明:强制页面在当前窗口以独立页面显示。
   用法:<Meta http-equiv="Widow-target" Content="_top">
   注意:这个属性是用来防止别人在框架里调用你的页面。Content选项:_blank、_top、_self、_parent。


  7、Pics-label (网页RSAC等级评定)
   说明:在IE的Internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级
      别就是通过该参数来设置的。
   用法:<META http-equiv="Pics-label" Contect=
               "(PICS-1.1'http://www.rsac.org/ratingsv01.html'
       I gen comment 'RSACi North America Sever' by 'inet@microsoft.com'
       for 'http://www.microsoft.com' on '1997.06.30T14:21-0500' r(n0 s0 v0 l0))">


   注意:不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置Microsoft Internet Explorer(IE3.0以上)来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自Microsoft的主页。代码中的(n 0 s 0 v 0 l 0)表示该站点不包含不健康内容。级别的评定是由RSAC,即美国娱乐委员会的评级机构评定的,如果你想进一步了解RSAC评估系统的等级内容,或者你需要评价自己的网站,可以访问RSAC的站点:http://www.rsac.org/


  8、Page-Enter、Page-Exit (进入与退出)


   说明:这个是页面被载入和调出时的一些特效。
   用法:<Meta http-equiv="Page-Enter" Content="blendTrans(Duration=0.5)">
      <Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)">
   注意:blendTrans是动态滤镜的一种,产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果:


      <Meta http-equiv="Page-Enter" Content="revealTrans(duration=x, transition=y)">
      <Meta http-equiv="Page-Exit" Content="revealTrans(duration=x, transition=y)">


       Duration  表示滤镜特效的持续时间(单位:秒)
       Transition 滤镜类型。表示使用哪种特效,取值为0-23。


       0 矩形缩小
       1 矩形扩大
       2 圆形缩小
       3 圆形扩大
       4 下到上刷新
       5 上到下刷新
       6 左到右刷新
       7 右到左刷新
       8 竖百叶窗
       9 横百叶窗
       10 错位横百叶窗
       11 错位竖百叶窗
       12 点扩散
       13 左右到中间刷新
       14 中间到左右刷新
       15 中间到上下
       16 上下到中间
       17 右下到左上
       18 右上到左下
       19 左上到右下
       20 左下到右上
       21 横条
       22 竖条
       23 以上22种随机选择一种


  9、MSThemeCompatible (XP主题)
   说明:是否在IE中关闭 xp 的主题
   用法:<Meta http-equiv="MSThemeCompatible" Content="Yes">
   注意:关闭 xp 的蓝色立体按钮系统显示样式,从而和win2k 很象。


  10、IE6 (页面生成器)
   说明:页面生成器generator,是ie6
   用法:<Meta http-equiv="IE6" Content="Generator">
   注意:用什么东西做的,类似商品出厂厂商。


  11、Content-Script-Type (脚本相关)
   说明:这是近来W3C的规范,指明页面中脚本的类型。
   用法:<Meta http-equiv="Content-Script-Type" Content="text/javascript">
   注意:


  ★NAME变量


  name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。
  name的value值(name="")指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值,如:creationdate(创建日期) 、
document ID(文档编号)和level(等级)等。
  name的content指定实际内容。如:如果指定level(等级)为value(值),则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。

 

  1、Keywords (关键字)
   说明:为搜索引擎提供的关键字列表
   用法:<Meta name="Keywords" Content="关键词1,关键词2,关键词3,关键词4,……">
   注意:各关键词间用英文逗号“,”隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时,搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如:
      <Meta name="Kyewords" Lang="EN" Content="vacation,greece,sunshine">
      <Meta name="Kyewords" Lang="FR" Content="vacances,grè:ce,soleil">


  2、Description (简介)
   说明:Description用来告诉搜索引擎你的网站主要内容。
   用法:<Meta name="Description" Content="你网页的简述">
   注意:


  3、Robots (机器人向导)
   说明:Robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。
   用法:<Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow">
   注意:许多搜索引擎都通过放出robot/spider搜索来登录网站,这些robot/spider就要用到meta元素的一些特性来决定怎样登录。


    all:文件将被检索,且页面上的链接可以被查询;
    none:文件将不被检索,且页面上的链接不可以被查询;(和 "noindex, no follow" 起相同作用)
    index:文件将被检索;(让robot/spider登录)
    follow:页面上的链接可以被查询;
    noindex:文件将不被检索,但页面上的链接可以被查询;(不让robot/spider登录)
   nofollow:文件将不被检索,页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找)


  4、Author (作者)
   说明:标注网页的作者或制作组
   用法:<Meta name="Author" Content="张三,abc@sina.com">
   注意:Content可以是:你或你的制作组的名字,或Email


  5、Copyright (版权)
   说明:标注版权
   用法:<Meta name="Copyright" Content="本页版权归Zerospace所有。All Rights Reserved">
   注意:


  6、Generator (编辑器)
   说明:编辑器的说明
   用法:<Meta name="Generator" Content="PCDATA|FrontPage|">
   注意:Content="你所用编辑器"


  7、revisit-after (重访)
   说明:
   用法:<META name="revisit-after" CONTENT="7 days" >
   注意:


  ★Head中的其它一些用法

 

  1、scheme (方案)
   说明:scheme can be used when name is used to specify how the value of content should
      be interpreted.
   用法:<meta scheme="ISBN" name="identifier" content="0-14-043205-1" />
   注意:


  2、Link (链接)
   说明:链接到文件
   用法:<Link href="soim.ico" rel="Shortcut Icon">
   注意:很多网站如果你把她保存在收件夹中后,会发现它连带着一个小图标,如果再次点击进入之后还会发现地址栏中也有个小图标。现在只要在你的页头加上这段话,就能轻松实现这一功能。<LINK> 用来将目前文件与其它 URL 作连结,但不会有连结按钮,用於 <HEAD> 标记间, 格式如下:
       <link href="URL" rel="relationship">
       <link href="URL" rev="relationship">


  3、Base (基链接)
   说明:插入网页基链接属性
   用法:<Base href="http://www.xia8.net/" target="_blank">
   注意:你网页上的所有相对路径在链接时都将在前面加上“http://www.cn8cn.com/”。其中target="_blank"是链接文件在新的窗口中打开,你可以做其他设置。将“_blank”改为“_parent”是链接文件将在当前窗口的父级窗口中打开;改为“_self”链接文件在当前窗口(帧)中打开;改为“_top”链接文件全屏显示。

 

  以上是META标签的一些基本用法,其中最重要的就是:Keywords和Description的设定。为什么呢?道理很简单,这两个语句可以让搜索引擎能准确的发现你,吸引更多的人访问你的站点!根据现在流行搜索引擎(Google,Lycos,AltaVista等)的工作原理,搜索引擎先派机器人自动在WWW上搜索,当发现新的网站时,便于检索页面中的Keywords和Description,并将其加入到自己的数据库,然后再根据关键词的密度将网站排序。


  由此看来,我们必须记住添加Keywords和Description的META标签,并尽可能写好关键字和简介。否则,
后果就会是:
  
  ● 如果你的页面中根本没有Keywords和Description的META标签,那么机器人是无法将你的站点加入数
    据库,网友也就不可能搜索到你的站点。


  ● 如果你的关键字选的不好,关键字的密度不高,被排列在几十甚至几百万个站点的后面被点击的可
    能性也是非常小的。


  写好Keywords(关键字)要注意以下几点:

 

  ● 不要用常见词汇。例如www、homepage、net、web等。


  ● 不要用形容词,副词。例如最好的,最大的等。


  ● 不要用笼统的词汇,要尽量精确。例如“爱立信手机”,改用“T28SC”会更好。

 

  “三人之行,必有我师”,寻找合适关键词的技巧是:到Google、Lycos、Alta等著名搜索引擎,搜索与
你的网站内容相仿的网站,查看排名前十位的网站的META关键字,将它们用在你的网站上,效果可想而知了。


  ★小窍门


  为了提高搜索点击率,这里还有一些“捷径”可以帮得到你:


  ● 为了增加关键词的密度,将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样)。


  ● 在图像的ALT注释语句中加入关键字。如:<IMG SRC="xxx.gif" Alt="Keywords">


  ● 利用HTML的注释语句,在页面代码里加入大量关键字。用法: <!-- 这里插入关键字 -->

 

<head>  
  <title>文件头,显示在浏览器标题区</title>  
  <meta http-equiv="Content-Language" content="zh-cn">  
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  <meta name="GENERATOR" content="Microsoft FrontPage 4.0">  
  <meta name="ProgId" content="FrontPage.Editor.Document">  
  <meta name="制作人" content="唐蓉生">  
  <meta name="主题词" content="HTML 网页制作 课件">
</head>

- 作者: passersby23 2006年01月9日, 星期一 16:56  回复(0) |  引用(0) 加入博采

人生
在人生的舞台上,演着自编自导的戏,所有的灯光都照在自己身上,在谢幕时却听不到一丝掌声,一声喝彩,我们都把自己当成悲剧的主角了,在自己泪流满面时以为台下的观众也泣不成声,其实我们都忘了,看完了悲剧,他们仍有办法让自己快乐。

- 作者: passersby23 2005年12月23日, 星期五 01:09  回复(0) |  引用(0) 加入博采

Focus, where is your focus?
因为专注,所以成功,什么都想要最终什么也得不到

- 作者: passersby23 2005年12月23日, 星期五 00:37  回复(0) |  引用(0) 加入博采

平行世界的故事
一九四五年的一天,克力富兰的孤儿院里出现了一个神秘的女婴,没有人知道她的父母是谁。她孤独地长大,没有任何人与她来往。 直到一九六三年的一天,她莫明其妙地爱上了一个流浪汉,情况才变得好起来。可是好景不长,不幸事件一个接一个的发生。首先,当她发现自己怀上了流浪汉的小孩时,流浪汉却突然失踪了。其次,她在医院生小孩时,医生发现她是双性人,也就是说她同时具有男女性器官。为了挽救她的生命,医院给她做了变性手术,她变成了他。最不幸的是,她刚刚生下的小女孩又被一个神秘的人给绑走了。这一连串的打击使他从此一蹶不振,最后流落到街头变成了一个无家可归的流浪汉。直到一九七八年的一天,他醉熏熏地走进了一个小酒吧,把他一身不幸的遭遇告诉了一个比他年长的酒吧伙计。酒吧伙计很同情他,主动提出帮他找到那个使‘他’怀孕而又失踪的流浪汉。唯一的条件是他必须参加伙计他们的‘时间旅行特种部队’。他们一起进了‘时间飞车’。飞车回到六三年时,伙计把流浪汉放了出去。流浪汉莫明其妙地爱上了一个孤儿院长大的姑娘,并使她怀了孕。伙计又乘‘时间飞车’前行九个多月,到医院抢走了刚刚出生的小女婴,并用‘时间飞车’把女婴带回到一九四五年,悄悄地把她放在克力富兰的一个孤儿院里。然后再把稀里糊涂的流浪汉向前带到了一九八五年,并且让他加入了他们的‘时间旅行特种部队’。流浪汉有了正式工作以后,生活走上了正轨。并逐渐地在特种部队里混到了相当不错的地位。有一次,为了完成一个特殊任务,上级派他飞回一九七零年,化装成酒吧伙计去拉一个流浪汉加入他们的特种部队。

- 作者: passersby23 2005年12月19日, 星期一 13:27  回复(0) |  引用(0) 加入博采

AS/400 问题集

1)function key CA 与 CF 的区别;
CA:It is to be used as a command attention (CA) key. No input data is transmitted from the device. Response indicators 01 through 99 are valid.

CF:It is to be used as a command function (CF) key to transmit changed data as opposed to a command attention (CA) key, which does not transmit changed data. Response indicators 01 through 99 are valid.

如果变更一个画面的一个FIELD的值,用CA来继续下面的操作,则这个FIELD还是初始值,而用CF来继续下面的操作则这个FIELD的值会被更新为画面上的值.就这个区别.
2)dataQ 与 data area 的区别;
3)chain 与 reade 的区别;
chain 只能定位读数据库第一条纪录;
reade 只能下顺序读取满足键值的纪录,不能返回读取(READPE),可能发生eof问题。

4)callb 与 callp 的区别
5)一个RPG程序中打开文件的最大数是多少?
RPG 400:
A maximum of 50 files can be described per program. Only one primary file can be
specified; however, the presence of a primary file is not required.
RPG ILE:
There is no limit for the maximum number of files allowed.
6)RPG程序中一个字符型变量的长度是多少?
    6)OS400下一个文件名的最大长度是多少?(对不起!我写不对了,没有这么简单的问题,呵呵。)
7)数字型数组的求和操作符是什么?

高级程序员:

1)procedure id 如何定义?长度 default 值是多少?
2)使用RPG程序,C表中非要写代码吗?

1) reset的用法!
清空一个record,比如屏幕的record pf的record
2) *cat, *tcat, *bcat
*cat 不去空格的加 *tcat去开头空格的加 *bcat 去末尾空格的加

1、RPG程序最多能定义多少个SUBFILE?自己最多有做个多少级的SUBFILE文件?
2、RPG程序的流程是什么?
3、自己参与过哪些项目?如果有参与,自己是担当什么角色?

1.  RPG  代表什么意思 ?
2.  如何读取一个文件的最后一条记录 (两个操作代码)
3.  SKIPA , SKIPB , SPAECE 的区别 ?
4.  在 CL 中如何获得用户名 ?
5.  CA,CF 以及 CHAIN ,READE 的区别。

- 作者: passersby23 2005年12月13日, 星期二 17:48  回复(0) |  引用(0) 加入博采

SubSystem 的定义
Subsystem 的定义。

定义一个subsystem主要是定义3个东西。
* storage pool
* job entries
* routing table

Storage Pool 定义这个子系统内存的大小和activity level。pool 有共享和独占两种。activity level 定义这个子系统的该共享池的类似优先级的东西。一个子系统可以有多个pool.

Job Entries ; as400规定所有的job必须从以下几个入口进入sybsystem. 1. Autostarted Job entry.(和子系统一同启动) 2. Workstation Job Entry(用户终端) 3. JobQueue Entry (后台作业)4. Communication Entry(通讯入口,没有实际job进入。) 5. Prestart Job Entry.(这些job不启动,但是已经进入了准备状态,通过COMMUNICATION ENTRY 进来的JOB可以调用这些job,速度快。)

Routing Table 是一个神奇的东西。可以根据你job的data(由管理员设定)把一个job转到别的subsystem中去。

2。 Job 的属性

400上没有velocity的东西给job定义。有时间片,有点像unix很不直观。每个job有自己的优先级,outqueue, library list, message queue. 不分测试作业和生产作业,没有@作业。

- 作者: passersby23 2005年12月13日, 星期二 16:55  回复(0) |  引用(0) 加入博采