todayx.org
          todayx.org
          posts - 39,comments - 60,trackbacks - 0

          時代在進步,瀏覽器也在進步,做WPO(性能優(yōu)化)工作得跟得上形勢。

           

          《高 性能網(wǎng)站建設(shè) High Performance Web Sites》英文版2007年推出,直到今天,都被奉為經(jīng)典。書寫得很好,但這本書畢竟是2007年,當時還在IE4一統(tǒng)天下的時代,一些書中的內(nèi)容已經(jīng) 不符合現(xiàn)在的瀏覽器進化情況。舉個例子:今天的瀏覽器緩存已經(jīng)大大增加;瀏覽器并行下載數(shù)已經(jīng)從原來的2個提升到4個、8個甚至16個;IIS7.0已經(jīng) 考慮到Etags的消極作用,不需再設(shè)置。

           

          比較大的一個變化,我認為是JS腳本阻塞的情況發(fā)生了變化。Steve也留意到這一點,在他2010年初的博客中,也提到了新瀏覽器下對JS阻塞已經(jīng)做出了一些努力。下面的瀑布圖是2007年大多數(shù)瀏覽器的加載JS組件的情況:

          上圖加載了6個文件:

          • 1.  html文檔
          • 2. js腳本,下載2秒,執(zhí)行2秒(下載和執(zhí)行都發(fā)生了阻塞情況)
          • 3. js腳本,下載2秒,執(zhí)行2秒(下載和執(zhí)行都發(fā)生了阻塞情況)
          • 4. 圖片文件(三個組件并行下載)
          • 5. css腳本(三個組件并行下載)
          • 4. iframe(三個組件并行下載)

          上述老瀏覽器的情況,js腳本無論在下載還是執(zhí)行時,都發(fā)生了阻塞。

           

          那么我們看看新瀏覽器(以ie8為例)情況下,情況有沒有改善呢?

          可以看出,兩個js腳本和一個css樣式表文件并行下載了,但js腳本執(zhí)行時,還是發(fā)生了阻塞。js腳本執(zhí)行的阻塞,似乎是無法避免的,因為js腳本經(jīng)常會生成或修改HTML組件,必須等js執(zhí)行完后,頁面才能正常生成。

          雖 然js腳本執(zhí)行阻塞還在發(fā)生,但js腳本下載阻塞似乎已經(jīng)解決了。事實的確如此,IE8下,可以和JS腳本并行下載的包括JS腳本、CSS樣式表,但不包 括圖片。在firefox 3.6版本以上,chrome 4.0以上的版本,可以和JS腳本并行下載的包括JS腳本、CSS樣式表、圖片。下面表描述了瀏覽器對JS腳本并行下載兼容情況:

           

           

          瀏覽器在不斷進步,很多以前奉為金科玉律的WPO原則,可能會輕松的整合在瀏覽器中。前段優(yōu)化的很多傳統(tǒng)工作,會變得越來越輕松。不過隨著互聯(lián)網(wǎng)媒體樣式的演進以及移動互聯(lián)網(wǎng)的重要性增加,WPO工作頁面面臨新挑戰(zhàn)。

           

          剛解放那陣兒,有句順口溜“三天不學(xué)習(xí),趕不上劉少奇”。 借用一下,: )  三天不學(xué)習(xí),趕不上瀏覽器。


          轉(zhuǎn)自:iteye

          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-01-13 13:33 todayx.org 閱讀(1135) | 評論 (1)編輯 收藏

          到了年末,又是一年一度寫 “年終總結(jié)” 的時候了。浪子正坐在辦公室里瞎呆著:究竟在2011年里,自己做些了什么? 又真正能得到了些什么呢? 左思右想,真的是毫無頭緒,反正又不是讀書寫作文的時候,寫好了也不一定要交給老板看。浪子終于把心一橫:好!就寫下自己的經(jīng)歷與教訓(xùn),真正為自己的將來 打算一下。

          年終總結(jié)

            從年少無知到心思細密,從一無是處的待業(yè)青年到如今知名軟件公司的副總,當中經(jīng)歷了無數(shù)的跌倒,又從失敗和掙扎中爬起來。總結(jié)概括,本人覺得沒有家庭背景,沒有政治地位,沒有金錢輔助的人想得到成功,必須經(jīng)歷以下5個階段:

            一、明確目標,腳踏實地,從低做起

            世上沒有不勞而獲的事情,要想從一個尋常的老百姓開始做起,得到廣闊的發(fā)展空間,必須比其他人加入多倍的努力。做IT行業(yè)也是如此,無論你的理 想是從事技術(shù)的開發(fā),還是從事業(yè)務(wù)的管理,都必須從低做起,腳踏實地工作。在工作的過程中了解行業(yè)的現(xiàn)狀,業(yè)務(wù)的動向,客戶的需求,未來的方向,并為自己 定立一個長期的發(fā)展目標。只有有理想、有目標、有方向的人才不會在激烈的社會競爭中迷途。

          寫到這里,不禁讓浪子想起一個故事:古時候,一位學(xué)醫(yī)的年輕人為了研制一種毒藥的解藥配方,不禁以身試毒,然后到深山里采集山藥,以研制配方。越往 山里走,他越發(fā)現(xiàn)有很多山藥都有著其獨特的功能,當他把藥采回藥館研究的時候,卻忘記了為自己的毒藥尋找配方的事,最后不幸毒發(fā)身亡。

          其實對初入社會的人來說也是如此,很多人面對這個復(fù)雜的社會會感到迷途,有時候可能會被一些眼前的利益所蒙騙而忘記了自己的目標。雖然每個人的背 景,現(xiàn)狀都不相同,每個人都有著自己的目標和抱負。但有一點是一樣的,只有堅持自己目標,努力奮斗的人才會得到成功,反之,那些隨波逐流,半途而廢的人最 終只會面對失敗。

          想到這里,浪子臉上露出了一絲微笑,他似乎有些自喜,自喜自己是個有抱負,有目標的人。自喜他能面向著目標,一如既往地奮斗,雖然道路是坎坷的,但他相信,只要他能繼續(xù)努力,總會有成功的一天。這時候,浪子拿起了筆,繼續(xù)寫到:

            二、發(fā)掘優(yōu)點,提升能力

            安于現(xiàn)狀的人能享受知足所帶來的快樂,但永遠也不能突出自己特點。想在這茫茫的人海中突出自己,就應(yīng)該找到自己的長處,發(fā)現(xiàn)自己的優(yōu)勢,為自己 爭取更廣闊的發(fā)展空間。要是你口舌靈利,反應(yīng)敏捷,能快速地洞察市場的走勢,那你就應(yīng)該把握機會,在大型的項目中好好地表現(xiàn)自己。要是你思維明銳,心思細 密,能完成復(fù)雜的開發(fā)過程,那就應(yīng)該盡量爭取難度大,回報高的新型技術(shù)項目,在開發(fā)過程中吸收學(xué)習(xí)嶄新的開發(fā)技術(shù)。

          這個階段真讓浪子發(fā)起一段感慨:想當年,自己也是從一個小小的程序員出身,剛出來的時候什么都不懂,在工作過程中的確學(xué)到了不少的東西。但做久了,工作也只是千篇一律,用來用去都是相似的東西,難以再從中再領(lǐng)略到什么新知識。

          但只要記住自己的目標,那就不再是 “為了工作而工作,為了金錢而工作”,工作只被視作是一種過程,一種實現(xiàn)目標的過程。在工作過程你可以了解到要做好工作需要一些什么,要表現(xiàn)自己還需要些什么,要體現(xiàn)自己比別人優(yōu)勝的地方必須先做到些什么。

          雖然,短期的學(xué)習(xí)并不能直接體現(xiàn)個人的優(yōu)點,但經(jīng)過長期的積累,你比別人優(yōu)勝的地方就能逐步的展現(xiàn)。

          但是光有優(yōu)點還不夠,還需要找到表現(xiàn)個人能力的機會:

             三、主動爭取機會,把握每個能得到發(fā)展的機遇

            想要得到成功必須記住:機會不是等著別人給的,而是自己爭取回來的!如果每天只坐在那里,等著上級給你機會,那你的理想最終將會變成泡影。要想 得到成功就必須變被動為主動,不是等著機會的到來,而是在自己有能力,有實力的時候主動地去爭取機會。世上沒有免費的午餐,有時候,你必須放棄面前的一些 東西,才能得到機會去發(fā)展,但只要你對自己有信心,在機會到來的時候就應(yīng)該大膽地嘗試,放棄面前的一些小利益,以爭取更大的回報。

          浪子露出了一絲苦笑,想著自己以前經(jīng)常被別人笑說成 “跳槽冠軍”,兩年期間跳了好幾家大公司,但還是感到不滿意。其實爭取機會并不是慫恿各位去跳槽,哪家公司高薪就跳哪去,而是說應(yīng)該嘗試尋找一個更能發(fā)揮自己能力的地方。

          想想哪一家公司的老板會想旗下的企業(yè)會有大型的人事變動呢?想要成功,人就要有逆向思維:如果我是老板,我希望自己的公司是怎么樣的呢?我的希望是:企業(yè)能長期處于一個穩(wěn)定的狀態(tài),絕對不愿意開除了哪一位管理層,然后破格提升一個小伙子。

          當你有了突出的能力卻到了瓶頸的位置,長期呆在一家公司做著乏味的工作的時候,就更應(yīng)該大膽地嘗試,為自己的發(fā)展謀求一條合適的道路。正所謂,賽翁失馬,焉知非福!不敢放棄現(xiàn)有的,也就失去了進一步發(fā)展的機會。

            四、提升管理能力,提高綜合素質(zhì)

            無論從事技術(shù)還是業(yè)務(wù),無論你是技術(shù)總監(jiān)還是業(yè)務(wù)總監(jiān),都只是單方面的能力。想要成為出色的人才,這是遠遠不夠的。企業(yè)是一個運營的團體,想要 一家企業(yè)能夠得到長遠的發(fā)展,就必須有完善的管理能力,知人善用。一個成功的企業(yè)家往往并不是樣樣皆能,而是他有妥善的管理才能,能有效地控制企業(yè)的日常 運作,把握人才,充分發(fā)揮企業(yè)的獨有優(yōu)勢。

          浪子第一時間想起最愛看的一部驚世名著:三國演義,古人云:得民心者得天下。回望三國,劉備雖無大才,文不能安邦,武不能定國,但卻從一沒落的市井 草席之人成為一方之主,就是因為他能知人善用。臥龍鳳雛暫傾心輔助,五虎上將暫俯首稱臣,令他終成霸業(yè)。當今作為企業(yè)的領(lǐng)導(dǎo)者也該有此發(fā)掘人才能力,注重 人才的管理,通過溝通提高人才對企業(yè)的了解程度,喚醒其工作熱誠。

          管理是一種學(xué)問,要通過出色管理讓一家不知名的小企業(yè)華麗變身成為一家上市集團更是一種藝術(shù)。這絕對不僅僅是通過技術(shù)或業(yè)務(wù)等單方面的學(xué)習(xí)就能掌握的,這必須經(jīng)過長期的累積與學(xué)習(xí),多方面的了解與實踐才能從中領(lǐng)悟。提高個人的綜合管理能力,是一個成功人事的必要條件。

          這時候,讓浪子眼里回放出近期看過的一部電影:杜拉拉升職記,劇中女主角拉拉經(jīng)歷了不斷的努力與嘗試,終于從一不知名的小員工提升到跨國企業(yè)的部門 主管,當中經(jīng)過了多少的波折與考驗。但即便如此,拉拉也不過是年薪五十萬左右,但區(qū)區(qū)的五十萬年薪,又能干些什么呢?要想真正達到發(fā)展的目標,最重要的是 第五點:

            五、團積資源,建立社會關(guān)系網(wǎng)

            現(xiàn)今社會,光有錢并不足以成事。最重要的是必須擁有一個完善的關(guān)系網(wǎng),在市場的調(diào)研,項目的研發(fā),產(chǎn)品的包裝,業(yè)務(wù)的推廣上都必須有對應(yīng)企業(yè)的 支持,那產(chǎn)品才有可能成功地提出市場,得到豐厚的回報。所以在企業(yè)建立前,必須建立自己的人際關(guān)系網(wǎng)。而這資源,不單單是指錢,更重要的是市場關(guān)系,人才 資源,產(chǎn)品信息。只有把握市場動向,了解產(chǎn)品信息,團結(jié)人才隊伍,搶在技術(shù)前線的企業(yè)才會得到最終的成功。

          自主創(chuàng)業(yè),是浪子最終想要到達的目標,到這里,浪子終于想到年終報告里面2012年的目標是什么了,那就是洞察市場發(fā)展,注視產(chǎn)品路線,發(fā)掘有用人才,團積社會關(guān)系。在創(chuàng)業(yè)之前一定要擁有一個完善的發(fā)展渠道,建立成熟的社會關(guān)系網(wǎng),那自主創(chuàng)業(yè)才可能得到成功。

          正所謂創(chuàng)業(yè)難,守業(yè)更難,在創(chuàng)業(yè)后,必須密切觀察市場的走勢,制定企業(yè)長期的發(fā)展路線,那企業(yè)才能得到迅速的發(fā)展與壯大。

          其實為啥這是 “反流程” 升職記,就是因為 “升職” 不應(yīng)該只是等待,而應(yīng)該是自己爭取。“命運” 不應(yīng)該由天父來控制,而應(yīng)該由自己去創(chuàng)造。“升職” 并不是一個已有的流程,而是由我們通過自己的努力而創(chuàng)造的一個 “奇跡” 。


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-01-12 13:03 todayx.org 閱讀(3776) | 評論 (3)編輯 收藏

          工作變更的事宜快要告一段落了,從電信行業(yè)轉(zhuǎn)向互聯(lián)網(wǎng)行業(yè)。其實我不算一個很有經(jīng)歷的人,但是我依然愿意回頭望望走過的路,記錄下我的體驗、感觸,給那些剛?cè)肼毜男值軅儭⒂龅嚼Щ蟮呐笥褌儯f一些小小的事情,給一些小小的建議;同時,更作為一份小小的新年禮物,送給自己。

           

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

           

          關(guān)于求職

           

          每一次求職都意味著一次挑戰(zhàn),在這一步過程中,至少要戰(zhàn)勝四個這樣的自己:

          (1)頻于抱怨、懶得行動、安于現(xiàn)狀的自己;

          (2)面對較大的變化發(fā)生,感到畏懼的自己;

          (3)缺少耐心,容不得不確定,浮躁的自己;

          (4)人云亦云,缺乏主見,難拿主意的自己。

           

          我從計劃工作變更,到完成,要經(jīng)歷大約半年的時間,在這段時間里,沒有什么人給我打氣,在前半部分的時間內(nèi)我也沒有告訴任何人。工作一如既往的繁忙,我只能抽出有限的時間來安排自己尤其關(guān)心的事情。

           

          “我現(xiàn)在的工作很不錯,為什么要離開?”

          這不是一個心血來潮的問題,也不是一個能在幾個日夜內(nèi)給出答案的問題。我不由自主地詢問自己:我的夢想是什么?如果我覺得我還在做我熱愛的事業(yè),也許某一天我會達到夢想中的目標。如果我的工作讓我燃不起熱情,離我的目標漸行漸遠,我就開始反思,究竟是哪里出了問題。

          其實誰都沒有問題,電信領(lǐng)域的發(fā)展如火如荼,可是我漸漸發(fā)現(xiàn),互聯(lián)網(wǎng)的故事才更引人入勝;或許管理崗位是一個最好的發(fā)展途徑,可是我從來都對技術(shù)充滿熱情。

          我覺得,也許是時候了。

           

          身邊的人會給你聽到耳朵起繭的“忠告”,這些所謂的“忠告”包括但不限于下列:

          “在中國,做技術(shù)沒有前途的。”

          “到家鄉(xiāng)來吧,漂泊在外的,什么時候能夠安定下來?”

          “找那些抱政府大腿的企業(yè),或者考公務(wù)員吧,那些有錢途”

          “證券行業(yè)待遇豐厚,你有沒有興趣”

          “你想要編碼到什么時候,六十歲嗎?!”

           

          如果這個階段,連自己的主意都拿不下來,下一份工作,也只能說是“忠告”選擇的工作,而不是自己。

          我找了一份工作,不是有前途的管理崗位、不在安定的家鄉(xiāng);但我可以做自己憧憬的工作了,可以在優(yōu)秀的團隊里共事,可以開闊我的眼界,也可以拿到不錯的薪水。

           

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

           

          關(guān)于眼界

           

          眼界有多遠,自己才能走多遠。

          在求職期間,我了解到了IT各個領(lǐng)域的是是非非,也體驗到了不同企業(yè)的工作環(huán)境、文化氛圍,對自己而言,不可謂不是一種自我成長。

          從傳統(tǒng)軟件到一些新興領(lǐng)域,從數(shù)萬人的大公司到百人以下的創(chuàng)業(yè)團隊,我看到了許許多多奮斗著的充滿智慧的伙伴們,每個地方他們的生活狀態(tài)都不甚相同,IT行業(yè)是一個包容的行業(yè)。

           

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

           

          關(guān)于堅持

           

          沒有什么比堅持的故事更感人。

          我對那些所謂的前途不前途的論斷沒有興趣,做一件自己喜歡的事情,把它做到極致,通常都能得到很不錯的回報。

          曾經(jīng)看到過這樣的程序員的故事,我的一些短小的故事,實在算不得什么。

           

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

           

          做一個有心的程序員

           

          譬如最近火熱的密碼泄漏事件,譬如風言風語中的火車票訂票難的問題,很多愿意思考的程序員說出了自己的想法,甚至給出了自己的解決方案,這些都有趣 而令人回味。在中國,一個好的想法能夠得到生存實屬不易,這些優(yōu)秀的程序員們,需要由足夠厚的臉皮和足夠包容的肚囊,留心生活中的是是非非,好好利用聰慧 的大腦。程序員,也便是這樣成長的。


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-01-12 13:02 todayx.org 閱讀(1688) | 評論 (2)編輯 收藏

          不知不覺,2011已經(jīng)過去了,這一年中的大多時間,都花在了輿情監(jiān)控系統(tǒng)的探索和研發(fā)上。尤其是作為輿情監(jiān)控系統(tǒng)的基礎(chǔ)子系統(tǒng)——網(wǎng)絡(luò)爬蟲系統(tǒng),更是消耗了不少的時間和精力。下面簡單分享一下在網(wǎng)絡(luò)爬蟲系統(tǒng)設(shè)計開發(fā)中的一些經(jīng)驗和不足。

           

          首次接觸爬蟲,是在前年的時候,一次偶然的機會,從圖書館帶回一本書中,夾帶了一個網(wǎng)絡(luò)爬蟲的demo源碼,當時只覺得非常敬仰那些能夠?qū)懗雠老x程 序的人,認為倘若有一天自己也能寫一個網(wǎng)絡(luò)爬蟲出來,該是一件多么讓人興奮的事。后來工作之后,參與的第一個項目,就是網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的開發(fā),不過當時 因為只是應(yīng)屆畢業(yè)生,且公司的這套產(chǎn)品已趨向成熟,正在推廣期間,所以工作內(nèi)容主要是該系統(tǒng)下網(wǎng)絡(luò)爬蟲子系統(tǒng)的配置和維護,以及爬蟲日志的分析。也正是從 這里開始,真正踏上了網(wǎng)絡(luò)爬蟲的探索之路。

           

          期間,我的畢業(yè)設(shè)計作品就是一個小型的搜索引擎系統(tǒng),做這個東西的目的也很明確,就是為了探索網(wǎng)絡(luò)爬蟲系統(tǒng)在實際應(yīng)用中的一些核心技術(shù),并積累一些 經(jīng)驗。后來來了上海,沒想到公司又是搞搜索、搞網(wǎng)絡(luò)輿情的,所以又繼續(xù)沿著之前的路走:設(shè)計開發(fā)爬蟲,數(shù)據(jù)分析,和海量數(shù)據(jù)的全文檢索。

           

          這樣的日子,不知不覺已經(jīng)有一年了,在這一年里,采用不同的技術(shù)、不同的設(shè)計理念和不同的目的,主要做了三個版本的爬蟲系統(tǒng),最滿意的要數(shù)現(xiàn)在這個 了。個人認為最主要的原因還是因為有了之前的經(jīng)驗積累和沉淀,使得在爬蟲設(shè)計之初就注意到了并避開了之前爬蟲遇到的各種各樣的問題。現(xiàn)在的爬蟲系統(tǒng),主要 是作為一個定向數(shù)據(jù)采集和網(wǎng)頁文本挖掘軟件為網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)服務(wù)的,除了常規(guī)爬蟲的網(wǎng)頁采集、鏈接跟蹤等功能外,還帶有網(wǎng)頁主題識別和價值文本抽取等稍 微有點“特色”的功能。在筆者看來,這樣的網(wǎng)絡(luò)爬蟲稍顯“另類”,因為它與常規(guī)的網(wǎng)絡(luò)爬蟲相比,人工依賴更多,但是數(shù)據(jù)抽取更精準,更高效。不同于公司版 本的網(wǎng)絡(luò)爬蟲是以命令行方式控制,筆者個人探索研究之用的UI版,整合了一個簡單的界面,以使用戶可以更方便、更直觀的控制和配置爬蟲。界面在設(shè)計之初, 參考了國內(nèi)某著名信息采集系統(tǒng)的UI,所以看起來爬蟲更像是一個網(wǎng)頁數(shù)據(jù)采集系統(tǒng)。但事實上,輿情監(jiān)控使用的爬蟲跟普通的網(wǎng)頁信息采集系統(tǒng),并沒有很大的 區(qū)別。以下是該系統(tǒng)的部分截圖:

           

           

           

           

           

           

          該系統(tǒng)目前采用的技術(shù)架構(gòu)是:Quartz + HtmlUnit + HttpClient + DBCP,采用XPath來精確抽取網(wǎng)頁文本,最低內(nèi)存消耗5M,最長運行時間15天,最快抓取速度10208網(wǎng)頁/小時,最高寬帶占用38M/s
          測試環(huán)境為:Windows Server2003 SP3 32位Hotspot 1536M內(nèi)存 100M光纖 MySql5.1

           

          其實對于網(wǎng)絡(luò)爬蟲工作模式,以及網(wǎng)絡(luò)爬蟲的模塊設(shè)計,應(yīng)該說很多人即便是沒有做過爬蟲的人,也能說出來個大概。事實上,雖然網(wǎng)絡(luò)爬蟲系統(tǒng)是技術(shù)密集型的軟件系統(tǒng),但是如果一個基礎(chǔ)扎實的程序員要做一個像模像樣的“簡化版”爬蟲,也不是什么十分困難的事情。

           

          為什么這么說呢?筆者認為,爬蟲的核心,無非就是網(wǎng)頁獲取、鏈接抽取、文本抽取,稍微高級一點即是權(quán)重分析、網(wǎng)頁去重、更新策略,再高級就是人工智 能和分布式集群了。拋開人工智能和分布式,要做一個單機版的爬蟲,還是很容易的:java世界中,網(wǎng)頁獲取技術(shù)可謂多如繁星,如HttpClient等, 鏈接抽取自然也不在話下,對于單機版的爬蟲,權(quán)重分析、網(wǎng)頁去重和更新策略可以暫時不去做,那么就剩下一個文本抽取了,過濾HTML標簽就是最簡單的文本 抽取(當然實際上很少有這么簡單處理的),而這對HtmlParser來講,簡直是小菜一碟。

           

          在筆者看來,一套完善的網(wǎng)絡(luò)爬蟲系統(tǒng),應(yīng)該具備以下特點:
          1、良好的框架結(jié)構(gòu)
          2、合適的網(wǎng)頁獲取技術(shù)
          3、高度優(yōu)化的代碼
          4、易于配置和管理

           

          第一點:因為爬蟲系統(tǒng)一旦運行起來,可能好幾周甚至更長時間都不會停下來,良好的框架結(jié)構(gòu)可以保證爬蟲在這個漫長的作戰(zhàn)過程中盡量少的犯錯誤,和較低資源占用;同時,良好的框架結(jié)構(gòu)也為擴展和增強爬蟲的功能奠定良好的基礎(chǔ);
          第二點:在 一年多的網(wǎng)絡(luò)爬蟲開發(fā)過程中,筆者接觸了眾多的網(wǎng)頁獲取技術(shù),如Watij、JRex、JSoup再到后來的HtppClient和目前的 HtmlUnit,總的來講,各有優(yōu)劣,所謂“優(yōu)劣”,主要的判斷標準有同一網(wǎng)頁的獲取時間、解析時間、是否支持腳本以及對內(nèi)存和CPU的占用,爬蟲要面 對不同的頁面類型,何時采用何種頁面獲取技術(shù),以使爬蟲消耗的資源和時間最少,是爬蟲設(shè)計者不得不考慮的問題;據(jù)筆者了解,HttpClient應(yīng)該是 Java開源爬蟲中用的最多的技術(shù),也確實應(yīng)該是爬蟲的首選網(wǎng)頁獲取技術(shù);
          第三點:正如第一點所說,在爬蟲長時間運行過程中,如果不對代碼做高度優(yōu)化,那么萬一出現(xiàn)內(nèi)存泄露,對爬蟲而言,將會是致命的打擊;另外,經(jīng)過高度優(yōu)化的代碼,可以使CPU占用處于低位,如此,便可保證同樣的服務(wù)器硬件上,爬蟲的效率、速度和穩(wěn)定性都會有質(zhì)的提高;
          第四點:爬蟲系統(tǒng)不是智能的,很多情況不能夠自己判斷并作出決定,但是為了讓爬蟲變得聰明,往往需要配置大量的參數(shù)來“指導(dǎo)”和管理爬蟲工作

           

           

          正是基于上述四點保證,現(xiàn)有爬蟲才能在最低5M內(nèi)存時穩(wěn)定運行,才能在兩周的連續(xù)運行時間內(nèi)不出現(xiàn)任何內(nèi)存泄露等問題。不過這不能掩飾爬蟲的“內(nèi)傷”,而這些“內(nèi)傷”也正是2012所要解決的問題:
          1、雖然爬蟲能夠精確抽取論壇主題和回帖,以及點擊量和回復(fù)數(shù),但爬蟲嚴重依賴XPath,不能夠自主識別鏈接重要程度,不能夠自主識別網(wǎng)頁價值數(shù)據(jù);
          2、爬蟲采用插件模式,每個站點都有一個插件,以此來保證抽取數(shù)據(jù)的準確性,但是缺乏大規(guī)模全網(wǎng)爬取的能力;
          3、不支持robots協(xié)議,像個“流氓”;
          4、不支持集群;
          5、采用關(guān)系型數(shù)據(jù)庫,而沒有使用NOSQL數(shù)據(jù)庫;

           

          這些內(nèi)傷有的影響了爬蟲的性能,有的限制了爬蟲的成長,有的則使爬蟲看起來像個“流氓”,所以在未來的2012上半年,需要解決這些問題。目前的打算如下:


          爬蟲改定向爬取為定向爬取與全網(wǎng)爬取共存后,爬蟲需要自動跟蹤鏈接、抽取文本,所以要用到主題識別技術(shù)、網(wǎng)頁切片技術(shù)和網(wǎng)頁權(quán)重分析技術(shù);
          系統(tǒng)應(yīng)該提供一個默認的插件,來兼容絕大部分網(wǎng)頁,但要保留現(xiàn)有的插件模式;
          為爬蟲加入robots協(xié)議的支持,使其變成“正規(guī)軍”;
          好的爬蟲當然是要支持集群的,目前考慮采用apache的hadoop來做分布式的爬蟲;
          URL數(shù)據(jù)存儲在關(guān)系型數(shù)據(jù)庫中對爬蟲性能的影響十分明顯,稍后要用MongoDB來取代關(guān)系型數(shù)據(jù)庫來管理URL數(shù)據(jù)

           

           

          網(wǎng)上已有很多開源爬蟲,筆者也研究過好幾款,只能說良莠不齊吧,且筆者覺得大多爬蟲采用的技術(shù)都比較老,而且普遍存在一個問題,就是對網(wǎng)頁權(quán)重分析 和URL鏈接管理做得很不到位,或者干脆就沒有做,不明白為什么。不過作為開源軟件的一名貢獻者,其作者的精神和勇氣還是值得欽佩的,在此向所有開源事業(yè) 的先驅(qū)們致敬!

           

           

          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/

           

          原創(chuàng)文章,轉(zhuǎn)載請注明出處:http://yshjava.iteye.com/blog/1338896



          posted @ 2012-01-10 22:44 todayx.org 閱讀(7241) | 評論 (6)編輯 收藏

                看到本文標題,我要說些什么,想必你大概可以知道一些,——小城市(二三線的城市)IT業(yè)發(fā)展比較薄弱,有些城市可能連真正做IT(軟件開 發(fā)相關(guān))的比較大的公司都沒有幾家,像我現(xiàn)在所在的城市襄陽(原名:襄樊),就只有那屈指可數(shù)的幾家公司;公司少,選擇和發(fā)展的空間相對也小,——這也造 成了(留在本地的)程序員較少[剛畢業(yè)的基本上都想著到外面去闖闖,展示拳腳(我剛畢業(yè)時就是這種心態(tài)),不會選擇留在本地發(fā)展,于是在本地的程序員,差 不多都是在外面工作過兩年左右的時間后回來的(當然,這部分程序員大多都是不打算在外面長期發(fā)展或在外發(fā)展的不順利等原因而返鄉(xiāng))]。說到'人才難招', 有的公司老板就會說:"襄陽吸引不了人 特別高素質(zhì)的人",——我個人認為其實正因為這樣,沒有比較有實力的公司,就留不住高素質(zhì)的人,這是個雙向的;人才是流動的,襄樊這地方需要 有實力的公司來‘激活’!

               大環(huán)境已經(jīng)是這樣,(襄陽)缺少好的平臺,導(dǎo)致留不住人和人難招的局面——不是一兩個人能改變的事;從外面回到襄陽發(fā)展的苦逼程序員,也都清楚的知道這樣 會有怎樣的取舍——可比外面過的要舒服一些,壓力比較小,至少大部分人還可以每天回家感受家的溫馨等——這是在外面發(fā)展很難獲得的;而你要舍去的是:比外 地(北上廣等一線城市)要低很多的工資(就襄陽的情況,兩三年或更長時間工作經(jīng)驗的程序員,工資平均也就在3k左右,這還算是比較高的工資或比較有實力的 公司能給的薪水,而相同的條件,在北京工資大概在8k左右),再加上假期休息時間都會縮水(如外地每周基本上都是雙休,而襄陽基本上都只休一天,其它的國 家法定假日也會縮短一兩天),更別說其它的福利待遇了...——所以,有些打算回家鄉(xiāng)發(fā)展的程序員,在打聽或了解到家鄉(xiāng)的薪資等情況后,就打消了‘回家發(fā) 展’的念頭,因為他們更多的想:我在外地辛苦打拼一兩年,就抵在家鄉(xiāng)三四年,而且發(fā)展空間等都會堅定他的想法。

              以上所說的算是以我現(xiàn)在的居住的城市襄陽(我畢業(yè)后在北京工作了一年,09年底回到家鄉(xiāng)發(fā)展)的IT圈情況和個人的感受與大城市的反差,道出小城市程序員或公司發(fā)展所面臨的困境;而接下來我要說的是此文的核心之一:小城市程序員的迷茫——主要從以下幾點闡述:
             1.小城市的IT公司因其上面提到的:規(guī)模和實力的限制,很多公司只有7,8個人,在其招聘員工(如:程序員)時,就會在招聘要求上說明——除了 會.net等xx技術(shù)外,還需要熟悉div+css,會美工...,而從外地回來的程序員,在之前的公司基本上都是只負責做程序,別說不會美工,可能連 div+css都不怎么了解,這樣即使你被公司聘用了,在之后的工作中boss可能還是對你抱著你能夠一鍋端——什么都會的態(tài)度,讓你把做的項目的頁面調(diào) 整下布局(修改下樣式),你也只能是'趕鴨子上架',試著去修改,再比較不情愿的去學(xué)習(xí)之前與你毫不相干的div+css。[小城市的IT公司大多都是希 望你能獨立搞定一個項目(程序和美工等),且工資也不想多給——這讓不少程序員只能是忍氣吞聲,感覺有些迷茫:是不是應(yīng)該回來發(fā)展?!]
             2.基于上面所說的:工資低,且各方面都不如外面好,當聽到之前的同事或同學(xué)說他們或有人做xx技術(shù)開發(fā),工資已漲到8、9k,或12k,更或公司分了房 子等時,你就很難不為之躁動了,想著同樣的技術(shù),why自己就甘于平凡,拿著這點兒工資,還有時忙的火急火燎的,于是就會在心里考慮,準確的說是在猶豫: 到底是應(yīng)該繼續(xù)留在家鄉(xiāng),還是再到外面去'享受'大城市的精彩?!
             3.除了工資低,同樣讓人迷茫的還有:似乎公司一直處在創(chuàng)業(yè)發(fā)展階段,看不到公司的發(fā)展前景,就更看不到自己會有怎樣的發(fā)展;再加上公司整體的工作氛圍比 較低迷,缺少斗志和激情,公司也沒有什么制度或福利等能刺激員工奮斗——有的更多的只是加班費和項目獎金,這在一定程度上可以提高員工的工作積極性,但就 像我現(xiàn)在的公司,除了公司的發(fā)展前景比較模糊,在項目開發(fā)上也讓人比較難受——公司自己開發(fā)運營的同城網(wǎng),底層框架和欄目頻繁的改動:一方面是為了提高程 序的性能及代碼的重用性,其實這也沒什么,只是已經(jīng)推出了10個左右的欄目(資訊、人才...),卻沒有一個欄目能有比較高的訪問量(日均1000以 上),——(公司的的策劃和boss等提出的)修改也基本上圍繞著'改善用戶體驗性',這樣說實在的讓人比較郁悶,工作也很能提起興趣;而如果是對一個已 經(jīng)有比較高訪問量的項目進行優(yōu)化和修改,那情況會截然不同,比如:你在淘寶等大型的互聯(lián)網(wǎng)公司工作,當看到自己辛苦開發(fā)的項目,被很多人使用(訪問),那 種自豪或成就感會油然而生,對工作自然會充滿激情;我認為'用戶體驗性'的改善建議,應(yīng)該(絕大多數(shù))來自于用戶,對于web項目不必等到做的自認為盡善 盡美時才去推出(廣),讓用戶幫你做體驗測試和反饋意見,否則將可能會出現(xiàn):投入太多(time and money),改來改去卻并不是用戶‘用起來舒服的’網(wǎng)站。
             4.除此之外的迷茫還有:(單身的程序員)因為有時比較空虛、無聊等,會感覺不知道該做些什么,更準確的說是:沒有心情去做事,就我而言,就很討厭這種感覺。

             說完了迷茫,再說說有哪些堅持:
             1.小城市的IT公司基本上都是一些中小型的項目,不要指望從工作項目中或某個同事身上學(xué)到多少技術(shù),自己要堅持學(xué)習(xí),有個大致的學(xué)習(xí)計劃——比如今年計 劃學(xué)習(xí)xx技術(shù)等;盡可能的利用休息時間接一些外包項目做,這樣可以促使你更快的學(xué)習(xí)一些比較實用的技術(shù),也能掙一些外快,所以相對于看教程學(xué)習(xí),從做項目中學(xué)習(xí)要更快更實用!
             2.堅持形成自己的思考問題的方式和解決問題的能力,善于分析和總結(jié),要知道:做再多的項目,如果不用心去think,你增加的頂多是項目經(jīng)驗,但你的能力卻未必達到相同的高度;我們學(xué)習(xí)一個新東西,大致要經(jīng)歷這樣的階段:what(它是什么)→how(如何使用)→why(為什么要這么使用,深入了解),所以我們對技術(shù)的掌握應(yīng)該不要只滿足或停留于how的階段,應(yīng)該努力弄清楚why!
             3.堅持自己的信念或目標,對于動搖或浮躁的情況,要學(xué)會自我調(diào)節(jié),弄清楚到底什么才是你最想要的。比如:當我面對外面的高薪工作有些猶豫時,我會告訴我自己:外面雖然很精彩,但你并不會因此而快樂,最起碼沒有家的溫馨。

             好了,比較零散的寫了一些(以我個人的感受和經(jīng)歷)關(guān)于小城市程序員發(fā)展的迷茫和堅持,及其小城市IT業(yè)的環(huán)境和狀況,希望能引起有相似經(jīng)歷或正處在小城 市發(fā)展的朋友的共鳴,也希望大家能夠多些交流——讓苦逼的工作多一點兒快樂和談定;一個月前就打算寫這篇博客了,卻拖到今天才算寫完,不是沒有時間,而是 不能靜下心去寫;寫了,也算是聊以平撫下有些躁動的心。


          我愛歷史,歷史上的今天,有趣
          http://www.todayx.org
          posted @ 2012-01-09 16:44 todayx.org 閱讀(236) | 評論 (0)編輯 收藏

          Java VS Python 生產(chǎn)效率 -概述
          下面是3個主要的特性能夠讓Python程序員效率高于java程序員

          Java

          Python

          靜態(tài)類型
          在java里面所有的變量名稱(和他們的類型)必須被明確的定義,如果嘗試去將某個對象賦予錯誤的類型,只會引起類型異常。這就為什么說java是靜態(tài)語言。

          java 集合對象(如:Vector和ArrayList)里面可以保存了通用類型對象,但是無法保存基本類型,如int等。要保存int到Vector,你必須 先要轉(zhuǎn)換int到Integer(注:這里指的1.5版以前的java)。同樣的,當你要從集合中取出一個對象時,已經(jīng)不記得對象的類型,必須顯示轉(zhuǎn)換為 期望的類型。
          動態(tài)類型
          在Python里面,你不需要定義任何東西(注:這里主要指的還是變量)。賦值語句將對象賦給某個變量名,并且對象可以是任意類型。如果變量已經(jīng)被賦予某個類型對象,之后還可以被賦予另外一個不同類型的對象。這就是為什么Python被稱為動態(tài)類型。
          Python的集合對象(如:lists和dictionaries)里面可以保存任意類型的對象,包括數(shù)字和lists。當你從集合中取出一個對象是,他仍然記得這個對象的類型,所以無需進行類型轉(zhuǎn)換。
          靜態(tài)類型vs動態(tài)類型的更多信息,看這里
          冗長
          ”大量的語句;使用過程中很多語句并不是必須的”
          簡潔(簡練)
          只需要幾個簡單的語句就可以表達很多。意味著清晰而簡潔,無需多余的語句就能完成目標。
          不緊湊
          緊湊
          在新的黑客字典里,Eric S. Raymond給予了“緊湊”這樣的定義:
          Compact adj. 在設(shè)計中,描述有價值的特性并能夠被人們立馬理解。

           

           

           

           

           

           

           

           

          例子

           

           

          “hello world!”

          Java

          Python

          public class HelloWorld {     public static void main (String[] args)     {         System.out.println("Hello, world!");     } }
          print "Hello, world!"

          print("Hello, world!") # Python version 3

           

           

           

           

           

           

           

          例子

          下面的例子里,我們初始化integer為0,再把他轉(zhuǎn)為string,最后檢查他是否為空。注意,數(shù)據(jù)的聲明在java里是必須的,但Python里不是。還會注意到即時只是在簡單的比較兩個字符串的時候,java代碼還是會顯得冗長。

          Java

          Python

          int    myCounter = 0; String myString = String.valueOf(myCounter); if (myString.equals("0")) ...
          myCounter = 0 myString = str(myCounter) if myString == "0": ...
          // print the integers from 1 to 9 for (int i = 1; i < 10; i++) {    System.out.println(i); }
          #print the integers from 1 to 9 for i in range(1,10):     print i

           

           

           

           

          例子

          你的應(yīng)用有15個class。(準確的說是15個頂層的public class)。

          Java

          Python

          每個頂層的public class都必須定義一個單獨的文件。如果你的應(yīng)用有15個class,那就有15個文件。 多個class可以被定義到單個文件中。如果你應(yīng)用有15個class,只要你愿意甚至可以將整個應(yīng)用都存放到一個文件中,但是更明智的情況是將這些class分散到4-6個文件中。

           

           

           

           

           

          例子

          在你的應(yīng)用中,A方法調(diào)B方法,B調(diào)C,C調(diào)D,D調(diào)E,E調(diào)F。當你發(fā)現(xiàn)F必須拋出SpecialException異常,它必須被A捕獲時。

          Java

          Python

          你必須在F中throw SpecialException,然后在A中進行catch。
          同時
          你必須在B、C、D、E和F,每個方法上都申明”throws SpecialException”。
          你必須在F中rasie SpecialException,并在A中進行catch。由于異常會自動往上升,所以你不需要做任何其他事情。

          這個原因還是因為java事實上是封閉的面向?qū)ο蟪绦蛘Z言,使用了checked exception --- 在異常出現(xiàn)的每個方法中,他們必須被拋出或捕獲,否則連編譯都無法通過。

           

           

           

           

           

           

          例子

          你的應(yīng)用里面有個Employee class,當一個Employee的實例被創(chuàng)建,構(gòu)造函數(shù)可能傳入1個、2個或者3個參數(shù)。

          如果是在java中,這意味著你必須寫3個不同參數(shù)的構(gòu)造函數(shù)。如果你用Python,你只用寫一個帶可選參數(shù)和默認值的構(gòu)造函數(shù)。

          Java

          Python

          public class Employee {     private String myEmployeeName;     private int    myTaxDeductions = 1;     private String myMaritalStatus = "single";      //--------- constructor #1 -------------     public Employee(String EmployeName)     {         this(employeeName, 1);     }      //--------- constructor #2 -------------     public Employee(String EmployeName, int taxDeductions)     {        this(employeeName, taxDeductions, "single");     }      //--------- constructor #3 -------------     public Employee(String EmployeName,            int taxDeductions,            String maritalStatus)     {        this.employeeName    = employeeName;        this.taxDeductions   = taxDeductions;        this.maritalStatus   = maritalStatus;     } ...
          class Employee():      def __init__(self,         employeeName         , taxDeductions=1         , maritalStatus="single"         ):          self.employeeName    = employeeName         self.taxDeductions   = taxDeductions         self.maritalStatus   = maritalStatus ...

          在Python中,一個類只包含一個構(gòu)造函數(shù)。
          構(gòu)造方法都是用的特殊的名字:__init__

           

           

           

           

           

           

           

           

           

          例子

          關(guān)于緊湊(注:略去”名人名言“若干)

          Java

          Python

          import java.io.*; ...  BufferedReader myFile =     new BufferedReader(         new FileReader(argFilename));
          # open an input file myFile = open(argFilename)

           

           

           

           

           

           

           

           

           

          例子

          string處理能力的比較

          功能

          Java

          Python

          去掉頭尾空格 s.trim() s.strip()
          去掉頭部空格 未提供 s.lstrip()
          去掉尾部空格 未提供 s.rstrip()

           

           

           

           

           

           

           

           

          例子

          將int加到Vector

          Java

          Python

          public Vector<Integer> aList = new Vector<Integer>; public int    aNumber      = 5; public int    anotherNumber;  aList.addElement(aNumber); anotherNumber = aList.getElement(0);
          aList = [] aNumber = 5  aList.append(aNumber) anotherNumber = aList[0]

           

           

           

           

           

           

           

           

           

          例子

          Java

          Python

          if ( a > b ) {     a = b;     b = c; }
          if  a > b :     a = b     b = c

           

           

          轉(zhuǎn)自:
          http://xflykkk.iteye.com/blog/1337444


          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-01-08 16:25 todayx.org 閱讀(3356) | 評論 (7)編輯 收藏

          1 快速排序

          介紹:

            快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因為它的內(nèi)部循環(huán)(inner loop)可以在大部分的架構(gòu)上很有效率地被實現(xiàn)出來,且在大部分真實世界的數(shù)據(jù),可以決定設(shè)計的選擇,減少所需時間的二次方項之可能性。

          步驟:

          • 從數(shù)列中挑出一個元素,稱為 "基準"(pivot),
          • 重新排序數(shù)列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作。
          • 遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序。

          排序效果:

          詳細過程:

           

           

          2 歸并排序

          介紹:

            歸并排序(Merge sort,臺灣譯作:合并排序)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用

          步驟:

          • 申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列
          • 設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置
          • 比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置
          • 重復(fù)步驟3直到某一指針達到序列尾
          • 將另一序列剩下的所有元素直接復(fù)制到合并序列尾

          排序效果:

          詳細過程:

           

           

          3 堆排序

          介紹:

            堆積排序(Heapsort)是指利用這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。堆是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆性質(zhì):即子結(jié)點的鍵值或索引總是小于(或者大于)它的父節(jié)點。

          步驟:

          (比較復(fù)雜,自己上網(wǎng)查吧)

          排序效果:

          詳細過程:

          (暫無)

          4 選擇排序

          介紹:

            選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小元素,然后放到排序序列末尾。以此類推,直到所有元素均排序完畢。

          排序效果:

          詳細過程:

           

           

          5 冒泡排序

          介紹:

            冒泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

          步驟:

          1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
          2. 對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點,最后的元素應(yīng)該會是最大的數(shù)。
          3. 針對所有的元素重復(fù)以上的步驟,除了最后一個。
          4. 持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

          排序效果:

          詳細過程:

           

           

          6 插入排序

          介紹:

            插入排序(Insertion Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實現(xiàn)上,通常采用in-place排序(即只需用到O(1)的額外空間的排序),因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。

          步驟:

          • 從第一個元素開始,該元素可以認為已經(jīng)被排序
          • 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描
          • 如果該元素(已排序)大于新元素,將該元素移到下一位置
          • 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
          • 將新元素插入到該位置中
          • 重復(fù)步驟2

          排序效果:

           (暫無)

          詳細過程:

           

           

          7 希爾排序

          介紹:

            希爾排序,也稱遞減增量排序算法,是插入排序的一種高速而穩(wěn)定的改進版本。

            希爾排序是基于插入排序的以下兩點性質(zhì)而提出改進方法的:

          • 插入排序在對幾乎已經(jīng)排好序的數(shù)據(jù)操作時, 效率高, 即可以達到線性排序的效率
          • 但插入排序一般來說是低效的, 因為插入排序每次只能將數(shù)據(jù)移動一位

          排序效果:



          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2012-01-08 16:23 todayx.org 閱讀(14322) | 評論 (4)編輯 收藏

          01. 自己的戶口檔案、養(yǎng)老保險、醫(yī)療保險、住房公積金一定要保管好。
          由于程序員行業(yè)每年跳槽一次,我不隱瞞大家,我至少換過5 個以上的單位,這期間跳來跳去,甚至是城市都換過3個。還好戶口沒丟掉,其他都已經(jīng)是亂了,好幾個城市里,都有交過三金,甚至是一個程序的2個區(qū)里交的都 有,那些東西,10年后,會變得很重要。你買房子若有公積金,可以取出來,貸款利率也會比較低一些,有孩子了,還需要上學(xué),生病了還需要醫(yī)療保險。


          特別是買房子時,你要商業(yè)貸款與公積金貸款的利率差別還是很大,有可能會有10萬的差距。你平時都注意這些,會給你帶來的損失會最小,例如 每個月繳納300元的公積金,公司也繳納300元,你一個月能存下來600元,一年就是7200元,10年就是72000元。我以前都忽視了這些,到我需 要買房子時,公積金里可能只有幾千元,10年很快就過去了,結(jié)果我沒能存下來多少公積金,醫(yī)療保險,養(yǎng)老金等更別提了,都已經(jīng)稀里糊涂了,這些損失10年 累加起來,是很龐大的數(shù)字,大家要注意,跳槽換工作時也要保護好自身的利益,現(xiàn)在房價很貴,你可能是跟我一樣,大山里出來打拼的娃子,家里也沒有豐厚的積 蓄,只有靠自己拼搏,買房子是人生的一件大事,等你到了10年,才想到這個事情,已經(jīng)晚了,特別是孩子要上學(xué),上幼兒園等,需要戶口啥的都要齊全。

           

           

          02. 不要輕易換筆記本電腦,不要跟潮流,不要買過多的電子產(chǎn)品,不要過于頻繁的更換手機。
          這方面我的經(jīng)驗教訓(xùn)也是慘痛的。我大概前后購 買過5-6個筆記本,以前的都是1萬多元一臺,最近買的是一臺是1萬多給女朋友的,自己買了一臺是7500元左右,手機大概換過接近10個了,這些錢加起 來也足夠有10萬以上了,你可能一不小心就購買了這些電子產(chǎn)品,但是時間長了,你一回過頭來想想,你為什么賺得也不少,但是為什么還是那么窮,是因為你購 買這些電子產(chǎn)品花費了過多的金錢了,平時筆記本啥的貴重物品要保護好,我一個同事不小心丟了2臺筆記本電腦,接近2萬的損失啊,你凈賺2萬,不是那么容易 的,這個窟窿不是開玩笑的,我曾經(jīng)也被人偷了一個嶄新的筆記本,損失1.5萬左右,更糟糕的是最新的代碼也丟被偷了。

           

           

          03. 這年代外語、學(xué)歷、職稱、駕駛證還是蠻重要的。
          想找高薪,外資企業(yè)是正確的選擇,在同樣的打工里,外資企業(yè)的收入普遍是高的,我就想不明白,我們的賺錢能力怎么就比不過人家了,社會不斷發(fā)展,將來可能去外國就像串門一樣了,也說不定的,外語好將來的就業(yè)機會也會更多更廣一些。
          學(xué)歷并不代表啥,但是學(xué)歷也是敲門磚,例如有300個應(yīng)聘者,那至少重點本科以下的,統(tǒng)統(tǒng)不看了,因為實在是來不及看了,你再厲害也被擋在機會的門外了,同樣有時候你想改行什么的,職稱也很重要,最起碼評個中級職稱,說不定還有機會能進入大學(xué)或者政府部門還是有可能性。


          若有充裕的時間,應(yīng)該把駕駛證考了,因為你越到后面越忙與工作家庭,沒機會學(xué)車了也說不定的,平時也別光顧拼命工作,工作10年后你才發(fā) 現(xiàn),原來身邊的人都至少碩士學(xué)歷了,你被社會自動淘汰了,我現(xiàn)在就有這個感覺,雖然我?guī)н^很多碩士,他們的就業(yè)機會比我還好,經(jīng)常能進入名牌企業(yè),我也一 直進不去。

           

           

          04. 不要談過多的女朋友,談女朋友要看準,下手要穩(wěn)準狠。
          我談過2個女朋友,平均每個女朋友身上的開支前后大概會有10萬左右,還好我 不用談第3個女朋友了,若投資失誤,那也是很殘忍的,談女朋友也會消耗很多時間精力、還會消耗很多金錢,實話的講的確是這樣的,人家女孩子也值錢啊,憑什 么就那么輕易的跟你啊,我跟第一個朋友分手時,我的生活至少是倒退了3-4年,一切從零開始,一切從頭開始,我勸大家談女朋友是人生最大的一筆買賣,投資 失誤會有慘痛的后果,不僅僅是金錢上的損失,更會有精神、心靈上的沉重打擊,大家要學(xué)會珍惜女朋友,要學(xué)會哄好女朋友,讓老婆開心每一天,雖然魚兒上鉤 了,不用再下魚餌了,偶爾也別忘記放點米,這個魚要是脫鉤了,那不是開玩笑的。

           

           

          05. 工作不要更換得太過于頻繁,選好了行業(yè)方向最好別更換太頻繁。
          換工作,換行業(yè)方向,就像熊掰苞米一樣的道理,有時候是丟了芝麻撿西瓜,有時候是丟了西瓜撿芝麻,這個道理我就不多講了,大家都應(yīng)該能明白的。

           

           

          06. 要對身邊的人好,要得到老板的信任、同事的認可及支持、珍惜良好的工作環(huán)境。
          有個朋友的QQ名字很有意思,“只愛陌生人”,陌生人 是很有意思,但是最關(guān)鍵時刻,還是需要靠非陌生人,你每天跟同事一起生活,要維系好身邊的人。你的成功與失敗,往往是你身邊的30-40個人決定的。你就 是世界首富,他身邊也是那么不超過100個人的在左右著他的生活,當你工作10年了,沒一個老板信任你,沒幾個要好的同事朋友,那你慘了,你在這個世界上 已經(jīng)是很孤單了,你的收入,其實大多是來自這些身邊的朋友給你介紹的生意,不大會網(wǎng)上掉幾個餡餅的。
          現(xiàn)在你身邊的人有可能在不久的將來,給你提供很多好機會。

           

           

          07. 錢很重要,但是生活質(zhì)量比錢還重要,工作是很重要,但是家人比工作還重要。
          錢不是萬能的,但是沒錢是萬萬不能的。錢賺了,身體夸 了,全送給醫(yī)院了,錢賺了,身心疲憊了,人活著為了啥?不就為了開開心心生活嘛?工作重要,但是失去了家人的愛,失去了女朋友,失去了老婆孩子,那這個工 作有啥用了?工作很容易就換了,家人是換不了的,老婆不是想換就換的,孩子不是想換就換的,連自己的家庭都不負責的人,怎么可能對公司負責呢?我一直是這 個觀念,來面試時覺得工作更重要的,我們一般不錄取的,那太假了,或者太不懂事了。

           

           

          08. 工作累了,也別太貪玩,有時候還是需要多想想如何才能賺錢。
          時間一晃就過去了,工作累了是可以適當放松,但是別太貪玩,10年很容 易就過去了,10年后你要買房子,要娶老婆,要買車子,要生娃娃,身體也會變得脆弱一些,需要良好的生活習(xí)慣,也經(jīng)不起通宵了,通宵一次,你要低迷好幾天 才能緩過勁兒來,跟20剛出頭完全不一樣了,用錢的地方多了去了,父母也會變得更老一些,可能也需要你的照顧,整個家子都指望你賺錢,別到了這個時候,你 才意識到賺錢是那么的重要,更何況現(xiàn)在城市的房價,動不動就是100萬,加上按揭的利息,你很可能需要支付150萬。還可能需要裝修,買車子。可能你身上 的壓力是200萬。別覺得談錢就俗,你要學(xué)會賺錢,要有個需要賺錢的良好意識,當然你出身富裕家庭,就不用考慮這些因素了。

           

           

          09. 每天一點點進步,每月一點點積累,要敬業(yè)要愛業(yè),我們給別人提供的也是服務(wù)。
          總有一天,你也會有累的時候,你也會有老的時候,這時 候,你要靠啥呢?就要靠你平時的積累,你10年的積累,可以打倒很多競爭對手,他們再厲害,再怎么樣,也很難抵得過你10年的積累,特別是后面5-10年 的積累,成果會很明顯,前面的1-5年,算是做軟件的入門吧,除非你有高人指點,那可能2-3年就可以修成正果,軟件在將來還是會值錢的,以為生活會越來 越智能化,越來越數(shù)字化,軟件的需求還是很有前途,最起碼未來的10-20年里不用太擔心失業(yè)問題了。

           

           

          10. 對程序員來講,開發(fā)思想、架構(gòu)、代碼就是財富,別老丟棄你的勞動成果,要學(xué)會保護你的勞動成果。
          我大概7-8年前的代碼都在手上, 經(jīng)常改進來改進去,維護來維護去,在一定的程度上,讓我生活輕松了不少,因為我不用什么都從頭來過,我只要痛苦一次,以后就要反復(fù)重復(fù)利用,軟件的價值在 于重復(fù)利用,而不是每個東西,都從頭開發(fā),那永遠也是辛苦的程序員,這個生活質(zhì)量就別提了,不管自己的代碼丑還是拿不出手,要學(xué)會精心維護,每天改進一點 點,每個月一個小進步,每年一個大進步,多年的積累是寶貴的,這個早晚也會給你帶來豐厚的收益。

           

           

          11. 當程序員要防止原地踏步,不是工作年限長了,經(jīng)驗就豐富了,能力就強了,年紀越大工作越難找。
          我有一個朋友跟我開玩笑,工作5年的 人,可能能力差距會很大,為什么呢?因為第一年他們干的事情都是一樣的,都寫程序了,2個人可能由于價值觀不一樣,5年后差距會很大,甚至是大到無法追趕 的程度,為啥?因為還有機會的因素在里面,有的人干了5年,還是在原地踏步,天天只會寫那些添加、刪除、修改的代碼。那你得注意了,需要不斷的提高自己, 才是硬道理。例如你會SQLServer,那要試著學(xué)習(xí)Oracle, 你是做C/S的,那得需要提高到B/S的,你是做單機軟件的,那得需要提高到網(wǎng)絡(luò)軟件,你只關(guān)注自己的工作的,需要學(xué)會管理,關(guān)心他人的工作。你是當程序 員的,要試著提高當項目經(jīng)理、部門經(jīng)理,公司的總監(jiān)等等,人有野心有目標才會不斷進步,最俗的為了多賺錢,提高工作職位工作崗位,工作單位,也是可以理解 的。


          年紀越大工作越難找,例如3-4千的工作是隨便找找,玩一樣,但是你30過后,最起碼要找月薪上1萬的工作,這樣的工作是機會也少,一般小 公司也給不起,還得找個好公司才可以,好公司又不是天天招聘人,天天缺好的工作崗位,說不好聽點兒,小公司的老板才賺多少啊?他來錢也很不容易的,小池塘 就不好容得下大鯊魚了。

           

           

          12.當創(chuàng)業(yè)的收入比打工還少時,那就別創(chuàng)業(yè),要找比自己能力強的人創(chuàng)業(yè),你不會吃虧。
          創(chuàng)業(yè)的收入,比打工還少,那就是瞎扯蛋,惡搞。創(chuàng)業(yè)的真正意思并不是要你去吃苦沒錢賺,那是忽悠無知的人的。當你創(chuàng)業(yè)時的收入,比打工還多,那你可以考慮創(chuàng)業(yè),沒有工資什么的,股份啥的,都是瞎扯蛋。
          不要跟自己能力還弱的人一起創(chuàng)業(yè),那損失最大的,很可能就是你,要創(chuàng)業(yè),也要找比自己強的人一起創(chuàng)業(yè),最起碼賺不到錢,還能學(xué)到不少。不會有過多的損失。別熱血一沸騰就創(chuàng)業(yè)了,創(chuàng)業(yè)了,也別燒自己的錢,家人的錢,那是很不抗燒的,沒幾下幾十萬就燒干了。


          其實打工,也是創(chuàng)業(yè)的開始,每個月都能拿到錢,還可以學(xué)到知識,什么公司的股份都是空話,沒幾個小公司能成功,開起來了也走不了3年就分家了,都忽悠小孩子玩的,除非真的有科技含量或者是客戶資源的,否則股份是一文錢不值的,就算創(chuàng)業(yè)每個月也按時拿工資才是硬道理。

           

           

          13. 未來的生活節(jié)奏會更快,生活壓力會更大,競爭會更激烈,社會服務(wù)體系會更完善。
          在未來,我們享受良好的服務(wù)的同時,也會為別人提 供更良好的服務(wù),需要在技能上還是服務(wù)質(zhì)量上的要求會更高更嚴格。平時要注意提高自己,不要被時代淘汰掉,我從小的朋友,一波又一波被社會無情的淘汰了, 很小的時候,我出生在大草原與大山的交界處,我小時候的玩伴,還在大山里,我跟著家人殺出來了,我小學(xué)、中學(xué)、大學(xué)、工作上的、這10年,我一直很堅強的 拼搏下來,很不容易的在杭州立住腳了,說實話,參加工作后的十年,也是不斷拼搏,不斷提高的十年。


          轉(zhuǎn)自iteye
          http://syc001.iteye.com/blog/1297741

          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2011-12-11 10:42 todayx.org 閱讀(2904) | 評論 (3)編輯 收藏

          這些最為奇怪的程序語言的特性,來自stackoverflow.com,原貼在這里。我摘選了一些例子,的確是比較怪異,讓我們一個一個來看看。

          1、C語言中的數(shù)組

          在C/C++中,a[10] 可以寫成 10[a]

          “Hello World”[i] 也可以寫成 i["Hello World"] 

          2、在Javascript中 

           ’5′ + 3 的結(jié)果是:’53′

           ’5′ – 3 的結(jié)果是:2              更多javascript點擊這里

          3、C/C++中的Trigraphs 

          Cpp代碼  收藏代碼
          1. int main() {  
          2.     cout << "LOL??!";  
          3. }  

           上面的這段程序會輸出: “LOL|”,這是因為 ??! 被轉(zhuǎn)成了 | ,關(guān)于Trigraphs,下面有個表格: 

          ??= #
          ??( [
          ??/ \
          ??) ]
          ??’ ^
          ??< {
          ??! |
          ??> }
          ??- ~

          4、JavaScript 的條件表 

          看到下面這個表,不難理解為什么Javascript程序員為什么痛苦了

          Js代碼  收藏代碼
          1. ''        ==   '0'          //false  
          2. 0         ==   ''           //true  
          3. 0         ==   '0'          //true  
          4. false     ==   'false'      //false  
          5. false     ==   '0'          //true  
          6. false     ==   undefined    //false  
          7. false     ==   null         //false  
          8. null      ==   undefined    //true  
          9. " \t\r\n" ==   0            //true  

           

          5、Java的Integer cache

          Java代碼  收藏代碼
          1. Integer foo = 1000;  
          2. Integer bar = 1000;  
          3.   
          4. foo <= bar; // true  
          5. foo >= bar; // true  
          6. foo == bar; // false  
          7.   
          8. //然后,如果你的 foo 和 bar 的值在 127 和 -128 之間(包括)  
          9. //那么,其行為則改變了:  
          10.   
          11. Integer foo = 42;  
          12. Integer bar = 42;  
          13.   
          14. foo <= bar; // true  
          15. foo >= bar; // true  
          16. foo == bar; // true  

          為什么會這樣呢?你需要了解一下Java Interger Cache,下面是相關(guān)的程序,注意其中的注釋

          Java代碼  收藏代碼
          1. /** 
          2.  
          3.      * Returns a <tt>Integer</tt> instance representing the specified 
          4.  
          5.      * <tt>int</tt> value. 
          6.  
          7.      * If a new <tt>Integer</tt> instance is not required, this method 
          8.  
          9.      * should generally be used in preference to the constructor 
          10.      * <a href="mailto:{@link">{@link</a> #Integer(int)}, as this method is likely to yield 
          11.      * significantly better space and time performance by caching 
          12.      * frequently requested values. 
          13.      * 
          14.      * @param  i an <code>int</code> value. 
          15.      * @return a <tt>Integer</tt> instance representing <tt>i</tt>. 
          16.      * @since  1.5 
          17.      */  
          18.     public static Integer valueOf(int i) {  
          19.         if(i >= -128 && i <= IntegerCache.high)  
          20.             return IntegerCache.cache[i + 128];  
          21.         else  
          22.             return new Integer(i);  
          23.     }  

          5、Perl的那些奇怪的變量

          Php代碼  收藏代碼
          1. $.  
          2. $_  
          3. $_#  
          4. $$  
          5. $[  
          6. @_  

           其所有的這些怪異的變量請參看:http://www.kichwa.com/quik_ref/spec_variables.html

           

          6、Java的異常返回

          請看下面這段程序,你覺得其返回true還是false?

          Java代碼  收藏代碼
          1. try {  
          2.     return true;  
          3. finally {  
          4.     return false;  
          5. }  

           在 javascript 和python下,其行為和Java的是一樣的。 

          7、C語言中的Duff device

          下面的這段程序你能看得懂嗎?這就是所謂的Duff Device,相當?shù)墓之悺?/p>

          C代碼  收藏代碼
          1. void duff_memcpy( char* to, char* from, size_t count ) {  
          2.     size_t n = (count+7)/8;  
          3.     switch( count%8 ) {  
          4.     case 0: do{ *to++ = *from++;  
          5.     case 7:     *to++ = *from++;  
          6.     case 6:     *to++ = *from++;  
          7.     case 5:     *to++ = *from++;  
          8.     case 4:     *to++ = *from++;  
          9.     case 3:     *to++ = *from++;  
          10.     case 2:     *to++ = *from++;  
          11.     case 1:     *to++ = *from++;  
          12.             }while(--n>0);  
          13.     }  
          14. }   

          8、PHP中的字符串當函數(shù)用

          PHP中的某些用法也是很怪異的

          Php代碼  收藏代碼
          1. $x = "foo";  
          2. function foo(){ echo "wtf"; }  
          3. $x();  

          9、在C++中,你可以使用空指針調(diào)用靜態(tài)函數(shù)

          Cpp代碼  收藏代碼
          1. class Foo {  
          2.   public:  
          3.     static void bar() {  
          4.       std::cout << "bar()" << std::endl;  
          5.     }  
          6. };  

          呵呵。的確是挺怪異的。

          轉(zhuǎn)自iteye
          http://justjavac.iteye.com/blog/1297756

          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/
          posted @ 2011-12-08 19:23 todayx.org 閱讀(1929) | 評論 (6)編輯 收藏
          僅列出標題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 铜川市| 舞钢市| 增城市| 巫山县| 遂平县| 怀柔区| 东海县| 巴塘县| 遂宁市| 富阳市| 文山县| 灵武市| 大丰市| 唐山市| 大足县| 门头沟区| 淮南市| 河源市| 神木县| 尼木县| 温宿县| 自贡市| 衡南县| 惠水县| 清远市| 滁州市| 昌吉市| 天峨县| 昌邑市| 玛纳斯县| 肇源县| 陵川县| 玉溪市| 昌图县| 洛隆县| 文登市| 高台县| 塔河县| 肥城市| 呈贡县| 安国市|