【转来警醒自己】最近的一些面试感悟
公司一直在招人,可合適的人實在不好招。招了一年多,也就招了五六位。而面試中遇到的各種情況讓人唏噓不已。隨便聊聊。
?
1 我們招聘是先在招聘網站上發布信息,然后約投簡歷的人過來,先做一套題,題做得還可以的當場面試。遇到一些哥們,說自己有N年以上開發經驗,不屑于做這些題目。這種人一般直接讓HR請回。
如果我招的是管理職位,讓你做純技術問題,或者招C#程序員給做Python問題,那是我們不對。可職位明明是C#高級工程師,做一套C#的題目不是很正常的么。你有能力也沒必要通過這種方式來表示,通過解決這些問題來展示你的能力不是更好么。當然如果你是Anders那個級別的人,什么面試都沒有意義了。我就找老板親自出面去請你了。但如果不是,最好還是把心態放得平衡一些。
筆試起的是一個篩選的作用,如果你的簡歷能夠說明你的能力,也可以不用筆試。但是很多人分不清工作經驗和能力,十年工作經驗并不能保證你的能力就一定達到某個水準。我就碰到許多兩三年工作經驗的Java程序員不清楚volatile的意思,不知道這個關鍵字和那個著名的DCL bug的關系。
另外這種情況可能也會讓面試官覺得你不好相處與合作,真正有能力的人都是謙遜的,因為他們知道自己不知道,保持一顆謙卑的心才能不斷進步。
?
2 對語言特性掌握不夠。.NET3.5,C#3.0出來好些年了,但很多人還是說不出IQueryable和IEnumerable的區別,還有閉包的實現,yield的實現等。工作中用不到不等于你不必去跟蹤技術的發展。你不去了解怎么知道這些技術能不能在項目中用上。另外對技術的了解不是說會照著turorial寫幾個例子就是OK了,實現不說完全了解,也要知道個大概。一個合格的C#程序員JIT, GC,yield, lambda和閉包的關系,Linq中的表達式樹等是一定要清楚的,如果你新技術跟進足夠快的話DLR中dynamic的實現,TPL庫也需要了解,如果能聊下一版C#可能出現的新特性,會更讓人刮目相看的。同樣,一個C++程序員如果不了解stl,boost, C++0x也不是很妥。你可以不用,但是需要知道有這些優秀的工具供你使用。
3 對閱讀優秀代碼不夠重視。閱讀優秀代碼是很好的一種學習方式。操千曲而后曉聲,觀千劍而后識器。如果只是停留于照著一門技術的sample代碼或者網上流傳的入門教程的地步,顯然是不夠的。這不是對寫入門教程的作者不敬,我很尊重那些原創或者翻譯技術入門教程的同學,也從各種入門教程學了很多東西。但一門技術總會有各種教程難以覆蓋的細節和無法一一列舉的慣用法。C++可以拿來寫過程式的代碼也能做元編程和函數式編程,ruby中不用||=, each慣用法而用if, for, ASP.NET MVC中不用URLHelper生成url而在view中Html.ActionLInk字符串等,不一道哉。這些都是入門教程沒辦法教給你的,但可以從優秀的開源項目中去學習。SourceForge, Google Code, CodePlex應該在你的收藏夾中。
4 對其它基礎知識掌握不扎實。操作系統、數據庫、數據結構和算法是一定要掌握的。一個簡單的數據庫問題,User表包含UserName NVARCHAR(50) NOT NULL, UserType INT NOT NULL。如何保證在UserType=1時UserName不重復,很多人都告訴我先select,判斷username不 存在再插入,當我問起如何處理并發時就告訴我用存儲過程,把這個邏輯放到事務中去。可見很多人沒有清楚理解事務能做什么,不能做什么,并且在工程上考慮不 全面,讓我很郁悶。當然術業有專攻,如果是做算法或者桌面應用的程序員,數據庫不了解是可以接受的。但天天做業務邏輯的程序員不懂SQL, 不了解事務、隔離級別,索引實現與性能調優就說不過去了。但無論哪個方向的程序員,數據結構一定需要有基本的了解。不討論RB Tree, AVL Tree, Suffix Tree這些較復雜的東西,簡單的數組,棧,隊列,查詢排序啥的應該和九九表一樣熟悉。否則,除了做簡單的堆砌業務邏輯,復雜一點的東西就很難擺平了。
5 邏輯推理能力有待提高。筆試中一般會有一兩個邏輯問題,這種問題雖然不直接對應日常的開發工作,但能體現出一個人的解決問題能力,在交流中還能體現出溝通能力。這篇文章說得更清楚。http://blog.sina.com.cn/s/blog_4caedc7a0100nlx2.html。
6 對工具掌握不夠。很多好幾年工作經驗的人不會用unit test,不會查看code coverage和做Profile,設斷點只會F9,編輯代碼只會用IDE. 工欲善其事,必先利其器。用好工具可以成倍的提高你的生產率,《程序員修煉之道》和《卓有成效的程序員》都是好書。
?
聊了這么多面試中遇到的問題,再聊聊技術學習。以下純屬個人見解,不構成指導意見。我不是神人大牛,只是業余寫代碼的QA, 看法難免錯漏,歡迎批評指正。
1 向經典而不是寶典學習。
今年初學Java,辦法就是裝上JDK和Eclipse,看JDK中concurrent和Collection相關的源代碼,然后看了看Spring中IOC實現,cglib和jdk proxy的區別,再用DBUnit和spring中的test框架給組里搭了一個小的數據庫測試工具,明白了JUnit的運行原理和spring test中事務是如何實現的。這些東西書店里的各種寶典是不會教給你的。
2 注重原理而非操作手冊。遠離插圖多,操作多,原理少,剖析少的書。很多東西都是易學難精,因為難精,才更有價值,更需要精。一本 SQLServer書,一步步告訴你怎么在SSMS中創建數據庫,創建表,創建index,這就算了,隨便找個人3天都能會,3天以后就不需要再看的東西就不要浪費這錢買書了。不如攢下來給女朋友買個ipad啥的更能發揮作用。一定要找像《Iniside Microsoft SQL Server 2005》這種明明白白告訴你一條SQL語句從解釋,優化來執行的全過程,一張表是怎么樣存儲在硬盤上的好書。(非書托)
3 關注第一手材料.
多加入一些郵件組或者訂閱一些blog,如VC++ team, C# team, msdn magazine, asp.net等(最近主要關注.NET,只列出了相關的內容)。第一手資料總比第二手新鮮和精確。這兩天搗鼓VS2010的C++,去把VC team的blog翻了一遍,受益匪淺。
4 重視基本功
《深入理解計算機系統》,《算法導論》如果能看明白一半,找工作已經不是問題了,什么框架,什么經驗都是浮云了。
5 關注新技術
今天的小眾技術,明天可能就是主流。比別人先行一步,可能就掌握了先機。但要注意技術的應用前景和生命周期。很多MFC,vxd的擁躉深有體會。還有一點,很多技術都是相通的,用過rails后,再看asp.net mvc,很多時候都會有似曾相似之感。
6 重視工具
工具是雙手的延伸,使用得到能為你節省無數時間。會一個條件斷點,就能給你節省許多中斷,查看,運行,再中斷,查看...的時間。更不用說其它工具和工具組合能帶來的提高。《程序員修煉之道 》和《卓有成效的程序員》里說得很清楚,就不拾人牙慧了。
?
——————————————————————————————————————————————————————————————————————————————
?
讀后感:
???? 有些片面,設計原則(模式),架構設計(IOC, AOP,分布式,Map-Reduce),框架(Spring, struts),業務,對某個產品(比如Sql Server, BI, Reporting service)的深入經驗,還是很有必要的。這些也是不可或缺的因素。
???? 另外English對于外企來講,包括自己看E文書,也是需要的。
???? 團隊合作,創新意識,抗壓能力,改進意識,這些都是優秀程序員的基本素質。
?
???? 雖然片面,但是也揭開了.net甚至大部分程序員的硬傷——不深入!!!我自己就是不夠深入,基礎的東西也是還給老師了,流行的吃飯的技術(C++, Javasctrip, SQL)掌握的也不扎實,只會個C#,這些都是失業的征兆。
?
深入這些東西,對一個普通程序員來講,需要消耗很大的精力和時間的,而且日常工作中還要處理大量的工作。甚至日常工作中,不太可能出現讓你解釋一下SQL Server Index的原理以及B+ Tree。但是,但是,作為一名專業IT技術人員,如果想從事資深技術程序員的路,這些都是必備的。看這些書和文章,都是必經之路,不可跳過。
?
???? 我覺得程序員的核心就是:解決實際問題的能力 & 學習能力。 方向要正確,廣而深,千萬不要雜而膚淺。Java, C#, Js, Ruby, 什么都搞過,但是說不出個123來,這就是悲劇。4.0用上了,對dynamic和var的區別,Linq Expresstion Tree, Dyanmic Query, 自定義DynamicObject來擴展等等,這些都不會的話,別談自己是高級程序員,更別說架構師了。我覺得這些都是基本素養,如果你精力有限,可以作為了解,不必深入,但是如果你連聽都沒聽過,見都沒見過,那也太悲哀了。
?
????? 再說一次,這些知識和原理都不懂的話,別談什么架構師,CTO的。要不然你就是個大忽悠,最討厭不懂技術的人瞎指揮,做錯方案,讓下面的程序員受累。
?
????? 對我來講,研究員是我最喜歡的工作,雖然目前不是,但是我還是很想去百度這樣的大公司工作的。而百度要進去,這些算法什么的都是必須得。所以上面說的對我來講還是很受用的。我不想當很“噓”的架構師,我只想做一個手藝精湛的工匠。路要向上走,但是每一步都要牢靠,否則會摔下去,死的很慘!
?
????? 不要提什么 ”懂業務的比懂代碼的收入高“”只會.net 2.0的,照樣在金融、電信拿著 2-3W每月的高薪“之類的話。評價每個人的角度不同,結果就不同。我不能說我比喬布斯長的高,我就可以BS喬布斯。這里是技術樂園,只從技術角度來評價人,所以你只會.net 2.0,就是低端程序員,談不上什么架構師。
?
????? 最后,不要故意難為人。比如說你不懂Reporting service, Oracle, WPF, Caliburn,也沒用過IdeaBlade, MEF, Ado.net EntityFramework,非得要求你在面試時候說出個123來,這就是2B面試官。面試里面,要么是這些你有經驗,然后問你深入原理知不知道,以前是怎么做的,它里面的實現機制懂不懂,懂多少?要么就是你都沒用過,然后問你懂什么,說一下你懂的技術,然后考一些基本題目,比如算法,數據結構,和數據庫,甚至數學智力題都可以。沒經驗的話,就是看這個人有沒有基礎,有沒有潛力。
?
????? “今天工作不努力,明天努力找工作”。我很喜歡的一句話,送給自己。
?
????? 多一些會思考的程序員,少一些只會用鼠標和現成的API搭積木的人吧。
?
原文:最近的一些面試感悟?
轉載于:https://www.cnblogs.com/prime/archive/2011/10/31/Audition.html
總結
以上是生活随笔為你收集整理的【转来警醒自己】最近的一些面试感悟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.初学MVC3学习笔记1
- 下一篇: 委托与事件以及应用