分享一下最近的面试题,都是大厂
前言
- 定位大概是中高级,这个阶段主要考察的是原理相关的东西,语法层面几乎不会问。
- 建议不要去背面试题,因为大部分问题都会追问,是不是理解了一问就问得出来。面试题只是帮助我们了解自己技术方面的缺陷,背几个面试题对自己没有任何帮助。
- 获取答案的方式在每个标题后面的括号里,都是书或者源代码,系统性补充知识最佳途径就是经典书籍和优质源代码,网上博客知识点过于零散,难以深入。redis和zend vm的核心代码强烈推荐大家去看一下,很有帮助
操作系统(《CSAPP》/《APUE》)
- IO多路复用是什么?有哪些api?
- select和epoll的区别?水平触发和边缘触发的区别是啥?使用的时候需要注意什么?
- epoll储存描述符的数据结构是什么?
- select有描述符限制吗?是多少?
- 进程/线程/协程区别?go和swoole的协程实现有啥区别?(分配资源的基本单位/运行和调度的基本单位/用户线程,M:N模型和N:1模型)
PHP(php源代码,主流php框架源代码)
- 描述一下cli模式下的几个生命周期?
- php-fpm运行机制?(master管理,worker 循环accept)
- php-fpm模式下,kill -9 master-pid,会怎么样?kill matser-pid呢?(信号机制)
- 内存分配流程?为什么要这么设计?
- GC的出现是为了解决什么问题?什么时候会触发GC?说下大概流程
- php里的数组是怎么实现的?(这里要注意下php5和php7实现的区别,优化了非常多)
- nginx和php-fpm的通信机制?fast-cgi和cgi区别?
- php-fpm创建worker进程的规则是什么?不同场景下怎么选择?
- php和mysql的通信机制?长链接和短链接啥区别?怎么实现的?连接池要怎么实现?
- swoole协程的原理?(遇到阻塞时引发php栈和c栈的切换,细节可以参考下我的文章)
- 依赖注入是什么?如何实现的?能解决什么问题?(代码层面不再依赖具体实现,解耦)
mysql(《高性能mysql》/《mysql技术内幕 innodb储存引擎》)
- innodb的索引组织方式?(聚簇索引必须要很清楚,注意innodb聚簇索引叶子结点保存的是完整数据,innodb普通索引叶子保存的是记录的主键,myisam索引叶子保存的是记录的位置/偏移量)
- B+树的结构和插入细节?为什么主键一般都要自增?和B树什么区别?为什么索引要使用B+树不是B树也不是其他的平衡树?为什么redis可以用跳表?(关键词:页的分裂,随机IO,缓存体系)
- 常见的优化(这里我就不展开了,主要考察覆盖索引查询和最左匹配,其实只要清楚innodb索引的结构,这些都不需要记忆,自然而然推导出来的)
- redolog/undolog/binlog的区别?binlog的几种格式?说下两阶段提交?
- 事务隔离级别和不同级别会出现的问题,innodb默认哪个级别?MVCC怎么实现的?快照读和当前读有啥区别?幻读的问题怎么解决?
- 死锁什么时候会出现?应用层应该怎么做避免死锁?mysql是怎么处理死锁的呢?
- int占多少字节?bigint呢?int(3)和int(11)有区别吗?可以往int(3)里存1亿吗?varchar最长多少?
- sql的执行流程(原始sql->词法语法分析生成AST->关系代数表达式(逻辑计划)->逻辑优化(谓词下推/常量传递)->物理查询优化(计算最佳cost路径,扫表还是使用索引,join算法)->执行,仅做参考)
redis(redis源代码)
- sds的结构是什么?为什么要存长度?跟c里的字符串有什么区别?(关键词:获取长度复杂度O(1)和O(n),二进制安全,保存\0,跟C库字符串函数可以通用)
- hash怎么实现的?怎么解决hash冲突?除了hashTable还有别的吗?
- zset怎么实现的?跳表是怎么插入的?为什么选择跳表不用其他平衡二叉树?除了跳表还有别的吗?
- rehash过程?会主动rehash吗?
- 用redis可以实现队列吗?有什么优点和缺点?
- 用redis怎么实现一个延时队列?
- rdb和aof过程?rdb为什么可以用创建子进程的方式进行?(这里考察一个cow)这两种持久化方式会丢数据吗?
- redis为什么快?(主要考察一个IO多路复用和单线程不加锁)
- 一致性哈希是什么?节点较少时数据分布不均匀怎么办?
- 简单说下几种key的淘汰策略,redis里的lru算法,什么时候会触发?实现细节是什么?怎么保证淘汰合理的key?
- lua脚本的作用是什么?
- 缓存击穿/穿透/雪崩的处理策略
nginx
- LVS和Nginx分别作用在osi哪一层?
- 负载均衡算法
数据结构
- 布隆过滤器,什么时候用?优点是什么?
算法
- leetcode easy级别的题目,具体我就不写了,难度比较低
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: