posts - 195, comments - 34, trackbacks - 0, articles - 1

Eclipse下的重构:

什么是重构
重构是指在保持程序的全部功能的基础上改变程序结构的过程。重构的类型有很多,如更改类名,改变方法名,或者提取代码到方法中。每一次重构,都要执行一系列的步骤,这些步骤要保证代码和原代码相一致。


重构的理由:为整理,为扩展,为优雅。

在Eclipse下的重构:

重构会关联多个文件,在一次重构时,不可再修改并保存文件,重构无法撤销或重做。

Eclipse中的重构类型
       如果你看一下Eclipse的重构菜单,可以看到四部分。第一部分是撤销和重做。其他的三部分包含Eclipse提供的三种类型的重构。
第一种类型的重构改变代码的物理结构,像Rename和Move。第二种是在类层次上改变代码结构,例如Pull Up和Push Down。第三种是改变类内部的代码,像Extract Method和Encapsulate Field。这三部分的重构列表如下。
 
类型1 物理结构
l         Rename
l         Move
l         Change Method signature
l         Convert Anonymous Class to Nested
l         Convert Member Type to New File:内部类提出一个单独类。
 
类型2 类层次结构
l         Push Down:将父类中方法或成员移到子类。
l         Push Up
l         Extract Interface
l         Generalize Type (Eclipse 3)
l         User Supertype Where Possible
类型3 类内部结构
l         Inline
l         Extract Method
l         Extract Local Variable
l         Extract Constant
l         Introduce Parameter:引进参数替换local var
l         Introduce Factory
l         Encapsulate Field


表从Eclipse帮助中提取,列出了各种重构支持的Java资源类型,对应的快捷键。

 

 

名字
可应用的Java元素
快捷键
Undo
在一次重构后可执行
Alt + Shift + Z
Redo
在一次撤销重构后可执行
Alt + Shift + Y
Rename
对方法,成员变量,局部变量,方法参数,对象,类,包,源代码目录,工程可用。
Alt + Shift + R
Move
对方法,成员变量,局部变量,方法参数,对象,类,包,源代码目录,工程可用。
Alt + Shift + V
Change Method Signature
对方法可用。
Alt + Shift + C
Convert Anonymous Class to Nested
对匿名内部类可用。
 
Move Member Type to New File
对嵌套类可用。
 
Push Down
对同一个类中成员变量和方法可用。
 
Pull Up
对同一个类中成员变量和方法,嵌套类可用。
 
Extract Interface
对类可用。
 
Generalize Type
对对象的声明可用。
 
Use Supertype Where Possible
对类可用。
 
Inline
对方法,静态final类,局部变量可用。
Alt + Shift + I
 
Extract Method
对方法中的一段代码可用。
Alt + Shift + M
 
Extract Local Variable
对选中的与局部变量相关的代码可用。
Alt + Shift + L
 
Extract Constant
对静态final类变量,选中的与静态final类变量相关的代码可用。
 
Introduce Parameter
对方法中对成员变量和局部变量的引用可用。
 
Introduce Factory
对构造方法可用。
 
Convert Local Variable to Field
对局部变量可用。
Alt + Shift +

posted @ 2009-08-13 23:32 小强摩羯座 阅读(1038) | 评论 (0)编辑 收藏



学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。




pongba的知其所以然地学习(以算法学习为例)
中他提出了现有算法类书的讲授者是自顶向下思维,理论和知道点都摆出来,再做个细的推理与低阶的知道做个衔接。但是都没有讲算法的思想是怎么发展而来的,数据思维的过程是怎样的。“如果问题求解是一部侦探小说,那么算法只是结局而已,而思考过程才是情节。”

      

那到底什么样的才算是授人以渔的呢?波利亚的《如何解题》绝对算是一本,他的《数学的发现》也值得一看。具体到算法书,那就不是光看text book就足够的了,为了深入理解一个算法的来龙去脉前因后果,从一个算法中领悟尽量深刻的东西,则需要做到三件事情:

寻找该算法的原始出处:TAOCP作为一个资料库是绝对优秀的,基础的算法只要你能想到的,几乎都可以在上面找到原始出处。查到原始出处之后(譬如一篇paper),就可以去网上搜来看了。因为最初的作者往往对一个方案的诞生过程最为了解。比如经典数据结构中的红黑树是出了名的令人费解的结构之一,但它的作者Sedgewick一张PPT,给你讲得通通透透,比算法导论上的讲法强上数倍。
原始的出处其实也未必就都推心置腹地和你讲得那么到位:前面说过,算法设计出来了之后人们几乎是不会去回顾整个的思维过程细节的,只把直指目标的那些东西写出来。结果就又是一篇欧几里德式的文章了。于是你就迷失在一大堆“定义”、“引理”、“定理”之中了。这种文章看上去整个写得井井有条,其实是把发明的过程整个给颠倒过来了,我一直就想,如果作者们能够将整个的思路过程写出来,哪怕文字多上十倍,我也绝对会比看那一堆定义定理要容易理解得多。话说回来,怎么办?可以再去网上找找,牛人讲得未必比经典教材上的差。那倘若实在找不出好的介绍呢,就只能自己揣摩了。揣摩的重要性,是怎么说都不为过的。揣摩的一些指导性的问题有:为什么要这样(为什么这是好的)?为什么不是那样(有其它做法吗?有更好的做法吗?)?这样做是最好的吗?(为什么?能证明吗?)这个做法跟其它的什么做法有本质联系吗?这个跟这个的区别是什么?问题的本质是什么?这个做法的本质又是什么?到底本质上是什么东西导致了这个做法如此..?与这个问题类似的还有其它问题吗?(同样或类似的做法也适用吗?)等等。
不仅学习别人的思路,整理自己的思路也是极其重要的:详见《跟波利亚学解题》的“4. 一个好习惯”和“7. 总结的意义”。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pongba/archive/2008/07/07/2622713.aspx

posted @ 2009-08-02 23:54 小强摩羯座 阅读(159) | 评论 (0)编辑 收藏

什么是你的不可替代性和核心竞争力

By 刘未鹏(pongba) | http://blog.csdn.net/pongba

我虽不是经济学专业,但是翻开任何一本经济学的教材,或者直接翻开 wikipedia 的 economics 条目,都会看到物以稀为贵这条铁律。人才作为资源的一种,也是同样的道理。而稀缺性,换种说法也可以叫做不可替代性。一种资源越是稀缺,不可替代性就越强。再加上如果这种资源是一种具有实实在在使用价值的东西(而不是荷兰的郁金香泡沫),那么其价格就会越高。

问题是,如何构筑你的个人知识体系,使得你的知识技能集尽可能成为不可替代的呢?

CSDN 的孟岩先生前段时间发表了一篇博客“技术路线的选择重要但不具有决定性”,用有说服力的数据阐述了技术路线的选择对于个人知识体系的不可替代性并非一个关键因素,文中也提到了这样一段话:

那么核心竞争力是什么?我观察圈子里很多成功和不成功的技术人,提出一个观点,那就是个人的核心竞争力是是他独特的个性知识经验组合。这个行业里拥挤着上百万聪明人,彼此之间真正的不同在哪里?不在于你学的是什么技术,学得多深,IQ多少,而在于你身上有别人没有的独特的个性、背景、知识和经验的组合。如果这种组合,1,绝无仅有;2,在实践中有价值,3,具有可持续发展性,那你就具备核心竞争力。因此,当设计自己的发展路线时,应当最大限度地加强和发挥自己独特的组合,而不是寻求单项的超越。而构建自己独特组合的方式,主要是通过实践,其次是要有意识地构造。关于这个观点,话题太大,我不打算赘述。

孟岩先生在文中没有对这个问题展开叙述。但我一直也在寻思这个问题,后来在 TopLanguage 上一次讨论的时候,把一些想法整理成形。

长话短说,我相信以下的知识技能组合是具有相当程度的不可替代性的:

专业领域技能:成为一个专业领域的专家,你的专业技能越强,在这个领域的不可替代性就越高。这个自是不用多说的。
跨领域的技能:解决问题的能力,创新思维,判断与决策能力,Critical-Thinking,表达沟通能力,Open Mind 等等。
学习能力:严格来说学习能力也属于跨领域的技能,但由于实在太重要,并且跨任何领域,所以独立出来。如何培养学习能力,到目前为止我所知道的最有效的办法就是持续学习和思考新知识。
性格要素:严格来说这也属于跨领域技能,理由同上。一些我相信很重要的性格要素包括:专注、持之以恒、自省(意识到自己的问题所在的能力,这是改进自身的大前提)、好奇心、自信、谦卑(自信和谦卑是不悖的,前者是相信别人能够做到的自己也能够做到,后者是不要总认为自己确信正确的就一定是正确的,Keep an open mind)等等。
关于如何培养这些方面的能力,呃.. 需要学习的东西太多,对于第2项中列出的一些子项,可以参考我上次列的一些资料(《如何清晰地思考》),我自己也在学习之中。另外我在《一直以来伴随我的一些学习习惯》(一,二,三,四)中也提到了一些相关的方法。

注:

以上将个人的核心竞争力分为4个部分,其中每个部分的罗列并不一定详尽,也有可能我忽略了重要的东西或罗列了不重要的东西,所以欢迎补充和纠正。
以上只是我个人所认为的具有相当程度不可替代性的知识技能集,至于是否有更具不可替代性的“装备”,不妨思考。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pongba/archive/2009/01/14/3776586.aspx

posted @ 2009-08-02 22:31 小强摩羯座 阅读(155) | 评论 (0)编辑 收藏

Eclipse中常用的快捷键(最经典的快捷键,就不用多说了)

Ctrl+D: 删除当前行    

Ctrl+Alt+↓ 复制当前行到下一行(复制增加)

Ctrl+Alt+↑ 复制当前行到上一行(复制增加)

Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)

Alt+↑    当前行和上面一行交互位置(同上)

Alt+← 前一个编辑的页面

Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)

Shift+Ctrl+Enter 在当前行插入空行(原理同上条)

Ctrl+Q    定位到最后编辑的地方

Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)

Ctrl+M 最大化当前的Edit或View (再按则反之)

Ctrl+/    注释当前行,再按则取消注释

Ctrl+O    快速显示 OutLine

Ctrl+T    快速显示当前类的继承结构

Ctrl+W 关闭当前Editer

Ctrl+K    参照选中的Word快速定位到下一个

Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

Ctrl+/(小键盘) 折叠当前类中的所有代码

Ctrl+×(小键盘) 展开当前类中的所有代码

Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl+Shift+F4 关闭所有打开的Editer

Ctrl+Shift+X    把当前选中的文本全部变为大写

Ctrl+Shift+Y    把当前选中的文本全部变为小写

Ctrl+Shift+F 格式化当前代码

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)

Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

Alt+Shift+V 移动函数和变量(不怎么常用)

Alt+Shift+Z 重构的后悔药(Undo)

Ctrl+Shift+U 选择选中的文字后非常类似于UE的列表查询

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/f128690011/archive/2007/06/24/1664354.aspx

posted @ 2009-07-30 22:45 小强摩羯座 阅读(167) | 评论 (0)编辑 收藏

1:改变数据库的默认编码配置,在MYSQL的安装目录中,找到my.ini,修改默认编码为:default-character-set=utf8

2:建立数据库时,CREATE DATABASE ms_db CHARACTER SET utf8 COLLATE utf8_general_ci;

3:执行脚本:指定编码格式set names utf8(注意,不是UTF-8

4:如果你采用的是外部接入的方式,在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306 /ms_db?useUnicode=true&characterEncoding=UTF-8(不要出现任何空格,否则出错)

5:set character_set_results=gbk;(解决命令行乱码问题);

--------------------------------------------------------------------------------

问题的关键在于数据导出、导入时要做到所使用的字符集相一致:
1、mysqldump 的 default-character-set变量;
2、mysql 的--default-character-set变量;
3、mysqld的 Db characterset变量。
例如:备份使用latin1字符集则恢复时也要使用该字符集并且数据库的缺省字符集也要是该字符集,即latin1. 换成gbk也应该一样.

乱码的根源在于字符集的不一致:操作系统(Windows为gbk,Linux是UTF-8),数据库(CREATE DATABASE db_name DEFAULT CHARACTER SET gbk 或者CREATE DATABASE db_name DEFAULT CHARACTER SET latin1)使用图形界面是就更要注意其缺省配置。

--------------------------------------------------------------------------------

在这里我把自己知道的东东贴出来,还望大家多多提意见,补充,谢谢~~

show variables like 'character%';查看字符编码

--更改字符集
SET character_set_client = utf-8 ;
SET character_set_connection = utf-8 ;
SET character_set_database = utf-8 ;
SET character_set_results = utf-8 ;
SET character_set_server = utf-8 ;


SET collation_connection = utf8 ;
SET collation_database = utf8 ;
SET collation_server = utf8 ;


MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次:
      服务器(server),数据库(database),数据表(table)和连接(connection)。

      1.MySQL默认字符集:MySQL对于字符集的指定可以细化到一个数据库,一张表,一列.传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置.    (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server; (5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。


       2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
     mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| character_set_client     | latin1                          |
| character_set_connection | latin1                          |
| character_set_database   | latin1                          |
| character_set_filesystem | binary                          |
| character_set_results    | latin1                          |
| character_set_server     | latin1                          |
| character_set_system     | utf8                            |
| character_sets_dir       | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如    default-character-set = utf8
      character_set_server = utf8
   修改完后,重启mysql的服务,service mysql restart
   使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| character_set_client     | utf8                            |
| character_set_connection | utf8                            |
| character_set_database   | utf8                            |
| character_set_filesystem | binary                          |
| character_set_results    | utf8                            |
| character_set_server     | utf8                            |
| character_set_system     | utf8                            |
| character_sets_dir       | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+

   (2) 还有一种修改字符集的方法,就是使用mysql的命令
     SET character_set_client = utf8 ;
     SET character_set_connection = utf8 ;
     SET character_set_database = utf8 ;
     SET character_set_results = utf8 ;
     SET character_set_server = utf8 ;

     mysql> SET collation_connection = utf8 ;
     mysql> SET collation_database = utf8 ;
     mysql> SET collation_server = utf8 ;

一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
SET NAMES 'utf8';

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

不知道什么原因,我在自己机器上把上述三个字符集都设置成utf8后,查询中文结果还是乱码,只有把character_set_results设置成GBK之后才能从命令行正常显示中文.
set character_set_results=GBK;

---------------------------------------------------------------

如果用eclipse :
   点击Window-->Preferences,展开General-->WorkSpace,看到左边的Text file encoding没有,默认的设定是简体中文编码(gbk,gb2312这样),而linux下面呢,是UTF-8。

当你新建一个项目,希望使用和WorkSpace不同编码,请右击你的项目,选择Properties,点击Resource,看到Text file encoding了吧,点击Other,选择UTF-8


最后,将my.ini中的两处default 的字符集改为gbk不要使用utf8

posted @ 2009-07-26 23:08 小强摩羯座 阅读(246) | 评论 (0)编辑 收藏

        JUnit 设计的目的就是有效地抓住编程人员写代码的意图,然后快速检查他们的代码是否与他们的意图相匹配。 JUnit 发展至今,版本不停的翻新,但是所有版本都一致致力于解决一个问题,那就是如何发现编程人员的代码意图,并且如何使得编程人员更加容易地表达他们的代码意图。JUnit 4.4 也是为了如何能够更好的达到这个目的而出现的。

    JUnit 4.4 主要提供了以下三个大方面的新特性来更好的抓住编程人员的代码意图:

    1)提供了新的断言语法(Assertion syntax)——assertThat 。
*新的断言语法主要提供了assertThat,其操作示例:

// 联合匹配符not和equalTo表示“不等于”
assertThat( something, not( equalTo( "developer" ) ) );
// 联合匹配符not和containsString表示“不包含子字符串”
assertThat( something, not( containsString( "Works" ) ) );
// 联合匹配符anyOf和containsString表示“包含任何一个子字符串”
assertThat(something, anyOf(containsString("developer"), containsString("Works")));

JUnit 4.4 默认提供一些可读的描述性错误信息

String s = "hello world!";
assertThat( s, anyOf( containsString("developer"), containsString("Works") ) );
// 如果出错后,系统会自动抛出以下提示信息:
java.lang.AssertionError:
Expected: (a string containing "developer" or a string containing "Works")
got: "hello world!"

    2)提供了假设机制(Assumption)。
   提供语句assumeThat, assumeTrue,assumeNotNull 和 assumeNoException。
 *assumeThat作用:语法同assertThat,语义当假设成立时执行其后语句。
  应用:1、改变条件,可对某些测试用例选择性执行。2、
 *使用: assume* 假设语句,必须得 import static org.junit.Assume.*;。 如果引用了第三方 hamcrest 的匹配符库,必须得 import static org.hamcrest.Matchers.*;,如果引用 JUnit 4.4 自带的匹配符库,需要 import static org.hamcrest.CoreMatchers.*;。 
    3)提供了理论机制(Theory)

   Theory机制比较复杂,一般也用不到。
    
   

 


 


 

posted @ 2009-07-25 21:27 小强摩羯座 阅读(320) | 评论 (0)编辑 收藏

丰田模式,如果我的理解没有错,其最核心最基本的概念是“集体思考”,强调可视性和持续改进。展开来说,比较有趣的几点:
1- 问题是大家共同的,有问题大家一起解决。
2- 在出现问题的现场解决问题而不是在办公桌。
3- 任何人都可以指手画脚,发现质量问题,工人有权直接停掉生产线。
4- 持续发现问题并解决。
5- 建立共识。
6- 对人,尤其是一线工人的尊重。
7- 危机意识。

posted @ 2009-07-20 14:53 小强摩羯座 阅读(174) | 评论 (0)编辑 收藏

《谈话的力量》  by Alan Garner

一、          
通过问题促进交谈

1.      提出开放式问题而非封闭式

2.      避免问题过于宽泛

3.      一开始的问题要简单、对方易于回答、感兴趣回答,不要过于难

4.      事先做好准备

5.      提问时不要在别人回答之前就包含个人的观点和立场

二、           表达诚实的称赞

1.      鼓励喜欢的行为比惩罚不喜欢的行为更有效

2.      将称赞说得更具体一些

3.      在称赞中加入对方名字,让他觉得是针对他说的而不是敷衍

4.      可以在称赞后加上一个相关问题,帮对方接受称赞

5.      称赞别人时不要有任何索取

6.      切忌一味称赞,否则显得太假

7.      不要用对方称赞自己的话回答对方

8.      适当向第三方称赞另一个人(间接称赞)

9.      积极接受别人对自己的称赞

三、           倾听别人的话语

1.      积极倾听,就是告诉别人你对他发出的信息的理解(“你是说……,是么?”),尤其是不太确定对方意思的时候,以及对方传递重要信息或者感情上的信息时。

四、           利用自由信息

1.      学会利用自由信息(即你没有主动要求也没有预料到的信息)去展开话题

五、           让别人知道你

1.      学会自我透露。通常的交流经历四个阶段:套话、事实、意见、感受,自我透露的程度逐渐提高

2.      自我透露时内容要具体,也可以适当展示自己的缺点和反面

3.      自我透露切忌观点不明确,如不用“我”而说“你”,不用陈述句而用问句,等

六、           开始一段谈话

1.      通过谈论环境、对方、自己来开始一段谈话,通常谈论环境和对方比谈论自己更容易开始

七、           发出可能被接受的邀请

1.      要学会用双重视角,发出对方可能感兴趣的邀请

2.      一开始的邀请要随意一些,从小处着手,不要让对方觉得邀请参加的活动意义太大太重要而不敢随意参加

八、           积极地接受批评

1.      当别人批评自己时,不要急于逃避、反击

2.      当别人批评自己时,首先要询问具体内容,对时间、地点、原因、人物、什么、怎么样提问,搞清楚别人到底为啥批评自己

3.      第二步要同意对方的批评,可以同意对方批评的事实,如果不同意,则要同意对方有表达意见的权利

4.      第三步可以通过自我透露表明自己的立场

九、           拒绝别人的操纵

1.      “破唱片”的方法:不管你别人说什么,都可以同意他们的意见或给予他们表达意见的权利,但是自始至终保持一贯的态度,重复同样的话表达拒绝

十、           要求改变

1.      希望别人做出改变时,可以利用如下公式:“我不太满意,你【说明其行为】,(使得)【指出后果】,所以我觉得【描述自己的感受】。

2.      说明其行为的时候,尽量采取客观的态度,说得具体一些,让对方明确领会你的意思,一次只需提一种行为,不要说太多,最好只专注现在发生或刚刚发生不久的行为,不要翻出“陈芝麻烂谷子”的事,不要抱怨对方“总是……”,不要妄加揣测和推断对方的意图

3.      指出后果时,要用积极的态度

4.      描述感受时,要注意用简洁的语言,不要用粗俗的语言

5.      作完以上陈述后要暂停一下,给对方以回想的时间,从而可能提出令人满意的解决方案

6.      如果没有成功,要进行直接要求,要具体要求对方改变某一个做法,一次只提一件事

7.      如果还没有成功,则采用“破唱片”做法,不断重复要求,直到成功

8.      可能对方无法完全按照你的要求去做,这时会进行商谈,商谈过程中要始终牢记你最初的目的——希望某种需要得到满足或者某种权利受到尊重,解决办法可以根据双方反馈进行调整,但一定要满足最初的目的

十一、   通过动作表情达意

1.      注意保持合适的个人空间

2.      表达喜欢的感情可以采用SOFTEN方法:Smile微笑、Open posture开放的姿态(同时和两个人说话时可以上半身对一个人小半身正对另一个人)、Forward lean身体前倾、Touch身体接触、Eye contact眼神交流(对方瞳孔放大表明喜欢你)、Nod点头

十二、   减少社交场合中的紧张心理

1.      紧张的原因是因为有如下几种信念:逃避、恐惧、以偏概全、要求过高。

2.      挑战逃避意识——追问自己有什么证据表明是这件事情让自己紧张;自己对自己叫“停”,从而驱逐头脑中存在的逃避想法

3.      挑战恐惧心理——想想自己头脑中的“可怕”事件发生的可能性有多大(通常会很小);想到最坏的结果,并用感情色彩较弱的词语去描述它(最坏也就是……,顶多只是称得上倒霉……)

4.      挑战以偏概全的习惯——不仅不要对自己“贴标签”也不要对别人“贴标签”,问问自己“贴标签”的证据在哪里,往往发现没有合理的证据;过去发生的事情不代表将来一定发生,失败过并不代表将来不能成功

5.      挑战要求过高的心理——不要要求完美,也不要坚持遵循对自己不利的准则(过去一直以某种方式做事并不意味着必须一直这样做);不要要求别人遵循你自己的准则,别人是你不可控的

十三、   有计划地去努力

1.      设定明确的目标——目标要明确(描述的行为不会与其他行为混淆);要可证实(即使旁观者也可以确定你是否实现了目标);要肯定(“我要……”而不是“我不能/要……”);要可计量;要明白目标的实现完全取决与你自己的行动(不要根据别人的回应来判断是否成功)

2.      划分目标的等级——多个目标需要实现时,分难易,先做最容易的

3.      增加步骤——当一个目标较难时,可以细分为多个步骤,一步一步去实现

4.      预先演练——可以在付诸行动前自己演习

5.      奖励自己——设定目标时同时设定实现目标后对自己的奖励,并切实兑现奖励(奖励要是自己真正想要的),不要吝惜达成目标后对自己的表扬

Learning from "Apprentice"

 

Tips learned:

1.       If you are a leader, do be decisive.

2.       Never underestimate the enemy.

3.       As a leader, you should be able to manage your team members.

 

Suggestions from Mr. Trump

1.       Deal good with boss.

2.       People needed: can handle pressure, creative.

3.       Respect from winning.

4.       领导常常需要力排众议。Lead with authority.

5.       A leader should be decisive.

6.       有时候做生意靠直觉。Business comes from instinct.

7.       Always listen to others, though you may not do as they say.

8.       Go big or go home. Think it big.

9.       Sell your ideas.

10.   Know when to fold.如果一个想法不切实际或效果不理想,即使它是你一手想起来的,也要适时放弃。

11.   There is no failure, you can never quit.

12.   I don’t need choker.(怯场的人)

13.   You should love what you do.

14.   A leader should be able to control his underlings.

15.   Always focus in the goal.

16.   Getting along with people is very important.

17.   Be flexible; be able to change.

18.   A leader should know how to inspire his/her staff.

19.   Good leader knows the strength and weaknesses of his/her employees.

20.   Good deal is all about money; money is what proves your success.

21.   Members in the best team push each other. You should push your team members to perform their best.

22.   Get to the point, don’t waste time.

23.   Loyalty is very important.

24.   Great business man knows how to balance creativity and feasibility.

25.   Always stand up for yourself.

26.   A deal is a deal. Once you shake hands with others, never break up the “hand-shake” for no reason.

27.   A god is in the details.

28.   Never beg when you sell things.

29.   You should believe what you sell, or else you will sell nothing.

30.   Energy is very crucial.

31.   You will not succeed without passion.

posted @ 2009-07-03 12:21 小强摩羯座 阅读(104) | 评论 (0)编辑 收藏

知识分子的故园—在复旦大学的演讲

【编者注:这是我阅读复旦大学计算机系博士生孙贺的主页博客时,发现的其讲话稿。阅读之后,对其思想的深邃颇为欣赏。另外我对其文中提到的几个哲学家也都不知道,估计在小孙的眼里,陈首席基本上属于文盲的范畴。有兴趣的读者可参阅知识分子的故园

非常感谢复旦大学本科生资助委员会给我提供了这样一个机会,使我很荣幸的来和大家进行交流,提出自己的一些想法。

今天我和大家谈的倒不是我个人的在专业领域的看法,我主要是想和大家谈一谈作为当代的知识分子,应该扮演着一个什么样的角色。为什么要谈这样一个问题呢?因为我们发现今天知识分子的意义和两百年前或者三百年前已经有了明显的不同。比如在十七八世纪,许许多多的知识分子,比如帕斯卡、康德、卢梭,他们把他们的研究和实践结合在一起。我们首先以说帕斯卡为例,我在这里提到的帕斯卡,就是所有学过初等数学,都知道“帕斯卡三角形”的那个帕斯卡。他是一个法国科学家,为了帮助工作繁忙的父亲,他设计了法国的第一台计算器。他利用自己发明的气压计证明了真空的存在。不仅如此,他的《沉思录》被认为是当代人和思想的第一次对话。他还是一个虔诚的天主教徒。

不幸的是,他在三十六岁时疯了,在后面的三十七年里一直住在疯人院里。我们再来看康德。在三十一岁那一年,康德写下了《自然通史与天体理论,或根据牛顿定律研究整个宇宙的结构及其力学起源》的非凡著作。之后,康德还写过《将负数引入哲学的尝试》等论文,从此开始了数学和物理学的研究。众所周知,康德最为重要的著作就是三大批判,即《纯粹理论批判》,《实践理论批判》和《判断力批判》。除此以外,康德还有一系列关于教育学的著作,例如《论教育学》、《系科之争》等。康德的主要著作还包括《使用人类学》。我们很难想象一个终身生活在哥尼斯堡这样一个小镇的单身汉,在他八十岁的生活中没有离开过这个小镇一步。在漫长的八十年的单身寂寞的生活中,他思考了人生中一切的伟大的实践。在他的墓碑上有这样的一句话:“有两样东西,我们越是经常不断地思索他们,他们就越是唤起一种始终新颖和日益增长的赞叹和敬畏充溢我们的心灵,那就是我头顶的星空和我心中的道德律。他们向我印证:上帝在我头顶,也在我心中。”我提及的这些事实意在说明:今天的知识分子和两百年前传统意义上的知识分子在形式上出现了非常显著的差别。关于这一点,五十年前的德国哲学家和精神病学家卡尔•雅思贝斯在《在时代的精神生活》这本书中,就已经一针见血地提出了。

尽管雅氏描绘的是二十世纪三四十年代的欧洲社会,但在今天看来,他的针砭时弊、一针见血的分析同样适用于中国现实社会。一言以蔽之,他所阐述的就是在现代社会我们的知识已经瓦解,人的生活缺乏精神上的向导。文艺分析时期,一个人的学术研究和生命实践始终是结合在一起的。但是在今天,我们并不这样来看代学术研究。雅斯贝斯的分析非常精辟,他说,我们的一种以前从事高尚研究的快乐,被一种从事狭窄技术领域研究的快感所取代。在这样的情况下,一种可怕的情况出现了:我们不再认为学术研究是崇高的。比如今天我问大家,大家儿时的梦想是什么,可能对在场的各位同学而言,你们会说童年时代的纯真的梦想是成为一个科学家,因为在那时的我们内心深处科学家代表了一种崇高。但是在今天,当各位从事学术研究的时候,你们会发现:你们现在所走的学术道路与你们儿时的梦想相差甚远。为什么?我们钻入到一个狭窄的领域,我们在进行研究,但是这种研究并不能给我们带来普遍的幸福

于是在这一点上一个很关键的问题出现了。我们就要问:这种情况是如何发生的?对于二十年前的中国知识分子而言,他们的存在首先代表了一种人文情怀。但是这种情况在今天已经消失殆尽。今天的中国社会在一定程度上、或者说今天的中国人和全世界的许许多多人,没有两三百年前的人更富有想象力,更能耐得住寂寞。今天的人们听任于娱乐的安排,我们上网,聊天,看电视,然后有各种各样的休闲手段。你如果寂寞的话,你会有一个各种各样的方式去排除寂寞。叔本华说过一句话 “孤独是一种伟大的情感”,但是今天的人已经甚少有一种真正的孤独的感觉。大家有的是什么,是郁闷,对吧?我们有的是郁闷。但是对于今天的人们,更为可怕的是,今天中国的一部分知识分子,居然走上了模特在T字台上所走的猫步。比如说于丹,等等。正是在这一点上,我们看到:今天的知识分子已经与一种作为知识分子本身的使命感相隔绝了。这种使命感是什么?我作为一个知识分子,我要去为国家而奉献、牺牲。天下兴旺,匹夫有责的中国古代人文精神在今天的知识分子中悄然消失了。所以,每当我忆起起俄罗斯文学的时候,俄罗斯知识分子的那种流亡意识总是给予我深刻的印象和泪如泉涌的感动。即一个知识分子,他可以抛弃生命中物质的一切,也要保守某种精神生活。一旦人们承认人的生活不是兽性的,而是文明的,那么他在世界中的生活本质上讲就应该是一种精神生活。

海德格尔曾经说过:人是追求生活意义的生物。如果一个人在他的生活中找不到生命的意义,他宁愿去自杀,哪怕他的身边全是面包。如果我们试图理解这样一句话,一个自然的问题就会被立即提出:即这种生命的意义应该如何去寻找?其实在人类的启蒙时代,就曾经提到过这样的问题。即人类在文明开始之初,他们就已经想到过一个人的生活必须有一种深刻的意义在其中。为什么,我们今天来想一下:如果我们认为,我们出生之前的一切,和我们毫无关系,在我们死亡之后的一切,和我们也没有任何关系。那么我们的生命是不是没有任何意义,我们在世界中的生活就只剩下吃喝玩乐。但是事实并不是如此。所以在东西方文明的早期,人们同时想到了同一个问题:即在终极上,人的生活应该是有意义的。从这一点出发,东西方文明对于这样一个绝对意义,想出了两个不同的途径,即起源于东方、盛行于西方的基督教文明和中国的儒学思想。在西方的基督教世界中,西方人认为:倘若有一个绝对的上帝在我们中间,人生就可以获得形而上学的意义。因为在这刻,人们可以自然地产生一种超验之思。我们可以,把一个人的生活放到一个上帝的维度,因此人就有一个全能的上帝去审视字词。在这时,他就可以约束着我们。与此同时,中国的儒家学派,将人的根本意义,集中到了礼教,伦理这一层面,这是一种脱离了行而上学的思辨。所以黑格尔在他的《哲学演讲录》的第一卷中就曾写过:”中国没有真正的哲学,有的只是伦理学。”可悲的是,今天的中国人,还在信仰着以伦理为基础的东西。我们有没有深刻地思考过,我们这种伦理,它的合理之处在哪里?也许这是我们需要真正思考的问题。今天许多的中国学生,缺少一种独立思考的精神,我在这里,我称其为一种精神,而不是一种能力,因为这本身非常重要,无法通过世俗教育去培养。在中国的儒家学派中,我们说“不孝有三,无后为大”,“父母在,不远游,游必有方”,等等。我们也都知道,为了纪念投汨罗江自尽的现实主义诗人屈原,中国传统中于是又了端午节,并有了吃粽子、赛龙舟的习俗。我们称屈原是一个伟大的现实主义诗人。原因何在?不妨去读屈原的《天问》,他百思不得其解要问的是什么?在我看来,他问核心的是在这样一个以儒教为统治的国家中,王权的合法性在哪里。屈原最早认识到了这一点,对一个人而言,是一种非常痛苦的事实。因为一个人生活在儒家思想中,却不能为以这种思想为生活的合理性提供依据。今天的人们一方面去宣扬儒教,一方面我们去纪念屈原,这不是一个非常可笑的事实吗?我们拿着伦理不放,但我们今天的人们没有真正地去思考,这种伦理的合理性在哪里?

基督教文明从公元五世纪到十五世纪,经历了漫长的一千年中世纪。一千年后,欧洲迎来了文艺复兴。与此同时,近代的基督教社会有了一次又一次的改革。直到十九世纪末尼采“杀死”了上帝。尼采曾经写过《查拉图斯特拉如是说》这本书,有人说这本书的出版把无数人的宗教信仰一劳永逸地消除了。尼采是种非常自信的人。他曾经在一本书的前言中写到:我的书是为这个社会极少数的人写的,但在这极少数的人当中,可能一个都还没有出生。但尼采断言,我的书终将名垂千古,载入史册。晚年的尼采非常寂寞,在日记中他写道,在大街上,我想拥抱随便哪一个人。寂寞之极,一八八九年尼采在都灵大街上抱住了一匹受马夫虐待而发疯的马,尼采疯了。二十世纪的曙光来临之时,尼采安静地离开了这个世界。

尼采杀死上帝后,西方人的生活突然呈现了一种荒诞性。如果没有一个人,没有一种绝对的规则存在的话,人是可以胡作非为的,因为绝对意义消失了。一旦绝对意义消失,那么人在在一个荒诞世界中的生活,其实很容易,吃喝玩乐,仅此而已。但是一个知识分子,如果在一个荒诞的世界中,既要去承担一种荒诞,并且要从荒诞中寻觅意义的话,这就非常困难。此时,存在主义的兴起为二十世纪人的生活的合理性提供准则。我们以最著名的存在主义大师萨特为例:当我们去看他的《他人就是地狱》这本书的时候,我们会发现一篇著名的文章,即《论五月风暴》。在这篇文章中,萨特谈论的是一九六八年全球范围内的学潮运动。萨特这样写道:他们反了,他们要寻找一个他们自己的世界。而这个世界,在我们的年轻时代,也曾经寻找过。但在我们年轻的时代,我们没有去反抗。而今天,他们的反抗和我们年轻时候沉默的事实,证明了在面对同一个制度的时候,他们的伟大和我们的渺小。通过这样的方式人们发现,在一个虚无的世界上,人的活动就是成了人的意义本身

而在今天的中国社会,一个知识分子如何去创造他自己的意义?今天人们没有,或者说今天的中国人缺乏这样的反思。有人问,中国的知识分子,中国的文学家,为什么没有去拿诺贝尔文学奖。或者有人问,中国的文学家,离诺贝尔奖还有多远。在我看来,这个问题,我可以从这样一个视角给出回答,就是在我们今天中国的作家——或者说从鲁迅开始——所描写的生活,偏重于人的社会生活分析而没有很深刻地剖析人的生存本质。当我们去读马尔克斯的《百年孤独》,我们有一种人的孤寂和幻灭的感觉。甚至有人告诉我,他读过之后有一种自杀的感觉。因为在那里,我们看到了关于人谓之人的深刻反思。而今天的中国作家,中国的知识分子,缺乏这种反思。

 

为什么这种反思尤其重要?黑格尔曾经说过这样一句话“一个民族总要有一些仰望星空的人,这个民族才有希望。如果这个民族所有人都仰望脚下的事物,那么这个民族是没有希望可言的。”今天中国社会的可怕在于我们太缺乏这样的知识分子。这是一个民族的可悲。如果问今天的中国,有什么可以使我们低下头颅来,我认为,在中国近三百年来,我们没有产生一个可以和西方的知识分子相抗衡的知识分子。我们没有产生萨特这样的人物。没有产生康德,黑格尔,叔本华这样的人物。甚至没有产生加缪和福柯这样的人物。这是一个民族的悲哀。每一个深刻思考过时代精神的知识分子都能意会:夫物质之文明,取诸他国,不数十年而具矣,独至精神上之趣味,非千百年之培养,与一二天才之处,不及此。

让我们去审视德意志民族。德国有一个非常伟大的教育家——洪堡。他按照自己的教育思想,建立了洪堡大学。后来,德国许许多多的大学,都是按照他的模式建立起来的。在我读本科的时候,这种思想,我们全世界仍然是他的受益者,那是什么?那就是关于教育之本质的深刻理解。所有人你来德国学习,学费是全部免掉的。因为教育是一种事业。人并不是仅仅生活在现实生活中,人是一种历史的被造物。置于一切历史之下,教育便有了一种根本的意义,教育的目的是去塑造人。今天的中国之教育,中国的高等教育,把人沦为了一种工具。我们总是评论一所大学的毕业生中,有多少人去国企了,有多少人拿了高薪,当一个高等学府用这个作为一种炫耀的资本的时候,我们便不得不承认:一种恢弘壮丽般教育从根本上堕落了。教育的目的是人,人是目的,不是工具。在洪堡的时代,洪堡几乎是把所有的资源平均地用于教育。所以说德国的大学,他们的好与坏,并没有中国的大学这么悬殊,也没有美国的大学这样悬殊。但是德国,按照洪堡的思想,一个人去接受教育,那么这个教育的钱应该是国家来付。今天的中国人,教育部部长扬言:教育不能产业化;但是从国家到地方,我们实际做地恰恰是教育的产业化。但是现在你去德国留学也是要学费的,全世界已经越来越美国化了。全世界已经一起朝资本看齐的。

这世界仍然有一些非常伟大的人。二十世纪有三个最伟大的知识分子:萨特,福柯和乔母斯基。我不知道在座的各位,有多少人知道这者的名字。有人说,二十世纪的人不知道福柯,就像十九世纪的人不知道马克斯一样。不能说他是文盲,至少不能说他是一个知识分子。我知道我身边很多人都不知道福柯。我去年在西班牙。访问期间,我决定去法国扫福柯的墓。我问了一个在西班牙生活多年的华人,他三岁的时候到了马德里。我告诉他,我想去扫福柯的墓,但不知道福柯的墓在巴黎的什么地方。当然我没有这么直接地问,我先问你知不知道福柯,因为我知道中国的许许多多人都不知道福柯。他跟我说了一句话,他说“我也是读过高中的人”。从这个很小的事情,我们可以看出在欧洲的教育中,仍然没有忽略最核心的精神层面的培养。而这一块,在今天的中国,在我们呼喊素质教育的时候,实际上已经把教育庸俗化。教育的根本目的——人的精神力量的培养——在今天的中国已经被完全忽略了。

我现在指导四个本科生进行研究工作。他们中的每个人都在学术领域崭露头角、甚至取得了令人瞩目的成绩。我时常告诉他们,这还不够。一个学者从专业研究中获得快乐,但是一个思想者应该懂得在学术中生活。思想者这一称谓的定义不是来自他的研究,而应该首先来源他的生活。因为教育的首要目的是培养有思想的人,所以我们经常阅读中西方思想史,试图理解与我们看似久远的西方文明。比如说,福柯有句话:“学校是监狱和医院的混合物”,这句话怎么理解?其实在福柯看来,现在许许多多的人文科学,诸如教育学、心理学、社会学,它们不但不是真理,反而是一种权力、一种杀人的工具。比如说,再让我们回望精神病学,福柯在《疯颠与文明》中探讨了现代精神病的起源。在十六世纪之前,我们并不认为精神病人是疯子。我们甚至把他们作为一种可以预见未来的先知一样看待。疯子可以在大街上游走,并且受到人们的尊敬。这个可能是今天的人们所无法想象的。但是在五个世纪后,在我们所谓更加文明的社会当中,他们为什么就被关进了医院呢?实际上,在一六五六年法国国王下了一条命令,就说建立法国总医院。法国总医院的建立,并不是一个医疗机构。它是一个训诫机构。它要告诉人们:一个人要勤奋的工作,你如果不勤奋工作,就会和大街上的所有流浪汉和所谓的疯子一样,全部都关进了这样一个法国总医院里。当时法国总医院的条件极为恶劣,许许多多的人住在一起,下面就是老鼠乱窜。于是,随着麻风病的消退,精神病人成为了社会唾弃的新对象。但是恰恰在于,今天的人们,我们不能说我们是正常的,从而说你们是非正常的。借福柯之言,现代人需要从他们的角度,去证明精神病人的合法性。但是我们发现,在六百多年的历史进程当中,人们文明的若干关键要素、或者说现代文明,正是通过帕斯卡、梵高、尼采,这些所谓的非理性的人来建立的。但是我们要在他们这些疯子面前,去证明我们的理性是正常的,这不是一个很可笑的事实吗?

现代人的精神,远远没有以前人那样纯洁。现在人在精神层面上已经堕落了。比如说,福柯有一句最为尖锐的话:“只要男人和男人的婚姻一天,现代文明就一天无从谈起。”人们无法理解这样一句话,因为大家听到这句话的时候,大家往往首先想到的不是爱情,而是性。人们认为,两个男人和两个男人在一起,这是很恶心的。人们首先不会去想到,两个男人,只要两个男人他们在精神上在一起,那么这种爱情就是高尚的。而这种爱情曾经在古希腊曾经发生过。在公元五世纪以前也曾经有过。只是在今天,人们越来越强调物质,金钱和欲望的满足。当代社会诸如此类的怪现状还有很多。对于今天的中国的知识分子而言,我们应该有许多深思,当你仔细去想这个时代的时候,你会发现许多反常的现象。如果一代青年人还有一部分人去试图改变这种现象,这个国家就会有希望;如果我们这一代人都试图去迎合世俗,这个国家的精神风貌就会停滞不前。我们的许多知识分子——我们姑且称他们为知识分子——不再把教育作为一种神圣的职业来看待。他们开始炒股,他们开始开公司。他们把学生作为一种免费的劳动力。一种非常神圣的师生关系,一种新货相传的思想之光,在今天堕落得一塌糊涂。他们向国家骗基金,几十万或几百万,然后去做一些不痛不痒的学问。更有甚者,少数知识分子一旦走上领导岗位,便扮演了政客的角色。管你学生好坏、是否才华出众,老子嘴大说得算。在复旦,这是多么大的悲哀。当我忆及国父孙文先生的“天下为公,努力前程”的文字时,我为这些人感到奇耻大辱。

这就我们一个时代的悲哀,也是复旦的悲哀。但许许多多的人没有看到这一点。我希望在复旦,在这样一个很小的优秀本科生当中,在你们思考这些问题的时候,你们要看到这一点。若干年后你们才会试图去改变这一切。

加谬在《西西弗斯神话》的开篇就写道:“真正严肃的哲学问题只有一个,那就是人是否可以自杀。”为什么人他要探讨这样一个问题?刘小枫在《拯救与逍遥》这本书中写道,与其让这个世界以暧昧的方式赢,不如让自己以肯定的方式输。但是在今天,唯独有意义的,是一种生活的创造。是我们可以把生活赋予一种真实的意义。这种真实的意义是通过知识分子的精神活动来体现的。这种精神活动,在一个很低级的层面,正是我们所谓的,一日为师,一生为范。在一个很高级的层面来讲,就是真真正正的知识分子的思想,他的精神能够代代相传。

注定有人会被历史的足迹所记录。比如说贾植芳先生。知识分子不能成为一种政府的附庸。知识分子一词,本来就代表了一个人的精神事实,我们中国的知识分子当中,有贾植芳这样的人,也有类似郭沫若这样的作家。一个人在生活当中,他往往会向某些东西妥协。但是一个人的精神,他的视野,应该是向这个天空的方向去了望。这样一个民族才有希望。

回到具体事情上来,我来谈优秀本科生的专门培养。当我去指导本科生的时候,有一次我和一个本科生聊天。我当时我跟他说,我寝室里有两百本书,你随便看,你看不出我是从事哪一个领域研究的。然后他告诉我,他寝室中也有两百本书。我觉得这样的人才是我欣赏的。首先你是一个有追求的人,其次你是一个在专业领域有所成绩的人。但你一个人仅仅在专业领域有所成绩,你仅仅把发文章当作一种目的的话,那么一个人,他生活的价值就会变得很少。曾经有一个老师对我说,我们总是要把一些东西量化,所以我们博士毕业,发表了多少篇SCI,这种量化就非常重要,因为它很客观。我说,错!这种东西很客观,恰恰是由于我们缺乏了许许多多能够高瞻远瞩的教育者,他认为你是不是具有一种博士的胸怀,博士的研究能力。所以说在今天,我们什么都能量化。一个学生的好坏,我们看GPA;一个国家的发展,我们看GDP;那么一个教授的好坏,我们看发了多少SCI/EI。这到底是现代人的一种文明呢?还是现代人的愚蠢。有个伟大的数学家叫做黎曼。他一生只发表了十八篇论文。还包括手稿。但那十八篇论文确是名垂青史。大家如果对于数学有稍微一些多的了解的话,就是说当代数学有个非常重要的难题——黎曼猜想,就是黎曼提出的。

二十世纪之初,年仅三十八岁的希尔伯特在第二届数学家大会发表了二十世纪人类需要解决的二十三个数学难题。像希尔伯特这样伟大的数学家,他曾经说过这样一句话——请大家注意希尔伯特的用语——他说如果我死后一千年能够复活,那么我问的第一个问题就是黎曼猜想解决了没有。与那个已逝的时代相比,现代人比的不是思想的深邃,比的是一个人在物质上的富有,一个人帅不帅,我们舆论已经为这些所左右。这是一个社会的悲哀,学者和大学的媚俗。但是大学的使命并不是如此。我曾经和我的学生讲过康德的《论教育》。你们很难想象康德这样一个八十岁的单身汉,他的《教育学》会写得如此细腻,初读起来仿佛有一种独特的父爱在身边。康德从婴儿出生开始写起。婴儿出生的时候母亲的乳房中总会流出一些透明的液体,我们翻译成中文叫做初乳。是康德首先发问,这种初乳对于婴儿是不是有益。因为在之前这种初乳都是不要的。但康德首先问这种东西是不是对婴儿有益的。他认为人类总不会做无用功。还有,在婴儿哭的时候,家长总喜欢把婴儿抱起来,摇一摇,这样把孩子不哭了。是康德首先发现:婴儿不哭这一表象的原因是由于成人的行为足以导致婴儿的眩晕,就像我们看儿童坐木马转几圈就晕了一样,这对于他大脑的发展是非常不好的影响。康德从此写起,写到一个人的儿童教育,行为习惯的养成。然后,小学时的认知教育,德育的教育,美育的教育,初中时的体育教育,青春期时的性教育,大学时的哲学教育,科学教育。

除了康德,我们还可以列举其他人。比如亚当斯密,我们最熟悉他的书是《国富论》。但是他还写过一本道德哲学的经典——《道德情操论》。这是一个道德伦理学的经典之作。在今天的中国人,如果能够产生这样的知识分子,就至少代表了一个民族有一种很高贵的气质在里面。如果今天所有的知识分子都在作秀,那么这个民族就没有希望。

最后我要送给大家的是伟大神学家巴特的一句话。他在论述心爱的莫扎特的书中写道

Das Schwere schwebt und das Leichte uwendlich schwer wieget

生活是沉重之轻与轻之沉重

posted @ 2009-06-30 15:17 小强摩羯座 阅读(267) | 评论 (0)编辑 收藏

方法一:在servlet的init()方法中缓存数据

  当应用服务器初始化servlet实例之后,为客户端请求提供服务之前,它会调用这个servlet的init()方法。在一个servlet 的生命周期中,init()方法只会被调用一次。通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作,就可大大地提高系统性能。

  例如,通过在init()方法中建立一个JDBC连接池是一个最佳例子,假设我们是用jdbc2.0的DataSource接口来取得数据库连接,在通常的情况下,我们需要通过JNDI来取得具体的数据源。我们可以想象在一个具体的应用中,如果每次SQL请求都要执行一次JNDI查询的话,那系统性能将会急剧下降。解决方法是如下代码,它通过缓存DataSource,使得下一次SQL调用时仍然可以继续利用它:

以下是引用片段:
public class ControllerServlet extends HttpServlet{
private javax.sql.DataSource testDS = null;  
public void init(ServletConfig config) throws ServletException {
super.init(config);   
Context ctx = null;  
try{    
ctx = new InitialContext();   
testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}catch(NamingException ne){ne.printStackTrace();}
}catch(Exception e){e.printStackTrace();}
} 
public javax.sql.DataSource getTestDS(){ 
 return testDS; 
} 
...
... 
}


  方法 2:禁止servlet和JSP 自动重载(auto-reloading)

  Servlet/JSP提供了一个实用的技术,即自动重载技术,它为开发人员提供了一个好的开发环境,当你改变servlet和JSP页面后而不必重启应用服务器。然而,这种技术在产品运行阶段对系统的资源是一个极大的损耗,因为它会给JSP引擎的类装载器(classloader)带来极大的负担。因此关闭自动重载功能对系统性能的提升是一个极大的帮助。

  方法 3: 不要滥用HttpSession

  在很多应用中,我们的程序需要保持客户端的状态,以便页面之间可以相互联系。但不幸的是由于HTTP具有天生无状态性,从而无法保存客户端的状态。因此一般的应用服务器都提供了session来保存客户的状态。在JSP应用服务器中,是通过HttpSession对像来实现session的功能的,但在方便的同时,它也给系统带来了不小的负担。因为每当你获得或更新session时,系统者要对它进行费时的序列化操作。你可以通过对 HttpSession的以下几种处理方式来提升系统的性能。

  如果没有必要,就应该关闭JSP页面中对HttpSession的缺省设置。 如果你没有明确指定的话,每个JSP页面都会缺省地创建一个HttpSession。如果你的JSP中不需要使用session的话,那可以通过如下的JSP页面指示符来禁止它:

以下是引用片段:
<%@ page session="false"%>


  不要在HttpSession中存放大的数据对像:如果你在HttpSession中存放大的数据对像的话,每当对它进行读写时,应用服务器都将对其进行序列化,从而增加了系统的额外负担。你在HttpSession中存放的数据对像越大,那系统的性能就下降得越快。

  当你不需要HttpSession时,尽快地释放它:当你不再需要session时,你可以通过调用 HttpSession.invalidate()方法来释放它。尽量将session的超时时间设得短一点:在JSP应用服务器中,有一个缺省的 session的超时时间。当客户在这个时间之后没有进行任何操作的话,系统会将相关的session自动从内存中释放。超时时间设得越大,系统的性能就会越低,因此最好的方法就是尽量使得它的值保持在一个较低的水平。

  方法 4: 将页面输出进行压缩

  压缩是解决数据冗余的一个好的方法,特别是在网络带宽不够发达的今天。有的浏览器支持gzip(GNU zip)进行来对HTML文件进行压缩,这种方法可以戏剧性地减少HTML文件的下载时间。因此,如果你将servlet或JSP页面生成的HTML页面进行压缩的话,那用户就会觉得页面浏览速度会非常快。但不幸的是,不是所有的浏览器都支持gzip压缩,但你可以通过在你的程序中检查客户的浏览器是否支持它。下面就是关于这种方法实现的一个代码片段:

以下是引用片段:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
OutputStream out = null;
String encoding = request.getHeader("Accept-Encoding");  
if (encoding != null && encoding.indexOf("gzip") != -1){
request.setHeader("Content-Encoding" , "gzip");  
out = new GZIPOutputStream(request.getOutputStream());
} 
else if (encoding != null && encoding.indexOf("comdivss") != -1){
request.setHeader("Content-Encoding" , "comdivss");  
out = new ZIPOutputStream(request.getOutputStream());
}else{  
out = request.getOutputStream();
} 
... 
... 
}

  方法 5: 使用线程池

  应用服务器缺省地为每个不同的客户端请求创建一个线程进行处理,并为它们分派service()方法,当service()方法调用完成后,与之相应的线程也随之撤消。由于创建和撤消线程会耗费一定的系统资源,这种缺省模式降低了系统的性能。但所幸的是我们可以通过创建一个线程池来改变这种状况。

  另外,我们还要为这个线程池设置一个最小线程数和一个最大线程数。在应用服务器启动时,它会创建数量等于最小线程数的一个线程池,当客户有请求时,相应地从池从取出一个线程来进行处理,当处理完成后,再将线程重新放入到池中。如果池中的线程不够地话,系统会自动地增加池中线程的数量,但总量不能超过最大线程数。通过使用线程池,当客户端请求急剧增加时,系统的负载就会呈现的平滑的上升曲线,从而提高的系统的可伸缩性。

  方法 6: 选择正确的页面包含机制

  在JSP中有两种方法可以用来包含另一个页面:

  1、使用include指示符

以下是引用片段:
<%@ includee file=”test.jsp” %>


  2、使用jsp指示符

以下是引用片段:
<jsp:includee page=”test.jsp” flush=”true”/>


  在实际中发现,如果使用第一种方法的话,可以使得系统性能更高。

  方法 7:正确地确定javabean的生命周期

  JSP的一个强大的地方就是对javabean的支持。通过在JSP页面中使用jsp:useBean标签,可以将javabean直接插入到一个JSP页面中。它的使用方法如下:

以下是引用片段:
<jsp:useBean id="name" scope="page|request|session|application" 
class="package.className" type="typeName">
</jsp:useBean>


  其中scope属性指出了这个bean的生命周期。缺省的生命周期为page。如果你没有正确地选择bean的生命周期的话,它将影响系统的性能。

  举例来说,如果你只想在一次请求中使用某个bean,但你却将这个bean的生命周期设置成了session,那当这次请求结束后,这个 bean将仍然保留在内存中,除非session超时或用户关闭浏览器。这样会耗费一定的内存,并无谓的增加了JVM垃圾收集器的工作量。因此为bean 设置正确的生命周期,并在bean的使命结束后尽快地清理它们,会使用系统性能有一个提高。

  其它一些有用的方法

  1、在字符串连接操作中尽量不使用“+”操作符:在java编程中,我们常常使用“+”操作符来将几个字符串连接起来,但你或许从来没有想到过它居然会对系统性能造成影响吧?由于字符串是常量,因此JVM会产生一些临时的对像。你使用的“+”越多,生成的临时对像就越多,这样也会给系统性能带来一些影响。解决的方法是用StringBuffer对像来代替“+”操作符。

  2、避免使用System.out.println()方法:由于System.out.println()是一种同步调用,即在调用它时,磁盘I/O操作必须等待它的完成,因此我们要尽量避免对它的调用。但我们在调试程序时它又是一个必不可少的方便工具,为了解决这个矛盾,我建议你最好使用 Log4j工具(http://Jakarta.apache.org ),它既可以方便调试,而不会产生System.out.println()这样的方法。

  3、ServletOutputStream 与 PrintWriter的权衡:使用PrintWriter可能会带来一些小的开销,因为它将所有的原始输出都转换为字符流来输出,因此如果使用它来作为页面输出的话,系统要负担一个转换过程。而使用ServletOutputStream作为页面输出的话就不存在一个问题,但它是以二进制进行输出的。因此在实际应用中要权衡两者的利弊。

  总结

  本文的目的是通过对servlet和JSP的一些调优技术来极大地提高你的应用程序的性能,并因此提升整个J2EE应用的性能。通过这些调优技术,你可以发现其实并不是某种技术平台(比如J2EE和.NET之争)决定了你的应用程序的性能,重要是你要对这种平台有一个较为深入的了解,这样你才能从根本上对自己的应用程序做一个优化。

posted @ 2009-06-17 21:53 小强摩羯座 阅读(219) | 评论 (0)编辑 收藏

仅列出标题
共20页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last