[未完待续] 数据库相关岗位面试准备建议 - 珍藏级

2 minute read

背景

本文同时适合用人方、闯关应聘方。

注意通过面试问题,发掘小伙伴的极限。找准小伙伴层级定位。

类目

至少应该包含如下,每一项应该包含范围,考察目的,评判标准,不同等级的差异化,对应的深度、广度。

外围能力考察

操作系统

比如

  • 为什么有杀不掉的进程,什么原因?
  • 进程的几种状态? 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 学习计划》

Flag Counter

digoal’s 大量PostgreSQL文章入口