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 小強摩羯座 閱讀(1056) | 評論 (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 小強摩羯座 閱讀(175) | 評論 (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 小強摩羯座 閱讀(165) | 評論 (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 小強摩羯座 閱讀(182) | 評論 (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 小強摩羯座 閱讀(263) | 評論 (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 小強摩羯座 閱讀(330) | 評論 (0)編輯 收藏

          豐田模式,如果我的理解沒有錯,其最核心最基本的概念是“集體思考”,強調可視性和持續改進。展開來說,比較有趣的幾點:
          1- 問題是大家共同的,有問題大家一起解決。
          2- 在出現問題的現場解決問題而不是在辦公桌。
          3- 任何人都可以指手畫腳,發現質量問題,工人有權直接停掉生產線。
          4- 持續發現問題并解決。
          5- 建立共識。
          6- 對人,尤其是一線工人的尊重。
          7- 危機意識。

          posted @ 2009-07-20 14:53 小強摩羯座 閱讀(197) | 評論 (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.      挑戰恐懼心理——想想自己頭腦中的“可怕”事件發生的可能性有多大(通常會很?。幌氲阶顗牡慕Y果,并用感情色彩較弱的詞語去描述它(最壞也就是……,頂多只是稱得上倒霉……)

          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 小強摩羯座 閱讀(121) | 評論 (0)編輯 收藏

          知識分子的故園—在復旦大學的演講

          【編者注:這是我閱讀復旦大學計算機系博士生孫賀的主頁博客時,發現的其講話稿。閱讀之后,對其思想的深邃頗為欣賞。另外我對其文中提到的幾個哲學家也都不知道,估計在小孫的眼里,陳首席基本上屬于文盲的范疇。有興趣的讀者可參閱知識分子的故園

          非常感謝復旦大學本科生資助委員會給我提供了這樣一個機會,使我很榮幸的來和大家進行交流,提出自己的一些想法。

          今天我和大家談的倒不是我個人的在專業領域的看法,我主要是想和大家談一談作為當代的知識分子,應該扮演著一個什么樣的角色。為什么要談這樣一個問題呢?因為我們發現今天知識分子的意義和兩百年前或者三百年前已經有了明顯的不同。比如在十七八世紀,許許多多的知識分子,比如帕斯卡、康德、盧梭,他們把他們的研究和實踐結合在一起。我們首先以說帕斯卡為例,我在這里提到的帕斯卡,就是所有學過初等數學,都知道“帕斯卡三角形”的那個帕斯卡。他是一個法國科學家,為了幫助工作繁忙的父親,他設計了法國的第一臺計算器。他利用自己發明的氣壓計證明了真空的存在。不僅如此,他的《沉思錄》被認為是當代人和思想的第一次對話。他還是一個虔誠的天主教徒。

          不幸的是,他在三十六歲時瘋了,在后面的三十七年里一直住在瘋人院里。我們再來看康德。在三十一歲那一年,康德寫下了《自然通史與天體理論,或根據牛頓定律研究整個宇宙的結構及其力學起源》的非凡著作。之后,康德還寫過《將負數引入哲學的嘗試》等論文,從此開始了數學和物理學的研究。眾所周知,康德最為重要的著作就是三大批判,即《純粹理論批判》,《實踐理論批判》和《判斷力批判》。除此以外,康德還有一系列關于教育學的著作,例如《論教育學》、《系科之爭》等??档碌闹饕鬟€包括《使用人類學》。我們很難想象一個終身生活在哥尼斯堡這樣一個小鎮的單身漢,在他八十歲的生活中沒有離開過這個小鎮一步。在漫長的八十年的單身寂寞的生活中,他思考了人生中一切的偉大的實踐。在他的墓碑上有這樣的一句話:“有兩樣東西,我們越是經常不斷地思索他們,他們就越是喚起一種始終新穎和日益增長的贊嘆和敬畏充溢我們的心靈,那就是我頭頂的星空和我心中的道德律。他們向我印證:上帝在我頭頂,也在我心中。”我提及的這些事實意在說明:今天的知識分子和兩百年前傳統意義上的知識分子在形式上出現了非常顯著的差別。關于這一點,五十年前的德國哲學家和精神病學家卡爾•雅思貝斯在《在時代的精神生活》這本書中,就已經一針見血地提出了。

          盡管雅氏描繪的是二十世紀三四十年代的歐洲社會,但在今天看來,他的針砭時弊、一針見血的分析同樣適用于中國現實社會。一言以蔽之,他所闡述的就是在現代社會我們的知識已經瓦解,人的生活缺乏精神上的向導。文藝分析時期,一個人的學術研究和生命實踐始終是結合在一起的。但是在今天,我們并不這樣來看代學術研究。雅斯貝斯的分析非常精辟,他說,我們的一種以前從事高尚研究的快樂,被一種從事狹窄技術領域研究的快感所取代。在這樣的情況下,一種可怕的情況出現了:我們不再認為學術研究是崇高的。比如今天我問大家,大家兒時的夢想是什么,可能對在場的各位同學而言,你們會說童年時代的純真的夢想是成為一個科學家,因為在那時的我們內心深處科學家代表了一種崇高。但是在今天,當各位從事學術研究的時候,你們會發現:你們現在所走的學術道路與你們兒時的夢想相差甚遠。為什么?我們鉆入到一個狹窄的領域,我們在進行研究,但是這種研究并不能給我們帶來普遍的幸福

          于是在這一點上一個很關鍵的問題出現了。我們就要問:這種情況是如何發生的?對于二十年前的中國知識分子而言,他們的存在首先代表了一種人文情懷。但是這種情況在今天已經消失殆盡。今天的中國社會在一定程度上、或者說今天的中國人和全世界的許許多多人,沒有兩三百年前的人更富有想象力,更能耐得住寂寞。今天的人們聽任于娛樂的安排,我們上網,聊天,看電視,然后有各種各樣的休閑手段。你如果寂寞的話,你會有一個各種各樣的方式去排除寂寞。叔本華說過一句話 “孤獨是一種偉大的情感”,但是今天的人已經甚少有一種真正的孤獨的感覺。大家有的是什么,是郁悶,對吧?我們有的是郁悶。但是對于今天的人們,更為可怕的是,今天中國的一部分知識分子,居然走上了模特在T字臺上所走的貓步。比如說于丹,等等。正是在這一點上,我們看到:今天的知識分子已經與一種作為知識分子本身的使命感相隔絕了。這種使命感是什么?我作為一個知識分子,我要去為國家而奉獻、犧牲。天下興旺,匹夫有責的中國古代人文精神在今天的知識分子中悄然消失了。所以,每當我憶起起俄羅斯文學的時候,俄羅斯知識分子的那種流亡意識總是給予我深刻的印象和淚如泉涌的感動。即一個知識分子,他可以拋棄生命中物質的一切,也要保守某種精神生活。一旦人們承認人的生活不是獸性的,而是文明的,那么他在世界中的生活本質上講就應該是一種精神生活。

          海德格爾曾經說過:人是追求生活意義的生物。如果一個人在他的生活中找不到生命的意義,他寧愿去自殺,哪怕他的身邊全是面包。如果我們試圖理解這樣一句話,一個自然的問題就會被立即提出:即這種生命的意義應該如何去尋找?其實在人類的啟蒙時代,就曾經提到過這樣的問題。即人類在文明開始之初,他們就已經想到過一個人的生活必須有一種深刻的意義在其中。為什么,我們今天來想一下:如果我們認為,我們出生之前的一切,和我們毫無關系,在我們死亡之后的一切,和我們也沒有任何關系。那么我們的生命是不是沒有任何意義,我們在世界中的生活就只剩下吃喝玩樂。但是事實并不是如此。所以在東西方文明的早期,人們同時想到了同一個問題:即在終極上,人的生活應該是有意義的。從這一點出發,東西方文明對于這樣一個絕對意義,想出了兩個不同的途徑,即起源于東方、盛行于西方的基督教文明和中國的儒學思想。在西方的基督教世界中,西方人認為:倘若有一個絕對的上帝在我們中間,人生就可以獲得形而上學的意義。因為在這刻,人們可以自然地產生一種超驗之思。我們可以,把一個人的生活放到一個上帝的維度,因此人就有一個全能的上帝去審視字詞。在這時,他就可以約束著我們。與此同時,中國的儒家學派,將人的根本意義,集中到了禮教,倫理這一層面,這是一種脫離了行而上學的思辨。所以黑格爾在他的《哲學演講錄》的第一卷中就曾寫過:”中國沒有真正的哲學,有的只是倫理學。”可悲的是,今天的中國人,還在信仰著以倫理為基礎的東西。我們有沒有深刻地思考過,我們這種倫理,它的合理之處在哪里?也許這是我們需要真正思考的問題。今天許多的中國學生,缺少一種獨立思考的精神,我在這里,我稱其為一種精神,而不是一種能力,因為這本身非常重要,無法通過世俗教育去培養。在中國的儒家學派中,我們說“不孝有三,無后為大”,“父母在,不遠游,游必有方”,等等。我們也都知道,為了紀念投汨羅江自盡的現實主義詩人屈原,中國傳統中于是又了端午節,并有了吃粽子、賽龍舟的習俗。我們稱屈原是一個偉大的現實主義詩人。原因何在?不妨去讀屈原的《天問》,他百思不得其解要問的是什么?在我看來,他問核心的是在這樣一個以儒教為統治的國家中,王權的合法性在哪里。屈原最早認識到了這一點,對一個人而言,是一種非常痛苦的事實。因為一個人生活在儒家思想中,卻不能為以這種思想為生活的合理性提供依據。今天的人們一方面去宣揚儒教,一方面我們去紀念屈原,這不是一個非??尚Φ氖聦崋幔课覀兡弥鴤惱聿环牛覀兘裉斓娜藗儧]有真正地去思考,這種倫理的合理性在哪里?

          基督教文明從公元五世紀到十五世紀,經歷了漫長的一千年中世紀。一千年后,歐洲迎來了文藝復興。與此同時,近代的基督教社會有了一次又一次的改革。直到十九世紀末尼采“殺死”了上帝。尼采曾經寫過《查拉圖斯特拉如是說》這本書,有人說這本書的出版把無數人的宗教信仰一勞永逸地消除了。尼采是種非常自信的人。他曾經在一本書的前言中寫到:我的書是為這個社會極少數的人寫的,但在這極少數的人當中,可能一個都還沒有出生。但尼采斷言,我的書終將名垂千古,載入史冊。晚年的尼采非常寂寞,在日記中他寫道,在大街上,我想擁抱隨便哪一個人。寂寞之極,一八八九年尼采在都靈大街上抱住了一匹受馬夫虐待而發瘋的馬,尼采瘋了。二十世紀的曙光來臨之時,尼采安靜地離開了這個世界。

          尼采殺死上帝后,西方人的生活突然呈現了一種荒誕性。如果沒有一個人,沒有一種絕對的規則存在的話,人是可以胡作非為的,因為絕對意義消失了。一旦絕對意義消失,那么人在在一個荒誕世界中的生活,其實很容易,吃喝玩樂,僅此而已。但是一個知識分子,如果在一個荒誕的世界中,既要去承擔一種荒誕,并且要從荒誕中尋覓意義的話,這就非常困難。此時,存在主義的興起為二十世紀人的生活的合理性提供準則。我們以最著名的存在主義大師薩特為例:當我們去看他的《他人就是地獄》這本書的時候,我們會發現一篇著名的文章,即《論五月風暴》。在這篇文章中,薩特談論的是一九六八年全球范圍內的學潮運動。薩特這樣寫道:他們反了,他們要尋找一個他們自己的世界。而這個世界,在我們的年輕時代,也曾經尋找過。但在我們年輕的時代,我們沒有去反抗。而今天,他們的反抗和我們年輕時候沉默的事實,證明了在面對同一個制度的時候,他們的偉大和我們的渺小。通過這樣的方式人們發現,在一個虛無的世界上,人的活動就是成了人的意義本身

          而在今天的中國社會,一個知識分子如何去創造他自己的意義?今天人們沒有,或者說今天的中國人缺乏這樣的反思。有人問,中國的知識分子,中國的文學家,為什么沒有去拿諾貝爾文學獎。或者有人問,中國的文學家,離諾貝爾獎還有多遠。在我看來,這個問題,我可以從這樣一個視角給出回答,就是在我們今天中國的作家——或者說從魯迅開始——所描寫的生活,偏重于人的社會生活分析而沒有很深刻地剖析人的生存本質。當我們去讀馬爾克斯的《百年孤獨》,我們有一種人的孤寂和幻滅的感覺。甚至有人告訴我,他讀過之后有一種自殺的感覺。因為在那里,我們看到了關于人謂之人的深刻反思。而今天的中國作家,中國的知識分子,缺乏這種反思。

           

          為什么這種反思尤其重要?黑格爾曾經說過這樣一句話“一個民族總要有一些仰望星空的人,這個民族才有希望。如果這個民族所有人都仰望腳下的事物,那么這個民族是沒有希望可言的。”今天中國社會的可怕在于我們太缺乏這樣的知識分子。這是一個民族的可悲。如果問今天的中國,有什么可以使我們低下頭顱來,我認為,在中國近三百年來,我們沒有產生一個可以和西方的知識分子相抗衡的知識分子。我們沒有產生薩特這樣的人物。沒有產生康德,黑格爾,叔本華這樣的人物。甚至沒有產生加繆和福柯這樣的人物。這是一個民族的悲哀。每一個深刻思考過時代精神的知識分子都能意會:夫物質之文明,取諸他國,不數十年而具矣,獨至精神上之趣味,非千百年之培養,與一二天才之處,不及此。

          讓我們去審視德意志民族。德國有一個非常偉大的教育家——洪堡。他按照自己的教育思想,建立了洪堡大學。后來,德國許許多多的大學,都是按照他的模式建立起來的。在我讀本科的時候,這種思想,我們全世界仍然是他的受益者,那是什么?那就是關于教育之本質的深刻理解。所有人你來德國學習,學費是全部免掉的。因為教育是一種事業。人并不是僅僅生活在現實生活中,人是一種歷史的被造物。置于一切歷史之下,教育便有了一種根本的意義,教育的目的是去塑造人。今天的中國之教育,中國的高等教育,把人淪為了一種工具。我們總是評論一所大學的畢業生中,有多少人去國企了,有多少人拿了高薪,當一個高等學府用這個作為一種炫耀的資本的時候,我們便不得不承認:一種恢弘壯麗般教育從根本上墮落了。教育的目的是人,人是目的,不是工具。在洪堡的時代,洪堡幾乎是把所有的資源平均地用于教育。所以說德國的大學,他們的好與壞,并沒有中國的大學這么懸殊,也沒有美國的大學這樣懸殊。但是德國,按照洪堡的思想,一個人去接受教育,那么這個教育的錢應該是國家來付。今天的中國人,教育部部長揚言:教育不能產業化;但是從國家到地方,我們實際做地恰恰是教育的產業化。但是現在你去德國留學也是要學費的,全世界已經越來越美國化了。全世界已經一起朝資本看齊的。

          這世界仍然有一些非常偉大的人。二十世紀有三個最偉大的知識分子:薩特,福柯和喬母斯基。我不知道在座的各位,有多少人知道這者的名字。有人說,二十世紀的人不知道??拢拖袷攀兰o的人不知道馬克斯一樣。不能說他是文盲,至少不能說他是一個知識分子。我知道我身邊很多人都不知道福柯。我去年在西班牙。訪問期間,我決定去法國掃??碌哪?。我問了一個在西班牙生活多年的華人,他三歲的時候到了馬德里。我告訴他,我想去掃??碌哪?,但不知道福柯的墓在巴黎的什么地方。當然我沒有這么直接地問,我先問你知不知道??拢驗槲抑乐袊脑S許多多人都不知道福柯。他跟我說了一句話,他說“我也是讀過高中的人”。從這個很小的事情,我們可以看出在歐洲的教育中,仍然沒有忽略最核心的精神層面的培養。而這一塊,在今天的中國,在我們呼喊素質教育的時候,實際上已經把教育庸俗化。教育的根本目的——人的精神力量的培養——在今天的中國已經被完全忽略了。

          我現在指導四個本科生進行研究工作。他們中的每個人都在學術領域嶄露頭角、甚至取得了令人矚目的成績。我時常告訴他們,這還不夠。一個學者從專業研究中獲得快樂,但是一個思想者應該懂得在學術中生活。思想者這一稱謂的定義不是來自他的研究,而應該首先來源他的生活。因為教育的首要目的是培養有思想的人,所以我們經常閱讀中西方思想史,試圖理解與我們看似久遠的西方文明。比如說,??掠芯湓挘?#8220;學校是監獄和醫院的混合物”,這句話怎么理解?其實在福柯看來,現在許許多多的人文科學,諸如教育學、心理學、社會學,它們不但不是真理,反而是一種權力、一種殺人的工具。比如說,再讓我們回望精神病學,??略凇动傤嵟c文明》中探討了現代精神病的起源。在十六世紀之前,我們并不認為精神病人是瘋子。我們甚至把他們作為一種可以預見未來的先知一樣看待。瘋子可以在大街上游走,并且受到人們的尊敬。這個可能是今天的人們所無法想象的。但是在五個世紀后,在我們所謂更加文明的社會當中,他們為什么就被關進了醫院呢?實際上,在一六五六年法國國王下了一條命令,就說建立法國總醫院。法國總醫院的建立,并不是一個醫療機構。它是一個訓誡機構。它要告訴人們:一個人要勤奮的工作,你如果不勤奮工作,就會和大街上的所有流浪漢和所謂的瘋子一樣,全部都關進了這樣一個法國總醫院里。當時法國總醫院的條件極為惡劣,許許多多的人住在一起,下面就是老鼠亂竄。于是,隨著麻風病的消退,精神病人成為了社會唾棄的新對象。但是恰恰在于,今天的人們,我們不能說我們是正常的,從而說你們是非正常的。借??轮?,現代人需要從他們的角度,去證明精神病人的合法性。但是我們發現,在六百多年的歷史進程當中,人們文明的若干關鍵要素、或者說現代文明,正是通過帕斯卡、梵高、尼采,這些所謂的非理性的人來建立的。但是我們要在他們這些瘋子面前,去證明我們的理性是正常的,這不是一個很可笑的事實嗎?

          現代人的精神,遠遠沒有以前人那樣純潔。現在人在精神層面上已經墮落了。比如說,??掠幸痪渥顬榧怃J的話:“只要男人和男人的婚姻一天,現代文明就一天無從談起。”人們無法理解這樣一句話,因為大家聽到這句話的時候,大家往往首先想到的不是愛情,而是性。人們認為,兩個男人和兩個男人在一起,這是很惡心的。人們首先不會去想到,兩個男人,只要兩個男人他們在精神上在一起,那么這種愛情就是高尚的。而這種愛情曾經在古希臘曾經發生過。在公元五世紀以前也曾經有過。只是在今天,人們越來越強調物質,金錢和欲望的滿足。當代社會諸如此類的怪現狀還有很多。對于今天的中國的知識分子而言,我們應該有許多深思,當你仔細去想這個時代的時候,你會發現許多反常的現象。如果一代青年人還有一部分人去試圖改變這種現象,這個國家就會有希望;如果我們這一代人都試圖去迎合世俗,這個國家的精神風貌就會停滯不前。我們的許多知識分子——我們姑且稱他們為知識分子——不再把教育作為一種神圣的職業來看待。他們開始炒股,他們開始開公司。他們把學生作為一種免費的勞動力。一種非常神圣的師生關系,一種新貨相傳的思想之光,在今天墮落得一塌糊涂。他們向國家騙基金,幾十萬或幾百萬,然后去做一些不痛不癢的學問。更有甚者,少數知識分子一旦走上領導崗位,便扮演了政客的角色。管你學生好壞、是否才華出眾,老子嘴大說得算。在復旦,這是多么大的悲哀。當我憶及國父孫文先生的“天下為公,努力前程”的文字時,我為這些人感到奇恥大辱。

          這就我們一個時代的悲哀,也是復旦的悲哀。但許許多多的人沒有看到這一點。我希望在復旦,在這樣一個很小的優秀本科生當中,在你們思考這些問題的時候,你們要看到這一點。若干年后你們才會試圖去改變這一切。

          加謬在《西西弗斯神話》的開篇就寫道:“真正嚴肅的哲學問題只有一個,那就是人是否可以自殺。”為什么人他要探討這樣一個問題?劉小楓在《拯救與逍遙》這本書中寫道,與其讓這個世界以曖昧的方式贏,不如讓自己以肯定的方式輸。但是在今天,唯獨有意義的,是一種生活的創造。是我們可以把生活賦予一種真實的意義。這種真實的意義是通過知識分子的精神活動來體現的。這種精神活動,在一個很低級的層面,正是我們所謂的,一日為師,一生為范。在一個很高級的層面來講,就是真真正正的知識分子的思想,他的精神能夠代代相傳。

          注定有人會被歷史的足跡所記錄。比如說賈植芳先生。知識分子不能成為一種政府的附庸。知識分子一詞,本來就代表了一個人的精神事實,我們中國的知識分子當中,有賈植芳這樣的人,也有類似郭沫若這樣的作家。一個人在生活當中,他往往會向某些東西妥協。但是一個人的精神,他的視野,應該是向這個天空的方向去了望。這樣一個民族才有希望。

          回到具體事情上來,我來談優秀本科生的專門培養。當我去指導本科生的時候,有一次我和一個本科生聊天。我當時我跟他說,我寢室里有兩百本書,你隨便看,你看不出我是從事哪一個領域研究的。然后他告訴我,他寢室中也有兩百本書。我覺得這樣的人才是我欣賞的。首先你是一個有追求的人,其次你是一個在專業領域有所成績的人。但你一個人僅僅在專業領域有所成績,你僅僅把發文章當作一種目的的話,那么一個人,他生活的價值就會變得很少。曾經有一個老師對我說,我們總是要把一些東西量化,所以我們博士畢業,發表了多少篇SCI,這種量化就非常重要,因為它很客觀。我說,錯!這種東西很客觀,恰恰是由于我們缺乏了許許多多能夠高瞻遠矚的教育者,他認為你是不是具有一種博士的胸懷,博士的研究能力。所以說在今天,我們什么都能量化。一個學生的好壞,我們看GPA;一個國家的發展,我們看GDP;那么一個教授的好壞,我們看發了多少SCI/EI。這到底是現代人的一種文明呢?還是現代人的愚蠢。有個偉大的數學家叫做黎曼。他一生只發表了十八篇論文。還包括手稿。但那十八篇論文確是名垂青史。大家如果對于數學有稍微一些多的了解的話,就是說當代數學有個非常重要的難題——黎曼猜想,就是黎曼提出的。

          二十世紀之初,年僅三十八歲的希爾伯特在第二屆數學家大會發表了二十世紀人類需要解決的二十三個數學難題。像希爾伯特這樣偉大的數學家,他曾經說過這樣一句話——請大家注意希爾伯特的用語——他說如果我死后一千年能夠復活,那么我問的第一個問題就是黎曼猜想解決了沒有。與那個已逝的時代相比,現代人比的不是思想的深邃,比的是一個人在物質上的富有,一個人帥不帥,我們輿論已經為這些所左右。這是一個社會的悲哀,學者和大學的媚俗。但是大學的使命并不是如此。我曾經和我的學生講過康德的《論教育》。你們很難想象康德這樣一個八十歲的單身漢,他的《教育學》會寫得如此細膩,初讀起來仿佛有一種獨特的父愛在身邊。康德從嬰兒出生開始寫起。嬰兒出生的時候母親的乳房中總會流出一些透明的液體,我們翻譯成中文叫做初乳。是康德首先發問,這種初乳對于嬰兒是不是有益。因為在之前這種初乳都是不要的。但康德首先問這種東西是不是對嬰兒有益的。他認為人類總不會做無用功。還有,在嬰兒哭的時候,家長總喜歡把嬰兒抱起來,搖一搖,這樣把孩子不哭了。是康德首先發現:嬰兒不哭這一表象的原因是由于成人的行為足以導致嬰兒的眩暈,就像我們看兒童坐木馬轉幾圈就暈了一樣,這對于他大腦的發展是非常不好的影響??档聫拇藢懫穑瑢懙揭粋€人的兒童教育,行為習慣的養成。然后,小學時的認知教育,德育的教育,美育的教育,初中時的體育教育,青春期時的性教育,大學時的哲學教育,科學教育。

          除了康德,我們還可以列舉其他人。比如亞當斯密,我們最熟悉他的書是《國富論》。但是他還寫過一本道德哲學的經典——《道德情操論》。這是一個道德倫理學的經典之作。在今天的中國人,如果能夠產生這樣的知識分子,就至少代表了一個民族有一種很高貴的氣質在里面。如果今天所有的知識分子都在作秀,那么這個民族就沒有希望。

          最后我要送給大家的是偉大神學家巴特的一句話。他在論述心愛的莫扎特的書中寫道

          Das Schwere schwebt und das Leichte uwendlich schwer wieget

          生活是沉重之輕與輕之沉重

          posted @ 2009-06-30 15:17 小強摩羯座 閱讀(286) | 評論 (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 小強摩羯座 閱讀(232) | 評論 (0)編輯 收藏

          僅列出標題
          共20頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
          主站蜘蛛池模板: 瑞丽市| 米脂县| 松桃| 石首市| 宣城市| 正蓝旗| 赞皇县| 潜江市| 鄂尔多斯市| 微博| 进贤县| 剑河县| 黑山县| 安徽省| 丰镇市| 凌源市| 集安市| 江达县| 聊城市| 清流县| 清水河县| 太白县| 从化市| 长岭县| 理塘县| 宝清县| 台江县| 驻马店市| 调兵山市| 芦山县| 囊谦县| 浙江省| 临颍县| 乌苏市| 唐山市| 搜索| 阳泉市| 淮安市| 乌兰浩特市| 清远市| 昌都县|