JAVA找工作筆試題總結(jié)_第1頁(yè)
JAVA找工作筆試題總結(jié)_第2頁(yè)
JAVA找工作筆試題總結(jié)_第3頁(yè)
JAVA找工作筆試題總結(jié)_第4頁(yè)
JAVA找工作筆試題總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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)介

1、一、基礎(chǔ)一、基礎(chǔ) 1.1.指針數(shù)組和數(shù)組指針指針數(shù)組和數(shù)組指針 32 位機(jī)器上,只要是指針就占 4 個(gè)字節(jié) 指針數(shù)組:首先它是一個(gè)數(shù)組,數(shù)組的元素都是指針,數(shù)組占多少個(gè)字節(jié)由數(shù)組本身決定。 它是“儲(chǔ)存指針的數(shù)組”的簡(jiǎn)稱。 數(shù)組指針:首先它是一個(gè)指針,它指向一個(gè)數(shù)組。在 32 位系統(tǒng)下永遠(yuǎn)是占 4 個(gè)字節(jié),至于 它指向的數(shù)組占多少字節(jié),不知道。它是“指向數(shù)組的指針”的簡(jiǎn)稱。 與指針指向的內(nèi)容和內(nèi)容的大小無(wú)關(guān)。 在不同的操作系統(tǒng)及編譯環(huán)境中,指針類型占用的字節(jié)數(shù)是不同的。一般而言, 編譯生成 16 位的代碼時(shí),指針占 2 個(gè)字節(jié) 編譯生成 32 位的代碼時(shí),指針占 4 個(gè)字節(jié) 編譯生成 64 位的

2、代碼時(shí),指針占 8 個(gè)字節(jié) 簡(jiǎn)言之: 指針就是一個(gè)整數(shù)。 2.2.按位運(yùn)算按位運(yùn)算 For example: enum weekday sunday, monday, tuesday, wednesday, thursday, friday, saturday; 6. 關(guān)于關(guān)于 switchswitch 的參數(shù)類型的參數(shù)類型 switch (expr1) 中, expr1 是一個(gè)整數(shù)表達(dá)式, 整數(shù)表達(dá)式可以是 int 基本類型或 Integer 包裝類型,由于,byte,short,char都可以隱含轉(zhuǎn)換為int,所以,這些類型以及這些類型的包裝 類型也是可以的。 因此傳遞給 switch 和

3、 case 語(yǔ)句的參數(shù)應(yīng)該是 int、short、char 或者 byte, 還有 enum。long,string 都不能作用于 swtich。 在 jdk 1.7 中 switch 的參數(shù)類型可以是字符串類型。 7.7.不使用其他變量,交換兩個(gè)整型不使用其他變量,交換兩個(gè)整型 a,b 的值的值 答案:x = x+y; y = x-y; x = x-y 8. 寫出寫出 float x 與與“零值零值”比較的比較的 if 語(yǔ)句。語(yǔ)句。 if(x=0.000001 & x=-0.000001)(x不為0的比較) float: 6位精度 double: 16 位精度 9.9.排序排序 排序中穩(wěn)定的

4、有 基數(shù)排序 插入排序歸并排序 冒泡排序 復(fù)雜度為 O(NlogN) 的有 歸并排序 堆排序 快速排序 與初始狀態(tài)無(wú)關(guān)的是:選擇排序,堆排序,歸并排序 10.10. 將一個(gè)遞歸算法改為對(duì)應(yīng)的非遞歸算法時(shí),通常需要使用將一個(gè)遞歸算法改為對(duì)應(yīng)的非遞歸算法時(shí),通常需要使用 棧 這里的棧即是指堆棧,是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)實(shí)現(xiàn)遞歸時(shí),本身也是用堆棧實(shí) 現(xiàn)的,用來(lái)保存現(xiàn)場(chǎng)信息。 11.11.#include和#includefilename.h有什么區(qū)別? #include系統(tǒng)檢索頭文件時(shí) 會(huì)先從系統(tǒng)文件里開(kāi)始找 ,再找其他地方。用于系統(tǒng)文件較快。 #includefilename.h系統(tǒng)檢索頭文

5、件時(shí)先從程序所處目錄開(kāi)始查找。 用于自定義文件較快。 12.12. 中斷響應(yīng)時(shí)間中斷響應(yīng)時(shí)間 從發(fā)出中斷請(qǐng)求到進(jìn)入中斷處理所用的時(shí)間 中斷的響應(yīng)時(shí)間就是中斷的響應(yīng)過(guò)程的時(shí)間, 中斷的響應(yīng)過(guò)程是當(dāng)有事件產(chǎn)生, 進(jìn)入中斷之 前我們必須先記住現(xiàn)在看書的第幾頁(yè)了, 或拿一個(gè)書簽放在當(dāng)前頁(yè)的位置, 然后去處理不同 的事情(因?yàn)樘幚硗炅?,我們還要回來(lái)繼續(xù)看書):電話鈴響我們要到放電話的地方去,門 鈴響我們要到門那邊去,也說(shuō)是不同的中斷,我們要在不同的地點(diǎn)處理,而這個(gè)地點(diǎn)通常還 是固定的。計(jì)算機(jī)中也是采用的這種方法,五個(gè)中斷源,每個(gè)中斷產(chǎn)生后都到一個(gè)固定的地 方去找處理這個(gè)中斷的程序, 當(dāng)然在去之前首先要保

6、存下面將執(zhí)行的指令的地址, 以便處理 完中斷后回到原來(lái)的地方繼續(xù)往下執(zhí)行程序。具體地說(shuō),中斷響應(yīng)可以分為以下幾個(gè)步驟: 1、保護(hù)斷點(diǎn),即保存下一將要執(zhí)行的指令的地址,就是把這個(gè)地址送入堆棧。2、尋找中 斷入口,根據(jù) 5 個(gè)不同的中斷源所產(chǎn)生的中斷,查找 5 個(gè)不同的入口地址。以上工作是由 計(jì)算機(jī)自動(dòng)完成的,與編程者無(wú)關(guān)。在這 5 個(gè)入口地址處存放有中斷處理程序(這是程序 編寫時(shí)放在那兒的,如果沒(méi)把中斷程序放在那兒,就錯(cuò)了,中斷程序就不能被執(zhí)行到)。3、 執(zhí)行中斷處理程序。4、中斷返回:執(zhí)行完中斷指令后,就從中斷處返回到主程序,繼續(xù)執(zhí) 行。 1313 . .ISO/OSI 參考模型與 TCP/I

7、P 協(xié)議模型中各層的對(duì)應(yīng)關(guān)系 網(wǎng)際層協(xié)議:包括:IP 協(xié)議、ICMP 協(xié)議、ARP 協(xié)議、RARP 協(xié)議。 傳輸層協(xié)議:TCP 協(xié)議、UDP 協(xié)議。 應(yīng)用層協(xié)議:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。 14.14. 二叉樹(shù)前序、中序、后序遍歷相互求法二叉樹(shù)前序、中序、后序遍歷相互求法 *必須得知道一個(gè)中序,也就是不能夠求中序* (1)已知前序、中序遍歷,求后序遍歷 例: 前序遍歷:GDAFEMHZ 中序遍歷:ADEFGHMZ 畫樹(shù)求法:畫樹(shù)求法: 第一步,根據(jù)前序遍歷的特點(diǎn),我們知道根結(jié)點(diǎn)為 G 第二步, 觀察中序遍歷 ADEFGHMZ。 其中 root 節(jié)點(diǎn) G

8、左側(cè)的 ADEF 必然是 root 的左子樹(shù), G 右側(cè)的 HMZ 必然是 root 的右子樹(shù)。 第三步,觀察左子樹(shù) ADEF,左子樹(shù)的中的根節(jié)點(diǎn)必然是大樹(shù)的 root 的 leftchild。 在前序遍歷中,大樹(shù)的 root 的 leftchild 位于 root 之后,所以左子樹(shù)的根節(jié)點(diǎn)為 D。 第四步,同樣的道理,root 的右子樹(shù)節(jié)點(diǎn) HMZ 中的根節(jié)點(diǎn)也可以通過(guò)前序遍歷求得。 在前序遍歷中, 一定是先把 root 和 root 的所有左子樹(shù)節(jié)點(diǎn)遍歷完之后才會(huì)遍歷右子樹(shù), 并 且遍歷的左子樹(shù)的第一個(gè)節(jié)點(diǎn)就是左子樹(shù)的根節(jié)點(diǎn)。 同理, 遍歷的右子樹(shù)的第一個(gè)節(jié)點(diǎn)就是 右子樹(shù)的根節(jié)點(diǎn)。 第五步

9、, 觀察發(fā)現(xiàn), 上面的過(guò)程是遞歸的。 先找到當(dāng)前樹(shù)的根節(jié)點(diǎn), 然后劃分為左子樹(shù), 右子樹(shù),然后進(jìn)入左子樹(shù)重復(fù)上面的過(guò)程,然后進(jìn)入右子樹(shù)重復(fù)上面的過(guò)程。最后就可以還 原一棵樹(shù)了。該步遞歸的過(guò)程可以簡(jiǎn)潔表達(dá)如下: 1 確定根,確定左子樹(shù),確定右子樹(shù)。 2 在左子樹(shù)中遞歸。 3 在右子樹(shù)中遞歸。 4 打印當(dāng)前根。 那么,我們可以畫出這個(gè)二叉樹(shù)的形狀: 那么,根據(jù)后序的遍歷規(guī)則,我們可以知道,后序遍歷順序?yàn)椋篈EFDHZMG (2)已知中序和后序遍歷,求前序遍歷 依然是上面的題,這次我們只給出中序和后序遍歷: 中序遍歷:ADEFGHMZ 后序遍歷:AEFDHZMG 畫樹(shù)求法:畫樹(shù)求法: 第一步, 根據(jù)

10、后序遍歷的特點(diǎn), 我們知道后序遍歷最后一個(gè)結(jié)點(diǎn)即為根結(jié)點(diǎn), 即根結(jié)點(diǎn)為 G。 第二步,觀察中序遍歷 ADEFGHMZ。其中 root 節(jié)點(diǎn) G 左側(cè)的 ADEF 必然是 root 的左子樹(shù),G 右側(cè)的 HMZ 必然是 root 的右子樹(shù)。 第三步,觀察左子樹(shù) ADEF,左子樹(shù)的中的根節(jié)點(diǎn)必然是大樹(shù)的 root 的 leftchild。在前序 遍歷中,大樹(shù)的 root 的 leftchild 位于 root 之后,所以左子樹(shù)的根節(jié)點(diǎn)為 D。 第四步,同樣的道理,root 的右子樹(shù)節(jié)點(diǎn) HMZ 中的根節(jié)點(diǎn)也可以通過(guò)前序遍歷求得。在前 后序遍歷中, 一定是先把 root 和 root 的所有左子樹(shù)節(jié)

11、點(diǎn)遍歷完之后才會(huì)遍歷右子樹(shù), 并且 遍歷的左子樹(shù)的第一個(gè)節(jié)點(diǎn)就是左子樹(shù)的根節(jié)點(diǎn)。 同理, 遍歷的右子樹(shù)的第一個(gè)節(jié)點(diǎn)就是右 子樹(shù)的根節(jié)點(diǎn)。 第五步,觀察發(fā)現(xiàn),上面的過(guò)程是遞歸的。先找到當(dāng)前樹(shù)的根節(jié)點(diǎn),然后劃分為左子樹(shù),右 子樹(shù),然后進(jìn)入左子樹(shù)重復(fù)上面的過(guò)程,然后進(jìn)入右子樹(shù)重復(fù)上面的過(guò)程。最后就可以還原 一棵樹(shù)了。該步遞歸的過(guò)程可以簡(jiǎn)潔表達(dá)如下: 1 確定根,確定左子樹(shù),確定右子樹(shù)。 2 在左子樹(shù)中遞歸。 3 在右子樹(shù)中遞歸。 4 打印當(dāng)前根。 這樣,我們就可以畫出二叉樹(shù)的形狀,如上圖所示,這里就不再贅述。 那么,前序遍歷:GDAFEMHZ 15.15.私有私有 IPIP 地址地址 在現(xiàn)在的網(wǎng)絡(luò)中

12、, IP 地址分為公網(wǎng) IP 和私有 IP 地址。 公網(wǎng) IP 是在 Internet 使用的 IP 地址, 而私有 IP 地址是在局域網(wǎng)中使用的 IP 地址。 由于我們目前使用的 IP V4 協(xié)議的限制,現(xiàn)在 IP 地址的數(shù)量是有限的。這樣,我們就 不能為居于網(wǎng)中的每一臺(tái)計(jì)算機(jī)分配一個(gè)公網(wǎng) IP。所以,在局域網(wǎng)中的每臺(tái)計(jì)算機(jī)就只能 使用私有 IP 地址了,如我們常見(jiàn)的 192.168.0.*,就是私有 IP 地址。 私有 IP 地址是一段保留的 IP 地址。只是使用在局域網(wǎng)中,在 Internet 上是不使用的。 私有 IP 地址的范圍有: -55 1

13、55 -55 上述的 IP 地址都是可以使用在局域網(wǎng)中的。 16.16.頁(yè)面存儲(chǔ)結(jié)構(gòu)的邏輯地址和物理地址頁(yè)面存儲(chǔ)結(jié)構(gòu)的邏輯地址和物理地址 邏輯地址包括頁(yè)面號(hào)和頁(yè)內(nèi)地址(偏移量) 轉(zhuǎn)換:頁(yè)面號(hào)轉(zhuǎn)換成物理塊號(hào),大小相同,頁(yè)內(nèi)地址不變 最后的物理地址就是對(duì)應(yīng)物理塊號(hào)*頁(yè)面大小頁(yè)內(nèi)偏移量 17.17. 數(shù)據(jù)庫(kù)范式(數(shù)據(jù)庫(kù)范式(1NF1NF 2NF2NF 3NF3NF BCNFBCNF)詳詳 1.1 第一范式(1NF)無(wú)重復(fù)的列 所謂第一范式(1NF)是指數(shù)據(jù)庫(kù)表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能 有多

14、個(gè)值, 即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。 如果出現(xiàn)重復(fù)的屬性, 就可能需要定義一個(gè)新的實(shí)體, 新的實(shí)體由重復(fù)的屬性構(gòu)成, 新實(shí)體與原實(shí)體之間為一對(duì)多 關(guān)系。在第一范式(1NF)中表的每一行只包含一個(gè)實(shí)例的信息。簡(jiǎn)而言之,第一范式就是 無(wú)重復(fù)的列。 1.2 第二范式(2NF)屬性完全依賴于主鍵 消除部分子函數(shù)依賴 如果關(guān)系模式 R 為第一范式, 并且 R 中每一個(gè)非主屬性完全函數(shù)依賴于 R 的某個(gè)候選鍵,則 稱為第二范式模式。 第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來(lái)的,即滿足第二范式(2NF)必須 先滿足第一范式(1NF) 。第二范式(2NF)要求數(shù)據(jù)庫(kù)表中

15、的每個(gè)實(shí)例或行必須可以被惟一 地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)。這個(gè)惟一屬性 列被稱為主關(guān)鍵字或主鍵、主碼。 1.3 第三范式(3NF)屬性不依賴于其它非主屬性 消除傳遞依賴 如果關(guān)系模式 R 是第二范式,且每個(gè)非主屬性都不傳遞依賴于 R 的候選鍵,則稱 R 為第三 范式模式。 滿足第三范式(3NF)必須先滿足第二范式(2NF) 。第三范式(3NF)要求一個(gè)數(shù)據(jù)庫(kù)表 中不包含已在其它表中已包含的非主關(guān)鍵字信息。 1.4 鮑依斯-科得范式(BCNF 是 3NF 的改進(jìn)形式) 若關(guān)系模式 R 是第一范式, 且每個(gè)屬性都不傳遞依賴于 R 的候選鍵。 這種關(guān)系模式就是

16、 BCNF 模式。 即在第三范式的基礎(chǔ)上, 數(shù)據(jù)庫(kù)表中如果不存在任何字段對(duì)任一候選關(guān)鍵字段的傳遞 函數(shù)依賴則符合鮑依斯-科得范式。 18.18.數(shù)組和指針數(shù)組和指針 C+/C 程序中,指針和數(shù)組在不少地方可以相互替換著用,讓人產(chǎn)生一種錯(cuò)覺(jué),以為兩者是 等價(jià)的。 數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組) ,要么在棧上被創(chuàng)建。數(shù)組名對(duì)應(yīng)著(而不是 指向)一塊內(nèi)存,其地址與容量在生命期內(nèi)保持不變,只有數(shù)組的內(nèi)容可以改變。 指針可以隨時(shí)指向任意類型的內(nèi)存塊,它的特征是“可變”,所以我們常用指針來(lái)操作動(dòng)態(tài)內(nèi) 存。 當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),該數(shù)組自動(dòng)退化為同類型的指針。 19.UML19.UML

17、類圖中類與類的關(guān)系類圖中類與類的關(guān)系 依賴:用到了別人的方法或變量;關(guān)聯(lián):對(duì)稱的,好比你是我的朋友,我也是你的朋友;聚 合:非對(duì)稱的,員工與公司就是聚合關(guān)系,還有一個(gè)重要特點(diǎn)就是生命周期可以不同,員工 離開(kāi)了公司還是可以活的;組合:生命周期一致,好比人與心臟,一個(gè)沒(méi)了另一個(gè)也沒(méi)了。 強(qiáng)度:依賴關(guān)聯(lián)聚合90 group by cno; 3.3. 數(shù)據(jù)庫(kù)索引的作用和優(yōu)點(diǎn)缺點(diǎn)數(shù)據(jù)庫(kù)索引的作用和優(yōu)點(diǎn)缺點(diǎn) 為什么要?jiǎng)?chuàng)建索引呢?這是因?yàn)椋瑒?chuàng)建索引可以大大提高系統(tǒng)的性能。 第一,通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。 第二,可以大大加快 數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。 第

18、三, 可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有 意義。 第四,在使用分組和排序 子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組 和排序的時(shí)間。 第五, 通過(guò)使用索引, 可以在查詢的過(guò)程中, 使用優(yōu)化隱藏器, 提高系統(tǒng)的性能。 也許會(huì)有人要問(wèn):增加索引有如此多的優(yōu)點(diǎn),為什么不對(duì)表中的每一個(gè)列創(chuàng)建一 個(gè)索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優(yōu) 點(diǎn), 但是,為表中的每一個(gè)列都增加索引,是非常不明智的。這是因?yàn)?,增?索引也有許多不利的一個(gè)方面。 第一,創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù) 量的增加而增加。 第二,索引需要占物理空間,除了數(shù)

19、據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一 定的物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大。 第三、當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這 樣就降低了數(shù)據(jù)的維護(hù)速度。 索引是建立在數(shù)據(jù)庫(kù)表中的某些列的上面。因此,在創(chuàng)建索引的時(shí)候,應(yīng)該仔細(xì) 考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引。一般來(lái)說(shuō),應(yīng)該在這 些列 上創(chuàng)建索引,例如: 在經(jīng)常需要搜索的列上,可以加快搜索的速度; 在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu); 在經(jīng)常用在連接的列上,這 些列主要是一些外鍵,可以加快連接的速度; 在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排

20、序,其指定的范 圍是連續(xù)的; 在經(jīng)常需要排序的列上創(chuàng) 建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引 的排序,加快排序查詢時(shí)間; 在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。 4.4. JDBCJDBC 鏈接鏈接 OracleOracle 實(shí)現(xiàn)查詢實(shí)現(xiàn)查詢 四、操作系統(tǒng)四、操作系統(tǒng) 網(wǎng)絡(luò)網(wǎng)絡(luò) 1.1. InternetInternet 采用哪種網(wǎng)絡(luò)協(xié)議?該協(xié)議的主要層次結(jié)構(gòu)?采用哪種網(wǎng)絡(luò)協(xié)議?該協(xié)議的主要層次結(jié)構(gòu)? 答案:TCP/IP協(xié)議。應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層。 2.2. Internet 物理地址和物理地址和 IP 地址轉(zhuǎn)換采用什么協(xié)議?地址轉(zhuǎn)換采

21、用什么協(xié)議? 答案:地址解析協(xié)議ARP address resolution protocol 3. IP 地址的編碼分為哪倆部分?地址的編碼分為哪倆部分? 答案:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。不過(guò)是要和“子網(wǎng)掩碼”按位與上之后才能區(qū)分哪些是網(wǎng)絡(luò)位哪些是 主機(jī)位。 4. 在多級(jí)存儲(chǔ)體系中,在多級(jí)存儲(chǔ)體系中,Cache-主存主存結(jié)構(gòu)的作用是解決結(jié)構(gòu)的作用是解決()的的 問(wèn)題。問(wèn)題。 答案:主存與CPU速度不匹配 5. 實(shí)現(xiàn)不同的作業(yè)處理方式(如批處理,分時(shí)處理,實(shí)時(shí)處理等)實(shí)現(xiàn)不同的作業(yè)處理方式(如批處理,分時(shí)處理,實(shí)時(shí)處理等)主主 要是基于操作系統(tǒng)對(duì)(要是基于操作系統(tǒng)對(duì)( 處理器處理器 )管理采用了不同的策

22、略)管理采用了不同的策略 批處理以前的大型機(jī)(Mainframe)上所采用的系統(tǒng),需要把一批程序事先寫好(打孔 紙帶),然后計(jì)算得出結(jié)果 分時(shí)現(xiàn)在流行的 PC,服務(wù)器都是采用這種運(yùn)行模式,即把 CPU 的運(yùn)行分成若干時(shí)間 片分別處理不同的運(yùn)算請(qǐng)求 實(shí)時(shí)一般用于單片機(jī)上,比如電梯的上下控制中,對(duì)于按鍵等動(dòng)作要求進(jìn)行實(shí)時(shí)處理 6.解釋系統(tǒng)和編譯系統(tǒng)解釋系統(tǒng)和編譯系統(tǒng) 計(jì)算機(jī)并不能直接地接受和執(zhí)行用高級(jí)語(yǔ)言編寫的源程序,源程序在輸入計(jì)算機(jī)時(shí),通過(guò) 翻譯程序翻譯成機(jī)器語(yǔ)言形式的目標(biāo)程序,計(jì)算機(jī)才能識(shí)別和執(zhí)行。這種翻譯通常有兩 種方式,即編譯方式和解釋方式。 編譯方式是指利用事先編好的一個(gè)稱為編譯程序的

23、機(jī)器語(yǔ)言程序, 作為系統(tǒng)軟件存放在計(jì)算 機(jī)內(nèi), 當(dāng)用戶將高級(jí)語(yǔ)言編寫的源程序輸入計(jì)算機(jī)后, 編譯程序便把源程序整個(gè)地翻譯成用 機(jī)器語(yǔ)言表示的與之等價(jià)的目標(biāo)程序, 然后計(jì)算機(jī)再執(zhí)行該目標(biāo)程序, 以完成源程序要處理 的運(yùn)算并取得結(jié)果。 解釋方式是指源程序進(jìn)入計(jì)算機(jī)后,解釋程序邊掃描邊解釋,逐句輸入逐句翻譯,計(jì)算機(jī)一 句句執(zhí)行,并不產(chǎn)生目標(biāo)程序。如 PASCAL、FORTRAN、COBOL 等高級(jí)語(yǔ)言執(zhí)行編譯方 式;BASIC 語(yǔ)言則以執(zhí)行解釋方式為主;而 PASCAL、C 語(yǔ)言是能書寫編譯程序的高級(jí)程 序設(shè)計(jì)語(yǔ)言。 編譯程序、解釋程序、匯編程序是 3 種語(yǔ)言處理程序。其區(qū)別主要為: 匯編程序 (為

24、低級(jí)服務(wù)) 是將匯編語(yǔ)言書寫的源程序翻譯成由機(jī)器指令和其他信息組成的目 標(biāo)程序。 解釋程序(為高級(jí)服務(wù))直接執(zhí)行源程序或源程序的內(nèi)部形式,一般是讀一句源程序,翻譯 一句,執(zhí)行一句,不產(chǎn)生目標(biāo)代碼,如 BASIC 解釋程序。 編譯程序 (為高級(jí)服務(wù)) 是將高級(jí)語(yǔ)言書寫的源程序翻譯成與之等價(jià)的低級(jí)語(yǔ)言的目標(biāo)程序。 編譯程序與解釋程序最大的區(qū)別之一在于前者生成目標(biāo)代碼,而后者不生成;此外,前者編譯程序與解釋程序最大的區(qū)別之一在于前者生成目標(biāo)代碼,而后者不生成;此外,前者 產(chǎn)生的目標(biāo)代碼的執(zhí)行速度比解釋程序的執(zhí)行速度要快;后者人機(jī)交互好,適于初學(xué)者使產(chǎn)生的目標(biāo)代碼的執(zhí)行速度比解釋程序的執(zhí)行速度要快;后

25、者人機(jī)交互好,適于初學(xué)者使 用用。用用 COBOL、FORTRAN 等語(yǔ)言編寫的程序考慮到執(zhí)行速度一般都是編譯執(zhí)行等語(yǔ)言編寫的程序考慮到執(zhí)行速度一般都是編譯執(zhí)行。 解釋解釋: 程序運(yùn)行時(shí),取一條指令,將其換化為機(jī)器指令,程序運(yùn)行時(shí),取一條指令,將其換化為機(jī)器指令, 再執(zhí)行這條機(jī)器指令。再執(zhí)行這條機(jī)器指令。 編譯:程序運(yùn)編譯:程序運(yùn) 行時(shí)之前,將程序的把有代碼編譯為機(jī)器代碼,再運(yùn)行這個(gè)程序。行時(shí)之前,將程序的把有代碼編譯為機(jī)器代碼,再運(yùn)行這個(gè)程序。 下面是對(duì)編譯型語(yǔ)言和解釋型語(yǔ)言介紹: 編譯型語(yǔ)言:編譯型語(yǔ)言: 編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標(biāo)代碼(機(jī)器語(yǔ)言),因此其目

26、 標(biāo)程序可以脫離其語(yǔ)言環(huán)境獨(dú)立執(zhí)行, 使用比較方便、 效率較高。 但應(yīng)用程序一旦需要修改, 必須先修改源代碼,再重新編譯生成新的目標(biāo)文件( .OBJ)才能執(zhí)行,只有目標(biāo)文件而沒(méi) 有源代碼,修改很不方便。現(xiàn)在大多數(shù)的編程語(yǔ)言都是編譯型的。編譯程序?qū)⒃闯绦蚍g成 目標(biāo)程序后保存在另一個(gè)文件中, 該目標(biāo)程序可脫離編譯程序直接在計(jì)算機(jī)上多次運(yùn)行。 大 多數(shù)軟件產(chǎn)品都是以目標(biāo)程序形式發(fā)行給用戶的, 不僅便于直接運(yùn)行, 同時(shí)又使他人難于盜 用其中的技術(shù) C、C+、Fortran、Visual Foxpro、Pascal、Delphi、Ada 都是編譯實(shí)現(xiàn)的。 解釋型語(yǔ)言:解釋型語(yǔ)言: 解釋型語(yǔ)言的實(shí)現(xiàn)中,

27、翻譯器并不產(chǎn)生目標(biāo)機(jī)器代碼,而是產(chǎn)生易于執(zhí)行的中間代碼,這種 中間代碼與機(jī)器代碼是不同的,中間代碼的解釋是由軟件支持的,不能直接使用硬件,軟件 解釋器通常會(huì)導(dǎo)致執(zhí)行效率較低。 用解釋型語(yǔ)言編寫的程序是由另一個(gè)可以理解中間代碼的 解釋程序執(zhí)行的。 與編譯程序不同的是, 解釋程序的任務(wù)是逐一將源程序的語(yǔ)句解釋成可執(zhí) 行的機(jī)器指令, 不需要將源程序翻譯成目標(biāo)代碼后再執(zhí)行。 解釋程序的優(yōu)點(diǎn)是當(dāng)語(yǔ)句出現(xiàn)語(yǔ) 法錯(cuò)誤時(shí),可以立即引起程序員注意,而程序員在程序開(kāi)發(fā)期間就能進(jìn)行校正。對(duì)于解釋型 Basic 語(yǔ)言,需要一個(gè)專門的解釋器解釋執(zhí)行 Basic 程序,每條語(yǔ)言只有在執(zhí)行才被翻譯。 這種解釋型語(yǔ)言每執(zhí)行一

28、次就翻譯一次,因而效率低下。一般地,動(dòng)態(tài)語(yǔ)言都是解釋型的, 如 Tcl、Perl、Ruby、VBScript、 JavaScript 等。 混合型:混合型: Java 很特殊,Java 程序也需要編譯,但是沒(méi)有直接編譯稱為機(jī)器語(yǔ)言,而是編譯稱為字節(jié) 碼,然后在 Java 虛擬機(jī)上用解釋方式執(zhí)行字節(jié)碼。Python 的也采用了類似 Java 的編譯模 式,先將 Python 程序編譯成 Python 字節(jié)碼,然后由一個(gè)專門的 Python 字節(jié)碼解釋器負(fù)責(zé) 解釋執(zhí)行字節(jié)碼。(Java 虛擬機(jī)對(duì)字節(jié)碼的執(zhí)行相當(dāng)于模擬一個(gè) cpu,而 ruby1.8-在虛擬機(jī) 還未出現(xiàn)前-是通過(guò)解釋成語(yǔ)法樹(shù)執(zhí)行。)

29、 個(gè)人認(rèn)為,java 是解釋型的語(yǔ)言,因?yàn)殡m然 java 也需要編譯,編譯成.class 文件,但是并 不是機(jī)器可以識(shí)別的語(yǔ)言,而是字節(jié)碼,最終還是需要 jvm 的解釋,才能在各個(gè)平臺(tái)執(zhí)行, 這同時(shí)也是 java 跨平臺(tái)的原因。所以可是說(shuō) java 即是編譯型的,也是解釋型,但是如果非 要?dú)w類的話,從概念上的定義,恐怕 java 應(yīng)該歸到解釋型的語(yǔ)言中。 7.7.U Unixnix 系統(tǒng)中查看當(dāng)前目錄的子目錄系統(tǒng)中查看當(dāng)前目錄的子目錄 ls 命令 查看大小 ll 命令 8.8.操作系統(tǒng)的分類操作系統(tǒng)的分類 單用戶單任務(wù)操作系統(tǒng)-是指一臺(tái)計(jì)算機(jī)同時(shí)只能有一個(gè)用戶在使用, 該用戶一次只 能提交一個(gè)

30、作業(yè),一個(gè)用戶獨(dú)自享用系統(tǒng)的全部硬件和軟件資源。 (如:MS-DOS、PC-DOS、 CP/M) 單用戶多任務(wù)操作系統(tǒng)是指-一臺(tái)計(jì)算機(jī)同時(shí)只能有一個(gè)用戶使用,但該用戶一 次可以運(yùn)行或提交多個(gè)作業(yè)。 (如:windows) (window2000 和 XP 都可以有多個(gè)用戶,為什 么還是單用戶呢?因?yàn)?windows 雖然可以設(shè)置多個(gè)用戶,但是同一時(shí)候只能讓一個(gè)用戶獨(dú) 享系統(tǒng)的所有資源,所以 windows 只能是單用戶操作系統(tǒng)!這是我的理解! !因?yàn)椤岸嘤脩簟?的定義是:充許多個(gè)用戶通過(guò)各自的終端,使用同一臺(tái)主機(jī),共享主機(jī)系統(tǒng)的各類資源) 多用戶與多任務(wù)操作系統(tǒng)是指-一臺(tái)計(jì)算機(jī)可以同時(shí)有多個(gè)用

31、戶同時(shí)使用,并且同 時(shí)可以執(zhí)行由多個(gè)用戶提交的多個(gè)任務(wù)(如 Unix/Linux 等) (補(bǔ)充:具有分時(shí)特性) 9 9 存儲(chǔ)器存儲(chǔ)器 動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(Dynamic Random Access Memory,DRAM)是一種半導(dǎo)體存儲(chǔ)器,主 要的作用原理是利用電容內(nèi)存儲(chǔ)電荷的多寡來(lái)代表一個(gè)二進(jìn)制比特(bit)是 1 還是 0。由于 在現(xiàn)實(shí)中電容會(huì)有漏電的現(xiàn)象, 導(dǎo)致電位差不足而使記憶消失, 因此除非電容經(jīng)常周期性地 充電,否則無(wú)法確保記憶長(zhǎng)存。由于這種需要定時(shí)刷新的特性,因此被稱為“動(dòng)態(tài)”存儲(chǔ)器。 相對(duì)來(lái)說(shuō),“靜態(tài)”存儲(chǔ)器(SRAM)只要存入數(shù)據(jù)后,縱使不刷新也不會(huì)丟失記憶。 與 SRAM

32、 相比,DRAM 的優(yōu)勢(shì)在于結(jié)構(gòu)簡(jiǎn)單每一個(gè)比特的數(shù)據(jù)都只需一個(gè)電容跟一個(gè)晶 體管來(lái)處理,相比之下在 SRAM 上一個(gè)比特通常需要六個(gè)晶體管。正因這緣故,DRAM 擁有 非常高的密度,單位體積的容量較高因此成本較低。但相反的,DRAM 也有訪問(wèn)速度較慢, 耗電量較大的缺點(diǎn)。 與大部分的隨機(jī)存取存儲(chǔ)器(RAM)一樣,由于存在 DRAM 中的數(shù)據(jù)會(huì)在電力切斷以后很 快消失,因此它屬于一種易失性存儲(chǔ)器(volatile memory)設(shè)備。 五、五、Java 1.1、GC 是什么?常用的兩種方法是什么? 答: (1)GC 是垃圾收集的意思(Garbage Collection),內(nèi)存處理是編程人員容易

33、出現(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)存的顯示操作方法。 (2)System.gc()用來(lái)強(qiáng)制立即回收垃圾,即釋放內(nèi)存。 java 對(duì)內(nèi)存的釋放采取的垃圾自動(dòng)回收機(jī)制,在編程的時(shí)候不用考慮變量不用釋放內(nèi)存, java 虛擬機(jī)可以自動(dòng)判斷出并收集到垃圾,但一般不會(huì)立即釋放它們的內(nèi)存空間,當(dāng)然也 可以在程序中使用 System.gc()來(lái)強(qiáng)制垃圾回收,但是要注意的是,系統(tǒng)并不保證會(huì)立即進(jìn) 行釋放內(nèi)存。 gc 首先要判斷該對(duì)象是否是時(shí)候可以收

34、集。兩種常用的方法是引用計(jì)數(shù)和對(duì)象的引 用遍歷。 Java 的垃圾回收機(jī)制是 Java 虛擬機(jī)提供的能力, 用于在空閑時(shí)間以不定時(shí)的方式動(dòng)態(tài)回收 無(wú)任何引用的對(duì)象占據(jù)的內(nèi)存空間。 需要注意的是: 垃圾回收回收的是無(wú)任何引用的對(duì)象占據(jù)的內(nèi)存空間而不是對(duì)象本身, 很多 人來(lái)我公司面試時(shí),我都會(huì)問(wèn)這個(gè)問(wèn)題的,70%以上的人回答的含義是回收對(duì)象,實(shí)際上這 是不正確的。 System.gc() Runtime.getRuntime().gc() 上面的方法調(diào)用時(shí)用于顯式通知 JVM 可以進(jìn)行一次垃圾回收,但真正垃圾回收機(jī)制具體在 什么時(shí)間點(diǎn)開(kāi)始發(fā)生動(dòng)作這同樣是不可預(yù)料的, 這和搶占式的線程在發(fā)生作用時(shí)的

35、原理一樣。 2、線程常用的方法是什么? 答: Thread 類的常用方法: static Thread currentThread()/靜態(tài)方法,通過(guò)這個(gè)方法可以獲得主線程的引 用,從而達(dá)到操作主線程的目的。 static int activeCount()/靜態(tài)方法,獲得當(dāng)前活動(dòng)線程數(shù)量 long getId()/獲得當(dāng)前線程的 id String getName()/獲得當(dāng)前線程的名字 int getPriority()/獲得優(yōu)先級(jí) boolean isAlive()/當(dāng)前線程是否處于活動(dòng)狀態(tài)。 boolean isDaemon()/是否為守護(hù)線程 void run()/run()方法,我們用線程,主要就是對(duì) run()方法的重寫 void start()/使該線程開(kāi)始執(zhí)行;Java 虛擬機(jī)調(diào)用該線程 run()方法。 void sleep()/使當(dāng)前線程休眠,以執(zhí)行其他線程,如 Thread.sleep(1000)休 眠 1 秒 3、Jav

溫馨提示

  • 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)論