2020年度計(jì)算機(jī)基礎(chǔ)知識(shí)面試題庫_第1頁
2020年度計(jì)算機(jī)基礎(chǔ)知識(shí)面試題庫_第2頁
2020年度計(jì)算機(jī)基礎(chǔ)知識(shí)面試題庫_第3頁
2020年度計(jì)算機(jī)基礎(chǔ)知識(shí)面試題庫_第4頁
2020年度計(jì)算機(jī)基礎(chǔ)知識(shí)面試題庫_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)基礎(chǔ)知識(shí)面試題庫

資料僅供參考

對(duì)于項(xiàng)目

1.明確你的項(xiàng)目到底是做什么的,有哪些功能

2.明確你的項(xiàng)目的整體架構(gòu),在面試的時(shí)候能夠清楚地畫給面試官看而且清

楚地指出從哪里調(diào)用到哪里、使用什么方式調(diào)用

3.明確你的模塊在整個(gè)項(xiàng)目中所處的位置及作用

4.明確你的模塊用到了哪些技術(shù),更好一些的能夠再了解一下整個(gè)項(xiàng)目用到

了哪些技術(shù)

操作系統(tǒng)

1.操作系統(tǒng)的四大特性:

a)并發(fā)性

b)共享性

c)虛擬性

d)不確定性

2.清敘述一下并發(fā)和并行兩個(gè)概念的區(qū)別?

a)并行是指兩個(gè)或多個(gè)事件在同一時(shí)刻發(fā)生,

并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)

發(fā)生。

3.什么是進(jìn)程?什么是線程?

資料僅供參考

a)“進(jìn)程是一個(gè)可并發(fā)執(zhí)行的,具有獨(dú)立功能的

程序關(guān)于某個(gè)數(shù)據(jù)集合的一次執(zhí)行過程,也

是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單

位”。進(jìn)程是資源分配的基本單位。

b)線程也稱為輕量級(jí)進(jìn)程(LWP),是程序執(zhí)行

流■的最小單位,它是進(jìn)程的一個(gè)實(shí)體,是

系統(tǒng)獨(dú)立調(diào)度和分派處理機(jī)的基本單位。線

程是操作系統(tǒng)調(diào)度的最小單位。

4.進(jìn)程和線程的區(qū)別?從調(diào)度、并發(fā)性、擁有

資源和系統(tǒng)開銷四個(gè)方面來比較:

a)調(diào)度。在引入線程的操作系統(tǒng)中,把線程作

為調(diào)度和分派CPU的基本單位,把進(jìn)程作為

資源分配的基本單位,顯著提高了并發(fā)程

度。由于系統(tǒng)調(diào)度的基本單位是線程,因此

資料僅供參考

每個(gè)進(jìn)程至少創(chuàng)立一個(gè)線程,否則無法被調(diào)

度。

b)并發(fā)性。多線程能夠提高服務(wù)的質(zhì)■,在一

個(gè)線程阻塞時(shí),還有其它線程提供服務(wù)。

c)擁有資源。進(jìn)程是擁有資源的獨(dú)立單位,線

程自己不擁有系統(tǒng)資源,而是共享進(jìn)程的資

源(包括代碼段、數(shù)據(jù)段即系統(tǒng)資源等)。

d)系統(tǒng)開銷。進(jìn)程切換的開銷遠(yuǎn)遠(yuǎn)大于線程切

換的開銷,進(jìn)程的切換需要保存很多現(xiàn)場(chǎng),

但線程只需要保存和設(shè)置少■的寄存器內(nèi)

容,不涉及存儲(chǔ)器管理方面的操作。

5.進(jìn)程的特征:

a)動(dòng)態(tài)性:進(jìn)程是動(dòng)態(tài)產(chǎn)生和動(dòng)態(tài)消亡的,有

其生存周期。

資料僅供參考

b)并發(fā)性:一個(gè)進(jìn)程能夠與其它進(jìn)程一起向前

推進(jìn)。

C)獨(dú)立性:一個(gè)進(jìn)程是一個(gè)相對(duì)完整的調(diào)度單

位。

d)異步性:每個(gè)進(jìn)程都已相對(duì)獨(dú)立、不可預(yù)知

的速度向前推進(jìn)。

e)結(jié)構(gòu)性:為了控制和管理進(jìn)程,系統(tǒng)為每個(gè)

進(jìn)程設(shè)立一個(gè)進(jìn)程控制塊(PCB)。

6.進(jìn)程有幾種狀態(tài)?

a)就緒狀態(tài)

b)運(yùn)行狀態(tài):?jiǎn)蜟PU環(huán)境下,系統(tǒng)處于運(yùn)行狀

態(tài)的進(jìn)程最多只有一個(gè)。

c)阻塞狀態(tài)

7.進(jìn)程的組成:

a)程序:

資料僅供參考

b)數(shù)據(jù)集合:進(jìn)程獨(dú)有

c)進(jìn)程控制塊(PCB):它和進(jìn)程一一對(duì)應(yīng),

PCB是操作系統(tǒng)能感知進(jìn)程存在的唯一標(biāo)

識(shí),操作系統(tǒng)正是經(jīng)過管理PCB來管理進(jìn)程

的。系統(tǒng)創(chuàng)立進(jìn)程時(shí),為每個(gè)進(jìn)程分配

PCB,進(jìn)程執(zhí)行完成后,系統(tǒng)釋放PCB,進(jìn)

程也隨之消亡。

8.進(jìn)程的切換:

a)進(jìn)程上下文包含用戶級(jí)上下文、系統(tǒng)級(jí)上下

文、寄存器上下文

b)進(jìn)程上下文切換是核心態(tài)的切換,不發(fā)生在

用戶態(tài)。

c)用戶態(tài)到核心態(tài)之間的轉(zhuǎn)變是CPU模式的改

變。模式切換不同于進(jìn)程切換,并不引起進(jìn)

程狀態(tài)的改變。

資料僅供參考

9.為什么會(huì)提出線程這個(gè)概念?進(jìn)程的缺點(diǎn)是

什么?

a)進(jìn)程切換開銷大

b)進(jìn)程通信代價(jià)大

c)進(jìn)程之間并發(fā)性粒度粗,并發(fā)度不高

d)不適合并行計(jì)算和分布式并行計(jì)算的要求

e)不適合客戶-服務(wù)器計(jì)算的要求

f)操作系統(tǒng)中引入進(jìn)程的目的是為了使多個(gè)程

序并發(fā)執(zhí)行,改進(jìn)資源的利用率以提高系統(tǒng)

的吞吐

10.線程的分類:

a)用戶級(jí)線程-ULT,優(yōu)點(diǎn)是線程切換不需要

系統(tǒng)狀態(tài)的轉(zhuǎn)換,每個(gè)進(jìn)程能夠使用專門的

調(diào)度算法來調(diào)度線程,不需要依賴操作系統(tǒng)

底層的內(nèi)核。缺點(diǎn)是父進(jìn)程阻塞會(huì)導(dǎo)致線程

資料僅供參考

全都阻塞,不能真正的并行。Java的線程就

是一種用戶級(jí)的線程。

b)內(nèi)核級(jí)線程-KLT,優(yōu)點(diǎn)是同一個(gè)進(jìn)程內(nèi)多

個(gè)線程能夠并行執(zhí)行,缺點(diǎn)是線程狀態(tài)轉(zhuǎn)換

時(shí)內(nèi)核態(tài)的任務(wù),一般很慢。

c)混合式線程-上兩種的結(jié)合,有良好的效

果。

11.進(jìn)程控制塊的作用?它是如何描述進(jìn)程動(dòng)

態(tài)性質(zhì)的?

a)PCB是系統(tǒng)感知進(jìn)程存在的唯一標(biāo)志,是進(jìn)

程動(dòng)態(tài)特性的集中反映,和進(jìn)程一一對(duì)應(yīng),

操作系統(tǒng)經(jīng)過管理PCB來管理進(jìn)程。

b)進(jìn)程控制塊包含進(jìn)程描述信息,控制信息,

和資源管理信息三類。這些信息的變化反映

進(jìn)程的動(dòng)態(tài)性質(zhì)。

資料僅供參考

12.操作系統(tǒng)內(nèi)核都包括哪些內(nèi)容?

a)一是支撐功能,包括中斷處理,時(shí)鐘管理和

原語操作等,二是資源管理功能,包括進(jìn)程

管理,存儲(chǔ)器管理和設(shè)備管理等。

13.處理機(jī)調(diào)度的三個(gè)分類?

a)高級(jí)調(diào)度-作業(yè)調(diào)度

b)中級(jí)調(diào)度-交換調(diào)度(內(nèi)存和硬盤之間的交

換)

c)低級(jí)調(diào)度-進(jìn)程調(diào)度(操作系統(tǒng)的核心)

d)高級(jí)調(diào)度發(fā)生在創(chuàng)立新進(jìn)程時(shí),它決定一個(gè)

進(jìn)程能否被創(chuàng)立,或者是創(chuàng)立后能否被設(shè)置

成就緒狀態(tài),以參與競(jìng)爭(zhēng)處理器資源;中級(jí)

調(diào)度反映到進(jìn)程狀態(tài)上就是掛起和解除掛

起,它根據(jù)系統(tǒng)的當(dāng)前符合情況決定停留在

資料僅供參考

主存中的進(jìn)程數(shù);低級(jí)調(diào)度則是決定哪一個(gè)

就緒進(jìn)程或線程占有CPU運(yùn)行。

14.批作業(yè)調(diào)度算法

a)先來先服務(wù)

b)最短作業(yè)優(yōu)先

c)響應(yīng)比高者優(yōu)先

d)優(yōu)先級(jí)算法

15.進(jìn)程調(diào)度的方式:

a)非剝奪方式(非搶占式方式):優(yōu)點(diǎn)是簡(jiǎn)單、易

實(shí)現(xiàn),系統(tǒng)開銷小。缺點(diǎn)是不太靈活,難以

滿足緊迫任務(wù)必須立即執(zhí)行的要求。實(shí)時(shí)系

統(tǒng)不宜采用這種調(diào)度方式。

b)可剝奪方式(搶占式方式):優(yōu)先權(quán)更高的進(jìn)程

優(yōu)先執(zhí)行。

16.進(jìn)程調(diào)度的算法:

資料僅供參考

a)先來先服務(wù)算法

b)最短優(yōu)先算法

c)優(yōu)先級(jí)算法:優(yōu)先級(jí)高的先執(zhí)行。能夠采用

剝奪或非剝奪,剝奪方式更能反映優(yōu)先的特

點(diǎn),可是會(huì)造成無窮阻塞和饑餓現(xiàn)象。

d)輪轉(zhuǎn)算法:基本思想是系統(tǒng)把所有就緒進(jìn)程

按先來先服務(wù)的原則排成一個(gè)隊(duì)列,且規(guī)定

一個(gè)較小的時(shí)間單元,稱為時(shí)間■或時(shí)間

片,按時(shí)間片把CPU輪流分配給進(jìn)入就緒隊(duì)

列的第一個(gè)進(jìn)程使用,當(dāng)進(jìn)程的時(shí)間片使用

完后,產(chǎn)生一個(gè)時(shí)鐘中斷,剝奪該進(jìn)程的執(zhí)

行,將它送到就緒隊(duì)列的隊(duì)尾,等待下次調(diào)

度。輪轉(zhuǎn)算法專門為分時(shí)系統(tǒng)設(shè)計(jì)。

e)多級(jí)隊(duì)列調(diào)度算法:根據(jù)不同的進(jìn)程,分配

到不同的隊(duì)列中,實(shí)行不同的調(diào)度算法。一

資料僅供參考

般按照優(yōu)先級(jí)分成多個(gè)隊(duì)列,高優(yōu)先級(jí)的任

務(wù)先做。

f)多級(jí)反饋隊(duì)列調(diào)度算法:按優(yōu)先級(jí)分配隊(duì)

列,可是優(yōu)先級(jí)越高分配的時(shí)間片越小,如

果沒做完,自動(dòng)移動(dòng)到下一級(jí)隊(duì)列繼續(xù)做。

g)實(shí)時(shí)調(diào)度算法

17.操作系統(tǒng)多任務(wù)的搶占機(jī)制是怎么實(shí)現(xiàn)

的?

18.哪種權(quán)限許可用戶進(jìn)入一個(gè)文件系統(tǒng)的目

錄?Read,Execute,Write,Access

ControlI

19.Linux32位系統(tǒng),應(yīng)用程序最多能分配的

內(nèi)存大小?

20.sleep和wait的區(qū)別?

21.Win32下線程的基本模式?

資料僅供參考

22.進(jìn)程之間的關(guān)系?

a)競(jìng)爭(zhēng)關(guān)系:由于進(jìn)程之間不知道彼此的存

在,而使用了同一份資源,就會(huì)造成競(jìng)爭(zhēng)。

資源競(jìng)爭(zhēng)會(huì)出現(xiàn)饑餓和死鎖。

b)協(xié)作關(guān)系

23.什么是臨界資源?什么是臨界區(qū)?

a)臨界資源:把一次只允許一個(gè)進(jìn)程使用的資

源成為臨界資源。(獨(dú)占性,如打印機(jī),卡片

輸出機(jī)等)

b)臨界區(qū):把每個(gè)進(jìn)程中訪問臨界資源的那段

代碼從概念上分離出來,將其稱為臨界區(qū)。

即臨界區(qū)是指對(duì)臨界資源實(shí)時(shí)操作的程序的

代碼段。

c)相關(guān)臨界區(qū):并發(fā)進(jìn)程中涉及相同臨界資源

的臨界區(qū)。相關(guān)臨界區(qū)必須互斥執(zhí)行。

資料僅供參考

24.什么是進(jìn)程互斥?

a)進(jìn)程互斥是解決進(jìn)程間競(jìng)爭(zhēng)關(guān)系(間接制約關(guān)

系)的手段。指任何時(shí)刻不允許兩個(gè)以上的共

享該資源的并發(fā)進(jìn)程同時(shí)進(jìn)入臨界區(qū),這種

現(xiàn)象稱為互斥。

b)相關(guān)臨界區(qū)的管理原則:互斥、空閑讓進(jìn)、

有限等待。

25.進(jìn)程同步的概念?進(jìn)程同步指兩個(gè)或多個(gè)

進(jìn)程為了合作完成同一個(gè)任務(wù),在執(zhí)行速度

或某些確定的時(shí)序點(diǎn)上必須相互協(xié)調(diào),即一

個(gè)進(jìn)程的執(zhí)行依賴于另一個(gè)進(jìn)程的消息,當(dāng)

一個(gè)進(jìn)程到達(dá)了某一個(gè)確定點(diǎn)而沒有得到合

作伙伴發(fā)來的已完成消息時(shí)必須等待,知道

該消息到達(dá)被喚醒后,才能繼續(xù)向前推進(jìn)。

26.進(jìn)程同步和互斥的關(guān)系?

資料僅供參考

a)進(jìn)程的互斥實(shí)際上是進(jìn)程同步的一種特殊情

況,即主次使用互斥共享資源,也是對(duì)進(jìn)程

使用資源次序上的一種協(xié)調(diào)。進(jìn)程的互斥和

同步統(tǒng)稱為進(jìn)程同步。

b)進(jìn)程的互斥是進(jìn)程間共享資源的使用權(quán),這

種競(jìng)爭(zhēng)沒有固定的必然聯(lián)系,哪個(gè)進(jìn)程競(jìng)爭(zhēng)

到資源的使用權(quán),該資源就歸哪個(gè)進(jìn)程使

用,直到它不再需要使用時(shí)才歸還資源;而

進(jìn)程同步中,所涉及的共享資源的并發(fā)進(jìn)程

間有一種必然的聯(lián)系,當(dāng)進(jìn)程必須同步時(shí),

即使無進(jìn)程在使用共享資源,尚未得到同步

消息的進(jìn)程也不能去使用該資源。

27.信號(hào)量機(jī)制(PV操作):

a)信號(hào)■機(jī)制的實(shí)現(xiàn)原理是兩個(gè)或多個(gè)進(jìn)程能

夠利用彼此間收發(fā)的簡(jiǎn)單信號(hào)來實(shí)現(xiàn)正確的

資料僅供參考

并發(fā)執(zhí)行,一個(gè)進(jìn)程在收到一個(gè)指令信號(hào)

前,會(huì)被迫在一個(gè)確定的或者需要的地方停

下來,從而保持同步或互斥。

b)用信號(hào)■機(jī)制解決進(jìn)程的同步和互斥問題有

如下三個(gè)步驟:

i.分析進(jìn)程之間的制約關(guān)系

ii.設(shè)置信號(hào),

iii.實(shí)施P、V操作

28.同步的實(shí)現(xiàn)機(jī)制:

a)臨界區(qū):經(jīng)過多線程的串行化來訪問公共資

源或者一段代碼,速度快,適合控制數(shù)據(jù)訪

問。

b)互斥?:采用互斥對(duì)象機(jī)制,只有擁有互斥

對(duì)象的線程才有訪問公共資源的權(quán)限,因?yàn)?/p>

資料僅供參考

互斥對(duì)象只有一個(gè),因此能夠保證公共資源

不會(huì)同時(shí)被多個(gè)線程訪問。

C)信號(hào)■:允許多個(gè)線程同時(shí)訪問同一資源,

可是需要限制同一時(shí)刻訪問此資源的最大線

程數(shù)目。信號(hào)■對(duì)象對(duì)線程的同步方式與前

面幾種方法不同,信號(hào)允許多個(gè)線程同時(shí)使

用共享資源,這與操作系統(tǒng)PV操作相似。

d)事件(信號(hào)):經(jīng)過通知操作的方式保持多線程

同步,還能夠方便的實(shí)現(xiàn)多線程的優(yōu)先級(jí)比

較的操作。

29.經(jīng)典的同步問題:

a)生產(chǎn)者消費(fèi)者問題

b)讀者.寫者問題(讀者優(yōu)先:信號(hào)■+讀進(jìn)程

計(jì)數(shù)器rc;弱寫者優(yōu)先:信號(hào)■+讀進(jìn)程計(jì)數(shù)

器rc+排隊(duì)信號(hào)或read;強(qiáng)寫者優(yōu)先:信號(hào)

資料僅供參考

■+讀進(jìn)程計(jì)數(shù)器rc+排隊(duì)信號(hào)*read+寫優(yōu)

先信號(hào)■write_first)

c)哲學(xué)家就餐問:是在多個(gè)線程之間共享多

個(gè)資源時(shí)會(huì)不會(huì)導(dǎo)致死鎖或饑餓的典型模

型。解決方案:

i.每個(gè)哲學(xué)家取得手邊的兩個(gè)叉子才能吃面,

即僅當(dāng)一個(gè)哲學(xué)家左右兩邊的叉子都可用

時(shí),才允許她拿叉子,否則一個(gè)叉子也不

取。

ii.偶數(shù)號(hào)哲學(xué)家先取手邊的叉子,奇數(shù)號(hào)哲學(xué)

家先取右手邊的叉子。

d)嗜睡理發(fā)師問

30.進(jìn)程通信的方式:

a)共享存儲(chǔ):消息緩沖

b)消息傳遞:信箱

資料僅供參考

c)管道通信

31.產(chǎn)生死鎖的原因?

a)進(jìn)程競(jìng)爭(zhēng)資源引起的死鎖

b)進(jìn)程推進(jìn)順序不當(dāng)產(chǎn)生死鎖

32.產(chǎn)生死鎖的條件

a)互斥條件:同時(shí)只能有一個(gè)進(jìn)程持有資源

b)請(qǐng)求和保持條件:一個(gè)進(jìn)程請(qǐng)求資源得不到

滿足時(shí),不釋放占有的資源

c)不剝奪條件:任何一個(gè)進(jìn)程不能搶奪其它進(jìn)

程占有的資源

d)循環(huán)等待條件:存在一個(gè)循環(huán)等待鏈,鏈中

每個(gè)進(jìn)程已獲得資源,并分別等待前一個(gè)進(jìn)

程持有的資源。

33.處理死鎖的方法:

資料僅供參考

a)死鎖預(yù)防:破壞產(chǎn)生死鎖條件的任何一個(gè)或

多個(gè),如靜態(tài)資源分配策略(2)和按序分配資

源策略(4)。

b)死鎖避免:采用銀行家算法,每次分配都查

看能否找到一種資源分配方法,使得已有的

進(jìn)程能夠順利完成任務(wù),如果有,則分配,

否則不分配。

c)死鎖檢測(cè)和解除:用軟件來檢查有進(jìn)程和資

源構(gòu)成的有向圖是否存在一個(gè)或多個(gè)回路。

34.分頁存儲(chǔ)管理、段式存儲(chǔ)管理和段頁式存

儲(chǔ)管理的基本思想:

a)(分頁)利用分頁存儲(chǔ)管理,允許把一個(gè)作業(yè)

存放到若干個(gè)不相鄰的內(nèi)存區(qū)域中,減少大

碎片。

資料僅供參考

b)(分段)段式存儲(chǔ)管理支持用戶的分段觀點(diǎn),

以段為單位進(jìn)行存儲(chǔ)空間的分配。分段存儲(chǔ)

管理的引入,主要為了方便編程、信息共享

和信息保護(hù)(有利于程序的運(yùn)行)。

c)(段頁式)段頁式存儲(chǔ)管理的基本原理是先將

整個(gè)主存劃分成大小相等的存儲(chǔ)塊(頁框),把

用戶程序分段,接著為每一段進(jìn)行分頁。

35.分頁和分段的區(qū)別?

a)分頁是信息的物理單位,與源程序的邏輯結(jié)

構(gòu)無關(guān),用戶不可見,分頁的目的主要是為

了減少碎片,提高主存的利用率。分段是信

息的邏輯單位,由源程序的邏輯結(jié)構(gòu)來決

定,目的是更好地滿足用戶的需求。

b)頁的大小固定且由系統(tǒng)確定,而段的長(zhǎng)度不

固定,由用戶程序決定。

資料僅供參考

c)分頁的作業(yè)地址空間是一維的(線性地址空

間),分段的作業(yè)地址空間是二維的(段名和段

內(nèi)地址)。

36.媛存的局部性原理:根據(jù)研究,在較短的

時(shí)間內(nèi),程序的執(zhí)行會(huì)局限于某一個(gè)部分,

則能夠根據(jù)當(dāng)前程序運(yùn)行的位置,推測(cè)可能

執(zhí)行的程序,預(yù)先加載,來達(dá)到緩存的目

的。(虛擬內(nèi)存的實(shí)現(xiàn))

37.RAID技術(shù):

a)RAID1:兩個(gè)磁盤互相備份,安全性最好,

但磁盤利用率50%,最低。

b)RAID2:采用漢明碼做出錯(cuò)校驗(yàn),按位交叉

存取,用于大數(shù)據(jù)的讀寫,但冗余信息開銷

大,已被淘汰。

資料僅供參考

c)RAID3:位交織奇偶校驗(yàn),使用一個(gè)磁盤做

奇偶校驗(yàn),數(shù)據(jù)分段存儲(chǔ)在其余磁盤中,一

且有損壞,能夠利用奇偶校驗(yàn)來重建數(shù)據(jù),

但校驗(yàn)盤損壞則沒救,磁盤利用率n-1o

d)RAID4:塊交織奇偶校驗(yàn),按塊存取,能夠

單獨(dú)對(duì)某個(gè)盤進(jìn)行操作,一次操作只涉及數(shù)

據(jù)盤和校驗(yàn)盤,不適合隨機(jī)分散的小數(shù)據(jù)

e)RAID5:塊交織分布式奇偶校驗(yàn),同樣以數(shù)

據(jù)校驗(yàn)位來保證數(shù)據(jù)的安全,不同于校驗(yàn)

盤,它將數(shù)據(jù)段的校驗(yàn)位交互存放于各個(gè)硬

盤,則任何一個(gè)硬盤損壞,都能夠根據(jù)其它

硬盤上的校驗(yàn)位來重建損壞的數(shù)據(jù),磁盤利

用率n-1.

38.SPOOLing系統(tǒng)?

資料僅供參考

a)在內(nèi)存和硬盤中間建立緩沖區(qū),在內(nèi)存寫入

硬盤的過程中,先寫入緩沖,等到CPU空閑

時(shí),才從緩沖區(qū)寫入硬盤。

39.同步和異步有什么不同?各自的優(yōu)勢(shì)?

40.什么是線程?線程的基本狀態(tài)?

41.synchronized和Lock的異同?

42.什么是序列化?什么是持久化?什么是串

行化?transient的用法?哪些字段需要標(biāo)記

transient?

43.synchronized關(guān)鍵字的用法?

44.什么是守護(hù)線程?舉一個(gè)守護(hù)線程的例

子?

資料僅供參考

計(jì)算機(jī)網(wǎng)絡(luò)

1.0SI模型及其各層次的作用?TCP/IP模型各

層次及協(xié)議?

2.數(shù)據(jù)鏈路層和MAC層(介質(zhì)訪問控制層)?

3.計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議、接口和服務(wù)的概念?

4.數(shù)據(jù)鏈路層:流■控制、可靠傳輸和滑動(dòng)窗

口機(jī)制。

5.數(shù)據(jù)鏈路層設(shè)備:網(wǎng)橋和局域網(wǎng)交換機(jī)

6.網(wǎng)絡(luò)層的功能:異構(gòu)網(wǎng)絡(luò)互聯(lián)、路由與轉(zhuǎn)

發(fā)、擁塞控制

7.路由算法:距離?向?路由算法、鏈路狀態(tài)路

由算法、層次路由

8.IPv4內(nèi)容:分組、NAT、子網(wǎng)劃分和子網(wǎng)掩

9.ARP協(xié)議、DHCP協(xié)議與ICMP協(xié)議

資料僅供參考

10.網(wǎng)絡(luò)層設(shè)備:路由器的組成和功能,路由

表和路由轉(zhuǎn)發(fā)

11.流■控制和擁塞控制的區(qū)別?

12.傳輸層的功能?傳輸層的尋址與端口?套

接字?

13.TCP協(xié)議和UDP協(xié)議?Java實(shí)現(xiàn)?UDP

首部?

14.TCP段、TCP連接管理、TCP可靠傳

輸、TCP流■控制和擁塞控制

15.TCP的擁塞控制:慢開始、擁塞避免、快

重傳、快恢復(fù)。

16.應(yīng)用層:P2P模型?應(yīng)用層協(xié)議:DNS、

FTP、EMAIL.MIME、STMP.POP3、

HTTPoo

17.CGI?域名解析過程?

資料僅供參考

MySQL數(shù)據(jù)庫

〈INSERT嵌套SELECT

2.MySQL數(shù)據(jù)類型,int類型長(zhǎng)度超出了也不

會(huì)對(duì)數(shù)據(jù)產(chǎn)生影響,和SQLMODE有關(guān)。

3.一個(gè)表中最多只能有一個(gè)自增長(zhǎng)列。

4.DDL、DML、DCL、DQL語句?

a)DDL(數(shù)據(jù)定義語言):createdrop、

alter

b)DML(數(shù)據(jù)操縱語言):insert、delete

update、select

c)DCL(數(shù)據(jù)控制語言):grant、revoke

5.MySQL的其它數(shù)據(jù)庫:

a)information_schema數(shù)據(jù)庫存儲(chǔ)了數(shù)據(jù)庫對(duì)

象信息,比如用戶表信息、列信息、權(quán)限信

息、字符集信息、分區(qū)信息等。

資料僅供參考

b)cluster存儲(chǔ)了系統(tǒng)的集群信息

c)mysql存儲(chǔ)了系統(tǒng)的用戶權(quán)限信息

d)test是系統(tǒng)自動(dòng)創(chuàng)立的測(cè)試數(shù)據(jù)庫,任何用

戶都能夠使用。

6.內(nèi)連接查詢即為多表查詢,僅選出兩張表中

互相匹配的記錄,外連接則會(huì)選出其它不匹

配的記錄。子查詢經(jīng)常使用in、notin、

=、!=、exists%notexists等。表連接很多情

況下用于優(yōu)化子查詢。合并記錄用union(含

distinct)或unionallo

7.MySQL數(shù)字類型及字節(jié)數(shù)、日期類型及字節(jié)

數(shù)、字符串類型及字節(jié)數(shù)。

8.MySQL能夠使用REGEXP或RLIKE來使用

正則匹配。NULL不能用于"二,等",但

能夠使用<=>比較NULL。比較時(shí)不區(qū)分大小

資料僅供參考

寫,數(shù)字作為浮點(diǎn)數(shù)比較。短路與和非

NULL結(jié)果都為NULL,只有1或NULL為

1o

9.MySQL常見函數(shù):

a)字符串CONCAT、INSERT.LEFT、

RIGHT.REPLACE.SUBSTRING.

LPAD、RPAD、TRIM.REPEAT等。

b)數(shù)值函數(shù)ABS、CEIL、FLOOR.MOD.

RAND、ROUND.TRUNCATE等。x%y任

意為NULL結(jié)果都為NULLo產(chǎn)生0~100隨

機(jī)數(shù)為selectceil(100*rand()),

ceil(100*rand())o

c)日期和時(shí)間函數(shù)CURDATE、CURTIME.

NOW、UNIX_TIMESTAMP.

FROM_UNIXTIME.DATE.FORMAT,

資料僅供參考

DATEDIFF,DATE_ADD等,格式為

,%Y-%m-%d%H-%i-%s'o

d)流程函數(shù)IF、IFNULL.CASEWHENTHEN

ELSEEND、CASE(exp)WHENTHEN

ELSEENDo

e)其它函數(shù)DATABASE、VERSION.

USER、INET_ATON、INET_NTOA.

PASSWORD.MD5O

10.MySQL存儲(chǔ)類型:MyISAM、InnoDB.

BDB、MEMORY,CSV等,只有InnoDB和

BDB支持事務(wù),其它都不支持。MySQL默

認(rèn)存儲(chǔ)引擎為InnoDBo

11.InnoDB和MylSAM的區(qū)別?事務(wù)、外

鍵、訪問速度、占用空間、存儲(chǔ)方式

資料僅供參考

(MylSAM:靜態(tài)表、動(dòng)態(tài)表和壓縮表。

InnoDB:共享表空間、多表空間)等方面。

12.MEMORY表使用HASH索引,數(shù)據(jù),大

小由max_heap_table_size變■來決定,默

認(rèn)16MB。

13.如何選擇合適的存儲(chǔ)引擎?

a)以讀操作和插入操作為主,少■更新和刪

除,對(duì)事務(wù)完整性、并發(fā)性要求不高則使用

MylSAM引擎。

b)InnoDB則適合于并發(fā)要求高的場(chǎng)合,事務(wù)完

整性要求較高,除了能夠有效降低刪除和更

新導(dǎo)致的鎖定,還能夠確保事務(wù)的完整提交

和回滾,適合財(cái)務(wù)管理系統(tǒng)。

c)MEMORY一般見于更新不太頻繁的小表,

能夠快速得到結(jié)果。

資料僅供參考

d)MERGE組合了MylSAM表,突破了單個(gè)

MylSAM表的限制,并能夠分布在多個(gè)磁盤

上,有效改進(jìn)MERGE表的訪問效率。

14.選擇合適的數(shù)據(jù)類型?

a)CHAR和VARCHAR-MylSAM:建議固定

長(zhǎng)度的數(shù)據(jù)列CHARoInnoDB:建議使用

VARCHAR類型。

b)TEXT和BLOB-盡?選擇滿足需求的最小

的存儲(chǔ)類型、大,刪除后為提高性能應(yīng)定期

使用OPTIMIZETABLE功能進(jìn)行標(biāo)的碎片整

理。同時(shí)能夠使用合成的索引(Synthetic)來

提高大文本字段的查詢性能,此種索引主要

利用散列值,只能用于精確匹配的查詢"="。

不必要時(shí)盡*避免檢索BLOB和TEXTo單

獨(dú)將BLOB和TEXT分成一張表。

資料僅供參考

c)定點(diǎn)DECIMAL和浮點(diǎn)FLOAT\DOUBLE-

定點(diǎn)更精確,字符串存儲(chǔ),而浮點(diǎn)數(shù)不精

確,而且比較容易出錯(cuò)。

d)日期類型選擇:盡■選擇滿足需求的最小存

儲(chǔ)的日期類型,需要記錄年份久遠(yuǎn),則

DATETIMEo如果需要不同時(shí)區(qū)使用,則使

用TIMESTAMPo

15.選擇合適的字符集:

a)滿足應(yīng)用支持語言的需求、考慮和已有數(shù)據(jù)

的兼容性、漢字居多能夠考慮GBK2字節(jié),

而UTF83字節(jié),而英文則應(yīng)該UTF81字

節(jié),其它2字節(jié)。

b)如果需要比較,排序等字符運(yùn)算,則最好選

擇定長(zhǎng)字符集。盡■避免字符集轉(zhuǎn)換。

資料僅供參考

16.字符集用來MySQL存儲(chǔ)字符串的方式,

校對(duì)規(guī)則用來定義比較字符串的方式。

a)查看方式:showcharacterset;show

collationlike"%%";

b)校對(duì)規(guī)則_ci大小寫不敏感、_cs大小寫敏

感、_bin基于編碼值的比較。

17.MylSAM和InnoDB默認(rèn)都是BTREE索

引,當(dāng)前不支持函數(shù)索引,但支持前綴索

引。另外,還支持全文索引。默認(rèn)情況下

MEMORY使用HASH索引,也支持BTREE

索引。

18.索引操作:

a)創(chuàng)立索引?CREATE[unique|fulltext|special]

INDEXindex_name[USINGindex_type]ON

tbl_name(index_col_name)

資料僅供參考

b)修改增加索引?ALTERTABLE

ADD[unique|fulltext|special]INDEX

index_name[USINGindex_type]

index_col_name

index_col_name=col_name[(length)]

[ASC|DESC]

c)能夠經(jīng)過explainselect語句查看是否使用了

索引。key:xxx為使用索引。

d)刪除索引?DROPINDEXindex_nameON

tbl_name

19.MylSAM索引前綴長(zhǎng)度1000字節(jié),

InnoDB前綴索引長(zhǎng)度最長(zhǎng)767字節(jié)。

20.設(shè)計(jì)索引的原則:

a)索引列應(yīng)選擇SELECTWHERE語句后的列

和表連接ON子句后的列。

資料僅供參考

b)盡■使用唯一索引,分布越分散效果越好,

如性別就不適合索引,分布太密集。

c)盡■使用短索引,查詢更快,I。更少。

d)利用最左前綴。

e)不要過度索引,會(huì)降低使用效率。

f)InnoDB會(huì)根據(jù)主鍵、唯一索引或內(nèi)部列的排

序來存儲(chǔ),因此盡■自己指定主鍵,選擇常

見列作為主鍵。另外,InnoDB表的普通索引

都會(huì)保存主鍵的鍵值,因此主鍵要盡可能選

擇較短的數(shù)據(jù)類型,能夠有效減少索引的磁

盤占用,提高索引緩存效果。

21.HASH索引只能使用在=或<=>等式比較

時(shí)。優(yōu)化器不能使用HASH索引來加速

ORDERBY操作。

BTREE索引能夠用在>,<,>=,<=,

資料僅供參考

BETWEEN,!=,<>,LIKE"pattern'Xpattern

不能以通配符開頭)。簡(jiǎn)而言之,范圍查詢適

用于BTREE,不適用HASH索弓I。

22.MySQL使用索引,在檢索的時(shí)候不需要查

找所有數(shù)據(jù),能快速定位需要的數(shù)據(jù)。大多

數(shù)索引存儲(chǔ)在BTREE中,只有空間列類型

的索引使用RTREE,MEMORY表支持

HASH索引。

23.為什么需要使用視圖?

a)使用視圖的用戶不需要考慮對(duì)應(yīng)表結(jié)構(gòu),關(guān)

聯(lián)條件和篩選條件。

b)使用視圖能夠控制用戶訪問到行列級(jí)別。

c)視圖結(jié)構(gòu)確定了,能夠屏蔽表結(jié)構(gòu)變化對(duì)用

戶的影響。

24.視圖操作:

資料僅供參考

a)創(chuàng)立視圖-CREATE[ORREPLACE]

[ALGORITHM={UNDEFINED|MERGE|

TEMPTABLE}]VIEWview_name

[{columnjist}]ASselect_statement[WITH

[CASCADED|LOCAL]CHECKOPTION]

b)修改視圖-ALTER[ALGORITHM=

{UNDEFINED|MERGE|TEMPTABLE}]

VIEWview_name[(column」ist)]AS

select_statement[WITH[CASCADED|

LOCAL]CHECKOPTION]

c)刪除視圖-DROPVIEW[IFEXISTS]

view_name[,view_name][RESTRICT|

CASCADE]

d)查看視圖-SHOWTABLES

資料僅供參考

e)查看視圖信息-SHOWTABLESTATUS

[FROMdb_name][LIKE'pattern']

f)查詢視圖定義-SHOWCREATEVIEW

view_name

25.MySQL不允許在創(chuàng)立視圖時(shí)使用子查詢,

能夠使用查詢視圖語句來實(shí)現(xiàn)。一些視圖不

可更新:

a)包含聚合函數(shù)(SUM、MIN、MAX、COUNT

等)、DISTINCT.GROUPBY.HAVING.

UNION或者UNIONALLO

b)常?視圖

c)SELECT包含子查詢

d)JOIN

e)FROM了一個(gè)不能更新的視圖

資料僅供參考

f)WHERE子句的子查詢引用了FROM子句的

26.WITHCASCADED|LOCALCHECK

OPTION決定了是否允許更新數(shù)據(jù)使記錄不

再滿足視圖的條件,LOCAL表示只要滿足本

視圖的條件就能夠更新,CASCADED必須

滿足所有針對(duì)該視圖的所有視圖條件才能夠

更新。

27.什么是存儲(chǔ)過程?它有什么好處?它和函

數(shù)有什么區(qū)別?

28.存儲(chǔ)過程操作:

a)創(chuàng)立存儲(chǔ)過程-CREATEPROCEDURE

sp_name([proc_parameter])[characteristic]

routine_body

資料僅供參考

b)創(chuàng)立函數(shù)-CREATEFUNCTION

([func_parameter])RETURNStype

[characteristic]routine_body

proc_parameter=[IN|OUT|INOUT]

param_nametype

func_parameter=proc_parameter

type=MySQL任意數(shù)據(jù)類型

characteristic=LANGUAGE.SQL|[NOT]

DETERMINISTIC|{CONTAINS.SQL|

NOSQL|READSSQLDATA|MODIFIES

SQLDATA)|SQLSECURITY{DEFINER|

INVOKER)|COMMENT'string'

routine_body=合法SQL語句

c)修改函數(shù)或存儲(chǔ)過程-ALTER

{PROCEDURE|FUNCTION}sp_name

資料僅供參考

[characteristic...]

characteristic={CONTAINS_SQL|NOSQL

IREADSSQLDATA|MODIFIESSQL

DATA}|SQLSECURITY{DEFINER|

INVOKER)|COMMENT'string'

d)調(diào)用存儲(chǔ)過程-CALL

sp_name([parameter])

e)刪除存儲(chǔ)過程或函數(shù)-DROP

{PROCEDURE|FUNCTION}[IFEXISTS]

sp_name

29.首先調(diào)用DELEMITER$$將結(jié)束符從;改成

$$,使得過程和函數(shù)中的;不會(huì)被解釋成語句

結(jié)束而提示錯(cuò)誤。然后從DELEMITER;將結(jié)

束符改回來。

30.存儲(chǔ)過程變■的使用:

資料僅供參考

a)DECLEARlast_month_startDATE;

b)變■賦值:SETvar_name=expr;SELECT

col_nameINTOvar_nameFROM

tbl_name

31.存儲(chǔ)過程能夠使用流程控制語句:

a)IFTHENELSEIFTHENELSEENDIF...

b)也能夠使用CASEWHENTHENWHEN

THENELSEENDCASEo

c)循環(huán)使用:

i.LOOP語句:beginjabel:LOOP

statementjistENDLOOPendjabelo

ii.LEAVE語句:能夠使用LEAVE跳出循環(huán)

(LEAVEbegin」abel)或BEGINENDO

iii.ITERATE語句:同CONTINUE(ITERATE

beginjabel)

資料僅供參考

iv.REPEAT語句:beginjabel:REPEAT

statementjistUNTILsearch_conditionEND

REPEATbeginjabel.

v.WHILE語句:beginjabel:WHILE

search_conditionDOstatementjistEND

WHILEendjabel;

32.事件調(diào)度器:類似于時(shí)間觸發(fā)器,定時(shí)執(zhí)

行任務(wù)。

a)創(chuàng)立語法:CREATEEVENTmyeventON

SCHEDULEATCURRENT_TIMESTAMP+

INTERVAL1HOUR

DO

UPDATE

myschema.mytableSETmycol=mycol+1;

b)事件調(diào)度器默認(rèn)關(guān)閉。

資料僅供參考

c)禁用或刪除事件調(diào)度器:ALTERTABLE

event_nameDISABLE;DROPEVENT

event_name;

33.事件調(diào)度器的優(yōu)勢(shì):

a)避免數(shù)據(jù)庫相關(guān)的定時(shí)任務(wù)部署在操作系統(tǒng)

層,減少操作系統(tǒng)管理員產(chǎn)生誤操作的風(fēng)

險(xiǎn),并方便遷移,遷移過程包括該數(shù)據(jù)庫。

b)適用于定期收集統(tǒng)計(jì)信息、定期清理歷史數(shù)

據(jù)、定期數(shù)據(jù)檢查。

c)復(fù)雜的處理適合程序?qū)崿F(xiàn)。

34.觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對(duì)象,會(huì)在滿

足一定條件定義時(shí)觸發(fā),并執(zhí)行觸發(fā)器定義

的語句集合。

資料僅供參考

a)創(chuàng)立觸發(fā)器-CREATETRIGGER

trigger_nametrigger_timetrigger_eventON

tbl_nameFOREACHROWtrigger_stmto

b)同一張表相同時(shí)間相同事件的觸發(fā)器,只能

夠定義一個(gè)。

c)觸發(fā)器時(shí)間可分為BEFORE和AFTER,事

件可分為INSERTUPDATEDELETE等。

d)能夠使用INSERTINTOONDEPLICATE

KEYUPDATEXXX來測(cè)試觸發(fā)器執(zhí)行順

序,如果已存在,則先insert在update

afterupdateo如果不存在,貝!Iinsertafter

inserto

e)刪除觸發(fā)器?DROPtriggerins_film;

f)查看觸發(fā)器?showtriggers;

information_schema.triggers表

資料僅供參考

35.什么時(shí)候使用觸發(fā)器?

a)不能夠直接調(diào)用直接返回客戶端數(shù)據(jù)的存儲(chǔ)

過程。

b)也不能使用開始或結(jié)束事務(wù)的語句(start

transactioncommitrollback語句)。

c)不要將過多的邏輯寫在觸發(fā)器中,影響

CURD效率。

36.MySQL支持MylSAM和MEMORY鎖

表,對(duì)BDB進(jìn)行鎖頁,對(duì)InnoDB鎖行。默

認(rèn)自動(dòng)鎖表和鎖行,但有些時(shí)候用戶會(huì)明確

鎖表或者進(jìn)行事務(wù)的控制,以確保事務(wù)的完

整性,這樣就需要使用事務(wù)控制和鎖定語句

來完成。

資料僅供參考

37.LOCKTABLES能夠鎖定用于當(dāng)前線程的

表,UNLOCKTABLES會(huì)釋放當(dāng)前線程獲

得的任何鎖定。

a)鎖定語句-LOCKTABLEStbl_name[AS

alias]{READ[LOCAL]|[LOW_PROORITY]

WRITE)...

b)釋放語句-UNLOCKTABLES

38.MySQL的事務(wù)控制:

a)SETAUTOCOMMIT-設(shè)置是否自動(dòng)提交,

0表示不自動(dòng)提交

b)STARTTRANSACTION/BEGIN-開始一項(xiàng)

新事務(wù)

c)COMMIT-提交事務(wù)

d)ROLLBACK-回滾事務(wù)

資料僅供參考

39.如果鎖表期間如果執(zhí)行starttransaction命

令,會(huì)有隱含unlocktable執(zhí)行。lock方式

鎖表,不能使用rollback進(jìn)行回滾。

40.所有的DDL語句不能回滾,而且部分

DDL語句會(huì)造成隱式提交。能夠定義

savepointname來實(shí)現(xiàn)不同階段的回滾,

rollbacktosavepointnameo

41.MySQL的分布式事務(wù):

a)只支持InnoDB引擎。

b)分布式事務(wù)還有問題:

i.如果分布式事務(wù)prepare時(shí)數(shù)據(jù)庫重新啟

動(dòng),重啟以后還能夠進(jìn)行提交或回滾,但此

時(shí)不會(huì)寫binlog,會(huì)造成主從數(shù)據(jù)庫不一

致。

資料僅供參考

ii.如果客戶端連接異常終止,那么數(shù)據(jù)庫會(huì)回

滾還未完成的分支事務(wù),如果此時(shí)分支事務(wù)

已經(jīng)執(zhí)行了prepare狀態(tài),其它分支可能已

經(jīng)成功提交,那么事務(wù)會(huì)不完整。

iii.處于prepare狀態(tài)的事務(wù)不記錄binlog,如

果數(shù)據(jù)庫服務(wù)宕機(jī),則會(huì)丟失數(shù)據(jù)。

42.防止SQL注入的幾種措施:

a)使用PrepareStatement綁定變量,將輸入的

單引號(hào)轉(zhuǎn)義輸入,避免了SQL注入。

b)使用應(yīng)用程序提供的轉(zhuǎn)換函數(shù)。

c)自定義函數(shù)進(jìn)行校驗(yàn)。(正則)

43.MySQLSQLMode:REAL_AS_FLOAT.

PPES_AS_CONCAT.ANSLQUOTES.

GNORE.SPACE,ANSIO

STRICT_TRANS_TABLES嚴(yán)格模式。

資料僅供參考

44.嚴(yán)格模式不允許插入超過定義長(zhǎng)度的數(shù)

據(jù)。

45.SQLMode常見功能:

a)校驗(yàn)日期數(shù)據(jù)的合法性,(ANSI模式對(duì)非法

日期會(huì)警告,而TRADITIONAL模式則直接

提示日期非法,拒絕插入)

b)MOD(X,0)時(shí),TRADITIONAL模式會(huì)拋出警

告。

c)NO_BACKSLASH_ESCAPES會(huì)將“V變成普

通字符。

d)提供PIPES_AS_CONCAT,使得T能夠連

接字符串。

46.常見SQLMode:

a)ANSI-更符合標(biāo)準(zhǔn)SQL

資料僅供參考

b)STRICT_TRANS_TABLES-嚴(yán)格模式,能

夠用在事務(wù)表和非事務(wù)表,不允許非法日

期,不允許超出長(zhǎng)度,不正確的值會(huì)報(bào)錯(cuò)

c)TRADITIONAL-嚴(yán)格模式,能夠應(yīng)用在事

務(wù)表和事務(wù)表,出現(xiàn)錯(cuò)誤馬上回滾。

47.MySQL分區(qū):根據(jù)一定的規(guī)則,數(shù)據(jù)庫把

一個(gè)表分解成多個(gè)更小的更容易管理的部

分。邏輯上一個(gè)表或者一個(gè)索引,實(shí)際上會(huì)

有多個(gè)分區(qū),每個(gè)分區(qū)都是獨(dú)立的對(duì)象,能

夠獨(dú)立處理,也能夠作為表的一部分處理。

48.MySQL分區(qū)的優(yōu)點(diǎn):

a)和單個(gè)磁盤或者文件系統(tǒng)分區(qū)相比,能夠存

儲(chǔ)更多的數(shù)據(jù)。

優(yōu)化查詢,where查詢可能只需要查詢幾個(gè)

分區(qū),聚合函數(shù)時(shí)容易并行處理。

資料僅供參考

b)對(duì)于不需要的數(shù)據(jù)能夠刪除有關(guān)分區(qū)來達(dá)到

快速刪除的目的。

c)分散數(shù)據(jù)查詢,以獲得更大的查詢吞吐量。

49.創(chuàng)立分區(qū)表:CREATETABLEXXX

()ENGINE=INNODBPARTITIONBY

HASH(MONTH(birth_date))PARTITIONS

6;

50.MySQL的分區(qū)類型:RANGE類型(一定

范圍)、List類型(枚舉出值來分區(qū))、Hash類

型(根據(jù)分區(qū)個(gè)數(shù)分配)、key類型(與Hash類

似)

Hash分區(qū)鍵必須是INT類型,而其它三種類

型分區(qū)能夠使用其它類型(不算BLOB和

TEXT)的列來作為分區(qū)鍵。

資料僅供參考

51.MySQL創(chuàng)立分區(qū)鍵,要么表中沒有主鍵和

唯一鍵,否則分區(qū)鍵必須為主鍵或唯一鍵。

52.RANGE分區(qū):PARTITIONBY

RANGE(key)(

PARTITIONpOVALUESLESS

THAN(10),

PARTITIONp1VALUESLESS

THAN(20),

PARTITIONp2VALUESLESS

THAN(30)

)

適合場(chǎng)景:方便刪除。經(jīng)常使用分區(qū)鍵查

詢。

53.LIST分區(qū):PARTITIONBYLIST(key)(

PARTITIONpOVALUESIN(3,5),

資料僅供參考

PARTITIONp1VALUESIN(1,10),

PARTITIONp2VALUESIN(4,9)

)

更靈活。插入不在分區(qū)內(nèi)的數(shù)據(jù)會(huì)插不進(jìn),

報(bào)錯(cuò)。

54.Columns分區(qū):PARTITIONBYRANGE

COLUMNS(a,b)(

PARTITIONp01VALUESLESS

THAN(0,10),

PARTITIONp02VALUESLESS

THAN(10,10),

PARTITIONp02VALUESLESS

THAN(10,MAXVALUE),

PARTITIONp02VALUESLESS

THAN(MAXVALUE,MAXVALUE),

資料僅供參考

)

能夠支持整數(shù)、日期時(shí)間和字符串三大數(shù)據(jù)

類型,支持多列分區(qū)。

55.Hash分區(qū):PARTITIONBY[LINEAR]

HASH(storeJd)PARTITION4;

a)支持兩種分區(qū):常規(guī)HASH分區(qū)和線性

HASH分區(qū),常規(guī)HASH使用取模算法,線

性HASH使用2的幕運(yùn)算。

比如上述分區(qū),MOD(234,4)=2因此分到第

二個(gè)分區(qū)中。

b)常規(guī)HASH分區(qū)的缺點(diǎn):增加分區(qū)后,

HASH值可能需要重新計(jì)算,分區(qū)管理很復(fù)

雜。

c)線性HASH分區(qū):當(dāng)線性HASH分區(qū)個(gè)數(shù)是

2的N次幕時(shí),線性HASH的分區(qū)結(jié)果和常

資料僅供參考

規(guī)HASH分區(qū)結(jié)果一致。優(yōu)點(diǎn)是在分區(qū)維護(hù)

時(shí)處理的迅速,缺點(diǎn)是線性分區(qū)數(shù)據(jù)分布不

太平衡。

56.KEY分區(qū):不允許使用自定義表示式,需

要MySQL服務(wù)器提供的HASH函數(shù),它能

夠支持非整數(shù)分區(qū)。創(chuàng)立分區(qū)表時(shí)可不指定

分區(qū)鍵,默認(rèn)主鍵,沒有會(huì)選擇唯一鍵。也

能夠創(chuàng)立常規(guī)和線性的分區(qū)。

57.能夠?qū)σ呀?jīng)分區(qū)的表在建立子分區(qū)。

SUBPARTITIONSo

58.分區(qū)表的NULL值處理:RANGE中為最

小值,LIST必須出現(xiàn)在枚舉列表中,否則不

接受。HASH/KEY中NULL為零值。

59.RANGE&LIST分區(qū)管理:

資料僅供參考

a)刪除分區(qū):altertabletbl_namedrop

partitionp2;

b)增力口分區(qū):altertabletb_nameaddpartition

(partitionp5valueslessthan(xxx))

c)拆分分區(qū):altertabletbl_namereorganize

partitionp3into(xxx);

60.HASH&KEY分區(qū)管理:

a)合并(刪除)分區(qū):ALTERTABLE

COALESCEPARTITIONp_name;

b)減少分區(qū)數(shù)*:先刪除再重新定義。

COALESCE不能用作增加。

c)增加分區(qū):ALTERTABLEADD

PARTITIONpartitions8;(不是增加到8,而

是增加8個(gè))

61.SQL優(yōu)化的步驟:

資料僅供參考

a)經(jīng)過show[session|global]status命令了解

各種SQL的執(zhí)行頻率,能夠了解當(dāng)前應(yīng)用是

插入更新為主還是查詢操作為主。對(duì)于事務(wù)

型應(yīng)用,能夠經(jīng)過回滾操作的次數(shù)來判斷應(yīng)

用編寫是否存在問題。

b)定位執(zhí)行效率較低的SQL語句:

i.經(jīng)過慢查詢?nèi)罩緛矶ㄎ弧?/p>

ii.能夠使用showprocesslist來查看當(dāng)前

MySQL正在執(zhí)行的線程,包括線程狀態(tài),是

否鎖表等,能夠?qū)崟r(shí)查看SQL的執(zhí)行情況。

c)經(jīng)過Explain分析低效SQL的執(zhí)行計(jì)劃:

i.在SQL之前加入Explain子句,能夠打出

SQL的執(zhí)行計(jì)劃,經(jīng)過查看計(jì)劃,能夠知道

當(dāng)前的SQL是否使用了索引等。

資料僅供參考

ii.常見訪問類型:從左到右,性能最差到最

好:

ALL(全表掃描)vindex(索引全掃描)<

range(索弓I范掃描)vref(使用非唯一索引

掃描或唯一索引前綴掃描,返回一行)<

eq_ref(使用唯一索引,返回一行)vconst,

system(單表中最多有一個(gè)匹配行)<

NULL(不需要訪問表或索引,直接得到結(jié)果)

iii.經(jīng)過explainextended命令加上SQL執(zhí)行后

的showwarnings能夠看到SQL真正被執(zhí)行

之前,優(yōu)化器做了哪些SQL改寫。

d)如果使用explain不能很快定位SQL問題,

能夠選擇profile聯(lián)合分析:

資料僅供參考

i.Select@@have_profiling能夠查看數(shù)據(jù)庫是

否支持profile,默認(rèn)關(guān)閉,能夠setprofiling

=1開啟profileo

ii.經(jīng)過執(zhí)行showprofiles能夠查看當(dāng)前運(yùn)行的

Query,接著showprofileforquery

query」D能夠看到執(zhí)行過程中線程的每個(gè)狀

態(tài)和消耗的時(shí)間。

iii.仔細(xì)檢查showprofileforquery輸出,能夠

發(fā)現(xiàn)時(shí)間都消耗在sendingdata狀態(tài)中。為

了清晰看到排序結(jié)果,能夠查詢

information_filing表,按DESC

排序。

iv.還能夠showprofile(cpu、alkblockio、

contextswitch、pagefaults)forquery4;來

查看各個(gè)部分占用的時(shí)間。

資料僅供參考

v.這里對(duì)比了MylSAM和InnoDB,發(fā)現(xiàn)

InnoDB多了Sendingdata這個(gè)步驟,速度

比MylSAM慢很多。

e)MySQL5.6提供了trace文件,能夠分析優(yōu)化

器如何選擇執(zhí)行計(jì)劃:

i.首先打開trace,設(shè)置格式JSON,設(shè)置

trace最大使用內(nèi)存大小。

ii.執(zhí)行SQL語句。

iii.檢查lnformation_schema.optimizer_trace能

夠找到執(zhí)行計(jì)劃的日志。

62.MySQL的索引專題:

a)索引的幾種實(shí)現(xiàn):

i.B-Tree索引:最常見的索引類型,大部分引

擎都支持B樹索引。(能夠范圍查詢)

資料僅供參考

ii.HASH索引:只有Memory引擎支持,使用

場(chǎng)景簡(jiǎn)單。(查詢速度快,但不適合范圍查詢)

iii.R-Tree索引:空間索引是MylSAM的一個(gè)特

殊索引類型,主要用于地理空間數(shù)據(jù)類型,

一般使用較少。

iv.Full-text索引:全文索引也是MylSAM的一

個(gè)特殊索引類型,主要用于全文索引,

InnoDB從MySQL5.6版本開始提供對(duì)全文

索引的支持。

資料僅供參考

b)B-Tree索引的使用:

i.全值匹配:type:const

ii.匹配值的范查詢:type:range

iii.匹配最左索引:type:refo比如三個(gè)列形成的

聯(lián)合索引i1,i2,i3,只有從左到右使用索引進(jìn)

行查詢才算使用了索引,否則不使用索引,

如i1和i3o

最左匹配原則算是MySQL中B-Tree索引使

用的首要原則。

資料僅供參考

iv.僅僅對(duì)索引進(jìn)行查詢:type:ref,當(dāng)查詢的列

都在索引字段中時(shí),效率更高。(Using

Index,僅僅需要訪問索引,不需要根據(jù)索引

訪問表數(shù)據(jù),它也稱為覆蓋索引掃描)

v.匹配列前綴:type:range。使用了前綴索

引,而且只查詢以XX開頭的信息,這時(shí)

Usingwhere,需要索引回表查詢。

vi.索引匹配精確,其它條件是范圍匹配:

type:refo按照索引的精確匹配來選擇。

vii.如果列名是索引,那么column_nameisnull

會(huì)使用索引。

viii.如果查詢條件中包含索引條件,首先使用該

條件進(jìn)行過濾,接著回表使用普通條件進(jìn)行

過濾查詢。這種情況在MySQL5.6中進(jìn)行了

提升,使用ICP優(yōu)化降低了不必要的10訪

資料僅供參考

問,在回表的過程中就已經(jīng)排除了不符合條

件的記錄。

C)不能使用索引的場(chǎng)合:

i.LIKE以%開頭,不能使用索引。解決辦法:

先訪問索引表,select索引字段,找到符合

like%xxx%條件的記錄,然后再select回表

查詢,省去了全表掃描的I。請(qǐng)求。

ii.數(shù)據(jù)類型出現(xiàn)隱式轉(zhuǎn)換時(shí)不會(huì)使用索引。如

字符串不加單引號(hào),則不使用索引,使用全

表掃描。

iii.復(fù)合索引查詢條件不包含最左邊部分,不使

用復(fù)合索引。

iv.如果MySQL估計(jì)使用索引比全表掃描更

慢,則不使用索引。(如全表查詢輸出的情

況,使用索引浪費(fèi)了查詢索引的時(shí)間)

資料僅供參考

v.用or分割開的條件,如果or前的條件中列

有索引,而后面的列沒有索引,那么涉及的

索引都不會(huì)被用到。

d)簡(jiǎn)單實(shí)用的優(yōu)化方法:

i.定期分析和檢查表,使得SQL能夠生成正確

的執(zhí)行計(jì)劃,檢查表的作用是檢查一個(gè)或多

個(gè)表是否有錯(cuò)誤。

ii.定期優(yōu)化表:optimizetabletb_name,能夠

清理由于刪除或者更新造成的碎片浪費(fèi)。只

對(duì)MylSAM、BDB、InnoDB有效。

63.常見的SQL優(yōu)化:

a)大批?導(dǎo)入數(shù)據(jù):

i.使用loaddatainfile'address'intotable

tb_name,

資料僅供參考

ii.在導(dǎo)入之前關(guān)閉索引,導(dǎo)入之后打開索引

ALTERTABLEtbl_name

DISABLE/ENABLEKEYS

iii.關(guān)閉唯一性校驗(yàn),setunique_checks=0;

iv.關(guān)閉自動(dòng)提交,導(dǎo)入結(jié)束后再打開

b)優(yōu)化INSERT語句:

i.采用多值插入,values。,(),…

ii.如果不同客戶插入很多行,能夠經(jīng)過insert

delayed語句得到更高的速度,使得insert的

數(shù)據(jù)存放到內(nèi)存隊(duì)列中,并不真正寫入磁

盤。

iii.將索引文件和數(shù)據(jù)文件分開存放。

iv.如果進(jìn)行批■插入,能夠增加

bulk_insert_buffer_size來提高速度,只對(duì)

MylSAM有效。

資料僅供參考

v.使用loaddatainfile替換insert,速度加快

20倍。

c)優(yōu)化ORDERBY語句:

i.MySQL有兩種排序方式,第一種經(jīng)過有序索

引順序掃描直接返回有序的數(shù)據(jù),這種情況

在explain的時(shí)候返回Usingindex,不需要

額外排序。另一種經(jīng)過返回?cái)?shù)據(jù)進(jìn)行排序,

一般稱為Filesort排序,所有不是經(jīng)過索引

直接返回排序結(jié)構(gòu)的排序都叫Filesort排

序。

ii.OrderBy的優(yōu)化目標(biāo)是盡■減少額外的排

序,經(jīng)過索引直接返回有序數(shù)據(jù)。WHERE

條件和ORDERBY條件使用相同的索引,

而且ORDERBY的順序和索引順序相同,

資料僅供參考

而且ORDERBY的字段都是升序或降序

的,只有這樣才能減少額外的排序。

Hi.對(duì)于不可避免的Filesort排序,有兩種排序

算法:

1.兩次掃描算法:根據(jù)條件取出排序字段和行

指針信息,之后在排序區(qū)sortbuffer中排

序。優(yōu)點(diǎn)是排序時(shí)內(nèi)存開銷較少,缺點(diǎn)是第

二次讀取的隨機(jī)IO比較大。

2.一次掃描算法:一次性取出滿足條件的行的

所有字段,然后在排序去sortbuffer中排序

后直接輸出結(jié)果集。排序時(shí)內(nèi)存開銷比較

大,但排序效率比兩次掃描算法高。

d)優(yōu)化GroupBy語句:

資料僅供參考

i.GroupBy默認(rèn)根據(jù)后面的字段進(jìn)行排序,如

果不希望額外的排序,能夠使用ORDERBY

NULL來取消排序。

e)優(yōu)化嵌套查詢:

i.使用表連接JOIN替代嵌套查詢,由于嵌套

查詢需在內(nèi)存中創(chuàng)立臨時(shí)表來完成這個(gè)邏輯

上需要兩個(gè)步驟的查詢工作。

f)優(yōu)化OR條件:

i.MySQL處理OR條件,實(shí)際上是對(duì)每個(gè)條件

都查詢一次,然后用Union合并這些查詢,

因此對(duì)每個(gè)OR條件都需要建索引

g)優(yōu)化分頁查詢:

i.使用limitm,n時(shí),MySQL實(shí)際上會(huì)全表掃

描,然后獲得需要的記錄,丟棄不需要的記

錄,這樣查詢和排序的代價(jià)很高:

資料僅供參考

ii.一種方法是表關(guān)聯(lián),和limitm,n的索引進(jìn)行

內(nèi)連接查詢,能夠使用索引加快查詢,減少

查詢的行數(shù)。

iii.另一種方法是記錄上一次翻頁的記錄數(shù),然

后在查詢時(shí)使用范圍查詢,并用limitn來查

詢,這樣也不需要全表查詢

h)使用SQL提示:顯式加入提示達(dá)到優(yōu)化目

的:

i.USEINDEX(XX):添力口USEINDEX來告訴

MySQL參考哪個(gè)索引列表,能夠讓MySQL

不再考慮其它可用的索引。

ii.IGNOREINDEX(XX):指定需要忽略的索引

iii.FORCEINDEX(XX):有些時(shí)候,MySQL認(rèn)

為全表掃描會(huì)比索引查詢更快,這時(shí)候能夠

資料僅供參考

使用FORCEINDEX(XX)來強(qiáng)制使用索引查

詢。

64.常見SQL技巧:

a)使用正則表示式:

用"Fabcr等等。能夠避免使用過多的like來

進(jìn)行匹配,方便查詢。

b)使用RAND()來提取隨機(jī)行:

資料僅供參考

i.Select*fromxxorderbyrand()limit5;能夠

隨機(jī)獲取行數(shù)據(jù)。

c)利用GROUPBY的WITHROLLUP子句:

i.能夠簡(jiǎn)單地實(shí)現(xiàn)合計(jì),但不能和orderby一

起使用,Limit子句放在withrollup之后。

d)使用bitgroupfunctions做統(tǒng)計(jì):

i.Bit_or(字段)…groupby另外字段。能夠?qū)?/p>

現(xiàn)符合聚組條件的條目的指定字段進(jìn)行位或

操作。

ii.Bit_and(字段)...groupbyxxxo同上,與操

作。

iii.該方法能夠簡(jiǎn)潔的數(shù)據(jù)表示豐富的信息,節(jié)

省存儲(chǔ)空間。

資料僅供參考

e)數(shù)據(jù)庫名、表名的大小寫會(huì)由不同的操作系

統(tǒng)而不同,需要關(guān)注

lower_case_tables_name屬性來設(shè)置。

f)使用MylSAM存儲(chǔ)引擎創(chuàng)立表時(shí),能夠使用

外鍵約束語句,只是外鍵不起作用,在show

createtabletb_name的時(shí)候也不顯示出來,

只是備忘和注釋的作用。

65.優(yōu)化數(shù)據(jù)庫對(duì)象:

a)優(yōu)化表的數(shù)據(jù)類型,盡■選擇符合條件的占

用空間最小的數(shù)據(jù)類型。

b)經(jīng)過拆分表來提高表的訪問效率:

i.垂直拆分:一些列不常見時(shí)能夠拆分,能夠

使數(shù)據(jù)行變小,一頁能夠放更多的信息,查

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論