<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 32, 文章 - 1, 評論 - 5, 引用 - 0
    數(shù)據(jù)加載中……

    2010年11月12日

    利用反射打印測試JavaBean

    /**
      * 測試方法
      *
      * @param obj
      * @return
      */
     public static StringBuffer testPOJO(Object obj) {
      Class cls = obj.getClass();
      Field[] fields = cls.getDeclaredFields();
      StringBuffer resultBuf = new StringBuffer();
      try {
       for (int i = 0; i < fields.length; i++) {
        String fieldName = fields[i].getName();
        Class fieldType = fields[i].getType();
        Method method;
        if (fieldType.equals(boolean.class)) {
         method = cls.getMethod("is" + genMethodName(fieldName));
        } else {
         method = cls.getMethod("get" + genMethodName(fieldName));
        }
        Object res;
        if ((res = method.invoke(obj)) != null) {
         String result = res.toString();
         resultBuf.append("[" + fieldName + "] = " + result + "\n");
        } else {
         resultBuf.append("[" + fieldName + "] = NULL \n");
        }
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
      return resultBuf;
     }
     
     public static String genMethodName(String fieldName) {
      String firstWord = fieldName.substring(0, 1);
      String others = fieldName.substring(1, fieldName.length());
      return firstWord.toUpperCase() + others;
     }

    posted @ 2011-10-12 16:34 colorfire 閱讀(393) | 評論 (0)編輯 收藏

    轉(zhuǎn) 淘寶2011.9.21校園招聘會筆試題

    原鏈接 http://blog.csdn.net/hackbuteer1/article/details/6823329

    一、單選題
    1、我們有很多瓶無色的液體,其中有一瓶是毒藥,其它都是蒸餾水,實驗的小白鼠喝了以后會在5分鐘后死亡,而喝到蒸餾水的小白鼠則一切正常。現(xiàn)在有5只小白鼠,請問一下,我們用這五只小白鼠,5分鐘的時間,能夠檢測多少瓶液體的成分(C)
    A、5瓶                     B、6瓶                           C、31瓶                               D、32瓶

    2、若某鏈表最常用的操作是在最后一個結(jié)點之后插入一個結(jié)點和刪除最后一個結(jié)點,則采用()存儲方式最節(jié)省時間?
    A、單鏈表                   B、帶頭結(jié)點的非循環(huán)雙鏈表                       C、帶頭節(jié)點的雙循環(huán)鏈表                D、循環(huán)鏈表

    3、如果需要對磁盤上的1000W條記錄構(gòu)建索引,你認為下面哪種數(shù)據(jù)結(jié)構(gòu)來存儲索引最合適?()
    A、Hash Table                      B、AVL-Tree                      C、B-Tree                 D、List

    4、可用來檢測一個web服務(wù)器是否正常工作的命令是()

    A、ping                      B、tracert                          C、telnet                           D、ftp

    只有C可以測試Web主機的網(wǎng)頁服務(wù)器是否工作正常,假設(shè)該服務(wù)器的網(wǎng)頁服務(wù)器使用的是默認端口,則可以使用命令telnet hostname 80 來測試其是否工作。

    5、下面哪個操作是Windows獨有的I/O技術(shù)()
    A、Select                           B、Poll                               C、IOCP                               D、Epoll

    6、IPV6地址包含了()位
    A、16                               B、32                                C、64                              D、128

    7、數(shù)據(jù)庫里建索引常用的數(shù)據(jù)結(jié)構(gòu)是()
    A、鏈表                         B、隊列                       C、樹                             D、哈希表

    8、在公司局域網(wǎng)上ping www.taobao.com沒有涉及到的網(wǎng)絡(luò)協(xié)議是()

    A、ARP                          B、DNS                               C、TCP                         D、ICMP

    DNS是將域名www.taobao.com映射成主機的IP地址,ARP是將IP地址映射成物理地址,ICMP是報文控制協(xié)議,由路由器發(fā)送給執(zhí)行ping命令的主機,而一個ping命令并不會建立一條TCP連接,故沒有涉及TCP協(xié)議。

    二、填空題
    1、http屬于(應(yīng)用層)協(xié)議,ICMP屬于(網(wǎng)絡(luò)層)協(xié)議。
    2、深度為k的完全二叉樹至少有(2^(k-1))個結(jié)點,至多有(2^k-1)個結(jié)點。
    3、字節(jié)為6位的二進制有符號整數(shù),其最小值是(-32)。

    4、設(shè)有28盞燈,擬公用一個電源,則至少需有4插頭的接線板數(shù)(9)個。

    第一個板4個口,此后每增加1個板會消耗1個原來的口,總的只增加3個口,故N個接線板能提供 1+3*N個電源口

    三、綜合題
    1、有一顆結(jié)構(gòu)如下的樹,對其做鏡像反轉(zhuǎn)后如下,請寫出能實現(xiàn)該功能的代碼。注意:請勿對該樹做任何假設(shè),它不一定是平衡樹,也不一定有序。
      1 1
      / | \ / | \
      2 3 4 4 3 2
      /|\ /\ | | / \ / | \
      6 5 7 8 9 10 10 9 8 7 5 6

      答:以孩子、兄弟的存儲結(jié)構(gòu)來存儲這棵樹,使之成為一顆二叉樹,然后對二叉樹進行鏈表的轉(zhuǎn)換。

     

    1. typedef struct TreeNode  
    2. {  
    3.     int data;  
    4.     struct TreeNode *firstchild;  
    5.     struct TreeNode *nextsibling;  
    6. }TreeNode,*Tree;  
    7.   
    8. void MirrorTree(Tree root)  
    9. {  
    10.     if(!root)  
    11.         return ;  
    12.     if(root->firstchild)  
    13.     {  
    14.         Tree p=root->firstchild;  
    15.         Tree cur=p->nextsibling;  
    16.         p->nextsibling=NULL;  
    17.         while(cur)  
    18.         {  
    19.             Tree curnext=cur->nextsibling;  
    20.             cur->nextsibling=p;  
    21.             if(p->firstchild)  
    22.                 MirrorTree(p);  
    23.             p=cur;  
    24.             cur=curnext;  
    25.         }  
    26.         root->firstchild=p;  
    27.     }  
    28. }  
    29.   
    30. int main(void)  
    31. {  
    32.     TreeNode *root=(TreeNode *)malloc(sizeof(TreeNode));  
    33.     Init();  
    34.     MirrorTree(root);  
    35.     OutPut();  
    36. }  
    2、假設(shè)某個網(wǎng)站每天有超過10億次的頁面訪問量,出于安全考慮,網(wǎng)站會記錄訪問客戶端訪問的ip地址和對應(yīng)的時間,如果現(xiàn)在已經(jīng)記錄了1000億條數(shù)據(jù),想統(tǒng)計一個指定時間段內(nèi)的區(qū)域ip地址訪問量,那么這些數(shù)據(jù)應(yīng)該按照何種方式來組織,才能盡快滿足上面的統(tǒng)計需求呢,設(shè)計完方案后,并指出該方案的優(yōu)缺點,比如在什么情況下,可能會非常慢?

     

    答:用B+樹來組織,非葉子節(jié)點存儲(某個時間點,頁面訪問量),葉子節(jié)點是訪問的IP地址。這個方案的優(yōu)點是查詢某個時間段內(nèi)的IP訪問量很快,但是要統(tǒng)計某個IP的訪問次數(shù)或是上次訪問時間就不得不遍歷整個樹的葉子節(jié)點。答:

    或者可以建立二級索引,分別是時間和地點來建立索引。

    四、附加題
    1、寫出C語言的地址對齊宏ALIGN(PALGNBYTES),其中P是要對齊的地址,ALIGNBYTES是要對齊的字節(jié)數(shù)(2的N次方),比如說:ALIGN(13,16)=16
    1. ALIGN(P,ALIGNBYTES) ( (void*)( ((unsigned long)P+ALIGNBYTES-1)&~(ALIGNBYTES-1) ) )  
    2、在高性能服務(wù)器的代碼中經(jīng)常會看到類似這樣的代碼:
    typedef union
    {
      erts_smp_rwmtx_t rwmtx;
      byte cache_line_align_[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(erts_smp_rwmtx_t))];
    }erts_meta_main_tab_lock_t;

    erts_meta_main_tab_lock_t main_tab_lock[16];

    請問其中用來填充的cache_line_align的作用是?

    3、在現(xiàn)代web服務(wù)系統(tǒng)的設(shè)計中,為了減輕源站的壓力,通常采用分布式緩存技術(shù),其原理如下圖所示,前端的分配器將針對不同內(nèi)容的用戶請求分配給不同的緩存服務(wù)器向用戶提供服務(wù)。
      分配器
      / | \
      緩存 緩存 ...緩存
      服務(wù)器1 服務(wù)器2 ...服務(wù)器n

    1)請問如何設(shè)置分配策略,可以保證充分利用每個緩存服務(wù)器的存儲空間(每個內(nèi)容只在一個緩存服務(wù)器有副本)

    2)當部分緩存服務(wù)器故障,或是因為系統(tǒng)擴容,導(dǎo)致緩存服務(wù)器的數(shù)量動態(tài)減少或增加時,你的分配策略是否可以保證較小的緩存文件重分配的開銷,如果不能,如何改進?

    3)當各個緩存服務(wù)器的存儲空間存在差異時(如有4個緩存服務(wù)器,存儲空間比為4:9:15:7),如何改進你的策略,按照如上的比例將內(nèi)容調(diào)度到緩存服務(wù)器?

    posted @ 2011-10-10 10:19 colorfire 閱讀(312) | 評論 (0)編輯 收藏

    safari 地址欄中url兩遍

    環(huán)境:mac os 10.6.6,safari 5.0.5

    現(xiàn)象:
    在地址欄中輸入url提交后,地址欄中地址竟然又被復(fù)制一次。 e.g 輸入http://www.baidu.com/回車提交變?yōu)閔ttp://www.baidu.comwww.baidu.com,而以數(shù)字結(jié)尾的例如http://sparklet.net/?p=207則訪問正常。

    問題解決:
    該問題實際是由于代理導(dǎo)致,之前使用web代理上網(wǎng),后來web服務(wù)器我給關(guān)掉了,但代理忘記改回來,結(jié)果導(dǎo)致這種奇怪現(xiàn)象。不知道是不是safari的bug。
    總結(jié):blogjava的文檔輸入太難用了,分類也不方便。

    posted @ 2011-05-18 22:36 colorfire 閱讀(280) | 評論 (0)編輯 收藏

    zz碼字-電信行業(yè)體制內(nèi)

    第一段:回顧歷史
         先說幾個例子:
         80年達大家忙著找后門進國企的時候,慶幸找個鐵飯碗的時候,全國有幾人會想到10年
    后國企就大規(guī)模破產(chǎn);
         90年代大家忙著往北電等外企跑的時候,覺得無比光榮有面子,全國有幾人會想到10年
    后北電掛了,華為的收入一騎絕塵;
         90年代末大家覺得運營商特別體面,收入特高的時候,有幾人會想到過不了幾年有個玩
    意叫全員營銷?每年離職的人越來越多?
         21世紀初大家覺得事業(yè)單位還不錯的時候,覺得起碼還算穩(wěn)定,全國有幾人會想到幾年
    后事業(yè)單位改制就愈演愈烈?編制逐步取消,退休制度改革,壟斷收入逐步減少,市場競爭
    壓力逐步加大;
         2010左右大家瘋了一般地考公務(wù)員,以為肯定必須是個金飯碗,全國有幾人會注意到,
    很多地方的公務(wù)員聘任制已經(jīng)悄然開始了。
         很多事情,我們想起來可能都不太可能,但是他曾經(jīng)發(fā)生過——80年代大批人辭去公職
    下海,90年代初我國政府財政瀕臨破產(chǎn),公務(wù)員的工資是打白條,國務(wù)院都在裁員。曾經(jīng)糖
    煙酒公司比煙草公司高幾個檔次,曾經(jīng)糧食局是很多地方政府里為數(shù)不多的發(fā)得出工資的單
    位。曾經(jīng)大家覺得去了海關(guān)就可以到處撈黑錢,曾經(jīng)大家覺得運營商是個讓人眼紅的金飯碗
    ……上述這些事情發(fā)生轉(zhuǎn)變一般不超過10年
      
         中國數(shù)百年來的戰(zhàn)略眼光第一人,太祖,在1945年的最大的奮斗目標就是能搞個聯(lián)合政
    府,讓tg能參政就心滿意足了。這逆天第一人都沒想到4年之后他就成為本朝太祖了。所以
    ,我們不應(yīng)該妄加判斷未來會一定會怎樣怎樣,政府一定不會對公務(wù)員等體制內(nèi)動手。
      
      
    ————————————————————————————————————————
    第二段:以通信業(yè)為鑒,看歷史變遷對通信業(yè)體制內(nèi)外的影響
         以史為鏡吧,我們看看曾經(jīng)90年代極為風光的體制內(nèi)運營商的變遷,在20年前,地方電
    信一般是當?shù)財?shù)得上的好地方了,很多公務(wù)員也眼饞的地方。20年了,請看變遷情況。
      
    1.歷史及現(xiàn)狀:
         中國的通信業(yè)是較早實現(xiàn)對內(nèi),對外開放的行業(yè)。在最開始,最爽的不是愛立信的員工
    ,雖說當時愛立信收入不低,但是跟運營商比也就半斤八兩,在地方地位也高,那時候也不
    存在指標問題,都是對方求著辦事。
         在本世紀初,隨著市場的進一步開放,競爭不斷加劇,固網(wǎng)運營商為對付移動推出小靈
    通,南網(wǎng)通北電信在對手地盤大打固網(wǎng)價格戰(zhàn),員工的收入是一年不如一年,指標是一年高
    過一年,全員營銷也是那時候出來的。不過那時候還好,起碼收入高于付出。
         到了近幾年,上面下的指標太高,搞的大家只能靠做假指標了(各位運營商同仁都知道
    ,不管是市場的還是網(wǎng)絡(luò)的,假指標已經(jīng)全面鋪開了),至于說收入——歡迎論壇上這幾年
    所在運營商沒降薪的兄弟姐妹們舉手。活多錢少必加班,升職無望加薪?jīng)]盼,雞肋的工作天
    天還得做。
         我們再舉一個例子:設(shè)計院,運營商的三產(chǎn),這些都是曾經(jīng)的銀飯碗,現(xiàn)在呢?各個地
    方設(shè)計院除了四大院之外還有哪個紅火的?收入、工作在當?shù)剡€能稱得上體面嗎?
         與此相對的是,這幾年設(shè)備商的收入,尤其是一線設(shè)備商的收入節(jié)節(jié)增高,我就不多評
    價了。在06年,我寫《通信行業(yè)求職寶典》的時候,我提了兩個觀點——1.看好華為;2.如
    果這兩年能進移動抓緊進,再過兩年就沒必要了。如果合適華為,那時候進華為,就算是在
    國內(nèi),20來萬一年也該有了。那時候進移動,現(xiàn)在也該是個主管了,好歹不用自己天天去一
    線干指標了。至于說現(xiàn)在過去,那不好說。
      
    2. 簡要分析:
         最早,通信業(yè)的收益主要是依靠壟斷地位帶來的,跟個人能力無關(guān)。幸運的是,當這種
    壟斷被打破的時候,正好趕上了通信業(yè)高速發(fā)展的時候,行業(yè)有足夠的容量來吸納各色人等
    ,大家可以看到前幾年被改革掉的設(shè)計院、三產(chǎn)在近幾年都沒有發(fā)生太大的沖突。但是一旦
    當這個行業(yè)走下下坡路的時候,體制內(nèi)的保護如果被打破,從業(yè)人員就面臨巨大的風險。于
    是大家可以看到近兩年地方設(shè)計院改行的人越來越多,因為在繼續(xù)做下去就餓死了,接觸過
    的一些副院長級的甚至都開始跳槽了。
         總體來說,越早被打開的行業(yè),可能最開始會有一陣陣痛,但是后來肯定是幸福的。例
    如運營商的人是幸福的,因為大家所在的企業(yè)已經(jīng)初步脫離了體制內(nèi)了,運營商的很多技術(shù)
    人員技術(shù)水平不錯,設(shè)備商愿意接受,市場人員跳出來去其它公司做市場也不錯。我們現(xiàn)在
    已經(jīng)可以看到,幾家運營商內(nèi)部相互挖墻腳的情況已經(jīng)慢慢開始了,運營商也開始初步引入
    很多設(shè)備商的人。在以前,你能想到去了移動之后跳槽到電信?
        而且更關(guān)鍵的是:運營商的年輕人現(xiàn)在都還有能力,年老的人基本位置都穩(wěn)定,在這種
    情況運營商逐步脫離體制內(nèi),對于大家都是個好事情。想想,萬一你40歲的時候,市場競爭
    忽然加劇,你坐慣了20年的辦公室,忽然要去搞16個小時的校園促銷。。。。。
      
      
    3. 看其它事業(yè)單位、體制內(nèi)的行業(yè):
        運營商的現(xiàn)狀,只是很多體制內(nèi)的一個縮影,這個縮影在近幾年可以用來被很多事業(yè)單
    位參考,例如出版社、醫(yī)院、學(xué)校、報社等,在不久的未來,這個縮影也會被很多公務(wù)員所
    參考。大家都會走過一段工作性價比降低,減員增效,然后逐步健康化的階段。
        在這可以舉幾個例子,有已經(jīng)發(fā)生的,有未來將會發(fā)生的。
    出版社、報社:
        出版社、報社過去那絕對是個鐵飯碗,現(xiàn)在呢?窮的出版社一月發(fā)2、3K工資,在市場上
    聽不到聲音,市場化的出版社有的編輯富的冒油,有人餓的要死,國內(nèi)的出版行業(yè)基本已經(jīng)
    脫離了體制內(nèi)。報社就更不用說了,除了一些黨報,別的哪家還有體制內(nèi)的影子?就算黨報
    ,現(xiàn)在很多地方的黨報也已早不如當年的紅火了。
    醫(yī)生:
        未來,我們會看到醫(yī)生的現(xiàn)狀會大幅改變,現(xiàn)在的現(xiàn)狀是醫(yī)院基于體制內(nèi)和體制外游走
    ,搞的又國企又市場化,導(dǎo)致底層累死,管理層爽呆,其實就是運營商前兩年的縮影。再過
    3、4年,下一輪醫(yī)療改革真正開始的時候,我們會看到跳槽、裁員、創(chuàng)業(yè)會成為醫(yī)院的常態(tài)
    ,有能力的醫(yī)生收入會大幅提高,出入行的醫(yī)生也不會像現(xiàn)在這樣承擔很多變態(tài)的任務(wù),但
    是對于服務(wù)態(tài)度、責任心的要求肯定也會提高很多。
    學(xué)校:
        再舉一個例子,學(xué)校,現(xiàn)在的幼兒教育由于早些年政府退出的早,導(dǎo)致現(xiàn)在的幼兒園教
    育發(fā)展的比中小學(xué)發(fā)展的快多了。大家不用光看上幼兒園難、貴,但是對比中小學(xué)的僵化程
    度,應(yīng)該說幼兒教育的質(zhì)量已經(jīng)一騎絕塵了,比什么中小學(xué)、高校的教育強了好幾倍。至于
    說收入,很多地方小學(xué)老師的收入可真比不上幼兒園老師的收入。高中教育由于政府不負擔
    ,很多地方開展的也比初高中教育好多了,當然教師的工作強度肯定也大了很多。
        至于說高校的改革,可能要很久很久,畢竟蓋大學(xué)太費錢了。。。
    ————————————————————————————————————————
      
      第三段:細看運營商、公務(wù)員變遷的幕后——剩余價值的分配取決于生產(chǎn)關(guān)系
      
         我國是一個“民主集中制”的體制,這也是我國生產(chǎn)關(guān)系的一個特點,民主咱不討論,
    不過集中倒是很常見。權(quán)力、資源控制在一小部分企業(yè)和人手中,,雖說這兩年在改善,但
    是改善的步伐這兩年是越來越小。
         這也造成了一個浮在表面的現(xiàn)象——公務(wù)員、央企的部分員工性價比遠高于那些不占據(jù)
    資源的行業(yè)。但這其實只是一個表象,實際上我國的資源、權(quán)力不是集中在政府、央企中,
    而是集中在某一小群人中。這是一個非常明顯的金字塔結(jié)構(gòu)。
         這種生產(chǎn)關(guān)系,是體制內(nèi)幸福或痛苦的根源。
      
    1.行業(yè)、企業(yè)的興衰難確定:
        某個部委、行業(yè)、央企的興衰甚至只是因為某幾個人的爭奪,只是因為某一個人的失敗
    或者得勢,雖然這一個人的背后是一群人乃至百萬、千萬人的利益,但是他敗了大家就敗了
    ,他贏了大家就贏了。
        這樣的例子在中國有很多,已經(jīng)確定了像糖煙酒公司和煙草局,糧食局和中儲糧,聯(lián)通
    和網(wǎng)通,幾大發(fā)電集團,不確定的像電監(jiān)會和電網(wǎng),工信部和某部委。敗了,從上到下所占
    據(jù)的權(quán)力、資源逐步被剝奪走,勝了,雞犬升天。
      
        運營商最早的改革來自哪??????????很多年輕的byr都不知道,第一波真正的
    改革來自各個部委對于電信業(yè)高額利潤的垂涎!原來的郵電總局扛不住這種壓力。聯(lián)通為什
    么叫聯(lián)通?是因為十幾個部委、央企聯(lián)合成立的,所以叫聯(lián)合通信,是一批電信圈外的人對
    電信圈蛋糕的逼搶。當時大家也不太會玩游戲規(guī)則,哪知道成立個什么銀監(jiān)會之類的,郵電
    總局一直在被動接招,電信業(yè)一步步地淪為各類人等洗錢地方。
        還可以舉的一個例子是:原聯(lián)通和網(wǎng)通的合并,這個是個非常具有代表性的案例了,跟
    論壇里很多人的老板的老板甚至直系老板都有關(guān)系。如果老板是原聯(lián)通的,那么整個省里面
    聯(lián)通的都爽了,如果是原網(wǎng)通的,呵呵,那么網(wǎng)通的自然。。。
        現(xiàn)在電網(wǎng)很紅火,那是趕上想分拆的時候遭遇了電力短缺、冰災(zāi)、美國大停電等事件(
    NND,冰災(zāi)的時候明顯體現(xiàn)的是通信業(yè)的三家重復(fù)建設(shè)對于通信的保障作用,非得被人家電
    網(wǎng)說成得一家來做才能保障用電安全),現(xiàn)在又趕上換屆,再加上既得利益集團的強大。如
    果有一天,國網(wǎng)的領(lǐng)導(dǎo)保不住外人對于電網(wǎng)的垂涎,最終被拆分,那么電網(wǎng)行業(yè)就會重演電
    信業(yè)走過的老路。別說啥電網(wǎng)不會被拆分,本地網(wǎng)不適合重復(fù)建設(shè),這是胡扯,當年拆分電
    信的時候也這么說,連那么激進的闞凱力老師都說本地網(wǎng)得保留,是門檻。結(jié)果現(xiàn)在南方縣
    城里面聯(lián)通、移動的寬帶鋪的火熱朝天。大家的工資也降得本冷到底。
      
        記住,上述事情跟你個人,跟你所在團隊等無關(guān),只跟你們公司、行業(yè)的幾個人有關(guān)系

      
    2.個人前途發(fā)展
        體制內(nèi)的特性決定資源傾斜在上層,因此導(dǎo)致了領(lǐng)導(dǎo)的首要事情是取得他的領(lǐng)導(dǎo)的認可
    ,這樣才能要到更多的資源。這樣自己才有前途。而非體制內(nèi),一個市場化的地方,領(lǐng)導(dǎo)要
    考慮的是如何激活員工的活力,讓員工努力地為他從客戶那獲得資源。
        這是體制內(nèi)領(lǐng)導(dǎo)對待員工和他領(lǐng)導(dǎo)的不同態(tài)度的根本原因。這也可以解釋,為什么某些
    看似市場化的企業(yè),如IBM等,大家為啥繞著領(lǐng)導(dǎo)轉(zhuǎn)的原因,因為在這些企業(yè),員工的作用
    不是最重要的,最重要的是你的老板能給你批下來什么樣的折扣,這導(dǎo)致你這個單子能成還
    是不能成。
        再舉個例子,CMCC利潤、收入年年增加,員工薪水月月降薪,王建宙寧贈友邦,不予家
    奴。因為家奴影響不了他的升遷,友邦影響他的位置,于是我們看到卓望、12580等一個個
    洗錢工具的誕生,看到全國各地B類員工的離職率都開始持續(xù)上升。
        國網(wǎng)的降薪搞了好幾年了,員工不同意,有個P用,老大需要搞定的是他老大的意見。很
    可能某次突然降薪只是因為某人看到一篇新聞,隨口跟國網(wǎng)老大提起了這事,國網(wǎng)老大就把
    這個P當作諭旨去執(zhí)行了。
        你在體制內(nèi)的前途完全寄托在你的領(lǐng)導(dǎo)身上,而你的領(lǐng)導(dǎo)的前途也完全寄托在他的領(lǐng)導(dǎo)
    身上,你是憑借喝酒、干活、拍馬屁、文體等哪項能上位,完全取決于你的領(lǐng)導(dǎo)的喜好。當
    然,現(xiàn)在領(lǐng)導(dǎo)選拔看能力的越來越多了。
      
    3. 升遷
        上一個可以解釋你未來如何升遷。你的大部分工作,依靠的還是上面領(lǐng)導(dǎo)的支持,依靠
    的是上層的資源傾斜。今年能否完成指標,最重要的并不是下面員工的能力。CMCC的都知道
    ,要想哪個業(yè)務(wù)大發(fā)展,列入今年的KPI指標就行了,12580不就靠這個嗎。
        而領(lǐng)導(dǎo)的喜好是不好琢磨的,再說,萬一換個領(lǐng)導(dǎo)怎么辦?當然,我們可喜地看到,注
    重業(yè)績的領(lǐng)導(dǎo)越來越多了。
      
    4. 收入:
        不談公司好壞,不談前途,不談行業(yè)是否興衰。在同樣的情況下,收入也很不確定。由
    于歷史原因,體制內(nèi)的工資一直未能市場化,工資都不高,主要是靠獎金、補貼等活。這帶
    來一個結(jié)果是員工的收入非常不穩(wěn)定,員工今年的收入完全看老板敢不敢發(fā)錢,而不是看公
    司、部門、個人的業(yè)績?nèi)绾巍?
        BMCC,李躍來了大家都爽了一把,ZJMCC,大家都得罵娘。同樣是稅務(wù),上海的稅務(wù)部門
    底層員工真是得用清廉、辛苦來形容了。
      
    灰色收入:
        前幾天職版有個帖子說某省直的公務(wù)員收入,lx很多兄弟回帖說這是實情,很多圍觀的
    群眾表示存在眾多灰色收入等。我想說的是:
    第一,你有足夠的權(quán)力才有灰色收入。你手里一年就100萬預(yù)算,你能拿多少灰色收入?收
    了你還得孝敬上面。有花錢權(quán)力的公務(wù)員才占公務(wù)員隊伍的百分之幾?
    第二,就算有,你敢拿嗎?我開公司兩年了,遭遇過好幾任稅務(wù)工商,有熟的大家私下聊到
    ,除非特高(幾百萬的)或者特少的(給盒月餅),否則誰敢拿,為了幾萬丟掉飯碗,不值
    。底層公務(wù)員等壓力現(xiàn)在還是很大的,一個底層員工哪敢咋樣,大家都想著到了處長那一級
    就敢錢,但是到了處長那一級又有他的顧慮,又想接著再往上去。誰都有誰的顧慮,有機會
    拿黑錢的還是少數(shù)。
      
    歷史背景:
        90年年代初期地方公務(wù)員都快發(fā)不出工資了,也就是因為90年代后期政府發(fā)明了賣地財
    政,這幾年公務(wù)員才跟著沾光。近幾年中央公務(wù)員明顯不如地方公務(wù)員收入高,不就是因為
    賣地財政嗎?
        年輕的師弟師妹們可以翻翻歷史資料,找老人問問,問問這幾年公務(wù)員熱門單位的變遷
    ,或者看看近二十年大型貪污案件高發(fā)的部門就知道了。
        最早哪最熱門?海關(guān)、稅務(wù),因為當時國家能收上來錢的就這幾個地方,出事率也最高
    。現(xiàn)在呢?海關(guān)、稅務(wù)是被看的最死的。接著受賄案出事最高的就變成了國土局等部門。
         收入是很不透明且難以估量的,未來一旦賣地財政破產(chǎn),行政收費取消,地方公務(wù)員的
    收益很難保障。
      
    5.壓力:
         任務(wù)指標非正常化,超高、沒有必要的指標到處都是。
         體制內(nèi)并不是一個以股東收益、市場效率為導(dǎo)向的地方,而是以政治為導(dǎo)向的一個地方
    ,因此很多指標是只能提高不能降低,不管這個指標是否合理。因此做假指標是各個地方最
    常見的情況。不管是哪,大家面臨的共同事情就是研究如何造假指標,上面的領(lǐng)導(dǎo)也心知肚
    明。
         這導(dǎo)致大家的壓力來源很不正常,有些地方可能1、2年都很輕松,但是可能換了個領(lǐng)導(dǎo)
    之后,下的都是一些非常指標,生活會變得異常充實。
      
      
    —————————————————————————————————————————
      
    第四段:展望未來,風險與機遇——生產(chǎn)力決定生產(chǎn)關(guān)系  
        說了上面這么多,并不是說體制內(nèi)完全不好,只是列舉一些風險,希望大家別總是聽信
    水木那些“我同學(xué)、我親戚、我朋友”的言論,多去了解事情的歷史,背后的原因,未來的
    走向,而不是盯著眼前那么短暫的幾年時光。在過去的二十年里,絕大部分體制內(nèi)一旦被推
    向市場,就基本走向了衰敗,壟斷保護帶來的絕對不會是高效。因此事業(yè)單位和央企的前途
    都不會那么清晰。
         而對于公務(wù)員而言,收益到底未來會怎樣?我不好做太多的評判,生產(chǎn)關(guān)系改革并不是
    論壇討論的內(nèi)容,我真寫了就該被刪樓了,只方便就下面幾點評述一下。
      
    1、收益:
         公務(wù)員其實也只是一份職業(yè),警察等都只是一種職業(yè),這份職業(yè)的優(yōu)越性取決于從業(yè)人
    員掌控的資源和受管制的內(nèi)容。財務(wù)部、稅務(wù)、海關(guān)等都是大家認為能掌控很多資源的地方
    ,但是現(xiàn)在他們受到的管制、監(jiān)管卻極為嚴格。雖然這種監(jiān)管是來自上層,而不是來自人民
    ,但是也導(dǎo)致了絕大部分底層員工獲得高額收益的機會是少數(shù)的。除非你掌控的資源不受監(jiān)
    管。
      
    2、職業(yè)化:
         這幾年去稅務(wù)、工商、公安局、法院辦事,我發(fā)現(xiàn)很多地方職業(yè)化了許多,基本都是公
    事公辦,敲詐、態(tài)度不好等現(xiàn)象基本不存在——當然,前提是你沒有特別大的油水。當然,
    二三線城市可能不是這個樣子。
         政治改革的不斷深化,最起碼讓大部分公務(wù)員比以前像個職業(yè)人士了。
      
    3、穩(wěn)定性:
         央企、事業(yè)單位的穩(wěn)定性很快就會跟企業(yè)一樣了——最起碼對于新人而言。公務(wù)員的穩(wěn)
    定性鄙人不好評價,但是由于政府會一直存在,因此這種職業(yè)的穩(wěn)定性還是會很高的,最起
    碼應(yīng)該會比絕大部分行業(yè)都穩(wěn)定。
         不過前提是你熟練掌握相關(guān)的技能,不會被裁掉,不管這種技能是做報表、喝酒、還是拍
    馬屁。
         當有一天財政破產(chǎn)的時候,政府依然會裁員的,這種事情在8、90年代就發(fā)生過了,因
    此不用擔心未來不會發(fā)生,因此還是得干好這份職業(yè)該干的事情。
      
    4、上升空間:
         這個不用說了,太難了。坑少人多,如果上面沒人,自己沒料的就別想了。
      
      
    ————————————————————————————————————————
    第五段:第一份工作如何盡力地去把控自己的命運
      
      
         我在《通信行業(yè)求職寶典:獵頭視角》里面提出過幾個觀點,想做什么,能做什么,該
    做什么。從理論上講,找個合適的工作最好,求穩(wěn)定的找穩(wěn)定的,求高薪的找高薪的,求事業(yè)的做事業(yè),可問題是大部分人

    看不懂自己要做啥
    ,還有一部分人知道自己要做啥,但是不知道這個行業(yè)、企業(yè)前途如何。
         因此這里,我們談?wù)勅绾伪M量控制自己的命運——完全把控是不可能的,太祖太宗美國
    總統(tǒng)聯(lián)合國主席也做不到。
      
    1、伴隨你命運的東西:
         首先說一個大的話題,職業(yè)生涯中,跟你相關(guān)的是哪幾點?我一般從以下幾方面衡量一
    個人:人格、能力、知識體系及其它方面。
    a.人格
         這是一個心理學(xué)名詞,主要是指人所具有的與他人相區(qū)別的獨特而穩(wěn)定的思維方式和行
    為風格。說的通俗、簡單一些,就是你的性格、做
      
    事習(xí)慣。
         人格很難改,畢竟是二十多年形成的,我們只能說揚長避短,盡量去改善、規(guī)范自己不
    好的地方。
    b.能力
         這個主要是指學(xué)習(xí)、溝通、管理等能力。這個大家可能覺得虛,其實,呵呵,不多說了
    ,稍微專業(yè)的HR、leader都比較容易評判這些能力。
    c.知識體系
         這個就是跟你工作等相關(guān)的東西了,例如通信知識、開發(fā)語言掌握等。
    d.其它方面
         這個包含很多內(nèi)容,口碑、人脈、品味等。
      
    2、如何掌控命運
         第一份工作對于大部分人而言是職業(yè)生涯最重要的起點,不要相信先擇業(yè)后就業(yè)這種說
    法,這是荒謬的。你工作幾年后,你的上述四方面能力基本定型了,跳槽的時候,大家首先
    就是通過你之前的工作經(jīng)驗來評判你,因此你找第一份工作的時候,必須要考慮到上面那四
    個方面的內(nèi)容培養(yǎng)問題。
      
    a.盡量找一個適合自己人格的行業(yè)
         盡量做自己適合做,想做的事情。這個很難,第一大部分人不知道自己適合做什么,第
    二大部分人不知道有哪些行業(yè)、職業(yè)。我的建議是先做排除法,然后再做選擇法。先確定自
    己絕對不適合做什么,在去在剩下的里面挑。
         另外,這些行業(yè)、職業(yè)一定要自己全面了解之后再決定。很多時候你覺得你適合做的職
    業(yè),當你真正做了之后會發(fā)現(xiàn)根本不是那么回事。
    b、找一個技能短期內(nèi)快速提升能力的職業(yè)、行業(yè);找一個技能會長久提升的行業(yè)  
         如果真找到想做的職業(yè)、行業(yè)了,那么找一個合適的起點,找一個地方能讓你這些技能
    快速提升的地方,以便1、2年后就能跟同行們拉開差距。
         這個起點可能是大公司,也可能是小公司,這個跟你所在的行業(yè)、你所缺的東西、你職
    業(yè)相關(guān),比如說你做銷售,那么在華為可能比在某些外企好,因為很多外企的銷售其實就是
    在忙著處理內(nèi)部流程,寫郵件,而不是忙著如何談單子談項目。你做技術(shù),可能IBM好,有
    可能某個小公司好,因為IBM可能讓你養(yǎng)成好的職業(yè)習(xí)慣、素養(yǎng),但是也可能荒廢了你的快
    速學(xué)習(xí)、抗壓能力,小公司可能做事不規(guī)范,但是可能你能力提高的很快。
    c、知識的積累有用的行業(yè)
        你的大部分技能在工作4、5年后就基本定型了,某些組織、管理能力可能在10年左右定
    型,但是你的知識不會,你的收入、職位會隨著你的知識、口碑等的上升而上升。
         應(yīng)該找一個你N年前掌握的知識對你現(xiàn)在工作還會有用的行業(yè),進入知識的積累會一直
    給你帶來增值的行業(yè)。這樣的行業(yè),人員的收入才會不斷地增值,而不是貶值,當你體力老去的時候,行業(yè)的新入者才不會

    很快替代你。你才會越來越吃香,越老越輕松,例如醫(yī)生、某些行業(yè)顧問等。
         例如一些sap的顧問為啥前幾年這么吃香,一方面是因為需求量暴增,另外一方面是因
    為他們積累的知識不是短期內(nèi)能速成的,你必須熟悉這個行業(yè)的情況、流程后才能去所sap
    顧問。
      
         在這里,我很反感某些人說的“不要進入那種40歲了還要不斷學(xué)習(xí)的行業(yè)”,小朋友可
    以反過來想想,如果一個人40歲的時候不需要學(xué)習(xí)了,那么對于公司而言,40歲的人跟50的
    歲人掌握的東西是一樣的,那么公司是不是該考慮換個成本低的,年輕點的?
      
         我們需要避免的是那種40歲的時候,之前積累的知識完全無用的工作,而不是說不需要
    你學(xué)習(xí)的工作。如果一份工作,不需要你學(xué)習(xí)了,那么意味著你的收入到頭了,不會增長了,
    你的工作也很容易被更年輕的人替代了。
    d、其它方面的培養(yǎng)
        這個對你們而言,最要緊的就是做好現(xiàn)在能做的每一件事情。
      
    3、其它該規(guī)避的
    a、行業(yè)風險
         盡量不要進入一個在走下坡路的行業(yè),如傳統(tǒng)的單機硬件、軟件公司,這些公司慢慢會
    走向沒落,你可能在這里會養(yǎng)成良好的職業(yè)相關(guān),但是用不了多少年,你還是需要跳槽。與
    其這樣,不如當時就進入一個較為新興的行業(yè)。
         大體可以說幾個大家較為常去的行業(yè):對于通信口,無線》有線,設(shè)備商》運營商》設(shè)
    計院,對于計算機,互聯(lián)網(wǎng)》傳統(tǒng)軟件》傳統(tǒng)硬件,這里的互聯(lián)網(wǎng)是一個寬泛的互聯(lián)網(wǎng)概念
    ,包括B/S架構(gòu)等的軟件開發(fā)等。
         當然,上述只是一個寬泛的概念,指的是同level的公司,并不是說去一個某三線的設(shè)
    備商強于去CMCC HQ。
    b、公司內(nèi)部風險
         很多公司進去的時候不確定你去什么部門,這類公司盡量避免去或者去之前談妥,尤其
    是一些公司可能產(chǎn)品線很多,萬一你去了之后被分到一個快垮掉的產(chǎn)品線,你哭都來不及。
    c、再補充講一下體制內(nèi)
         公務(wù)員是一份穩(wěn)定的職業(yè),是一個國家難起缺失的職業(yè),只不過是這個機構(gòu)臃腫還是精
    干的問題,工作強度高還是低,收益高還是低的問題,我之前說了很多了,不重復(fù)了。
         但是某些企業(yè)、事業(yè)單位的未來的存續(xù)、前景是很值得質(zhì)疑。
      
      
         最后說的是,找工作很容易,找好工作也很容易,努努力,每天刻苦15小時(留9個小
    時給大家吃飯睡覺運動洗澡),去個想去的公司做想做的事情總能做到的,但是這只是人生
    的起點,以后的路想過的舒服,還需要繼續(xù)努力。

    posted @ 2011-04-18 16:17 colorfire 閱讀(295) | 評論 (0)編輯 收藏

    java 數(shù)據(jù)對象測試方法

    /**
         * 測試方法
         * 
    @param obj
         * 
    @return
         
    */

        
    public static StringBuffer testPOJO(Object obj) {
            Class cls 
    = obj.getClass();
            Field[] fields 
    = cls.getDeclaredFields();
            StringBuffer resultBuf 
    = new StringBuffer();
            
    try {
                
    for (int i = 0; i < fields.length; i++{
                    String fieldName 
    = fields[i].getName();
                    Class fieldType 
    = fields[i].getType();
                    Method method;
                    
    if (fieldType.equals(boolean.class)) {
                        method 
    = cls.getMethod("is" + genMethodName(fieldName));
                    }
     else {
                        method 
    = cls.getMethod("get" + genMethodName(fieldName));
                    }

                    Object res;
                    
    if ((res = method.invoke(obj)) != null{
                        String result 
    = res.toString();
                        resultBuf.append(
    "[" + fieldName + "] = " + result + "\n");
                    }
     else {
                        resultBuf.append(
    "[" + fieldName + "] = NULL \n");
                    }

                }

            }
     catch (Exception e) {
                e.printStackTrace();
            }

            
    return resultBuf;
        }

    posted @ 2011-04-14 17:06 colorfire 閱讀(237) | 評論 (0)編輯 收藏

    [aws]亞馬遜云計算體驗1

    前些天,剛注冊了AWS,EC2服務(wù)免費體驗一年,配置也不錯,這便宜好大。

    昨天來公司登陸時發(fā)現(xiàn),公司屏蔽了22端口,無奈,回家把端口改掉吧。
    順便將默認只能raskey登陸方式,改掉,重新配置ssh一下。

    # 1. 關(guān)于 SSH Server 的整體設(shè)定,包含使用的 port 啦,以及使用的密碼演算方式
    Port 22          # SSH 預(yù)設(shè)使用 22 這個 port,您也可以使用多的 port !
                  # 亦即重復(fù)使用 port 這個設(shè)定項目即可!

    Protocol 2,1        # 選擇的 SSH 協(xié)議版本,可以是 1 也可以是 2 ,
                  # 如果要同時支持兩者,就必須要使用 2,1 這個分隔了!
    #ListenAddress 0.0.0.0   # 監(jiān)聽的主機適配卡!舉個例子來說,如果您有兩個 IP,
                  # 分別是 192.168.0.100 及 192.168.2.20 ,那么只想要
                  # 開放 192.168.0.100 時,就可以寫如同下面的樣式:

    ListenAddress 192.168.0.100          # 只監(jiān)聽來自 192.168.0.100 這個 IP 的SSH聯(lián)機。
                       # 如果不使用設(shè)定的話,則預(yù)設(shè)所有接口均接受 SSH

    PidFile /var/run/sshd.pid      # 可以放置 SSHD 這個 PID 的檔案!左列為默認值
    LoginGraceTime 600     # 當使用者連上 SSH server 之后,會出現(xiàn)輸入密碼的畫面,
                  # 在該畫面中,在多久時間內(nèi)沒有成功連上 SSH server ,
                  # 就斷線!時間為秒!

    Compression yes      # 是否可以使用壓縮指令?當然可以啰!
     
    # 2. 說明主機的 Private Key 放置的檔案,預(yù)設(shè)使用下面的檔案即可!

    HostKey /etc/ssh/ssh_host_key    # SSH version 1 使用的私鑰
    HostKey /etc/ssh/ssh_host_rsa_key  # SSH version 2 使用的 RSA 私鑰
    HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私鑰

    # 2.1 關(guān)于 version 1 的一些設(shè)定!

    KeyRegenerationInterval 3600     # 由前面聯(lián)機的說明可以知道, version 1 會使用 
                       # server 的 Public Key ,那么如果這個 Public 
                       # Key 被偷的話,豈不完蛋?所以需要每隔一段時間
                       # 來重新建立一次!這里的時間為秒!

    ServerKeyBits 768           # 沒錯!這個就是 Server key 的長度!
    # 3. 關(guān)于登錄文件的訊息數(shù)據(jù)放置與 daemon 的名稱!

    SyslogFacility AUTH         # 當有人使用 SSH 登入系統(tǒng)的時候,SSH會記錄資
                       # 訊,這個信息要記錄在什么 daemon name 底下?
                       # 預(yù)設(shè)是以 AUTH 來設(shè)定的,即是 /var/log/secure
                       # 里面!什么?忘記了!回到 Linux 基礎(chǔ)去翻一下
                       # 其它可用的 daemon name 為:DAEMON,USER,AUTH,
                       # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,

    LogLevel INFO            # 登錄記錄的等級!嘿嘿!任何訊息!
                       # 同樣的,忘記了就回去參考!
    # 4. 安全設(shè)定項目!極重要!
    # 4.1 登入設(shè)定部分

    PermitRootLogin no     # 是否允許 root 登入!預(yù)設(shè)是允許的,但是建議設(shè)定成 no!
    UserLogin no        # 在 SSH 底下本來就不接受 login 這個程序的登入!
    StrictModes yes      # 當使用者的 host key 改變之后,Server 就不接受聯(lián)機,
                  # 可以抵擋部分的木馬程序!
    #RSAAuthentication yes   # 是否使用純的 RSA 認證!?僅針對 version 1 !

    PubkeyAuthentication yes  # 是否允許 Public Key ?當然允許啦!只有 version 2
    AuthorizedKeysFile      .ssh/authorized_keys
                  
    # 上面這個在設(shè)定若要使用不需要密碼登入的賬號時,那么那個
                  # 賬號的存放檔案所在檔名!
    # 4.2 認證部分

    RhostsAuthentication no  # 本機系統(tǒng)不止使用 .rhosts ,因為僅使用 .rhosts 太
                  # 不安全了,所以這里一定要設(shè)定為 no !

    IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 來做為認證!當然是!
    RhostsRSAAuthentication no # 這個選項是專門給 version 1 用的,使用 rhosts 檔案在
                  # /etc/hosts.equiv配合 RSA 演算方式來進行認證!不要使用

    HostbasedAuthentication no # 這個項目與上面的項目類似,不過是給 version 2 使用的!
    IgnoreUserKnownHosts no  # 是否忽略家目錄內(nèi)的 ~/.ssh/known_hosts 這個檔案所記錄
                  # 的主機內(nèi)容?當然不要忽略,所以這里就是 no 啦!

    PasswordAuthentication yes # 密碼驗證當然是需要的!所以這里寫 yes 啰!
    PermitEmptyPasswords no  # 若上面那一項如果設(shè)定為 yes 的話,這一項就最好設(shè)定
                  # 為 no ,這個項目在是否允許以空的密碼登入!當然不許!

    ChallengeResponseAuthentication yes  # 挑戰(zhàn)任何的密碼認證!所以,任何 login.conf 
                       # 規(guī)定的認證方式,均可適用!
    #PAMAuthenticationViaKbdInt yes      # 是否啟用其它的 PAM 模塊!啟用這個模塊將會
                       # 導(dǎo)致 PasswordAuthentication 設(shè)定失效!
     
    # 4.3 與 Kerberos 有關(guān)的參數(shù)設(shè)定!因為我們沒有 Kerberos 主機,所以底下不用設(shè)定!
    #KerberosAuthentication no
    #KerberosOrLocalPasswd yes
    #KerberosTicketCleanup yes
    #KerberosTgtPassing no
     
    # 4.4 底下是有關(guān)在 X-Window 底下使用的相關(guān)設(shè)定!

    X11Forwarding yes
    #X11DisplayOffset 10
    #X11UseLocalhost yes
    # 4.5 登入后的項目:

    PrintMotd no              # 登入后是否顯示出一些信息呢?例如上次登入的時間、地點等
                 # 等,預(yù)設(shè)是 yes ,但是,如果為了安全,可以考慮改為 no !

    PrintLastLog yes     # 顯示上次登入的信息!可以啊!預(yù)設(shè)也是 yes !
    KeepAlive yes       # 一般而言,如果設(shè)定這項目的話,那么 SSH Server 會傳送
                 # KeepAlive 的訊息給 Client 端,以確保兩者的聯(lián)機正常!
                 # 在這個情況下,任何一端死掉后, SSH 可以立刻知道!而不會
                 # 有僵尸程序的發(fā)生!

    UsePrivilegeSeparation yes # 使用者的權(quán)限設(shè)定項目!就設(shè)定為 yes 吧!
    MaxStartups 10      # 同時允許幾個尚未登入的聯(lián)機畫面?當我們連上 SSH ,
                 # 但是尚未輸入密碼時,這個時候就是我們所謂的聯(lián)機畫面啦!
                 # 在這個聯(lián)機畫面中,為了保護主機,所以需要設(shè)定最大值,
                 # 預(yù)設(shè)最多十個聯(lián)機畫面,而已經(jīng)建立聯(lián)機的不計算在這十個當中
    # 4.6 關(guān)于使用者抵擋的設(shè)定項目:

    DenyUsers *        # 設(shè)定受抵擋的使用者名稱,如果是全部的使用者,那就是全部
                 # 擋吧!若是部分使用者,可以將該賬號填入!例如下列!

    DenyUsers test
    DenyGroups test      
    # 與 DenyUsers 相同!僅抵擋幾個群組而已!
    # 5. 關(guān)于 SFTP 服務(wù)的設(shè)定項目!

    Subsystem       sftp    /usr/lib/ssh/sftp-server


    引用自:http://doc.licess.org/openssh/sshd_config.html

    posted @ 2011-03-15 10:51 colorfire 閱讀(468) | 評論 (0)編輯 收藏

    py2exe使用說明

    py2exe

    posted @ 2011-03-04 16:39 colorfire 閱讀(506) | 評論 (0)編輯 收藏

    人性的小船

    聽到一個故事,10幾個人在海上遇難,只有一個小船可以活命。船上什么也沒有,所有人都因為幾天沒吃沒喝而奄奄一息,但大家都堅持不喝海水,因為一旦喝了海水人脫水的速度會更快。
    但是有一個年輕人,幾近虛脫,為了生存終于忍不住喝了海水。。。

    又過了幾天,這一船人被救了。當他們被救上來的同時,發(fā)現(xiàn)那個喝海水的年輕人被割喉,血被吸干了。人吃人的消息不脛而走。
    一船人被帶進法院。是殺人、是自救?是有罪、是無罪?是人治、是法制?每個人都該有自己的判斷。

    最終一船人被判無罪釋放。

    老爸說,人這一生無非就是提出問題,然后解決問題,以及做出選擇。出現(xiàn)了問題,要面對它解決它,不能逃避。

    posted @ 2011-02-23 12:36 colorfire 閱讀(1855) | 評論 (4)編輯 收藏

    總結(jié)

    2011年了,拿點什么來總結(jié)一下過去的2010呢?盤點一下自己這一年讀過的書吧,以
    供自勉。

    總體感覺這一年看的書雜而不精,而且大多數(shù)的書囫圇吞棗,看完就忘了,工作中用到
    還得上網(wǎng)去查。大牛們幫看看,給一些指導(dǎo)吧(我09年本科畢業(yè),對Java和Web方面有
    著比較強烈的興趣,職業(yè)規(guī)劃是成長為一名Java和web方面的技術(shù)專家)
     

    《數(shù)據(jù)結(jié)構(gòu)(C語言版)》:內(nèi)功心法類的書,考研時讀過,現(xiàn)在想回頭溫習(xí)一下,當
    年辛辛苦苦看的,不能給丟的一干二凈。
    《計算機網(wǎng)絡(luò)(第4版)》:看了概述、傳輸層和應(yīng)用層。跳出了TCP/IP協(xié)議棧的范疇
    來看網(wǎng)絡(luò)基本原理。11年要重點閱讀。
     

    《Java面向?qū)ο缶幊獭罚簩O衛(wèi)琴的書,通俗易懂,個人認為Java居家必備,恨學(xué)校當
    年沒有選這本書作為教材。
    《Think in Java(第4版)》:先讀了線程那一章,趕緊把簡歷上精通Java改為熟悉
    Java。接著讀了一切皆是對象、接口、異常、RTTI章節(jié),然后小心地把簡歷上熟悉
    Java改為熟練使用Java。11年要重點閱讀。
    《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》:據(jù)說是設(shè)計模式的葵花寶典,可惜自己沒
    練成。書很薄,只有200來頁,字字珠璣,模式的定義都很精辟,另外把模式按性質(zhì)的
    一個分類太妙了:creational,structural,behavioral。
    《Java與模式》:在這本書上找到了設(shè)計模式的感覺,通俗易懂。
    《敏捷軟件開發(fā)原則、模式與實踐》:沖著Robert大叔的名頭去的,讀了一遍,給我
    的感覺是看不懂、看不懂啊。不過附錄A倒是讓我學(xué)會了CGI,附錄C中的諷刺小品很有
    意思。,大牛們都說每讀一遍,感覺都不一樣,11年再仔細揣摩吧。
    《UML精粹:標準對象語言簡明指南(第3版)》:看完忘了,不記得內(nèi)容了
    《UML for Java Programmers》:經(jīng)典巨著,畫UML圖時,總參照這本書。書后咖
    啡機的例子,非常震撼。
    《領(lǐng)域驅(qū)動設(shè)計》:經(jīng)典巨著,看了一點點,受益匪淺。11年要重點閱讀。
    《軟件架構(gòu)設(shè)計》:看了一遍,理解不了,只是大概弄懂了幾個概念,平臺、框架、垂
    直架構(gòu)、水平架構(gòu)...以后再閱讀吧
     

    《編程之美》:很有意思、開動腦筋的一本書,求職必備。
    《編程珠璣》:對我來說,有點難,讀著很費勁,但應(yīng)該能鍛煉大腦吧。
    《并發(fā)的藝術(shù)》:很好的一本書,看到了一直想看的并發(fā)排序、并發(fā)搜索。
     

    《Head First HTML and CSS、HTMl》:簡單流暢的一本書,但是內(nèi)容有點過于簡
    單了。
    《Eric Meryer談CSS》:買書時,作為添頭送的,不怎么樣,僅僅看到了幾個賣噱頭
    的CSS技巧。
    《JavaScript語言精粹》:無愧于書名,JavaScript進階必讀。
    《PPK談JavaScript》:談的很到位,JavaScript語言核心、DOM、BOM、JSON...
    《JavaScript設(shè)計模式》:第一部分對JavaScript面向?qū)ο笏枷氲闹v解非常不錯,
    真正的主題第二部分,列舉了10幾種模式,但對模式的講解感覺很生硬,有生搬硬套之
    嫌,反正我是沒掌握。
    《AJAX實戰(zhàn)》:總體很一般的書,門戶那一章倒是幫了不少忙,當時搞Portal,從這
    一章看了一些Portal的基本技術(shù)原理。
    《JQuery 實戰(zhàn)》:很不錯的一本書,簡潔流暢,能讓你的JQuery快速起步和有力奔
    跑。另外,附錄中關(guān)于JavaScript語言本身的講解,對我?guī)椭艽蟆?br /> 《Web應(yīng)用程序性能測試指南 》:試圖展開Web性能測試的理論體系和指導(dǎo)方法,不
    過,我的腦子或者說思維類型,對這種書完全接納不了,看完覺得很空洞,沒留下什么
    在我腦子里。
    《瞬間之美:Web 界面設(shè)計如何讓用戶心動》:同事在看,沖著書名,我也湊過去看了
    看,看的時候覺得挺好玩,完了就忘了,我思維類型實在不適合搞這個。
    《RESTful Web Services》:應(yīng)該是自身水平問題,書里好多概念到現(xiàn)在都是似懂
    非懂,說不清、道不明的狀態(tài)。但這本書倒是提醒我要重新認識和理解WEB和HTTP協(xié)
    議,問問自己,是否在項目中做到很好地分析資源,并使之符合HTTP的規(guī)范。
     

    《Struts2 in Action》:沒有系統(tǒng)地看這本書,用到的時候翻翻,造成到現(xiàn)在也沒
    系統(tǒng)掌握Struts2。
    《精通struts 2:web 2.0開發(fā)實戰(zhàn)》:很不咋地的一本書,沒營養(yǎng),沒內(nèi)涵,準備當
    二手書賣了。
    《Spring In Action》:很好的一本in action書,也比較新,按照spring 2..5
    講的。

    《Hibernate in Action(第2版)》:去年過生日時哥們送的,年初看了一遍,不
    少地方?jīng)]看懂,尤其是事務(wù)控制那一塊,因為背后的數(shù)據(jù)庫事務(wù)理論不太了解,所以看
    著費勁。11年工作要用到Hibernate,要重點看這本書。
     
    《數(shù)據(jù)庫系統(tǒng)概念》:看了,特想罵人,罵當年軟院選書的老師,有些老師真是無良,
    為了那點利益,耽誤了好多學(xué)生。無論是開發(fā)人員,還是DBA,無論是想搞關(guān)系數(shù)據(jù)
    庫,還是NoSQL都很有必要讀讀這本書。
    《SQL應(yīng)用重構(gòu)》:上半年看的,沒看懂,沒有任何收獲,11年有空的話,就再翻翻
    吧,看能不能發(fā)現(xiàn)點驚喜。
    《高性能MySQL》:Jolt Award獲獎圖書,看了前3章,非常棒。11年重點看。
    《MySQL技術(shù)內(nèi)幕 InnoDB存儲引擎》:很喜歡這本書,一個資深DBA的經(jīng)驗談,行文
    功力還湊合,日后如果我寫書的話,估計就是這個這種風格。11年重點看。
    《MySQL核心內(nèi)幕》:感覺被Chinapub騙了,書評很好,但這本書實在是太爛了。當
    時我還推薦一哥們買了,現(xiàn)在那叫一個后悔啊。

    《UNIX和shell程序設(shè)計權(quán)威教程》:以后再也不買這種書了,完全掃盲貼的水平。對
    VI、Sed、AWK的講解都是點到為止。
     

    《贏》:杰克·韋爾奇的指引:“找到一份好工作,此后的人生不再是勞作”,“怎樣選擇
    一份新工作:薪水+5(人、機遇、主導(dǎo)權(quán)、工作內(nèi)容、未來)”。打算再買幾本送人。
    《德川家康》:比歷史還真實的小說。讀了前4本,當時經(jīng)常陷入情節(jié),讀到凌晨2、3
    點,后來沒時間讀了,11年有空的話,很想再看看。

    《別跟我說你懂日本》:記得有一章的名字叫“走近她,了解她,原來如此”。
    《其實沒有什么天才》
    《郎咸平說新帝國主義在中國》
    《亮劍》
     

    《詩經(jīng)》:隨手翻了翻,很美,看完就忘了。
    《拜倫 雪萊 濟慈抒情詩精選集》

    posted @ 2011-01-04 14:01 colorfire 閱讀(221) | 評論 (0)編輯 收藏

    批處理異常問題

    ibatis 批處理唯一性異常,執(zhí)行到事務(wù)結(jié)束。

    循環(huán)第二次執(zhí)行批處理時會將表鎖死。

    SqlMapClient smc = this.getSqlMapClient();
            
    int index = 0;
            
    try {
                smc.startTransaction();
                smc.startBatch();
                
                TCuBillfileChecks check 
    = new TCuBillfileChecks();
                check.setTaskname(taskName);
                
    for (int i = 0; i < recordList.size(); i++{
                    Record record 
    = recordList.get(i);
                    Object    custInfo 
    = pojoFactory.generatePojo(taskName, billMonth, record);
                    smc.insert(taskName 
    + ".insert_custinfo", custInfo);
                    
    if (index ++ > batchNum) {// 記錄斷點
                        check.setBillname(record.getAttribute("Source_FileName"));
                        check.setFilenum(Integer.parseInt(record.getAttribute(
    "RowNum")));
                        smc.update(
    "T_CU_BILLFILE_CHECKS.updateByPrimaryKey", check);
                        smc.executeBatch();
                        index 
    = 0;
                    }

                }


                check.setBillname(recordList.get(recordList.size() 
    - 1).getAttribute("Source_FileName"));
                check.setFilenum(Integer.parseInt(recordList.get(recordList.size() 
    - 1).getAttribute("RowNum")));
                smc.update(
    "T_CU_BILLFILE_CHECKS.updateByPrimaryKey", check);
                smc.executeBatch();
            }
     catch (Exception e) {
                e.printStackTrace();
            }
     finally {
                
    try {
                    smc.commitTransaction();
                    smc.endTransaction();
                }
     catch (Exception e) {
                    e.printStackTrace();
                }

            }

    posted @ 2010-12-17 17:51 colorfire 閱讀(394) | 評論 (0)編輯 收藏

    osgi配置參數(shù)

    僅作筆記,啟動本地osgi服務(wù)
    -Dccontainer=baseapp -Declipse.ignoreApp=true -Dosgi.noShutdown=true  -Dosgi.parentClassloader=app -Dorg.osgi.framework.bootdelegation=* -Dorg.osgi.framework.system.packages=javax.naming,javax.naming.spi,javax.management,javax.management.loading,javax.management.modelmbean,javax.net,javax.net.ssl,javax.crypto,javax.crypto.interfaces,javax.crypto.spec,javax.security.auth,javax.security.auth.spi,javax.security.auth.callback,javax.security.auth.login,javax.security.cert,javax.xml.parsers,javax.xml.xpath,javax.xml.transform.sax,javax.xml.transform.dom,javax.xml.namespace,javax.xml.transform,javax.xml.transform.stream,javax.xml.validation,org.xml.sax,org.xml.sax.helpers,org.xml.sax.ext,com.sun.org.apache.xalan.internal,com.sun.org.apache.xalan.internal.res,com.sun.org.apache.xml.internal.utils,com.sun.org.apache.xpath.internal,com.sun.org.apache.xpath.internal.jaxp,com.sun.org.apache.xpath.internal.objects,com.sun.org.apache.xml.internal,org.w3c.dom,org.w3c.dom.traversal,org.w3c.dom.ls,javax.sql,javax.transaction,sun.misc,javax.jms,javax.resource,javax.resource.spi,javax.resource.cci,javax.resource.spi.work,javax.transaction,javax.sql.rowset,javax.transaction.xa,javax.ejb,javax.resource.spi.endpoint,com.sun.rowset,com.sun.jdmk.comm,javax.mail,javax.mail.internet,javax.swing,javax.swing.border,javax.swing.event,javax.swing.table,javax.swing.text,javax.swing.tree,javax.xml.parsers,javax.xml.datatype,javax.xml,javax.naming,org.ietf.jgss,javax.rmi -Xms256M -Xmx800M

    posted @ 2010-12-14 12:26 colorfire 閱讀(551) | 評論 (0)編輯 收藏

    轉(zhuǎn):讓oracle跑的更快

    http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5854583.aspx

    posted @ 2010-12-10 15:27 colorfire 閱讀(163) | 評論 (0)編輯 收藏

    eclipse你不知道的.classpath

    題目是噱頭,用的人都知道。我想說的是classpath中不太注意的classpathentry excluding。

    昨天在跑junit測試時,報錯提示springframe.test.jar多次加載。 nnd,前天跑還一切正常,今天切了一下版本,又切回來,就不行了。

    java.lang.IllegalStateException: Unable to dynamically start generated unit test bundle
        at org.springframework.osgi.test.AbstractOnTheFlyBundleCreatorTests.postProcessBundleContext(AbstractOnTheFlyBundleCreatorTests.java:
    527)
        at org.springframework.osgi.test.AbstractConfigurableBundleCreatorTests.postProcessBundleContext(AbstractConfigurableBundleCreatorTests.java:
    223)
        at org.springframework.osgi.test.AbstractOsgiTests.startup(AbstractOsgiTests.java:
    262)
        at org.springframework.osgi.test.AbstractOsgiTests.prepareTestExecution(AbstractOsgiTests.java:
    374)
        at org.springframework.osgi.test.AbstractOsgiTests.runBare(AbstractOsgiTests.java:
    203)
        at org.springframework.osgi.test.AbstractOsgiTests$
    1.protect(AbstractOsgiTests.java:184)
        at junit.framework.TestResult.runProtected(TestResult.java:
    124)
        at org.springframework.osgi.test.AbstractOsgiTests.run(AbstractOsgiTests.java:
    181)
        at junit.framework.TestSuite.runTest(TestSuite.java:
    230)
        at junit.framework.TestSuite.run(TestSuite.java:
    225)
        at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:
    130)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
    38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
    460)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
    673)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
    386)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
    196)
    Caused by: org.osgi.framework.BundleException: Cannot 
    import a package more than once "org.springframework.osgi.test"
        at org.eclipse.osgi.internal.resolver.StateBuilder.checkImportExportSyntax(StateBuilder.java:
    533)
        at org.eclipse.osgi.internal.resolver.StateBuilder.validateHeaders(StateBuilder.java:
    185)
        at org.eclipse.osgi.internal.resolver.StateBuilder.createBundleDescription(StateBuilder.java:
    49)
        at org.eclipse.osgi.internal.resolver.StateObjectFactoryImpl.createBundleDescription(StateObjectFactoryImpl.java:
    32)
        at org.eclipse.osgi.internal.baseadaptor.BaseStorage.updateState(BaseStorage.java:
    1112)
        at org.eclipse.osgi.internal.baseadaptor.BundleInstall.commit(BundleInstall.java:
    128)
        at org.eclipse.osgi.framework.internal.core.Framework.installWorkerPrivileged(Framework.java:
    965)
        at org.eclipse.osgi.framework.internal.core.Framework$
    2.run(Framework.java:854)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.framework.internal.core.Framework.installWorker(Framework.java:
    905)
        at org.eclipse.osgi.framework.internal.core.Framework.installBundle(Framework.java:
    849)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.installBundle(BundleContextImpl.java:
    234)
        at org.springframework.osgi.test.AbstractOnTheFlyBundleCreatorTests.installAndStartBundle(AbstractOnTheFlyBundleCreatorTests.java:
    539)
        at org.springframework.osgi.test.AbstractOnTheFlyBundleCreatorTests.postProcessBundleContext(AbstractOnTheFlyBundleCreatorTests.java:
    524)
         
    15 more



    找了一個小時都沒找到原因。
    項目背景是該模塊使用的是osgi框架,框架中包含spring的所有包。但是在編譯時,需要單獨把測試包加進來。

    根據(jù)問題,我懷疑是classpath,但是如果去掉jar包引用,連編譯都編譯不過去。

    最后翻到eclipse的.classpath文件才找到原因,classpathentry excluding這家伙被覆蓋掉了。

    excluding標簽是保證項目在啟動時不會講指定的目錄jar加載到內(nèi)存,只做編譯引用。

    我在切換版本時,將其覆蓋了。

    posted @ 2010-12-09 18:24 colorfire 閱讀(3217) | 評論 (0)編輯 收藏

    perl讀取文件

     1#!/usr/bin/perl
     2print "This is aaa file handler.\n";
     3if(open(MYFILE,"Radius20101101-001.txt")){
     4    while($line=<MYFILE>){
     5        @array=split("Identifier=",$line);
     6        @array=split("\t",$array[1]);
     7        print $array[0];
     8        print ("\n");
     9    }
    10    close(FD);
    11}

    posted @ 2010-12-01 17:37 colorfire 閱讀(208) | 評論 (0)編輯 收藏

    perl中神奇的split

    perl的split,感覺它還是很容易讓新人誤會.但有很多時候,如果數(shù)據(jù)是固定標記來分隔,用他比使用正則可是方便多了.
    為什么講perl的第三個參數(shù)很神奇啦.主要在于split的第三個參數(shù).
    我們知道split是工作在列表的環(huán)境,他會裝輸入的數(shù)據(jù),多分割幾次,在建立結(jié)果列表,然后返回.接著,會返回第三個參數(shù)內(nèi)的數(shù)據(jù),其它的都扔棄.
    第三個參數(shù)一定要非常小心,為什么,如下的程序,我們只需要前二個參數(shù).我們注意第三個參數(shù)

    #!/usr/bin/perl
    while(<DATA>){
      
    my ($aa, $dd= split(/\s+/, $_, 2);
        
    print "$aa  || $dd ||\n";

    }

    __DATA__
    1xxxxxxx  2xxxxxx 3xxxxxx 4xxxxx
    1xxxxxxx  2xxxxxx 3xxxxxx 4xxxxx
    1xxxxxxx  2xxxxxx 3xxxxxx 4xxxxx
    1xxxxxxx  2xxxxxx 3xxxxxx 4xxxxx
    1xxxxxxx  2xxxxxx 3xxxxxx 4xxxxx 

    如果split第三個參數(shù)是寫的2的話,輸出如下結(jié)果
    11xxxxxxx  || 2xxxxxx 3xxxxxx 4xxxxx
    2||
    31xxxxxxx  || 2xxxxxx 3xxxxxx 4xxxxx
    4|| 
    5


    如果split是寫的3的話,輸出如下結(jié)果
    11xxxxxxx  || 2xxxxxx ||
    21xxxxxxx  || 2xxxxxx || 
    3


    這主要是因為,如果想取得前2個字段,字段記數(shù)為3.因為需要給文件切成3份.拿出前二份.不然都給最后面部分做一份了.
    轉(zhuǎn)自遠望技術(shù)論壇。

    第三個參數(shù)在大數(shù)據(jù)量情況下還是可以提高不少速度。

    posted @ 2010-12-01 17:36 colorfire 閱讀(972) | 評論 (1)編輯 收藏

    安裝perl的crc32模塊

    因為要寫一個相關(guān)的perl腳本,需要crc32函數(shù),默認的perl又不帶,沒辦法只好安裝一個:

    1. 下載:
      wget -c http://search.cpan.org/CPAN/authors/id/S/SO/SOENKE/String-CRC32-1.4.tar.gz
    2. 安裝:
      tar zxvfp String-CRC32-1.4.tar.gz
      cd String-CRC32-1.4
      perl Makefile.PL
      make
      make test #這里沒什么提示錯誤就恭喜了:)
      make install
    3. 使用(來自官方):

          use String::CRC32;

          
    $crc = crc32(“some string”);
          
    $crc = crc32(“some string”, initvalue);

          
    $somestring = “some string”;
          
    $crc = crc32($somestring);
          
    print $crc.\n”;

          
    #open(SOMEFILE, “location/of/some.file”);
          #$crc = crc32(*SOMEFILE);
          #close(SOMEFILE);

    1. 運行:
      perl t.pl
      4182587481

    系統(tǒng)要部署到AIX平臺

    問題:
    make編譯報錯,提示:cc_r not found!編譯器找不到?那就手動指定一下,cc_r應(yīng)該是在/usr/vac/bin目錄下。
    #vi MakeFile 找到CC = cc_r 改成 /usr/vac/bin/cc_r,然后執(zhí)行make
    提示: The license for the Evaluation version of IBM XL C/C++ for AIX, V10.1 compiler product has expired. 我去!過期了。。。這家伙還沒免費的。。

    另找辦法,cc_r不讓用就用gcc吧。
    AIX Toolbox download:http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html 中免費下載。
    傻瓜式安裝 #
    rpm –ivh gcc-4.2.0-3.aix5.3.ppc.rpm 
    把cc_r替換為gcc,執(zhí)行make編譯。報錯一大堆,各種的編譯選項類型不符。


    解決方案
    網(wǎng)上搜的:

    現(xiàn)在AIX自帶的perl實例因為不是用gcc編譯的,所以不可以在其基礎(chǔ)上用gcc編譯安裝相關(guān)模塊;

    需要從網(wǎng)上下載perl的源代碼,使用gcc編譯安裝一份新的perl實例;

    現(xiàn)在AIX自帶的perl實例因為不是用gcc編譯的,所以不可以在其基礎(chǔ)上用gcc編譯安裝相關(guān)模塊;

    需要從網(wǎng)上下載perl的源代碼,使用gcc編譯安裝一份新的perl實例;


    那就去perl下最新的源碼包吧,http://www.perl.com/
    指定編譯器和目錄 #sh Configure -de -Dcc=gcc –Dprefix=/opt/perl-5.10
    #make
    #make install

    設(shè)置PATH環(huán)境變量:export PATH=/opt/perl-5.10/bin:$PATH (注意把新的perl實例的bin路徑設(shè)置在前面,是因為系統(tǒng)中原有的perl實例還存在,可以做到優(yōu)先使用新的perl實例)
    #perl -version 確認一下最新的版本

    然后再去編譯String-CRC32吧
    #perl MakeFile.pl
    #make
    #make install

    安裝完成,測試成功。這一大圈繞的。

    posted @ 2010-11-29 16:41 colorfire 閱讀(2268) | 評論 (0)編輯 收藏

    利用Java反射讀取XML配置文件

         摘要: 背景:項目配置文件分散,有FTP、文件格式、數(shù)據(jù)庫等。且單個任務(wù)配置都不一樣。故有了統(tǒng)一配置文件的想法,由統(tǒng)一的工具類生成配置對象。 使用:dom4j,Java ioc 首先是XML文件的定義,懶得寫schema,直接手寫了。配置項由于很多,且分類明確,所以一開始就打算將其分為多個Java類配置。  1<?xml version="1.0" ...  閱讀全文

    posted @ 2010-11-23 17:17 colorfire 閱讀(791) | 評論 (0)編輯 收藏

    轉(zhuǎn):JAVA處理XML文件方法比較

    在平時工作中,難免會遇到把XML作為數(shù)據(jù)存儲格式。面對目前種類繁多的解決方案,哪個最適合我們呢?在這篇文章中,我對這四種主流方案做一個不完全評測,僅僅針對遍歷XML這塊來測試,因為遍歷XML是工作中使用最多的(至少我認為)。

      預(yù)備

      測試環(huán)境:

      AMD毒龍1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在Debug模式下測試。

      XML文件格式如下:

      <?xml version="1.0" encoding="GB2312"?><RESULT><VALUE>

      <NO>A1234</NO>

      <ADDR>四川省XX縣XX鎮(zhèn)XX路X段XX號</ADDR></VALUE><VALUE>

      <NO>B1234</NO>

      <ADDR>四川省XX市XX鄉(xiāng)XX村XX組</ADDR></VALUE></RESULT>

      測試方法:

      采用JSP端調(diào)用Bean(至于為什么采用JSP來調(diào)用,請參考:http://blog.csdn.net/rosen/archive/2004/10/15/138324.aspx),讓每一種方案分別解析10K、100K、1000K、10000K的XML文件,計算其消耗時間(單位:毫秒)。

      JSP文件:

      <%@ page contentType="text/html; charset=gb2312" %><%@ page import="com.test.*"%>

      <html><body><%String args[]={""};MyXMLReader.main(args);%></body></html>

      測試

      首先出場的是DOM(JAXP Crimson解析器)

      DOM是用與平臺和語言無關(guān)的方式表示XML文檔的官方W3C標準。DOM是以層次結(jié)構(gòu)組織的節(jié)點或信息片斷的集合。這個層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而DOM被認為是基于樹或基于對象的。DOM以及廣義的基于樹的處理具有幾個優(yōu)點。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時候在樹中上下導(dǎo)航,而不是像SAX那樣是一次性的處理。DOM使用起來也要簡單得多。

      另一方面,對于特別大的文檔,解析和加載整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的數(shù)據(jù)會更好。這些基于事件的模型,比如SAX。

      Bean文件:

      package com.test;

      import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;

      public class MyXMLReader{

      public static void main(String arge[]){

      long lasting =System.currentTimeMillis();

      try{

      File f=new File("data_10k.xml");

      DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

      DocumentBuilder builder=factory.newDocumentBuilder();

      Document doc = builder.parse(f);

      NodeList nl = doc.getElementsByTagName("VALUE");

      for (int i=0;i<nl.getLength();i++){

      System.out.print("車牌號碼:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());

      System.out.println("車主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());

      }

      }catch(Exception e){

      e.printStackTrace();

      }

      System.out.println("運行時間:"+(System.currentTimeMillis() - lasting)+"毫秒");}}

      10k消耗時間:265 203 219 172

      100k消耗時間:9172 9016 8891 9000

      1000k消耗時間:691719 675407 708375 739656

      10000k消耗時間:OutOfMemoryError

      接著是SAX

      這種處理的優(yōu)點非常類似于流媒體的優(yōu)點。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲在內(nèi)存中。這對于大型文檔來說是個巨大的優(yōu)點。事實上,應(yīng)用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX還比它的替代者DOM快許多。

      選擇DOM還是選擇SAX?

      對于需要自己編寫代碼來處理XML文檔的開發(fā)人員來說,

      選擇DOM還是SAX解析模型是一個非常重要的設(shè)計決策。

      DOM采用建立樹形結(jié)構(gòu)的方式訪問XML文檔,而SAX采用的事件模型。

      DOM解析器把XML文檔轉(zhuǎn)化為一個包含其內(nèi)容的樹,并可以對樹進行遍歷。用DOM解析模型的優(yōu)點是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點來完成任務(wù)。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時候需要處理整個XML文檔,所以對性能和內(nèi)存的要求比較高,尤其是遇到很大的XML文件的時候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務(wù)中。

      SAX解析器采用了基于事件的模型,它在解析XML文檔的時候可以觸發(fā)一系列的事件,當發(fā)現(xiàn)給定的tag的時候,它可以激活一個回調(diào)方法,告訴該方法制定的標簽已經(jīng)找到。SAX對內(nèi)存的要求通常會比較低,因為它讓開發(fā)人員自己來決定所要處理的tag。特別是當開發(fā)人員只需要處理文檔中所包含的部分數(shù)據(jù)時,SAX這種擴展能力得到了更好的體現(xiàn)。但用SAX解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數(shù)據(jù)。

      Bean文件:

      package com.test;import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

      public class MyXMLReader extends DefaultHandler {

      java.util.Stack tags = new java.util.Stack();

      public MyXMLReader() {

      super();}

      public static void main(String args[]) {

      long lasting = System.currentTimeMillis();

      try {

      SAXParserFactory sf = SAXParserFactory.newInstance();

      SAXParser sp = sf.newSAXParser();

      MyXMLReader reader = new MyXMLReader();

      sp.parse(new InputSource("data_10k.xml"), reader);

      } catch (Exception e) {

      e.printStackTrace();

      }

      System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + "毫秒");}

      public void characters(char ch[], int start, int length) throws SAXException {

      String tag = (String) tags.peek();

      if (tag.equals("NO")) {

      System.out.print("車牌號碼:" + new String(ch, start, length));}if (tag.equals("ADDR")) {

      System.out.println("地址:" + new String(ch, start, length));}}

      public void startElement(String uri,String localName,String qName,Attributes attrs) {

      tags.push(qName);}}

      10k消耗時間:110 47 109 78

      100k消耗時間:344 406 375 422

      1000k消耗時間:3234 3281 3688 3312

      10000k消耗時間:32578 34313 31797 31890 30328

      然后是JDOM http://www.jdom.org/

      JDOM的目的是成為Java特定文檔模型,它簡化與XML的交互并且比使用DOM實現(xiàn)更快。由于是第一個Java特定模型,JDOM一直得到大力推廣和促進。正在考慮通過“Java規(guī)范請求JSR-102”將它最終用作“Java標準擴展”。從2000年初就已經(jīng)開始了JDOM開發(fā)。

      JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類而不使用接口。這在某些方面簡化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡化了那些已經(jīng)熟悉這些類的Java開發(fā)者的使用。

      JDOM文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)Java/XML問題”(根據(jù)學(xué)習(xí)曲線假定為20%)。JDOM對于大多數(shù)Java/XML應(yīng)用程序來說當然是有用的,并且大多數(shù)開發(fā)者發(fā)現(xiàn)API比DOM容易理解得多。JDOM還包括對程序行為的相當廣泛檢查以防止用戶做任何在XML中無意義的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情況下的錯誤)。這也許是比學(xué)習(xí)DOM或JDOM接口都更有意義的工作。

      JDOM自身不包含解析器。它通常使用SAX2解析器來解析和驗證輸入XML文檔(盡管它還可以將以前構(gòu)造的DOM表示作為輸入)。它包含一些轉(zhuǎn)換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發(fā)布的開放源碼。

      Bean文件:

      package com.test;

      import java.io.*;import java.util.*;import org.jdom.*;import org.jdom.input.*;

      public class MyXMLReader {

      public static void main(String arge[]) {

      long lasting = System.currentTimeMillis();

      try {

      SAXBuilder builder = new SAXBuilder();

      Document doc = builder.build(new File("data_10k.xml"));

      Element foo = doc.getRootElement();

      List allChildren = foo.getChildren();

      for(int i=0;i<allChildren.size();i++) {

      System.out.print("車牌號碼:" + ((Element)allChildren.get(i)).getChild("NO").getText());

      System.out.println("車主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());

      }

      } catch (Exception e) {

      e.printStackTrace();

      }

      System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + "毫秒");}}

      10k消耗時間:125 62 187 94

      100k消耗時間:704 625 640 766

      1000k消耗時間:27984 30750 27859 30656

      10000k消耗時間:OutOfMemoryError

      最后是DOM4J http://dom4j.sourceforge.net/

      雖然DOM4J代表了完全獨立的開發(fā)結(jié)果,但最初,它是JDOM的一種智能分支。它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項,它通過DOM4J API和標準DOM接口具有并行訪問功能。從2000下半年開始,它就一直處于開發(fā)之中。

      為支持所有這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的Collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復(fù)雜的API的代價,但是它提供了比JDOM大得多的靈活性。

      在添加靈活性、XPath集成和對大文檔處理的目標時,DOM4J的目標與JDOM是一樣的:針對Java開發(fā)者的易用性和直觀操作。它還致力于成為比JDOM更完整的解決方案,實現(xiàn)在本質(zhì)上處理所有Java/XML問題的目標。在完成該目標時,它比JDOM更少強調(diào)防止不正確的應(yīng)用程序行為。

      DOM4J是一個非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML,特別值得一提的是連Sun的JAXM也在用DOM4J。

      Bean文件:

      package com.test;

      import java.io.*;import java.util.*;import org.dom4j.*;import org.dom4j.io.*;

      public class MyXMLReader {

      public static void main(String arge[]) {

      long lasting = System.currentTimeMillis();

      try {

      File f = new File("data_10k.xml");

      SAXReader reader = new SAXReader();

      Document doc = reader.read(f);

      Element root = doc.getRootElement();

      Element foo;

      for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {

      foo = (Element) i.next();

      System.out.print("車牌號碼:" + foo.elementText("NO"));

      System.out.println("車主地址:" + foo.elementText("ADDR"));

      }

      } catch (Exception e) {

      e.printStackTrace();

      }

      System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + "毫秒");}}

      10k消耗時間:109 78 109 31

      100k消耗時間:297 359 172 312

      1000k消耗時間:2281 2359 2344 2469

      10000k消耗時間:20938 19922 20031 21078

      JDOM和DOM在性能測試時表現(xiàn)不佳,在測試10M文檔時內(nèi)存溢出。在小文檔情況下還值得考慮使用DOM和JDOM。雖然JDOM的開發(fā)者已經(jīng)說明他們期望在正式發(fā)行版前專注性能問題,但是從性能觀點來看,它確實沒有值得推薦之處。另外,DOM仍是一個非常好的選擇。DOM實現(xiàn)廣泛應(yīng)用于多種編程語言。它還是許多其它與XML相關(guān)的標準的基礎(chǔ),因為它正式獲得W3C推薦(與基于非標準的Java模型相對),所以在某些類型的項目中可能也需要它(如在Javascript中使用DOM)。

      SAX表現(xiàn)較好,這要依賴于它特定的解析方式。一個SAX檢測即將到來的XML流,但并沒有載入到內(nèi)存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內(nèi)存中)。

      無疑,DOM4J是這場測試的獲勝者,目前許多開源項目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。如果不考慮可移植性,那就采用DOM4J吧!

    posted @ 2010-11-23 11:14 colorfire 閱讀(445) | 評論 (0)編輯 收藏

    IBATIS執(zhí)行SQL語句

    數(shù)據(jù)庫使用oracle10g,不支持自動分區(qū),設(shè)計要求按時間分區(qū)。

    NC想法,要求定時建表,表名用時間區(qū)別。

    系統(tǒng)使用IBATIS,把時間檔參數(shù)怎么傳也報參數(shù)錯誤。

    原來:ibatis,使用#xxx#當做變量使用,會自動加單引號。查資料,用$號代替,搞定。

    posted @ 2010-11-17 16:07 colorfire 閱讀(268) | 評論 (0)編輯 收藏

    如何管理你的代碼?

    在線應(yīng)用
    Google Project Host 兩個G,免費,缺點是必須開源。
    assembla 同樣兩個G,免費,且不必開源,很不錯不是么。

    本地應(yīng)用
    svn server 是首選,但是有點麻煩。
    git 是個不錯的選擇,簡單并可以分布式。

    posted @ 2010-11-12 10:40 colorfire 閱讀(124) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 又大又硬又爽又粗又快的视频免费| 国产成人1024精品免费| 国产亚洲视频在线观看网址 | 亚洲一区AV无码少妇电影☆| 亚洲精品白浆高清久久久久久| 亚洲一区二区三区首页| 亚洲日本视频在线观看| 国产精品亚洲专区无码牛牛| eeuss免费天堂影院| **真实毛片免费观看 | 9久9久女女免费精品视频在线观看| 色播在线永久免费视频| 精品亚洲成α人无码成α在线观看 | 成人国产精品免费视频| 最近最新高清免费中文字幕 | 亚洲成_人网站图片| 色噜噜狠狠色综合免费视频| 免费萌白酱国产一区二区三区| 97碰公开在线观看免费视频| 免费国产精品视频| 亚洲成色WWW久久网站| 亚洲精品第一国产综合野| 免费激情网站国产高清第一页| 精品国产污污免费网站 | 99免费视频观看| 国产免费资源高清小视频在线观看| 亚洲一区精品无码| 亚洲看片无码在线视频| 一级有奶水毛片免费看| 欧美a级在线现免费观看| 亚洲综合亚洲综合网成人| 亚洲国产日韩在线成人蜜芽 | 国产精品无码免费播放| 亚洲中文字幕无码一区| 亚洲欧洲日韩国产一区二区三区 | 99爱在线观看免费完整版 | 毛片高清视频在线看免费观看| 亚洲香蕉网久久综合影视| 亚洲粉嫩美白在线| 麻豆精品成人免费国产片| 又粗又硬又大又爽免费视频播放|