從我的知乎筆試題目和答案中可以看出我不足在哪裡?
能通過知乎實習生的簡歷刷選,我想我還是很榮幸的。2012/3/21號晚上8點左右,知乎hr給我發了面試題。之後我花了4天時間做了這些這些題。昨天(2012/3/25)晚上11點10分左右,我修補完bug就發過去了。今天(2012/3/26)早上10點左右,我又發了一次,增加 了些說明。一個小時後,hr回復說我沒通過:「由於你的代碼思路不夠清晰,且是windows編程習慣,與知乎目前的技術架構不符,故你未能通過此次筆試」
下面是我寫的代碼:第一題:http://blog.ideapp.us/?p=203第二題:http://blog.ideapp.us/?p=209我想知道我差在哪裡?知乎實習生的要求是什麼?python我是基本新學的,4天里每天起早摸黑寫代碼,一個小時就給我回復,我還是很失落的。-----------------------------------------------
我還有機會,謝謝大家的鼓勵-----------------------------------------------我斷斷續續花了一個星期重寫了一遍第一題: http://blog.ideapp.us/?p=220第二題:http://blog.ideapp.us/?p=224
我覺得誤區在「差」這種想法。
面試不是高考,沒最終牽手不一定自己就差了,就當參加一次非誠勿擾了吧。大概看了一下你第一題的代碼,有幾點愚見,僅供參考。
- 過度面向對象。sender、address都可以用字元串搞定,attachments做成文件名字元串的list,沒必要全都做成類。
- 過度封裝。Utils.isFileExist()沒必要存在,可以直接os.path.isfile();Utils.regex()也沒必要,re.match()搞定。
- 過度設計。本來不複雜的事兒有點被搞的太複雜了,在Python里很多事兒都可以用函數搞定,不需要這麼多類。400多行代碼有點恐怖……如樓上所說,不夠Pythonic。
- 單元測試。建議看一下unitest模塊。
- 編碼問題。如@楊昆 @吳暢 所說。
看得出lz代碼經驗比較豐富,只是Python剛入門,還需要時間學習。繼續加油吧!
不知道題目是不是指定要python。
不斷的強調自己是現學是沒意義的,作為面試官,沒有能力和必要去考證這一點。
既然指出的問題主要是風格,而你又是現學現賣的語言,那也就是說沒有否定你的能力,只是現階段不適合而已,不必過分糾結。別太認真,主要是氣質不符合。有很多面試官會認為你不符合他們的團隊氣質。我不大懂python。但是稍微看了一下。他們所謂的gd2312我個人認為是還是一個比較崩潰的拒絕借口。混用的確不太好。如果應試者能夠在提醒之後認識到這點。那麼還是非常好的程序員。還有,你曬題目需要徵求過面試官同意。windows的確不是一個大問題,一個路徑是小問題,但是必須認識到你的程序在linux無法運行。可能有人認為比較致命就是不用linux的程序員不是好程序。如果你能夠在windows下編寫程序在linux無需調試運行也是非常好的。mozilla公司是相當牛逼,他們也有程序員在windows下編寫程序。如果面試官當時有要求說你的程序將部署在linux環境。那麼你就必須要考慮linux環境。個人還是堅持認為拒絕你的理由有部分是扯淡。繼續堅持,編程不止。
1. 除了前端頁面以外,代碼文件里最好不要出現中文,包括注釋,中文非常容易引起詭異問題;
2. 你的代碼里過度使用面向對象/類了,Java 痕迹過重,你的很多類完全是通過 @staticmethod 把幾個方法集合到一起,導致代碼結構很不清晰;3. 確實是 Windows 編程習慣,把編程作為下一步的發展方向的話,建議早日轉向 Linux/Mac 。我不是知乎員工,以上只是個人看法和建議,僅供參考。我用我的人品保證,@楊昆(面試官)不是一個不尊重實習生/面試者的人,相反他是一個待人和善的人,甚至是對生物和善,他是我認識的第一個素食主義者。
我覺得樓主面試失敗沒有什麼問題,面試官是一個hardcore pythoner,注重代碼的清晰,單元測試和完整性。然而,他關注點正是樓主的弱項,因此lz被拒我覺得是理所當然的。因為面試不是100分的考試,而更像是戀愛,看面試者和面試官/公司是否match,不是說你演算法強項目經驗多就一定會要你。不過我能理解你和樓主的心情,樓主的代碼和博客我看了,確實很強,比我見過的大部分學生,我的學生時期都要強。
但我仍然要說,就像大叔控的蘿莉對正太說 「你真的很萌,但是對不起,我控的是大叔」
Ps:我們也會從這次面試中吸取經驗教訓,努力更全面地考察面試者的綜合能力,謝謝雖然已經單獨回過你的郵件,這裡再補充一下。
你的代碼我昨天都已看過了,答覆也是昨天作出的。和hr轉述的略有不同,我說的是代碼不pythonic,不夠清晰,windows編程習慣。你的代碼文檔一部分是gbk編碼,一部分是utf8編碼,一打開都是亂碼,不得不手動轉碼,我讀的痛苦你可能理會不到。對初學者我不要求你有多熟悉,但期望看到良好的風格.old style class,大量的staticmethod,郵件腳本的gb2312編碼都不是好的習慣。
單從答題情況來說,也不算完全完成要求。第一題,因為都是使用windows路徑的關係,linux環境下無法發送附件,這裡面sohu郵箱的發送還是不成功的。 第二題,服務端和客戶端混在一起的代碼,根本無法在任何生產環境使用,不說代碼隔離,也至少通過配置或參數分開吧,我還得手動改掉了才能運行,也與題目要求不符。
btw,我認為你的動手能力還是不錯的,但是這畢竟不是競賽,速度什麼的不重要,我們更看重好的代碼風格及編程習慣,這在一個團體中尤其重要。
update 2013-1-11: 現在回頭來看,當時因為沒有專門招實習生職位,所以都是卡的正式員工標準。在開始招實習生這近一年收到的諸多筆試中,提問者如果在其中還是比較有優勢的,當然有更好的但作為一個從java轉python的初學者已經很難得。時機不一樣,招的標準也不同, 只能說遺憾了。一看你的代碼就屬於沒怎麼在Linux編過程的。
其實說LZ不夠pythonic,windows編程習慣,歸根結底還是價值觀不符。
要知道,軟體工程不是數學題,沒有唯一答案,在眾多可行方案里,必然要挑一個符合公司技術帶頭人欣賞的方案,並按照此方案所體現的風格去挑選最有執行力的人去實現。
如果把軟體工程比作一場戰爭,勝利的要素有兩條1.合格的將軍,這個大多數求職者恐怕是沒這個機會了。2.快速有執行力的底層士兵,這個位置才是給應聘者的。共產黨是怎麼挑選士兵的,看看入黨申請書如下:
我志願加入中國共產黨,擁護黨的綱領,遵守黨的章程,履行黨員義務,執行黨的決定,嚴守黨的紀律,保守黨的秘密,對黨忠誠,積極工作,為共產主義奮鬥終身,隨時準備為黨和人民犧牲一切,永不叛黨。各位應聘者看看,有半個字說到能力的么 。遵守章程、履行義務、執行決定、嚴守紀律這才是要求。
所以各位應聘失敗的哥們,如果你對你的能力很自信,還被拒了,多半就是從面試或者筆試上體現出來的價值觀對不上。價值觀對不上就不要強求了,去了也不會舒服的。
再說句題外話:很多互聯網公司招聘的標準就是
1.必須有海量用戶的經驗,業務再複雜沒個每秒幾百tps人家都不願意搭理你。2.必須用開源的東西,你要用個IBM的MQ,都不好意思出來見人。其實我覺得對於實習生來說,編碼,windows風格之類的其實都不是很重要的事情。這些東西每個公司的規範都不同,這些東西應該是在公司第一周學會的,而不是在大學四年學會的。而且一周之內就能完全熟悉的玩意兒,根本沒必要拿來當作用人標準。其它的我沒太細看,至於對於題目的理解和對面向對象的理解是差了點,但其實問題不大,是可過可不過的情況。殺掉你的人明顯偏嚴格了一點,這東西原因可能有很多原因,可能牛逼的候選人很多,也可能面試官很看中的地方正好是你的缺點,也有可能是你的優點導致的……等等,總之面試就是很主觀的選擇,沒什麼大不了的。很多牛人在一個地方被相當看好,在另一個地方卻被批得很慘,這都是很正常的,面掛了沒緣分而已,並不代表神馬,繼續努力就是了。
好吧,面試拒絕你的人,總是有一個理由來拒絕你,這是緣分,不能強求。
掛上SSH Tunnel總算是打開了樓主的blog……
代碼看了,我也是python初學者,提提我的幾點淺薄的意見……第一題,我推測應該是想達到類似這樣的效果:
./email.py foo@send.com sender_pw bar@recv.com foo1.zip foo2.pdf foo3.jpg該腳本如上使用命令行參數即可發送郵件。我來寫的話會用上sys.argv、email、smtplib
smtplib熟悉的話,這題還是很容易寫得比較簡潔的;第二題,為什麼我覺得用bash shell寫可能會更方便 &>_&<
這裡只談談對於「最優美的方法將上面的策略與程序分離開」的想法吧……這題我覺得用命令行參數的方法不如用配置文件的方式,import ConfigParser,然後研究一下help(),具體處理起來也不會太難~如@楊昆 所說,你的代碼不夠「Pythonic」,我覺得不是「差」字可以概括的,至少你自己這個評價可能和知乎團隊對你的評價有所差距,所以也不必過於介懷,工作這事兒嘛,又不是真正的考試,沒有絕對的對錯之說,只有合適不合適吧~祝LZ以後的實習大業順利~從你的代碼里可以看出,兄弟你不是特別會用面向對象。而且真的編程習慣全是windows的。但是知乎既然是招實習生,至於要求這麼高嗎?很多畢業4,5年的,你讓他寫這樣的代碼,他都不一定能寫得出來……
有個好心態最重要學生還是學生啊,這事兒都有點兒較真的口味了。當初我們畢業那會兒,好多成績優秀的孩子求職受阻了,對情緒影響很大。而那些稍微差點的則有很好的心態。
每個演算法都是有生命的,建議你在編碼之前,最好做一下這套演算法的原型設計、優化一下演算法流程,這樣你的python代碼就會精鍊不少~祝你好運!
主要問題在於面試的人裡面有人比你更強吧。理由永遠只是個理由,別太當真了。
樓主的水平絕對不錯呀,不過python很多東西都很簡潔呀。可能寫的代碼有點長了
居然能寫出這麼多行代碼, 都寫得很漂亮... 不錯了...
樓主盡可把心情放輕鬆,代碼風格 可以和對方的團隊不太適合罷了。可以看出你的能力還是不錯的,不過既然用了Python 就要有Python的風格吧……我是做Java看了可能也有點過度OOD啊不過,面試官對你的意見呢?你覺得自己有欠缺的話,那剛好是個改進的機會。
如果,你覺得不太算是一回事,那麼也不必糾結,畢竟互聯網公司很多。
不同意大家說的那些東西就不重要了,有些東西看起來只是小問題,實際反映出來的是思維的偏差,會在一些關鍵時候以莫名奇妙的錯誤反映出來的。比如編碼問題,配置文件獨立的問題,真正動手做過一些東西就會發現這些很重要。同是大學生python初學者,與樓主共勉!
實習寫成這樣不錯了。建議看一下《Unix編程藝術》這本書,裡面有些思想還是不錯的。
推薦閱讀:
※知乎密碼忘了怎麼更改?
※為什麼不匿名?
※知乎做知乎專欄的目的是什麼?
※如何給知乎專欄起名字?
※為什麼知乎里討論日本戰國時代的人那麼多?