又到了找工作,跳槽的季節。曾幾何時,大家有沒有懊惱過,為什么簡單得不簡單的編程題,會做得這么辛苦?而且還做不出來。會不會有面試官對你鄙視說,這么簡單的題目都不會做?反正我是沒有見過。做不出來,不是你苯,是因為前面有很多步驟卡住了你。
要解出一道編程題目,首先要經過幾個步驟。
1. 基本類型,基本幾個庫函數名字要記住。防止溢出,記得庫函數的用法,有哪些坑。
2. 如果是C/C++,要注意指針的用法,注意各種內存的管理。
3. 根據具體要求,要實現各種數據結構(鏈表,樹,堆),和與數據結構相應的基本操作函數或者方法。如果能用C++里面的STL自然是更快了。
4. 處理數據使用各種排序,遍歷方法。要識別出應用那種算法,並且自己實現它。雖然算法實現過程看起來簡單,但是他的算法復雜度分析推導過程是比較復雜的,如果你沒有仔細看書體會推導過程,你自己推導是比較難的,那你只能死記硬背算法和他的時間空間復雜度。
5. 經過上面的基本處理,數據已經被各種預處理過,再應用自己設計好的算法去解決問題。如果是動態規划問題,要找出重復最優子結構,還是說這個要遍歷減枝,要使用貪心算法。
6. 考慮各種邊界條件,單元測試。
所以,在解決問題的核心問題之前,你就需要處理這么多問題。這個也是一方面表現了C/C++學習曲線陡峭,如果用腳本語言來是做算法題,那肯定是快很多。如果你做不出來編程題,那你就需要看看自己哪個環節比較薄弱,需要花點時間去補一下,而不是死扣題目,拼命涮題,請把前面幾個步驟的基礎打扎實了。簡單的編程題,其實不簡單,它包含了兩方面(思維方法,代碼實操編寫),這兩者都不簡單,除非你背熟了答案。
在面試的時候如果發生這種情況,面試官認為默認認為你會使用C++ STL,那他心里就會嘀咕,這么簡單的問題,他在搞啥呢?這時候,可能你還在滿頭大汗地實現一個堆結構,還在寫排序。其實應聘者也很糾結,因為有些題目就是要你實現一個數據結構,如果你使用STL,那沒有意義了,或者意義不大,就是簡單證明你會用STL。所以要跟面試官搞清楚能不能使用STL。這也是大家拒絕冷冰冰的筆試的原因,因為希望在解決問題的時候,能與面試官交流,紙上描述並不能囊括題目所有的條件要素,同時面試官也能看清楚應聘者的思考過程,在應聘者遇到小問題卡住,不能進行的時候,能夠給予一些小提示小啟發,看他是否能排除這個小問題,最終解決整個問題。而不是筆試題目答題紙上冷冰冰的對與錯,然后就打發人家回去。
如果哪個面試官說很簡單,那么他也沒有理解編程的每一個知識點,只不過從網上下載的面試題,然后就簡單地扔給應聘者做,然后覺得很簡單,不停地催,這么簡單怎么做這么慢啊?面試者跟他交流,由於他不了解題目,他也會覺得,這么簡單怎么問得這么啰嗦啊。如果被你被這種面試官刷了,即不幸,也幸運,沒有什么大不了的。