由面試想到的

2021-04-09 10:06:09 字數 3042 閱讀 9554

看了下面的這篇文章,深有感觸,棗子碰到的問題也是我們大多數程式設計師的通病,也許我們大多數人都只是在做一些比較小型的軟體,對軟體執行的效率不在乎,就算對速度和效率在乎的也可能是一些在資料庫操作方面的。大家看完了,也許會有很多感想,但這只是我同意棗子的個人觀點。

做為一名大四的學生,我面試過不少的單位,有成功的也有失敗的,但是對我來說所有的失敗在某種意義上都是一種成功,特別是我下面寫的這些,寫這篇文章的時候,我已經簽了南京的一家軟體公司,但是想起今年 2 月 21 日我面試蘇州台灣的it公司的經歷聯想到我們現在學習程式設計的一些情況我真的深有感觸,這次面試使我深深的體會到了失敗但也收穫了很多。

我要說的將分成三部分:

1.是我面試的具體經過

2.是由面試想到的

3.現今我應該做的

long fn(long n)

for(i=1;i<=n;i++)

return temp; }

搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當 n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程式還有什麼可以修改的地方,把程式優化一下!

聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之後我對程式進行了嚴格的分析,給出了改進了的方案!

long fn(long n)

while(j<=n)

return temp; }

雖然我不敢保證我這個演算法是最優的,但是比起上乙個程式,我將所有涉及到乘法指令的語句改為執行加法指令,既達到要題目的要求而且運算時間上縮短了很多!而代價僅僅是增加了乙個整型變數!

但是我現在的信心已經受了一點打擊,我將信將疑的看者面試官,他還是微笑著跟我說:「不錯,這個程式確實在效率上有的很大的提高!」我心裡一陣暗喜!

但他接著說這個程式仍然不能達到他的要求,要我給出更優的方案!天啊!還有優化!我當時真的有點崩潰了,想了一會後,我請求他給出他的方案!然後他很爽快的給出了他的程式!

long fn(long n)

if(0==n%2)

return (n/2)*(-1);

else

return (n/2)*(-1)+n; }

搞笑,當時我目瞪口呆,沒想到他是這個意思,這麼簡單的**我真的不會寫嗎,但是我為什麼沒有往那方面上想呢!

他說的沒有錯,在 n 很大很大的時候這三個程式執行時間的差別簡直是天壤之別!

當我剛想開口說點什麼的時候,他卻先開口了:「不要認為 cpu 運算速度快就把所有的問題都推給它去做,程式設計師應該將**優化再優化,我們自己能做的決不要讓 cpu 做,因為 cpu 是為使用者服務的,不是為我們程式設計師服務的!」

多麼精闢的語言,我已經不想再說什麼了!

接著是第二個問題:

2) 他要求我用一種技巧性的程式設計方法來用乙個函式實現兩個函式的功能 n 為如:fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6!

fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 現在用乙個函式 fn(int n,int flag) 實現,當 flag 為 0 時,實現 fn1 功能,如果flag 為 1 時實現 fn2 功能!他的要求還是效率,效率,效率!

說實在話,如果我心情好的話我應該能給出一種比較好的演算法,但我那時真的沒有什麼心思再想了,我在紙上胡亂畫了一些諸如 6!=6*5! 的公式後直截了當的跟他說要他給出他的答案!

面試官也沒有說什麼,給出了他的思路:

定義乙個二維陣列 float t[2][5] 存入 [2!,3!,4!,5!,6!],[5!,6!,7!,8!,9!] 然後給出乙個迴圈:

for(i=0;i<6;i++)

資料結構、離散數學、編譯原理,這些是所有計算器科學的基礎,如果不掌握他們,很難寫出高水平的程式。據我的觀察,學計算器專業的人比學其它專業的人更能寫出高質量的軟體。程式人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學 oop,即使你再精通 oop,遇到一些基本演算法的時候可能也會束手無策。

2.豐富的想象力

不要拘泥於固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識的基礎上,除計算器以外,多涉獵其它的學科,比如天文、物理、數學等等。另外,多看科幻電影也是乙個很好的途徑。

3.最簡單的是最好的

這也許是所有科學都遵循的一條準則,如此複雜的質能互換原理在愛因斯坦眼裡不過是乙個簡單得不能再簡單的公式:e=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮複雜的方案。

4.不鑽牛角尖

當你遇到障礙的時候,不妨暫時遠離計算機,看看窗外的風景,聽聽輕**,和朋友聊聊天。當我遇到難題的時候會去玩遊戲,而且是那種極暴力的打鬥類遊戲,當負責遊戲的那部分大腦細胞極度亢奮的時候,負責程式設計的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而 解。

5.對答案的渴求

人類自然科學的發展史就是乙個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最後沒有得到答案,在過程中你也會學到很多東西。

6.多與別人交流

三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。

7.良好的程式設計風格

注意養成良好的習慣,**的縮排編排,變數的命名規則要始終保持一致。大家都知道如何排除**中錯誤,卻往往忽視了對注釋的排錯。注釋是程式的乙個重要組成部分,它可以使你的**更容易理解,而如果**已經清楚地表達了你的思想,就不必再加注釋了,如果注釋和**不一致,那就更加糟糕。

8.韌性和毅力

這也許是「高手」和一般程式設計師最大的區別。a good programming is 99 weat and 1 ffee。高手們並不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個 10000以內的素數表,把它們全都抄下來,然後再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。

一次面試想到的

前一階段,公司招乙個軟體開發人員,要求要3年以上的開發經驗,見到許多面試人員,都不是太理想,只慨嘆人才雖多,但良才難求啊。一日,在網上看到乙份簡歷,軟體專業碩士畢業,工作了4年,而且工作經歷,與我的要求很接近,於是興沖沖地約過來面試,這名求職者也很爽快地答應了。hr約好後,我又仔細地瀏覽一下簡歷,發...

由去中興的一次一次面試想到的

話題還是那天的中興的面試和中興計算機培訓,我今天早上突然之間明白了一些事情 於是不敢獨享,和大家一起 這還要從乙個故事說起 以前有乙個很成功的商人,有一次應邀參加乙個演講,他上台後馬上提了乙個問題 如果在座的各位被告知某地有 而這個地方的四周都是海,那你會怎麼做呢?下面的人紛紛議論,當然要馬上僱一艘...

api測試想到的

ps 菜鳥寫的關於檢視資料的一些感想 介面測試就是梳理系統的核心介面函式,並根據引數特點進行http請求,根據輸入的引數特點,檢視返回引數是否符合需求 http請求最主要的包含2個型別即 get post get請求用於讀取資料 post請求用於寫資料 請求的引數可以結合業務使用功能測試的用例設計方...