国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

學編程的人不能不看的好文章(1)

2019-11-18 13:41:19
字體:
來源:轉載
供稿:網友

  學編程的人不能不看的好文章(1)

做為一名大四的學生,我面試過不少的單位,有成功的也有失敗的,但是對我來說所有的失敗在某種意義上都是一種成功,非凡是我下面寫的這些,寫這篇文章的時候,我已經簽了南京的一家軟件公司,但是想起今年2月21日我面試蘇州臺灣的99v公司的經歷聯想到我們現在學習編程的一些情況我真的深有感慨,這次面試使我深深的體會到了失敗但也收獲了很多。我要說的將分成三部分,
1.是我面試的具體經過
2.是由面試想到的
3.現今我應該做的。
當然這些話很大程度上是我個人的意見,不可能完全得到大家的贊同,所以在某些觀點上假如哪位朋友覺得跟我的有很大出入,請不要介意,也不要對我攻擊,就當我沒有說過,歡迎和我聯系共同探討這些問題!我的EMAIL:wutao8@263.net
1.面試經過大約在年前我接到了臺灣瑞晟(Realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業園區面試,接到面試后的幾天我把一些專業課溫習了一遍,非凡是C++和數據結構,由于大學幾年里,我一直專研這些方面,加上通過了高級程序員的考試,對于一些常用的算法我差不多也達到了爛熟于胸的地步,當時的感覺是假如問了我這些方面的問題我應該是沒有問題的!21日那天我被安排在4:30面試,由一位技術人員單獨給我面試,在問了一些簡單的問題之后他給我出了一道編程題目,題目是這樣的:
(由于具體面試的題目比較煩瑣,我將其核心思想提取出來分解成了兩個獨立的簡單的問題,有可能問題分解的不當,請大家見諒,實際面試了一個的問題但比其復雜很多,而且涉及一些高等數學變換)
1) 寫一個函數計算當參數為n(n很大)時的值 1-2+3-4+5-6+7......+n
哼,我的心里冷笑一聲!沒想到這么簡單,我有點緊張的心情頓時放松起來!
于是很快我給出我的解法:
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當n很大的時候我這個程序執行效率很低,在嵌入式系統的開發中,程序的運行效率很重要,能讓CPU少執行一條指令都是好的,他讓我看看這個程序還有什么可以修改的地方,把程序優化一下!聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之后我對程序進行了嚴格的分析,給出了改進了的方案!
long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
雖然我不敢保證我這個算法是最優的,但是比起上一個程序,我將所有涉及到乘法指令的語句改為執行加法指令,既達到要題目的要求而且運算時間上縮短了很多!而代價僅僅是增加了一個整型變量!但是我現在的信心已經受了一點打擊,我將信將疑的看者面試官,他還是微笑著跟我說:“不錯,這個程序確實在效率上有的很大的提高!”我心里一陣暗喜!但他接著說這個程序仍然不能達到他的要求,要我給出更優的方案!天啊!還有優化!我當時真的有點崩潰了,想了一會后,我請求他給出他的方案!然后他很爽快的給出了他的程序!
long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
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!的公式后直截了當的跟他說要他給出他的答案!面試官也沒有說什么,給出了他的思路:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滁州市| 蒲城县| 丰县| 突泉县| 林芝县| 洛南县| 耿马| 吉安市| 日喀则市| 宜昌市| 恭城| 环江| 庄河市| 鞍山市| 哈尔滨市| 萍乡市| 休宁县| 外汇| 汉中市| 深水埗区| 丰台区| 灵宝市| 苏尼特右旗| 华亭县| 鄂尔多斯市| 延川县| 错那县| 潮州市| 宾川县| 永吉县| 崇明县| 固始县| 图木舒克市| 宜黄县| 涿鹿县| 孙吴县| 依兰县| 宝坻区| 乌兰察布市| 威宁| 威远县|