数据库基础
1、char 和 varchar 的区别
2、int(20) 是什么意思
3、select 语句的执行顺序
4、什么是索引,mysql 的索引的底层实现
5、什么是事务?事务的四大特性
6、innodb 和 myiasm 的区别
7、什么是乐观锁和悲观锁
数据库进阶
1、事务隔离级别(什么是幻读、脏读、不可重复读)
2、mysql 的 redo log、undo log 及 binlog
3、innodb 和 myiasm 的锁的粒度
4、在多读和多写的场景中使用乐观锁还是悲观锁
5、binlog 的同步
缓存
1、redis 的主要数据类型(有序集是用什么数据结构实现的)
2、什么是缓存的雪崩、击穿和穿透,如何解决?
缓存进阶
1、分布式缓存的如何保证数据写入的均匀分布(延伸到一致性 hash )
2、redis 的分布式锁的实现
3、redis 的 数据持久化
4、redis cluster 和 redis sentinal 的原理
5、redis cluster 的伸缩
开放
1、你是如何优化服务的并发性能的?
2、后台请求超时严重,如何排查和定位?有哪些工具?有哪些可能的情况?
3、如何设计一个可靠的、分布式的奖品发放系统?如何限流?如何防止超卖?如何审计?如何降级?
Linux、网络、算法
进程间通信
软连和硬连
如何设置环境变量
查看进程占用端口
周期性执行某段脚本
epoll_wait(-1)优雅退出
TCP滑窗、 关闭缓存区后socket行为
有哪些重要系统日志需要关心 系统异常排查
Swap分区
Load Avg高问题排查
后台service进程常见启动方式
init进程
每行一个url, 统计文件url出现次数
超大的文件做搜索
free 实际使用内存和used为何对不上
端口转发以及限制访问ip段
watchdog工作机制
go
go基础:
1、 make、new区别?
2、引用类型有哪些? 如何实现深拷贝?
3、两个slice底层对应同一个array,修改一个另外一个会受影响吗?拷贝大slice一定比小的slice代价高吗?
4、for range遍历slice,对每个元素的修改会影响原slice吗?
5、线程、进程、协程区别?
6、channel是怎么实现的,channel没有close会怎么样?
7、go如何实现继承?如何实现单例?
8、如何检测死锁?
9、map是怎么实现的?(如何解决hash碰撞、惰性更新)
11、context包用过吗?有什么用?
12、了解过singlefly吗?它的使用场景?(或者从缓存穿透的场景引入,如一个key一秒钟被更新1000次,怎么优化代码?)
13、sync.Poool用过吗?(或者从短时间内创建大批量对象的场景引入)
进阶:
- 如何将一个任务拆成多个子任务并行执行?如何取得子任务返回值?如何处理子任务异常状态?
- 多生产者多消费者的channel如何优雅退出?
3. 有没有看过一些开源项目的源码? - 如何实现一个hashmap?线程安全怎么做?不用锁怎么实现线程安全的map?
- 高并发调用的方法,字符串参数传值还是引用更高效?(涉及到内存分配)
- 项目中使用了哪些RPC框架,能说说它的脉络吗?
** 1. 服务发现(AP和CP)**
** 2. 负载均衡(常见的算法,wrr等传统算法存在的问题?)**
** 3. 流量隔离(意义、怎么做)**
** 4. 优雅关停**
** 5. 健康检查**
** 6. 熔断限流** - GC是怎么实现的?(分布式三色标记,读写屏障, 协助线程 解决什么问题,大概的触发时机等等)
10、性能问题定位goprof - 如何实现一个log sdk(发布-消费者模式,IO缓冲,采样)?
9. 结合go net库,说说go的调度能力怎么与epoll结合(或者goroutine怎么和epoll结合,go原生库的 conn per goroutine 有什么问题,常见的reactor模式是怎么样的)
业务设计
- 订单系统(如何做幂等)
- feed流 (读写扩散)
- im (接入层,消息怎么不丢不重?)
- 服务高可用 (https://www.tapd.cn/51005639/markdown_wikis/show#1151005639001000580)
分布式
- 分布式事务
- 分布式一致性算法
- raft,假设一瞬间所有节点全部挂掉,重启之后,他们如何保证快速选出一个唯一的领导?
- 单leader的一致性算法有什么问题,怎么解决(一致性hash)
- 分布式锁怎么搞(如果用redis,过期时间怎么设置,怎么避免锁key过期,锁失效的问题)
- 分布式限流器设计
mysql
- innodb原理(b+树、undo log、 redo log)
- mysql如何实现高并发(各种锁+mvcc)
- 怎么定位慢查询
redis
- 主从复制(fork,写时复制,全量+增量)
- aof、rdb
- 跳表
- 布隆过滤器
kafka
- 基本用法、作用、大概描述一下架构
- 怎么保证消息不重不丢
- 为什么这么快
- 数据流并行
- 零拷贝
- 数据压缩
- 批量发送(进一步考察延迟队列的实现,多重时间轮)
- 日志落盘顺序IO
- 规避GC