人生亦编程

--Programmable Life
posts - 86, comments - 43, trackbacks - 0, articles - 7

    打开灯,凌晨4:30,我竟然醒了,毫无睡意,闭上眼,依稀是好友的面孔,高中的朋友,大学的朋友,仿佛又回到他(她)们身边的样子,看来我是寂寞了。耳旁依稀是以前喜欢听的一首歌,悲伤的、凄凉的、很多年不曾仔细听过、自从上大学以后、那首《浪人情歌》,看来我就钟意这悲伤的调调。
     昨晚是自己煮面吃的,七年了,七年不曾操刀,如今切起菜来,感觉就是一个大汉拿着绣花针对针眼(其实我宁愿做针线活的),每一刀都切的很慢,每一刀都切得很仔细,每一刀都像是在切一件艺术品......(我实在不知道说什么了,所以用省略号代替)。
     算了,突然没了写下去的兴致,继续睡觉吧,NIGHT!
      
                                                                                                                        --by-- 在寒风中叶落
                                                                                                                                                             06年9月1日

ps.这是晚上写的,所以没有条理的。

posted @ 2006-09-01 20:16 人生亦编程 阅读(71) | 评论 (0)编辑 收藏

有个叫profiler的工具,是用来检测代码效率的,现转用法如下,用得着的时候再去学它。

NetBeans IDE 4.1/5.0 Profiler 教程

本文旨在介绍配合使用 NetBeans Profiler v5.0 或 Profiler Milestone 8 的内容。如果您使用的是 Milestone 5,请使用此版本。如果您使用的是 Milestone 6,请使用此版本

预计持续时间:50 分钟

NetBeans Profiler 是一个功能强大的工具,它提供了有关应用程序运行时行为的重要信息。NetBeans Profiler 产生的开销相对来说较小,它可以跟踪线程状态、CPU 性能和内存使用情况。本教程将向您介绍如何使用 NetBeans Profiler 来完成以下操作:

  • 监视应用程序的运行时行为,其中包括:
    • 堆内存大小
    • 垃圾回收统计信息
    • 线程计数
    • 线程状态:运行、休眠、等待、受阻
  • 确定应用程序方法使用的 CPU 时间
  • 监视应用程序创建对象的过程

先决条件

本教程假定您已经具有了一些基本的 Java 编程和 NetBeans IDE 使用经验。

教程所需的软件:

  • 下载并安装 Java 2 Platform Standard Edition v5.0, Update 4(或更高版本)。请注意,NetBeans IDE 需要完整的 JDK,而不仅仅是 JRE。请记录此安装目录。
  • 下载并安装 NetBeans IDE v4.1 或 v5.0。请记录此安装目录。当系统提示您选择 JDK 时,请指定 v5.0, Update 4(或更高版本的)JDK。
  • 下载并安装用于 NetBeans IDE v5.0 的 NetBeans Profiler v5.0。如果使用的是 NetBeans IDE 4.1,请下载 Milestone 8
    Profiler 安装程序会要求您修改 NetBeans IDE 安装;请指定用于 NetBeans IDE 的安装目录。
    注意:Profiler v5.0 只能与 NetBeans IDE v5.0 一起使用;而 Profiler Milestone 8 只能与 NetBeans IDE v4.1 一起使用。
  • 下载教程 zip 文件,其中包括练习中使用的项目。

本文使用的表示法

  • <NETBEANS_HOME> - NetBeans IDE 安装目录
  • <USER_HOME> - 用户的 home 目录
  • <tutorial_root> - 解压缩教程 zip 文件所在的目录
    • 本文使用 <tutorial_root> 来表示解压缩此教程的 zip 文件所在的目录。此教程的 zip 文件的名称为 profilertutorial.zip
    • 将教程 zip 文件解压缩到 <tutorial_root> 目录时,系统会创建一个名为 netbeansprofiler 的子目录。例如,在 Windows 操作系统中,如果已将教程 zip 文件解压缩到驱动器 E:\ 的根目录中,则系统会创建 E:\netbeansprofiler 子目录。在 Solaris/Linux 操作系统中,如果已将教程 zip 文件解压缩到 /home/username 目录中,则系统会创建 /home/username/netbeansprofiler 子目录。

教程练习

参考资源:



练习 0:安装并配置教程环境

在开始学习教程之前,请先检查以下内容:

  1. 启动 NetBeans IDE,并确认 IDE 已打开。通过选择“性能分析”>“帮助”>“关于性能分析器...”,验证安是否装了 NetBeans Profiler。
    • 在 Windows 操作系统中,双击 NetBeans IDE 图标
    • 在 Solaris/Linux 操作系统中,打开终端窗口,然后键入 <NETBEANS_HOME>/bin/netbeans
  2. 仅限 NetBeans IDE v4.1:安装所需的修补程序。
    1. 从“工具”菜单中选择“更新中心”,以访问 NetBeans 更新中心。
    2. 确保选中了“NetBeans 修补程序更新中心”,然后单击“下一步”按钮。建立连接后,将显示一个更新列表。
    3. 在“NetBeans 修补程序更新中心”条目下,选择“NetBeans Profiler(J2EE 项目 - Tomcat5 支持)”。该操作还将自动选择 "Tomcat 5 Server" 条目。
    4. 单击“下一步”按钮,并按照说明进行操作以便 IDE 可以安装这些修补程序。




练习 1:监视 Swing 应用程序中的线程状态(15 分钟)

本练习的学习目的:

在本练习中,您将学习如何使用 NetBeans Profiler 监视 J2SE 应用程序中的线程状态。这样,您就可以诊断样例应用程序中的性能问题。

背景信息:

Swing 库为 J2SE 应用程序提供了图形用户界面组件。Swing 库会使用到多个线程,利用 NetBeans Profiler 这一功能强大的工具,您可以分析出每个线程所花费的处理时间,从而利用这些分析信息来解决性能问题。

执行步骤:

  1. 选择“文件”>“打开项目”。找到 <tutorial_root>/netbeansprofiler/exercises 文件夹。选择 exercise1 文件夹,然后单击“打开项目文件夹”按钮。
  2. 在“项目”窗口中,右键单击 exercise1 条目并选择“清理并生成项目”。然后,再次右键单击 exercise1 条目并选择“运行项目”。此时,将显示该程序的窗口,如下所示。

    查看应用程序的窗口

  3. 将 "Seconds Before Notification" 设置为 30。
  4. 单击 "Start!" 按钮。请注意,该程序无法正确地刷新屏幕。
  5. 单击 "Exit" 按钮。请注意,该程序根本不会作出响应。
  6. 将另一个窗口放在该窗口的某一部分上,以遮挡该窗口的视图。当移开另一个窗口时,您会注意到样例应用程序没有相应地刷新其窗口。如下面的示例所示。


  7. 30 秒后,最终将显示一个消息框,如下所示。单击消息框上的 "OK" 按钮。


  8. 应用程序窗口将再次开始响应。单击 "Exit" 按钮将其关闭。
  9. 选择“性能分析”>“分析主项目”。
  10. 如果出现一个对话框,询问您是否允许修改项目生成脚本,请单击“确定”。如下面的示例所示。


  11. 此时会显示“选择性能分析任务”对话框。单击占据较大区域的“监视应用程序”按钮。
  12. 应选中“启用线程监视”复选框。
  13. 单击“运行”按钮。如果显示一个对话框,指示您必须先收集 Profiler 的校准信息,请单击“确定”按钮。如下面的示例所示。

    选择“性能分析”>“高级命令”>“运行性能分析器校准”。完成校准后,Profiler 会显示一个对话框,请单击“确定”按钮。如下面的示例所示。

    要进行性能分析,请返回至上面的第 9 步。

  14. 完成上述步骤后,将启动该应用程序,并且 IDE 会显示“性能分析器”控制面板,如下所示。


  15. 性能分析器将在其主窗口中显示线程状态,如下面的示例所示。


    它使用颜色编码来显示线程状态。

    • 绿色:线程正在运行或准备运行。
    • 紫色:线程正在调用 Thread.sleep(),处于休眠状态。
    • 黄色:线程正在调用 Object.wait(),处于等待状态。
    • 红色:线程在尝试访问同步的块或方法时受阻。

  16. 找到样例 Swing 应用程序的窗口(NetBeans IDE 窗口可能在其上面)。单击样例应用程序中的 "Start!" 按钮,同时监视标记为 AWT-EventQueue-0 的线程所发生的变化。它将变为绿色并持续这种状态整整 30 秒钟,如以下样例所示。

    此图形显示了应用程序没有响应的原因。标记为 AWT-EventQueue-0 的线程是 Swing 用来处理窗口事件的事件分发线程 (Event Dispatch Thread, EDT)。在正常运行的 Swing 应用程序中,EDT 的大部分时间处于等待状态而运行的时间却很少,因为它只有在分发事件时才会运行很短的一段时间。但是,如果应用程序中的事件处理程序未立即返回,则程序将停止响应,就像在此示例中一样。

  17. 30 秒后,屏幕将显示应用程序的消息框。找到该消息框(NetBeans IDE 窗口可能在其上面)并单击 "OK" 按钮。然后,单击样例应用程序的 "Exit" 按钮,将其关闭。
  18. “项目”窗口与“性能分析器”控制面板共享同一个空间;单击“项目”标签将会显示“项目”窗口。
  19. 在“项目”窗口中,双击 exercise1 条目以将其展开,然后展开“源包”和 profilingthreads 条目。右键单击 DisplayForm.java 条目并选择“打开”。
  20. 在包含 DisplayForm.java 的编辑器窗口中,取消第 132 行至第 157 行的代码块注释。提示:如果未将编辑器配置为显示行号,请选择“视图”>“显示行号”。
  21. 在包含 DisplayForm.java 的编辑器窗口中,取消(或注释掉)第 122 行到第 128 行的代码块注释。下图突出显示了取消注释的代码块。


  22. 选择“文件”>“保存”。您刚才删除了未正确使用 EDT 的代码,并利用了更稳定可靠的解决方案来替代它。现在,应用程序可以及时地作出响应。
  23. 选择“生成”>“生成主项目”(或按 F11 键)。
  24. 选择“性能分析”>“分析主项目”。
  25. 将显示“选择性能分析任务”对话框。单击占据较大区域的“监视应用程序”按钮。
  26. 确保选中了“启用线程监视”。
  27. 单击“运行”按钮。
  28. 在显示样例程序时,单击 "Start!" 按钮。请注意,此时的性能分析线程图已经发生了变化,如以下示例所示。

    EDT 为黄色,应用程序创建的名为 "Our SwingWorker #1" 的线程为绿色。由于 EDT 不是用来执行耗时任务的,因此,按钮和其他程序控件仍保持响应的状态。

  29. 在样例程序中单击 "Exit"。
  30. 右键单击 Profiler 图形中的 AWT-EventQueue-0 线程,然后选择“线程详细信息”。Profiler 会显示一个饼图,表明了每种状态所花的时间;如以下示例所示。

    该图形可以帮助您判断程序在每个线程中所花费的时间是否恰当。上述示例是代码修复后的示例,因此,它显示了 EDT 在大部分时间中都处于等待状态的情形,这正好是该线程应具有的行为。

  31. 在“项目”窗口中,右键单击 exercise1 条目,然后选择“关闭项目”。

小结:

在本练习中,您学习了如何使用 Profiler 来启动应用程序,以及如何解释 Profiler 的线程信息图形,以此来跟踪 Swing 应用程序中的性能问题。

返回页首



练习 2:确定某个方法使用的 CPU 时间(15 分钟)

本练习的学习目的:

在本练习中,您将学习如何使用 Profiler 来确定某个应用程序的方法所花费的时间。

背景信息:

CPU 的性能问题通常与应用程序的特定功能有关。例如,在报告系统中,某个报告的运行速度可能比其他报告慢。只分析应用程序中出现性能问题的部分,可以大大减少性能分析器产生的开销。在本练习中,您将使用 NetBeans Profiler 来检查 Web 应用程序中 CPU 的使用情况。在练习 3 中,我们仍然使用该样例 Web 应用程序来说明如何通过 Profiler 查找内存泄漏。

执行步骤:

  1. 选择“文件”>“打开项目”。找到 <tutorial_root>/netbeansprofiler/exercises 文件夹。选择 exercise2 文件夹,并确保选中“作为主项目打开”。单击“打开项目文件夹”按钮。
  2. 在“项目”窗口中,单击 exercise2 条目,然后从菜单中选择“生成”>“清理并生成主项目”。
  3. 从菜单中选择“性能分析”>“分析主项目”。如果出现一个对话框,询问您是否允许修改项目生成脚本,请单击“确定”。
  4. 将显示“选择性能分析任务”对话框。
  5. 单击“分析性能”按钮。
  6. 选择“部分应用程序”单选按钮。然后,单击位于“部分应用程序”单选按钮旁边的“选择”按钮。此时将显示“指定根方法”窗口。

    注意:下面的三个步骤仅适用于 Milestone 8。

  7. 在“指定根方法”窗口中,单击“从项目添加...”按钮以添加要分析的根方法。将会显示“选择方法”窗口。
  8. 在“选择方法”窗口中,单击“选择”按钮。Profiler 将显示“选择类”窗口。
  9. 在“类名”文本字段中输入 Per。等待 IDE 为您显示适用的类列表。选择 Performance 类。单击“打开”按钮以打开其方法列表。

    注意:下面的两个步骤只适用于 Profiler v5.0。

  10. 在“指定根方法”窗口中,单击“从项目添加...”按钮以添加要分析的根方法。将会显示“选择方法”窗口。
  11. 在“类名”文本字段中,键入 demo.Performance,然后按 Enter 键。

    查看“选择方法”对话框

  12. 在根方法列表中单击 processRequest 方法以将其选中,然后单击“确定”按钮。您刚才已将 demo.Performance.processRequest 选中为性能分析的根方法。这意味着,性能分析器将分析 demo.Performance.processRequest 方法和它调用的所有方法,以及这些方法又调用的所有方法,依此类推。性能分析器将从 demo.Performance.processRequest 开始,通过分析方法调用图形来确定哪些方法需要分析。它将只分析那些需要分析的方法,应用程序的其余部分将在没有任何性能分析开销的情况下继续以最快的速度运行。
  13. 在“指定根方法”窗口中单击“确定”按钮。
  14. 在“分析性能”窗口中,从过滤器列表中选择“快速过滤器”,然后单击位于“快速过滤器”条目旁边的 "..." 按钮以指定进行分析的方法。将显示“设置快速过滤器”窗口。验证是否已选中了“排除”单选按钮。然后,在“过滤器值”文本字段中输入 org.apache 并单击“确定”按钮。这样,性能分析器将不分析所有 org.apache 包(及其子包)中的方法,即使这些方法被选定的根方法调用也是如此。这会减少性能分析的开销,并过滤掉无关的信息。

    “设置快速过滤器”对话框

  15. 在“选择性能分析任务”窗口中,单击“运行”按钮。如果出现一个对话框,要求您提供校准信息,请单击“确定”按钮;在性能分析器显示的对话框说明校准已完成后,请单击该对话框的“确定”按钮。
  16. IDE 将启动 Tomcat,并在 Web 浏览器窗口中显示 Web 应用程序的 index.jsp 页。同时,将在后台运行性能分析器。注意:缺省情况下,将在成为焦点的浏览器窗口中显示 index.jsp 页;您可能需要打开另一个浏览器窗口,以便在运行 Web 应用程序时可以阅读这些说明。
  17. 因为已选择了 demo.Performance.processRequest 作为根方法,所以,您需要使用导致该根方法运行的 Web 应用程序部分:在 Web 浏览器中,单击“性能问题”以转至“性能”演示页。在“性能”演示页上的输入文本字段中输入 123456。请不要选中“已优化”选项。单击“提交查询”按钮,计算小于或等于 123456 的最大素数。
  18. 需要几秒钟的时间才能出现响应,这是因为计算最大素数的算法存在一些性能问题,同时,在监视 processRequest 方法的性能时,性能分析器也会产生一些开销。
  19. 当浏览器中显示 "123449" 结果后,请单击 “获取结果”按钮 按钮,或者选择“性能分析”>“生成收集结果的快照”。单击位于 CPU 使用情况快照底部的“组合”标签。性能分析器将显示最新的性能结果,如下所示。

    查看性能结果。

    顶部窗口显示了从根方法开始的完整方法调用图形。底部窗口是重点描述的部分;它显示了应用程序中的热点,即执行时间最长的那些方法。

  20. 要查看并解释这些结果,请注意 processRequest 方法总共运行的时间为 4308 毫秒 (ms)。然而您会发现,运行 processRequest 方法本身的指令只花费了很少的时间,processRequest 的“自用时间”仅为 10.1 毫秒。绝大部分时间花在了 processRequest 调用的其他方法上。底部窗口中显示的热点是按“自用时间”进行排序的。通过查看该列表,您可以看到 calculate 方法占用了 97.8% 的执行时间。考虑到为 calculate 方法分配的工作量,这就不足为奇了。
  21. 为了帮助您确定如何优化应用程序,NetBeans Profiler 可以识别代码中无法预料的瓶颈,或者识别妨碍应用程序随意缩放的瓶颈。单击热点列表中的 calculate 条目以了解时间究竟花在什么地方,这会更新调用图形窗口以显示 calculate。因为 calculate 方法不调用任何其他方法,所以请右键单击 calculate 条目,然后选择“转至源代码”以便检查源代码。您会发现它使用了效率很低的算法,所以应该重新设计这种算法。
  22. 选择“性能分析”>“重置收集的结果”以清除性能分析器的缓冲区。要将 calculate 的运行时与优化的算法 calculate2 作比较,请在 Web 浏览器中选中“已优化”选项,然后单击“提交查询”。等待显示结果,然后重新选择“性能分析”>“生成收集结果的快照”。请注意,processRequest 方法只运行了 107 毫秒,而 calculate2 方法所花的时间还不到执行时间的 10%!

    查看性能结果。


  23. 注意:我们将继续在本练习的基础上进行下面的练习,因此,请不要关闭任何窗口。

小结:

在本练习中,您学习了如何使用性能分析器执行方法性能分析。

返回页首



练习 3:分析对象创建过程以查找内存泄漏(20 分钟)

本练习的学习目的:

作为练习 2 的后续练习,我们将在本练习中学习如何解释某些性能分析器的图形以监视应用程序创建对象的过程。下面将显示一个内存泄漏示例。

执行步骤:

  1. 本练习是在练习 2 的基础上进行的,因此,请务必遵循练习 2 中的步骤。
  2. 从菜单中选择“性能分析”>“分析主项目”。如果出现一个对话框,询问您是否要停止当前的性能分析器进程以启动新进程(如下所示),请单击“是”按钮继续执行。

    “停止并重新启动性能分析器”对话框

    将显示“选择性能分析任务”对话框。

  3. 在“选择性能分析任务”对话框中,单击占据较大区域的“监视应用程序”按钮。
  4. 单击“运行”按钮。IDE 将会在左侧显示“性能分析器”控制台。单击 查看“遥测概览”按钮 按钮,或者选择“性能分析”>“视图”>“遥测概览”。NetBeans Profiler 将在底部的输出窗口中显示三个图形,如下所示。

    查看监视器图形

    在左侧的图形中,红色的阴影部分表示分配的 JVM 堆大小。紫色的覆盖部分表示实际使用的堆空间大小。在上面的示例中,上次更新所分配的堆大小已超过了 20 MB。其中,实际用来保存 Java 对象的堆大小略大于 10 MB。

    右侧图形显示了 JVM 中的活动线程数。

    中间的图形显示了两种重要的堆统计信息。

    • 蓝线是 JVM 执行垃圾回收的时间占执行时间的百分比,它是以图形右侧上的 Y 轴为参照绘制的。JVM 执行垃圾回收所花的时间不能用来运行应用程序。因此,如果蓝线占据较大的百分比,则需要考虑调整 JVM,方法是:配置更大的堆大小(请参阅 -Xmx 参数文档),或者转换到不同的垃圾回收算法中。
    • 红线表示存活的生成数,它是以图形左侧的 Y 轴为参照进行绘制的。存活生成数是指 JVM 堆上所有 Java 对象不同生存期的数量,其中“生存期”被定义为对象存活时的垃圾回收次数。如果存活生成数的值较小,则表明堆上的大部分对象的存活时间基本相同。但是,如果存活生成数的值随着时间的变化而增长到一个很高的比率,则表明应用程序正在分配新的对象,同时保持对已分配的多个旧对象的引用。如果实际上不再需要这些旧对象,则应用程序正在浪费(或“泄漏”)内存。

  5. 性能分析器可以对 CPU 性能或内存使用情况进行详细的分析,但不能同时进行这两种分析。要了解有关在 JVM 堆上分配对象以及执行对象的垃圾回收的详细信息,请修改性能分析器的设置。单击 查看“修改性能分析”按钮 按钮,或者选择“性能分析”>“修改性能分析”。
  6. 单击“分析内存使用情况”按钮。
  7. 选择“记录对象创建和垃圾回收”单选按钮。
  8. 选中“记录分配的栈跟踪”复选框。
  9. 单击“确定”按钮。
  10. 现在,您已经选择了分析内存使用情况,您需要运行应用程序以确定它是否有效地使用了内存。单击“内存泄漏”以转至 MemoryLeak 演示页。
  11. 在 MemoryLeak 演示页上,单击“开始泄漏”。
  12. 请注意存活生成数图形中的峰值,如以下示例所示。这表明可能出现了内存泄漏。

    存活生成数图形所示的峰值。

  13. 选择“性能分析”>“视图”>“实时结果”。Profiler 将显示 JVM 堆中分配的对象的动态视图。缺省情况下,它将按每个类的所有实例使用的字节数进行排序。由于怀疑可能出现了内存泄漏,因此,请单击“生成数”列,按每个类的不同对象生存期数量对显示结果进行排序。下面显示了得到的显示结果示例。

    先前的生成数图形。
    这些列提供了对象分配和内存使用情况信息。

    • “分配的对象”是性能分析器正在监视的对象数。在本示例中,共监视了 38 个 float[] 实例。缺省情况下,该数字约为应用程序实际分配的对象数的 10%。通过只监视已创建对象的一部分,性能分析器可以显著地减少它在 JVM 中的开销,这样,应用程序就几乎可以按最快的速度运行了。
    • “活动对象”是仍在 JVM 堆中并因此占用内存的已分配对象数。
    • 两个“活动字节”列显示了活动对象所占用的堆内存量。一个列显示图形,另一个列显示文本。
    • “平均生存期”值是使用活动对象计算的。每个对象的生存期是它存活时的垃圾回收次数。生存期总和除以活动对象数得到的结果就是平均生存期。
    • “生成数”值是使用活动对象计算的。与平均生存期相同,对象生存期是它存活时的垃圾回收次数。“生成数”值是活动对象的不同生存期数量。

  14. 随着程序继续运行,性能分析器将更新显示结果。请留意 float[]double[] 条目。请注意其生成数值是如何持续增加的。结果是,float[]double[] 在列表中持续上移。最终,它们会显示在列表的顶部,紧靠 java.util.HashMap$Entry(其生代数值也在不断增加)下面。随着应用程序继续运行,java.util.HashMap$Entryfloat[]double[] 生成数值持续增加,但任何其他类没有增加。如下面的示例所示。

    后期的生成数图形。

  15. 要了解导致生成数值持续增加的原因,请选择“性能分析”>“生成收集结果的快照”。按生成数对显示结果进行排序。右键单击 double[] 条目,然后选择“显示分配栈跟踪”。性能分析器将显示所有分配了一个或多个 double[] 对象的方法。如下面的示例所示。

    double[] 栈跟踪。
    请注意,在分配了 double[] 对象的方法中,只有一个方法创建了具有较大生成数值的 double[] 对象。该方法是 run(),它位于具有相应名称 demo.memoryleak.LeakThread 的类中。

  16. 右键单击 run() 方法条目,然后选择“转至源代码...”。性能分析器将显示源代码,如下所示。引起泄漏的代码
    请注意,正在分配 double[]float[] 对象,并随后将其放在 HashMap 中。但一直并未删除它们,这意味着,HashMap 保留的引用将会妨碍 JVM 对这些对象进行垃圾回收。这是非常典型的 Java 内存泄漏:将对象放在 Map 中,然后就忘记处理它们了。由于本示例中使用的 Map 就是 HashMap,因此,关联的 java.util.HashMap$Entry 对象也出现了泄漏。

  17. 选择“性能分析”>“停止”来结束性能分析会话,或者单击 “停止”按钮 按钮。
  18. 在“项目”窗口中,选择 exercise2 条目,然后从菜单中选择“文件”>“关闭项目”。

小结:

在本练习中,您学习了如何使用性能分析器来监视应用程序创建对象的过程。您还看到了性能分析器在应用程序出现内存泄漏时所提供的各种类型的分析指数。

posted @ 2006-08-31 08:42 人生亦编程 阅读(531) | 评论 (0)编辑 收藏

   1,事业永远第一
  虽然金钱不是万能的,但没有钱是万万不能的,虽然这句话很俗,但绝对有道理,所以30岁之前,请把你大部分精力放在你的事业上.
  2,别把钱看得太重
  不要抱怨自己现在工资低,银行存款4位数以下,看不到前途,现在要做的就是努力学习,即使你文凭再高,怎么把理论运用到实践还是需要一个很长的锻炼过程,社会永远是一所最博大的大学,它让你学到的知识远比你在学校学到的重要得多,所以同样,你也别太介意学历低.30岁之前靠自己能力买车买房的人还是极少.
  3,学会体谅父母
  别嫌他们唠叨,等你为人父了你就知道可怜天下父母心,在他们眼里你还是个孩子,但他们真的老了,现在得你哄他们开心了,也许只要你的一个电话,一点小礼物,就可以让他们安心,很容易做到.
  4,交上好朋友
  朋友对你一生都影响重大,不要去结识太多酒肉朋友,至少得有一个能在关键时刻帮助你的朋友,如果遇到这么一个人,就好好把握,日后必定有用,不管他现在是富还是穷.
  5,别太相信爱情
  心中要有爱,但请别说也别相信那些琼瑶阿姨小说里面的山盟海誓,世上本无永恒,重要的是责任,但女人心海底针,心变了,一切都成枉然,你要做的就是该出手时就出手,该放手时别犹豫.30岁之前的爱情不是假的,但只是大多数人都没有能真正把握好的能力,所以学会量力而行.
  6,别担心至今还保留初吻
  爱情不在多而在精,别以为自己20多岁还没碰过女孩子就害怕自己永远找不到老婆
.以后你会有很多机会认识女孩子,要知道这个社会虽然男人多于女人,但现实是女人其实比男人更担心这个问题.男人30一枝花,你在升值而不是贬值,成熟的爱情往往更美丽更长久,所以不要像疯狗一样看到女孩就想追,学会品味寂寞.
  7,不要沉迷于任何东西
  所谓玩物而丧志,网络游戏是你在出校门之前玩的,你现在没有多余的时间和精力花费到这上面,否则你透支的东西以后都得偿还.一个人要有兴趣,爱好,但请分清楚轻重. ps.记得一个初中的好友给了我八个字:玩物丧志、玩人丧德。所以我一直过得都兢兢业业。
  8,年轻没有失败
  不要遇到挫折就灰心
,年轻人要时刻保持积极向上的态度.失败了,重来过;失去了,再争取别的。错过了,要分析,下次来,要把握;幼稚了,下次,成熟点。不要紧,会好的,哪怕到了极点,也不要放弃,相信一定可以挺过去。不要消极,会好的。曾经的错,过去了,总不能回味在过去。现在的,很好,累完了,很舒服。不要伤,总会有人在支撑你。
  9,不要轻易崇拜或者鄙视一个人
  人都有偶像,但请拥有你自己的个性.不要刻意去模仿一个人,因为你就是你,是唯一的,独一无二的,要有自信.也不要全盘否定一个人,每个人是有价值的,如果你不能理解他,也请学会接受.
  10,要有责任心.
  不管你曾经怎样,但请从现在开始做一个正直的人.男人要有责任心,无论是工作还是生活上,一个有责任心的人才能让别人有安全感,才能让别人觉得你是一个值得信赖的人.我们不要懦弱,但请不要伤害爱你的人和你爱的人,尤其是善良的女孩,因为这个世界善良的女孩不多了,即使不想拥有,但也请让她保持她美丽的心.
  11,男人的外貌并不重要.
  不要为自己的长相身高而过分担心,一个心地善良,为人正直的男人远比那些空有英俊相貌,挺拔身材但内心龌龊的男人要帅得多.如果有人以貌取人,请不要太在意,因为你不用去为一个低级趣味的人而难过.ps.感激涕零,终于遇到一个知音了......
  12,学会保护身体
  不要以为现在抽烟喝酒,熬夜通宵也没什么事.那是因为你的身体正处于你一生的黄金时段.30岁以后你就能明白力不从心这个实囊庖辶?身体是革命的本钱,没有好的身体什么也做不了,所以要尽量让自己过有规律的健康生活.
  13,别觉得一事无成.
  你现在还没有资格谈成功,当然如果你有千万资产的除外.一开始太固定的职业并不一定是好事,或许在不断的改行当中,你会学到更丰富的知识,而且可以挖掘出自己的潜能,找到最适合你的工作.
  14,请认真工作
  即使你现在的工作再怎么无聊再怎么低级,也请你认真去对待,要知道任何成功人士都是从最小的事做起,或许你现在学不到多么了不起的知识,但起码你要学会良好的工作态度和工作方法,这对以后很重要.
  15,请认真对待感情.
  不要羡慕那些换女人像换鞋一样的花花公子,逢场作戏的爱情只是让你浪费时间浪费精力,一个人最痛苦的不是找不到爱人,而是心中没有了爱,当你把我爱你3个字变成你最容易说的一句话时,那么你在爱情的世界里已经很难找到真正的幸福了.爱情没有公平,总有一个人比对方付出得多,即使没有结果,也别觉得不值,因为你的付出不光是为了她,也是为了你自己的爱,为爱付出是很可贵的,赞自己一下.
  16.请留一点童心
  在内心深处,哪怕只是一个很小的角落里,请保持一份童心,不是幼稚,但有的时候单纯一点会让你很快乐.所以不要太计较得失,生活本无完美.


ps.深合吾心。

posted @ 2006-08-28 19:43 人生亦编程 阅读(133) | 评论 (0)编辑 收藏

         在德国“莱比锡游戏展2006(Game Convention 2006)”大展上,美国暴雪公司(Blizzard)首席运营官Paul Sams暗示,《星际争霸2(Starcraft2)》将有可能在2007年面世。

  在接受媒体采访时,这位暴雪公司COO表示,《星际争霸》是他一直以来最喜欢的游戏之一。暴雪公司目前正在同时开发三款不同的游戏,而他自己将有幸成为向世界玩家公布《星际争霸2》的第一人。

  此外,他暗示暴雪公司将在2007年召开公司主线产品的发表会,但没有提供有关此次会议以及即将在发表会上公布的产品的细节资料。媒体广泛猜测,《星际争霸》和《 暗黑破坏神 (Diablo)》新作即将出现在此次发表会上。

posted @ 2006-08-28 13:01 人生亦编程 阅读(154) | 评论 (0)编辑 收藏

         乔布斯去年在斯坦福大学毕业典礼上的讲话。
  下面是演讲原文的节选。
  今天我非常荣幸来参加你们的毕业典礼。我自己从来没有从大学毕业,所以今天应该是我距离毕业典礼最近的一次。今天我只想给你们讲三个我生活中的真实故事。仅此而已,没有什么长篇大论,就是三个故事。
  第一个故事是关于把点连成线。
  十七岁的时候,我进了大学。当时我很天真,选了一所学费几乎和斯坦福大学一样昂贵的学校,当工人的养父母倾其所有的积蓄为我支付了大学学费。读了六个月后,我却看不出上学有任何意义。我既不知道自己这一生想干什么,也不确定大学能帮我弄明白自己想干什么。所以,我决定退学。当年做出这个决定的时候心里还有点打鼓,但现在往回看,那却是我有生以来做出的最好的决定之一。从退学那一刻起,我就可以不再选那些我毫无兴趣的必修课,而开始去旁听一些在我看来更有意思的课。
  当时,我所在的学校的书法课大概是全国最好的。校园里所有的公告栏和每个抽屉标签上的字都写得非常漂亮。我退学后不用正常上课了,所以我决定选一门书法课,学学怎么写好字。
  当时我并不指望书法在以后的生活中能有什么实用价值。但是,十年之后,我们在设计第一台 Macintosh 计算机时,以前学的书法一下子浮现在我眼前。于是,我们把这些东西全都设计进了计算机中。这是第一台有这么漂亮的文字版式的计算机。要不是我当初在大学里偶然选了这么一门课,Macintosh 计算机绝不会有那么多种印刷字体或间距安排合理的字号。要不是退了学,我也不会碰巧选了那门书法课。当然,我在大学里不可能把当时的点向前延伸,连成一条线;但是现在回过头去看,那条线却无比清晰。
  你们现在同样不可能从现在这个点上连出通向未来的那一条线。只有当你回头看时,才会发现这些过去的点其实已经画出了那条线。所以,要相信每一个点迟早都会连接到一起。
  第二个故事是关于好恶与得失。
  幸运的是,我在很小的时候就发现自己喜欢做什么。我在 20 岁时和沃兹在我父母的车库里办起了苹果公司。我们干得很卖力,十年后,苹果公司就从车库里我们两个人发展成为一个市值 20 亿美元、拥有4000多名员工的大企业。而在此之前的一年,我们刚推出了我们Macintosh电脑,当时我刚过而立之年。可后来,我被解雇了。你怎么会被自己办的公司解雇呢?是这样,随著苹果公司越做越大,我们聘请了一位我认为非常有才华的人与我一道管理公司。在开始的一年多里,一切都很顺利。可是,随后我俩对公司前景的看法开始出现分歧,最后我俩反目了。这时,董事会站在了他那一边,所以在30 岁那年,我离开了公司,而且这件事闹得满城风雨。我成年后的整个生活重心都没有了,这使我心力交瘁。
  一连几个月,我真的不知道应该怎么办。这次失败弄得沸沸扬扬的,我甚至想过逃离硅谷。但是,渐渐地,我开始有了一个想法——我仍然热爱我过去做的一切。在苹果公司发生的这些风波丝毫没有改变这一点。于是,我决定从头开始。
  虽然当时我并没有意识到,但事实证明,被苹果公司炒鱿鱼是我一生中碰到的最好的事情。尽管前景未卜,但从头开始的轻松感取代了保持成功的沉重感。这使我进入了一生中最富有创造力的时期之一。
  在此后的五年里,我开了一家名叫 NeXT 的公司和一家叫Pixar的公司,我还爱上一位了不起的女人,后来娶了她。Pixar公司推出了世界上第一部用电脑制作的动画片《玩具总动员》,它现在是全球最成功的动画制作室。世道轮回,苹果公司买下 NeXT 后,我又回到了苹果公司,我们在 NeXT 公司开发的技术成了苹果公司这次重新崛起的核心。我和劳伦娜也建立了美满的家庭。
  我确信,如果不是被苹果公司解雇,这一切决不可能发生。这是一剂苦药,可我认为苦药利于病。有时生活会当头给你一棒,但不要灰心。我坚信让我一往无前的唯一力量就是我热爱我所做的一切。所以,一定得知道自己喜欢什么,选择爱人时如此,选择工作时同样如此。工作将是生活中的一大部分,让自己真正满意的唯一办法,是做自己认为是有意义的工作;做有意义的工作的唯一办法,是热爱自己的工作。你们如果还没有发现自己喜欢什么,那就不断地去寻找,不要急于做出决定。就像一切要凭着感觉去做的事情一样,一旦找到了自己喜欢的事,感觉就会告诉你。
  我的第三个故事是关于死亡。
  17 岁那年,我读到过这样一段话,大意是:“如果你把每一天都当作生命的最后一天过,总有一天你的假设会成为现实。”我记住了这句话,从那时起,33 年过去了,我每天早晨都对著镜子扪心自问: “假如今天是我生命中的最后一天,我还会去做今天要做的事吗?”如果一连许多天我的回答都是“不”,我知道自己应该有所改变了。
  大约一年前,我被诊断患了癌症。那天早上七点半,我做了一次扫描检查,结果清楚地表明我的胰腺上长了一个瘤子,可那时我连胰腺是什么还不知道呢!医生告诉我说,几乎可以确诊这是一种无法治愈的恶性肿瘤,我最多还能活 3 到 6 个月。
  我整天都想着诊断结果。到了晚上,我做了一次组织切片检查,他们把一个内窥镜通过喉咙穿过我的胃进入肠子,用针头在胰腺的瘤子上取了一些细胞组织。当时我用了麻醉剂,陪在一旁的妻子后来告诉我,医生在显微镜里看了细胞之后叫了起来,原来这是一种少见的可以通过外科手术治愈的恶性肿瘤。我做了手术,现在好了。
  这是我和死神离得最近的一次,我希望也是今后几十年里最近的一次。有了这次经历之后,现在我可以更加实在地和你们谈论死亡,那就是:谁都不愿意死。即使是那些想进天堂的人也不会愿意为了进天堂而去死。然而,死亡是我们共同的归宿,没人能摆脱。我们注定会死,因为死亡很可能是生命最好的一项发明。它推进生命的新辰换代。现在,你们就是新的,但在不久的将来,你们也会逐渐成为旧的,也会被淘汰。
  你们的时间都有限,所以不要按照别人的意愿去活,这是浪费时间。不要让别人观点的聒噪声淹没自己的心声。最主要的是,要有跟着自己感觉和直觉走的勇气。无论如何,感觉和直觉早就知道你到底想成为一个什么样的人,其它的都不重要

posted @ 2006-08-25 12:26 人生亦编程 阅读(103) | 评论 (0)编辑 收藏

一个新手去收高利贷,他把借条拿出来*笑着说:白纸黑字明明白白地写着你欠我100万!难道你想赖帐?!人家表示确实没有那么多钱,他威胁道:哼哼!别怪我没提醒你!明天再交不出钱,你的房子就像它一样——他掏出打火机就把借条烧了……

一只老鼠被猫追赶,误入花店。老鼠发现无路可逃,顺手抱起一束玫瑰花当武器,作顽强抵抗……猫惊呆了,立马低下了头,羞涩地说:死鬼,太突然了…….


护士:“医生,不好了!刚才那个病人吃了我们给她的药,一出诊所的们就晕倒了!”医生:“赶快,把她的身体翻个个儿,摆成是刚刚进门的样子!”


执行死刑的警官走进牢房,一边抖着雨衣一边向犯人宣布命令,犯人惊异地说:冒这么大的雨去刑场?警官说:你有什么可抱怨的,我还得冒着雨回来呢!


唐僧:此番取经应当找个快捷方式!

    悟空:坐飞机比骑马快!

    八戒:神六更快!

    沙僧拿出一支枪:听说这玩艺儿立马就送人上西天。


一个人骑摩托车喜欢反穿衣服,就是把扣子在后面扣上,可以挡风。一天他酒后驾驶,翻了,一头栽在路旁。

  警员赶到后...

  警员甲:好严重的车祸。

  警员乙:是啊,脑袋都撞到后面去了。

  警员甲:嗯,还有呼吸,我们帮他把头转回来吧。

  警员乙:好.....一、二使劲,转回来了。

  警员甲:嗯,没有呼吸了......


问: 世界上最最黑暗的动漫人物是谁?

答: 机器猫

为什么: 因为他伸手不见五指

问: 世界上最富有同情心的动漫人物是谁?

答: 还是机器猫

为什么: 因为他总是向人伸出 圆手 !


一对情侣吵架。女:“你每一样东西都比不上任何人!”男:“对,尤其是女朋友!”


女:你喜欢我天使的脸孔,还是魔鬼的身材?男:我……我喜欢你的幽默感。


一高中男孩,半夜打电话给他女友谈情说爱。

很不幸被女孩的母亲接到,问明来意后女友的母亲很不悦地问:「你姓啥?」

男孩说:「我姓魏。」

母亲又问:「魏什么?」

这时男方紧张的回答:「我也不知道为什么?我爸也姓魏。」


一个人在沙漠里快要饿死了,这时他捡到了神灯。

神灯:“我只可以实现你一个愿望,快说吧,我赶时间。”

人:“我要老婆……”

神灯立刻变出一个美女,然后不屑的说:“都快饿死了还贪图美色!可悲!”说完就消失了。

人:“……饼。”

(老婆饼是一种糕点)


小米粒:“妈妈,我饿!”

米妈妈:“乖,爸爸找不到工作,家里已经没有吃的了。”

小米粒:“可是我饿~~~”

米妈妈:“唉……好吧,你去隔壁借点咸菜,我去给你爸爸烧洗澡水。”


有一人独自在森林中冒险,突然发现自己被食人族重重包围。于是对天空大喊:“我死定了,上帝救救我!”

只见天空出现一到光传来一个声音:“还不一定,你再捡起地上一颗大石头,把带头的酋长砸死。”于是他捡起地上最大的一颗石头,狠狠的砸向酋长,正好把酋长砸死。族人全都呆了一呆,接着怒目相向,这时天上又传来一阵声音:”现在你才真的死定了。”


一个伐木工人去应征工作

工头:前面的树林你去试试看...看你一分钟能锯几棵树.....

过了一分钟....

工头:哇....一分钟20棵....太厉害了.....你以前在哪工作的?

工人:撒哈拉森林......

工头:没听过ㄝ......我只听过撒哈拉沙漠ㄝ......

工人:对啊.....后来改名字啦


警察:“说,你叫什么?”

犯人:“我叫成龙。”

警察:“你怎么不叫陈真,给我把态度放端正了~好好说你叫什么~?”

犯人:“我叫陈真。”


王先生的儿子读小学三年级时,有一天又因数学屡教不会,

被他个性急躁的妈妈痛骂。

王先生在书房外,听到儿子被骂得很惨,

心想等一下儿子被骂完出来,我要安慰他一下,免得在他小心灵里留下被骂的阴影。

儿子被骂完,垮着一张脸出了书房,

为先了解他被痛骂后心里的感受,王先生先问他:「被妈妈骂,你有什么感觉?」

只见儿子用哀怨的眼神看着他说:

「你为什么要娶她?」


有两个外国人到家乐福去购物,结帐时,店员问:「Can you speak chinese?」

  两个外国人用国语回答:「如果你讲慢一点的话,我们可以听的懂!」

  店员说:「Can...you...speak...chinese?」


西班牙跳舞

國內某位人士,有一次因公至西班牙。

某天晚上有一場舞會,這位人士帶著夫人去參加,可是到達會場時,舞會已經開始了,於是他拉著夫人往空無一人的舞池,兩人便翩翩起舞!音樂結束後,卻發覺全場的人都在舞池旁,瞪大了眼睛看他們倆人....

他就問他的西班牙朋友:「為什麼你們不一起跳舞呢?」

他的西班牙朋友說:「...剛剛是西班牙國歌耶!!」


电影院里。

女:你怎么把橘子皮扔在地上啊?

男:怎么,难道要让我扔橘子肉吗?


一对恩爱甚笃的夫妇正庆祝他们的金婚日。

看热闹的中年邻居问老生先说:

「为什么你们可以维持五十年幸福美好的婚姻,打从我出生起,就未曾听过你们吵架的声音,难道你们之间从来没有任何的争执吗?」

老先生说:「争执当然是有的,不过都不会扩大。我从蜜月旅行的时候就懂这个道理了...记得当时交通不便我们到大峡谷去度蜜月,一个人各雇了一匹驴子。

她的驴子显然好吃懒做,走没有多久就赖在路边休息。

我只听到我太太冷冷地说:『第一次。』

驴子第二次想偷懒的时候,她又指着驴子说:『这是第二次。』

当驴子第三次不肯走时候,她不慌不忙的掏出她租用的手枪,就把它给毙了!」

中年邻居老先生诧异说:「尊夫人真是太残忍了!」

老先生说道:「可不是吗?我看不过去停在路边指责她的不是。她并不跟我争辩只是冷冷地对我说:『第一次』。」


小张在国中教书,人长得高高帅帅的,但只要一紧张,讲话就会口吃。

有一次月考监考时,他发现有一位学生低着头翻书找答案;他气急败坏,指着作弊的学生大吼:「你、你、你、你、你、你竟敢作弊,给我站起来!」话一说完,立刻有六个学生站了起来。

posted @ 2006-08-25 12:25 人生亦编程 阅读(95) | 评论 (0)编辑 收藏

1.最大的游戏:传送之物:逝者的镇魂歌》 25.6G

   目前最大的游戏就是即将于8月31日在XBOX360上推出的S.RPG游戏巨作<传送之物:逝者的镇魂歌>,测试版容量为25.6G。

2.世界上最小的3DFPS游戏  90K

3.世界上占用面积最大的游戏  

   2000平米的俄罗斯方块游戏,这个巨大的游戏使用了一幢11层高的大楼,超过10,000个的圣诞节小彩灯,在一台Linux电脑的控制下,完成了这个不可思议的游戏。

 

4.世界上最无聊游戏——《Desert bus》,同时它也是跳票时间最长的游戏,11年!
  这款游戏的目标非常简单:把一辆巴士从美国亚利桑那州土桑市开到拉斯维加斯。不过游戏中的时间和现实中同步,也就是说游戏至少需要耗时8个小时,更“妙”的是游戏中看不到任何风景,甚至连1辆车都没有,道路两侧只有无尽的沙漠。而且你的巴士车有点问题,总是会慢慢向右偏,因此还需要时不时按下左转键校正方向,想在开车的8小时内做其它事几乎是不可能的。传说如果你能把巴士成功开到终点,可以在游戏中得到1分!看到这里相信大家都能理解这款游戏为何没有发布。

5.世界上最早的网络游戏  《UO网络创世纪》
  今日大多数网络游戏设计者,其创意启蒙来源大都来自同一个网络游戏--《UO网络创世纪》,而《UO网络创世纪》的历史可谓相当悠久,也形成了自从 1997 年以来,估计有超过5000名玩家因游戏结识进而成为夫妻!

6.世界上最贵的游戏 全球最贵的游戏软件,价值20000英镑的《2006 FIFA世界杯》

 

7.世界上最早的电子游戏<ping>
  1972年,美国的雅达利公司的<ping>是模拟两个人打乒乓球,就是在两条线中间有一个点在动。当时是很著名的游戏……操纵器就是当年一个摇杆上有一个按钮的那种。很可惜这个没有画面。

8.世界上卖出做多的游戏 最终幻想系列


  至尽以公布的有13作发售:1987年12月28日 机种:FC 发售量:52万份
  最终幻想2
  发售:1988年12月17日 机种:FC 发售量:76万份
  最终幻想3
  发售:1990年4月27日 机种:FC 发售量:140万份
  最终幻想4
  发售:1991年7月19日 机种:SFC 发售量:144万份
  最终幻想5
  发售:1992年12月6日 机种:SFC 发售量:245万份
  最终幻想6
  发售:1994年4月2日 机种:SFC 发售量:日本国内300万份
  最终幻想7
  发售:1997年1月31日 机种:PS,PC 发售量:846万份
  最终幻想战略版
  最终幻想8
  发售:1999年2月11日 机种:PS 发售量:687万份
  最终幻想9
  发售:2000年7月6日 机种:PS 发售量:550万份
  最终幻想10
  发售:2001年7月19日 机种:PS2 发售量:300万份
  最终幻想12
  首批出货达到200万套统计中

9.世界上补丁做多的游戏——WAR3 27个补丁

10.序作最多的游戏——EA的FIFA系列  从93开始大家自己数,还包括足球经理。

 

posted @ 2006-08-23 21:44 人生亦编程 阅读(150) | 评论 (0)编辑 收藏

以前是井底之蛙,不入其门,不闻其道,殊不知有很多需要学习的。
现在是水煮青蛙,适应了环境,却不会发现越来越热的水。

posted @ 2006-08-23 21:15 人生亦编程 阅读(46) | 评论 (0)编辑 收藏

今天第一次看到海的样子。
和想象中的差远了,没有蓝天,没有碧浪,没有海风......
当时的感觉,还不如过武汉长江大桥时那么深刻,长江的水的确会让人感到恐惧。这里的海没有什么特别的,近处是船家,以船为家的贫苦人,远处是白茫茫一片,依稀可见香港的轮廓,海边是黑色的岩石,没有沙,没有海浪。
这就是海的初见。

posted @ 2006-08-19 13:29 人生亦编程 阅读(79) | 评论 (0)编辑 收藏

老徐说:“钢琴,我最钟爱的乐器,哀而不伤,快乐但绝不轻浮。”
原来如此,怪不得我那么喜欢钢琴,原来是这个原因。

posted @ 2006-08-18 08:45 人生亦编程 阅读(105) | 评论 (0)编辑 收藏

仅列出标题
共9页: 1 2 3 4 5 6 7 8 9