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

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

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

    當(dāng)前訪問本站: hits

    yjhmily

    堅(jiān)持走自己的路……

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      100 Posts :: 8 Stories :: 353 Comments :: 0 Trackbacks

    2010年3月14日 #

    原文出處:http://space.itpub.net/133735/viewspace-710117 
    總結(jié)的不錯(cuò)!
    -------------------------------------------------------------------------------------------------
    生產(chǎn)環(huán)境最佳實(shí)踐
    1.linux 系統(tǒng):
    1】關(guān)閉文件系統(tǒng)/分區(qū)的atime 選項(xiàng)
    Vi /etc/fstab
    在對(duì)應(yīng)的分區(qū)項(xiàng)后面添加noatime ,nodiratime
    LABEL=/1 / ext3 defaults 1 1
    LABEL=/data1 /data ext4 defaults,noatime,nodiratime 1 2
    2】設(shè)置文件句柄4k+,目前該配置已經(jīng)集成到啟動(dòng)腳本中。
    Vi /etc/security/limit.conf
    * soft nproc 65536
    * hard nproc 65536
    * soft nofile 65536
    * hard nofile 65536
    3】不要使用large vm page (不要使用大內(nèi)存頁選項(xiàng))
    Linux 大內(nèi)存頁參考:http://linuxgazette.net/155/krishnakumar.html
    4】用dmesg 查看主機(jī)的信息。
    2.linux 文件系統(tǒng)的選擇:
    Mongodb 采用預(yù)分配的大文件來存儲(chǔ)數(shù)據(jù),我們推薦
    1】ext4
    2】xfs
    3.內(nèi)核版本:
    網(wǎng)絡(luò)上對(duì)2.6.33-31 以及2.6.32 的表現(xiàn)持懷疑度, 而強(qiáng)力推薦2.6.36
    4.線程堆棧的尺寸
    默認(rèn)的線程堆棧尺寸為10m ,調(diào)整為1m ,已經(jīng)集成在啟動(dòng)腳本中。
    項(xiàng)目過程中的總結(jié)與建議
    1.大小寫問題
    mongodb 是默認(rèn)區(qū)分大小寫的,但是這會(huì)不會(huì)衍生出跟mysql 一樣的問題?(mysql 區(qū)
    分大小寫,導(dǎo)致windows 與linux 下的表名,字段名不一致)。
    如果無特別用途,建議表名,字段名全部用小寫字母。
    2.盡可能的縮短字段名的長度
    mongodb 的schema free 導(dǎo)致了每筆數(shù)據(jù)都要存儲(chǔ)他的key 以及屬性,這導(dǎo)致了這些數(shù)
    據(jù)的大量冗余。開發(fā)同事也許考慮到,從易讀性出發(fā)設(shè)計(jì)的key 基本比較長,基本都是按
    照起字面意思去設(shè)計(jì)的。這導(dǎo)致key 很長。對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)占用了很大的空間。
    必要的時(shí)候,可以考慮建立一個(gè)key 與實(shí)際意義的map 表,盡量降低key 的長度。
    示例定義:
    // 基本信息
    static final String _ID = "_id";
    static final String STATUS_CODE = "sc";
    // 緩沖
    static final String DATE = "date";
    static final String MAX_AGE = "age";
    // 內(nèi)容
    static final String CONTENT = "content";
    static final String CONTENT_TYPE = "ctype";
    static final String CONTENT_LENGTH = "clen";
    static final String ZIP = "zip";
    3. mongodb 單表最大索引數(shù)為64
    無索引排序的最大數(shù)據(jù)量為4M, 超過則報(bào)錯(cuò)退出。
    建議where 條件盡量落在索引字段上,排序字段需要建立索引,索引的使用原則與oracle
    mysql 一致,盡量降低索引數(shù)量,索引長度。
    mongodb 的查詢每次只能用到一個(gè)索引,對(duì)數(shù)據(jù)的查詢不會(huì)“并發(fā)”執(zhí)行
    例如: db.tab.find({'id'=1,'name'=2}) 如果‘id’,‘name' 列上分別有索引
    對(duì)查詢效率提升意義不大,如果索引為('id','name') 則大幅提升效率。
    4.mongodb 添加字段
    如果添加字段且?guī)в衐efault 值,需要全部數(shù)據(jù)都要修改,這也是設(shè)計(jì)階段需要考慮的
    事情,這個(gè)問題的另外一種解法是應(yīng)用代碼里做一次判斷。
    5.測試過程的密碼問題
    對(duì)于用作數(shù)據(jù)庫使用的Mongodb,在代碼測試階段都應(yīng)加上密碼驗(yàn)證,目前上線階段基
    本都會(huì)在密碼驗(yàn)證方面出現(xiàn)問題(做緩存使用的可以不做密碼驗(yàn)證)。
    6.數(shù)據(jù)源連接方式
    使用連接池模式,盡量減少認(rèn)證帶來的性能額外消耗
    建議采用標(biāo)準(zhǔn)的uri 連接方式: mongodb://user:passwd@host:port,host:port/db
    7.Mongodb日志量
    正常情況下不需要開啟-v 日志選項(xiàng)。
    Mongodb 的-v 日志適合在開發(fā)環(huán)境的調(diào)試線上部署不建議采用這個(gè)參數(shù),目前線上
    部署的情況,-v 日志一天也會(huì)有幾個(gè)G 的日志量,去掉這個(gè)參數(shù),跟數(shù)據(jù)查詢相關(guān)的操作
    就不會(huì)記日志了,數(shù)據(jù)庫的內(nèi)部的重要操作還是會(huì)寫日志的。
    8.連接數(shù)大小的設(shè)置
    Mongodb 驅(qū)動(dòng)程序采用的連接池的方式連接到數(shù)據(jù)庫,目前從觀察到的情況是應(yīng)用一
    開啟便根據(jù)變量的設(shè)置,建立全部連接,然后提供給程序使用,并且一旦其中某個(gè)連接
    到數(shù)據(jù)庫的訪問失敗,則會(huì)清空整個(gè)連接池到這臺(tái)數(shù)據(jù)庫的連接,并重新建立連接。
    而mongodb 對(duì)中斷連接的垃圾清理工作則是懶惰的被動(dòng)清理方式,如果驅(qū)動(dòng)程序端配
    置的連接數(shù)過大,一旦發(fā)生重連,則會(huì)導(dǎo)致mongo 端堆積大量的垃圾連接數(shù)據(jù),導(dǎo)致
    主機(jī)資源耗盡。
    建議: mongodb 驅(qū)動(dòng)的連接池大小的設(shè)置一般應(yīng)該控制100 以下,一般情況30-50 足
    夠支撐應(yīng)用訪問。
    9.鎖的問題
    Mongodb 對(duì)數(shù)據(jù)庫的訪問全部加鎖,如果是查詢請求則設(shè)置共享鎖,數(shù)據(jù)修改請求,
    則設(shè)置全局排他鎖,并且是實(shí)例級(jí)別的排他鎖。并且寫鎖會(huì)阻塞讀請求,如果長時(shí)間持有
    寫鎖,會(huì)阻塞整個(gè)實(shí)例的讀請求。
    部署建議:
    1】一般情況下,建議不同的應(yīng)用不要合用一套示例。
    2】如果資源不滿足,需要合用,應(yīng)該具有相同屬性的應(yīng)用合用一套實(shí)例。
    例如合同mongo 的應(yīng)用都是讀多寫少,防止一臺(tái)寫多應(yīng)用阻塞讀請求。
    10.關(guān)于map/reduce問題
    mongodb 對(duì)map/reduce 的支持是單線程的,我們不建議在前臺(tái)使用該功能, group by
    是通過map/reduce 實(shí)現(xiàn)的,開發(fā)過程中,要慎用。
    11.安全問題
    1】Mongodb 運(yùn)行在mongodb 用戶之上,并禁止mongodb 用戶登錄
    2】使用Mongodb 自帶的認(rèn)證方法(adduser、auth)限制用戶訪問行為
    3】將Mongodb 置于內(nèi)網(wǎng)環(huán)境中
    4】Mongodb 必須暴露在外網(wǎng)環(huán)境中的時(shí)候,使用IPTABLES 等網(wǎng)絡(luò)層技術(shù)進(jìn)行防護(hù)
    5】網(wǎng)絡(luò)層面內(nèi)容為明文傳輸,可以考慮存儲(chǔ)加密文檔,應(yīng)用端,加解密。
    12.性能監(jiān)控
    Mongodb 自帶有性能數(shù)據(jù)收集系統(tǒng)
    Mongostat 實(shí)時(shí)采集數(shù)據(jù)庫的多項(xiàng)指標(biāo),提供http console 端口號(hào)為應(yīng)用端口號(hào)+1000。
    關(guān)注的主要性能指標(biāo):
    1】Faults:顯示Mongodb 每秒頁面故障的數(shù)量,這個(gè)是mongoDB 映射到虛擬地址空間,
    而不是物理內(nèi)存,這個(gè)值如果飆高的話,可能意味著機(jī)器沒有足夠的內(nèi)存來
    存儲(chǔ)數(shù)據(jù)和索引。
    2】Flushes:每秒做了多少次fsync,顯示多少次數(shù)據(jù)被刷新進(jìn)了磁盤
    3】locked:寫鎖
    4】idx miss:索引未命中比例
    5】qr | qw:讀寫鎖的請求隊(duì)列長度。
    6】conn: 當(dāng)前已經(jīng)建立的連接數(shù)。
    其他命令:
    Db.stat()
    db.serverStatuse()
    Db.collection.stats()
    13.碎片問題
    Mongodb 數(shù)據(jù)庫如果數(shù)據(jù)修改很頻繁,會(huì)出現(xiàn)比較嚴(yán)重的空間碎片問題,表現(xiàn)在磁盤
    文件擴(kuò)張與實(shí)際數(shù)據(jù)量不相符,內(nèi)存不夠用,索引命中率低,查詢效率降低。
    碎片整理,目前我們采用的版本沒有太有效的方法。
    可以用db.repaireDatabase() 來整理數(shù)據(jù)庫,這個(gè)過程非常的慢
    如果是Master-slave 模式則相當(dāng)于執(zhí)行一次主從切換,然后從新建立從庫。
    如果是replSet 架構(gòu)可以停掉數(shù)據(jù)庫,然后刪除數(shù)據(jù)目錄,從新從復(fù)制復(fù)制組中全同步數(shù)據(jù),
    這個(gè)時(shí)候要考慮oplog 的尺寸。
    一個(gè)大體的步驟:
    1.】先調(diào)用rs.freeze(1200),將每個(gè)不想讓它成為primary 的機(jī)器讓它在1200 秒內(nèi)無法成為
    primary(這步也可以不做)
    2. 】將primary stepDown,不出意外新的primary 會(huì)起來.
    3. 】將原primary kill 掉.
    4. 】刪掉所有data 數(shù)據(jù)(調(diào)用repair 很慢,真不如干掉重新來)
    5. 】再重啟動(dòng)原primary 的進(jìn)程
    6. 】以此循環(huán)完成整個(gè)復(fù)制組的全部重建。
    14.系統(tǒng)備份:
    Mongodb 目前不支持在線備份,只能離線備份。
    我們采用的架構(gòu)為replSet 和Master-slave .
    基于我們目前的架構(gòu)以及數(shù)據(jù)一致性要求,我們沒有安排相關(guān)的備份系統(tǒng)。
    15.應(yīng)用代碼中Mongodb連接問題
    在有些應(yīng)用在使用Mongodb 過程中會(huì)存在以下兩個(gè)小問題:
    1. 在應(yīng)用啟動(dòng)過程中,應(yīng)用存在要求連接池中所有的連接都建立成功才讓應(yīng)用正
    常啟動(dòng),這種做法不可取,因?yàn)榇嬖诰W(wǎng)絡(luò)問題、Mongodb 拒絕連接或Mongodb 假死情況,如
    果沒加外部try catch 做防護(hù),則Resin 不斷重啟也不能正常啟動(dòng)端口。
    2.有些應(yīng)用在使用Mongodb 中連接池配置了safe=true,w=1;這種配置意味著客戶端在
    插入數(shù)據(jù)或更新數(shù)據(jù)的時(shí)候,要求mongodb 必須將所更新的數(shù)據(jù)寫入磁盤并返回更新成功
    的信息給程序。如果碰上應(yīng)用程序訪問壓力大,mongodb 就會(huì)反應(yīng)遲鈍,并會(huì)發(fā)生假死可能,
    針對(duì)此情況,需要評(píng)估數(shù)據(jù)的一致性需求,做出合適調(diào)整。我們一般建議關(guān)閉此選項(xiàng)。
    16.補(bǔ)充開發(fā)方面的一些問題
    1】skip+limit翻頁,越往后面越慢,有資料說用數(shù)組元素的分頁可以解決,目前還沒
    試過,比較靠譜的做法是,先找出上次的id,翻頁的時(shí)候不用skip:
    last_row_id = ObjectId(‘....’);
    db.activity_stream->find({_id:{$lt: last_row_id },
    user_id:20 } ).sort( {_id:-1} ).limit(10);
    2】.只有真正需要的字段才select出來
    3】.更新的某條數(shù)據(jù)的時(shí)候,先查出來再更新會(huì)減小鎖的時(shí)間
    4】.只有返回很少結(jié)果的查詢才用索引,否則會(huì)加載太多數(shù)據(jù),比沒有用索引還慢
    5】.屬性比較多的時(shí)候,建立分層的關(guān)系能夠提高查詢效率,否則每個(gè)記錄都要過一遍
    才能找到要的屬性
    17.關(guān)于硬件資源的選擇:
    虛擬機(jī)可以很好的隔離資源,并可動(dòng)態(tài)的擴(kuò)展。
    我們建議mongodb 的部署采用虛擬機(jī)的方式,每個(gè)虛擬機(jī)部署一個(gè)實(shí)例,使各節(jié)點(diǎn)分
    散在不同的物理機(jī)上,根據(jù)應(yīng)用的前期預(yù)測,平衡虛擬機(jī)的之間的i/o。
    posted @ 2012-09-29 22:17 kangxm 閱讀(633) | 評(píng)論 (0)編輯 收藏

    adb shell

    # mount -oremount,rw /dev/block/mtdblock3 /system

    # pm list packages -f (列出apk和包名的對(duì)應(yīng)關(guān)系)
    # cd /system/app (APK文件所在地)
    # rm Mms.* (rom自帶的短信)
    # exit

     

    adb uninstall com.android.mms

     

    返回Success,就說明卸載成功了

     

    注意..
    刪除之前, 最好用

    1. adb pull /system/app/xxx.apk .

    復(fù)制代碼

    給備份一下, 避免出錯(cuò)(系統(tǒng)老是Force Close, 沒法用).
    出錯(cuò)后, 可以用

    1. adb push xxx.apk /system/app
    adb shell

    # mount -oremount,rw /dev/block/mtdblock3 /system

    # pm list packages -f (列出apk和包名的對(duì)應(yīng)關(guān)系)
    # cd /system/app (APK文件所在地)
    # rm Mms.* (rom自帶的短信)
    # exit

     

    adb uninstall com.android.mms

     

    返回Success,就說明卸載成功了

     

    注意..
    刪除之前, 最好用

    1. adb pull /system/app/xxx.apk .

    復(fù)制代碼

    給備份一下, 避免出錯(cuò)(系統(tǒng)老是Force Close, 沒法用).
    出錯(cuò)后, 可以用

    1. adb push xxx.apk /system/app
    posted @ 2012-08-10 17:56 kangxm 閱讀(539) | 評(píng)論 (0)編輯 收藏

    最近的機(jī)器內(nèi)存又爆滿了,出了新增機(jī)器內(nèi)存外,還應(yīng)該好好review一下我們的代碼,有很多代碼編寫過于隨意化,這些不好的習(xí)慣或?qū)Τ绦蛘Z言的不了解是應(yīng)該好好打壓打壓了。
    下面是參考網(wǎng)絡(luò)資源和總結(jié)一些在java編程中盡可能做到的一些地方
    -
    1.盡量在合適的場合使用單例
    使用單例可以減輕加載的負(fù)擔(dān),縮短加載的時(shí)間,提高加載的效率,但并不是所有地方都適用于單例,簡單來說,單例主要適用于以下三個(gè)方面
    第一,控制資源的使用,通過線程同步來控制資源的并發(fā)訪問
    第二,控制實(shí)例的產(chǎn)生,以達(dá)到節(jié)約資源的目的
    第三,控制數(shù)據(jù)共享,在不建立直接關(guān)聯(lián)的條件下,讓多個(gè)不相關(guān)的進(jìn)程或線程之間實(shí)現(xiàn)通信
    -
    2.盡量避免隨意使用靜態(tài)變量
    要知道,當(dāng)某個(gè)對(duì)象被定義為stataic變量所引用,那么gc通常是不會(huì)回收這個(gè)對(duì)象所占有的內(nèi)存,如
    public class A{
    static B b = new B();
    }
    此時(shí)靜態(tài)變量b的生命周期與A類同步,如果A類不會(huì)卸載,那么b對(duì)象會(huì)常駐內(nèi)存,直到程序終止。
    -
    3.盡量避免過多過常的創(chuàng)建java對(duì)象
    盡量避免在經(jīng)常調(diào)用的方法,循環(huán)中new對(duì)象,由于系統(tǒng)不僅要花費(fèi)時(shí)間來創(chuàng)建對(duì)象,而且還要花時(shí)間對(duì)這些對(duì)象進(jìn)行垃圾回收和處理,在我們可以控制的范圍內(nèi),最
    大限度的重用對(duì)象,最好能用基本的數(shù)據(jù)類型或數(shù)組來替代對(duì)象。
    -
    4.盡量使用final修飾符
    帶 有final修飾符的類是不可派生的。在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String。為String類指 定final防止了使用者覆蓋length()方法。另外,如果一個(gè)類是final的,則該類所有方法都是final的。java編譯器會(huì)尋找機(jī)會(huì)內(nèi)聯(lián) (inline)所有的final方法(這和具體的編譯器實(shí)現(xiàn)有關(guān))。此舉能夠使性能平均提高50%。
    -
    5.盡量使用局部變量
    調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量,實(shí)例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。
    -
    6.盡量處理好包裝類型和基本類型兩者的使用場所
    雖然包裝類型和基本類型在使用過程中是可以相互轉(zhuǎn)換,但它們兩者所產(chǎn)生的內(nèi)存區(qū)域是完全不同的,基本類型數(shù)據(jù)產(chǎn)生和處理都在棧中處理,包裝類型是對(duì)象,是在堆中產(chǎn)生實(shí)例。
    在集合類對(duì)象,有對(duì)象方面需要的處理適用包裝類型,其他的處理提倡使用基本類型。
    -
    7.慎用synchronized,盡量減小synchronize的方法
    都 知道,實(shí)現(xiàn)同步是要很大的系統(tǒng)開銷作為代價(jià)的,甚至可能造成死鎖,所以盡量避免無謂的同步控制。synchronize方法被調(diào)用時(shí),直接會(huì)把當(dāng)前對(duì)象鎖 了,在方法執(zhí)行完之前其他線程無法調(diào)用當(dāng)前對(duì)象的其他方法。所以synchronize的方法盡量小,并且應(yīng)盡量使用方法同步代替代碼塊同步。
    -
    8.盡量使用StringBuilder和StringBuffer進(jìn)行字符串連接
    這個(gè)就不多講了
    -
    9.盡量不要使用finalize方法
    實(shí)際上,將資源清理放在finalize方法中完成是非常不好的選擇,由于GC的工作量很大,尤其是回收Young代內(nèi)存時(shí),大都會(huì)引起應(yīng)用程序暫停,所以再選擇使用finalize方法進(jìn)行資源清理,會(huì)導(dǎo)致GC負(fù)擔(dān)更大,程序運(yùn)行效率更差。
    -
    10.盡量使用基本數(shù)據(jù)類型代替對(duì)象
    String str = "hello";
    上面這種方式會(huì)創(chuàng)建一個(gè)“hello”字符串,而且JVM的字符緩存池還會(huì)緩存這個(gè)字符串;
    String str = new String("hello");
    此時(shí)程序除創(chuàng)建字符串外,str所引用的String對(duì)象底層還包含一個(gè)char[]數(shù)組,這個(gè)char[]數(shù)組依次存放了h,e,l,l,o
    -
    11.單線程應(yīng)盡量使用HashMap, ArrayList
    HashTable,Vector等使用了同步機(jī)制,降低了性能。
    -
    12.盡量合理的創(chuàng)建HashMap
    當(dāng)你要?jiǎng)?chuàng)建一個(gè)比較大的hashMap時(shí),充分利用另一個(gè)構(gòu)造函數(shù)
    public HashMap(int initialCapacity, float loadFactor)
    避 免HashMap多次進(jìn)行了hash重構(gòu),擴(kuò)容是一件很耗費(fèi)性能的事,在默認(rèn)中initialCapacity只有16,而loadFactor是 0.75,需要多大的容量,你最好能準(zhǔn)確的估計(jì)你所需要的最佳大小,同樣的Hashtable,Vectors也是一樣的道理。
    -
    13.盡量減少對(duì)變量的重復(fù)計(jì)算
    for(int i=0;i<list.size();i++)
    應(yīng)該改為
    for(int i=0,len=list.size();i<len;i++)
    并且在循環(huán)中應(yīng)該避免使用復(fù)雜的表達(dá)式,在循環(huán)中,循環(huán)條件會(huì)被反復(fù)計(jì)算,如果不使用復(fù)雜表達(dá)式,而使循環(huán)條件值不變的話,程序?qū)?huì)運(yùn)行的更快。 
    -
    14.盡量避免不必要的創(chuàng)建
    A a = new A();
    if(i==1){list.add(a);}
    應(yīng)該改為
    if(i==1){
    A a = new A();
    list.add(a);}
    -
    15.盡量在finally塊中釋放資源
    程序中使用到的資源應(yīng)當(dāng)被釋放,以避免資源泄漏。這最好在finally塊中去做。不管程序執(zhí)行的結(jié)果如何,finally塊總是會(huì)執(zhí)行的,以確保資源的正確關(guān)閉。 
    -
    16.盡量使用移位來代替'a/b'的操作
    "/"是一個(gè)代價(jià)很高的操作,使用移位的操作將會(huì)更快和更有效
    int num = a / 4;
    int num = a / 8;
    應(yīng)該改為
    int num = a >> 2;
    int num = a >> 3;
    但注意的是使用移位應(yīng)添加注釋,因?yàn)橐莆徊僮鞑恢庇^,比較難理解
    -
    17.盡量使用移位來代替'a*b'的操作
    同樣的,對(duì)于'*'操作,使用移位的操作將會(huì)更快和更有效
    int num = a * 4;
    int num = a * 8;
    應(yīng)該改為
    int num = a << 2;
    int num = a << 3;
    -
    18.盡量確定StringBuffer的容量
    StringBuffer 的構(gòu)造器會(huì)創(chuàng)建一個(gè)默認(rèn)大小(通常是16)的字符數(shù)組。在使用中,如果超出這個(gè)大小,就會(huì)重新分配內(nèi)存,創(chuàng)建一個(gè)更大的數(shù)組,并將原先的數(shù)組復(fù)制過來,再 丟棄舊的數(shù)組。在大多數(shù)情況下,你可以在創(chuàng)建 StringBuffer的時(shí)候指定大小,這樣就避免了在容量不夠的時(shí)候自動(dòng)增長,以提高性能。 
    如:StringBuffer buffer = new StringBuffer(1000);  
    -
    19.盡量早釋放無用對(duì)象的引用
    大部分時(shí),方法局部引用變量所引用的對(duì)象 會(huì)隨著方法結(jié)束而變成垃圾,因此,大部分時(shí)候程序無需將局部,引用變量顯式設(shè)為null。
    例如:
    Public void test(){
    Object obj = new Object();
    ……
    Obj=null;
    }
    上面這個(gè)就沒必要了,隨著方法test()的執(zhí)行完成,程序中obj引用變量的作用域就結(jié)束了。但是如果是改成下面:
    Public void test(){
    Object obj = new Object();
    ……
    Obj=null;
    //執(zhí)行耗時(shí),耗內(nèi)存操作;或調(diào)用耗時(shí),耗內(nèi)存的方法
    ……
    }
    這時(shí)候就有必要將obj賦值為null,可以盡早的釋放對(duì)Object對(duì)象的引用。
    -
    20.盡量避免使用二維數(shù)組
    二維數(shù)據(jù)占用的內(nèi)存空間比一維數(shù)組多得多,大概10倍以上。
    -
    21.盡量避免使用split
    除 非是必須的,否則應(yīng)該避免使用split,split由于支持正則表達(dá)式,所以效率比較低,如果是頻繁的幾十,幾百萬的調(diào)用將會(huì)耗費(fèi)大量資源,如果確實(shí)需 要頻繁的調(diào)用split,可以考慮使用apache的StringUtils.split(string,char),頻繁split的可以緩存結(jié)果。
    -
    22.ArrayList & LinkedList
    一 個(gè)是線性表,一個(gè)是鏈表,一句話,隨機(jī)查詢盡量使用ArrayList,ArrayList優(yōu)于LinkedList,LinkedList還要移動(dòng)指 針,添加刪除的操作LinkedList優(yōu)于ArrayList,ArrayList還要移動(dòng)數(shù)據(jù),不過這是理論性分析,事實(shí)未必如此,重要的是理解好2 者得數(shù)據(jù)結(jié)構(gòu),對(duì)癥下藥。
    -
    23.盡量使用System.arraycopy ()代替通過來循環(huán)復(fù)制數(shù)組
    System.arraycopy() 要比通過循環(huán)來復(fù)制數(shù)組快的多 
    -
    24.盡量緩存經(jīng)常使用的對(duì)象
    盡可能將經(jīng)常使用的對(duì)象進(jìn)行緩存,可以使用數(shù)組,或HashMap的容器來進(jìn)行緩存,但這種方式可能導(dǎo)致系統(tǒng)占用過多的緩存,性能下降,推薦可以使用一些第三方的開源工具,如EhCache,Oscache進(jìn)行緩存,他們基本都實(shí)現(xiàn)了FIFO/FLU等緩存算法。
    -
    25.盡量避免非常大的內(nèi)存分配
    有時(shí)候問題不是由當(dāng)時(shí)的堆狀態(tài)造成的,而是因?yàn)榉峙涫≡斐傻摹7峙涞膬?nèi)存塊都必須是連續(xù)的,而隨著堆越來越滿,找到較大的連續(xù)塊越來越困難。
    -
    26.慎用異常
    當(dāng) 創(chuàng)建一個(gè)異常時(shí),需要收集一個(gè)棧跟蹤(stack track),這個(gè)棧跟蹤用于描述異常是在何處創(chuàng)建的。構(gòu)建這些棧跟蹤時(shí)需要為運(yùn)行時(shí)棧做一份快照,正是這一部分開銷很大。當(dāng)需要?jiǎng)?chuàng)建一個(gè) Exception 時(shí),JVM 不得不說:先別動(dòng),我想就您現(xiàn)在的樣子存一份快照,所以暫時(shí)停止入棧和出棧操作。棧跟蹤不只包含運(yùn)行時(shí)棧中的一兩個(gè)元素,而是包含這個(gè)棧中的每一個(gè)元素。
    如 果您創(chuàng)建一個(gè) Exception ,就得付出代價(jià)。好在捕獲異常開銷不大,因此可以使用 try-catch 將核心內(nèi)容包起來。從技術(shù)上講,您甚至可以隨意地拋出異常,而不用花費(fèi)很大的代價(jià)。招致性能損失的并不是 throw 操作——盡管在沒有預(yù)先創(chuàng)建異常的情況下就拋出異常是有點(diǎn)不尋常。真正要花代價(jià)的是創(chuàng)建異常。幸運(yùn)的是,好的編程習(xí)慣已教會(huì)我們,不應(yīng)該不管三七二十一就 拋出異常。異常是為異常的情況而設(shè)計(jì)的,使用時(shí)也應(yīng)該牢記這一原則。

    文章主要是為了拋磚引玉,希望有更多牛人的指點(diǎn)

    謝謝的 xuanyuan 的建議:
    ===================================================
    7.慎用synchronized,盡量減小synchronize的方法
    re:同意,不過文中有個(gè)地方說錯(cuò)了,使用synchronized關(guān)鍵字并不一定都是鎖定當(dāng)前對(duì)象的,要看具體的鎖是什么。如果是在方法上加的synchronized,則是以對(duì)象本身為鎖的,如果是靜態(tài)方法則鎖的粒度是類。
    ---------------
    9.盡量不要使用finalize方法
    re:同意,其實(shí)不推薦用finalize方法的根本原因在于,JVM的規(guī)范并不保證何時(shí)執(zhí)行該方法,所以用這個(gè)方法來釋放資源很不合適,有可能造成長時(shí)間資源得不到釋放。
    ---------------
    16.盡量使用移位來代替'a/b'的操作;17.盡量使用移位來代替'a*b'的操作
    re:個(gè)人不太同意這兩條。這樣做確實(shí)有更好的性能,但是卻犧牲了可讀性。這兩個(gè)操作符對(duì)很多程序員來說并不直觀。我認(rèn)為在如今硬件價(jià)格不那么昂貴的情況下,略微犧牲一些性能,換來更好的可讀性和可維護(hù)性是好的選擇。
    ===================================================
    19.盡量早釋放無用對(duì)象的引用
    大部分時(shí),方法局部引用變量所引用的對(duì)象 會(huì)隨著方法結(jié)束而變成垃圾,因此,大部分時(shí)候程序無需將局部,引用變量顯式設(shè)為null。
    例如:
    Public void test(){
    Object obj = new Object();
    ……
    Obj=null;
    }
    上面這個(gè)就沒必要了,隨著方法test()的執(zhí)行完成,程序中obj引用變量的作用域就結(jié)束了。但是如果是改成下面:
    Public void test(){
    Object obj = new Object();
    ……
    Obj=null;
    //執(zhí)行耗時(shí),耗內(nèi)存操作;或調(diào)用耗時(shí),耗內(nèi)存的方法
    ……
    }
    如果Object obj = new Object(); 如果這對(duì)象并不是大對(duì)象,這有必要嗎?Obj=null;只是告訴jvm這個(gè)對(duì)象已經(jīng)成為垃圾,至于什么時(shí)候回收,還不能確定! 這可讀性也不好!
    ===================================================
    posted @ 2011-08-22 15:18 kangxm 閱讀(558) | 評(píng)論 (0)編輯 收藏

    提示/boot目錄空間不足,查了一些資料,最后把久的內(nèi)核給卸載得以解決。

    1.首先查看自己使用的內(nèi)核

    lxz@lxz-pc:~$ uname -a

    Linux lxz-pc 2.6.35-25-generic #44-Ubuntu SMP Fri Jan 21 17:40:48 UTC 2011 i686 GNU/Linux


    2.然后查看自己boot目錄,選擇需要卸載的版本
    lxz@lxz-pc:~$    cd /boot
    lxz@lxz-pc:/boot$  ls -l
    總計(jì) 35125
    -rw-r--r-- 1 root root   705861 2011-01-22 06:04 abi-2.6.35-25-generic
    -rw-r--r-- 1 root root   709370 2011-03-01 23:56 abi-2.6.35-28-generic-pae
    -rw-r--r-- 1 root root   128615 2011-01-22 06:04 config-2.6.35-25-generic
    -rw-r--r-- 1 root root   129056 2011-03-01 23:56 config-2.6.35-28-generic-pae
    drwxr-xr-x 3 root root     7168 2011-03-23 10:31 grub
    -rw-r--r-- 1 root root 10761551 2011-03-04 10:49 initrd.img-2.6.35-25-generic
    -rw-r--r-- 1 root root 10741569 2011-03-23 10:18 initrd.img-2.6.35-28-generic-pae
    drwx------ 2 root root    12288 2011-01-05 04:52 lost+found
    -rw-r--r-- 1 root root   165084 2010-09-25 01:14 memtest86+.bin
    -rw-r--r-- 1 root root   167264 2010-09-25 01:14 memtest86+_multiboot.bin
    -rw-r--r-- 1 root root  1831296 2011-01-22 06:04 System.map-2.6.35-25-generic
    -rw-r--r-- 1 root root  1873873 2011-03-01 23:56 System.map-2.6.35-28-generic-pae
    -rw-r--r-- 1 root root     1192 2011-01-22 06:06 vmcoreinfo-2.6.35-25-generic
    -rw-r--r-- 1 root root     1196 2011-03-01 23:57 vmcoreinfo-2.6.35-28-generic-pae
    -rw-r--r-- 1 root root  4294672 2011-01-22 06:04 vmlinuz-2.6.35-25-generic
    -rw-r--r-- 1 root root  4428048 2011-03-01 23:56 vmlinuz-2.6.35-28-generic-pae
    上面顯示的情況中,是我已經(jīng)把linux-image-2.6.35-27-generic的結(jié)果

    3.卸載舊內(nèi)核應(yīng)該使用命令:
    lxz@lxz-pc:/boot$  sudo apt-get remove linux-image-2.6.35-27-generic

    4.查看/boot目錄:
    lxz@lxz-pc:/boot$ sudo du -m /boot           //以MB為單位顯示
    1    /boot/grub/locale
    2    /boot/grub
    1    /boot/lost+found
    36    /boot

    5.查看文件系統(tǒng)使用情況,和文件系統(tǒng)被掛在的位置:
    lxz@lxz-pc:/boot$  df  -lh
    文件系統(tǒng)            容量  已用  可用 已用%% 掛載點(diǎn)
    /dev/sda7              71G  7.7G   60G  12% /
    none                 1001M  244K 1001M   1% /dev
    none                 1007M  216K 1006M   1% /dev/shm
    none                 1007M  100K 1006M   1% /var/run
    none                 1007M     0 1007M   0% /var/lock
    /dev/sda8              92M   42M   46M  48% /boot
    posted @ 2011-04-06 12:09 kangxm 閱讀(3188) | 評(píng)論 (0)編輯 收藏

    在ubuntu環(huán)境下進(jìn)行android開發(fā),想把目標(biāo)設(shè)備定為真實(shí)的手機(jī)。

    前幾天剛買了個(gè)defy就試了下,結(jié)果打開手機(jī)usb調(diào)試模式連接到電腦后,在eclipse里面手機(jī)名字顯示為一堆???號(hào),且無法使用。

    需要以下的步驟才能連接到:

    1 把手機(jī)設(shè)備為usb調(diào)試模式并和電腦連接

    2 打開終端運(yùn)行

        lsusb


        屏幕上會(huì)有一行顯示類似

        Bus 002 Device 012: ID 22b8 :xxxx Motorola xxxxxxxxxxxx

        這就是你的android手機(jī)了

    3 然后在終端運(yùn)行

       sudo gedit /etc/udev/rules.d/50-android.rules

       并編輯其中加入行: SUBSYSTEM=="usb", SYSFS{"Motorola xxxxxxxxxxxx "}=="22b8 ", MODE="0666"

    4 接著運(yùn)行

        sudo chmod a+rx /etc/udev/rules.d/50-android.rules

        sudo /etc/init.d/udev restart

    5 最后進(jìn)入android sdk的tools目錄 platform-tools 運(yùn)行

        sudo ./adb kill-server

        sudo ./adb devices

    試著重新打開eclipse,在運(yùn)行參數(shù)里選則手動(dòng)選取目標(biāo)設(shè)備,這時(shí)在Device Chooser里面應(yīng)該就可以看到正常顯示出名字的手機(jī)了。

    posted @ 2011-03-23 14:11 kangxm 閱讀(2069) | 評(píng)論 (2)編輯 收藏

            
            目前手上的項(xiàng)目需要用到memory cache,于是我選擇強(qiáng)大的Memcached。至于Memcached的強(qiáng)大先不在這里說了,
    后續(xù)有時(shí)間,我專門來介紹一下Memcached吧。今天只介紹下安裝和配置;
             直接進(jìn)入主題吧;
             1、下載
                   Memcached下載地址: http://memcached.org/  我下載的最新版本v1.45
                   Libevent下載地址:http://www.monkey.org/~provos/libevent/   我下載的版本是libevent-1.4.13-stable
                  
              因?yàn)镸emcache用到了libevent這個(gè)庫用于Socket的處理,所以需要安裝libevent

            2、先安裝libevent
                 # tar zxvf libevent-1.4.13-stable.tar.gz
                 # cd libevent-1.4.13-stable
                 # ./configure –prefix=/usr
                 # make
                 # make install
          
            3、再安裝Memcached,同時(shí)需要安裝中指定libevent的安裝位置:
                 # tar zxvf memcached-1.4.5.tar.gz
                 # cd memcached-1.4.5
                 # ./configure –with-libevent=/usr
                 # make
                 # make install
                 安裝完成后會(huì)把memcached放到 /usr/local/bin/memcached ,

            4、memcached的基本設(shè)置

                 啟動(dòng)Memcache的服務(wù)器端:
                 # /usr/local/bin/memcached -d -m 100 -u root -l 192.168.1.192 -p 12000 -c 256 -P /tmp/memcached.pid

        -d選項(xiàng)是啟動(dòng)一個(gè)守護(hù)進(jìn)程,
        -m是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB,我這里是100MB,
        -u是運(yùn)行Memcache的用戶,我這里是root,
        -l是監(jiān)聽的服務(wù)器IP地址,如果有多個(gè)地址的話,我這里指定了服務(wù)器的IP地址192.168.1.192,
        -p是設(shè)置Memcache監(jiān)聽的端口,我這里設(shè)置了12000,最好是1024以上的端口,
        -c選項(xiàng)是最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024,我這里設(shè)置了256,按照你服務(wù)器的負(fù)載量來設(shè)定,
        -P是設(shè)置保存Memcache的pid文件,我這里是保存在 /tmp/memcached.pid,

               如果要結(jié)束Memcache進(jìn)程,執(zhí)行:

               # kill  cat /tmp/memcached.pid

              也可以啟動(dòng)多個(gè)守護(hù)進(jìn)程,不過端口不能重復(fù)。

                
    posted @ 2010-04-20 12:19 kangxm 閱讀(650) | 評(píng)論 (0)編輯 收藏

    原處:http://www.javaeye.com/topic/644277

    《為什么畢業(yè)后5年同學(xué)間的差距會(huì)拉得如此巨大?》 引起大家不少的共鳴,今天繼續(xù)發(fā)布一篇?jiǎng)?lì)志的文章,首先聲明:如果你是“憤青”或“類憤青”,對(duì)不起,請你離開,我怕我的觀點(diǎn)再次傷害你那“純潔”得幾乎不識(shí)人間煙火的心靈!

       如果你想從此改變自己,那么,就花上十幾分鐘的時(shí)間,仔仔細(xì)細(xì)把這篇文章看完。如果你想改變自己的命運(yùn),那么,從現(xiàn)在就開始行動(dòng)。有時(shí)候我們之所以失 敗,99%的原因是因?yàn)檎f得太多,而行動(dòng)得太少!那1%的人或許并不聰明,或許只是小學(xué)畢業(yè),但是人家成功了,做了你的上司,那是因?yàn)槿思疑朴谟眯袆?dòng)證明 自己,而不是嘴巴。我不敢保證看了我這篇文章就一定會(huì)使你平步青云,我沒有那個(gè)本事。如果你有一天飛黃騰達(dá),也絕對(duì)與這篇文章沒有直接的關(guān)系。因?yàn)椋愕? 命運(yùn),只掌握在你自己的手中!

       同樣是打工,為什么你一個(gè)月只有2、3K,而唐駿的身價(jià)卻可以高達(dá)10億?

       或許你會(huì)反駁我,說人人都成為唐駿的概率有多大?的確,人人都成為唐駿的確不現(xiàn)實(shí),但是經(jīng)過努力,月薪達(dá)到8K、1W的總是大有人在吧?雖然不能達(dá)到大富大貴,但也不至于被女朋友看不起,付不起房貸首付款吧?

        很多人都喜歡抱怨,覺得這個(gè)世道不好。但現(xiàn)實(shí)是,在同樣世道不好的情況下,為什么有的人成功,而你卻碌碌無為?差距在哪里?怪世道不好嗎?還是怪自己沒本 事?我說這話可能你不愛聽。但是一個(gè)無法辯駁的事實(shí)是:你要是有本事,為什么月薪只有2、3K或者3、4K?事實(shí)勝于雄辯。所以,如果看到這里還想抱怨的 人,那么,也請你趁早離開。抱怨永遠(yuǎn)解決不了問題。

        職場是一個(gè)復(fù)雜的綜合體。看到別人在職場上呼風(fēng)喚雨,你認(rèn)為很愜意,是么?但是他們風(fēng)光表面的背后,又有幾個(gè)有看到他們曾經(jīng)付出的巨大艱辛?這個(gè)社會(huì)其實(shí) 是很公平的。努力不一定有回報(bào),但是如果不努力,就一定沒有回報(bào)。要怪,就怪自己投錯(cuò)胎,怪自己的老子沒本事,當(dāng)初沒有給你留下一大筆可以揮霍的資本!

       說歸說,對(duì)于那些想改變自己的朋友們來說,還是需要看清楚一些東西,有一些經(jīng)驗(yàn)也想和大家分享分享。同樣是職場人士,我也有我的經(jīng)驗(yàn)和感受。在打工的3年 里,我得到了7次加薪(同時(shí)進(jìn)入公司的員工,加薪不超過2次的員工大有人在),順利地從員工做到了總監(jiān),是公司所有員工中成長最快的。我敢肯定,在看過這 篇文章的人當(dāng)中,肯定有人比我更優(yōu)秀。但是對(duì)于那些更渴望得到幫助的朋友們來說,我還是希望把自己的經(jīng)驗(yàn)寫出來,與大家分享。

    我自己寫了一篇文章,叫《決定前程的8件事,你做到了幾件?》在這里整理出來,希望能對(duì)大家有所幫助。

    一、一定要清楚自己未來的目標(biāo)是什么
    很多人把職場想得太美好,其實(shí)不然。如果你沒有規(guī)劃好,你就會(huì)難免遇到各種各樣的問題:工作不開心;沒有前進(jìn)的動(dòng)力;工作不是自己想像的那么好;自己的才能無法發(fā)揮;看到以前的同學(xué)待遇如何如何,便受不了刺激,急切地想跳槽;當(dāng)初為了生存而找的工作,根本就不適合自己……
    這是幾乎所有初入職場的朋友都會(huì)面臨的問題。而這些問題通常會(huì)在步入職場的1-3年之內(nèi)最明顯(3年之后之所以不明顯,是因?yàn)槟阋呀?jīng)被現(xiàn)實(shí)折磨得 太久了,已經(jīng)被種種不平現(xiàn)象同化了,因此也就習(xí)慣了。你曾經(jīng)的種種抱負(fù)被現(xiàn)實(shí)碾得粉碎,于是,你也從一個(gè)志向遠(yuǎn)大的年輕人一下子變成了一個(gè)碌碌無為、甘于 平庸、成天為了生計(jì)而奔走的普通打工者)。

       如果不及早解決這些問題,那么,你就會(huì)荒廢這3年的時(shí)間(有的人可能會(huì)更長),而對(duì)于一個(gè)職場新人來說,這3年至關(guān)重要,是鍛煉能力、積累資本的黃金3 年!一旦錯(cuò)過,則要花費(fèi)更多的時(shí)間,從頭再來,重新彌補(bǔ)!更有甚者,可能一輩子都無法彌補(bǔ)!這絕對(duì)不是危言聳聽!因此,如果你的職場年齡還沒有超過3年, 恭喜你,還有改變命運(yùn)的機(jī)會(huì)。而一旦超過了3年,那么,你的每一次改變,都將付出巨大的代價(jià)!

       為什么要清楚自己的目標(biāo)?因?yàn)椋辛四繕?biāo),才有行動(dòng)的指南。知道自己想干什么,喜歡干什么,這才是你前進(jìn)的最終動(dòng)力。工作不開心、動(dòng)力不足、盲目跳槽的最 根本原因是職業(yè)目標(biāo)不清晰。沒有目標(biāo),便沒有了追求,于是,所有的行動(dòng)只是為了掙一口飯吃。你根本沒有考慮過自己的未來應(yīng)該端什么飯碗。
    或許你在30歲之前還有揮霍的資本,因?yàn)槟贻p嘛,做什么都不怕。連廣告上都說了,“30歲之前,有什么好怕的?!”而一旦過了30歲,你走的每 一步都必須要慎之又慎,因?yàn)椋耗阋Y(jié)婚、你要養(yǎng)活老婆孩子、你要供房貸、你要供養(yǎng)年邁的父母、孩子大了還要上學(xué)、父母年邁了需要照顧……等等等等,所有的 這些責(zé)任,都要你來承擔(dān)。如果沒有規(guī)劃,一旦出現(xiàn)問題,你只能自亂陣腳。

       人生的職業(yè)發(fā)展如同品牌塑造一樣,只不過你的產(chǎn)品就是你自己。你自己的發(fā)展目標(biāo),也就是你人生的品牌目標(biāo)。有了目標(biāo),就要考慮該怎么走。每走一步,都應(yīng)該 離目標(biāo)更近,而不是更遠(yuǎn)。所以,你每做一個(gè)決定的時(shí)候,要衡量這個(gè)決定對(duì)不對(duì),唯一的標(biāo)準(zhǔn)就是:它是不是能夠幫助你離目標(biāo)更近?如果不是,那么,趕緊住 手,因?yàn)椋阕叩穆菲x了你的目標(biāo)!再走下去,只能錯(cuò)得更離譜!

       對(duì)于人生目標(biāo),涉及到職業(yè)生涯規(guī)劃的問題。這是一個(gè)老話題,很多人以為自己很了解了,其實(shí)卻遠(yuǎn)不是那么回事。大家可以看一些相關(guān)書籍,但在中國,此類書籍 的最大問題就是說教性比較強(qiáng),實(shí)用性非常差!很多人看了書之后依然一頭霧水,不知所措,看了之后反而更糊涂。我的意見是,最好還是找一些專門的機(jī)構(gòu)咨詢一 下。
    注意:是咨詢,不是測評(píng)。二者的區(qū)別在于,咨詢的意義在于“為客戶提供可應(yīng)用性的解決方案”,而測評(píng)則僅僅局限于“幫助你認(rèn)識(shí)自己”,至于怎么 做,怎樣行動(dòng)才能更接近自己的目標(biāo),不知道!因?yàn)闇y評(píng)的人都是專家,而國內(nèi)的專家都是做研究的,沒有實(shí)戰(zhàn)經(jīng)驗(yàn),甚至對(duì)職場升遷是怎么回事都不太清楚,怎么 可能指導(dǎo)你做實(shí)戰(zhàn)規(guī)劃?建議大家去做一下職業(yè)生涯規(guī)劃。如果現(xiàn)在不解決,恐怕未來3年你都會(huì)白白浪費(fèi),更有可能因此而毀了你的一生!
    記住:有了規(guī)劃,不一定能夠成功;但沒有規(guī)劃,一定不會(huì)成功!

    二、能力固然重要,但并不能代表全部

      這里所說的能力,是指專業(yè)技能。步入職場你會(huì)發(fā)現(xiàn),能力其實(shí)并沒有你想像的那么重要,它并不是是步步高升的全部資本。你會(huì)發(fā)現(xiàn)一個(gè)能力不太強(qiáng)的人做了你的 上司,只因?yàn)樗谶@個(gè)公司干了10年——這說明“資歷”是你高升的本錢(這種現(xiàn)象,在國有企業(yè)和政府機(jī)構(gòu)里特別明顯,因此,在國企工作的朋友和公務(wù)員同志 要注意了);有時(shí)候你會(huì)發(fā)現(xiàn)能力并不怎么強(qiáng),但是與老板關(guān)系非常好的人通常能夠得到提拔——這說明“關(guān)系”也是本錢。在我原先工作的公司,有兩個(gè)特別明顯 的例子。

        一 個(gè)有著豐富工作經(jīng)驗(yàn)的男士,跳槽來到公司,能力也特別強(qiáng),但就是與同事處理不好關(guān)系,自認(rèn)為自己非常牛,喜歡主動(dòng)當(dāng)別人的“導(dǎo)師”,動(dòng)不動(dòng)就對(duì)別人的工作 指手畫腳,頂頭上司非常討厭他;而同時(shí)進(jìn)入公司的另外一位女士,能力不是特別強(qiáng),但是非常踏實(shí)、勤奮、與其他同事相處得也很好,能夠顧全大局。最后試用期 結(jié)束時(shí),那位女士得到了公司的認(rèn)可,而那位男士則收到了公司的辭退通知。

       在職場上,一定要對(duì)職場有清醒的認(rèn)識(shí),不要生活在夢幻當(dāng)中,不要太理想化,不要標(biāo)新立異,不要恃才傲物,不要認(rèn)為有能力就可以走遍天下。專業(yè)技能固然重 要,但是職場發(fā)展看的是一個(gè)人的綜合素質(zhì)。綜合素質(zhì)高的人,才是職場發(fā)展的“潛力股”。這些綜合素質(zhì),包括溝通能力、人際關(guān)系能力、團(tuán)隊(duì)合作能力、管理能 力、工作態(tài)度及敬業(yè)精神等各種“軟實(shí)力”。

        對(duì)于有些朋友而言,可能會(huì)對(duì)這些“軟實(shí)力”不屑一顧。很多人會(huì)說,如果老板喜歡愛拍馬屁的人,難道我就要委屈自己,學(xué)著去拍馬屁?很不幸,我會(huì)告訴你,答 案是肯定的,你一定要學(xué)會(huì)拍馬屁,否則吃虧的是自己。但要聲明的是,我不是教你詐。中國有句成語,叫外圓內(nèi)方,用在人際交往上,就是說你與人相處要學(xué)會(huì)妥 善處理各種關(guān)系,但不可因此而失去了內(nèi)心的準(zhǔn)則,否則就變質(zhì)了。尤其在中國這種注重人情的社會(huì),這種人際交往的能力一定要好好練練。
    如果有時(shí)間,看一下《厚黑學(xué)》,了解一下社會(huì)現(xiàn)實(shí),切忌不可因此而迷失了自己。

    三、要手足夠的“亮劍”資本

        有的大學(xué)生經(jīng)常會(huì)跟我說,我畢業(yè)之后一定要找到一份月薪多少多少的工作,爭取做到什么什么職位。這時(shí)候我總是會(huì)耐心聽完他們的“遠(yuǎn)大藍(lán)圖”,然后問一句:“你憑什么達(dá)到你的目標(biāo)?你的資本是什么?”然后他就會(huì)啞口無言。

        我相信讀過這篇文章的人也會(huì)和這位大學(xué)生一樣,有著自己的偉大抱負(fù),但是大學(xué)四年下來,你有沒有想到,要實(shí)現(xiàn)這些目標(biāo),你的資本是什么?對(duì)于很多已經(jīng)身在職場的朋友而言,你晉升的資本又是什么?

       人生在發(fā)展過程中,很多時(shí)候都需要毫不猶豫地向別人展示自己的實(shí)力,要敢于展示,善于展示,這就是“亮劍”。因?yàn)檫@年頭,酒香也怕巷子深,是金子未必會(huì)發(fā) 光。相反,發(fā)光的倒是那些碎玻璃、爛瓶子。中國什么都缺,就是不缺人。茫茫人海,如果你一直都謙虛地默默無聞,那么,你就大錯(cuò)特錯(cuò)了。

       既然具備了“亮劍”的意識(shí),那么,下一步你就要考慮到亮什么劍:我到底拿什么資本給人家看?對(duì)于職場上的朋友而言,你“亮劍”的資本又在哪里?你的業(yè)績提 升了嗎?你的能力提升了嗎?你在一年內(nèi)看過多少本對(duì)自己的職業(yè)有益的書籍?你參加過幾次培訓(xùn)班來為自己充電?如果沒有,你又憑什么讓老板為你加工資?靠抱 怨?你肯定會(huì)提前被職場淘汰出局!


    四、慎重對(duì)待第一份工作

    這一觀點(diǎn),對(duì)于大學(xué)生來說,更有意義。
    現(xiàn)在整個(gè)社會(huì)、媒體、專家等等各種單位都一直在鼓吹“先就業(yè),再擇業(yè)”。這種論調(diào)不是今年就有,而是多好多年前就出現(xiàn)了,并且屢屢出現(xiàn),不絕于耳。相信當(dāng)年我們大學(xué)畢業(yè)時(shí)候,也會(huì)有很多人相信了這一點(diǎn)吧?管它呢,騎驢找馬,先找份工作掙錢填飽肚子再說!

    但是根據(jù)本人自身的經(jīng)驗(yàn)及職場發(fā)展的現(xiàn)實(shí)情況來看,本人絕對(duì)不贊同這種說法。相信現(xiàn)在在職場上發(fā)展不順的朋友,多半也和第一份工作有關(guān)系吧?俗話說,“男怕入錯(cuò)行,女怕嫁錯(cuò)郎。”第一步錯(cuò)了,以后就會(huì)經(jīng)常犯錯(cuò)。正所謂一步錯(cuò),步步錯(cuò)。

    為什么第一分工作這么重要呢?原因有三:

    1、先入為主的觀念影響。
    具體是指,先聽進(jìn)去的話或先獲得的印象往往在頭腦中占有主導(dǎo)地位,以后再遇到不同的意見時(shí),就不容易接受。舉個(gè)最簡單的例子:在你的頭腦印象中, 諾基亞已經(jīng)是手機(jī)的代名詞。如果有一天諾基亞生產(chǎn)出了一種“諾基亞牌電腦”,你的心里是什么感覺?非常不對(duì)勁對(duì)不對(duì)?這主是先入為主現(xiàn)象。

    我原先有一個(gè)同事,曾經(jīng)在海爾工作過,她用的是海爾的手機(jī),功能也非常不錯(cuò),但她總是說要換一部手機(jī),我問她原因,她說,兜里裝著海爾的手機(jī),總 感覺像裝了一個(gè)大冰箱,非常不舒服。為什么?先入為主唄!不要小看這一現(xiàn)象,其實(shí)對(duì)人的潛意識(shí)影響非常大。海爾的手機(jī)和電腦等IT產(chǎn)品賣得不好,相當(dāng)一部 分是因?yàn)橄热霝橹鳎捍蠹移毡檎J(rèn)為海爾是家電的代名詞,而不是IT的代名詞。

    對(duì)于求職的大學(xué)生來說,這一觀念同樣會(huì)影響你以后的發(fā)展。你的第一份工作會(huì)對(duì)你以后的工作產(chǎn)生影響,你跳槽時(shí),你的新雇主也會(huì)通過你的第一份工作 經(jīng)驗(yàn)來判斷你是否能夠勝任這份工作。曾經(jīng)有一個(gè)大學(xué)生,畢業(yè)之后想做策劃,就找了一家廣告公司。剛進(jìn)公司時(shí),因?yàn)槲墓P不錯(cuò),被安排到了文案的位子上。而與 他同時(shí)進(jìn)去的另外一個(gè)人,恰恰因?yàn)槲墓P不好而被安排到了策劃的位子上。后來她屢次想轉(zhuǎn)行做策劃,但都是因?yàn)榍耙环莨ぷ鹘?jīng)驗(yàn)的影響,而始終沒有得到轉(zhuǎn)行的機(jī) 會(huì)。

    2、職場中不允許從頭再來。

    如果公司招聘的是有幾年工作經(jīng)驗(yàn)的老員工,一定要求是“相關(guān)經(jīng)驗(yàn)”!這一點(diǎn)至關(guān)重要!因?yàn)檫@樣的員工一般不需要培訓(xùn),可以直接上崗,會(huì)很快為公司 帶來最大的效益。如果是工作幾年以后再打算轉(zhuǎn)行的應(yīng)聘人員,一般不會(huì)受到重視,一是不會(huì)給公司直接帶來效益,二是培訓(xùn)起來也比較困難,思維已經(jīng)固化。與其 這樣,倒不如招一名應(yīng)屆生,白紙一張,可塑性強(qiáng),發(fā)展起來潛力更大。

    所以,一旦有了工作經(jīng)驗(yàn)之后,再想轉(zhuǎn)行從頭再來,難度相當(dāng)大。除非你認(rèn)識(shí)公司的高層領(lǐng)導(dǎo),可以得到一個(gè)機(jī)會(huì),否則,很難。

    3、時(shí)間成本不允許。

    步入職場的前三年,是一個(gè)人職業(yè)成長的最重要、最關(guān)鍵的時(shí)期。如果你這時(shí)候還把工作的重點(diǎn)放在騎驢找馬式的轉(zhuǎn)行上,則會(huì)浪費(fèi)你最寶貴的青春,你的成長也因此比其他人慢一步,而很多晉升的機(jī)會(huì)將因此而失去。
    所以,對(duì)待第一份工作,一定要慎重。找工作就像結(jié)婚,情愿不結(jié),絕不能亂結(jié)。
    如果現(xiàn)在你剛剛步入職場還不到3年,勸你趁早做一個(gè)職業(yè)規(guī)劃,亡羊補(bǔ)牢,尤未為晚。一旦你結(jié)婚了買房子了,你再想彌補(bǔ)都已經(jīng)晚了!

    五、要保持一種“空杯心態(tài)”

    給大家講一個(gè)故事。古時(shí)候有一個(gè)佛學(xué)造詣很深的人,聽說某個(gè)寺廟里有位德高望重的老禪師,便去拜訪。老禪師的徒弟接待他時(shí),他態(tài)度傲慢,心想:我 是佛學(xué)造詣很深的人,你算老幾?后來老禪師又十分恭敬地接待了他,并為他沏茶。可在倒水時(shí),明明杯子已經(jīng)滿了,老禪師還不停地倒。他不解地問:“大師,為 什么杯子已經(jīng)滿了,還要往里倒?”大師說:“是啊,既然已滿了,干嘛還要倒呢?”

    禪師的意思是,既然你已經(jīng)很有學(xué)問了,干嘛還要到我這里求教?這就是“空杯心態(tài)”的故事哲理。它最直接的含義就是一個(gè)裝滿水的杯子很難接納新東 西,要將心里的“杯子”倒空,將自己所重視、在乎的很多東西以及曾經(jīng)輝煌的過去從心態(tài)上徹底了結(jié)清空,只有將心倒空了,才會(huì)有外在的松手,才能擁有更大的 成功。這是每一個(gè)想在職場發(fā)展的人所必須擁有的最重要的心態(tài)。它告訴我們一個(gè)道理:做事的前提是先要有好心態(tài)。如果想學(xué)到更多的學(xué)問,先要把自己想象成 “一個(gè)空著的杯子”,而不是驕傲自滿。

    我見過很多的大學(xué)畢業(yè)生,剛進(jìn)入公司時(shí)常常處處吹牛,說自己在學(xué)校如何如何,本來可以找到更好的工作,迫不得已才來到了這里等等之類的話,好像這 家公司委屈了自己。在這里提醒一下那些即將步入職場的大學(xué)生:這種心態(tài)千萬要不得!不要認(rèn)為自己很牛。還是那句你不愛聽的話:中國什么都缺,就是不缺人! 話又說回來,你要是這么牛,為什么不像比爾?蓋茨、戴爾、喬布斯那樣,大學(xué)沒畢業(yè)就退學(xué)去創(chuàng)辦一家世界級(jí)的大企業(yè)?火車不是推的,牛皮不是吹的。
    你要是有本事,就用事實(shí)證明給人家看,而不是成天抱怨!

    對(duì)于身在職場的朋友而言,這一心態(tài)同樣重要。中國有一個(gè)詞,叫“虛懷若谷”。我們都知道,優(yōu)秀的人有極高的素養(yǎng),甚至是虛懷若谷,他們都有一個(gè)能 包容一切的胸懷,有了這樣的胸懷,你在職場上就會(huì)獲得別人的尊重,就會(huì)獲得更多的發(fā)展機(jī)會(huì)。類似的詞還有“大智若愚”“大巧若拙”等等,不多說,自己去體 會(huì)。

    六、要懂一點(diǎn)做人的常識(shí)
    職場就像一個(gè)大熔爐。在職場中,不僅僅是要掙一碗飯吃,更重要的是學(xué)會(huì)做人的道理。如果連最起碼的道理都不懂,你不僅得不到別人的尊重,更會(huì)失去更多的發(fā)展機(jī)會(huì)。因?yàn)椋谥袊穗H關(guān)系也是生產(chǎn)力。中國有句古話:得道多助,失道寡助。

    我見過很多人,雖然已經(jīng)工作多年,但對(duì)于做人,卻連一點(diǎn)最基本的常識(shí)都不懂。做人的道理萬萬千,但其中最重要的,莫過于以下三條:

    1、嚴(yán)于律己,寬以待人。
    職場不同于生活。雖然職場上同事之間的相互關(guān)系表面上會(huì)比較好,但你總會(huì)感覺到缺點(diǎn)兒什么。非常明顯的一點(diǎn),就是大家都在相互利用,人與人之間難免會(huì)因?yàn)槔骊P(guān)系而鬧得不愉快。這時(shí)候,你若是錙銖必較,勢必引起同事之間的不愉快。
    在這種情況下,為避免糾紛,同時(shí)也為了贏得他人的尊重,你要學(xué)會(huì)大度一些,容忍一些。出現(xiàn)問題時(shí),首先想想是不是自己出了問題,而不是一出現(xiàn)問題就去找別人的責(zé)任(長此以往,你的心態(tài)就會(huì)變得非常不平衡,因此也難以容人了)。
    嚴(yán)于律己,寬以待人,是十分必要的。長期下去,你會(huì)積累很多的人脈,會(huì)得到大家的尊重;而你需要幫助時(shí),大家也樂意伸手。
    2、學(xué)會(huì)傾聽。
    無論什么時(shí)候,傾聽都顯示出一個(gè)人的職業(yè)素養(yǎng)。與別人交談時(shí),一定要記住等對(duì)方說完話時(shí)再發(fā)表意見,切不可中途插話或者打斷他人。通過這種方式,大家都樂意和你交往,同樣也會(huì)有助于樹立你個(gè)人在大家心目中的形象。
    3、誠實(shí)守信。
    職業(yè)中固然處處充滿了相互利用、利益至上的現(xiàn)象,在這種情況下,誠實(shí)守信仍然不失為一種傳統(tǒng)美德。誠信同樣可以帶來效益。只要你誠實(shí)守信,長此以 往,大家都會(huì)對(duì)你形成一種良好的印象,都愿意和你交往。而那種兩面三刀、當(dāng)面一套背后一套的人,固然可以占一點(diǎn)小便宜,但要想成就大事業(yè),誠實(shí)守信的基本 原則絕對(duì)不能丟。
    七、要學(xué)會(huì)遵守游戲規(guī)則
    我為什么在文章一開頭就提醒“憤青”或者“類憤青”們不要看這篇文章?
    因?yàn)樗麄兌喟胧欠攀幉涣b、不會(huì)遵守游戲規(guī)則的主兒!很多人都會(huì)感覺到,在職場上發(fā)展,不僅會(huì)受到各種約束,而且處處都充滿了不公平現(xiàn)象。比如上班 遲到老板會(huì)扣你工資,但你加班的時(shí)候卻從來沒有拿過加班工資。這是最常見的一種現(xiàn)象,其他不公平的現(xiàn)象也比比皆是,這里就不多就了,大家都有體會(huì)。
    在這個(gè)世界上,不要奢求公平。那只是一種烏托邦式的理想,從來都不存在于現(xiàn)實(shí)社會(huì)中。
    員工和老板之間的關(guān)系,就好像是一場游戲。是游戲就會(huì)有游戲規(guī)劃,否則,游戲就玩不下去。但是,游戲規(guī)則是誰制定的呢?當(dāng)然是老板,各種利益也偏向老板!身在職場的你,一開始看不慣這種現(xiàn)象,是很正常的,因?yàn)槟愠跎媛殘觯举|(zhì)上還是比較純潔的。
    但你一定要學(xué)會(huì)慢慢接受這種游戲規(guī)則。不要試圖改變這種規(guī)則,因?yàn)樵诶习迕媲埃銢]有太多的話語權(quán)。說得再難聽些,你只是一個(gè)打工的,混口飯吃,給你吃就不錯(cuò)了,還嫌飯涼?如果不想做,可以離開。還是那句話:中國什么都缺,就是不缺人。
    記住這句話:“如果你不是游戲規(guī)則的制定者,你的選擇只有兩條:要么屈從,要么離開!”
    八、機(jī)會(huì)只垂青有準(zhǔn)備的人
    無論你再怎么抱怨,再怎么不開心,飯還是要吃的,覺還是要睡的,工作還是要做的,未來的事情永遠(yuǎn)只屬于自己的。買房子也好,娶老婆也罷,壓力只有 自己扛,老板不會(huì)為你操任何心。與其有時(shí)間去抱怨,但不如踏踏實(shí)實(shí)靜下心來,好好提升自己的基本功,用事實(shí)證明自己的本事,讓別人對(duì)你刮目相看,萬不可因 為自己的書生意氣而自做一個(gè)自毀前程的“憤青”。
    當(dāng)然,你的準(zhǔn)備是多方面的,除了專業(yè)技能外,其他的輔助技能也是非常必要的,比如溝通能力、人際關(guān)系處理能力、管理能力等等。當(dāng)然,更重要的是 要為自己的未來做一個(gè)規(guī)劃,清楚地知道自己的目標(biāo)是什么,應(yīng)該怎么努力才能實(shí)現(xiàn)。適當(dāng)?shù)臅r(shí)候也要充充電,不要舍不得那半個(gè)月的工資,這也算是為自己的未來 進(jìn)行投資,有什么舍不得的呢?如果你現(xiàn)在不學(xué)會(huì)“舍”,以后將永遠(yuǎn)也“得”不到。
    有時(shí)候,你之所以發(fā)展得不好,不是因?yàn)闆]有機(jī)遇,而是因?yàn)槟銢]有準(zhǔn)備好,導(dǎo)致機(jī)遇與你擦肩而過。這個(gè)社會(huì)就是這樣,再怎么不合理,再怎么不公 平,但是發(fā)展機(jī)遇是時(shí)時(shí)都會(huì)面臨的,只看你有沒有準(zhǔn)備好。你要是真的練就了一身令人刮目相看的真本事,說不定明天就有人請你做某世界500強(qiáng)的總裁也不一 定呢。
    以上只是本人做HR多年的經(jīng)驗(yàn)積累,希望對(duì)大家有所幫助。作為過來人,我真誠地希望在職的朋友們及即將就業(yè)的大學(xué)生們也能夠以一種“空杯心態(tài)” 看待這篇文章。有時(shí)候,過來人的經(jīng)驗(yàn)是非常有價(jià)值的,那是他們用時(shí)間和金錢換來的血汗教訓(xùn)。有的人偏偏不信這一套,認(rèn)為只有自己親自體會(huì)過,才能知道是什 么滋味,別人的經(jīng)驗(yàn)只是別人的,和自己無關(guān)。如果你這樣想,那我也沒有辦法。我也要有一種寬容的心態(tài),冷靜看待那些“不見棺材不掉淚,不撞南墻不回頭”的 “人才”,不是嗎?參加一下培訓(xùn),適當(dāng)充一下電,為未來做更好、更完善的準(zhǔn)備,才是積極的人生態(tài)度。記住:抱怨永遠(yuǎn)解決不了問題!)

    posted @ 2010-04-16 12:24 kangxm 閱讀(507) | 評(píng)論 (0)編輯 收藏

           假設(shè)我們現(xiàn)在有user和org兩張表:
    1、user用戶表 字段包含:id、name、orgId 其中orgId標(biāo)示該用戶所屬的組織
    2、org組織表   字段包含:id、name
    兩表之間的關(guān)系很簡單,一個(gè)組織下會(huì)擁有多個(gè)用戶,一個(gè)用戶屬于某個(gè)組織。

             在解析之前先普及一下數(shù)據(jù)庫空值(null)的概念:
    有很多時(shí)候我們都能碰到某表中某字段值為空的情況,空值不等同于字符串中的空格、空串
    也不等同于數(shù)字類型的0,所以,一般我們用IS NULL 關(guān)鍵字來檢索有空值字段的記錄。而不是用!=、<>這些判斷符。

            接下來,我們給示例庫表中做上一些測試數(shù)據(jù),如下圖:
                                 

            有了這些數(shù)據(jù),咱們就可以進(jìn)入正題啦:
    一、左連接、右連接
            A Left join(左連接)優(yōu)先解出左表中所有的記錄,包含右表中沒有匹配到得記錄。
            A Right join(右連接)優(yōu)先解出右表中所有的記錄,包含左表中沒有匹配到得記錄。

    左右連接是相互對(duì)應(yīng)的,所以在這里一并解釋。
    羅嗦一句如何區(qū)分左表和右表:
            在JOIN的左邊出現(xiàn)的表叫左表,在JOIN的右邊出現(xiàn)的表叫右表
    具體體現(xiàn)在SQL語句上即:(以左連接為例)
            左連接語句:SELECT user.name,org.name FROM user LEFT JOIN org ON  user.orgId = org.id
            右鏈接語句:SELECT user.name,org.name FROM user RIGHT JOIN org ON  user.orgId = org.id
    顯而易見,該SQL中,user為左表、org為右表
    下面我們來看看這兩個(gè)語句分別執(zhí)行后的效果:
                                       
            為了更好的看出左右連接的效果,我們再來看看內(nèi)連接查詢出來的效果
            內(nèi)連接:SELECT user.name,org.name FROM user JOIN org ON  user.orgId = org.id
    內(nèi)連接語句執(zhí)行后的效果:
                                                        
            很明顯:
    內(nèi)連接與左連接相比,檢索結(jié)果集中漏掉了user表的user3數(shù)據(jù)
    內(nèi)連接與右連接相比,檢索結(jié)果集中漏掉了org表的org4數(shù)據(jù)

    posted @ 2010-03-14 18:25 kangxm 閱讀(674) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 久久青草免费91线频观看站街| 亚洲精品国产精品乱码不卞| 白白色免费在线视频| 亚洲视频2020| 亚洲精品视频久久久| 在线观看免费为成年视频| 国产精品免费大片| 国产免费A∨在线播放| 国产精品亚洲五月天高清| 亚洲天堂2016| 久久精品国产亚洲av高清漫画| 国产亚洲精品成人a v小说| 国产一级特黄高清免费大片| 国产成人午夜精品免费视频| 色欲色香天天天综合网站免费| 福利免费在线观看| 成人精品综合免费视频| 美女被羞羞网站免费下载| 亚洲熟妇AV乱码在线观看| 亚洲一区精品视频在线| 亚洲精品在线播放视频| 亚洲一区二区三区电影| 亚洲国产日韩一区高清在线| 国产亚洲高清不卡在线观看| 中文字幕亚洲无线码a| 国产成人精品亚洲精品| 亚洲国产精品成人一区| 免费一区二区三区四区五区| 四虎永久免费地址在线网站| 在线精品免费视频无码的| 在线免费观看国产视频| 精品免费国产一区二区三区 | 亚洲精品尤物yw在线影院| 国产色爽免费视频| 在线免费观看韩国a视频| 免费很黄很色裸乳在线观看| 又粗又大又长又爽免费视频| 四虎精品亚洲一区二区三区| 亚洲av成人一区二区三区在线观看 | 国产午夜无码视频免费网站| 国产99视频精品免费视频7|