軟件硬件面試試題集錦_第1頁
軟件硬件面試試題集錦_第2頁
軟件硬件面試試題集錦_第3頁
軟件硬件面試試題集錦_第4頁
軟件硬件面試試題集錦_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件硬件面試試題集錦

軟件/硬件面試試題集錦

紫金飛鴻DigitalCam整理

C/C++編程新手錯誤語錄

作者:宋寶華出處:PConline

1?引言還記得當年學數(shù)學、英語都有個竅門,那就是搞個錯題集。經常復習一下這

個錯

題集,就可以避免下次犯同樣的錯誤。而幾乎所有的程序員都是從犯錯誤開始的,我們也很

有必要總結一下編程新

手的常見錯誤?本文的目的在于此。文中所列出的都是筆者在項目開發(fā)中接觸到的新手真實

的言談,筆者學學文革腔調,姑且稱之為"錯誤語錄"。

2?語錄

(1)"我的程序都是對的,可結果不對"想想你的周圍?是不是也有人說這樣的話?

如果你也曾經說過,那就此打住,不

要再說這句話,因為這句話只會顯示說話者的無知概然程序都是對的那為什么結果不對?

(2)"程序=算法+數(shù)據(jù)結構"

如果剛剛學完C語言?我們說這樣的話,完全可以理解■而且可以說是正確的。

但是如果你是一位即將從事C/C++編程的程序員,那么很遺憾,這個說法只能判錯,殊不知,

世界上還有另一種說法:

程序:對象+消息"程序=算法+數(shù)據(jù)結構”只對面向過程的語言(C)成立,而對

面向對象的語言(C++)?

則只能表述為"程序=對象+消息"。傳統(tǒng)的過程式編程語言以過程為中心以算法為驅動,面

向對象的編程語言則以對象為中心以消息為驅動。這里的消息是廣義的,對象A調用了對象

B的成員函數(shù),可看作對象A給B發(fā)消息。

(3)"程序編出來,運行正確就行了"運行正確的程序并不一定是好程序程序員

時刻要牢記的一條就是自己寫的程序

不僅是給自己看的,要讓別人也能輕易地看懂。很遺憾,許多的編程新手不能清晰地駕馭軟

件的結構?對頭文件和實現(xiàn)文件的概念含糊不清,寫出來的程序可讀性很差。

C程序采用模塊化的編程思想?需合理地將一個很大的軟件劃分為一系列功能獨

立的部分合作完成系統(tǒng)的需求,在模塊的劃分上主要依據(jù)功能。模塊由頭文件和實現(xiàn)文件組

成?對頭文件和實現(xiàn)文件的正確使用方法是:

規(guī)則1頭文件(.h)中是對于該模塊接口的聲明?接口包括該模塊提供給其它模

塊調用的外部

函數(shù)及外部全局變量,對這些變量和函數(shù)都需在.h中文件中冠以extern關鍵字聲明;

規(guī)則2模塊內的函數(shù)和全局變量需在.c文件開頭冠以static關鍵字聲明;

規(guī)則3永遠不要在.h文件中定義變量;

軟件硬件面試試題集錦

許多程序員對定義變量和聲明變量混淆不清,定義變量和聲明變量的區(qū)別在于定

義會產生內存分配的操作,是匯編階段的概念;而聲明則只是告訴包含該聲明的模塊在連接

階段從其它模塊尋找外部函數(shù)和變量。如:

/*模塊1頭文件:modulel.h*/

inta=5;/*在模塊1的.h文件中定義inta*/

/*模塊1實現(xiàn)文件:modulel.c*/

include"modulel.h"/*在模塊1中包含模塊1的.h文件*/

/*模塊2實現(xiàn)文件:module2.c*/

#include"modulel.h"/*在模塊2中包含模塊1的.h文件*/

/*模塊2實現(xiàn)文件:modules.c*/

#include"modulel.h"/*在模塊3中包含模塊1的.h文件*/以上程序的結果

是在模塊1、2、3中都定義了整型變量a?a在不同的模塊中對應不

同的地址單元,這明顯不符合編寫者的本意。正確的做法是:

/*模塊1頭文件:modulel.h*/

externinta;/*在模塊1的.h文件中聲明inta*/

/*模塊[實現(xiàn)文件:modulel.c*/

include"modulel.h"/*在模塊1中包含模塊1的.h文件*/

inta=5;/*在模塊1的.c文件中定義inta*/

/*模塊2實現(xiàn)文件:module?.c*/

include"modulel.h"/*在模塊2中包含模塊1的.h文件*/

/*模塊3實現(xiàn)文件:modules.c*/

include"modulel.h"/*在模塊3中包含模塊1的.h文件*/

這樣如果模塊1、2、3操作a的話,對應的是同一片內存單元。規(guī)

則4如果要用其它模塊定義的變量和函數(shù),直接包含其頭文件即可。

許多程序員喜歡這樣做,當他們要訪問其它模塊定義的變量時,他們在本模塊文件開

頭添加這樣的語句:

externintexternVar;

拋棄這種做法吧?只要頭文件按規(guī)則1完成,某模塊要訪問其它模塊中定義的全

局變量時?只要包含該模塊的頭文件即可。

(4)"數(shù)組名就是指針"許多程序員對數(shù)組名和指針的區(qū)別不甚明了,他們認為數(shù)

組名就是指針,而實際

上數(shù)組名和指針有很大區(qū)別,在使用時要進行正確區(qū)分,其區(qū)分規(guī)則如下:

規(guī)則1數(shù)組名指代一種數(shù)據(jù)結構?這種數(shù)據(jù)結構就是數(shù)組;

例如:

charstr[10];

char*pStr=str;

cout<<sizeof(str)<<endl;

cout<<sizeof(pStr)<<endl;

2

軟件硬件面試試題集錦

輸出結果為:

104

這說明數(shù)組名str指代數(shù)據(jù)結構char[10]-

規(guī)則2數(shù)組名可以轉換為指向其指代實體的指針,而且是一個指針常量,不能

作自增'自減等操作,不能被修改;

charstr[10];

char*pStr=str;

str++;〃編譯出錯?提示str不是左值

pStr++;〃編譯正確

規(guī)則3指向數(shù)組的指針則是另外一種變量類型(在WIN32平臺下,長度為4)?

僅僅意味著數(shù)組的存放地址;

規(guī)則4數(shù)組名作為函數(shù)形參時?在函數(shù)體內?其失去了本身的內涵,僅僅只是

一個指針;很遺憾,在失去其內涵的同時?它還失去了其常量特性,可以作自增、自減等操

作,可以被修改。

例如:

voidarrayTest(charstr[])

{

cout<<sizeof(str)<<endl;〃輸出指針長度

str++;〃編譯正確

)

intmain(intargc,char*argv[])

(

charstrl[10]="ILoveU";

arrayTest(strl);

return0;

)

(5)"整形變量為32位"

整形變量是不是32位這個問題不僅與具體的CPU架構有關而且與編譯器有關。

在嵌入式系統(tǒng)的編程中,一般整數(shù)的位數(shù)等于CPU字長,常用的嵌入式CPU芯片的字長為8、

16'32?因而整形變量的長度可能是8、16、32。在未來64位平臺下,整形變量的長度可

達到64位。

長整形變量的長度一般為CPU字長的2倍。在數(shù)據(jù)結構的設計中,優(yōu)秀的程序

員并不會這樣定義數(shù)據(jù)結構(假設為WIN32

平臺):

typedefstructtagTypeExample

(

unsignedshortx;

unsignedinty;

}TypeExample;

3

軟件硬件面試試題集錦

他們這樣定義:

#defineunsignedshortUINT16//16位無符號整數(shù)

#defineunsignedintUINT32//32位無符號整數(shù)

typedefstructtagTypeExample

(

UINT16x;

UINT32y;

}TypeExample;

這樣定義的數(shù)據(jù)結構非常具有通用性如果上述32平臺上的數(shù)據(jù)發(fā)送到16位平

臺上接收,在16位平臺上僅僅需要修改UINT16-UINT32的定義:

#defineunsignedintUINT16//16位無符號整數(shù)

#defineunsignedlongUINT32//32位無符號整數(shù)

幾乎所有的優(yōu)秀軟件設計文檔都是這樣定義數(shù)據(jù)結構的。

(6)"switch和if...else…可隨意替換”

switch語句和一堆if…else...的組合雖然功能上完全一樣,但是給讀者的感受

完全不一樣。

if...else...的感覺是進行條件判斷?對特例進行特別處理,在邏輯上是"特殊與一般"的父

系,而switch給人的感覺是多個條件的關系是并列的,事物之間不存在特殊與一般的關系?

完全"對等"。

譬如:

〃分別對1-10的數(shù)字進行不同的處理,用switch

switch(num)

{

case1:

case2:

}

〃對1-10之間的數(shù)字進行特殊處理,用if

if(num<10&&num>1)

else

)

許多時候?雖然不同的代碼可實現(xiàn)完全相同的功能,但是給讀者的感覺是完全不

4

軟件硬件面試試題集錦

同的。譬如無條件循環(huán):

while(l)

有的程序員這樣寫:

for(;;)

(

)

這個語法沒有確切表達代碼的含義,我們從for(;;)看不出什么,只有弄明白

for(;;)在C/C++語言中意味著無條件循環(huán)才明白其意。而不懂C/C++語言的讀者看到

while(l)也可猜到這是一個無條件循環(huán)。

(7)"免得麻煩,把類里面的成員函數(shù)都搞成public算了"

許多人編C++程序的時候,都碰到這樣的情況,先前把某個成員函數(shù)定義成類的

private/protected函數(shù)?后來發(fā)現(xiàn)又要從外面調用這個函數(shù),就輕易地將成員函數(shù)改為

public類型的。甚至許多程序員為了避免訪問的麻煩?干脆把自己添加的成員函數(shù)和成員

變量都定義成public類型。

殊不知,這是一種規(guī)劃的失敗。在類的設計階段,我們就要很清晰地知道?這個

類的成員函數(shù)中哪些是這個類的接口?哪些屬于這個類內部的成員函數(shù)和變量。一般的準則

是接口(public成員)

應在滿足需求的前提下盡可能簡單!

所以不要輕易地將private/protected成員改為public成員,真正的工作應該

在規(guī)劃階段完成

3■結束語所有的程序員都要經歷一個從糊涂到清晰的過程,文中的錯誤如果你也犯

了,切

勿自慚。更多的錯誤語錄,希望能在后續(xù)文章中陸續(xù)推出。

一位網(wǎng)友的面試經歷

學習編程的一些情況我真的深有感觸,這次面試使我深深的體會到了失敗但也收獲了很多。

5

軟件硬件面試試題集錦

我要說的將分成三部分:

1.是我面試的具體經過

2.是由面試想到的

3.現(xiàn)今我應該做的。當然這些話很大程度上是我個人的意見,不可能完全得到大家的贊同,

所以在某些觀點上如

果哪位朋友覺得跟我的有很大出入■請不要介意,也不要對我攻擊■就當我沒有說過,歡迎

和我聯(lián)系共同探討這些問題!我的EMAIL:wutao8@263,net

1.面試經過

大約在年前我接到了臺灣瑞晟(Realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業(yè)

園區(qū)面試,接到面試后的幾天我把一些專業(yè)課溫習了一遍,特別是C++和數(shù)據(jù)結構,由于大

學幾年里,我一直專研這些方面,加上通過了高級程序員的考試?對于一些常用的算法我差

不多也達到了爛熟于胸的地步,當時的感覺是如果問了我這些方面的問題我應該是沒有問題

的!

21日那天我被安排在4:30面試■由一位技術人員單獨給我面試,在問了一些簡單的問題

之后他給我出了一道編程題目?題目是這樣的:

(由于具體面試的題目比較煩瑣,我將其核心思想提取出來分解成了兩個獨立的簡單的問題,

有可能問題分解的不當,請大家見諒,實際面試了一個的問題但比其復雜很多?而且涉及一

些高等數(shù)學變換)

1)寫一個函數(shù)計算當參數(shù)為n(n很大)時的值1-2+3-4+5-6+7+n哼,我

的心里冷笑一聲!沒想到這么簡單,我有點緊張的心情頓時放松起來!于是很

快我給出我的解法:

longfn(longn)

longtemp=0;

inti,flag=l;

if(n<=0)

6

軟件硬件面試試題集錦

printf("error:nmust>0);

exit(l);

)

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

{temp=temp+flag*

i;flag=(-l)*flag;

)

returntemp;

}搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執(zhí)行結果肯定是沒有問題!

但當n很大的時候我這個程序執(zhí)行效率很低,在嵌入式系統(tǒng)的開發(fā)中,程序的運行效率很重

要,能讓CPU少執(zhí)行一條指令都是好的?他讓我看看這個程序還有什么可以修改的地方,把

程序優(yōu)化一下!聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之后我

對程序進行了嚴格的分析,給出了改進了的方案!

longfn(longn)

(

longtemp=0;

intj=lj=lzflag=l;

if(n<=0)

{

printf("error:nmust>0);

exit(l);

)

7

軟件硬件面試試題集錦

while(j<=n)

{temp=temp

+i;i=-i;

i>O?i++:i--;

j++;

}

returntemp;

)

-雖然我不敢保證我這個算法是最優(yōu)的,但是比起上一個程序,我將所有涉及到乘法指令的

句改為執(zhí)行加法指令,既達到要題目的要求而且運算時間上縮短了很多!而代價僅僅是增加

了一個整型變量!但是我現(xiàn)在的信心已經受了一點打擊?我將信將疑的看者面試官,他還是

微笑著跟我說:"不錯,這個程序確實在效率上有的很大的提高r'我心里一陣暗喜!但他接

著說這個程序仍然不能達到他的要求?要我給出更優(yōu)的方案!天?。∵€有優(yōu)化!我當時真的

有點崩潰了?想了一會后?我請求他給出他的方案!然后他很爽快的給出了他的程序!

longfn(longn)

(

if(n<=0)

(

printf("error:nmust>0);

exit(l);

}

if(0==n%2)

8

軟件硬件面試試題集錦

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

else

return(n/2)*(-l)+n;

}搞笑■當時我目瞪口呆,沒想到他是這個意思,這么簡單的代碼我真的不會寫嗎,但是我

什么沒有往那方面上想呢!他說的沒有錯,在n很大很大的時候這三個程序運行時間的差別

簡直是天壤之別!當我剛想開口說點什么的時候,他卻先開口了:"不要認為CPU運算速度

快就把所有的問題都推給它去做,程序員應該將代碼優(yōu)化再優(yōu)化,我們自己能做的決不要讓

CPU做,因為CPU是為用戶服務的,不是為我們

程序員服務的!”多么精辟的語言,我已經不想再說什么了!接著是第二個問題:

2).他要求我用一種技巧性的編程方法來用一個函數(shù)實現(xiàn)兩個函數(shù)的功能n為如:

fnl(n)=n/2!+n/3!+n/4!+n/5!+n/6!

fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9!現(xiàn)在用一個函數(shù)fn(intn,intflag)實現(xiàn)?當Hag為

0時■實現(xiàn)fnl功能?如果flag為1時實現(xiàn)fn2功能!他的要求還是效率?效率?效率!

說實在話,如果我心情好的話我應該能給出一種比較好的算法,但我那時真的沒有什么心思

再想了,我在紙上胡亂畫了一些諸如6!=6*5!的公式后直截了當?shù)母f要他給出他的答

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

定義一個二維數(shù)組floatt[2]⑸存入{{2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!}}然后給出一

個循環(huán):

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

temp=temp+n/t[flag];

)最后得到計算值!呵呵,典型的空間換時間的算法!

這些總共花了50分鐘的時間,還有十分鐘我就跟他很隨意的聊聊天,聊了一些編程以及生

活的問題,那時的我已經很放松了?因為我知道這次面試結果只有一個:失敗。5:30的時

候面試官要我等通知,于是我離開了他們公司。這就是面試的整個經過!

9

軟件硬件面試試題集錦

2.由面試想到的

真的是很失敗?。∥矣浀媚翘煜潞么蟮挠?氣溫也很低,我邊走邊想,從5:30一直走到7:30-

全身都濕透了,又冷又餓?但是我只是一直走,腦子里面充滿了疑惑,我也想讓雨把自己淋

醒!看到這里有些朋友可能覺得那些面試題目不算什么如果讓自己做的話肯定能全部答對■

我肯定相信你,因為我從未懷疑過中國程序員的能力?我認為中國有世界上最好的程序員,

我也從未認為自己是高手?所以我做不出來不代表中國程序員比臺灣或者別的地方的程序員

差,所以我就從我的角度?我的所見所想來談一些感想:

不錯全世界都有優(yōu)秀的程序員,中國也不例外,但是我疑惑的是:到底中國和臺灣或者國外

的優(yōu)秀的程序員的比例到底是多少?臺灣我不知道,中國100個程序員里有幾個是優(yōu)秀的呢?

我根本算不上,從上面的表現(xiàn)就足以說明一切了!是1個?5個?10個?50個?這個數(shù)字

我不敢亂猜,恐遭網(wǎng)友一頓痛罵,那么我們國內有多少人學習計算機呢?拿我們學校來說,

計算機97級4個班,98級5個班,99級10個班,2000級17個班,人多了,老師怎么辦?

我們學校的做法是讓研究生上課?然后呢?補考一抓一大把,大把大把的補考費落入了學校

的口袋?還說現(xiàn)在的學生素質低!真是好笑,我都不知道學校這么做是為了什么,為國內培

養(yǎng)大量的程序員嗎?學生們能真正學到計算機知識嗎?好了,我敢講,在我們學校學習編程

學生和優(yōu)秀程序員C主意我指的是優(yōu)秀,只會編幾個糟爛程序的人算不上)的比例應該是

100:0.1

在這種比例下雖然我們中國學習編程的人鋪天蓋地,但是想想有多少個人能真正為中國軟件

業(yè)發(fā)展作出貢獻?有多少人能真正寫出優(yōu)秀的程序名揚海外!

我從學習編程以來,不管是自學還是老師指導?從來都是解決問題就好,編出程序來就行,

我的疑惑是:我們有真正的強調過程序的效率,程序的質量嗎?我們有仔細分析過我們寫的

東西,看看有沒有可以改進的地方,看看有沒有簡單的方法來達到同樣的目的呢?我問心自

問,我發(fā)現(xiàn),我從來沒有對我寫出來的程序進行過優(yōu)化,最多就是進行詳細的測試,然后

Debug,但是這就足夠了嗎?這些天我偶爾發(fā)現(xiàn)我曾經寫過的一個游戲,那是一年前我剛加

入做為其中一員時候,感覺應該拿點東西出來,然后花了一個星期的時間寫出

來的!程序不算復雜,但是用到了不少數(shù)據(jù)結構的東西,也用到了一些精彩的算法,加上

windows的界面和游戲的可玩性?寫完后受到了不少好評?我當時真的很佩服自己!但是現(xiàn)

在看呢:沒有一句注釋,好多丑陋的函數(shù)名比如:voidchushihua。,好多沒有必要的變量,

可以用簡單語句完成工作的我使用華麗的算法,大量使用全局變量..…,說不好聽的話,六

百多行的程序除了能運行之外就是一陀屎!如果一年前我能聽到一些反面意見的話,大概我

能早一點覺悟,但是自從原代碼在網(wǎng)站發(fā)布以來聽到的都是贊美之詞,沒有一個人向我提出

程序改進的意見,這又說明了一個什么問題呢?很值得思考?。?/p>

還有一個疑惑是:我們說的和做的真的一樣嗎?我在學校的時候曾經受學院指派承辦過一個

計算機大賽,請了一個老師出決賽的題目,主要是一些算法題目,這個老師可能是我上大學

以來唯一敬佩的老師了,從程序調試到打分,對于每個程序都仔細分析其時間效率和空間效

率■然后綜合打分-四十個人的卷子,老師從下午三點一直調試到晚上十點■在有些寫的精

彩的語句后還加上批注。我真是高興很遇到這樣的老師并且和他做深入的交流,但在事后,

10

軟件硬件面試試題集錦

卻發(fā)生了一件不愉快的事,在比賽中獲得第二名的學生找到我,說他程序全部調試成功應該

給他滿分?并且應該得第一,我說不過他?最后調出了他的原程序和第一名的原程序對比■

不錯,兩個程序都運行的很好,這時,那個同學開口了:"我的程序寫的十分簡捷明了?僅

僅數(shù)行就完成了題目要求,而他的卻寫了一大堆,為什么給他的分多過給我的分。"我當時

很是氣憤,如果不是老師負責的話,那么現(xiàn)在第一名和第二名的位置真的要互調了?拜托,

不是程序的行數(shù)越少程序的質量就越高,我記得我跟他大談這方面的道理,最后說服他了!

哈哈,但是我?只能說說而已?我不知道還有多少人一樣,說起來頭頭是道,但心里卻壓根

就從未重視過它!

3.我打算做的!

其實那天我想到的遠不止上面那么多,但是我不想再說了,因為我猜想看這篇文章的網(wǎng)友大

概都有一肚子的感想,一肚子的抱怨,借用這篇文章發(fā)泄可不是我想達到的目的,在上面我

把自己罵的一文不值也不是妄自菲薄,但是在某些方面我真的做錯了,或者說是偏離了正確

方向,現(xiàn)在是矯正方向和重整旗鼓的時候了,就象我前面說過的,我相信中國有世界上最好

的程序員,我也相信我的水平不會一直保持現(xiàn)狀?我現(xiàn)在就收拾起牢騷真正的實干起來!

真的很巧,就寫到這里的時候我在網(wǎng)上偶爾發(fā)現(xiàn)了這篇手冊,我不知道這預示著什么,但是

我想如果我照下面這個基本原則一直踏實做下去,我一定會實現(xiàn)我的理想--一名優(yōu)秀的軟

件設計師!

(下面這些文字不是我的原創(chuàng),是我偶爾在網(wǎng)上發(fā)現(xiàn)的,我真的很幸運能看到這些?這篇文

章也隨著下面的文字而結束?我真心的希望您能從這篇文章中得到啟發(fā),這篇文章歡迎大家

隨意轉載,您可以不寫作者是誰?但是請您寫上原創(chuàng),謝謝您的支持)

作者:金蝶中間件公司CT0袁紅崗不知不覺做軟件已經做了十年?有成功的喜悅?也有失敗

的痛苦,但總不敢稱自己是高手-

因為和我心目中真正的高手們比起來,還差的太遠。世界上并沒有成為高手的捷徑,但一些

基本原則是可以遵循的。

1.扎實的基礎。數(shù)據(jù)結構、離散數(shù)學、編譯原理,這些是所有計算機科學的基礎,如果不

掌握他們?很難寫出高水平的程序。據(jù)我的觀察,學計算機專業(yè)的人比學其他專業(yè)的人更能

寫出高質量的軟件。程序人人都會寫,但當你發(fā)現(xiàn)寫到一定程度很難再提高的時候,就應該

想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP?即使你再精通OOP■

遇到一些基本算法的時候可能也會束手無策。

2.豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時候要多想幾種解決問題的方

案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識的基礎上,除計算機以外,

多涉獵其他的學科,比如天文、物理、數(shù)學等等。另外,多看科幻電影也是一個很好的途徑。

3.最簡單的是最好的。這也許是所有科學都遵循的一條準則,如此復雜的質能互換原理在

爰因斯坦眼里不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,

更容易實現(xiàn),也更容易維護。遇到問題時要優(yōu)先考慮最簡單的方案,只有簡單方案不能滿足

要求時再考慮復雜的方案。

11

軟件硬件面試試題集錦

4.不鉆牛角尖。當你遇到障礙的時候?不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,

和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打斗類游戲,當負責

游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。

當重新開始工作的時候?我會發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。

5.對答案的渴求。人類自然科學的發(fā)展史就是一個渴求得到答案的過程,即使只能知道答

案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精

力去探索,即使最后沒有得到答案?在過程中你也會學到很多東西。

6.多與別人交流。三人行必有我?guī)?也許在一次和別人不經意的談話中,就可以迸出靈感

的火花。多上上網(wǎng),看看別人對同一問題的看法,會給你很大的后發(fā)。

7.良好的編程風格。注意養(yǎng)成良好的習慣,代碼的縮進編排,變量的命名規(guī)則要始終保持

一致。大家都知道如何排除代碼中錯誤?卻往往忽視了對注釋的排錯。注釋是程序的一個重

要組成部分?它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想?就不

必再加注釋了,如果注釋和代碼不一致?那就更加糟糕。

8,韌性和毅力。這也許是"高手”和一般程序員最大的區(qū)別。Agoodprogrammingis99weat

and1offee?高手們并不是天才,他們是在無數(shù)個日日夜夜中磨練出來的。成功能給我們

帶來無比的喜悅?但過程卻是無比的枯燥乏味。你不妨做個測試?找個10000以內的素數(shù)表,

把它們全都抄下來?然后再檢查三遍?如果能夠不間斷地完成這一工作,你就可以滿足這一

條。

這些是我這幾年程序員生涯的一點體會,希望能夠給大家有所幫助。

難題,智力急轉彎問題

1.有一個長方形蛋糕,切掉了長方形的一塊(大小和位置隨意)?你怎樣才能直直的一刀下

去,將乘II下的蛋糕切成大小相等的兩塊?

答案:將完整的蛋糕的中心與被切掉的那塊蛋糕的中心連成一條線。這個方法也適用于立方

體!請注意,切掉的那塊蛋糕的大小和位置是隨意的,不要一心想著自己切生日蛋糕的方式,

要跳出這個圈子。

2.有三筐水果,一筐裝的全是蘋果?第二筐裝的全是橘子,第三筐是橘子與蘋果混在一起。

筐上的標簽都是騙人的,(比如?如果標簽寫的是橘子?那么可以售定筐里不會只有橘子,

可能還有蘋果)你的任務是拿出其中一筐?從里面只拿一只水果,然后正確寫出三筐水果的

標簽。

提示:從標著“混合"標簽的筐里拿一只水果?就可以知道另外兩筐裝的是什么水果了。

3.你有八個球。其中一個有破損,因此比其他球輕了一些。你有一架天平用來比較這些球

12

軟件硬件面試試題集錦

的重量。如果只稱兩次,如何找出有破損的那個球?

4.為什么下水道的井蓋是圓的?

提示:方形的對角線比邊長!

其他答案:1圓形的井蓋可以由一個人搬動,因為它可以在地上滾。2圓形的井蓋不必為了

架在井口上而旋轉它的位置?

5.美國有多少輛車?

6.你讓一些人為你工作了七天,你要用一根金條作為報酬。金條被分成七小塊,每天給出

一塊。如果你只能將金條切割兩次,你怎樣分給這些工人?

7.一列時速15英里的火車從洛杉磯出發(fā),駛向紐約。另外一列時速20英里的火車從紐約

出發(fā),駛向洛杉磯。如果一只鳥以每小時25英里的速度飛行,在同一時間從洛杉磯出發(fā)?

在兩列火車之間往返飛行,到火車相遇時為止?鳥飛了多遠?

提示:想想火車的相對速度。

8.你有兩個罐子,分別裝著50個紅色的玻璃球和50個藍色的玻璃球。隨意拿起一個罐子?

然后從里面拿出一個玻璃球。怎樣最大程度地增加讓自己拿到紅色球的機會?利用這種方

法■拿到紅色球的幾率有多大?

9.假設你站在鏡子前,抬起左手,抬起右手,看看鏡中的自己。當你抬起左手時-鏡中的

自己抬起的似乎是右手??墒钱斈阊鲱^時,鏡中的自己也在仰頭,而不是低頭。為什么鏡子

中的影像似乎顛倒了左右,卻沒有顛倒上下?

10.你有5瓶藥,每個藥丸重10克,只有一瓶受到污染的藥丸重量發(fā)生了變化,每個藥丸

重9克。給你一個天平,你怎樣一次就能測出哪一瓶是受到污染的藥呢?

答案:

1給5個瓶子標上1'2'3-4'5°

2從1號瓶中取1個藥丸?2號瓶中取2個藥丸,3號瓶中取3個藥丸,4號瓶中取4個藥

丸?5號瓶中取5個藥丸。

3把它們全部放在天平上稱一下重量。

4現(xiàn)在用1x10+2x10+3x10+4x10+5x10的結果減去測出的重量。

5結果就是裝著被污染的藥丸的瓶子號碼。

13

軟件硬件面試試題集錦

11.如果你有一個容量為5夸脫的水桶和一個容量為3夸脫的水桶,怎樣準確地量出4夸脫

的水?

12.在開汽車的鎖時,應該往哪個方向旋轉鑰匙?

13.如果你可以移動50個州中的任何一個,你會挑哪個?為什么?

14.有4條狗(4只螞蟻或4個人)分別在一個廣場的4個角落里。突然,它們同時以同樣

的速度追趕在自己順時針方向的一個人,而且會緊追這個目標不放。它們需要多少時間才能

相遇■相遇地點在哪里?

提示:它們將在廣場中央相遇?所跑的距離與它們跑的路線無關。

15.從空中放下兩列火車?每列火車都帶著降落傘,降落到一條沒有盡頭的筆直的鐵道上。

兩列火車之間的距離不清楚。兩列車都面向同一個方向。在落地后,降落傘掉在地上,與火

車分離。兩列火車都有一個微芯片,可以控制它們的運動。兩個芯片是相同的。兩列火車都

不知道自己的位置。你需要在芯片中寫入編碼,讓這兩列火車相遇。每行編碼都有一定的執(zhí)

行命令的時間。

你能使用以下指令(而且只能用這些指令):

MF—讓火車朝前開

MB一讓火車朝后開IF(P)—如果火車旁邊有降落傘,這個

條件就得到了滿足。GOTO

答案:

A:MF

IF(P)

GOTOB

GOTOA

B:MF

GOTOB

解釋:第一行只是讓它們離開各自的降落傘。必須讓它們離開自己的降落傘,這樣后面的火

14

軟件硬件面試試題集錦

車才能發(fā)現(xiàn)前面火車的降落傘,這樣就滿足了一個條件■它們就可以跳出起初遵守的編碼。

它們起初都在A這部分循環(huán),直到后面的火車發(fā)現(xiàn)前面火車的降落傘,這時就轉入B:并陷

入B的循環(huán)。前面的火車還是沒有找到降落傘,所以就不停地在A里面循環(huán)。由于每行編碼

都有一定的執(zhí)行命令時間?完成A循環(huán)就比完成B費時,因此后面的火車(在B循環(huán)中)最終

將趕上前面的火車。

村子中有50個人,每人有一條狗。在這50條狗中有病狗(這種病不會傳染)。于是人們就

要找出病狗。每個人可以觀察其他的49條狗,以判斷它們是否生病?只有自己的狗不能看。

觀察后得到的結果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要

槍斃自己的狗,而且每個人只有權利槍斃自己的狗,沒有權利打死其他人的狗。第一天,第

二天都沒有槍響。到了第三天傳來一陣槍聲,問有幾條病狗■如何推算得出?

普天C++面試題目

1?實現(xiàn)雙向鏈表刪除一個節(jié)點P-在節(jié)點P后插入一個節(jié)點,寫出這兩個函數(shù)。

2?寫一個函數(shù),將其中的t都轉換成4個空格。

3-Wi...

1?實現(xiàn)雙向鏈表刪除一個節(jié)點P■在節(jié)點P后插入一個節(jié)點,寫出這兩個函數(shù)。

2?寫一個函數(shù),將其中的t都轉換成4個空格。

3-Windows程序的入口是哪里?寫出Windows消息機制的流程。

4?如何定義和實現(xiàn)一個類的成員函數(shù)為回調函數(shù)?

5-C++里面是不是所有的動作都是main()引起的?如果不是,請舉例。

6-C++里面如何聲明constvoidf(void)函數(shù)為C程序中的庫函數(shù)?

7?下列哪兩個是等同的

intb;

Aconstint*a=&b;

Bconst*inta=&b;

Cconstint*consta=&b;

Dintconst*consta=&b;

8?內聯(lián)函數(shù)在編譯時是否做參數(shù)類型檢查?

voidg(base&b){

15

軟件硬件面試試題集錦

b.play;

voidmain(){

sons;

g(s);

return;

微軟亞洲技術支持中心面試題目

1?進程和線程的差別。

2-Heap與stack的差別。

3-Windows下的內存是如何管理的?

4?介紹.Net和.Net的安全性。

5?客戶端如何訪問.Net組件實現(xiàn)WebService?

6-C/C++編譯器中虛表是如何完成的?

7?談談COM的線程模型。然后討論進程內/外組件的差別。

8?談談IA32下的分頁機制。

9?給兩個變量,如何找出一個帶環(huán)單鏈表中是什么地方出現(xiàn)環(huán)的?

10?在IA32中一共有多少種辦法從用戶態(tài)跳到內核態(tài)?

11?如果只想讓程序有一個實例運行,不能運行兩個。像winamp一樣,只能開一個窗口,

怎樣實現(xiàn)?

12?如何截取鍵盤的響應,讓所有的‘a‘變成‘b'?

13-Apartment在COM中有什么用?為什么要引入?

14■存儲過程是什么?有什么用?有什么優(yōu)點?

15-Template有什么特點?什么時候用?

16?談談WindowsDNA結構的特點和優(yōu)點。

java程序員面試題目看你能回答幾個(付答案)

mandyhou轉貼(參與分:7122專家分:870)發(fā)表2005-10-1513:39版本:1.0閱

讀:1183次

第一?談談final-finally,finalize的區(qū)別。

??第二?AnonymousInnerClass(匿名內部類)是否可以extends(繼承)其它類,是

否可以implements(實現(xiàn))interface(接口)?

16

軟件硬件面試試題集錦

??第三,StaticNestedClass和InnerClass的不同?說得越多越好(面試題有的很籠

統(tǒng))。

??第四,&和&&的區(qū)別。

??第五?HashMap和Hashtable的區(qū)別。

??第六?Collection和Collections的區(qū)別。

??第七,什么時候用assert.

??第八,GC是什么?為什么要有GC?

??第九?Strings=newString("xyz");創(chuàng)建了幾個StringObject?

??第十■Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

??第^~一-shortsi=1;si=si+1;有什么錯?shortsi=1;si+=1;有什么

錯?

??第十二?sleep()和wait()有什么區(qū)別?

??第十三,Java有沒有goto?

??第十四,數(shù)組有沒有l(wèi)ength()這個方法?String有沒有l(wèi)ength()這個方法?

??第十五Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?

??第十六■Set里的元素是不能重復的■那么用什么方法來區(qū)分重復與否呢?是用==還是

equals()?它們有何區(qū)別?

??第十七,給我一"^爾最常見到的runtimeexception.

??第十八?error和exception有什么區(qū)別?

??第十九?List■Set-M叩是否繼承自Collection接口?

??第二十?abstractclass和interface有什么區(qū)別?

??第二H"一?abstract的method是否可同時是static?是否可同時是native■是否可同

時是synchronized?

??第二十二,接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽象類是否

可繼承實體類(concreteclass)?

17

軟件硬件面試試題集錦

??第二十三,啟動一個線程是用run()還是start()?

??第二十四?構造器Constructor是否可被override?

??第二十五?是否可以繼承String類?

??第二十六,當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入

此對象的其它方法?

??第二十七?try{}里有一個return語句?那么緊跟在這個try后的finally{}里的code

會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?

??第二十八?編程題:用最有效率的方法算出2乘以8等於幾?

??第二十九■兩個對象值相同(x.equals(y)==true),但卻可有不同的hashcode■這

句話對不對?

??第三十,當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可

返回變化后的結果?那么這里到底是值傳遞還是引用傳遞?

??第三H■一?swtich是否能作用在byte±?是否能作用在long上?是否能作用在String

上?

??第三十二■編程題:寫一個Singleton出來。

??以下是答案

??第一?談談final■finally■finalize的區(qū)別。

??final?修飾符(關鍵字)如果一個類被聲明為final?意味著它不能再派生出新的子類,

不能作為父類被繼承。因此一個類不能既被聲明為abstract的,又被聲明為final的。將

變量或方法聲明為final-可以保證它們在使用中不被改變。被聲明為final的變量必須在

聲明時給定初值,而在以后的引用中只能讀取?不可修改。被聲明為final的方法也同樣只

能使用,不能重載finally?再異常處理時提供finally塊來執(zhí)行任何清除操作。如果拋

出一個異常,那么相匹配的catch子句就會執(zhí)行,然后控制就會進入finally塊(如果有

的話)。

??finalize?方法名。Java技術允許使用finalize()方法在垃圾收集器將對象從內存中

清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對

這個對象調用的。它是在O5ect類中定義的,因此所有的類都繼承了它。子類覆蓋

finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收

集器刪除對象之前對這個對象調用的。

18

軟件硬件面試試題集錦

??第二■AnonymousInnerClass(匿名內部類)是否可以extends(繼承)其它類,是

否可以implements(實現(xiàn))interface(接口)?

??匿名的內部類是沒有名字的內部類。不能extends(繼承)其它類,但一個內部類可以

作為一個接口?由另一個內部類實現(xiàn)。

??第三?StaticNestedClass和InnerClass的不同?說得越多越好(面試題有的很籠

統(tǒng))。

??NestedClass(一般是C++的說法),InnerClass(一般是JAVA的說法)。Java內部類

與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見http:

///articles/services/view.asp?id=704&page=l

??注:靜態(tài)內部類(InnerClass)意味著1創(chuàng)建一個static內部類的對象,不需要一個

外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象

??第四?&和&&的區(qū)別。

??&是位運算符。&&是布爾邏輯運算符。

??第五?HashMap和Hashtable的區(qū)別。

??都屬于M叩接口的類■實現(xiàn)了將惟一鍵映射到特定的值上。

??HashM叩類沒有分類或者排序。它允許一個null鍵和多個null值。

??Hashtable類似于HashM叩?但是不允許null鍵和null值。它也比HashMap慢?因

為它是同步的。

??第六?Collection和Collections的區(qū)別。

??Collections是個java.util下的類,它包含有各種有關集合操作的靜態(tài)方法。

??Collection是個java.util下的接口,它是各種集合結構的父接口。第七?什么時候用

assert?斷言是一個包含布爾表達式的語句,在執(zhí)行這個語句時假定該表達式為true。如

果表達式

計算為false,那么系統(tǒng)會報告一個AssertionError。它用于調試目的:

assert(a>0);//throwsanAssertionErrorifa<=0

斷言可以有兩種形式:

19

軟件硬件面試試題集錦

assertExpressionl;

assertExpressionl:Expression2;

Expressionl應該總是產生一個布爾值。

Expression2可以是得出一個值的任意表達式。這個值用于生成顯示更多調試信息的

String消息。

斷言在默認情況下是禁用的。要在編譯時后用斷言,需要使用source1.4標記:

javac-source1.4Test.java

要在運行時啟用斷言,可使用-enableassertions或者-ea標記。要在運行時選擇禁用

斷言?可使用-da或者-disableassertions標記。要系統(tǒng)類中官用斷言,可使用-esa

或者-dsa標記。還可以在包的基礎上啟用或者禁用斷言。

可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用于驗證傳遞給私有方法

的參數(shù)。不過,斷言不應該用于驗證傳遞給公有方法的參數(shù),因為不管是否啟用了斷言,公

有方法都必須檢查其參數(shù)。不過?既可以在公有方法中,也可以在非公有方法中利用斷言測

試后置條件。另外,斷言不應該以任何方式改變程序的狀態(tài)。

第八,GC是什么?為什么要有GC?(基礎)。

GC是垃圾收集器。Java程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請

求垃圾收集,可以調用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

第九,Strings=newString("xyz");創(chuàng)建了幾個StringObject?兩個對象?一個

是"xyx",一個是指向"xyx"的引用對象s。第十,Math.round(11.5)等於多少?

Math.round(-11.5)等於多少?Math.roundQ1.5)返回(long)12?Math.round(-

11.5)返回(long)-11;第H~?shortsi=1;si=si+1;有什么錯?shortsi=

1;si+=1;有什么錯?

shortsi=1;si=si+1;有錯?si是short型1sl+1是int型,不能顯式轉化為short

型。可修改為si=(short)(sl+1)。shortsi=1;si+=1正確。

第十二,sleep。和wait()有什么區(qū)別?搞線程的最爰

sleep。方法是使線程停止一段時間的方法。在sleep時間間隔期滿后,線程不一定立即恢

20

軟件硬件面試試題集錦

復執(zhí)行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執(zhí)行,除非(a)

"醒來"的線程具有更高的優(yōu)先級?(b)正在運行的線程因為其它原因而阻塞。

wait。是線

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論