[未完待续] 数据库相关岗位面试准备建议 - 珍藏级
背景
本文同时适合用人方、闯关应聘方。
注意通过面试问题,发掘小伙伴的极限。找准小伙伴层级定位。
类目
至少应该包含如下,每一项应该包含范围,考察目的,评判标准,不同等级的差异化,对应的深度、广度。
外围能力考察
操作系统
比如
- 为什么有杀不掉的进程,什么原因?
- 进程的几种状态? 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 学习计划》