|
時代在進步,瀏覽器也在進步,做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個文件:
上述老瀏覽器的情況,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í),趕不上瀏覽器。
到了年末,又是一年一度寫 “年終總結(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)造的一個 “奇跡” 。
工作變更的事宜快要告一段落了,從電信行業(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)秀的程序員們,需要由足夠厚的臉皮和足夠包容的肚囊,留心生活中的是是非非,好好利用聰慧 的大腦。程序員,也便是這樣成長的。
不知不覺,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ū)們致敬!
原創(chuàng)文章,轉(zhuǎn)載請注明出處:http://yshjava.iteye.com/blog/1338896
看到本文標題,我要說些什么,想必你大概可以知道一些,——小城市(二三線的城市)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ā)展的朋友的共鳴,也希望大家能夠多些交流——讓苦逼的工作多一點兒快樂和談定;一個月前就打算寫這篇博客了,卻拖到今天才算寫完,不是沒有時間,而是 不能靜下心去寫;寫了,也算是聊以平撫下有些躁動的心。
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 |
介紹:
快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因為它的內(nèi)部循環(huán)(inner loop)可以在大部分的架構(gòu)上很有效率地被實現(xiàn)出來,且在大部分真實世界的數(shù)據(jù),可以決定設(shè)計的選擇,減少所需時間的二次方項之可能性。
步驟:
排序效果:
詳細過程:
介紹:
歸并排序(Merge sort,臺灣譯作:合并排序)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用
步驟:
排序效果:
詳細過程:
介紹:
堆積排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。堆是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆性質(zhì):即子結(jié)點的鍵值或索引總是小于(或者大于)它的父節(jié)點。
步驟:
(比較復(fù)雜,自己上網(wǎng)查吧)
排序效果:
詳細過程:
(暫無)
介紹:
選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小元素,然后放到排序序列末尾。以此類推,直到所有元素均排序完畢。
排序效果:
詳細過程:
介紹:
冒泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
步驟:
排序效果:
詳細過程:
介紹:
插入排序(Insertion Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實現(xiàn)上,通常采用in-place排序(即只需用到O(1)的額外空間的排序),因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。
步驟:
排序效果:
(暫無)
詳細過程:
介紹:
希爾排序,也稱遞減增量排序算法,是插入排序的一種高速而穩(wěn)定的改進版本。
希爾排序是基于插入排序的以下兩點性質(zhì)而提出改進方法的:
排序效果:
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年,我一直很堅強的 拼搏下來,很不容易的在杭州立住腳了,說實話,參加工作后的十年,也是不斷拼搏,不斷提高的十年。
這些最為奇怪的程序語言的特性,來自stackoverflow.com,原貼在這里。我摘選了一些例子,的確是比較怪異,讓我們一個一個來看看。
在C/C++中,a[10] 可以寫成 10[a]
“Hello World”[i] 也可以寫成 i["Hello World"]
’5′ + 3 的結(jié)果是:’53′
’5′ – 3 的結(jié)果是:2 更多javascript點擊這里
上面的這段程序會輸出: “LOL|”,這是因為 ??! 被轉(zhuǎn)成了 | ,關(guān)于Trigraphs,下面有個表格:
??= | # |
??( | [ |
??/ | \ |
??) | ] |
??’ | ^ |
??< | { |
??! | | |
??> | } |
??- | ~ |
看到下面這個表,不難理解為什么Javascript程序員為什么痛苦了
為什么會這樣呢?你需要了解一下Java Interger Cache,下面是相關(guān)的程序,注意其中的注釋
其所有的這些怪異的變量請參看:http://www.kichwa.com/quik_ref/spec_variables.html
請看下面這段程序,你覺得其返回true還是false?
在 javascript 和python下,其行為和Java的是一樣的。
下面的這段程序你能看得懂嗎?這就是所謂的Duff Device,相當?shù)墓之悺?/p>
PHP中的某些用法也是很怪異的
呵呵。的確是挺怪異的。