《数据库程序员面试笔试宝典》针对当前各大 IT 企业面试笔试的特性与侧重点,精心挑选了近3年以来近百家 IT 企业的数据库面试笔试真题,这些企业涉及的业务包括系统软件、搜索引擎、电子商务、手机App、安全关键软件等,面试笔试真题非常具有代表性与参考性。同时,《数据库程序员面试笔试宝典》对这些题目进行了合理的划分与归类,并且对其进行了庖丁解牛式的分析与讲解。针对试题中涉及的部分重难点问题,本书都进行了适当地扩展与延伸,力求对知识点的讲解清晰而不紊乱,全面而不啰嗦,不仅如此,《数据库程序员面试笔试宝典》除了对数据库的基础知识进行深度剖析以外,还针对Oracle、MySQL、SQL Server等常见数据库的笔试面试做了非常详细的介绍。
《数据库程序员面试笔试宝典》是一本计算机相关专业毕业生面试、笔试的求职用书,同时也适合期望在计算机软、硬件行业大显身手的计算机爱好者阅读。
在这里,有面试笔试常见技巧的提炼与总结;
在这里,有面试笔试高频数据库知识点的整理与剖析;
在这里,有面试笔试历年数据库真题的解答与拓展。
程序员求职始终是当前社会的一个热点,而市面上有很多关于程序员求职的书籍都是针对基础知识的讲解,没有一本专门针对数据库程序员的面试笔试宝典。虽然网络上有一些IT企业的数据库面试笔试真题,但这些题大多七拼八凑,毫无系统性可言,而且绝大多数都是一些博主自己做的,答案简单,准确性不高,即使偶尔答案正确了,也没有详细的讲解,这就导致读者做完了这些真题,根本就不知道自己做得是否正确,完全是徒劳。如果下一次这个题目再次被考察,自己还是不会。更有甚者,网上的答案很有可能是错误的,此时还会误导读者。
针对这种情况,我们创作团队经过精心准备,从互联网上的海量数据库面试笔试真题中,选取了当前顶级企业(包括微软、谷歌、百度、腾讯、阿里巴巴、360、小米等)的面试笔试真题,挑选出其中比较典型、考察频率较高、具有代表性的真题,做到难度适宜,兼顾各层次读者的需求,同时对真题进行知识点的分门别类,做到层次清晰、条理分明、答案简单明了。本书特点鲜明,所选真题以及写作手法具有以下特点。
第一,考察率高:本书中所选真题全是数据库程序员面试笔试常考点,如数据库基础知识、操作系统、计算机网络、数据结构与算法、海量数据处理等。
第二,行业代表性强:本书中所选真题全部来自于顶级知名企业,它们是行业的风向标,代表了行业的高水准,其中绝大多数真题因为题目难易适中,而且具有非常好的区分度,通常会被众多中小企业全盘照搬,具有代表性。
第三,答案详尽:本书对每一道题目都有非常详细的解答,不只是告诉读者答案,还提供了详细的讲解。
第四,分类清晰、调理分明:本书对各个知识点都进行了分门别类的归纳,这种写法有利于读者针对个人实际情况做到有的放矢、重点把握。
由于图书的篇幅所限,我们无法将所有的程序员面试笔试真题内容都写在书稿中,鉴于此,我们猿媛之家在官方网站(www.yuanyuanba.com)上提供了一个读者交流平台,读者可以在该网站上传各类面试笔试真题,也可以查找到自己所需要的知识,同时,读者也可以向本平台提供当前最新、最热门的程序员面试笔试题、面试技巧、程序员生活等相关材料。除此以外,我们还建立了公众号:猿媛之家,作为对外消息发布平台,以最大限度地满足读者需要。
本书适合的读者对象主要有如下几类:
刚毕业找工作的同学,及从其它岗位转数据库岗位的人员
面试Oracle DBA初中级工作的人员
面试Oracle开发工作的人员
面试初级MySQL和初级SQL Server管理工作的人员
Oracle运维人员
数据库爱好者
阅读本书注意事项
(1)由于篇幅原因,书中很多部分的实验内容、部分实用代码、部分结果或其它一些延伸性的知识,我都写在了随书pdf文件里,大家可以在pdf文件中阅读。还有部分内容不适合在pdf里展现的,我都写在了博客或微信公众号中,并且在pdf文件中给出了链接地址。读者若想了解更深层次的知识,可以去链接地址阅读。链接中给出的实验部分除非读者已经非常熟悉了,不然实验的内容需要读者亲自动手实践,以便更深刻理解其中的知识点。需要注意的是,这些延伸性的知识点有可能在面试中也会出现。例如,本书中讲解了ASMM和AMM的特性,但是并没有讲解有关大内存页的使用,而只是在小节后给出了相应的链接文章,但是,在一些高级DBA的面试中,面试官也有可能询问有关大内存页的知识。所以,对于有能力的读者,可以适当阅读研究一下这些知识点。
(2)数据库中的知识繁多而复杂,本书只针对一些常见的重要知识点进行分析,更多更细节的内容可以参阅相关的官方文档。
(3)本书中若没有特殊说明Oracle的版本的话,则默认实验版本为11.2.0.3。
在本书的编写过程中,得到了杨伟豪、刘雪梅、楚沔西、秦榆、夏男颖、刘鹏、杨建荣的帮助,在此深表感谢。
由于编者水平有限,书中不足之处在所难免,还望读者见谅。读者如果发现问题,可以通过邮箱yuancoder@foxmail.com联系我们。
猿媛之家
前言
上篇 面试笔试经验技巧篇
第1章 求职经验分享2
1.1 踩别人没有踩过的坑,走别人没有走过的路2
1.2 一只小白成长为DBA的心路历程3
1.3 一个热衷于SQL优化的DBA成长经历3
第2章 数据库程序员的求职现状5
2.1 当前市场对于数据库程序员的需求如何?待遇如何?5
2.2 数据库程序员有哪些可供选择的职业发展道路?5
2.3 当企业在招聘时,对数据库程序员通常有何要求?5
2.4 数据库程序员的日常工作是什么?7
2.5 要想成为一名出色的数据库程序员,需要掌握哪些必备的知识?8
2.6 各类数据库求职及市场使用情况9
第3章 如何应对程序员面试笔试?12
3.1 如何巧妙地回答面试官的问题?12
3.2 如何回答技术性问题?12
3.3 如何回答非技术性问题?14
3.4 在被企业拒绝后是否可以再申请?15
3.5 如何应对自己不会回答的问题?15
3.6 如何应对面试官的“激将法”语言?15
3.7 如何处理与面试官持不同观点这个问题?16
3.8 什么是职场暗语?16
下篇 面试笔试技术攻克篇
第4章 数据库基础21
4.1 为什么使用数据库?21
4.2 数据库系统有哪几类数据模型结构?21
4.3 关系型数据库系统与文件系统有什么区别?22
4.4 数据库系统的组成与结构有哪些?23
4.5 数据库系统的主要特点有哪些?24
4.6 试述数据模型的概念、数据模型的作用、常用数据模型的分类和数据模型的三个要素25
4.7 数据库设计过程包括哪几个主要阶段?数据库结构的设计在生存期中的地位如何?26
4.8 范式27
4.8.1 第一、二、三、BC范式28
4.8.2 反范式31
4.9 关系型数据库完整性规则31
4.10 数据库的约束都有哪些?32
4.11 事务34
4.11.1 事务的概念及其4个特性是什么?34
4.11.2 事务的分类35
4.11.3 什么是XA事务?36
4.11.4 事务的4种隔离级别(Isolation Level)分别是什么?36
4.11.5 Oracle、MySQL和SQL Server中的事务隔离级别37
4.12 什么是CAP定理?38
4.13 什么是数据库系统的三级模式结构和二级映像?39
4.14 什么是数据库三级封锁协议?40
4.15 什么是两段锁协议?41
4.16 锁41
4.16.1 基础知识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 什么是存储过程?它有什么优点?53
4.17.2 存储过程和函数的区别是什么?54
4.18 触发器的作用、优缺点有哪些?54
4.19 什么是游标?如何知道游标已经到了最后?55
4.20 视图56
4.20.1 什么是视图?视图的作用是什么?56
4.20.2 在什么情况下可以对视图执行增加、删除、修改操作?56
4.20.3 Oracle中的视图57
4.21 SQL语句有哪些常见的分类?58
4.22 SQL语言的数据查询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部分练习题75
4.23 什么是SQL注入?79
4.24 索引79
4.24.1 索引的优缺点80
4.24.2 索引的分类81
4.24.3 聚集索引是什么?在哪些列上适合创建聚集索引?82
4.24.4 单列索引和复合索引83
4.24.5 函数索引84
4.24.6 位图索引84
4.24.7 分区索引85
4.24.8 什么是覆盖索引?87
4.24.9 虚拟索引88
4.24.10 不可见索引90
4.24.11 Oracle中的其他索引92
4.25 ER模型96
4.26 热备份和冷备份的区别是什么?99
4.27 数据字典的定义及作用有哪些?99
4.28 统一建模语言100
4.29 分布式数据库与并行数据库有何异同点?102
4.30 什么是OLAP和OLTP?102
4.31 数据库连接池是什么?103
4.32 数据库安全104
4.33 数据库系统设计题106
4.34 数据库基础部分其他真题解析112
第5章 Oracle数据库119
5.1 开发类常考知识点119
5.1.1 PL/SQL程序119
5.1.2 行列互换有哪些方法?121
5.1.3 如何删除表中重复的记录123
5.1.4 DELETE、DROP和TRUNCATE的区别是什么?123
5.1.5 NULL的注意事项124
5.1.6 如何判断一个存储过程是否正在运行?125
5.1.7 AUTHID CURRENT_USER的作用是什么?125
5.1.8 Oracle用户密码含特殊字符时如何登录?126
5.1.9 当DML语句中有一条数据报错时,如何让该DML语句继续执行?127
5.1.10 真题128
5.2 维护类常考知识点133
5.2.1 Oracle对象133
5.2.2 体系结构135
5.2.3 SQL优化相关147
5.2.4 Oracle性能相关157
5.2.5 会话168
5.2.6 高可用169
5.2.7 备份恢复177
5.2.8 建库、删库、网络184
第6章 MySQL数据库190
6.1 基础部分190
6.1.1 MySQL数据库有什么特点?190
6.1.2 MySQL的企业版和社区版的区别有哪些?191
6.1.3 在Linux下安装MySQL有哪几种方式?它们的优缺点各有哪些?191
6.1.4 如何确定MySQL是否处于运行状态?如何开启MySQL服务?191
6.1.5 如何创建和删除表?192
6.1.6 如何创建和删除数据库?195
6.1.7 如何查看数据库的版本、当前登录用户和当前的数据库名称?195
6.1.8 MySQL有哪些常用日期和时间函数?196
6.1.9 MySQL有哪些数据类型?197
6.1.10 真题200
6.2 维护部分203
6.2.1 MySQL中limit的作用是什么?203
6.2.2 如何查看和修改系统参数?203
6.2.3 MySQL有哪几类日志文件?205
6.2.4 MySQL支持事务吗?211
6.2.5 MySQL有几种存储引擎(表类型)?各自有什么区别?212
6.2.6 MySQL InnoDB引擎类型的表有哪两类表空间模式?它们各有什么优缺点?220
6.2.7 如何批量更改MySQL引擎?221
6.2.8 什么是间隙锁?222
6.2.9 MySQL有哪些命令可以查看锁?223
6.2.10 MySQL如何查看执行计划?执行计划中每列的含义分别是什么?227
6.2.11 MySQL原生支持的备份方式及种类有哪些?232
6.2.12 MySQL有哪几个默认数据库?235
6.2.13 MySQL区分大小写吗?236
6.2.14 MySQL中的字符集236
6.2.15 如何解决MySQL中文乱码问题?238
6.2.16 如何提高MySQL的安全性?239
6.2.17 如何对MySQL进行优化?240
6.2.18 什么是MySQL的复制(Replication)?244
6.2.19 profile的意义及使用场景245
6.2.20 Oracle和MySQL中的分组(GROUP BY)问题246
6.2.21 MySQL的分区表248
6.2.22 MySQL中的索引250
6.2.23 MySQL的CHECK、OPTIMIZE和ANALYZE的作用分别是什么?253
6.2.24 真题254
第7章 SQL Server数据库260
7.1 SQL Server有Linux版本吗?260
7.2 SQL Server如何查看版本?260
7.3 SQL Server 数据库如何启动?261
7.4 SQL Server有哪些默认的系统数据库?262
7.5 SQL Server物理文件有哪3种类型?263
7.6 SQL Serverr的哪类视图是可以更新的?263
7.7 SQL Server标准的SQL与TSQL的区别是什么?264
7.8 SQL Server采用什么方法可以保证数据的完整性?266
7.9 登录名、服务器角色、用户名和数据库角色266
7.10 SQL Server中的完全备份、差异备份和日志备份的区别是什么?267
7.10 SQL Server提供的3种恢复模型分别是什么?它们有什么区别?267
7.12 SQL Server数据库有哪3类触发器?268
7.13 真题269
7.13.1 简答题269
7.13.2 选择题270
第8章 其他数据库272
8.1 网状数据库与层次数据库273
8.2 关系型数据库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 内存数据库277
8.3 非关系型数据库(NoSQL)285
8.3.1 键值(KeyValue)数据库Redis286
8.3.2 键值(KeyValue)数据库Memcached287
8.3.3 文档型数据库MongoDB287
8.3.4 行存储和列存储289
8.4 时间序列数据库290
8.5 NewSQL291
8.6 区块链292
第9章 操作系统、网络和存储294
9.1 进程管理294
9.1.1 进程与线程有什么区别?294
9.1.2 内核线程和用户线程的区别295
9.2 内存管理295
9.2.1 内存管理有哪几种方式?295
9.2.2 什么是虚拟内存?296
9.2.3 什么是内存碎片?什么是内碎片?什么是外碎片296
9.2.4 虚拟地址、逻辑地址、线性地址、物理地址有什么区别?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的区别是什么?303
9.4 OS304
9.4.1 接触过哪些OS系统?常用命令有哪些?304
9.4.2 会写SHELL脚本吗?305
9.4.3 AIX系统下的LPar、逻辑CPU、虚拟CPU、物理CPU的含义分别是什么?306
9.4.4 NMON的作用是什么?312
9.4.5 Linux环境下/dev/shm目录的作用是什么?313
9.4.6 Linux下的常用设备有哪些?314
9.4.7 什么是YUM?如何配置本地YUM源?318
9.4.8 Linux下如何设置定时任务(crontab)?320
9.4.9 Linux文件的3种时间(mtime、atime、ctime)的区别是什么?322
9.5 网络323
9.5.1 TCP和UDP的区别有哪些?323
9.5.2 Ping命令是什么?323
9.5.3 常用的网络安全防护措施有哪些?324
9.5.4 交换机与路由器有什么区别?325
9.5.5 DNS的作用是什么?325
9.6 真题326
第10章 数据库程序员面试笔试真题库330
10.1 真题一330
10.2 真题二331
10.3 真题三332
10.4 真题一答案334
10.5 真题二答案334
10.6 真题三答案335
附录 336
推荐资料336