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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

軟件硬件面試試題集錦

軟件/硬件面試試題集錦

紫金飛鴻DigitalCam整理

C/C++編程新手錯(cuò)誤語(yǔ)錄

作者:宋寶華出處:PConline

1?引言還記得當(dāng)年學(xué)數(shù)學(xué)、英語(yǔ)都有個(gè)竅門(mén),那就是搞個(gè)錯(cuò)題集。經(jīng)常復(fù)習(xí)一下這

個(gè)錯(cuò)

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

有必要總結(jié)一下編程新

手的常見(jiàn)錯(cuò)誤?本文的目的在于此。文中所列出的都是筆者在項(xiàng)目開(kāi)發(fā)中接觸到的新手真實(shí)

的言談,筆者學(xué)學(xué)文革腔調(diào),姑且稱之為"錯(cuò)誤語(yǔ)錄"。

2?語(yǔ)錄

(1)"我的程序都是對(duì)的,可結(jié)果不對(duì)"想想你的周?chē)?是不是也有人說(shuō)這樣的話?

如果你也曾經(jīng)說(shuō)過(guò),那就此打住,不

要再說(shuō)這句話,因?yàn)檫@句話只會(huì)顯示說(shuō)話者的無(wú)知概然程序都是對(duì)的那為什么結(jié)果不對(duì)?

(2)"程序=算法+數(shù)據(jù)結(jié)構(gòu)"

如果剛剛學(xué)完C語(yǔ)言?我們說(shuō)這樣的話,完全可以理解■而且可以說(shuō)是正確的。

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

世界上還有另一種說(shuō)法:

程序:對(duì)象+消息"程序=算法+數(shù)據(jù)結(jié)構(gòu)”只對(duì)面向過(guò)程的語(yǔ)言(C)成立,而對(duì)

面向?qū)ο蟮恼Z(yǔ)言(C++)?

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

向?qū)ο蟮木幊陶Z(yǔ)言則以對(duì)象為中心以消息為驅(qū)動(dòng)。這里的消息是廣義的,對(duì)象A調(diào)用了對(duì)象

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

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

時(shí)刻要牢記的一條就是自己寫(xiě)的程序

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

件的結(jié)構(gòu)?對(duì)頭文件和實(shí)現(xiàn)文件的概念含糊不清,寫(xiě)出來(lái)的程序可讀性很差。

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

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

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

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

塊調(diào)用的外部

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

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

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

軟件硬件面試試題集錦

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

義會(huì)產(chǎn)生內(nèi)存分配的操作,是匯編階段的概念;而聲明則只是告訴包含該聲明的模塊在連接

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

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

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

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

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

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

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

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

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

是在模塊1、2、3中都定義了整型變量a?a在不同的模塊中對(duì)應(yīng)不

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

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

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

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

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

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

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

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

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

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

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

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

許多程序員喜歡這樣做,當(dāng)他們要訪問(wèn)其它模塊定義的變量時(shí),他們?cè)诒灸K文件開(kāi)

頭添加這樣的語(yǔ)句:

externintexternVar;

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

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

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

組名就是指針,而實(shí)際

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

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

例如:

charstr[10];

char*pStr=str;

cout<<sizeof(str)<<endl;

cout<<sizeof(pStr)<<endl;

2

軟件硬件面試試題集錦

輸出結(jié)果為:

104

這說(shuō)明數(shù)組名str指代數(shù)據(jù)結(jié)構(gòu)char[10]-

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

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

charstr[10];

char*pStr=str;

str++;〃編譯出錯(cuò)?提示str不是左值

pStr++;〃編譯正確

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

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

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

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

作,可以被修改。

例如:

voidarrayTest(charstr[])

{

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

str++;〃編譯正確

)

intmain(intargc,char*argv[])

(

charstrl[10]="ILoveU";

arrayTest(strl);

return0;

)

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

整形變量是不是32位這個(gè)問(wèn)題不僅與具體的CPU架構(gòu)有關(guān)而且與編譯器有關(guān)。

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

16'32?因而整形變量的長(zhǎng)度可能是8、16、32。在未來(lái)64位平臺(tái)下,整形變量的長(zhǎng)度可

達(dá)到64位。

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

員并不會(huì)這樣定義數(shù)據(jù)結(jié)構(gòu)(假設(shè)為WIN32

平臺(tái)):

typedefstructtagTypeExample

(

unsignedshortx;

unsignedinty;

}TypeExample;

3

軟件硬件面試試題集錦

他們這樣定義:

#defineunsignedshortUINT16//16位無(wú)符號(hào)整數(shù)

#defineunsignedintUINT32//32位無(wú)符號(hào)整數(shù)

typedefstructtagTypeExample

(

UINT16x;

UINT32y;

}TypeExample;

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

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

#defineunsignedintUINT16//16位無(wú)符號(hào)整數(shù)

#defineunsignedlongUINT32//32位無(wú)符號(hào)整數(shù)

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

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

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

完全不一樣。

if...else...的感覺(jué)是進(jìn)行條件判斷?對(duì)特例進(jìn)行特別處理,在邏輯上是"特殊與一般"的父

系,而switch給人的感覺(jué)是多個(gè)條件的關(guān)系是并列的,事物之間不存在特殊與一般的關(guān)系?

完全"對(duì)等"。

譬如:

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

switch(num)

{

case1:

case2:

}

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

if(num<10&&num>1)

else

)

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

4

軟件硬件面試試題集錦

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

while(l)

有的程序員這樣寫(xiě):

for(;;)

(

)

這個(gè)語(yǔ)法沒(méi)有確切表達(dá)代碼的含義,我們從for(;;)看不出什么,只有弄明白

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

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

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

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

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

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

變量都定義成public類型。

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

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

是接口(public成員)

應(yīng)在滿足需求的前提下盡可能簡(jiǎn)單!

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

在規(guī)劃階段完成

3■結(jié)束語(yǔ)所有的程序員都要經(jīng)歷一個(gè)從糊涂到清晰的過(guò)程,文中的錯(cuò)誤如果你也犯

了,切

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

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

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

5

軟件硬件面試試題集錦

我要說(shuō)的將分成三部分:

1.是我面試的具體經(jīng)過(guò)

2.是由面試想到的

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

所以在某些觀點(diǎn)上如

果哪位朋友覺(jué)得跟我的有很大出入■請(qǐng)不要介意,也不要對(duì)我攻擊■就當(dāng)我沒(méi)有說(shuō)過(guò),歡迎

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

1.面試經(jīng)過(guò)

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

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

學(xué)幾年里,我一直專研這些方面,加上通過(guò)了高級(jí)程序員的考試?對(duì)于一些常用的算法我差

不多也達(dá)到了爛熟于胸的地步,當(dāng)時(shí)的感覺(jué)是如果問(wèn)了我這些方面的問(wèn)題我應(yīng)該是沒(méi)有問(wèn)題

的!

21日那天我被安排在4:30面試■由一位技術(shù)人員單獨(dú)給我面試,在問(wèn)了一些簡(jiǎn)單的問(wèn)題

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

(由于具體面試的題目比較煩瑣,我將其核心思想提取出來(lái)分解成了兩個(gè)獨(dú)立的簡(jiǎn)單的問(wèn)題,

有可能問(wèn)題分解的不當(dāng),請(qǐng)大家見(jiàn)諒,實(shí)際面試了一個(gè)的問(wèn)題但比其復(fù)雜很多?而且涉及一

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

1)寫(xiě)一個(gè)函數(shù)計(jì)算當(dāng)參數(shù)為n(n很大)時(shí)的值1-2+3-4+5-6+7+n哼,我

的心里冷笑一聲!沒(méi)想到這么簡(jiǎn)單,我有點(diǎn)緊張的心情頓時(shí)放松起來(lái)!于是很

快我給出我的解法:

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;

}搞定!當(dāng)我用期待的目光看著面試官的時(shí)候,他微笑著跟我說(shuō),執(zhí)行結(jié)果肯定是沒(méi)有問(wèn)題!

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

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

程序優(yōu)化一下!聽(tīng)了這些話,我的心情當(dāng)時(shí)變的有點(diǎn)沉重,沒(méi)想到他的要求很?chē)?yán)格,之后我

對(duì)程序進(jìn)行了嚴(yán)格的分析,給出了改進(jìn)了的方案!

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;

)

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

語(yǔ)

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

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

微笑著跟我說(shuō):"不錯(cuò),這個(gè)程序確實(shí)在效率上有的很大的提高r'我心里一陣暗喜!但他接

著說(shuō)這個(gè)程序仍然不能達(dá)到他的要求?要我給出更優(yōu)的方案!天啊!還有優(yōu)化!我當(dāng)時(shí)真的

有點(diǎn)崩潰了?想了一會(huì)后?我請(qǐng)求他給出他的方案!然后他很爽快的給出了他的程序!

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;

}搞笑■當(dāng)時(shí)我目瞪口呆,沒(méi)想到他是這個(gè)意思,這么簡(jiǎn)單的代碼我真的不會(huì)寫(xiě)嗎,但是我

什么沒(méi)有往那方面上想呢!他說(shuō)的沒(méi)有錯(cuò),在n很大很大的時(shí)候這三個(gè)程序運(yùn)行時(shí)間的差別

簡(jiǎn)直是天壤之別!當(dāng)我剛想開(kāi)口說(shuō)點(diǎn)什么的時(shí)候,他卻先開(kāi)口了:"不要認(rèn)為CPU運(yùn)算速度

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

CPU做,因?yàn)镃PU是為用戶服務(wù)的,不是為我們

程序員服務(wù)的!”多么精辟的語(yǔ)言,我已經(jīng)不想再說(shuō)什么了!接著是第二個(gè)問(wèn)題:

2).他要求我用一種技巧性的編程方法來(lái)用一個(gè)函數(shù)實(shí)現(xiàn)兩個(gè)函數(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)在用一個(gè)函數(shù)fn(intn,intflag)實(shí)現(xiàn)?當(dāng)Hag為

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

說(shuō)實(shí)在話,如果我心情好的話我應(yīng)該能給出一種比較好的算法,但我那時(shí)真的沒(méi)有什么心思

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

案!面試官也沒(méi)有說(shuō)什么,給出了他的思路:

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

個(gè)循環(huán):

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

temp=temp+n/t[flag];

)最后得到計(jì)算值!呵呵,典型的空間換時(shí)間的算法!

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

活的問(wèn)題,那時(shí)的我已經(jīng)很放松了?因?yàn)槲抑肋@次面試結(jié)果只有一個(gè):失敗。5:30的時(shí)

候面試官要我等通知,于是我離開(kāi)了他們公司。這就是面試的整個(gè)經(jīng)過(guò)!

9

軟件硬件面試試題集錦

2.由面試想到的

真的是很失敗??!我記得那天下好大的雨,氣溫也很低,我邊走邊想,從5:30一直走到7:30-

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

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

我肯定相信你,因?yàn)槲覐奈磻岩蛇^(guò)中國(guó)程序員的能力?我認(rèn)為中國(guó)有世界上最好的程序員,

我也從未認(rèn)為自己是高手?所以我做不出來(lái)不代表中國(guó)程序員比臺(tái)灣或者別的地方的程序員

差,所以我就從我的角度?我的所見(jiàn)所想來(lái)談一些感想:

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

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

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

我不敢亂猜,恐遭網(wǎng)友一頓痛罵,那么我們國(guó)內(nèi)有多少人學(xué)習(xí)計(jì)算機(jī)呢?拿我們學(xué)校來(lái)說(shuō),

計(jì)算機(jī)97級(jí)4個(gè)班,98級(jí)5個(gè)班,99級(jí)10個(gè)班,2000級(jí)17個(gè)班,人多了,老師怎么辦?

我們學(xué)校的做法是讓研究生上課?然后呢?補(bǔ)考一抓一大把,大把大把的補(bǔ)考費(fèi)落入了學(xué)校

的口袋?還說(shuō)現(xiàn)在的學(xué)生素質(zhì)低!真是好笑,我都不知道學(xué)校這么做是為了什么,為國(guó)內(nèi)培

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

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

100:0.1

在這種比例下雖然我們中國(guó)學(xué)習(xí)編程的人鋪天蓋地,但是想想有多少個(gè)人能真正為中國(guó)軟件

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

我從學(xué)習(xí)編程以來(lái),不管是自學(xué)還是老師指導(dǎo)?從來(lái)都是解決問(wèn)題就好,編出程序來(lái)就行,

我的疑惑是:我們有真正的強(qiáng)調(diào)過(guò)程序的效率,程序的質(zhì)量嗎?我們有仔細(xì)分析過(guò)我們寫(xiě)的

東西,看看有沒(méi)有可以改進(jìn)的地方,看看有沒(méi)有簡(jiǎn)單的方法來(lái)達(dá)到同樣的目的呢?我問(wèn)心自

問(wèn),我發(fā)現(xiàn),我從來(lái)沒(méi)有對(duì)我寫(xiě)出來(lái)的程序進(jìn)行過(guò)優(yōu)化,最多就是進(jìn)行詳細(xì)的測(cè)試,然后

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

入做為其中一員時(shí)候,感覺(jué)應(yīng)該拿點(diǎn)東西出來(lái),然后花了一個(gè)星期的時(shí)間寫(xiě)出

來(lái)的!程序不算復(fù)雜,但是用到了不少數(shù)據(jù)結(jié)構(gòu)的東西,也用到了一些精彩的算法,加上

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

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

可以用簡(jiǎn)單語(yǔ)句完成工作的我使用華麗的算法,大量使用全局變量..…,說(shuō)不好聽(tīng)的話,六

百多行的程序除了能運(yùn)行之外就是一陀屎!如果一年前我能聽(tīng)到一些反面意見(jiàn)的話,大概我

能早一點(diǎn)覺(jué)悟,但是自從原代碼在網(wǎng)站發(fā)布以來(lái)聽(tīng)到的都是贊美之詞,沒(méi)有一個(gè)人向我提出

程序改進(jìn)的意見(jiàn),這又說(shuō)明了一個(gè)什么問(wèn)題呢?很值得思考啊!

還有一個(gè)疑惑是:我們說(shuō)的和做的真的一樣嗎?我在學(xué)校的時(shí)候曾經(jīng)受學(xué)院指派承辦過(guò)一個(gè)

計(jì)算機(jī)大賽,請(qǐng)了一個(gè)老師出決賽的題目,主要是一些算法題目,這個(gè)老師可能是我上大學(xué)

以來(lái)唯一敬佩的老師了,從程序調(diào)試到打分,對(duì)于每個(gè)程序都仔細(xì)分析其時(shí)間效率和空間效

率■然后綜合打分-四十個(gè)人的卷子,老師從下午三點(diǎn)一直調(diào)試到晚上十點(diǎn)■在有些寫(xiě)的精

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

10

軟件硬件面試試題集錦

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

給他滿分?并且應(yīng)該得第一,我說(shuō)不過(guò)他?最后調(diào)出了他的原程序和第一名的原程序?qū)Ρ取?/p>

不錯(cuò),兩個(gè)程序都運(yùn)行的很好,這時(shí),那個(gè)同學(xué)開(kāi)口了:"我的程序?qū)懙氖趾?jiǎn)捷明了?僅

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

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

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

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

就從未重視過(guò)它!

3.我打算做的!

其實(shí)那天我想到的遠(yuǎn)不止上面那么多,但是我不想再說(shuō)了,因?yàn)槲也孪肟催@篇文章的網(wǎng)友大

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

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

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

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

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

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

件設(shè)計(jì)師!

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

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

隨意轉(zhuǎn)載,您可以不寫(xiě)作者是誰(shuí)?但是請(qǐng)您寫(xiě)上原創(chuàng),謝謝您的支持)

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

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

因?yàn)楹臀倚哪恐姓嬲母呤謧儽绕饋?lái),還差的太遠(yuǎn)。世界上并沒(méi)有成為高手的捷徑,但一些

基本原則是可以遵循的。

1.扎實(shí)的基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、編譯原理,這些是所有計(jì)算機(jī)科學(xué)的基礎(chǔ),如果不

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

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

想想是不是要回過(guò)頭來(lái)學(xué)學(xué)這些最基本的理論。不要一開(kāi)始就去學(xué)OOP?即使你再精通OOP■

遇到一些基本算法的時(shí)候可能也會(huì)束手無(wú)策。

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

案,試試別人從沒(méi)想過(guò)的方法。豐富的想象力是建立在豐富的知識(shí)的基礎(chǔ)上,除計(jì)算機(jī)以外,

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

3.最簡(jiǎn)單的是最好的。這也許是所有科學(xué)都遵循的一條準(zhǔn)則,如此復(fù)雜的質(zhì)能互換原理在

爰因斯坦眼里不過(guò)是一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的公式:E=mc2。簡(jiǎn)單的方法更容易被人理解,

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

要求時(shí)再考慮復(fù)雜的方案。

11

軟件硬件面試試題集錦

4.不鉆牛角尖。當(dāng)你遇到障礙的時(shí)候?不妨?xí)簳r(shí)遠(yuǎn)離電腦,看看窗外的風(fēng)景,聽(tīng)聽(tīng)輕音樂(lè),

和朋友聊聊天。當(dāng)我遇到難題的時(shí)候會(huì)去玩游戲,而且是那種極暴力的打斗類游戲,當(dāng)負(fù)責(zé)

游戲的那部分大腦細(xì)胞極度亢奮的時(shí)候,負(fù)責(zé)編程的那部分大腦細(xì)胞就得到了充分的休息。

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

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

案的一小部分也值得我們?nèi)ジ冻觥V灰銏?jiān)定信念,一定要找到問(wèn)題的答案,你才會(huì)付出精

力去探索,即使最后沒(méi)有得到答案?在過(guò)程中你也會(huì)學(xué)到很多東西。

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

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

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

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

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

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

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

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

帶來(lái)無(wú)比的喜悅?但過(guò)程卻是無(wú)比的枯燥乏味。你不妨做個(gè)測(cè)試?找個(gè)10000以內(nèi)的素?cái)?shù)表,

把它們?nèi)汲聛?lái)?然后再檢查三遍?如果能夠不間斷地完成這一工作,你就可以滿足這一

條。

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

難題,智力急轉(zhuǎn)彎問(wèn)題

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

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

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

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

要跳出這個(gè)圈子。

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

筐上的標(biāo)簽都是騙人的,(比如?如果標(biāo)簽寫(xiě)的是橘子?那么可以售定筐里不會(huì)只有橘子,

可能還有蘋(píng)果)你的任務(wù)是拿出其中一筐?從里面只拿一只水果,然后正確寫(xiě)出三筐水果的

標(biāo)簽。

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

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

12

軟件硬件面試試題集錦

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

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

提示:方形的對(duì)角線比邊長(zhǎng)!

其他答案:1圓形的井蓋可以由一個(gè)人搬動(dòng),因?yàn)樗梢栽诘厣蠞L。2圓形的井蓋不必為了

架在井口上而旋轉(zhuǎn)它的位置?

5.美國(guó)有多少輛車(chē)?

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

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

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

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

在兩列火車(chē)之間往返飛行,到火車(chē)相遇時(shí)為止?鳥(niǎo)飛了多遠(yuǎn)?

提示:想想火車(chē)的相對(duì)速度。

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

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

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

9.假設(shè)你站在鏡子前,抬起左手,抬起右手,看看鏡中的自己。當(dāng)你抬起左手時(shí)-鏡中的

自己抬起的似乎是右手??墒钱?dāng)你仰頭時(shí),鏡中的自己也在仰頭,而不是低頭。為什么鏡子

中的影像似乎顛倒了左右,卻沒(méi)有顛倒上下?

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

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

答案:

1給5個(gè)瓶子標(biāo)上1'2'3-4'5°

2從1號(hào)瓶中取1個(gè)藥丸?2號(hào)瓶中取2個(gè)藥丸,3號(hào)瓶中取3個(gè)藥丸,4號(hào)瓶中取4個(gè)藥

丸?5號(hào)瓶中取5個(gè)藥丸。

3把它們?nèi)糠旁谔炱缴戏Q一下重量。

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

5結(jié)果就是裝著被污染的藥丸的瓶子號(hào)碼。

13

軟件硬件面試試題集錦

11.如果你有一個(gè)容量為5夸脫的水桶和一個(gè)容量為3夸脫的水桶,怎樣準(zhǔn)確地量出4夸脫

的水?

12.在開(kāi)汽車(chē)的鎖時(shí),應(yīng)該往哪個(gè)方向旋轉(zhuǎn)鑰匙?

13.如果你可以移動(dòng)50個(gè)州中的任何一個(gè),你會(huì)挑哪個(gè)?為什么?

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

的速度追趕在自己順時(shí)針?lè)较虻囊粋€(gè)人,而且會(huì)緊追這個(gè)目標(biāo)不放。它們需要多少時(shí)間才能

相遇■相遇地點(diǎn)在哪里?

提示:它們將在廣場(chǎng)中央相遇?所跑的距離與它們跑的路線無(wú)關(guān)。

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

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

車(chē)分離。兩列火車(chē)都有一個(gè)微芯片,可以控制它們的運(yùn)動(dòng)。兩個(gè)芯片是相同的。兩列火車(chē)都

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

行命令的時(shí)間。

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

MF—讓火車(chē)朝前開(kāi)

MB一讓火車(chē)朝后開(kāi)IF(P)—如果火車(chē)旁邊有降落傘,這個(gè)

條件就得到了滿足。GOTO

答案:

A:MF

IF(P)

GOTOB

GOTOA

B:MF

GOTOB

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

14

軟件硬件面試試題集錦

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

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

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

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

將趕上前面的火車(chē)。

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

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

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

槍斃自己的狗,而且每個(gè)人只有權(quán)利槍斃自己的狗,沒(méi)有權(quán)利打死其他人的狗。第一天,第

二天都沒(méi)有槍響。到了第三天傳來(lái)一陣槍聲,問(wèn)有幾條病狗■如何推算得出?

普天C++面試題目

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

2?寫(xiě)一個(gè)函數(shù),將其中的t都轉(zhuǎn)換成4個(gè)空格。

3-Wi...

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

2?寫(xiě)一個(gè)函數(shù),將其中的t都轉(zhuǎn)換成4個(gè)空格。

3-Windows程序的入口是哪里?寫(xiě)出Windows消息機(jī)制的流程。

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

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

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

7?下列哪兩個(gè)是等同的

intb;

Aconstint*a=&b;

Bconst*inta=&b;

Cconstint*consta=&b;

Dintconst*consta=&b;

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

voidg(base&b){

15

軟件硬件面試試題集錦

b.play;

voidmain(){

sons;

g(s);

return;

微軟亞洲技術(shù)支持中心面試題目

1?進(jìn)程和線程的差別。

2-Heap與stack的差別。

3-Windows下的內(nèi)存是如何管理的?

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

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

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

7?談?wù)凜OM的線程模型。然后討論進(jìn)程內(nèi)/外組件的差別。

8?談?wù)処A32下的分頁(yè)機(jī)制。

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

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

11?如果只想讓程序有一個(gè)實(shí)例運(yùn)行,不能運(yùn)行兩個(gè)。像winamp一樣,只能開(kāi)一個(gè)窗口,

怎樣實(shí)現(xiàn)?

12?如何截取鍵盤(pán)的響應(yīng),讓所有的‘a(chǎn)‘變成‘b'?

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

14■存儲(chǔ)過(guò)程是什么?有什么用?有什么優(yōu)點(diǎn)?

15-Template有什么特點(diǎn)?什么時(shí)候用?

16?談?wù)刉indowsDNA結(jié)構(gòu)的特點(diǎn)和優(yōu)點(diǎn)。

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

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

讀:1183次

第一?談?wù)刦inal-finally,finalize的區(qū)別。

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

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

16

軟件硬件面試試題集錦

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

統(tǒng))。

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

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

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

??第七,什么時(shí)候用assert.

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

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

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

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

錯(cuò)?

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

??第十三,Java有沒(méi)有g(shù)oto?

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

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

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

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

??第十七,給我一"^爾最常見(jiàn)到的runtimeexception.

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

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

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

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

時(shí)是synchronized?

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

可繼承實(shí)體類(concreteclass)?

17

軟件硬件面試試題集錦

??第二十三,啟動(dòng)一個(gè)線程是用run()還是start()?

??第二十四?構(gòu)造器Constructor是否可被override?

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

??第二十六,當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入

此對(duì)象的其它方法?

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

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

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

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

句話對(duì)不對(duì)?

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

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

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

上?

??第三十二■編程題:寫(xiě)一個(gè)Singleton出來(lái)。

??以下是答案

??第一?談?wù)刦inal■finally■finalize的區(qū)別。

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

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

變量或方法聲明為final-可以保證它們?cè)谑褂弥胁槐桓淖?。被聲明為final的變量必須在

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

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

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

的話)。

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

清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)

這個(gè)對(duì)象調(diào)用的。它是在O5ect類中定義的,因此所有的類都繼承了它。子類覆蓋

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

集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。

18

軟件硬件面試試題集錦

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

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

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

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

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

統(tǒng))。

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

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

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

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

外部類對(duì)象,2不能從一個(gè)static內(nèi)部類的一個(gè)對(duì)象訪問(wèn)一個(gè)外部類對(duì)象

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

??&是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。

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

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

??HashM叩類沒(méi)有分類或者排序。它允許一個(gè)null鍵和多個(gè)null值。

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

為它是同步的。

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

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

??Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。第七?什么時(shí)候用

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

果表達(dá)式

計(jì)算為false,那么系統(tǒng)會(huì)報(bào)告一個(gè)AssertionError。它用于調(diào)試目的:

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

斷言可以有兩種形式:

19

軟件硬件面試試題集錦

assertExpressionl;

assertExpressionl:Expression2;

Expressionl應(yīng)該總是產(chǎn)生一個(gè)布爾值。

Expression2可以是得出一個(gè)值的任意表達(dá)式。這個(gè)值用于生成顯示更多調(diào)試信息的

String消息。

斷言在默認(rèn)情況下是禁用的。要在編譯時(shí)后用斷言,需要使用source1.4標(biāo)記:

javac-source1.4Test.java

要在運(yùn)行時(shí)啟用斷言,可使用-enableassertions或者-ea標(biāo)記。要在運(yùn)行時(shí)選擇禁用

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

或者-dsa標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。

可以在預(yù)計(jì)正常情況下不會(huì)到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法

的參數(shù)。不過(guò),斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌?公

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

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

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

GC是垃圾收集器。Java程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。要請(qǐng)

求垃圾收集,可以調(diào)用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

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

是"xyx",一個(gè)是指向"xyx"的引用對(duì)象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;有什么錯(cuò)?shortsi=

1;si+=1;有什么錯(cuò)?

shortsi=1;si=si+1;有錯(cuò)?si是short型1sl+1是int型,不能顯式轉(zhuǎn)化為short

型??尚薷臑閟i=(short)(sl+1)。shortsi=1;si+=1正確。

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

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

20

軟件硬件面試試題集錦

復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒(méi)有被調(diào)度為放棄執(zhí)行,除非(a)

"醒來(lái)"的線程具有更高的優(yōu)先級(jí)?(b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?/p>

wait。是線

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論