1. 程式人生 > >記一次面試未如願之後靜下心來的個人成長

記一次面試未如願之後靜下心來的個人成長

   早在兩個月之前就想寫一篇blog了,為了記錄自己和大家分享兩場面試的那種興奮而又失落的心情,但又怕那樣的經歷登不了大雅之堂,所以一直逼到現在,不過最近經過一段時間的思考沉澱,總算找到了一些讓自己充實和關注的事情,這些日子規律而簡單,堅持而快樂,思考著,行動著。不在為上班閒而無聊,不在為工作而工作,不在為沒收穫感而想跳槽,氣定神閒,就這樣,挺好!

這篇日誌大體上我劃分了下面幾個大綱:

    一、面試經歷

    二、個人反思和覺悟

    三、閒著自己弄一個網站

    四、在選用資料庫之間做了艱難的決定

    五、改寫一個開源的Crawler專案收錄網路小說

    六、用Lucene.net作為索引工具的一些心得

   七、網站上線一週收錄引擎不搭理重寫網站URL

   八、對網站定時資料庫索引和定時sitemap

   該文章有點長,主要講述這段時間的經歷,涉及到的技術都只是點到,關於具體的實現後面的文章會慢慢概述。

   一、面試經歷

    早在十月份開始,十一收假回來,有了想換工作的想法,不是公司沒前途,不是領導不好相處,不是同事不友善,而是自己就莫名的想換個環境,於是英才網上更新了下簡歷,間間斷斷的收到一些公司的HR電話,經過了一些正面瞭解和側面打聽之後回覆了兩家公司,首先是新蛋網路,其次是InfoSys,涉及到職業道德的問題,我不會直面寫下兩家公司涉及到的筆試題,如果不小心爆料了那些不該爆料的細節問題,還請見諒我的不小心。

新蛋網路是美國的的電子商務公司,在上海這邊經營newegg.cn中國市場,同時技術部支援美國那邊的newegg.com的專案,而我要面試的部門就是支援美國那邊的newegg.com專案,比約定時間提前了十幾分鍾進入他們的辦公大樓,前臺讓我到大廳等候,坐下沒幾分中,觀看了下週圍,很多會議室,漂亮妹妹很多,正準備開會的,人來人往,這一層應該是主要是市場部門和銷售部門的,像個集市,談合同的,打電話的,閒得整個接待大廳沒那麼安靜和本分,沒一會兒時間,我被一個人事部的MM帶到了下面一層,做了些簡單的交代之後把我帶進了一間會議室,給了我一份試卷,這是筆試,我已經習慣了這樣的流程,我大概翻了下題量的頁數,問她多長時間完成,她說題目分兩個部分,一個是非技能題,類似於那種“一個袋子裡有黑、黃、藍三種顏色的球無數,問至少拿出多少個才能保證有兩個相同顏色的球”,另一個就是技能題,會比一些概念題稍微難點,要求一個小時之內完成。對筆試我有一個習慣:一是確定時間,二是把所有的題目先過一遍,大概確定下自己把所有的題做完需要的時間,如果題目是那種變態的基本上答不上來,或者能做得題低於60%,我會直接告訴HR,我不適合,不浪費彼此的時間,然後灰溜溜的拍拍屁股帶著幾分不屑離開,如果題目比較合意,一般會在半個小時到三刻鐘之間把試卷交出去,題目編排還是比較合理的,層次比較分明,有基礎概念題,有前端JS,CSS,HTML的題,有資料庫的題,有設計題,畫流程圖、畫UML圖,有程式碼邏輯和程式碼優雅程度測試題,涉及的面比較廣,而且題量還不大,整個做下來除了一個SQL的題沒做之外,其他的基本上把意思表達出來了,那個SQL題沒做出來是因為我覺得做了也達不到出題人的意圖,它的意思是有兩張表的結果完全相同,請查出兩張表不同的記錄,當時我就覺得要麼是有這種記憶性語法的SQL語句,否則的話是會涉及到演算法的東西。這方面的SQL我是見過,如果用演算法去實現呢,它就不是一條SQL語句的事情,所以我放棄。

      意料之中的進入到了面談階段,來了一個微胖界的小夥,看上去很年輕,帶眼鏡,面帶笑容(這點我非常喜歡,讓我覺得沒多大的距離感),我一邊作自我介紹,他一邊看我的筆試題目,時不時對我簡歷中的一些專案提一些簡短的問題,我都做了輕鬆的應答,不經意中他說他家是山東的,我在濟南上的大學,兩個人都情不自禁的有了親切的感覺,我問他在這邊還吃饅頭吃蒜不,他說基本上還是習慣吃米飯了,我說我反而習慣吃饅頭面條了,我看他時不時在我題目的答案後面給評分,並在自己的面試卡每條後面寫評語,他問了我一些http協議,網路安全,防刷票方面的一些解決方案,對於這些因為以前都經歷過,所以很自然的答上幾條來,他時不時會意一笑,讓我感覺很輕鬆,最後他說他要了解的已經掌握了,讓我等一下,他去找他主管領導來面一下,不一會兒來了一個面板比較白嫩的領導模樣的人,我還是簡單的自我介紹,談了我的工作經歷,我的專案經歷,我現在的工作情況,以及想換工作的原因,他時不時帶著一些英語腔調,問了我好幾個問題,舉一些案例,讓我給解決方案,我能答上來的就沒鬆懈,不瞭解的直接說這個問題不瞭解。他很滿意,說我比較自信,溝通起來不迴避他問題,給我介紹了現在部門的情況,專案的情況,最後問我的期望值,最後他說了句OK,他去找人事跟我談一下。不一會兒,來了一個MM,一邊看我簡歷,一邊說工作三年了,怎麼想換工作?我說想了解電子商務,想積累更成熟的技術,想找一份更有價值感的工作,她又問了工作三年怎麼想到提這麼高的待遇,我說一份付出一份收穫,責任越大回報越大,我相信自己有這個能力要求這個待遇。她默默的點點頭,跟我談公司的福利,工會,保險,公積金,以及平常同事週末活動娛樂專案等,問我最快能什麼時候入職,我當時心裡想這事看來是成了,對她介紹的情況都認真的點頭表示接受,後來談體檢,我說公司兩個月前的體檢報告可以不,她說沒問題,最後要走的時候跟我說了句,對公司即將入職的新員工,人事部會做一個經歷調查,這個是對每個同事都一樣的,我說沒關係,我等你們訊息,她說會這一個星期之內給我通知的,就這樣,面試結束,前前後後兩個多小時,感覺很舒服,心裡樂滋滋的趕地鐵去了,回到家睡了一覺,醒來之後把這是都跟身邊熟悉的人說了下,心裡覺得這事應該是定下來了。

      一個星期的等待,是煎熬的,讓人鬱悶的是在這種煎熬的等待之後卻是一個失落的結果,那是內心確實痛苦的,一個星期之後我逼不著發郵件問了人事,人事的回覆卻是:你的面試結果是:待用人才。有一種被玩了得感覺。

      接到InfoSys的面試通知後,帶著幾分踏實和期待來到公司,還是比約定好的時間提前了10幾分鐘,在保安處登記領了胸牌之後,人事一小姑娘帶我進了一間會議室,簡短的等待之後來了兩個面試官,兩個人看上去都挺年輕,說話卻能給人一種踏實的感覺,給我影響是兩個可靠的人,我很納悶,我面試的技術,居然沒有筆試?從提問的內容來看,我估計一個是負責技術的一個是負責職業規劃的,兩個人提問的口氣都很有親和力,沒有那種非要考到你誓不罷休的雄氣,其中在談到我參與過的一個入口網站是,面試官頓時來了興趣,讓我談了裡面用到的架構,技術,以及部署情況,安全問題,效能問題一帶而出,必要時還讓我在黑板上畫架構圖,部署情況,業務邏輯情況等等,由於實際參與的,畫起來也比較得心應手,邏輯也比較清晰,後面問了一些關於頁面生命週期,Http協議,提供頁面載入速度,改善頁面使用者體驗方面的問題,對於我回答的每一個問題他都沒接著追問而是微笑點頭,另外一個則問了一些職業規劃的問題,比如五年內自己有沒有給自己一個預定的目標,想做到公司什麼職位,或者有沒有想換工作性質方面的問題,對於職業生涯的問題,我回答一般都比較現實並有幾分消極,我說我沒給自己規劃多遠,我只是想把自己職責範圍的事做,做自己該做的事之後再做自己想做的事,很多事或許是水到渠成,想太遠,太累。他又問了我為什麼會想到來我們公司工作,我說我對公司的瞭解就是大公司,世界500強,在這樣的公司會有更多技術的沉澱,有更多規範的積累,有更多優秀的人,我想跟優秀的人在一起,自己也會變得更優秀。兩個人彼此確認了下是否還有要了解的之後,說讓我等一會兒,然後出去了,過一會兒之後領我進來的人事MM進來了,帶了一份卷子,說你面試通過了,做下這份卷子,題做得Ok的話就差不多了,我一看,兩張卷子,正反面都有題,全是英文的,我問她多長時間,她說一個小時,我大概瀏覽了下題,我類個去的,他媽的沒一個技能題,全是邏輯思維題,而且還是英文的,不過大部分都還認識,也就靜下心做了起來,大概10幾分鐘之後,寫了三四個題,這時,認識MM進來了,帶著很誠懇的態度說,抱歉,剛剛溝通出現了點誤會,面試官說你面試結果很OK,不用做題了,你面試通過了,等著人事會跟你溝通聯絡的,我問今天是不是到這裡結束了,她說對的,人事接下來會聯絡你的,果然在兩天後接到了人事的電話,說實話,有點緊張,不知道為什麼,我明顯感覺到自己聲音在電話裡有些顫抖,簡單寒暄之後她說你現在的情況(主要指三年經驗及惡劣的英語水平)公司可能給不了你要的待遇(在填寫人事資料的時候填了),我問就公司現在的薪資制度能開到多少,她說估計要比你期望值少2K,簡短的思考之後我說,考慮到年底了,加上年終獎和現在的待遇情況,我還是不能接受,她說你可以全方面的衡量下,你來公司了證明你是行得了,待遇是可以網上調,對這種空話我是聽不進去的,在我堅持不能接受之後,她說她再去爭取下主管部門的意見看看能不能申請下來,我說好,就這樣結束了。

      之後就不在有音訊,這兩次面試,過程都比較好,結果都未如願。

    二、個人反思和覺悟

      這兩次面試是給我影響最深的,因為都讓我心情跌蕩起伏了,失無所失,有時候壞事未必就是壞事,我現在的工作也差不多那去,國企控股公司,事情少,上班可以聽音樂,可以上網,輕鬆自在,一番的自我安慰之後,我確定了,換工作的事情過了年再考慮了。

     然而對於我來說,我最怕的就是閒著,閒著思路就集中不起來,閒著會想一些不著邊際的事情,閒著會覺得自己沒價值感,閒著會逼壞的。

     要不自己搞個網站,不知道那一瞬間的時候,腦海裡有了這個念想,做什麼樣的網站呢,平常沒事的時候同事都會看小說,我也有看,前端時間還看了《盤龍》,鬱悶的是VIP章節都會到百度搜索免費得看,但是免費小說的廣告真是一塌糊塗,一看就是垃圾站,但是現在免費小說網站多的是,要做點不一樣的,於是我想到了定向搜尋,如果一本小說在我的網站搜尋,可以搜尋出幾十個免費小說網站的地址,按照更新速度排名,這樣讀者追著看得小說就能在第一時間找到那個網站有更新了,這樣看小說就方便多了,確定之後就開始在網上收集資料,查詢相關的東西,理清了思路,開始幹了。

     三、閒著自己弄一個網站

     在確定做一個免費小說網站之後,得先想想域名的事,叫什麼名字好呢,開始找之前一個朋友瞭解了,他是做空間域名代理的,我知道現在域名備案是件麻煩的事,所以問問他那邊能幫忙便捷的給域名備案不,他給我發了一個域名備案需要準備的資料的一個文件,不看不知道,看了就不想搞,那麼多資料要準備,是多麻煩的事兒啊,記得大學裡自己搞一個部落格,買了個域名直接在網上填了些資料,一個星期就稽核通過了,現在要搞那些亂七八糟證件的影印件,頭疼。無賴中,他給出了一個簡單直接的招,找那種別人已經備案好了而沒在用的老域名,我覺得這主意不錯,於是他就給了我一批這樣情況的域名,我去看著域名想名字,看上去順眼的域名我就用搜狗輸入法打這個域名的漢字看出來是什麼,大體瀏覽一遍之後看了一個域名(tiyma.com)還比較簡短,用搜狗打出來的漢字:體驗碼,心裡一亮,就是它了,體驗碼小說網,於是就把這域名定了下來了,“體驗碼小說網,可能是最好的免費小說網站”,我給它的標題。

    四、在選用資料庫之間做了個艱難的決定

    一直以來涉及到的專案用到的資料庫中,oracle用的比較多一些,其次是MSSQL2000和MSSQL2005,有一些專案用到MySQL,所以對Oracle稍微比較熟,但是對我這種瞭解、及使用層次的人員來說,除了一些簡單的查詢語句的優化,索引的優化,T-SQL編寫,儲存過程編寫之外,對資料庫引擎的演算法是一無所知,從操作上來說MSSQL都基本上是介面的,直接,不管是備份、還原、資料同步、分散式資料訂閱操作都非常簡單,Oracle從應用上來說,屬於稍大點的企業級別解決方案採用,它本身對環境的要求就高,oracle服務啟動起來就得佔400多M的記憶體,所以如果在MSSQL和Oracle中來選擇的話,我從應用級別來說我會毫不猶豫的選擇MSSQL資料庫,但是因為多了個MySQL,因為該小說網站去收錄小說章節目錄的時候會併發的往資料庫中插入資料,曾經在一個專案中因為高頻率的往資料庫中讀取資料,導致資料庫佔用系統記憶體一直不停的上升,而且停掉對資料庫的一切操作之後,資料庫佔用的系統記憶體還是沒降下來,這很難讓我理解,為了確定到底在MySQL和MSSQL中選用那一個,我做了個測試,同事開啟1000個執行緒往MySQL和MSSQL中寫資料,以一個小時做為寫資料的時間,測試中發現,MySQL佔用記憶體到420多M之後到了一個頂峰值之後就沒在上升,但是MSSQL到了700多M了還一直上升,有了這個資料了心裡就有答案了,不假思索的就選擇了MySQL資料庫。

    關於MySQL資料庫的下載可以直接從MySQL官方網站:

    資料庫操作工具可以從官網下載MySQL Workbench

    MySQL資料庫的安裝第一次使用多多少少會碰到一些問題,比如更改資料檔案存放路徑,預設是安裝在C盤,還以一些環境變數的配置,每次手動更改My.ini檔案之後都導致了MySQL服務啟動不起來,反覆解除安裝,反覆的安裝之後才把資料庫環境搭建起來。

    五、改寫一個開源的Crawler專案收錄網路小說

     從網上看了一個老外寫得蜘蛛爬蟲程式,它用了socket下載url,用佇列裝載Url地址,下載了看了它原始碼,你可以從這裡下載看看:

     覺得可以網這個專案改改作為我收錄小說的工具,分析了小說站得結構,大致為列表頁面、小說介紹頁面、章節列表頁面,章節內容頁面(這張頁面我不收錄,否則一本小說幾千個章節,一個章節算15k,是沒有伺服器資源來儲存的),所以我需要解析章節列表頁面,得到小說資訊(只得到小說書名即可)從資料庫判斷下是否已經有該站點的該本小說,如果有,返回該小說的章節列表地址,如果沒有,收錄小說的介紹頁面,解析小說資訊,獲取到小說章節列表地址,再收錄小說章節列表頁面,解析小說章節標題,把小說標題儲存起來,下面是簡單的邏輯圖:

   

       對於章節儲存來說,一本小說可能有上千個章節,怎樣來增量儲存章節的資訊,如果是一個沒插入一個章節都判斷下表裡是否存在這個章節的話,那速度將會是非常慢得,那一本小說來說,這次收錄是100個章節,並已經儲存到資料庫,下次收錄可能是105個章節,就是說更新了5個章節,所以我們只要在插入之前獲取該小說上次更新到的最後章節的章節名字,然後從這105個章節裡找出更新了得5個章節直接插入資料庫,那會是比較快的。MySQL有批量插入的方法,速度比較快。

     對小說的章節,我把它分表來儲存了,一個小說站點是一張表,為了以後操作的方便,做到沒增加一個站點的配置就自動建立該站點的小說章節表。下面是我增加小說站點需要配置的資訊截圖: 

    

    細節的東西就不說了,來看看收錄的效果:

   

    現在一個站點2W多本小說,就基本上2個執行緒一個晚上就收錄完,所以對小說更新能及時收錄過來。

    六、用Lucene.net作為索引工具的一些心得

    為了讓讀者更方便,更快捷的搜尋自己想看的小說,我採用Lucene.net作為索引工具建立資料索引,讀者可以根據小說名,作者名,一級分類,二級分類來檢索小說資訊,我想這應該是一個不錯的選擇。

    關於Lucene.net簡介和使用的文章可以在部落格園搜搜看,很多園友已經寫得很詳細,Lucenet.net的SVN地址:

     如果你裝有SVN的話直接checkout就可以檢視原始碼或者直接使用其dll了,目前.net方面的最高版本是2.9.2,起初的思路是實時索引,即每收錄到一本小說,就用Lucene.net提供的介面生產索引檔案,更新一本小說也同時更新索引,但實際操作起來有兩個問題,一個是在2.9.2這個版本下確實有增加索引,更新索引的方法,但是單個增加索引會很慢,更新索引我嘗試了很多次,是不成功的,反而會銷燬之前建立好得索引檔案,所以後來就考慮有定時全庫索引的方法了,這個根據資料量的大小,索引時間會有變化,不過定時索引時間一般在晚上進行,所以影響不大,看看我的定時索引工具:

   

   我把它做成服務來定時執行,也可以手動去執行,生產索引動作。

   七、網站上線一週收錄引擎不搭理重寫網站URL

    網站上線一個星期,有了第一個忠實的讀者,他是qq裡的一個好友,我們不認識,就都因為是做技術的,給我提了很多好得建議,這裡得感謝牛奶糖同學的支援,從上線一週來看,百度不收錄,google收錄比較少,soso稍微多點,因為小說章節比較多,就是爬蟲來怕一本小說也得上千個地址,但是幾個搜尋引擎收錄的地址都不超過一千,我想會不會章節地址沒收錄,會不會是地址Url的原因,於是想到用重寫的方法來看看是不是有效果,於是我把

   http://www.tiyma.com/book/5/23490/ 這樣的形式,這樣爬蟲應該會把它當一個新的地址去收錄,而不會因為是同一個檔名而不收錄。改造後上線第一晚上soso的收錄量增加了1000多,感覺還是挺有收穫感的。

   具體重寫的方法可以看看園子裡這邊文章:

    由於我是影藏了後罪名的重寫,所以需要在IIS上配置下,站點不對url檔案是否存在做檢查,具體配置步驟為:站點à屬性à主目錄à配置à萬用字元應用程式對映à插入,彈出的對話方塊中可執行檔案選擇C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ aspnet_isapi.dll,把下面的“確認檔案是否存在的複選框的勾”去掉,確認就Ok。

   八、對網站定時資料庫索引和定時sitemap

   為了讓引導爬蟲來收錄網站小說資訊,編寫了相應的工具生產站點地圖,一次生產50個站點地圖,對我的站點來說:

       ……

    接下來就是向google提交站點地圖,並編寫相應的robots.txt檔案告訴爬蟲收錄規則,

     一口氣寫這麼長得文章還是第一次,更多的技術實現會在以後的文章中寫出來,太晚了,就這樣草率的結束吧。