数据库岗位面试指南
今天19:30直播话题:
DBA未来的发展与自我革命,盼望
老司机们的加入!
文章中的参考文档请点击 阅读原文 获得.
这是1篇2018年写的: 数据库岗位面试指南, 有点老师,但是还有一定的参考价值
背景
本文同时适合用人方、闯关应聘方。
注意通过面试问题,发掘小伙伴的极限。找准小伙伴层级定位。
类目
至少应该包含如下,每一项应该包含范围,考察目的,评判标准,不同等级的差异化,对应的深度、广度。
外围能力考察
操作系统
比如
-
为什么有杀不掉的进程,什么原因? -
进程的几种状态? D状态是什么原因造成的?Z状态是什么原因造成的? -
如果进程HANG住,如何排查?pstack , gdb -
增加数据库并发,数据库性能并没有线性提升,通常可能的原因有哪些?如何排查?strace, ptrace, perf, oprofile -
cgroup 可以做哪些隔离, -
Linux下面有哪些虚拟技术,他们的差异。 -
进程、线程间通信技术 -
进程、线程、协程。
存储
比如
-
传统文件系统 -
卷管理 -
INODE -
分布式文件系统 -
DIO与BUFFERIO -
如何测试存储性能 -
fadvise
网络
比如
-
网络协议 -
如何排查网络问题 -
如何测试网络性能
数据库能力考察
1 协议
-
消息格式 -
数据库认证过程 ,如何做到认证过程中密码防窃取。 -
流复制协议 -
逻辑复制协议
2 启动过程
-
数据库正常、异常启动过程 -
解释数据库SQL处理过程 -
checkpoint 机制 , 调度算法
3 备份与恢复
-
REDO的数据结构 -
一致性逻辑备份的原理 -
一致性并行逻辑备份的原理 -
逻辑备份的增量备份原理 -
物理备份 -
物理备份增量备份的原理 -
逻辑恢复的原理,如何并行恢复,为什么需要收集统计信息 -
如何加速逻辑恢复 -
物理备份的PIRT原理 -
物理增量备份的恢复原理 -
物理恢复什么时候算是一致性位点
4 进程结构
-
数据库有哪些进程,分别负责什么工作 -
PG后台进程的IPC机制
5 物理结构
-
数据库的数据文件结构,PAGE结构,TUPLE结构,不同索引接口的索引内部结构
6 优化器
-
cbo与rbo的差异 -
CBO的依据是? -
数据库如何创建执行计划 -
plan tree的结构,node的输入输出,如何评估选择性,如何评估成本,影响成本评估的因素,影响选择性评估的因素 -
SQL REWRITE -
哪些情况下可以有SQL REWRITE,为什么需要sql rewrite -
统计信息收集调度 -
实例级参数,表级参数,如何调度,调度算法,worker,launcher唤醒算法等。 -
统计信息包含哪些要素 -
行数,页数,高频词,柱状图,相关性,唯一值比例,空值比例,平均长度,。。。要素有什么用? -
多值列的统计信息 -
多列组合统计信息 -
为什么需要多列统计,多列统计包含哪些信息(唯一值,线性相关性,选择性),这些要素对优化器有什么用(多列条件时提高选择性,为什么?) -
成本计算方法 -
各种NODE的成本计算方法,全表,索引扫,位图扫,索引ONLY扫,表达式,。。。。。。 -
成本计算 算子 -
至少介绍几种算子,以及作用,seq, random, cpu, ops, effective cache, parallel tupel, index setup..... -
数据选择性计算方法 (行数估算) -
如何估算行数 -
数据库有哪些扫描方法,它们的扫描细节: -
(seq, index, index only, bitmap index scan) -
Ora:SKIP INDEX SCAN -
filter, recheck 的区别,为什么会出现 -
数据库有哪些JOIN方法,分别适合什么场景,有什么约束,优化器如何选择使用什么方法,影响优化器选择的因素有哪些,以及每一种的JOIN原理 -
bloom filter在优化器中的应用有哪些 -
多表JOIN顺序的选择原理 -
遗传TSP算法
7 SQL规则与触发器
-
RULE -
RULE在什么时候被触发,什么时候不被触发,RULE有什么用 -
触发器, -
多个触发器时,触发的顺序,如何传递参数,如何传递结果 -
before, after, row, statement的区别 -
BATCH触发的好处,如何使用BATCH -
事件触发器 -
哪些场景可以使用EVENT TRIGGER,他们的原理
8 HOOK
-
数据库有哪些HOOK -
哪些插件使用了HOOK -
HOOK有什么用,如何使用
9 三态
-
函数三态知识 -
三态与MVCC的关系 -
三态在PS中的异同 -
优化器如何考虑三态 -
索引扫描与三态 -
表达式索引与三态
10 索引
-
数据库有哪些索引接口(btree,hash,gin,gist,spgist,rum,brin,bloom,bitmap ...) -
分别适应什么场景(从数据分布、读写请求角度); -
数据写入时的UNDO、表、索引操作流程; -
数据更新、删除时的UNDO、表、索引操作流程; -
UK约束的操作流程。 -
索引分裂。 -
BTREE的链表结构 -
HASH索引的内部结构 -
GIN索引的结构 -
当表上面有很多索引时,会有什么问题,如何优化,内核层面有什么优化方法 -
多个字段都可以走索引时,优化器如何做出选择,bitmap scan的原理 -
多字段复合索引的字段顺序选择规则,解释清楚原理
11 约束
-
有哪些约束(check, fk, uk, pk, not null, exclusive constraint) -
每一种约束作用
12 存储结构
-
数据库有哪些索引接口:存储结构如何(meta, root, ...); -
FSM,VM结构,insert时如何找到适当的BLOCK,如何避免并发INSERT时插入同一个BLOCK带来的热点 -
HEAP的数据文件结构、BLOCK结构、TUPLE结构 -
行存储与列存储,以及适应的场景,不适应的场景 -
列存储有哪些内核层面的优化手段 -
分布式数据库的数据倾斜原因,解法 -
分布式数据库的查询倾斜原因,解法 -
Ora聚集表的存储结构,应用场景,缺点(不适合的场景)
13 类型
-
数据库里面有哪些数据类型,分布适合什么业务场景 -
不同数据类型有一些什么样的操作 -
如何自定义类型
14 SQL语法
-
CRUD -
CTE -
递归 -
SKIP LOCK -
MERGE -
CUBE -
行列变换 -
异步消息 -
事务,子事务 -
2PC -
会话memcontext -
SRF -
聚合 -
窗口 -
如何自定义聚合 -
聚合计算原理 -
并行聚合计算原理 -
哪些操作可能rewrite table, 如何避免
15 如何排错
-
如何定位错误源代码 -
如何上报BUG -
有哪些可以寻求帮助的途径,网站
16 运行信息
-
有哪些运行信息值得关注 -
有哪些跟踪开关 -
有哪些开发者开关 -
源代码中有哪些编译开关可被设置,在哪里设置 -
当前运行信息 -
历史运行信息 -
TOP -
等待事件 -
等待 -
系统层PROFILE -
审计
17 问题诊断思路
18 垃圾回收
-
Ora,UNDO原理 -
PG,多版本原理 -
PG 新存储引擎zheap -
垃圾回收原理,相关参数 -
FREEZE的原理,相关参数
19 并行
-
如何并行创建索引,原理。 -
数据库支持哪些并行计算,介绍并行计算的原理,优化器对并行度的计算原理。 -
如何控制并行度 -
join 并行的原理 (分别介绍 hash, mrege, nestloop) -
并行seq scan原理 -
并行索引扫描原理 -
并行排序的原理 -
分区表并行JOIN,GROUP原理 -
并行GROUP原理 -
多阶段并行聚合的原理
20 排序
-
排序算法 -
非完全索引排序优化原理
21 锁和并发控制
-
有一些什么锁 -
锁的冲突 -
事务隔离级别 -
MVCC机制 -
2PC的过程 -
垃圾回收与事务的关系 -
为什么需要SNAPSHOT TOO OLD -
UNDO机制 -
什么情况下可能出现雪崩,如何防止雪崩 -
分布式数据库的分布式死锁检测机制 -
分布死锁数据库的快照,并发控制,隔离实现原理 -
分布式数据库的全局一致性备份,恢复
22 流复制
-
流复制的机制 -
冲突检测机制 -
如果备库开启FEED BACK对主库有什么伤害 -
同步复制机制的堵塞机制 -
如何降低延迟 -
如何避免主备断开后需要重搭 -
如何做到数据传输安全 -
如何降低跨域数据传输延迟
23 应用场景
-
递归查询的应用场景介绍 -
分页的使用和优化 -
如何优化任意字段组合查询 -
如何优化 混合 普通类型、数组、多值列、JSON、空间、时间 等多种搜索过滤需求同时出现 的场景 -
如何优化模糊查询、全文检索、相似查询 -
如何优化kv, hstore, json, array, tsvector的搜索 -
如何优化时序数据的搜索、插入 (schema less (以及为什么需要schema less)。BRIN的内核优化,range 分段。 ) -
IOT场景有什么特点,数据库如何支撑。 -
如何分析相似轨迹,时态数据查询如何优化。 -
TP、AP、流、图、时序、空间、搜索、系统架构设计。 -
这几类场景,分别用到数据库的什么特性。 -
空间数据 -
空间数据有一些什么类型。矢量(点、线、面、点云、轨迹)、栅格。 -
哪些场景会用到空间数据,怎么使用。 -
空间数据如何构建索引,讲讲索引结构。 -
时空数据,多维度查询,如何构建索引。 -
大型空间数据的处理,搜索。 -
数据路由问题。 -
1到多的送餐路径规划。 -
多到多的路径规划。 -
开发类型、UDF、操作符、索引对接。
24 架构
-
NOSQL, 缓存, 关系数据库, OLAP等产品, 如何结合使用 -
为什么业务要限流开关 -
如何设计限流 -
数据生态包含哪些东西
25 监控与日常维护
-
数据库哪些指标需要被监控,为什么,如何发现问题。 -
长事务有什么问题? -
从垃圾回收的角度,解释垃圾回收原理,判定 -
如果能提出改进思路更好 -
延迟VACUUM有什么问题 -
备库开启FEED BACK有什么问题
26 数据库可靠性
-
如何保证数据的可靠性 -
如何保证数据的一致性 -
如何保证数据的原子性 -
闪回 -
闪回有哪些操作归类 -
如何设计闪回,针对不同的操作,应该如何闪回 -
容灾 -
如何设计容灾系统。 -
如何定义0丢失。 -
如何设计0丢失的数据库集群。 -
多副本 -
解释一下多副本的原理
27 数据库可用性
-
可用性与可靠性如何兼得
28 数据库安全
-
安全系统设计 -
安全分层,每一层如何设计 -
审计系统设计
29 硬件评估与规划
-
如何评估需要多少硬件。
30 版本升级与数据迁移、同步
-
小版本升级 -
大版本升级 -
同构数据迁移 -
同构数据同步 -
异构数据迁移 -
异构数据同步
31 社区动态
经常关注
32 Oracle兼容性相关
33 PG开源生态
34 PG的缺陷和优势
-
缺陷 -
优势 -
ROADMAP -
你有什么想法
35 对PG软件本身有什么想法,建议,TODO
36 对PG社区的发展有什么想法,建议,TODO
37 对分布式数据库,RAC,AURORA架构的理解
38 思考
-
为什么需要设计REDO,有没有想过持久化存储与内存性能齐平后的全新架构 -
wal writer 机制,如何设计并行wal writer -
运维DBA和开发DBA的区别? -
如何进行数据库选型 -
市面上有哪几类数据产品,分别适应什么场景,设计上有什么软肋,不适应什么场景. db-engine -
紧急情况处理、 -
问题诊断思路、 -
逻辑复制需要注意什么东西? -
如何设计BENCHMARK。 -
为什么喜欢搞数据库? -
经常上什么技术网站? -
遇到问题通常如何应对? -
工作经历,总结,反思,改变。
CODING能力考察
岗位等级划分标准
主要发掘小伙伴什么方面的能力
基本功
经验
上进心
学习能力
品格
应变能力
抗压能力
稳定性
理想
格局、蓝图
执行力
心态
...
招聘直通车
阿里云PostgreSQL岗位:
《Oracle DBA 增值 PostgreSQL,Greenplum 学习计划》
本期彩蛋-招商中,有需要的小伙伴可联系嵌入...
文章中的参考文档请点击 阅读原文 获得.
欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路. 近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号: