《數(shù)據(jù)庫程序員面試筆試寶典》針對當(dāng)前各大 IT 企業(yè)面試筆試的特性與側(cè)重點(diǎn),精心挑選了近3年以來近百家 IT 企業(yè)的數(shù)據(jù)庫面試筆試真題,這些企業(yè)涉及的業(yè)務(wù)包括系統(tǒng)軟件、搜索引擎、電子商務(wù)、手機(jī)App、安全關(guān)鍵軟件等,面試筆試真題非常具有代表性與參考性。同時,《數(shù)據(jù)庫程序員面試筆試寶典》對這些題目進(jìn)行了合理的劃分與歸類,并且對其進(jìn)行了庖丁解牛式的分析與講解。針對試題中涉及的部分重難點(diǎn)問題,本書都進(jìn)行了適當(dāng)?shù)財U(kuò)展與延伸,力求對知識點(diǎn)的講解清晰而不紊亂,全面而不啰嗦,不僅如此,《數(shù)據(jù)庫程序員面試筆試寶典》除了對數(shù)據(jù)庫的基礎(chǔ)知識進(jìn)行深度剖析以外,還針對Oracle、MySQL、SQL Server等常見數(shù)據(jù)庫的筆試面試做了非常詳細(xì)的介紹。
《數(shù)據(jù)庫程序員面試筆試寶典》是一本計算機(jī)相關(guān)專業(yè)畢業(yè)生面試、筆試的求職用書,同時也適合期望在計算機(jī)軟、硬件行業(yè)大顯身手的計算機(jī)愛好者閱讀。
在這里,有面試筆試常見技巧的提煉與總結(jié);
在這里,有面試筆試高頻數(shù)據(jù)庫知識點(diǎn)的整理與剖析;
在這里,有面試筆試歷年數(shù)據(jù)庫真題的解答與拓展。
程序員求職始終是當(dāng)前社會的一個熱點(diǎn),而市面上有很多關(guān)于程序員求職的書籍都是針對基礎(chǔ)知識的講解,沒有一本專門針對數(shù)據(jù)庫程序員的面試筆試寶典。雖然網(wǎng)絡(luò)上有一些IT企業(yè)的數(shù)據(jù)庫面試筆試真題,但這些題大多七拼八湊,毫無系統(tǒng)性可言,而且絕大多數(shù)都是一些博主自己做的,答案簡單,準(zhǔn)確性不高,即使偶爾答案正確了,也沒有詳細(xì)的講解,這就導(dǎo)致讀者做完了這些真題,根本就不知道自己做得是否正確,完全是徒勞。如果下一次這個題目再次被考察,自己還是不會。更有甚者,網(wǎng)上的答案很有可能是錯誤的,此時還會誤導(dǎo)讀者。
針對這種情況,我們創(chuàng)作團(tuán)隊經(jīng)過精心準(zhǔn)備,從互聯(lián)網(wǎng)上的海量數(shù)據(jù)庫面試筆試真題中,選取了當(dāng)前頂級企業(yè)(包括微軟、谷歌、百度、騰訊、阿里巴巴、360、小米等)的面試筆試真題,挑選出其中比較典型、考察頻率較高、具有代表性的真題,做到難度適宜,兼顧各層次讀者的需求,同時對真題進(jìn)行知識點(diǎn)的分門別類,做到層次清晰、條理分明、答案簡單明了。本書特點(diǎn)鮮明,所選真題以及寫作手法具有以下特點(diǎn)。
第一,考察率高:本書中所選真題全是數(shù)據(jù)庫程序員面試筆試?键c(diǎn),如數(shù)據(jù)庫基礎(chǔ)知識、操作系統(tǒng)、計算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)結(jié)構(gòu)與算法、海量數(shù)據(jù)處理等。
第二,行業(yè)代表性強(qiáng):本書中所選真題全部來自于頂級知名企業(yè),它們是行業(yè)的風(fēng)向標(biāo),代表了行業(yè)的高水準(zhǔn),其中絕大多數(shù)真題因為題目難易適中,而且具有非常好的區(qū)分度,通常會被眾多中小企業(yè)全盤照搬,具有代表性。
第三,答案詳盡:本書對每一道題目都有非常詳細(xì)的解答,不只是告訴讀者答案,還提供了詳細(xì)的講解。
第四,分類清晰、調(diào)理分明:本書對各個知識點(diǎn)都進(jìn)行了分門別類的歸納,這種寫法有利于讀者針對個人實際情況做到有的放矢、重點(diǎn)把握。
由于圖書的篇幅所限,我們無法將所有的程序員面試筆試真題內(nèi)容都寫在書稿中,鑒于此,我們猿媛之家在官方網(wǎng)站(www.yuanyuanba.com)上提供了一個讀者交流平臺,讀者可以在該網(wǎng)站上傳各類面試筆試真題,也可以查找到自己所需要的知識,同時,讀者也可以向本平臺提供當(dāng)前最新、最熱門的程序員面試筆試題、面試技巧、程序員生活等相關(guān)材料。除此以外,我們還建立了公眾號:猿媛之家,作為對外消息發(fā)布平臺,以最大限度地滿足讀者需要。
本書適合的讀者對象主要有如下幾類:
剛畢業(yè)找工作的同學(xué),及從其它崗位轉(zhuǎn)數(shù)據(jù)庫崗位的人員
面試Oracle DBA初中級工作的人員
面試Oracle開發(fā)工作的人員
面試初級MySQL和初級SQL Server管理工作的人員
Oracle運(yùn)維人員
數(shù)據(jù)庫愛好者
閱讀本書注意事項
(1)由于篇幅原因,書中很多部分的實驗內(nèi)容、部分實用代碼、部分結(jié)果或其它一些延伸性的知識,我都寫在了隨書pdf文件里,大家可以在pdf文件中閱讀。還有部分內(nèi)容不適合在pdf里展現(xiàn)的,我都寫在了博客或微信公眾號中,并且在pdf文件中給出了鏈接地址。讀者若想了解更深層次的知識,可以去鏈接地址閱讀。鏈接中給出的實驗部分除非讀者已經(jīng)非常熟悉了,不然實驗的內(nèi)容需要讀者親自動手實踐,以便更深刻理解其中的知識點(diǎn)。需要注意的是,這些延伸性的知識點(diǎn)有可能在面試中也會出現(xiàn)。例如,本書中講解了ASMM和AMM的特性,但是并沒有講解有關(guān)大內(nèi)存頁的使用,而只是在小節(jié)后給出了相應(yīng)的鏈接文章,但是,在一些高級DBA的面試中,面試官也有可能詢問有關(guān)大內(nèi)存頁的知識。所以,對于有能力的讀者,可以適當(dāng)閱讀研究一下這些知識點(diǎn)。
(2)數(shù)據(jù)庫中的知識繁多而復(fù)雜,本書只針對一些常見的重要知識點(diǎn)進(jìn)行分析,更多更細(xì)節(jié)的內(nèi)容可以參閱相關(guān)的官方文檔。
(3)本書中若沒有特殊說明Oracle的版本的話,則默認(rèn)實驗版本為11.2.0.3。
在本書的編寫過程中,得到了楊偉豪、劉雪梅、楚沔西、秦榆、夏男穎、劉鵬、楊建榮的幫助,在此深表感謝。
由于編者水平有限,書中不足之處在所難免,還望讀者見諒。讀者如果發(fā)現(xiàn)問題,可以通過郵箱yuancoder@foxmail.com聯(lián)系我們。
猿媛之家
前言
上篇 面試筆試經(jīng)驗技巧篇
第1章 求職經(jīng)驗分享2
1.1 踩別人沒有踩過的坑,走別人沒有走過的路2
1.2 一只小白成長為DBA的心路歷程3
1.3 一個熱衷于SQL優(yōu)化的DBA成長經(jīng)歷3
第2章 數(shù)據(jù)庫程序員的求職現(xiàn)狀5
2.1 當(dāng)前市場對于數(shù)據(jù)庫程序員的需求如何?待遇如何?5
2.2 數(shù)據(jù)庫程序員有哪些可供選擇的職業(yè)發(fā)展道路?5
2.3 當(dāng)企業(yè)在招聘時,對數(shù)據(jù)庫程序員通常有何要求?5
2.4 數(shù)據(jù)庫程序員的日常工作是什么?7
2.5 要想成為一名出色的數(shù)據(jù)庫程序員,需要掌握哪些必備的知識?8
2.6 各類數(shù)據(jù)庫求職及市場使用情況9
第3章 如何應(yīng)對程序員面試筆試?12
3.1 如何巧妙地回答面試官的問題?12
3.2 如何回答技術(shù)性問題?12
3.3 如何回答非技術(shù)性問題?14
3.4 在被企業(yè)拒絕后是否可以再申請?15
3.5 如何應(yīng)對自己不會回答的問題?15
3.6 如何應(yīng)對面試官的“激將法”語言?15
3.7 如何處理與面試官持不同觀點(diǎn)這個問題?16
3.8 什么是職場暗語?16
下篇 面試筆試技術(shù)攻克篇
第4章 數(shù)據(jù)庫基礎(chǔ)21
4.1 為什么使用數(shù)據(jù)庫?21
4.2 數(shù)據(jù)庫系統(tǒng)有哪幾類數(shù)據(jù)模型結(jié)構(gòu)?21
4.3 關(guān)系型數(shù)據(jù)庫系統(tǒng)與文件系統(tǒng)有什么區(qū)別?22
4.4 數(shù)據(jù)庫系統(tǒng)的組成與結(jié)構(gòu)有哪些?23
4.5 數(shù)據(jù)庫系統(tǒng)的主要特點(diǎn)有哪些?24
4.6 試述數(shù)據(jù)模型的概念、數(shù)據(jù)模型的作用、常用數(shù)據(jù)模型的分類和數(shù)據(jù)模型的三個要素25
4.7 數(shù)據(jù)庫設(shè)計過程包括哪幾個主要階段?數(shù)據(jù)庫結(jié)構(gòu)的設(shè)計在生存期中的地位如何?26
4.8 范式27
4.8.1 第一、二、三、BC范式28
4.8.2 反范式31
4.9 關(guān)系型數(shù)據(jù)庫完整性規(guī)則31
4.10 數(shù)據(jù)庫的約束都有哪些?32
4.11 事務(wù)34
4.11.1 事務(wù)的概念及其4個特性是什么?34
4.11.2 事務(wù)的分類35
4.11.3 什么是XA事務(wù)?36
4.11.4 事務(wù)的4種隔離級別(Isolation Level)分別是什么?36
4.11.5 Oracle、MySQL和SQL Server中的事務(wù)隔離級別37
4.12 什么是CAP定理?38
4.13 什么是數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)和二級映像?39
4.14 什么是數(shù)據(jù)庫三級封鎖協(xié)議?40
4.15 什么是兩段鎖協(xié)議?41
4.16 鎖41
4.16.1 基礎(chǔ)知識41
4.16.2 更新丟失41
4.16.3 悲觀鎖和樂觀鎖42
4.16.4 鎖的分類42
4.16.5 Oracle中的鎖43
4.16.6 死鎖50
4.16.7 什么是MVCC?52
4.17 存儲過程53
4.17.1 什么是存儲過程?它有什么優(yōu)點(diǎn)?53
4.17.2 存儲過程和函數(shù)的區(qū)別是什么?54
4.18 觸發(fā)器的作用、優(yōu)缺點(diǎn)有哪些?54
4.19 什么是游標(biāo)?如何知道游標(biāo)已經(jīng)到了最后?55
4.20 視圖56
4.20.1 什么是視圖?視圖的作用是什么?56
4.20.2 在什么情況下可以對視圖執(zhí)行增加、刪除、修改操作?56
4.20.3 Oracle中的視圖57
4.21 SQL語句有哪些常見的分類?58
4.22 SQL語言的數(shù)據(jù)查詢60
4.22.1 多表連接查詢61
4.22.2 笛卡兒積是什么?62
4.22.3 TopN分析62
4.22.4 子查詢63
4.22.5 合并查詢(集合查詢)66
4.22.6 SQL:1999語法對SQL的支持69
4.22.7 WITH語法74
4.22.8 SQL部分練習(xí)題75
4.23 什么是SQL注入?79
4.24 索引79
4.24.1 索引的優(yōu)缺點(diǎn)80
4.24.2 索引的分類81
4.24.3 聚集索引是什么?在哪些列上適合創(chuàng)建聚集索引?82
4.24.4 單列索引和復(fù)合索引83
4.24.5 函數(shù)索引84
4.24.6 位圖索引84
4.24.7 分區(qū)索引85
4.24.8 什么是覆蓋索引?87
4.24.9 虛擬索引88
4.24.10 不可見索引90
4.24.11 Oracle中的其他索引92
4.25 ER模型96
4.26 熱備份和冷備份的區(qū)別是什么?99
4.27 數(shù)據(jù)字典的定義及作用有哪些?99
4.28 統(tǒng)一建模語言100
4.29 分布式數(shù)據(jù)庫與并行數(shù)據(jù)庫有何異同點(diǎn)?102
4.30 什么是OLAP和OLTP?102
4.31 數(shù)據(jù)庫連接池是什么?103
4.32 數(shù)據(jù)庫安全104
4.33 數(shù)據(jù)庫系統(tǒng)設(shè)計題106
4.34 數(shù)據(jù)庫基礎(chǔ)部分其他真題解析112
第5章 Oracle數(shù)據(jù)庫119
5.1 開發(fā)類?贾R點(diǎn)119
5.1.1 PL/SQL程序119
5.1.2 行列互換有哪些方法?121
5.1.3 如何刪除表中重復(fù)的記錄123
5.1.4 DELETE、DROP和TRUNCATE的區(qū)別是什么?123
5.1.5 NULL的注意事項124
5.1.6 如何判斷一個存儲過程是否正在運(yùn)行?125
5.1.7 AUTHID CURRENT_USER的作用是什么?125
5.1.8 Oracle用戶密碼含特殊字符時如何登錄?126
5.1.9 當(dāng)DML語句中有一條數(shù)據(jù)報錯時,如何讓該DML語句繼續(xù)執(zhí)行?127
5.1.10 真題128
5.2 維護(hù)類?贾R點(diǎn)133
5.2.1 Oracle對象133
5.2.2 體系結(jié)構(gòu)135
5.2.3 SQL優(yōu)化相關(guān)147
5.2.4 Oracle性能相關(guān)157
5.2.5 會話168
5.2.6 高可用169
5.2.7 備份恢復(fù)177
5.2.8 建庫、刪庫、網(wǎng)絡(luò)184
第6章 MySQL數(shù)據(jù)庫190
6.1 基礎(chǔ)部分190
6.1.1 MySQL數(shù)據(jù)庫有什么特點(diǎn)?190
6.1.2 MySQL的企業(yè)版和社區(qū)版的區(qū)別有哪些?191
6.1.3 在Linux下安裝MySQL有哪幾種方式?它們的優(yōu)缺點(diǎn)各有哪些?191
6.1.4 如何確定MySQL是否處于運(yùn)行狀態(tài)?如何開啟MySQL服務(wù)?191
6.1.5 如何創(chuàng)建和刪除表?192
6.1.6 如何創(chuàng)建和刪除數(shù)據(jù)庫?195
6.1.7 如何查看數(shù)據(jù)庫的版本、當(dāng)前登錄用戶和當(dāng)前的數(shù)據(jù)庫名稱?195
6.1.8 MySQL有哪些常用日期和時間函數(shù)?196
6.1.9 MySQL有哪些數(shù)據(jù)類型?197
6.1.10 真題200
6.2 維護(hù)部分203
6.2.1 MySQL中l(wèi)imit的作用是什么?203
6.2.2 如何查看和修改系統(tǒng)參數(shù)?203
6.2.3 MySQL有哪幾類日志文件?205
6.2.4 MySQL支持事務(wù)嗎?211
6.2.5 MySQL有幾種存儲引擎(表類型)?各自有什么區(qū)別?212
6.2.6 MySQL InnoDB引擎類型的表有哪兩類表空間模式?它們各有什么優(yōu)缺點(diǎn)?220
6.2.7 如何批量更改MySQL引擎?221
6.2.8 什么是間隙鎖?222
6.2.9 MySQL有哪些命令可以查看鎖?223
6.2.10 MySQL如何查看執(zhí)行計劃?執(zhí)行計劃中每列的含義分別是什么?227
6.2.11 MySQL原生支持的備份方式及種類有哪些?232
6.2.12 MySQL有哪幾個默認(rèn)數(shù)據(jù)庫?235
6.2.13 MySQL區(qū)分大小寫嗎?236
6.2.14 MySQL中的字符集236
6.2.15 如何解決MySQL中文亂碼問題?238
6.2.16 如何提高M(jìn)ySQL的安全性?239
6.2.17 如何對MySQL進(jìn)行優(yōu)化?240
6.2.18 什么是MySQL的復(fù)制(Replication)?244
6.2.19 profile的意義及使用場景245
6.2.20 Oracle和MySQL中的分組(GROUP BY)問題246
6.2.21 MySQL的分區(qū)表248
6.2.22 MySQL中的索引250
6.2.23 MySQL的CHECK、OPTIMIZE和ANALYZE的作用分別是什么?253
6.2.24 真題254
第7章 SQL Server數(shù)據(jù)庫260
7.1 SQL Server有Linux版本嗎?260
7.2 SQL Server如何查看版本?260
7.3 SQL Server 數(shù)據(jù)庫如何啟動?261
7.4 SQL Server有哪些默認(rèn)的系統(tǒng)數(shù)據(jù)庫?262
7.5 SQL Server物理文件有哪3種類型?263
7.6 SQL Serverr的哪類視圖是可以更新的?263
7.7 SQL Server標(biāo)準(zhǔn)的SQL與TSQL的區(qū)別是什么?264
7.8 SQL Server采用什么方法可以保證數(shù)據(jù)的完整性?266
7.9 登錄名、服務(wù)器角色、用戶名和數(shù)據(jù)庫角色266
7.10 SQL Server中的完全備份、差異備份和日志備份的區(qū)別是什么?267
7.10 SQL Server提供的3種恢復(fù)模型分別是什么?它們有什么區(qū)別?267
7.12 SQL Server數(shù)據(jù)庫有哪3類觸發(fā)器?268
7.13 真題269
7.13.1 簡答題269
7.13.2 選擇題270
第8章 其他數(shù)據(jù)庫272
8.1 網(wǎng)狀數(shù)據(jù)庫與層次數(shù)據(jù)庫273
8.2 關(guān)系型數(shù)據(jù)庫274
8.2.1 RDBMS274
8.2.2 PostgreSQL275
8.2.3 DB2275
8.2.4 Microsoft Access276
8.2.5 Sybase276
8.2.6 內(nèi)存數(shù)據(jù)庫277
8.3 非關(guān)系型數(shù)據(jù)庫(NoSQL)285
8.3.1 鍵值(KeyValue)數(shù)據(jù)庫Redis286
8.3.2 鍵值(KeyValue)數(shù)據(jù)庫Memcached287
8.3.3 文檔型數(shù)據(jù)庫MongoDB287
8.3.4 行存儲和列存儲289
8.4 時間序列數(shù)據(jù)庫290
8.5 NewSQL291
8.6 區(qū)塊鏈292
第9章 操作系統(tǒng)、網(wǎng)絡(luò)和存儲294
9.1 進(jìn)程管理294
9.1.1 進(jìn)程與線程有什么區(qū)別?294
9.1.2 內(nèi)核線程和用戶線程的區(qū)別295
9.2 內(nèi)存管理295
9.2.1 內(nèi)存管理有哪幾種方式?295
9.2.2 什么是虛擬內(nèi)存?296
9.2.3 什么是內(nèi)存碎片?什么是內(nèi)碎片?什么是外碎片296
9.2.4 虛擬地址、邏輯地址、線性地址、物理地址有什么區(qū)別?296
9.3 存儲297
9.3.1 Linux下邏輯卷管理(LVM)是什么?其常用命令有哪些?297
9.3.2 AIX下管理LV的常用命令有哪些?299
9.3.3 什么是GPFS?302
9.3.4 什么是RAID?各種級別的RAID的區(qū)別是什么?303
9.4 OS304
9.4.1 接觸過哪些OS系統(tǒng)?常用命令有哪些?304
9.4.2 會寫SHELL腳本嗎?305
9.4.3 AIX系統(tǒng)下的LPar、邏輯CPU、虛擬CPU、物理CPU的含義分別是什么?306
9.4.4 NMON的作用是什么?312
9.4.5 Linux環(huán)境下/dev/shm目錄的作用是什么?313
9.4.6 Linux下的常用設(shè)備有哪些?314
9.4.7 什么是YUM?如何配置本地YUM源?318
9.4.8 Linux下如何設(shè)置定時任務(wù)(crontab)?320
9.4.9 Linux文件的3種時間(mtime、atime、ctime)的區(qū)別是什么?322
9.5 網(wǎng)絡(luò)323
9.5.1 TCP和UDP的區(qū)別有哪些?323
9.5.2 Ping命令是什么?323
9.5.3 常用的網(wǎng)絡(luò)安全防護(hù)措施有哪些?324
9.5.4 交換機(jī)與路由器有什么區(qū)別?325
9.5.5 DNS的作用是什么?325
9.6 真題326
第10章 數(shù)據(jù)庫程序員面試筆試真題庫330
10.1 真題一330
10.2 真題二331
10.3 真題三332
10.4 真題一答案334
10.5 真題二答案334
10.6 真題三答案335
附錄 336
推薦資料336