1. 程式人生 > >阿里騰訊2016校招線上筆試有感

阿里騰訊2016校招線上筆試有感

  今年有一個數字聽起來很可怕。阿里的網申數量去到170W(還未截至網申的數字),技術類毫無疑問是最多的,我估計會超過100W的技術網申。更加悲劇的是,原計劃3000個校招名額突然縮減85%,最後只留下15%的人,只有400多人。這個數字比高考還要殘酷得多…
  我去參加阿里和騰訊的面試純屬是因為想做做他們的網申題目,感受一下自己和國內頂級IT公司的距離。剛剛才寫完騰訊的網申試題,阿里的筆試在8月23號就已經結束了。整體感覺還不錯,不過也發現自己很多知識盲點,現在可以做一下總結和個人感受了,希望可以收穫一些學習上的啟示,順便讓師弟師妹參考參考。

  昨晚阿里騰訊的線上筆試,我有以下的一些感想:

  一、基礎紮實還不夠,還要扎得夠深。
  這兩家公司前幾年的一些試題都可以在網上搜到。對基礎要求非常非常高。以前我們程式設計序,很多時候都是能跑就行了,有BUG就修BUG。而他們的試題往往是從最簡單的程式碼中做最更有深度的挖掘,經常考我們對某種程式語言的理解程度:譬如今晚的試題就有——C++類的變數構造順序,Java容器類的實現原理(採用的資料結構)等等。以往使用這些的時候,都不會搭理原理。至於如何能夠學到那麼深的程度,大概是需要編寫大量的程式碼和排錯吧。
  裡面的試題還涉及到很多很多基礎課程的知識:作業系統中裝置利用率的計算(課本的課後習題),TCP的狀態機(計算機網路),資料庫設計理論等等。這些知識,書本或許可以幫忙翻出答案,但我個人認為是不可能僅從書本上就學好的,必須結合足夠多的實踐才能理解。

  二、基礎知識的交叉運用。
  很多時候,我們學作業系統就是作業系統,學C語言就是C語言,資料結構就是資料結構,而很少會把這三連線起來。在騰訊和阿里的程式設計題目中,都有一道與作業系統相關的程式設計題目。題目的要求大概就是希望學生可以利用資料結構和演算法來處理作業系統內部一些具體的問題:例如系統IO問題,多執行緒下載問題等等。這就要求我們能夠深入作業系統的運作原理,演算法能力足夠強,語言運用要好。
  嘻嘻,這類的程式設計題我都沒做好,死翹翹的,騰訊我直接在這題上交白卷了。

  試題特點我也只能總結出上面那兩點了。本來打算拿裡面的題目來多分析分析,後來感覺也沒那個必要,自己也沒那樣的能力。不過做完這兩家的公司,雖然不知道里面的技術工作,但也可以想象到大公司和小公司的差別。

  前天我去了大學城面試了一家小公司,技術主管是個親切的人,他把公司的業務架構和我說了一遍,希望讓我瞭解崗位的工作。那家小公司主要就是通過web技術對外提供一種測評服務,當然具體的業務實現我沒敢追問。而與之相比的阿里,阿里內部程式設計比較偏Java語言,他們已經有自己定製的Java虛擬機器了,框架就更不用說了。從網申試題來看,不難感覺到阿里和騰訊對基礎的重視,畢竟有足夠深厚地基礎才能更好地理解公司內部的框架,快速讓自己達到公司的要求。

  最後再寫一點點感想。
  基礎決定技術潛力。紮實的基礎可以使我們更快地掌握一門新的技術。我在大三的時候非常榮幸得到導師的指導,耐下心來完成資料結構的編寫和C++的深入學習,雖然現在還沒有感覺到自己有多牛,但是最起碼不會讓自己覺得有心無力。計算機思維是一種難以言表的東西,但它卻真實地存在程式設計人員的內心深處。而真正的牛人往往能夠非常敏銳地聯想到很多基礎的知識並將其交融到一起,形成新的技術產物,讓我等渣渣佩服到五體投地。
  基礎學習是一件很痛苦的事。這是我最想說的。計算機知識體系像一個沙漏狀,上半部的業務實現,框架知識一大堆,下半部的計算機原理,又無比複雜,知識縱橫交錯,而程式設計者往往就是從沙漏的中間開始進入程式設計的世界,無論往上走還是往下走,都是一件非常艱難的事,需要大量的學習。而我個人覺得下層的基礎學習更為艱難,首先內容非常枯燥,要動一個測試來驗證自己的猜想有時候需要非常多的準備,最讓人頭痛的是基礎知識體系的耦合程度,實在太高了,在發現一個BUG的時候,要解決它往往不是單方面的知識,需要非常多其它科目的基礎知識。要靈活地運用自己知道的知識,僅僅看書怎麼可能夠呢?還是上文的那句話,結合實踐,多多折騰是學習計算機最好的捷徑了。

  曾經我懷疑程式設計是不是需要天賦,答案當然是不需要。假如非要說一點來解釋牛人為什麼牛,大概是因為有的人天生就比別人多一點面對挑戰的勇氣和耐心吧。