1.面試經過
大約在年前我接到了台灣瑞晟(realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業園區面試,接到
面試後的幾天我把一些專業課溫習了一遍,特別是c++和資料結構,由於大學幾年裡,我一直專研這些方面,加上通過了高階程式設計師的考試,對於一些常用的演算法我差不多也 達到了爛熟於胸的地步,當時的感覺是如果問了我這些方面的問題我應該是沒有問題的!
21日那天我被安排在4:30面試,由一位技術人員單獨給我面試,在問了一些簡單的問題之後 ,他給我出了一道程式設計題目,題目是這樣的:
(由於具體面試的題目比較煩瑣,我將其核心思想提取出來分解成……(亂碼)
1) 寫乙個函式計算當引數為n(n很大)時的值 1-2+3-4+5-6+7......+n
哼,我的心裡冷笑一聲!沒想到這麼簡單,我有點緊張的心情頓時放鬆起來!
於是很快我給出我的解法:
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是為使用者服務的,不是為我們程式設計師服務的!」多麼精闢的語言,我已經不想再說 什麼了!接著是第二個問題:
他要求我用一種技巧性的程式設計方法來用乙個函式實現兩個函式的功能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!},
最後得到計算值!呵呵,典型的空間換時間的演算法!
這些總共花了50分鐘的時間,還有十分鐘我就跟他很隨意的聊聊天,聊了一些程式設計以及生活 的問題,那時的我已經很放鬆了,因為我知道這次面試結果只有乙個:失敗。5:30的時候面試官要我等通知,於是我離開了他們公司。這就是面試的整個經過!
2.由面試想到的
真的是很失敗啊!我記得那天下好大的雨,氣溫也很低,我邊走邊想,從5:30一直走到7:30 ,全身都濕透了,又冷又餓,但是我只是一直走,腦子裡面充滿了疑惑,我也想讓雨把自己淋 醒!看到這裡有些朋友可能覺得那些面試題目不算什麼如果讓自己做的話肯定能全部答對,我 肯定相信你,因為我從未懷疑過中國程式設計師的能力,我認為中國有世界上最好的程式設計師,我也 從未認為自己是高手,所以我做不出來不代表中國程式設計師比台灣或者別的地方的程式設計師差,所以我就從我的角度,我的所見所想來談一些感想:
不錯全世界都有優秀的程式設計師,中國也不例外,但是我疑惑的是:到底中國和台灣或者國外 的優秀的程式設計師的比例到底是多少?台灣我不知道,中國100個程式設計師裡有幾個是優秀的呢?我 根本算不上,從上面的表現就足以說明一切了!是1個?5個?10個?50個?這個數字我不敢亂 猜,恐遭網友一頓痛罵,那麼我們國內有多少人學習計算機呢?拿我們學校來說,計算機97級 4個班,98級5個班,99級10個班,2000級17個班,人多了,老師怎麼辦?我們學校的做法是讓 研究生上課,然後呢?補考一抓一大把,大把大把的補考費落入了學校的口袋,還說現在的學生素質低!真是好笑,我都不知道學校這麼做是為了什麼,為國內培養大量的程式設計師嗎?學生 們能真正學到計算機知識嗎?好了,我敢講,在我們學校學習程式設計學生和優秀程式設計師(注意我 指的是優秀,只會編幾個糟爛程式的人算不上)的比例應該是100:0.1 在這種比例下雖然我們中國學習程式設計的人鋪天蓋地,但是想想有多少個人能真正為中國軟體 業發展作出貢獻,有多少人能真正寫出優秀的程式名揚海外!
我從學習程式設計以來,不管是自學還是老師指導,從來都是解決問題就好,編出程式來就行, 我的疑惑是:我們有真正的強調過程式的效率,程式的質量嗎?我們有仔細分析過我們寫的東 西,看看有沒有可以改進的地方,看看有沒有簡單的方法來達到同樣的目的呢?我問心自問, 我發現,我從來沒有對我寫出來的程式進行過優化,最多就是進行詳細的測試,然後debug, 但是這就足夠了嗎?
這些天我偶爾發現我曾經寫過的乙個遊戲,那是一年做為 其中一員時候,感覺應該拿點東西出來,然後花了乙個星期的時間寫出來的!程式不算複雜,但是用到了不少資料結構的東西,也用到了一些精彩的演算法,加上windows
的介面和遊戲的可 玩性,寫完後受到了不少好評,我當時真的很佩服自己!
但是現在看呢:沒有一句注釋,好多 醜陋的函式名比如:void chushihua(),好多沒有必要的變數,可以用簡單語句完成工作的我 使用華麗的演算法,大量使用全域性變數.....,說不好聽的話,六百多行的程式除了能執行之外就是一陀屎!如果一年前我能聽到一些反面意見的話,大概我能早一點覺悟,但是自原**在 **發布以來聽到的都是讚美之詞,沒有乙個人向我提出程式改進的意見,這又說明了乙個什 麼問題呢?很值得思考啊!
還有乙個疑惑是:我們說的和做的真的一樣嗎?我在學校的時候曾經受學院指派承辦過乙個 計算機大賽,請了乙個老師出決賽的題目,主要是一些演算法題目,這個老師可能是我上大學以 來唯一敬佩的老師了,從程式除錯到打分,對於每個程式都仔細分析其時間效率和空間效率, 然後綜合打分,四十個人的卷子,老師從下午三點一直除錯到晚上十點,在有些寫的精彩的語 句後還加上批註。我真是高興很遇到這樣的老師並且和他做深入的交流,但在事後,卻發生了 一件不愉快的事,在比賽中獲得第二名的學生找到我,說他程式全部除錯成功應該給他滿分, 並且應該得第一,我說不過他,最後調出了他的原程式和第一名的原程式對比,錯,兩個程 序都執行的很好,這時,那個同學開口了:「我的程式寫的十分簡捷明了,僅僅數行就完成了 題目要求,而他的卻寫了一大堆,為什麼給他的分多過給我的分。」我當時很是氣憤,如果不 是老師負責的話,那麼現在第一名和第二名的位置真的要互調了,拜託,不是程式的行數越少 程式的質量就越高,我記得我跟他大談這方面的道理,最後說服他了!哈哈,但是我,只能說 說而已,我不知道還有多少人一樣,說起來頭頭是道,但心裡卻壓根就從未重視過它!
又見到面試的畢業生
昨天有見到今年公司進入面試的畢業生來園區面試,抬頭一想,從開始找工作到現在,已經工作快一年了,時間真快,如果讓我給你們建議 慎重選擇自己的工作,至少能夠讓自己工作開心,要對自己有足夠的自信。話說我來這個公司已經10各月,也算進入it行業接近10各月,從乙個以硬體為基礎的行業轉換到遊戲行業還是有很多不...
乙個應屆畢業生程式設計師的獨白
我是一名90後,由於高中學習成績不佳,我上了本市的一所專科院校。不過我還是選擇了我所喜歡的計算機軟體專業,軟體程式設計所帶給我的感覺是很神秘,很有趣的,我也很想像眾多it大牛一樣在這個行業闖出一片天地。從此便開啟了屬於我的程式猿之路。看著網路上琳琅滿目的學習資料,我精心的篩選了一些供自己學習使用。就...
一位大四程式設計師的面試經歷和體會
今天偶在論壇上看見一篇文章,文筆矯捷,邏輯清晰,很有道理,甚合我意,故paste與此,予以自勉。1.面試經過 大約在年前我接到了台灣瑞晟 realtek 蘇州公司的面試通知,通知我2月21日到蘇州工業園區面試,接到 面試後的幾天我把一些專業課溫習了一遍,特別是c 和資料結構,由於大學幾年裡,我一直專...