bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

java面試常用的代碼題,java面試題中常見(jiàn)編程題

java面試題

1. List 以特定次序來(lái)持有元素,可有重復(fù)元素。 Set 無(wú)法擁有重復(fù)元素 , 內(nèi) 部

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括金城江網(wǎng)站建設(shè)、金城江網(wǎng)站制作、金城江網(wǎng)頁(yè)制作以及金城江網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,金城江網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到金城江省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

排序。 Map 保存 key-value 值, value 可多值。

2. ArrayList 是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入 元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢, 而LinkedList 使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷 ,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。

3.try 用來(lái)指定一塊預(yù)防所有 “ 異常 ” 的程序;

catch 子句緊跟在 try 塊后面,用來(lái)指定你想要捕捉的 “ 異常 ” 的類型;

throw 語(yǔ)句用來(lái)明確地拋出一個(gè) “ 異常 ” ;

throws 用來(lái)標(biāo)明一個(gè)成員函數(shù)可能拋出的各種 “ 異常 ” ;

Finally 為確保一段代碼不管發(fā)生什么 “ 異常 ” 都被執(zhí)行一段代碼;

可以在一個(gè)成員函數(shù)調(diào)用的外面寫(xiě)一個(gè) try 語(yǔ)句,在這個(gè)成員函數(shù)內(nèi)部寫(xiě)另 一

個(gè) try 語(yǔ)句保護(hù)其他代碼。每當(dāng)遇到一個(gè) try 語(yǔ)句, “ 異常 ” 的框架就放到堆 棧

上面,直到所有的 try 語(yǔ)句都完成。如果下一級(jí)的 try 語(yǔ)句沒(méi)有對(duì)某種 “ 異常 ”

進(jìn)行處理,堆棧就會(huì)展開(kāi),直到遇到有處理這種 “ 異常 ” 的 try 語(yǔ)句。

4. Java 通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在 Java 中,每個(gè)異常都是一個(gè)對(duì)象,它是 Throwable 類或其它子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該對(duì)象中包含 有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。 Java 的異常處理是通過(guò) 5 個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的: try 、 catch 、 throw 、 throws 和 finally 。一般情況下是用 try 來(lái)執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出( throws )一 個(gè)異常,這時(shí)候你可以通過(guò)它的類型來(lái)捕捉( catch )它,或最后( finally )由 缺省處理器來(lái)處理。

Java常見(jiàn)的面試問(wèn)題(帶答案),自己答出來(lái)多少

1、在java中如果聲明一個(gè)類為final,表示什么意思?

答:final是最終的意思,final可用于定義變量、方法和類但含義不同,聲明為final的類不能被繼承。

父類的構(gòu)造方法是否可以被子類覆蓋(重寫(xiě))?

答:父類的構(gòu)造方法不可以被子類覆蓋,因?yàn)楦割惡妥宇惖念惷遣豢赡芤粯拥摹?/p>

2、請(qǐng)講述String 和StringBuffer的區(qū)別。

答:String 類所定義的對(duì)象是用于存放”長(zhǎng)度固定”的字符串。

StringBuffer類所定義的對(duì)象是用于存放”長(zhǎng)度可變動(dòng)”的字符串。

3、如果有兩個(gè)類A、B(注意不是接口),你想同時(shí)使用這兩個(gè)類的功能,那么你會(huì)如何編寫(xiě)這個(gè)C類呢?

答:因?yàn)轭怉、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那么C類就能實(shí)現(xiàn)A、B類的功能了。假如A為B的父類,B為C的父類,此時(shí)C就能實(shí)現(xiàn)A、B的功能。

4、談?wù)勀銓?duì)抽象類和接口的理解。

答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據(jù)自身需要擴(kuò)展抽象類、抽象類不能實(shí)例化、抽象方法沒(méi)有函數(shù)體、抽象方法必須在子類中給出具體實(shí)現(xiàn)。他使用extends來(lái)繼承。

接口:一個(gè)接口允許一個(gè)類從幾個(gè)接口繼承而來(lái),Java 程序一次只能繼承一個(gè)類但可以實(shí)現(xiàn)幾個(gè)接口,接口不能有任何具體的方法,接口也可用來(lái)定義可由類使用的一組常量。其實(shí)現(xiàn)方式是interface來(lái)實(shí)現(xiàn)。

5、Java中什么是競(jìng)態(tài)條件?

答:競(jìng)態(tài)條件會(huì)導(dǎo)致程序在并發(fā)情況下出現(xiàn)一些bugs。多線程對(duì)一些資源的競(jìng)爭(zhēng)的時(shí)候就會(huì)產(chǎn)生競(jìng)態(tài)條件,如果首先要執(zhí)行的程序競(jìng)爭(zhēng)失敗排到后面執(zhí)行了,那么整個(gè)程序就會(huì)出現(xiàn)一些不確定的bugs。這種bugs很難發(fā)現(xiàn)而且會(huì)重復(fù)出現(xiàn),因?yàn)榫€程間的隨機(jī)競(jìng)爭(zhēng)。

6、Java中如何停止一個(gè)線程?

答:Java提供了很豐富的API但沒(méi)有為停止線程提供API。JDK 1.0本來(lái)有一些像stop(), suspend() 和 resume()的控制方法但是由于潛在的死鎖威脅因此在后續(xù)的JDK版本中他們被棄用了,之后Java API的設(shè)計(jì)者就沒(méi)有提供一個(gè)兼容且線程安全的方法來(lái)停止一個(gè)線程。當(dāng)run() 或者 call() 方法執(zhí)行完的時(shí)候線程會(huì)自動(dòng)結(jié)束,如果要手動(dòng)結(jié)束一個(gè)線程,你可以用volatile 布爾變量來(lái)退出run()方法的循環(huán)或者是取消任務(wù)來(lái)中斷線程。點(diǎn)擊這里查看示例代碼。

7、 一個(gè)線程運(yùn)行時(shí)發(fā)生異常會(huì)怎樣?

答: 簡(jiǎn)單的說(shuō),如果異常沒(méi)有被捕獲該線程將會(huì)停止執(zhí)行。Thread.UncaughtExceptionHandler是用于處理未捕獲異常造成線程突然中斷情況的一個(gè)內(nèi)嵌接口。當(dāng)一個(gè)未捕獲異常將造成線程中斷的時(shí)候JVM會(huì)使用Thread.getUncaughtExceptionHandler()來(lái)查詢線程的UncaughtExceptionHandler并將線程和異常作為參數(shù)傳遞給handler的uncaughtException()方法進(jìn)行處理。

java中一些常見(jiàn)的面試比較題

JAVA 面試題匯總

一、 JAVA 基礎(chǔ)知識(shí)

1、面向?qū)ο蟮奶卣饔心男┓矫?/p>

1.抽象:

抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。

2.繼承:

繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過(guò)程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。

3.封裝:

封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。

4. 多態(tài)性:

多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題。

2、String 是最基本的數(shù)據(jù)類型嗎?

基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean 和short。

java.lang.String 類是final 類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer 類

3、int 和 Integer 有什么區(qū)別

Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int 是java 的原始數(shù)據(jù)類型,Integer是java 為int 提供的封裝類。Java 為每個(gè)原始類型提供了封裝類。

原始類型封裝類

booleanBoolean

charCharacter

byteByte

shortShort

intInteger

longLong

floatFloat

doubleDouble

引用類型和原始類型的行為完全不同,并且它們具有不同的語(yǔ)義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問(wèn)題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對(duì)象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。

4、String 和StringBuffer 的區(qū)別

JAVA 平臺(tái)提供了兩個(gè)類:String 和StringBuffer,它們可以儲(chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String 類提供了數(shù)值不可改變的字符串。而這個(gè)StringBuffer 類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer 。典型地,你可以使用

StringBuffers 來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。

5、運(yùn)行時(shí)異常與一般異常有何異同?

異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤。java 編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。

6、說(shuō)出Servlet 的生命周期,并說(shuō)出Servlet 和CGI 的區(qū)別。

Servlet 被服務(wù)器實(shí)例化后,容器運(yùn)行其init 方法,請(qǐng)求到達(dá)時(shí)運(yùn)行其service 方法,service 方法自動(dòng)派遣運(yùn)行與請(qǐng)求對(duì)應(yīng)的doXXX 方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy 方法。與cgi 的區(qū)別在于servlet 處于服務(wù)器進(jìn)程中,它通過(guò)多線程方式運(yùn)行其service 方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請(qǐng)求,并且其實(shí)例一般不會(huì)銷毀,而CGI 對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。

7、說(shuō)出ArrayList,Vector, LinkedList 的存儲(chǔ)性能和特性

ArrayList 和Vector 都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector 由于使用了synchronized 方法(線程安全),通常性能上較ArrayList差,而LinkedList 使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。

8、EJB 是基于哪些技術(shù)實(shí)現(xiàn)的?并說(shuō)出SessionBean 和EntityBean 的區(qū)別,StatefulBean 和 StatelessBean 的區(qū)別。

EJB 包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT 等技術(shù)實(shí)現(xiàn)。SessionBean 在J2EE 應(yīng)用程序中被用來(lái)完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問(wèn)數(shù)據(jù)庫(kù)、調(diào)用其他EJB 組件。EntityBean 被用來(lái)代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。

對(duì)于客戶機(jī),SessionBean 是一種非持久性對(duì)象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。對(duì)于客戶機(jī),EntityBean 是一種持久性對(duì)象,它代表一個(gè)存儲(chǔ)在持久性存儲(chǔ)器中的實(shí)體的對(duì)象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。

Session Bean 還可以再細(xì)分為 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean 都可以將系統(tǒng)邏輯放在 method 之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來(lái)說(shuō),一個(gè)使用者會(huì)有一個(gè)相對(duì)應(yīng)的 Stateful Session Bean 的實(shí)體。Stateless Session Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說(shuō)當(dāng)使用者呼叫 Stateless Session Bean 的時(shí)候, EJB Container 并不會(huì)找尋特定的 Stateless Session Bean 的實(shí)體來(lái)執(zhí)行這個(gè) method。換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè) Stateless Session Bean 的 methods 時(shí),會(huì)是同一個(gè) Bean 的 Instance 在執(zhí)行。從內(nèi)存方面來(lái)看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會(huì)消耗 J2EE Server 較多的內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢(shì)卻在于他可以維持使用者的狀態(tài)。

9、Collection 和 Collections 的區(qū)別。

Collection 是集合類的上級(jí)接口,繼承與他的接口主要有Set 和List.

Collections 是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。

10、和的區(qū)別。

是位運(yùn)算符,表示按位與運(yùn)算,是邏輯運(yùn)算符,表示邏輯與(and)。

11、HashMap 和Hashtable 的區(qū)別。

HashMap 是Hashtable 的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map 接口,主要區(qū)別在于 HashMap 允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。

HashMap 允許將null 作為一個(gè)entry 的key 或者value,而Hashtable 不允許。

HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。Hashtable 繼承自Dictionary 類,而HashMap 是Java1.2 引進(jìn)的Map interface 的一個(gè)實(shí)現(xiàn)。最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多個(gè)線程訪問(wèn)Hashtable,不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步。Hashtable 和HashMap 采用的hash/rehash 算法都大概一樣,所以性能不會(huì)有很大的差異。

12、final, finally, finalize 的區(qū)別。

final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally 是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。

finalize 是Object 類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。

final—修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為 abstract 的,又被聲明為final 的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal 的變量必須在聲明時(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)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。

13、sleep() 和 wait() 有什么區(qū)別?

sleep 是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep 不會(huì)釋放對(duì)象鎖。

wait 是Object 類的方法,對(duì)此對(duì)象調(diào)用wait 方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify 方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。

sleep()方法是使線程停止一段時(shí)間的方法。在sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒(méi)有被調(diào)度為放棄執(zhí)行,除非(a)“醒來(lái)”的線程具有更高的優(yōu)先級(jí) (b)正在運(yùn)行的線程因?yàn)槠渌蚨枞ait()是線程交互時(shí),如果線程對(duì)一個(gè)同步對(duì)象x 發(fā)出一個(gè)wait()調(diào)用,該線程會(huì)暫停執(zhí)行,被調(diào)對(duì)象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)間到。

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

方法的重寫(xiě)Overriding 和重載Overloading 是Java 多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding 是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading 是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded 的方法是可以改變返回值的類型。

15、error 和exception 有什么區(qū)別?

error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。

16、同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明。

如果數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。

當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。

17、abstract class 和interface 有什么區(qū)別?

聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只可以定義static final 成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類 型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口。

18、heap 和stack 有什么區(qū)別。

棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的一個(gè)組成元素

19、forward 和redirect 的區(qū)別

forward 是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問(wèn)目標(biāo)地址的URL,把那個(gè)URL 的響應(yīng)內(nèi)容讀取過(guò)來(lái),然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來(lái)的,所以它的地址欄中還是原來(lái)的地址。

redirect 就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來(lái)說(shuō)瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request 參數(shù)都可以獲取。

20、EJB 與JAVA BEAN 的區(qū)別?

Java Bean 是可復(fù)用的組件,對(duì)Java Bean 并沒(méi)有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java 類都可以是一個(gè)Bean。但通常情況下,由于Java Bean 是被容器所創(chuàng)建(如Tomcat)的,所以Java Bean 應(yīng)具有一個(gè)無(wú)參的構(gòu)造器,另外,通常Java Bean 還要實(shí)現(xiàn)Serializable 接口用于實(shí)現(xiàn)Bean 的持久性。Java Bean 實(shí)際上相當(dāng)于微軟COM 模型中的本地進(jìn)程內(nèi)COM 組件,它是不能被跨進(jìn)程訪問(wèn)的。Enterprise Java Bean 相當(dāng)于DCOM,即分布式組件。它是基于Java 的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB 可以被遠(yuǎn)程訪問(wèn)(跨進(jìn)程、跨計(jì)算機(jī))。但EJB 必須被布署在諸如Webspere、WebLogic 這樣的容器中,EJB 客戶從不直接訪問(wèn)真正的EJB 組件,而是通過(guò)其容器訪問(wèn)。EJB 容器是EJB 組件的代理,EJB 組件由容 器所創(chuàng)建和管理。客戶通過(guò)容器來(lái)訪問(wèn)真正的EJB 組件。

21、Static Nested Class 和 Inner Class 的不同。

Static Nested Class 是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。

22、JSP 中動(dòng)態(tài)INCLUDE 與靜態(tài)INCLUDE 的區(qū)別?

動(dòng)態(tài)INCLUDE 用jsp:include 動(dòng)作實(shí)現(xiàn) jsp:include page="included.jsp" flush="true"/它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數(shù)。

靜態(tài)INCLUDE 用include 偽碼實(shí)現(xiàn), 定不會(huì)檢查所含文件的變化, 適用于包含靜態(tài)頁(yè)面

%@ include file="included.htm" %

23、什么時(shí)候用assert。

assertion(斷言)在軟件開(kāi)發(fā)中是一種常用的調(diào)試方式,很多開(kāi)發(fā)語(yǔ)言中都支持這種機(jī)制。在實(shí)現(xiàn)中,assertion 就是在程序中的一條語(yǔ)句,它對(duì)一個(gè)boolean 表達(dá)式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean 表達(dá)式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來(lái)說(shuō),assertion 用于保證程序最基本、關(guān)鍵的正確性。assertion 檢查通常在開(kāi)發(fā)和測(cè)試時(shí)開(kāi)啟。為了提高性能,在軟件發(fā)布后,assertion 檢查通常是關(guān)閉的。斷言是一個(gè)包含布爾表達(dá)式的語(yǔ)句,在執(zhí)行這個(gè)語(yǔ)句時(shí)假定該表達(dá)式為 true。如果表達(dá)式計(jì)算為false,那么系統(tǒng)會(huì)報(bào)告一個(gè) Assertionerror。它用于調(diào)試目的:assert(a 0); // throws an Assertionerror if a = 0斷言可以有兩種形式:assert Expression1 ;assert Expression1 : Expression2 ;Expression1 應(yīng)該總是產(chǎn)生一個(gè)布爾值。Expression2 可以是得出一個(gè)值的任意表達(dá)式。這個(gè)值用于生成顯示更多調(diào)試信息的 String 消息。斷言在默認(rèn)情況下是禁用的。要在編譯時(shí)啟用斷言,需要使用 source 1.4 標(biāo)記:javac -source 1.4 Test.java

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

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

要系統(tǒng)類中啟用斷言,可使用 -esa 或者 -dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言??梢栽陬A(yù)計(jì)正常情況下不會(huì)到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過(guò),斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还?是否啟用了斷言,公有方法都必須檢查其參數(shù)。不過(guò),既可以在公有方法中,也可以在非公有方法中利用斷言測(cè)試后置條件。另外,斷言不應(yīng)該以任何方式改變程序 的狀態(tài)。

24、GC 是什么? 為什么要有GC?

GC 是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問(wèn)題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java 提供的GC 功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java 語(yǔ)言沒(méi)有提供釋放已分配內(nèi)存的顯示操作方法。

25、short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?

short s1 = 1; s1 = s1 + 1; (s1+1 運(yùn)算結(jié)果是int 型,需要強(qiáng)制轉(zhuǎn)換類型)

short s1 = 1; s1 += 1;(可以正確編譯)

26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

round 方法返回與參數(shù)最接近的長(zhǎng)整數(shù),參數(shù)加1/2 后求其floor.

27、String s = new String("xyz" ;創(chuàng)建了幾個(gè)String Object?

兩個(gè)對(duì)象,一個(gè)是“xyx”,一個(gè)是指向“xyz”的引用對(duì)象s。

28、如果系統(tǒng)要使用超大整數(shù)(超過(guò)long 長(zhǎng)度范圍),請(qǐng)你設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)這種超大型數(shù)字

以及設(shè)計(jì)一種算法來(lái)實(shí)現(xiàn)超大整數(shù)加法運(yùn)算)。

public class BigInt()

{

int[] ArrOne = new ArrOne[1000];

String intString="";

public int[] Arr(String s)

{

intString = s;

for(int i=0;iArrOne.leght;i++)

29、Java 有沒(méi)有g(shù)oto?

java 中的保留字,現(xiàn)在沒(méi)有在java 中使用。

30、啟動(dòng)一個(gè)線程是用run()還是start()?

啟動(dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM

調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。

Java基礎(chǔ)面試題都有哪些?

一般面試官都會(huì)讓面試者回答哪些Java基礎(chǔ)面試題啊?難不難啊? 針對(duì)這一系列的疑問(wèn),廣州增城Java培訓(xùn)學(xué)校收集了部分Java基礎(chǔ)面試題與大家分享,希望對(duì)各位參加了廣州專業(yè)Java培訓(xùn)的學(xué)生,有一定的幫助! 一、Java基礎(chǔ)知識(shí) 1.Java有那些基本數(shù)據(jù)類型,String是不是基本數(shù)據(jù)類型,他們有何區(qū)別。 2.字符串的操作: 寫(xiě)一個(gè)方法,實(shí)現(xiàn)字符串的反轉(zhuǎn),如:輸入abc,輸出cba 寫(xiě)一個(gè)方法,實(shí)現(xiàn)字符串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc。 3.數(shù)據(jù)類型之間的轉(zhuǎn)換 如何將數(shù)值型字符轉(zhuǎn)換為數(shù)字(Integer,Double) 如何將數(shù)字轉(zhuǎn)換為字符 如何取小數(shù)點(diǎn)前兩位,并四舍五入。 4.日期和時(shí)間 如何取得年月日,小時(shí)分秒 如何取得從1970年到現(xiàn)在的毫秒數(shù) 如何獲取某個(gè)日期是當(dāng)月的最后一天 如何格式化日期 5.數(shù)組和集合 6.文件和目錄(I/O)操作 如何列出某個(gè)目錄下的所有文件 如何列出某個(gè)目錄下的所有子目錄 判斷一個(gè)文件或目錄是否存在 如何讀寫(xiě)文件 7.Java多態(tài)的實(shí)現(xiàn)(繼承、重載、覆蓋) 8.編碼轉(zhuǎn)換,怎樣實(shí)現(xiàn)將GB2312編碼的字符串轉(zhuǎn)換為ISO-8859-1編碼的字符串。 9.Java中訪問(wèn)數(shù)據(jù)庫(kù)的步驟,Statement和PreparedStatement之間的區(qū)別。 10.找出下列代碼可能存在的錯(cuò)誤,并說(shuō)明原因: 二、JSPServlet技術(shù) 1.描述JSP和Servlet的區(qū)別、共同點(diǎn)、各自應(yīng)用的范圍 2.在Web開(kāi)發(fā)中需要處理HTML標(biāo)記時(shí),應(yīng)做什么樣的處理,要篩選那些字符( “”) 3.在JSP中如何讀取客戶端的請(qǐng)求,如何訪問(wèn)CGI變量,如何確定某個(gè)Jsp文件的真實(shí)路徑。 4.描述Cookie和Session的作用,區(qū)別和各自的應(yīng)用范圍,Session工作原理。 5.列出Jsp中包含外部文件的方式,兩者有何區(qū)別。 6.說(shuō)明Jsp中errorPage的作用,應(yīng)用范圍。 7.介紹在Jsp中如何使用JavaBeans。 8.簡(jiǎn)單介紹JSP的標(biāo)記庫(kù) 9.Jsp和Servlet中的請(qǐng)求轉(zhuǎn)發(fā)分別如何實(shí)現(xiàn)。 三、J2EE相關(guān)知識(shí) 1.介紹J2EE、J2SE、J2SE的區(qū)別。 2.J2EE是一種技術(shù)還是一種平臺(tái),他提供了那些技術(shù)。 3.什么是Application Server,它有什么功能和優(yōu)點(diǎn)。 4.簡(jiǎn)單介紹連接池的優(yōu)點(diǎn)和原理。 5.Web.xml的作用 四、其他 1.Web安全性的考慮(表單驗(yàn)證、瀏覽器Basic方式的驗(yàn)證,應(yīng)用程序的安全性,SSL,代碼考慮) 2.簡(jiǎn)單介紹您所了解的MVC。 3.簡(jiǎn)單介紹所了解的XML。 4.文檔和編碼規(guī)范 5.Java中的分頁(yè)、效率考慮。 6.簡(jiǎn)單介紹您所了解的structs。 Java面試題收藏: 1.xml在項(xiàng)目中的作用 2.s-EJB 與 e-EJB的區(qū)別 3.會(huì)話面的作用 4.cmp與bmp的優(yōu)缺點(diǎn) 5.j2me程序的必需的幾個(gè)部分 6.c/s與b/s的區(qū)別 7.構(gòu)建一個(gè)connect pool然后再調(diào)用它, 8.j2ee平臺(tái)與dotnet平臺(tái)的區(qū)別 9.ejb的life cycle 10.session bean 和 entity bean的區(qū)別 11.ejb中的transaction機(jī)制 12.synchronized (生產(chǎn)者和消費(fèi)) 13.String 和 StringBuffer 14.Serializable 15.MVC (Struts的工作流程) 16.什么是MDA 17.tcp與udp的區(qū)別 18.鏈表與散列表和數(shù)組的區(qū)別 19.堆和棧的區(qū)別 20.ejb的分類及區(qū)別 21.你對(duì)現(xiàn)在軟件業(yè)以及國(guó)內(nèi)軟件業(yè)的看法 22.談?wù)刯ava多線程 23.談?wù)勎募用芗夹g(shù) 24.軟件開(kāi)發(fā)生命周期 25.路由協(xié)議種類及特點(diǎn) 26.java的awt和swing組件的GUI設(shè)計(jì)的關(guān)鍵 27.對(duì)于java流的認(rèn)識(shí) 28.簡(jiǎn)單描述一下awt與swing區(qū)別。 29.簡(jiǎn)述java編程中事件處理模式。 30.你編寫(xiě)過(guò)applet嗎?applet的安全權(quán)限如何?試列舉java application或者applet中與servlet/jsp通信可以采用的方式。 31.簡(jiǎn)述邏輯操作(如|)與條件操作(如||)的區(qū)別。

java基礎(chǔ)面試題有哪些?

下面是10道java基礎(chǔ)面試題,后附答案

1.什么是 Java 虛擬機(jī)?為什么 Java 被稱作是“平臺(tái)無(wú)關(guān)的編程語(yǔ)言”?

Java 虛擬機(jī)是一個(gè)可以執(zhí)行 Java 字節(jié)碼的虛擬機(jī)進(jìn)程。Java 源文件被編譯成能被 Java 虛擬機(jī)執(zhí)行的字節(jié)碼文件。

Java 被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫(xiě)或者是重新編譯。Java 虛擬機(jī)讓這個(gè)變?yōu)榭赡埽驗(yàn)樗赖讓佑布脚_(tái)的指令長(zhǎng)度和其他特性。

2.“static”關(guān)鍵字是什么意思?Java 中是否可以覆蓋(override)一個(gè) private 或者是static 的方法?

“static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類的實(shí)例變量的情況下被訪問(wèn)。

Java 中 static 方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而 static 方法是編譯時(shí)靜態(tài)綁定的。static 方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。

3.JDK 和 JRE 的區(qū)別是什么?

Java 運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行 Java 程序的 Java 虛擬機(jī)。它同時(shí)也包含了執(zhí)行 applet 需要的瀏覽器插件。Java 開(kāi)發(fā)工具包 (JDK)是完整的 Java 軟件開(kāi)發(fā)包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行 Java 應(yīng)用程序。

4.是否可以在 static 環(huán)境中訪問(wèn)非 static 變量?

static 變量在 Java 中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被 Java 虛擬機(jī)載入的時(shí)候,會(huì)對(duì) static 變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪問(wèn)非 static 的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。

5.Java 支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?

Java 語(yǔ)言支持的 8 中基本數(shù)據(jù)類型是:

?byte

?short

?int

?long

?float

?double

?boolean

?char

自動(dòng)裝箱是 Java 編譯器在基本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把 int 轉(zhuǎn)化成 Integer,double 轉(zhuǎn)化成 double,等等。反之就是自動(dòng)拆箱。

6.Java 支持多繼承么?

不支持,Java 不支持多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。

7.Java 中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?

當(dāng)新對(duì)象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒(méi)有給類提供構(gòu)造函數(shù)的情況下,Java 編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。

Java 中構(gòu)造函數(shù)重載和方法重載很相似??梢詾橐粋€(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。

Java 不支持像 C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩?xiě)構(gòu)造函數(shù)的情況下,Java 不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。

8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?

Java 中的方法重載發(fā)生在同一個(gè)類里面兩個(gè)或者是多個(gè)方法的方法名相同但是參數(shù)不同的情況。與此相對(duì),方法覆蓋是說(shuō)子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪問(wèn)。

9.接口和抽象類的區(qū)別是什么?

Java 提供和支持創(chuàng)建抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:

?接口中所有的方法隱含的都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法。

?類可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類

?類如果要實(shí)現(xiàn)一個(gè)接口,它必須要實(shí)現(xiàn)接口聲明的所有方法。但是,類可以不實(shí)現(xiàn)抽象類聲明的所有方法,當(dāng)然,在這種情況下,類也必須得聲明成是抽象的。

?抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。

?Java 接口中聲明的變量默認(rèn)都是 final 的。抽象類可以包含非 final 的變量。

?Java 接口中的成員函數(shù)默認(rèn)是 public 的。抽象類的成員函數(shù)可以是 private, protected 或者是 public。

?接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含 main 方法的話是可以被調(diào)用的。

10.什么是值傳遞和引用傳遞?

對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是改變了對(duì)象副本,也不會(huì)影響源對(duì)象的值。

對(duì)象被引用傳遞,意味著傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象所做的改變會(huì)反映到所有的對(duì)象上。

最后祝你面試順利!

java經(jīng)典面試題

(4)以下代碼中的兩個(gè)sizeof用法有問(wèn)題嗎?

[C易] void UpperCase( char str[] ) // 將 str 中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母 { for( size_t i=0; i sizeof(str)/sizeof(str[0]); ++i ) if( 'a' =str[i] str[i] ='z' ) str[i] -= ('a'-'A' ); } char str[] = "aBcDe"; cout "str字符長(zhǎng)度為: " sizeof(str)/sizeof(str[0]) endl; UpperCase( str ); cout str endl; 答案:函數(shù)內(nèi)的sizeof有問(wèn)題。根據(jù)語(yǔ)法,sizeof如用于數(shù)組,只能測(cè)出靜態(tài)數(shù)組的大小,無(wú)法檢測(cè)動(dòng)態(tài)分配的或外部數(shù)組大小。函數(shù)外的str是一個(gè)靜態(tài)定義的數(shù)組,因此其大小為6,因?yàn)檫€有'\0',函數(shù)內(nèi)的str實(shí)際只是一個(gè)指向字符串的指針,沒(méi)有任何額外的與數(shù)組相關(guān)的信息,因此sizeof作用于上只將其當(dāng)指針看,一個(gè)指針為4個(gè)字節(jié),因此返回4。

(5)一個(gè)32位的機(jī)器,該機(jī)器的指針是多少位答案:

指針是多少位只要看地址總線的位數(shù)就行了。80386以后的機(jī)子都是32的數(shù)據(jù)總線。所以指針的位數(shù)就是4個(gè)字節(jié)了。

6。main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 答案:2。5 *(a+1)就是a[1],*(ptr-1)就是a[4],執(zhí)行結(jié)果是2,5 a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大?。ū纠?個(gè)int) int *ptr=(int *)(a+1); 則ptr實(shí)際是(a[5]),也就是a+5 原因如下: a是數(shù)組指針,其類型為 int (*)[5]; 而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同 a是長(zhǎng)度為5的int數(shù)組指針,所以要加 5*sizeof(int) 所以ptr實(shí)際是a[5] 但是prt與(a+1)類型是不一樣的(這點(diǎn)很重要) 所以prt-1只會(huì)減去sizeof(int*) a,a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,a是對(duì)象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址,即a[1],a+1是下一個(gè)對(duì)象的地址,即a[5].

7。請(qǐng)問(wèn)以下代碼有什么問(wèn)題: int main() { char a; char *str=a; strcpy(str,"hello"); printf(str); return 0; } 答案:沒(méi)有為str分配內(nèi)存空間,將會(huì)發(fā)生異常問(wèn)題出在將一個(gè)字符串復(fù)制進(jìn)一個(gè)字符變量指針?biāo)傅刂贰km然可以正確輸出結(jié)果,但因?yàn)樵浇邕M(jìn)行內(nèi)在讀寫(xiě)而導(dǎo)致程序崩潰。

8。char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什么錯(cuò)?答案:"AAA"是字符串常量。s是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問(wèn)題。 cosnt char* s="AAA"; 然后又因?yàn)槭浅A?,所以?duì)是s[0]的賦值操作是不合法的。

9。寫(xiě)一個(gè)“標(biāo)準(zhǔn)”宏,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。答案:.#define Min(X, Y) ((X)(Y)?(Y):(X)) //結(jié)尾沒(méi)有‘;’

10。嵌入式系統(tǒng)中經(jīng)常要用到無(wú)限循環(huán),你怎么用C編寫(xiě)死循環(huán)。答案:while(1){}或者for(;;)

11。關(guān)鍵字static的作用是什么?答案:定義靜態(tài)變量

12。關(guān)鍵字const有什么含意?答案:表示常量不可以修改的變量。

13。關(guān)鍵字volatile有什么含意?并舉出三個(gè)不同的例子?答案:提示編譯器對(duì)象的值可能在編譯器未監(jiān)測(cè)到的情況下改變。

14。int (*s[10])(int) 表示的是什么???答案:int (*s[10])(int) 函數(shù)指針數(shù)組,每個(gè)指針指向一個(gè)int func(int param)的函數(shù)。

15。有以下表達(dá)式: int a=248; b=4;int const c=21;const int *d=a; int *const e=b;int const *f const =a; 請(qǐng)問(wèn)下列表達(dá)式哪些會(huì)被編譯器禁止?為什么?答案:*c=32;d=b;*d=43;e=34;e=a;f=0x321f; *c 這是個(gè)什么東東,禁止 *d 說(shuō)了是const,禁止 e = a 說(shuō)了是const 禁止 const *f const =a; 禁止

16交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3; 答案:有兩種解法, 一種用算術(shù)算法, 一種用^(異或) a = a + b; b = a - b; a = a - b; or a = a^b;// 只能對(duì)int,char.. b = a^b; a = a^b; or a ^= b ^= a;

17.c和c++中的struct有什么不同?答案:c和c++中struct的主要區(qū)別是c中的struct不可以含有成員函數(shù),而c++中的struct可以。c++中struct和class的主要區(qū)別在于默認(rèn)的存取權(quán)限不同,struct默認(rèn)為public,而class默認(rèn)為private

18.#include stdio.h #include stdlib.h void getmemory(char *p) { p=(char *) malloc(100); strcpy(p,"hello world"); } int main( ) { char *str=NULL; getmemory(str); printf("%s/n",str); free(str); return 0; } 答案:程序崩潰,getmemory中的malloc 不能返回動(dòng)態(tài)內(nèi)存, free()對(duì)str操作很危險(xiǎn)

19.char szstr[10]; strcpy(szstr,"0123456789"); 產(chǎn)生什么結(jié)果?為什么?答案: 長(zhǎng)度不一樣,會(huì)造成非法的OS

20.列舉幾種進(jìn)程的同步機(jī)制,并比較其優(yōu)缺點(diǎn)。答案: 原子操作信號(hào)量機(jī)制 自旋鎖 管程,會(huì)合,分布式系統(tǒng)

21.進(jìn)程之間通信的途徑答案:共享存儲(chǔ)系統(tǒng)消息傳遞系統(tǒng)管道:以文件系統(tǒng)為基礎(chǔ)

22.進(jìn)程死鎖的原因答案:資源競(jìng)爭(zhēng)及進(jìn)程推進(jìn)順序非法

23.死鎖的4個(gè)必要條件答案:互斥、請(qǐng)求保持、不可剝奪、環(huán)路

24.死鎖的處理答案:鴕鳥(niǎo)策略、預(yù)防策略、避免策略、檢測(cè)與解除死鎖

25. 操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種?答案:FCFS(先來(lái)先服務(wù)),優(yōu)先級(jí),時(shí)間片輪轉(zhuǎn),多級(jí)反饋

26.類的靜態(tài)成員和非靜態(tài)成員有何區(qū)別?答案:類的靜態(tài)成員每個(gè)類只有一個(gè),非靜態(tài)成員每個(gè)對(duì)象一個(gè)

27.純虛函數(shù)如何定義?使用時(shí)應(yīng)注意什么?答案:virtual void f()=0; 是接口,子類必須要實(shí)現(xiàn)

28.數(shù)組和鏈表的區(qū)別答案:數(shù)組:數(shù)據(jù)順序存儲(chǔ),固定大小連表:數(shù)據(jù)可以隨機(jī)存儲(chǔ),大小可動(dòng)態(tài)改變

29.ISO的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優(yōu)缺點(diǎn)?答案:應(yīng)用層表示層會(huì)話層運(yùn)輸層網(wǎng)絡(luò)層物理鏈路層物理層 tcp /udp屬于運(yùn)輸層 TCP 服務(wù)提供了數(shù)據(jù)流傳輸、可靠性、有效流控制、全雙工操作和多路復(fù)用技術(shù)等。與 TCP 不同, UDP 并不提供對(duì) IP 協(xié)議的可靠機(jī)制、流控制以及錯(cuò)誤恢復(fù)功能等。由于 UDP 比較簡(jiǎn)單, UDP 頭包含很少的字節(jié),比 TCP 負(fù)載消耗少。 tcp: 提供穩(wěn)定的傳輸服務(wù),有流量控制,缺點(diǎn)是包頭大,冗余性不好 udp: 不提供穩(wěn)定的服務(wù),包頭小,開(kāi)銷小

30:(void *)ptr 和 (*(void**))ptr的結(jié)果是否相同?其中ptr為同一個(gè)指針答案:.(void *)ptr 和 (*(void**))ptr值是相同的

31:int main() { int x=3; printf("%d",x); return 1; } 問(wèn)函數(shù)既然不會(huì)被其它函數(shù)調(diào)用,為什么要返回1?答案:mian中,c標(biāo)準(zhǔn)認(rèn)為0表示成功,非0表示錯(cuò)誤。具體的值是某中具體出錯(cuò)信息

32,要對(duì)絕對(duì)地址0x100000賦值,我們可以用 (unsigned int*)0x100000 = 1234; 那么要是想讓程序跳轉(zhuǎn)到絕對(duì)地址是0x100000去執(zhí)行,應(yīng)該怎么做?答案:*((void (*)( ))0x100000 ) ( ); 首先要將0x100000強(qiáng)制轉(zhuǎn)換成函數(shù)指針,即: (void (*)())0x100000 然后再調(diào)用它: *((void (*)())0x100000)(); 用typedef可以看得更直觀些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)();

33,已知一個(gè)數(shù)組table,用一個(gè)宏定義,求出數(shù)據(jù)的元素個(gè)數(shù)答案:#define NTBL #define NTBL (sizeof(table)/sizeof(table[0]))

34。線程與進(jìn)程的區(qū)別和聯(lián)系? 線程是否具有相同的堆棧? dll是否有獨(dú)立的堆棧? 答案:進(jìn)程是死的,只是一些資源的集合,真正的程序執(zhí)行都是線程來(lái)完成的,程序啟動(dòng)的時(shí)候操作系統(tǒng)就幫你創(chuàng)建了一個(gè)主線程。每個(gè)線程有自己的堆棧。 DLL中有沒(méi)有獨(dú)立的堆棧,這個(gè)問(wèn)題不好回答,或者說(shuō)這個(gè)問(wèn)題本身是否有問(wèn)題。因?yàn)镈LL中的代碼是被某些線程所執(zhí)行,只有線程擁有堆棧,如果DLL中的代碼是EXE中的線程所調(diào)用,那么這個(gè)時(shí)候是不是說(shuō)這個(gè)DLL沒(méi)有自己獨(dú)立的堆棧?如果DLL中的代碼是由DLL自己創(chuàng)建的線程所執(zhí)行,那么是不是說(shuō)DLL有獨(dú)立的堆棧?以上講的是堆棧,如果對(duì)于堆來(lái)說(shuō),每個(gè)DLL有自己的堆,所以如果是從DLL中動(dòng)態(tài)分配的內(nèi)存,最好是從DLL中刪除,如果你從DLL中分配內(nèi)存,然后在EXE中,或者另外一個(gè)DLL中刪除,很有可能導(dǎo)致程序崩潰

35。unsigned short A = 10; printf("~A = %u\n", ~A); char c=128; printf("c=%d\n",c); 輸出多少?并分析過(guò)程答案:第一題,~A =0xfffffff5,int值為-11,但輸出的是uint。所以輸出4294967285 第二題,c=0x10,輸出的是int,最高位為1,是負(fù)數(shù),所以它的值就是0x00的補(bǔ)碼就是128,所以輸出-128。這兩道題都是在考察二進(jìn)制向int或uint轉(zhuǎn)換時(shí)的最高位處理。

(二)

1. -1,2,7,28,,126請(qǐng)問(wèn)28和126中間那個(gè)數(shù)是什么?為什么?答案:第一題的答案應(yīng)該是4^3-1=63 規(guī)律是n^3-1(當(dāng)n為偶數(shù)0,2,4) n^3+1(當(dāng)n為奇數(shù)1,3,5)

2.用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!答案:設(shè)2個(gè)棧為A,B, 一開(kāi)始均為空. 入隊(duì): 將新元素push入棧A; 出隊(duì): (1)判斷棧B是否為空; (2)如果不為空,則將棧A中所有元素依次pop出并push到棧B; (3)將棧B的棧頂元素pop出;這樣實(shí)現(xiàn)的隊(duì)列入隊(duì)和出隊(duì)的平攤復(fù)雜度都還是O(1), 比上面的幾種方法要好。

3.在c語(yǔ)言庫(kù)函數(shù)中將一個(gè)字符轉(zhuǎn)換成整型的函數(shù)是atol()嗎,這個(gè)函數(shù)的原型是什么?答案:函數(shù)名: atol 功能: 把字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)用法: long atol(const char *nptr); 程序例: #include stdlib.h #include stdio.h int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); }

4。對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語(yǔ)言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什么實(shí)現(xiàn)? 答案:c用宏定義,c++用inline

5。直接鏈接兩個(gè)信令點(diǎn)的一組鏈路稱作什么? 答案:PPP點(diǎn)到點(diǎn)連接

7。軟件測(cè)試都有那些種類? 答案:黑盒:針對(duì)系統(tǒng)功能的測(cè)試 白合:測(cè)試函數(shù)功能,各函數(shù)接口

8。確定模塊的功能和模塊的接口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成的? 答案:概要設(shè)計(jì)階段

9。enum string { x1, x2, x3=10, x4, x5, }x; 問(wèn)x;答案:取值在0。1。10。11。12中的一個(gè)

10。unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 請(qǐng)問(wèn)p1+5= ; p2+5= ; 答案:801005; 810014。不要忘記了這個(gè)是16進(jìn)制的數(shù)字,p2要加20變?yōu)?6進(jìn)制就是14 選擇題: 1.Ethternet鏈接到Internet用到以下那個(gè)協(xié)議? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.屬于網(wǎng)絡(luò)層協(xié)議的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows消息調(diào)度機(jī)制是: A.指令隊(duì)列;B.指令堆棧;C.消息隊(duì)列;D.消息堆棧; 答案:b,a,c

四.找錯(cuò)題:

1.請(qǐng)問(wèn)下面程序有什么錯(cuò)誤? int a[60][250][1000],i,j,k; for(k=0;k =1000;k++) for(j=0;j 250;j++) for(i=0;i 60;i++) a[i][j][k]=0; 答案:把循環(huán)語(yǔ)句內(nèi)外換一下

2。以下是求一個(gè)數(shù)的平方的程序,請(qǐng)找出錯(cuò)誤: #define SQUARE(a) ((a)*(a)) int a=5; int b; b=SQUARE(a++); 答案:這個(gè)沒(méi)有問(wèn)題,s(a++),就是((a++)×(a++))唯一要注意的就是計(jì)算后a=7了 3。typedef unsigned char BYTE int examply_fun(BYTE gt_len; BYTE *gt_code) { BYTE *gt_buf; gt_buf=(BYTE *)MALLOC(Max_GT_Length); ...... if(gt_lenMax_GT_Length) { return GT_Length_ERROR; } ....... } 答案:要釋放內(nèi)存問(wèn)答題: 1.IP Phone的原理是什么? 答案:IPV6 2.TCP/IP通信建立的過(guò)程怎樣,端口有什么作用?答案:三次握手,確定是哪個(gè)應(yīng)用程序使用該協(xié)議(三)

1、局部變量能否和全局變量重名?答案:能,局部會(huì)屏蔽全局。要用全局變量,需要使用"::" 局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名的局部變量,而不會(huì)用到全局變量。對(duì)于有些編譯器而言,在同一個(gè)函數(shù)內(nèi)可以定義多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量,而那個(gè)局部變量的作用域就在那個(gè)循環(huán)體內(nèi)

2、如何引用一個(gè)已經(jīng)定義過(guò)的全局變量?答案:extern 可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來(lái)引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)變寫(xiě)錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)

3、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?答案:可以,在不同的C文件中以static形式來(lái)聲明同名全局變量??梢栽诓煌腃文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)

4、語(yǔ)句for( ;1 ;)有什么問(wèn)題?它是什么意思?答案:和while(1)相同。

5、do……while和while……do有什么區(qū)別?答案:前一個(gè)循環(huán)一遍再判斷,后一個(gè)判斷以后再循環(huán)。

6、請(qǐng)寫(xiě)出下列代碼的輸出內(nèi)容#include stdio.h main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答案:10,12,120 a=10; b=a++;//a=11 b=10 c=++a;//a=12 c=12 d=10*a++;//a=13 d=120

高級(jí)題

1、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?

答案:全局變量(外部變量)的說(shuō)明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無(wú)不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。 static函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說(shuō)明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說(shuō)明和定義。對(duì)于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說(shuō)明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件 static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用; static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值; static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝

2、程序的局部變量存在于()中,全局變量存在于()中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于()中。

答案:棧;靜態(tài)區(qū);堆 3、設(shè)有以下說(shuō)明和定義: typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DATE max; 則語(yǔ)句 printf("%d",sizeof(too)+sizeof(max));的執(zhí)行結(jié)果是:______ 答案:DATE是一個(gè)union, 變量公用空間. 里面最大的變量類型是int[5], 占用20個(gè)字節(jié). 所以它的大小是20 data是一個(gè)struct, 每個(gè)變量分開(kāi)占用空間. 依次為int4 + DATE20 + double8 = 32. 所以結(jié)果是 20 + 32 = 52. 當(dāng)然...在某些16位編輯器下, int可能是2字節(jié),那么結(jié)果是 int2 + DATE10 + double8 = 20

4、隊(duì)列和棧有什么區(qū)別?

答案:隊(duì)列先進(jìn)先出,棧后進(jìn)先出÷

5、這道題目出錯(cuò)了,這里就不寫(xiě)上了。

6、已知一個(gè)單向鏈表的頭,請(qǐng)寫(xiě)出刪除其某一個(gè)結(jié)點(diǎn)的算法,要求,先找到此結(jié)點(diǎn),然后刪除。答案:slnodetype *Delete(slnodetype *Head,int key){}中if(Head-number==key) { Head=Pointer-next; free(Pointer); break; } Back = Pointer; Pointer=Pointer-next; if(Pointer-number==key) { Back-next=Pointer-next; free(Pointer); break; } void delete(Node* p) { if(Head = Node) while(p) }

7、請(qǐng)找出下面代碼中的所以錯(cuò)誤說(shuō)明:以下代碼是把一個(gè)字符串倒序,如“abcd”倒序后變?yōu)椤癲cba”

1、#include"string.h" 2、main() 3、{ 4、 char*src="hello,world"; 5、 char* dest=NULL; 6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d=dest; 9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--; 12、 printf("%s",dest); 13、 return 0; 14、} 答案:還要加上#include stdio.h int main(){ char* src = "hello,world"; int len = strlen(src); char* dest = (char*)malloc((len+1)*sizeof(char)); //要為\0分配一個(gè)空間 char* d = dest; char* s = src[len-1]; //指向最后一個(gè)字符 while( len-- != 0 ) *d++=*s--; *d = 0; //尾部要加\0 printf("%s\n",dest); free(dest);// 使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露 return 0; } 華為筆試題(3) 2006-09-29 19:41

一、判斷題(對(duì)的寫(xiě)T,錯(cuò)的寫(xiě)F并說(shuō)明原因,每小題4分,共20分)

1、有數(shù)組定義int a[2][2]={{1},{2,3}};則a[0][1]的值為0。( 正確)

2、int (*ptr) (),則ptr是一維數(shù)組的名字。(錯(cuò)誤 int (*ptr) ();定義一個(gè)指向函數(shù)的指針變量 )

3、指針在任何情況下都可進(jìn)行, ,=, =,==運(yùn)算。( 錯(cuò)誤 )

4、switch(c) 語(yǔ)句中c可以是int ,long,char ,float ,unsigned int 類型。( 錯(cuò),不能用實(shí)形)

二、填空題(共30分)

1、在windows下,寫(xiě)出運(yùn)行結(jié)果,每空2分,共10分。 char str[ ]= "Hello"; char *p=str; int n=10; sizeof(str)=( ) sizeof(p)=( ) sizeof(n)=( ) void func(char str[100]){ } sizeof(str)=( ) 答案:6,4,4,4, 具體解釋請(qǐng)參看我的空間里的“C/C++程序員應(yīng)聘試題剖析”

2、void getmemory(char **p, int num) { *p=(char *) malloc(num);} void test(void) { char *str=NULL; getmemory(str,100); strcpy(str,"hello"); printf(str); } 運(yùn)行test函數(shù)有什么結(jié)果?( )10分 答案:輸出hello,但是發(fā)生內(nèi)存泄漏。

3、設(shè)int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr)); ( ) 10分答案:8,

8。這道題目的意義不大,因?yàn)樵诓煌木幾g器里printf的參數(shù)的方向是不一樣的,在vc6.0下是從有到左,這里先*(++ptr) 后*pt,于是結(jié)果為8,8

三、編程題(第一小題20,第二小題30分)

1、 不使用庫(kù)函數(shù),編寫(xiě)函數(shù)int strcmp(char *source, char *dest) 相等返回0,不等返回-1;

答案:一、 int strcmp(char *source, char *dest) { assert((source!=NULL)(dest!=NULL)); int i,j; for(i=0; source[i]==dest[i]; i++) { if(source[i]=='\0' dest[i]=='\0') return 0; else return -1; } } 答案:二、 int strcmp(char *source, char *dest) { while ( (*source != '\0') (*source == *dest)) { source++; dest++; } return ( (*source) - (*dest) ) ? -1 : 0; }

2、 寫(xiě)一函數(shù)int fun(char *p)判斷一字符串是否為回文,是返回1,不是返回0,出錯(cuò)返回-1 答案:一、 int fun(char *p) { if(p==NULL) return -1; else { int length = 0; int i = 0; int judge = 1; length = strlen(p); for(i=0; i length/2; i++) { if(p[i]!=p[length-1-i]) judge = 0; break; } if(judge == 0) return 0; else return 1; } } 答案:二、 int fun(char *p){ int len = strlen(p) - 1; char *q = p + len; if (!p) return -1; while (p q) { if ((*p++) != (*q--)) return 0; } return 1;}

1.在OSI 7 層模型中,網(wǎng)絡(luò)層的功能有( ) A.確保數(shù)據(jù)的傳送正確無(wú)誤 B.確定數(shù)據(jù)包如何轉(zhuǎn)發(fā)與路由 C.在信道上傳送比特流 D.糾錯(cuò)與流控

2.FDDI 使用的是___局域網(wǎng)技術(shù)。( ) A.以太網(wǎng); B.快速以太網(wǎng); C.令牌環(huán); D.令牌總線。

3.下面那種LAN 是應(yīng)用CSMA/CD協(xié)議的() A.令牌環(huán) B.FDDI C.ETHERNET D.NOVELL

4.TCP 和UDP 協(xié)議的相似之處是 ( ) A.面向連接的協(xié)議 B.面向非連接的協(xié)議 C.傳輸層協(xié)議 D.以上均不對(duì) 5.應(yīng)用程序PING 發(fā)出的是___報(bào)文.( ) A.TCP 請(qǐng)求報(bào)文。 B.TCP 應(yīng)答報(bào)文。 C.ICMP 請(qǐng)求報(bào)文。 D.ICMP 應(yīng)答報(bào)文。

6.以下說(shuō)法錯(cuò)誤的是(多) ( ) A.中繼器是工作在物理層的設(shè)備 B.集線器和以太網(wǎng)交換機(jī)工作在數(shù)據(jù)連路層 C.路由器是工作在網(wǎng)絡(luò)層的設(shè)備 D.橋能隔離網(wǎng)絡(luò)層廣播

7.當(dāng)橋接收的分組的目的MAC地址在橋的映射表中沒(méi)有對(duì)應(yīng)的表項(xiàng)時(shí),采取的策略是( ) A.丟掉該分組 B.將該分組分片 C.向其他端口廣播該分組 D.以上答案均不對(duì)

8.LAN Switch 在網(wǎng)絡(luò)層次模型中的地位( ) A.物理層 B.鏈路層 C.網(wǎng)絡(luò)層 D.以上都不是

9.小于___的TCP/UDP端口號(hào)已保留與現(xiàn)有服務(wù)一一對(duì)應(yīng),此數(shù)字以上的端口號(hào)可自由分配。( ) A.199 B.100 C.1024 D.2048

10.當(dāng)一臺(tái)主機(jī)從一個(gè)網(wǎng)絡(luò)移到另一個(gè)網(wǎng)絡(luò)時(shí),以下說(shuō)法正確的是 ( ) A.必須改變它的IP 地址和MAC 地址 B.必須改變它的IP 地址,但不需改動(dòng)MAC 地址 C.必須改變它的MAC 地址,但不需改動(dòng)IP 地址 D.MAC 地址.IP 地址都不需改動(dòng)答案:1.B; 2.C; 3.C; 4.C; 5.C; 6.BD; 7.C; 8.B; 9.C; 10.B.

華為筆試題(4) 2006-09-30 13:00

1. 找錯(cuò) void test1() { char string[10]; char* str1="0123456789"; strcpy(string, str1); } 答:表面上并且編譯都不會(huì)錯(cuò)誤。但如果string數(shù)組原意表示的是字符串的話,那這個(gè)賦值就沒(méi)有達(dá)到意圖。最好定義為char string[11],這樣最后一個(gè)元素可以存儲(chǔ)字符串結(jié)尾符'\0'; void test2() { char string[10], str1[10]; for(int I=0; I 10;I++) { str1[I] ='a'; } strcpy(string, str1); } 答:strcpy使用錯(cuò)誤,strcpy只有遇到字符串末尾的'\0'才會(huì)結(jié)束,而str1并沒(méi)有結(jié)尾標(biāo)志,導(dǎo)致strcpy函數(shù)越界訪問(wèn),不妨讓str1[9]='\0',這樣就正常了。 void test3(char* str1) { char string[10]; if(strlen(str1) =10) { strcpy(string, str1); } } 答:這又會(huì)出現(xiàn)第一道改錯(cuò)題的錯(cuò)誤了。strlen(str1)算出來(lái)的值是不包含結(jié)尾符'\0'的,如果str1剛好為10個(gè)字符+1結(jié)尾符,string就得不到結(jié)尾符了??蓪trlen(str1) =10改為strlen(str1) 10。

2. 找錯(cuò) #define MAX_SRM 256 DSN get_SRM_no() { static int SRM_no; int I; for(I=0;I MAX_SRM;I++,SRM_no++) { SRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) { break; } } if(I=MAX_SRM) return (NULL_SRM); else return SRM_no; } 答:我不知道這段代碼的具體功能,但明顯有兩個(gè)錯(cuò)誤 1,SRM_no沒(méi)有賦初值 2,由于static的聲明,使該函數(shù)成為不可重入(即不可預(yù)測(cè)結(jié)果)函數(shù),因?yàn)镾RM_no變量放在程序的全局存儲(chǔ)區(qū)中,每次調(diào)用的時(shí)候還可以保持原來(lái)的賦值。這里應(yīng)該去掉static聲明。

當(dāng)前標(biāo)題:java面試常用的代碼題,java面試題中常見(jiàn)編程題
文章網(wǎng)址:http://vcdvsql.cn/article38/heccsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、標(biāo)簽優(yōu)化、網(wǎng)站建設(shè)、網(wǎng)站策劃做網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)