1.?數(shù)據(jù)庫三范式是什么?
第一范式:表中每個(gè)字段都不能再分峻汉。
第二范式:滿足第一范式并且表中的非主鍵字段都依賴于主鍵字段。
第三范式:滿足第二范式并且表中的非主鍵字段必須不傳遞依賴于主鍵字段播赁。
2.?什么是數(shù)據(jù)庫事務(wù)?
事務(wù)具有四大特性:一致性吼渡、原子性容为、隔離性、持久性寺酪。
數(shù)據(jù)庫事務(wù)是指:幾個(gè)SQL語句坎背,要么全部執(zhí)行成功,要么全部執(zhí)行失敗寄雀。比如銀行轉(zhuǎn)賬就是事務(wù)的典型場景得滤。
數(shù)據(jù)庫事務(wù)的三個(gè)常用命令:Begin Transaction、Commit Transaction盒犹、RollBack Transaction懂更。
3.?什么是視圖?
視圖實(shí)際上是在數(shù)據(jù)庫中通過Select查詢語句從多張表中提取的多個(gè)表字段所組成的虛擬表阿趁。
l?視圖并不占據(jù)物理空間膜蛔,所以通過視圖查詢出的記錄并非保存在視圖中,而是保存在原表中脖阵。
l?通過視圖可以對(duì)指定用戶隱藏相應(yīng)的表字段皂股,起到保護(hù)數(shù)據(jù)的作用。
l?在滿足一定條件時(shí)命黔,可以通過視圖對(duì)原表中的記錄進(jìn)行增刪改操作呜呐。
l?創(chuàng)建視圖時(shí),只能使用單條select查詢語句悍募。
4.?什么是索引蘑辑?
索引是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息坠宴。
l?索引分為:聚集索引洋魂、非聚集索引、唯一索引等。
l?一張表可以有多個(gè)唯一索引和非聚集索引副砍,但最多只能有一個(gè)聚集索引衔肢。
l?索引可以包含多列。
l?合理的創(chuàng)建索引能夠提升查詢語句的執(zhí)行效率豁翎,但降低了新增角骤、刪除操作的速度,同時(shí)也會(huì)消耗一定的數(shù)據(jù)庫物理空間心剥。
5.?什么是存儲(chǔ)過程邦尊?
存儲(chǔ)過程是一個(gè)預(yù)編譯的SQL語句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì)优烧,就是說只需創(chuàng)建一次蝉揍,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL匙隔,使用存儲(chǔ)過程比單純SQL語句執(zhí)行要快疑苫。
6.?什么是觸發(fā)器?
觸發(fā)器是一中特殊的存儲(chǔ)過程纷责,主要是通過事件來觸發(fā)而被執(zhí)行的捍掺。它可以強(qiáng)化約束,來維護(hù)數(shù)據(jù)的完整性和一致性再膳,可以跟蹤數(shù)據(jù)庫內(nèi)的操作從而不允許未經(jīng)許可的更新和變化挺勿。可以聯(lián)級(jí)運(yùn)算喂柒。如不瓶,某表上的觸發(fā)器上包含對(duì)另一個(gè)表的數(shù)據(jù)操作,而該操作又會(huì)導(dǎo)致該表觸發(fā)器被觸發(fā)灾杰。
7.?寫出一條Sql語句:取出表A中第31到第40記錄 (MS-SQLServer)
解1:select top 10 * from A where id not in (select top 30 id from A)
解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40
8.?寫出一條Sql語句:取出表A中第31到第40記錄 (Mysql)
select * from A?limit 30, 10
9.?寫出一條Sql語句:取出表A中第31到第40記錄 (Oracle)
select *
from (select A.*,
???row_number() over (order by id asc) rank
????FROM A) ??
where rank >=31 AND rank<=40;
10.?在關(guān)系型數(shù)據(jù)庫中如何描述多對(duì)多的關(guān)系?
在關(guān)系型數(shù)據(jù)庫中描述多對(duì)多的關(guān)系,需要建立第三張數(shù)據(jù)表蚊丐。比如學(xué)生選課,需要在學(xué)生信息表和課程信息表的基礎(chǔ)上,再建立選課信息表,該表中存放學(xué)生Id和課程Id。
11.?什么是數(shù)據(jù)庫約束,常見的約束有哪幾種?
數(shù)據(jù)庫約束用于保證數(shù)據(jù)庫表數(shù)據(jù)的完整性(正確性和一致性)艳吠÷蟊福可以通過定義約束\索引\觸發(fā)器來保證數(shù)據(jù)的完整性。
總體來講,約束可以分為:
主鍵約束:primary key昭娩;
外鍵約束:foreign key凛篙;
唯一約束:unique;
檢查約束:check栏渺;
空值約束:not null呛梆;
默認(rèn)值約束:default;
12.?列舉幾種常用的聚合函數(shù)?
Sum:求和\ Avg:求平均數(shù)\ Max:求最大值\ Min:求最小值\ Count:求記錄數(shù)
13.?什么是內(nèi)聯(lián)接磕诊、左外聯(lián)接填物、右外聯(lián)接纹腌?
l?內(nèi)聯(lián)接(Inner Join):匹配2張表中相關(guān)聯(lián)的記錄。
l?左外聯(lián)接(Left Outer Join):除了匹配2張表中相關(guān)聯(lián)的記錄外滞磺,還會(huì)匹配左表中剩余的記錄壶笼,右表中未匹配到的字段用NULL表示。
l?右外聯(lián)接(Right Outer Join):除了匹配2張表中相關(guān)聯(lián)的記錄外雁刷,還會(huì)匹配右表中剩余的記錄,左表中未匹配到的字段用NULL表示保礼。
在判定左表和右表時(shí)沛励,要根據(jù)表名出現(xiàn)在Outer Join的左右位置關(guān)系。
14.?如何在刪除主表記錄時(shí)炮障,一并刪除從表相關(guān)聯(lián)的記錄目派?
如果兩張表存在主外鍵關(guān)系,那么在刪除主鍵表的記錄時(shí)胁赢,如果從表有相關(guān)聯(lián)的記錄企蹭,那么將導(dǎo)致刪除失敗。
在定義外鍵約束時(shí)智末,可以同時(shí)指定3種刪除策略:一是將從表記錄一并刪除(級(jí)聯(lián)刪除)谅摄;二是將從表記錄外鍵字段設(shè)置為NULL;三是將從表記錄外鍵字段設(shè)置為默認(rèn)值系馆。
級(jí)聯(lián)刪除示例:
alter table 從表名
add constraint 外鍵名
foreign key(字段名) references 主表名(字段名)
on delete cascade
15.?什么是游標(biāo)送漠?
游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄進(jìn)行處理的機(jī)制。
游標(biāo)的使用步驟:
1.?定義游標(biāo):declare cursor 游標(biāo)名稱 for ?select查詢語句 [for {readonly|update}]
2.?打開游標(biāo):open cursor
3.?從游標(biāo)中操作數(shù)據(jù):fetch... ... ??current of cursor
4.?關(guān)閉游標(biāo):close cursor
Version:1.0StartHTML:000000210EndHTML:000050386StartFragment:000001687EndFragment:000050324StartSelection:000001687EndSelection:000050320SourceURL:https://www.cnblogs.com/luolizhi/p/5248230.html
一由蘑、數(shù)據(jù)庫基礎(chǔ)
1. 數(shù)據(jù)抽象:物理抽象闽寡、概念抽象、視圖級(jí)抽象,內(nèi)模式尼酿、模式爷狈、外模式
2. SQL語言包括數(shù)據(jù)定義、數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)控制(Data Control)
數(shù)據(jù)定義:Create Table,Alter Table,Drop Table, Craete/DropIndex等
數(shù)據(jù)操縱:Select ,insert,update,delete,
數(shù)據(jù)控制:grant,revoke,commit,rollback
3. SQL常用命令:
CREATE TABLE Student(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL);//建表
CREATE VIEW view_name AS
Select * FROM Table_name;//建視圖
Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
INSERT INTO tablename {column1,column2,…}values(exp1,exp2,…);//插入
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入視圖實(shí)際影響表
UPDATE tablename SET name=’zang 3’ condition;//更新數(shù)據(jù)
DELETE FROM Tablename WHERE condition;//刪除
GRANT (Select,delete,…) ON (對(duì)象) TO USER_NAME [WITHGRANT OPTION];//授權(quán)
REVOKE (權(quán)限表) ON(對(duì)象) FROM USER_NAME[WITH REVOKE OPTION] //撤權(quán)
列出工作人員及其領(lǐng)導(dǎo)的名字:
Select E.NAME, S.NAME FROM EMPLOYEE E S
WHERE E.SUPERName=S.Name
4. 視圖:
5. 完整性約束:實(shí)體完整性裳擎、參照完整性涎永、用戶定義完整性
6. 第三范式:
1NF:每個(gè)屬性是不可分的。 2NF:若關(guān)系R是1NF,且每個(gè)非主屬性都完全函數(shù)依賴于R的鍵句惯。例SLC(SID#, CourceID#, SNAME,Grade),則不是2NF;3NF:若R是2NF土辩,且它的任何非鍵屬性都不傳遞依賴于任何候選鍵。
7. ER(實(shí)體/聯(lián)系)模型
8. 索引作用
9. 事務(wù):是一系列的數(shù)據(jù)庫操作抢野,是數(shù)據(jù)庫應(yīng)用的基本邏輯單位拷淘。事務(wù)性質(zhì):原子性、
l 原子性指孤。即不可分割性启涯,事務(wù)要么全部被執(zhí)行贬堵,要么就全部不被執(zhí)行。
l 一致性或可串性结洼。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)
l 隔離性黎做。在事務(wù)正確提交之前,不允許把該事務(wù)對(duì)數(shù)據(jù)的任何改變提供給任何其他事務(wù)松忍,
l 持久性蒸殿。事務(wù)正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中鸣峭,即使在事務(wù)提交后有了其他故障宏所,事務(wù)的處理結(jié)果也會(huì)得到保存。
10. 鎖:共享鎖摊溶、互斥鎖
兩段鎖協(xié)議:階段1:加鎖階段 階段2:解鎖階段
11. 死鎖及處理:事務(wù)循環(huán)等待數(shù)據(jù)鎖爬骤,則會(huì)死鎖。
死鎖處理:預(yù)防死鎖協(xié)議莫换,死鎖恢復(fù)機(jī)制
12. 存儲(chǔ)過程:存儲(chǔ)過程就是編譯好了的一些sql語句霞玄。
1.存儲(chǔ)過程因?yàn)镾QL語句已經(jīng)預(yù)編繹過了,因此運(yùn)行的速度比較快拉岁。
2. 可保證數(shù)據(jù)的安全性和完整性坷剧。通過存儲(chǔ)過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全喊暖。通過存儲(chǔ)過程可以使相關(guān)的動(dòng)作在一起發(fā)生听隐,從而可以維護(hù)數(shù)據(jù)庫的完整性。
3.可以降低網(wǎng)絡(luò)的通信量哄啄。存儲(chǔ)過程主要是在服務(wù)器上運(yùn)行雅任,減少對(duì)客戶機(jī)的壓力。
4:存儲(chǔ)過程可以接受參數(shù)咨跌、輸出參數(shù)沪么、返回單個(gè)或多個(gè)結(jié)果集以及返回值⌒堪耄可以向程序返回錯(cuò)誤原因
5:存儲(chǔ)過程可以包含程序流禽车、邏輯以及對(duì)數(shù)據(jù)庫的查詢。同時(shí)可以實(shí)體封裝和隱藏了數(shù)據(jù)邏輯刊殉。
13. 觸發(fā)器: 當(dāng)滿足觸發(fā)器條件殉摔,則系統(tǒng)自動(dòng)執(zhí)行觸發(fā)器的觸發(fā)體。
觸發(fā)時(shí)間:有before,after.觸發(fā)事件:有insert,update,delete三種记焊。觸發(fā)類型:有行觸發(fā)逸月、語句觸發(fā)
14.內(nèi)聯(lián)接,外聯(lián)接區(qū)別?
內(nèi)連接是保證兩個(gè)表中所有的行都要滿足連接條件遍膜,而外連接則不然碗硬。
在外連接中瓤湘,某些不滿條件的列也會(huì)顯示出來,也就是說恩尾,只限制其中一個(gè)表的行弛说,而不限制另一個(gè)表的行。分左連接翰意、右連接木人、全連接三種
SQL試題2
一、
教師號(hào) 星期號(hào) 是否有課
1 〖脚肌2 有
1 』⑶簟3 有
2 1 有
3 ∧枘ァ2 有`
1 2 有
寫一條sql語句讓你變?yōu)檫@樣的表
教師號(hào) 星期一 星期二 星期三
1 ∑粤妗2 〉倘纭1
2 1
3 ≈吓蟆1
各星期下的數(shù)字表示:對(duì)應(yīng)的教師在星期幾已經(jīng)排的課數(shù)
二搀罢、
書表(books)
book_id,book_name,creatdate,Lastmodifydate,decription
001,三個(gè)人的世界,2005-02-02,2005-07-07,NULL
作者表(authors)
A_id,A_name
01,王紛
02,李尚
03,泰和
部門表(depts)
d_id,d_name
001,編輯一部
002,編輯二部
003,編輯三部
書和作者關(guān)聯(lián)表(bookmap)
book_id,A_id
001,01
001,02
001,03
部門和作者關(guān)聯(lián)表(depmap)
d_id,a_id
001,01
002,02
003,03
找出每個(gè)部門的所寫的總書兩,比如,一本書有3個(gè)人寫,如果三個(gè)人在不同的部門,則每個(gè)部門的總數(shù)量就是1.最后結(jié)果如下:
部門,書量
編輯一部,1
編輯二部,1
編輯三部,1
三、
兩個(gè)表情況
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0
表名:wu_bom
ID plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400
查詢這兩個(gè)表中plan唯一侥猩,每一個(gè)plan中榔至,amount最少的,plannum大于prixis的記錄
結(jié)果是:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400
四欺劳、
表1結(jié)構(gòu)如下:
部門 條碼 品名 銷售額 銷售數(shù)量 銷售日期
表2結(jié)構(gòu)如下
課別 部門
要求:先按部門排序唧取,再按銷售額、銷售數(shù)量排序檢索出某個(gè)課別每個(gè)部門一個(gè)時(shí)期內(nèi)的商品銷售額的前三名划提,如查詢01課別2007年4月15日到2007年4月22日每個(gè)部門一個(gè)周內(nèi)的商品銷售額合計(jì)的前三名
SQL 面試題目匯總
1.觸發(fā)器的作用枫弟?
答:觸發(fā)器是一中特殊的存儲(chǔ)過程,主要是通過事件來觸發(fā)而被執(zhí)行的鹏往。它可以強(qiáng)化約束淡诗,來維護(hù)數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫內(nèi)的操作從而不允許未經(jīng)許可的更新和變化伊履『荩可以聯(lián)級(jí)運(yùn)算。如唐瀑,某表上的觸發(fā)器上包含對(duì)另一個(gè)表的數(shù)據(jù)操作群凶,而該操作又會(huì)導(dǎo)致該表觸發(fā)器被觸發(fā)。
2哄辣。什么是存儲(chǔ)過程座掘?用什么來調(diào)用递惋?
答:存儲(chǔ)過程是一個(gè)預(yù)編譯的SQL語句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì)溢陪,就是說只需創(chuàng)建一次萍虽,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL形真,使用存儲(chǔ)過程比單純SQL語句執(zhí)行要快杉编。可以用一個(gè)命令對(duì)象來調(diào)用存儲(chǔ)過程咆霜。
3邓馒。索引的作用?和它的優(yōu)點(diǎn)缺點(diǎn)是什么蛾坯?
答:索引就一種特殊的查詢表光酣,數(shù)據(jù)庫的搜索引擎可以利用它加速對(duì)數(shù)據(jù)的檢索。它很類似與現(xiàn)實(shí)生活中書的目錄脉课,不需要查詢整本書內(nèi)容就可以找到想要的 數(shù)據(jù)救军。索引可以是唯一的,創(chuàng)建索引允許指定單個(gè)列或者是多個(gè)列倘零。缺點(diǎn)是它減慢了數(shù)據(jù)錄入的速度唱遭,同時(shí)也增加了數(shù)據(jù)庫的尺寸大小。
3呈驶。什么是內(nèi)存泄漏拷泽?
答:一般我們所說的內(nèi)存泄漏指的是堆內(nèi)存的泄漏。堆內(nèi)存是程序從堆中為其分配的袖瞻,大小任意的司致,使用完后要顯示釋放內(nèi)存。當(dāng)應(yīng)用程序用關(guān)鍵字new等 創(chuàng)建對(duì)象時(shí)聋迎,就從堆中為它分配一塊內(nèi)存蚌吸,使用完后程序調(diào)用free或者delete釋放該內(nèi)存,否則就說該內(nèi)存就不能被使用砌庄,我們就說該內(nèi)存被泄漏了羹唠。
4。維護(hù)數(shù)據(jù)庫的完整性和一致性娄昆,你喜歡用觸發(fā)器還是自寫業(yè)務(wù)邏輯佩微?為什么?
答:我是這樣做的萌焰,盡可能使用約束哺眯,如check,主鍵,外鍵扒俯,非空字段等來約束奶卓,這樣做效率最高一疯,也最方便。其次是使用觸發(fā)器夺姑,這種方法可以保證墩邀,無論什么業(yè)務(wù)系統(tǒng)訪問數(shù)據(jù)庫都可以保證數(shù)據(jù)的完整新和一致性。最后考慮的是自寫業(yè)務(wù)邏輯盏浙,但這樣做麻煩眉睹,編程復(fù)雜,效率低下废膘。
5竹海。什么是事務(wù)?什么是鎖丐黄?
答:事務(wù)就是被綁定在一起作為一個(gè)邏輯工作單元的SQL語句分組斋配,如果任何一個(gè)語句操作失敗那么整個(gè)操作就被失敗,以后操作就會(huì)回滾到操作前狀態(tài)灌闺,或者是上有個(gè)節(jié)點(diǎn)艰争。為了確保要么執(zhí)行,要么不執(zhí)行菩鲜,就可以使用事務(wù)。要將有組語句作為事務(wù)考慮惦积,就需要通過ACID測試接校,即原子性,一致性狮崩,隔離性和持久性蛛勉。
鎖:在所以的DBMS中,鎖是實(shí)現(xiàn)事務(wù)的關(guān)鍵睦柴,鎖可以保證事務(wù)的完整性和并發(fā)性诽凌。與現(xiàn)實(shí)生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者坦敌,在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)侣诵。當(dāng)然鎖還分級(jí)別的。
6狱窘。什么叫視圖杜顺?游標(biāo)是什么?
答:視圖是一種虛擬的表蘸炸,具有和物理表相同的功能躬络。可以對(duì)視圖進(jìn)行增搭儒,改穷当,查提茁,操作,試圖通常是有一個(gè)表或者多個(gè)表的行或列的子集馁菜。對(duì)視圖的修改不影響基本表茴扁。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢火邓。
游標(biāo):是對(duì)查詢出來的結(jié)果集作為一個(gè)單元來有效的處理丹弱。游標(biāo)可以定在該單元中的特定行,從結(jié)果集的當(dāng)前行檢索一行或多行铲咨《愀欤可以對(duì)結(jié)果集當(dāng)前行做修改。一般不使用游標(biāo)纤勒,但是需要逐條處理數(shù)據(jù)的時(shí)候坯苹,游標(biāo)顯得十分重要。
7摇天。為管理業(yè)務(wù)培訓(xùn)信息粹湃,建立3個(gè)表:
S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學(xué)號(hào),學(xué)員姓名泉坐,所屬單位为鳄,學(xué)員年齡
C(C#,CN)C#,CN分別代表課程編號(hào),課程名稱
SC(S#,C#,G) S#,C#,G分別代表學(xué)號(hào)腕让,所選的課程編號(hào)孤钦,學(xué)習(xí)成績
(1)使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程名稱為’稅收基礎(chǔ)’的學(xué)員學(xué)號(hào)和姓名?
答案:select s# ,sn from s where S# in(select S# from c,scwhere c.c#=sc.c# and cn=’稅收基礎(chǔ)’)
(2) 使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程編號(hào)為’C2’的學(xué)員姓名和所屬單位?
答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
(3) 使用標(biāo)準(zhǔn)SQL嵌套語句查詢不選修課程編號(hào)為’C5’的學(xué)員姓名和所屬單位?
答:select sn,sd from s where s# not in(select s# from scwhere c#=’c5’)
(4)查詢選修了課程的學(xué)員人數(shù)
答:select 學(xué)員人數(shù)=count(distinct s#)from sc
(5) 查詢選修課程超過5門的學(xué)員學(xué)號(hào)和所屬單位?
答:select sn,sd from s where s# in(select s# from sc groupby s# having count(distinct c#)>5)
目前在職場中很難找到非常合格的數(shù)據(jù)庫開發(fā)人員。有人說:“SQL開發(fā)是一門語言纯丸,它很容易學(xué)偏形,但是很難掌握【醣牵”
華為http://sqlserver.365dev.net/sql-1981.html
在面試過程中多次碰到兩道SQL查詢的題目俊扭,一是查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續(xù)增長的列坠陈,完整的查詢語句如下:
select top 10 * from A where ID >(select max(ID) from(select top 30 ID from A order by A ) T) order by A
另外一道題目的要求是查詢表A中存在ID重復(fù)三次以上的記錄,完整的查詢語句如下:
select * from(select count(ID) as count from table group by ID)T whereT.count>3
以上兩道題目非常有代表意義萨惑,望各位把自己碰到的有代表的查詢都貼上來。
create table testtable1
(
id int IDENTITY,
department varchar(12)
)
select * from testtable1
insert into testtable1 values(‘設(shè)計(jì)’)
insert into testtable1 values(‘市場’)
insert into testtable1 values(‘售后’)
/*
結(jié)果
id department
1 設(shè)計(jì)
2 市場
3 售后
*/
create table testtable2
(
id int IDENTITY,
dptID int,
name varchar(12)
)
insert into testtable2 values(1,’張三’)
insert into testtable2 values(1,’李四’)
insert into testtable2 values(2,’王五’)
insert into testtable2 values(3,’彭六’)
insert into testtable2 values(4,’陳七’)
/*
用一條SQL語句仇矾,怎么顯示如下結(jié)果
id dptID department name
1 1 設(shè)計(jì) 張三
2 1 設(shè)計(jì) 李四
3 2 市場 王五
4 3 售后 彭六
5 4 黑人 陳七
*/
答案是:
SELECT testtable2.* , ISNULL(department,’黑人’)
FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID
在面試應(yīng)聘的SQL Server數(shù)據(jù)庫開發(fā)人員時(shí)咒钟,我運(yùn)用了一套標(biāo)準(zhǔn)的基準(zhǔn)技術(shù)問題。下面這些問題是我覺得能夠真正有助于淘汰不合格應(yīng)聘者的問題若未。它們按照從易到難的順序排列朱嘴。當(dāng)你問到關(guān)于主鍵和外鍵的問題時(shí),后面的問題都十分有難度,因?yàn)榇鸢缚赡軙?huì)更難解釋和說明萍嬉,尤其是在面試的情形下乌昔。
你能向我簡要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫對(duì)象嗎?
你希望聽到的答案包括這樣一些對(duì)象:表格、視圖壤追、用戶定義的函數(shù)磕道,以及存儲(chǔ)過程;如果他們還能夠提到像觸發(fā)器這樣的對(duì)象就更好了。如果應(yīng)聘者不能回答這個(gè)基本的問題行冰,那么這不是一個(gè)好兆頭溺蕉。
NULL是什么意思?
NULL(空)這個(gè)值是數(shù)據(jù)庫世界里一個(gè)非常難纏的東西,所以有不少應(yīng)聘者會(huì)在這個(gè)問題上跌跟頭您也不要覺得意外悼做。
NULL這個(gè)值表示UNKNOWN(未知):它不表示“”(空字符串)疯特。假設(shè)您的SQL Server數(shù)據(jù)庫里有ANSI_NULLS,當(dāng)然在默認(rèn)情況下會(huì)有肛走,對(duì)NULL這個(gè)值的任何比較都會(huì)生產(chǎn)一個(gè)NULL值漓雅。您不能把任何值與一個(gè) UNKNOWN值進(jìn)行比較,并在邏輯上希望獲得一個(gè)答案朽色。您必須使用IS NULL操作符邻吞。
什么是索引?SQL Server 2000里有什么類型的索引?
任何有經(jīng)驗(yàn)的數(shù)據(jù)庫開發(fā)人員都應(yīng)該能夠很輕易地回答這個(gè)問題。一些經(jīng)驗(yàn)不太多的開發(fā)人員能夠回答這個(gè)問題葫男,但是有些地方會(huì)說不清楚抱冷。
簡單地說,索引是一個(gè)數(shù)據(jù)結(jié)構(gòu)梢褐,用來快速訪問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)旺遮。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引利职。聚集索引在索引的葉級(jí)保存數(shù)據(jù)趣效。這意味著不論聚集索引里有表格的哪個(gè)(或哪些)字段瘦癌,這些字段都 會(huì)按順序被保存在表格猪贪。由于存在這種排序,所以每個(gè)表格只會(huì)有一個(gè)聚集索引讯私。非聚集索引在索引的葉級(jí)有一個(gè)行標(biāo)識(shí)符热押。這個(gè)行標(biāo)識(shí)符是一個(gè)指向磁盤上數(shù)據(jù)的指針。它允許每個(gè)表格有多個(gè)非聚集索引斤寇。
什么是主鍵?什么是外鍵?
主鍵是表格里的(一個(gè)或多個(gè))字段桶癣,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個(gè)用來建立兩個(gè)表格之間關(guān)系的約束娘锁。這種關(guān)系一般都涉及一個(gè)表格里的主鍵字段與另外一個(gè)表格(盡管可能是同一個(gè)表格)里的一系列相連的字段牙寞。那么這些相連的字段就是外鍵。
什么是觸發(fā)器?SQL Server 2000有什么不同類型的觸發(fā)器?
讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實(shí)現(xiàn)它們是非常有益的。
觸發(fā)器是一種專用類型的存儲(chǔ)過程间雀,它被捆綁到SQL Server 2000的表格或者視圖上悔详。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發(fā)器惹挟。INSTEAD-OF觸發(fā)器是替代數(shù)據(jù)操控語言(Data Manipulation Language援所,DML)語句對(duì)表格執(zhí)行語句的存儲(chǔ)過程扣典。例如,如果我有一個(gè)用于TableA的INSTEAD-OF-UPDATE觸發(fā)器,同時(shí)對(duì)這個(gè) 表格執(zhí)行一個(gè)更新語句摊求,那么INSTEAD-OF-UPDATE觸發(fā)器里的代碼會(huì)執(zhí)行,而不是我執(zhí)行的更新語句則不會(huì)執(zhí)行操作卖子。
AFTER觸發(fā)器要在DML語句在數(shù)據(jù)庫里使用之后才執(zhí)行搀矫。這些類型的觸發(fā)器對(duì)于監(jiān)視發(fā)生在數(shù)據(jù)庫表格里的數(shù)據(jù)變化十分好用。
您如何確一個(gè)帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值驳规,而這些值同時(shí)在名為TableA的表格的Fld1字段里?
這個(gè)與關(guān)系相關(guān)的問題有兩個(gè)可能的答案肴敛。第一個(gè)答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護(hù)引用的完整性吗购。它被用來確保表格里 的字段只保存有已經(jīng)在不同的(或者相同的)表格里的另一個(gè)字段里定義了的值医男。這個(gè)字段就是候選鍵(通常是另外一個(gè)表格的主鍵)。
另外一種答案是觸發(fā)器捻勉。觸發(fā)器可以被用來保證以另外一種方式實(shí)現(xiàn)與限制相同的作用镀梭,但是它非常難設(shè)置與維護(hù),而且性能一般都很糟糕踱启。由于這個(gè)原因报账,微軟建議開發(fā)人員使用外鍵限制而不是觸發(fā)器來維護(hù)引用的完整性。
對(duì)一個(gè)投入使用的在線事務(wù)處理表格有過多索引需要有什么樣的性能考慮?
你正在尋找進(jìn)行與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員埠偿。對(duì)一個(gè)表格的索引越多透罢,數(shù)據(jù)庫引擎用來更新、插入或者刪除數(shù)據(jù)所需要的時(shí)間就越多冠蒋,因?yàn)樵跀?shù)據(jù)操控發(fā)生的時(shí)候索引也必須要維護(hù)羽圃。
你可以用什么來確保表格里的字段只接受特定范圍里的值?
這個(gè)問題可以用多種方式來回答,但是只有一個(gè)答案是“好”答案抖剿。您希望聽到的回答是Check限制朽寞,它在數(shù)據(jù)庫表格里被定義,用來限制輸入該列的值斩郎。
觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠接受的值脑融,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會(huì)在某些情況下影響到性能缩宜。因此肘迎,微軟建議使用Check限制而不是其他的方式來限制域的完整性。
如果應(yīng)聘者能夠正確地回答這個(gè)問題,那么他的機(jī)會(huì)就非常大了妓布,因?yàn)檫@表明他們具有使用存儲(chǔ)過程的經(jīng)驗(yàn)窿侈。
返回參數(shù)總是由存儲(chǔ)過程返回,它用來表示存儲(chǔ)過程是成功還是失敗秋茫。返回參數(shù)總是INT數(shù)據(jù)類型史简。
OUTPUT參數(shù)明確要求由開發(fā)人員來指定,它可以返回其他類型的數(shù)據(jù)肛著,例如字符型和數(shù)值型的值圆兵。(可以用作輸出參數(shù)的數(shù)據(jù)類型是有一些限制的。)您可以在一個(gè)存儲(chǔ)過程里使用多個(gè)OUTPUT參數(shù)枢贿,而您只能夠使用一個(gè)返回參數(shù)殉农。
什么是相關(guān)子查詢?如何使用這些查詢?
經(jīng)驗(yàn)更加豐富的開發(fā)人員將能夠準(zhǔn)確地描述這種類型的查詢。
相關(guān)子查詢是一種包含子查詢的特殊類型的查詢局荚。查詢里包含的子查詢會(huì)真正請(qǐng)求外部查詢的值超凳,從而形成一個(gè)類似于循環(huán)的狀況。
數(shù)據(jù)庫面試
一:SQL tuning 類
1. 列舉幾種表連接方式
Answer:等連接(內(nèi)連接)耀态、非等連接轮傍、自連接、外連接(左首装、右创夜、全)
Or hash join/merge join/nest loop(cluster join)/index join ?仙逻?
ORACLE 8i驰吓,9i 表連接方法。
一般的相等連接: select * from a, b where a.id = b.id; 這個(gè)就屬于內(nèi)連接系奉。
對(duì)于外連接:
Oracle中可以使用“(+) ”來表示檬贰,9i可以使用LEFT/RIGHT/FULL OUTER JOIN
LEFT OUTER JOIN:左外關(guān)聯(lián)
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等價(jià)于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+)
結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒有對(duì)應(yīng)部門編號(hào)department_id的員工記錄缺亮。
RIGHT OUTER JOIN:右外關(guān)聯(lián)
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等價(jià)于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+)=d.department_id
結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄翁涤,包括沒有任何員工的部門記錄。
FULL OUTER JOIN:全外關(guān)聯(lián)
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄瞬内,包括沒有對(duì)應(yīng)部門編號(hào)department_id的員工記錄和沒有任何員工的部門記錄迷雪。
ORACLE8i是不直接支持完全外連接的語法限书,也就是說不能在左右兩個(gè)表上同時(shí)加上(+)虫蝶,下面是在ORACLE8i可以參考的完全外連接語法
select t1.id,t2.id from table1 t1,table t2 wheret1.id=t2.id(+)
union
select t1.id,t2.id from table1 t1,table t2 wheret1.id(+)=t2.id
連接類型
定義
圖示
例子
內(nèi)連接
只連接匹配的行
select A.c1,B.c2 from A join B on A.c3 = B.c3;
左外連接
包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行
select A.c1,B.c2 from A left join B on A.c3 = B.c3;
右外連接
包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行
select A.c1,B.c2 from A right join B on A.c3 = B.c3;
全外連接
包含左、右兩個(gè)表的全部行倦西,不管在另一邊的表中是否存在與它們匹配的行
select A.c1,B.c2 from A full join B on A.c3 = B.c3;
(theta)連接
使用等值以外的條件來匹配左能真、右兩個(gè)表中的行
select A.c1,B.c2 from A join B on A.c3 != B.c3;
交叉連接
生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個(gè)數(shù)據(jù)源中的每個(gè)行與另一個(gè)數(shù)據(jù)源的每個(gè)行一一匹配
select A.c1,B.c2 from A,B;
2. 不借助第三方工具,怎樣查看sql的執(zhí)行計(jì)劃
I) 使用Explain Plan,查詢PLAN_TABLE;
EXPLAIN PLAN
SET STATEMENT_ID=’QUERY1′
FOR
SELECT *
FROM a
WHERE aa=1;
SELECT operation, options, object_name, object_type, ID,parent_id
FROM plan_table
WHERE STATEMENT_ID = ‘QUERY1′
ORDER BY ID;
II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics
SET AUTOTRACE ON;
3. 如何使用CBO,CBO與RULE的區(qū)別
IF 初始化參數(shù) OPTIMIZER_MODE = CHOOSE THEN –(8I DEFAULT)
IF 做過表分析
THEN 優(yōu)化器 Optimizer=CBO(COST); /*高效*/
ELSE
優(yōu)化器 Optimizer=RBO(RULE); /*高效*/
END IF;
END IF;
區(qū)別:
RBO根據(jù)規(guī)則選擇最佳執(zhí)行路徑來運(yùn)行查詢粉铐。
CBO根據(jù)表統(tǒng)計(jì)找到最低成本的訪問數(shù)據(jù)的方法確定執(zhí)行計(jì)劃疼约。
使用CBO需要注意:
I) 需要經(jīng)常對(duì)表進(jìn)行ANALYZE命令進(jìn)行分析統(tǒng)計(jì);
II) 需要穩(wěn)定執(zhí)行計(jì)劃;
III)需要使用提示(Hint);
使用RULE需要注意:
I) 選擇最有效率的表名順序
II) 優(yōu)化SQL的寫法;
在optimizer_mode=choose時(shí),如果表有統(tǒng)計(jì)信息(分區(qū)表外),優(yōu)化器將選擇CBO,否則選RBO。
RBO遵循簡單的分級(jí)方法學(xué),使用15種級(jí)別要點(diǎn)蝙泼,當(dāng)接收到查詢程剥,優(yōu)化器將評(píng)估使用到的要點(diǎn)數(shù)目,然后選擇最佳級(jí)別(最少的數(shù)量)的執(zhí)行路徑來運(yùn)行查詢。
CBO嘗試找到最低成本的訪問數(shù)據(jù)的方法,為了最大的吞吐量或最快的初始響應(yīng)時(shí)間,計(jì)算使用不同的執(zhí)行計(jì)劃的成本汤踏,并選擇成本最低的一個(gè),關(guān)于表的數(shù)據(jù)內(nèi)容的統(tǒng)計(jì)被用于確定執(zhí)行計(jì)劃织鲸。
4. 如何定位重要(消耗資源多)的SQL
使用CPU多的用戶session
SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog,a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUE
FROM v$session a, v$process b, v$sesstat c
WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr =b.addr
ORDER BY VALUE DESC;
select sql_text from v$sql
where disk_reads > 1000 or (executions > 0 andbuffer_gets/executions > 30000);
5. 如何跟蹤某個(gè)session的SQL
利用TRACE 跟蹤
ALTER SESSION SET SQLTRACE ON;
COLUMN SQL format a200;
SELECT machine, sql_text SQL
FROM v$sqltext a, v$session b
WHERE address = sql_address
AND machine = ‘&A’
ORDER BY hash_value, piece;
execdbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);
select sid,serial# from v$session where sid = (select sidfrom v$mystat where rownum = 1);
exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);
6. SQL調(diào)整最關(guān)注的是什么
檢查系統(tǒng)的I/O問題
sar-d能檢查整個(gè)系統(tǒng)的iostat(IO statistics)
查看該SQL的response time(db blockgets/consistent gets/physical reads/sorts (disk))
7. 說說你對(duì)索引的認(rèn)識(shí)(索引的結(jié)構(gòu)、對(duì)dml影響溪胶、對(duì)查詢影響搂擦、為什么提高查詢性能)
索引有B-TREE、BIT哗脖、CLUSTER等類型瀑踢。ORACLE使用了一個(gè)復(fù)雜的自平衡B-tree結(jié)構(gòu);通常來說,在表上建立恰當(dāng)?shù)乃饕疟埽樵儠r(shí)會(huì)改 進(jìn)查詢性能橱夭。但在進(jìn)行插入、刪除桑逝、修改時(shí)徘钥,同時(shí)會(huì)進(jìn)行索引的修改,在性能上有一定的影響肢娘。有索引且查詢條件能使用索引時(shí)呈础,數(shù)據(jù)庫會(huì)先度取索引,根據(jù)索引內(nèi)容和查詢條件橱健,查詢出ROWID而钞,再根據(jù)ROWID取出需要的數(shù)據(jù)。由于索引內(nèi)容通常比全表內(nèi)容要少很多拘荡,因此通過先讀索引臼节,能減少I/O,提高查詢性 能珊皿。
b-tree index/bitmap index/function index/patitionalindex(local/global)索引通常能提高select/update/delete的性能,會(huì)降低insert的速度,
8. 使用索引查詢一定能提高查詢的性能嗎网缝?為什么
通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價(jià).
索引需要空間來存儲(chǔ),也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時(shí),索引本身也會(huì)被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,那些不必要的索引反而會(huì)使查詢反應(yīng)時(shí)間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:
基于一個(gè)范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用;
基于非唯一性索引的檢索
索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯(cuò)了索引,或者講是場合不同
9. 綁定變量是什么?綁定變量有什么優(yōu)缺點(diǎn)蟋定?
綁定變量是指在SQL語句中使用變量粉臊,改變變量的值來改變SQL語句的執(zhí)行結(jié)果。
優(yōu)點(diǎn):使用綁定變量驶兜,可以減少SQL語句的解析扼仲,能減少數(shù)據(jù)庫引擎消耗在SQL語句解析上的資源远寸。提高了編程效率和可靠性。減少訪問數(shù)據(jù)庫的次數(shù), 就能實(shí)際上減少ORACLE的工作量屠凶。
缺點(diǎn):經(jīng)常需要使用動(dòng)態(tài)SQL的寫法驰后,由于參數(shù)的不同,可能SQL的執(zhí)行效率不同矗愧;
綁定變量是相對(duì)文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件灶芝,
這樣的SQL在不同條件下需要反復(fù)解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運(yùn)行時(shí)傳遞唉韭,然后綁定執(zhí)行监署。
優(yōu)點(diǎn)是減少硬解析,降低CPU的爭用,節(jié)省shared_pool
缺點(diǎn)是不能使用histogram,sql優(yōu)化比較困難
10. 如何穩(wěn)定(固定)執(zhí)行計(jì)劃
可以在SQL語句中指定執(zhí)行計(jì)劃。使用HINTS;
query_rewrite_enabled = true
star_transformation_enabled = true
optimizer_features_enable =9.2.0
創(chuàng)建并使用stored outline
11. 和排序相關(guān)的內(nèi)存在8i和9i分別怎樣調(diào)整纽哥,臨時(shí)表空間的作用是什么
SORT_AREA_SIZE 在進(jìn)行排序操作時(shí)钠乏,如果排序的內(nèi)容太多,內(nèi)存里不能全部放下春塌,則需要進(jìn)行外部排序晓避,
此時(shí)需要利用臨時(shí)表空間來存放排序的中間結(jié)果。
8i中sort_area_size/sort_area_retained_size決定了排序所需要的內(nèi)存只壳,如果排序操作不能在sort_area_size中完成,就會(huì)用到temp表空間
9i中如果workarea_size_policy=auto時(shí),
排序在pga內(nèi)進(jìn)行,通常pga_aggregate_target的1/20可以用來進(jìn)行disk sort;
如果workarea_size_policy=manual時(shí),排序需要的內(nèi)存由sort_area_size決定俏拱, 在執(zhí)行order by/groupby/distinct/union/create index/index rebuild/minus等操作時(shí),如果在pga或sort_area_size中不能完成,排序?qū)⒃谂R時(shí)表空間進(jìn)行(disk sort),臨時(shí)表空間主要作用就是完成系統(tǒng)中的disk sort.
12. 存在表T(a,b,c,d),要根據(jù)字段c排序后取第21—30條記錄顯示,請(qǐng)給出sql
SELECT *
FROM (SELECT ROWNUM AS row_num, tmp_tab.*
FROM (SELECT a, b, c, d
FROM T
ORDER BY c) tmp_tab
WHERE ROWNUM= 20
ORDER BY row_num;
create table t(a number(,b number(,c number(,d number();
/
begin
for i in 1 .. 300 loop
insert into tvalues(mod(i,2),i/2,dbms_random.value(1,300),i/4);
end loop;
end;
/
select * from (select c.*,rownum as rn from (select * fromt order by c desc) c) where rn between 21 and 30;
/
select * from (select * from test order by c desc) x whererownum < 30
minus
select * from (select * from test order by c desc) y whererownum < 20 order by 3 desc
相比之 minus性能較差
二:數(shù)據(jù)庫基本概念類
1 Pctused and pctfree 表示什么含義有什么作用
pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中, pctfree控制數(shù)據(jù)塊中保留用于update的空間,當(dāng)數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時(shí),該數(shù)據(jù)塊從freelist中去掉,當(dāng)塊由于dml操作free space大于pct_used設(shè)置的空間時(shí),該數(shù)據(jù)庫塊將被添加在freelist鏈表中吼句。
2 簡單描述tablespace / segment / extent/ block之間的關(guān)系
tablespace: 一個(gè)數(shù)據(jù)庫劃分為一個(gè)或多個(gè)邏輯單位锅必,該邏輯單位成為表空間;每一個(gè)表空間可能包含一個(gè)或多個(gè) Segment;
Segments: Segment指在tablespace中為特定邏輯存儲(chǔ)結(jié)構(gòu)分配的空間。每一個(gè)段是由一個(gè)或多個(gè)extent組成惕艳。包括數(shù)據(jù)段搞隐、索引段、回滾段和臨時(shí)段远搪。
Extents: 一個(gè) extent 由一系列連續(xù)的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間劣纲。
Data Blocks:Oracle 數(shù)據(jù)庫最小的I/O存儲(chǔ)單位,一個(gè)data block對(duì)應(yīng)一個(gè)或多個(gè)分配給data file的操作系統(tǒng)塊谁鳍。
table創(chuàng)建時(shí),默認(rèn)創(chuàng)建了一個(gè)data segment,每個(gè)data segment含有min extents指定的extents數(shù),每個(gè)extent據(jù)據(jù)表空間的存儲(chǔ)參數(shù)分配一定數(shù)量的blocks
3 描述tablespace和datafile之間的關(guān)系
一個(gè)表空間可包含一個(gè)或多個(gè)數(shù)據(jù)文件癞季。表空間利用增加或擴(kuò)展數(shù)據(jù)文件擴(kuò)大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和倘潜。一個(gè)datafile只能屬于一個(gè)表空間;
一個(gè)tablespace可以有一個(gè)或多個(gè)datafile,每個(gè)datafile只能在一個(gè)tablespace內(nèi), table中的數(shù)據(jù),通過hash算法分布在tablespace中的各個(gè)datafile中,tablespace是邏輯上的概念,datafile則 在物理上儲(chǔ)存了數(shù)據(jù)庫的種種對(duì)象绷柒。
4 本地管理表空間和字典管理表空間的特點(diǎn),ASSM有什么特點(diǎn)
本地管理表空間:(9i默認(rèn))空閑塊列表存儲(chǔ)在表空間的數(shù)據(jù)文件頭涮因。
特點(diǎn):減少數(shù)據(jù)字典表的競爭废睦,當(dāng)分配和收縮空間時(shí)會(huì)產(chǎn)生回滾,不需要合并蕊退。
字典管理表空間:(8i默認(rèn))空閑塊列表存儲(chǔ)在數(shù)據(jù)庫中的字典表里.
特點(diǎn):片由數(shù)據(jù)字典管理郊楣,可能造成字典表的爭用。存儲(chǔ)在表空間的每一個(gè)段都會(huì)有不同的存儲(chǔ)字句瓤荔,需要合并相鄰的塊;
本地管理表空間(Locally Managed Tablespace簡稱LMT)
8i以后出現(xiàn)的一種新的表空間的管理模式净蚤,通過位圖來管理表空間的空間使用。字典管理表空間(Dictionary-Managed Tablespace簡稱DMT)
8i以前包括以后都還可以使用的一種表空間管理模式输硝,通過數(shù)據(jù)字典管理表空間的空間使用今瀑。動(dòng)段空間管理(ASSM),它首次出現(xiàn)在Oracle920里有了ASSM点把,鏈接列表freelist被位圖所取代橘荠,它是一個(gè)二進(jìn)制的數(shù)組,
能夠迅速有效地管理存儲(chǔ)擴(kuò)展和剩余區(qū)塊(free block)郎逃,因此能夠改善分段存儲(chǔ)本質(zhì)哥童,ASSM表空間上創(chuàng)建的段還有另外一個(gè)稱呼叫Bitmap Managed Segments(BMB 段)。
5 回滾段的作用是什么
回滾段用于保存數(shù)據(jù)修改前的映象褒翰,這些信息用于生成讀一致性數(shù)據(jù)庫信息贮懈、在數(shù)據(jù)庫恢復(fù)和Rollback時(shí)使用。一個(gè)事務(wù)只能使用一個(gè)回滾段优训。
事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時(shí)候朵你,該數(shù)據(jù)修改前的值(即前影像)會(huì)存放在回滾段中,當(dāng)用戶回滾事務(wù)(ROLLBACK)時(shí)揣非,ORACLE將會(huì)利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復(fù)到原來的值抡医。
事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時(shí)候,例程失敗早敬,回滾段的信息保存在undo表空間中忌傻,ORACLE將在下次打開數(shù)據(jù)庫時(shí)利用回滾來恢復(fù)未提交的數(shù)據(jù)。
讀一致性:當(dāng)一個(gè)會(huì)話正在修改數(shù)據(jù)時(shí)搞监,其他的會(huì)話將看不到該會(huì)話未提交的修改芯勘。 當(dāng)一個(gè)語句正在執(zhí)行時(shí),該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句級(jí)讀一致性)
當(dāng)ORACLE執(zhí)行SELECT語句時(shí)腺逛,ORACLE依照當(dāng)前的系統(tǒng)改變號(hào)(SYSTEM CHANGE NUMBER-SCN)來保證任何前于當(dāng)前SCN的未提交的改變不被該語句處理荷愕。可以想象:當(dāng)一個(gè)長時(shí)間的查詢正在執(zhí)行時(shí)棍矛, 若其他會(huì)話改變了該查詢要查詢的某個(gè)數(shù)據(jù)塊安疗,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個(gè)讀一致性視圖
6 日志的作用是什么
日志文件(Log File)記錄所有對(duì)數(shù)據(jù)庫數(shù)據(jù)的修改,主要是保護(hù)數(shù)據(jù)庫以防止故障,以及恢復(fù)數(shù)據(jù)時(shí)使用够委。其特點(diǎn)如下:
a)每一個(gè)數(shù)據(jù)庫至少包含兩個(gè)日志文件組荐类。每個(gè)日志文件組至少包含兩個(gè)日志文件成員。
b)日志文件組以循環(huán)方式進(jìn)行寫操作茁帽。
c)每一個(gè)日志文件成員對(duì)應(yīng)一個(gè)物理文件玉罐。
記錄數(shù)據(jù)庫事務(wù),最大限度地保證數(shù)據(jù)的一致性與安全性
重做日志文件:含對(duì)數(shù)據(jù)庫所做的更改記錄屈嗤,這樣萬一出現(xiàn)故障可以啟用數(shù)據(jù)恢復(fù),一個(gè)數(shù)據(jù)庫至少需要兩個(gè)重做日志文件
歸檔日志文件:是重做日志文件的脫機(jī)副本,這些副本可能對(duì)于從介質(zhì)失敗中進(jìn)行恢復(fù)很必要吊输。
7 SGA主要有那些部分饶号,主要作用是什么
系統(tǒng)全局區(qū)(SGA):是ORACLE為實(shí)例分配的一組共享緩沖存儲(chǔ)區(qū),用于存放數(shù)據(jù)庫數(shù)據(jù)和控制信息季蚂,以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫數(shù)據(jù)的管理和操作茫船。
SGA主要包括:
a)共享池(shared pool) :用來存儲(chǔ)最近執(zhí)行的SQL語句和最近使用的數(shù)據(jù)字典的數(shù)據(jù)。
b)數(shù)據(jù)緩沖區(qū) (database buffer cache):用來存儲(chǔ)最近從數(shù)據(jù)文件中讀寫過的數(shù)據(jù)扭屁。
c)重作日志緩沖區(qū)(redo log buffer):用來記錄服務(wù)或后臺(tái)進(jìn)程對(duì)數(shù)據(jù)庫的操作算谈。
另外在SGA中還有兩個(gè)可選的內(nèi)存結(jié)構(gòu):
d)java pool: 用來存儲(chǔ)Java代碼。
e)Large pool: 用來存儲(chǔ)不與SQL直接相關(guān)的大型內(nèi)存結(jié)構(gòu)料滥。備份然眼、恢復(fù)使用。
GA:db_cache/shared_pool/large_pool/java_pool
db_cache: 數(shù)據(jù)庫緩存(Block Buffer)對(duì)于Oracle數(shù)據(jù)庫的運(yùn)轉(zhuǎn)和性能起著非常關(guān)鍵的作用葵腹,它占據(jù)Oracle數(shù)據(jù)庫SGA(系統(tǒng)共享內(nèi)存區(qū))的主要部分罪治。Oracle數(shù)據(jù) 庫通過使用LRU算法,將最近訪問的數(shù)據(jù)塊存放到緩存中礁蔗,從而優(yōu)化對(duì)磁盤數(shù)據(jù)的訪問.
shared_pool: 共享池的大小對(duì)于Oracle 性能來說都是很重要的觉义。共享池中保存數(shù)據(jù)字典高速緩沖和完全解析或編譯的的PL/SQL 塊和SQL 語句及控制結(jié)構(gòu)
large_pool: 使用MTS配置時(shí),因?yàn)橐赟GA中分配UGA來保持用戶的會(huì)話浴井,就是用Large_pool來保持這個(gè)會(huì)話內(nèi)存使用RMAN做備份的時(shí)候晒骇,要使用Large_pool這個(gè)內(nèi)存結(jié)構(gòu)來做磁盤I/O緩存器
java_pool: 為java procedure預(yù)備的內(nèi)存區(qū)域,如果沒有使用java proc,java_pool不是必須的
8 Oracle系統(tǒng)進(jìn)程主要有哪些,作用是什么
數(shù)據(jù)寫進(jìn)程(DBWR):負(fù)責(zé)將更改的數(shù)據(jù)從數(shù)據(jù)庫緩沖區(qū)高速緩存寫入數(shù)據(jù)文件
日志寫進(jìn)程(LGWR):將重做日志緩沖區(qū)中的更改寫入在線重做日志文件
系統(tǒng)監(jiān)控 (SMON): 檢查數(shù)據(jù)庫的一致性如有必要還會(huì)在數(shù)據(jù)庫打開時(shí)啟動(dòng)數(shù)據(jù)庫的恢復(fù)
進(jìn)程監(jiān)控 (PMON): 負(fù)責(zé)在一個(gè)Oracle 進(jìn)程失敗時(shí)清理資源
檢查點(diǎn)進(jìn)程(CKPT):負(fù)責(zé)在每當(dāng)緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫中時(shí),更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫狀態(tài)信息磺浙。
歸檔進(jìn)程 (ARCH):在每次日志切換時(shí)把已滿的日志組進(jìn)行備份或歸檔
恢復(fù)進(jìn)程 (RECO): 保證分布式事務(wù)的一致性,在分布式事務(wù)中,要么同時(shí)commit,要么同時(shí)rollback;
作業(yè)調(diào)度器(CJQ ): 負(fù)責(zé)將調(diào)度與執(zhí)行系統(tǒng)中已定義好的job,完成一些預(yù)定義的工作.
三:備份恢復(fù)類
1 備份如何分類
邏輯備份:exp/imp 指定表的邏輯備份
物理備份:
熱備份:alter tablespace begin/end backup;
冷備份:脫機(jī)備份(database shutdown)
RMAN備份
full backup/incremental backup(累積/差異)
物理備份
物理備份是最主要的備份方式洪囤。用于保證數(shù)據(jù)庫在最小的數(shù)據(jù)庫丟失或沒有數(shù)據(jù)丟失的情況下得到恢復(fù)。
冷物理
冷物理備份提供了最簡單和最直接的方法保護(hù)數(shù)據(jù)庫因物理損壞丟失撕氧。建議在以下幾種情況中使用瘤缩。
對(duì)一個(gè)已經(jīng)存在大最數(shù)據(jù)量的數(shù)據(jù)庫,在晚間數(shù)據(jù)庫可以關(guān)閉伦泥,此時(shí)應(yīng)用冷物理備份剥啤。
對(duì)需對(duì)數(shù)據(jù)庫服務(wù)器進(jìn)行升級(jí),(如更換硬盤)不脯,此時(shí)需要備份數(shù)據(jù)庫信息府怯,并在新的硬盤中恢復(fù)這些數(shù)據(jù)信息,建議采用冷物理備份防楷。
熱物理
主要是指備份過程在數(shù)據(jù)庫打開并且用戶可以使用的情況下進(jìn)行牺丙。需要執(zhí)行熱物理備份的情況有:
由于數(shù)據(jù)庫性質(zhì)要求不間斷工作,因而此時(shí)只能采用熱物理備份复局。
由于備份的要求的時(shí)間過長冲簿,而數(shù)據(jù)庫只能短時(shí)間關(guān)閉時(shí)粟判。
邏輯備份 (EXP/IMP)
邏輯備份用于實(shí)現(xiàn)數(shù)據(jù)庫對(duì)象的恢復(fù)。但不是基于時(shí)間點(diǎn)可完全恢復(fù)的備份策略峦剔。只能作為聯(lián)機(jī)備份和脫機(jī)備份的一種補(bǔ)充档礁。
完全邏輯備份
完全邏輯備份是將整個(gè)數(shù)據(jù)庫導(dǎo)出到一個(gè)數(shù)據(jù)庫的格式文件中,該文件可以在不同的數(shù)據(jù)庫版本羊异、操作系統(tǒng)和硬件平臺(tái)之間進(jìn)行移植事秀。
指定表的邏輯備份
通過備份工具彤断,可以將指定的數(shù)據(jù)庫表備份出來野舶,這可以避免完全邏輯備份所帶來的時(shí)間和財(cái)力上的浪費(fèi)。
2 歸檔是什么含義
關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時(shí),則要建立歸檔日志(archived redo log)宰衙。其對(duì)數(shù)據(jù)庫備份和恢復(fù)有下列用處:
數(shù)據(jù)庫后備以及在線和歸檔日志文件平道,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復(fù)。
在數(shù)據(jù)庫打開和正常系統(tǒng)使用下供炼,如果歸檔日志是永久保存一屋,在線后備可以進(jìn)行和使用。
數(shù)據(jù)庫可運(yùn)行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式
數(shù)據(jù)庫在NOARCHIVELOG方式下使用時(shí)袋哼,不能進(jìn)行在線日志的歸檔,
數(shù)據(jù)庫在ARCHIVELOG方式下運(yùn)行冀墨,可實(shí)施在線日志的歸檔
歸檔是歸檔當(dāng)前的聯(lián)機(jī)redo日志文件。
SVRMGR> alter system archive log current;
數(shù)據(jù)庫只有運(yùn)行在ARCHIVELOG模式下涛贯,并且能夠進(jìn)行自動(dòng)歸檔诽嘉,才可以進(jìn)行聯(lián)機(jī)備份。有了聯(lián)機(jī)備份才有可能進(jìn)行完全恢復(fù)弟翘。
3 如果一個(gè)表在2004-08-04 10:30:00 被drop虫腋,在有完善的歸檔和備份的情況下,如何恢復(fù)
9i 新增的FLASH BACK 應(yīng)該可以;
Logminer應(yīng)該可以找出DML稀余。
有完善的歸檔和備份悦冀,先歸檔當(dāng)前數(shù)據(jù),然后可以先恢復(fù)到刪除的時(shí)間點(diǎn)之前睛琳,把DROP 的表導(dǎo)出來盒蟆,然后再恢復(fù)到最后歸檔時(shí)間;
手工拷貝回所有備份的數(shù)據(jù)文件
Sql〉startup mount;
sql〉alter database recoverautomatic until time ’2004-08-04:10:30:00′;
sql〉alter database open resetlogs;
4 rman是什么师骗,有何特點(diǎn)
RMAN(Recovery Manager)是DBA的一個(gè)重要工具茁影,用于備份、還原和恢復(fù)oracle數(shù)據(jù)庫, RMAN 可以用來備份和恢復(fù)數(shù)據(jù)庫文件丧凤、歸檔日志募闲、控制文件、系統(tǒng)參數(shù)文件,也可以用來執(zhí)行完全或不完全的數(shù)據(jù)庫恢復(fù)愿待。
RMAN有三種不同的用戶接口:COMMAND LINE方式浩螺、GUI 方式(集成在OEM 中的備份管理器)靴患、API 方式(用于集成到第三方的備份軟件中)。
具有如下特點(diǎn):
1)功能類似物理備份要出,但比物理備份強(qiáng)大N倍鸳君;
2)可以壓縮空塊;
3)可以在塊水平上實(shí)現(xiàn)增量患蹂;
4)可以把備份的輸出打包成備份集或颊,也可以按固定大小分割備份集;
5)備份與恢復(fù)的過程可以自動(dòng)管理传于;
6)可以使用腳本(存在Recovery catalog 中)
7)可以做壞塊監(jiān)測
5 standby的特點(diǎn)
備用數(shù)據(jù)庫(standby database):ORACLE推出的一種高可用性(HIGH AVAILABLE)數(shù)據(jù)庫方案囱挑,在主節(jié)點(diǎn)與備用節(jié)點(diǎn)間通過日志同步來保證數(shù)據(jù)的同步,備用節(jié)點(diǎn)作為主節(jié)點(diǎn)的備份沼溜,可以實(shí)現(xiàn)快速切換與災(zāi)難性恢復(fù),從 920開始平挑,還開始支持物理與邏輯備用服務(wù)器。
9i中的三種數(shù)據(jù)保護(hù)模式分別是:
1)系草、MAXIMIZE PROTECTION :最大數(shù)據(jù)保護(hù)與無數(shù)據(jù)分歧通熄,LGWR將同時(shí)傳送到備用節(jié)點(diǎn),在主節(jié)點(diǎn)事務(wù)確認(rèn)之前找都,備用節(jié)點(diǎn)也必須完全收到日志數(shù)據(jù)唇辨。如果網(wǎng)絡(luò)不好,引起LGWR不能傳送數(shù)據(jù)能耻,將引起嚴(yán)重的性能問題赏枚,導(dǎo)致主節(jié)點(diǎn)DOWN機(jī)。
2)嚎京、MAXIMIZE AVAILABILITY :無數(shù)據(jù)丟失模式嗡贺,允許數(shù)據(jù)分歧,允許異步傳送鞍帝。
正常情況下運(yùn)行在最大保護(hù)模式诫睬,在主節(jié)點(diǎn)與備用節(jié)點(diǎn)的網(wǎng)絡(luò)斷開或連接不正常時(shí),自動(dòng)切換到最大性能模式帕涌,主節(jié)點(diǎn)的操作還是可以繼續(xù)的摄凡。在網(wǎng)絡(luò)不好的情況下有較大的性能影響。
3)蚓曼、MAXIMIZE PERFORMANCE:這種模式應(yīng)當(dāng)可以說是從8i繼承過來的備用服務(wù)器模式亲澡,異步傳送,無數(shù)據(jù)同步檢查纫版,可能丟失數(shù)據(jù)床绪,但是能獲得主節(jié)點(diǎn)的最大性能。9i在配置DATA GUARD的時(shí)候默認(rèn)就是MAXIMIZE PERFORMANCE
6 對(duì)于一個(gè)要求恢復(fù)時(shí)間比較短的系統(tǒng)(數(shù)據(jù)庫50G,每天歸檔5G),你如何設(shè)計(jì)備份策略
數(shù)據(jù)庫比較大邏輯備份沒什么必要癞己,每天歸檔5G膀斋,每周三/周六自動(dòng)歸檔10G,每月RMAN歸檔全庫痹雅。應(yīng)該有standby仰担。
rman/每月一號(hào) level 0 每周末/周三 level 1 其它每天level2
四:系統(tǒng)管理類
1. 對(duì)于一個(gè)存在系統(tǒng)性能的系統(tǒng),說出你的診斷處理思路
ü 做statspack收集系統(tǒng)相關(guān)信息 了解系統(tǒng)大致情況/確定是否存在參數(shù)設(shè)置不合適的地方/查看top 5 event/查看topsql等
ü 查v$system_event/v$session_event/v$session_wait從v$system_event開始,確定需要什么資源(db file sequential read)等绩社,深入研究v$session_event,確定等待事件涉及的會(huì)話摔蓝,從v$session_wait確定詳細(xì)的資源爭用情況(p1-p3的 值:file_id/block_id/blocks等)
ü 通過v$sql/v$sqltext/v$sqlarea表確定disk_reads、(buffer_gets/executions)值較大的SQL
2. 列舉幾種診斷IO愉耙、CPU贮尉、性能狀況的方法
top uptime vmstat iostat statspack sql_trace/tkprof
查v$system_event/v$session_event/v$session_wait
查v$sqlarea(disk_reads或buffer_gets/executions較大的SQL)
或者第三方的監(jiān)視工具,TOAD就不錯(cuò)劲阎。
3. 對(duì)statspack有何認(rèn)識(shí)
認(rèn)識(shí)不深绘盟。僅限了解鸠真。StapSpack是Oracle公司提供的一個(gè)收集數(shù)據(jù)庫運(yùn)行性能指標(biāo)的軟件包悯仙。可以做數(shù)據(jù)庫健康檢查報(bào)告吠卷。
StapSpack是Oracle公司提供的一個(gè)收集數(shù)據(jù)庫運(yùn)行性能指標(biāo)的軟件包锡垄,該軟件包從8i起,在9i祭隔、10g都有顯著的增強(qiáng)
該軟件包的輔助表(存儲(chǔ)相關(guān)參數(shù)與收集的性能指標(biāo)的表)由最初的25個(gè)增長到43個(gè)
收集級(jí)別參數(shù)由原來的3個(gè)(0货岭、5、10)增加到5個(gè)(0疾渴、5千贯、6、7搞坝、10)
通過分析收集的性能指標(biāo)搔谴,數(shù)據(jù)庫管理員可以詳細(xì)地了解數(shù)據(jù)庫目前的運(yùn)行情況,對(duì)數(shù)據(jù)庫實(shí)例桩撮、等待事件敦第、SQL等進(jìn)行優(yōu)化調(diào)整
利用statspack收集的snapshot,可以統(tǒng)計(jì)制作數(shù)據(jù)庫的各種性能指標(biāo)的統(tǒng)計(jì)趨勢(shì)圖表。
4. 如果系統(tǒng)現(xiàn)在需要在一個(gè)很大的表上創(chuàng)建一個(gè)索引店量,你會(huì)考慮那些因素芜果,如何做以盡量減小對(duì)應(yīng)用的影響
可以先表分析一下,然后測試創(chuàng)建索引前后對(duì)應(yīng)用的性能影響融师;
需要考慮的是該索引列不經(jīng)常更新右钾,不是有很多重復(fù)值的情況時(shí), 在大表中使用索引特別有效. 創(chuàng)建的索引可以跟數(shù)據(jù)表分不同表空間存儲(chǔ)。
在系統(tǒng)比較空閑時(shí)nologging選項(xiàng)(如果有dataguard則不可以使用nologging)
大的sort_ared_size或pga_aggregate_target較大
5. 對(duì)raid10 和raid5有何認(rèn)識(shí)
RAID 10(或稱RAID 1+0)與RAID 0+1不同,它是用硬盤驅(qū)動(dòng)器先組成RAID 1陣列舀射,然后在RAID 1陣列之間再組成RAID 0陣列灭将。
RAID 10模式同RAID 0+1模式一樣具有良好的數(shù)據(jù)傳輸性能,但卻比RAID 0+1具有更高的可靠性后控。RAID 10陣列的實(shí)際容量為M×n/2庙曙,磁盤利用率為50%。RAID10也需要至少4個(gè)硬盤驅(qū)動(dòng)器構(gòu)成浩淘,因而價(jià)格昂貴捌朴。
RAID 10的可靠性同RAID 1一樣,但由于RAID 10硬盤驅(qū)動(dòng)器之間有數(shù)據(jù)分割张抄,因而數(shù)據(jù)傳輸性能優(yōu)良砂蔽。
RAID 5與RAID 3很相似,不同之處在于RAID 5的奇偶校驗(yàn)信息也同數(shù)據(jù)一樣被分割保存到所有的硬盤驅(qū)動(dòng)器署惯,而不是寫入一個(gè)指定的硬盤驅(qū)動(dòng)器左驾,從而消除了單個(gè)奇偶校驗(yàn)硬盤驅(qū)動(dòng)器的瓶頸問題。RAID 5磁盤陣列的性能比RAID 3有所提高极谊,但仍然需要至少3塊硬盤驅(qū)動(dòng)器诡右。其實(shí)際容量為M×(n-1),磁盤利用率為(n-1)/n 轻猖。
五:綜合隨意類
1. 你最擅長的是oracle哪部分?
pl/sql及sql優(yōu)化
2. 喜歡oracle嗎帆吻?喜歡上論壇嗎?或者偏好oracle的哪一部分咙边?
喜歡猜煮。PL/SQL比較得心應(yīng)手。
3. 隨意說說你覺得oracle最有意思的部分或者最困難的部分
我對(duì)數(shù)據(jù)庫的備份/恢復(fù)和性能調(diào)優(yōu)經(jīng)驗(yàn)明顯不足败许,自然覺得有些困難王带。
基于ORACLE的研究應(yīng)該是個(gè)寬廣的領(lǐng)域,所以我覺得還是有意思的市殷。
4. 為何要選擇做DBA呢?
我對(duì)數(shù)據(jù)庫的備份/恢復(fù)和性能調(diào)優(yōu)經(jīng)驗(yàn)明顯不足愕撰,主要是缺乏環(huán)境和交流。
因此被丧,算不上什么DBA盟戏。不過因此我更需要這樣的機(jī)會(huì)。
不過就整個(gè)ORACLE 來說甥桂,一直從事與它相關(guān)的工作柿究,感情還是頗深的。放棄可惜黄选。而且就技術(shù)本身而言我覺得自己還是有學(xué)習(xí)和創(chuàng)新的能力蝇摸,它的諸如數(shù)據(jù)倉庫婶肩,數(shù)據(jù)挖掘之類的領(lǐng)域也很廣。
數(shù)據(jù)庫面試筆試題集
第一套
一.選擇題
1. 下面敘述正確的是______貌夕。
A律歼、算法的執(zhí)行效率與數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)無關(guān)
B、算法的空間復(fù)雜度是指算法程序中指令(或語句)的條數(shù)
C啡专、算法的有窮性是指算法必須能在執(zhí)行有限個(gè)步驟之后終止D险毁、以上三種描述都不對(duì)
2. 以下數(shù)據(jù)結(jié)構(gòu)中不屬于線性數(shù)據(jù)結(jié)構(gòu)的是______。A们童、隊(duì)列B畔况、線性表C、二叉樹D慧库、棧
3. 在一棵二叉樹上第5層的結(jié)點(diǎn)數(shù)最多是______跷跪。A、8 B齐板、16 C吵瞻、32 D、15
4. 下面描述中甘磨,符合結(jié)構(gòu)化程序設(shè)計(jì)風(fēng)格的是______橡羞。
A、使用順序宽档、選擇和重復(fù)(循環(huán))三種基本控制結(jié)構(gòu)表