├── MQ.md
├── Structure.md
├── .gitignore
├── Solution.md
├── NetAndOs.md
├── PHP.md
├── Mysql.md
├── Devops.md
├── README.md
└── Redis.md
/MQ.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Structure.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
--------------------------------------------------------------------------------
/Solution.md:
--------------------------------------------------------------------------------
1 | ### 方案解决问题来源于项目实际场景,能够给定场景进行整体方案设计是一个高级开发不可获取的能力
2 |
3 | ##### 日志系统设计
4 |
5 | #### 高并发系统设计
6 |
7 | #### 秒杀场景设计
8 |
9 |
--------------------------------------------------------------------------------
/NetAndOs.md:
--------------------------------------------------------------------------------
1 | ## 网络协议
2 |
3 | * 常见http状态码及含义
4 | * https协议,加密传输流程
5 | * 502和504的区别以及解决办法
6 | * TCP连接过程
7 | * TCP和UDP的区别和使用场景
8 | * TCP传输特点的实现,流量控制,超时重发,数据有序,数据校验
9 | * 网络协议七层和五分层模型
10 | * DNS解析过程
11 | * CDN的作用,和实现原理,如何强制更新
12 |
13 |
14 |
15 | ## 操作系统
16 | * 系统进程调度方式
17 | * 进程状态转换
18 | * 进程之间通讯方式
19 | * 进程创建和管理
20 | * 同步、异步、阻塞、非阻塞区别及几种常见的IO模型
21 | * 进程、线程、协程之间的区别
--------------------------------------------------------------------------------
/PHP.md:
--------------------------------------------------------------------------------
1 | ### PHP
2 | * 面对对象三大特性理解
3 | * PHP魔术方法及常见使用场景
4 | * PHP自动加载机制
5 | * Psr规范
6 | * yield 和 trait
7 | * 反射的作用和使用场景
8 | * PHP7,PHP8新特性
9 | * 垃圾回收机制及演变
10 | * PHP底层变量实现及数组结构
11 | * PHP运行机制
12 | * PHP几种运行模式及FastCgi原理
13 |
14 | ### 框架
15 |
16 | * 依赖注入
17 | * IOC容器
18 | * Laravel框架的生命周期
19 | * Laravel用到了哪些设计模式
20 | * 实现一个框架,需要考虑哪些东西
21 | * 中间件实现原理
22 | * 路由实现原理
23 | * 门面实现原理
--------------------------------------------------------------------------------
/Mysql.md:
--------------------------------------------------------------------------------
1 | #### Mysql是开源关系型数据库,系统相对复杂,是面试深度考察的一个环节,在大部分场景下应用程序的瓶颈和响应性能都和mysql有关。这就需要对mysql有深入的理解和实践,才能做好mysql优化,提升系统性能
2 |
3 | * Q: 数据库设计三范式、反范式的使用场景
4 | * Q: 关系型数据库和非关系型的区别
5 | * Q: mysql支持的常用数据类型有哪些,一般都使用于哪些场景
6 | * Q: varchar和char的区别,int(10)和int(4)的区别,
7 |
8 | * Q: 数据库常用内置函数
9 | A: 正常来讲非必要不使用mysql函数,对于整个应用来说,mysql成本高昂,服务压力大,使用函数会增加cpu计算
10 | 应尽可能的放到应用代码中处理
11 | * Q: 数据库常用的sql语句
12 |
13 | * Q:mysql主从复制是什么,为什么用主从复制,复制原理是什么
14 | * Q:读写分离有可能产生数据主从同步延迟,怎么查看主从延迟,主从延迟的原因有哪些,怎么解决
--------------------------------------------------------------------------------
/Devops.md:
--------------------------------------------------------------------------------
1 | 运维操作,服务中间件相关
2 |
3 | ### php-fpm
4 | * php-fpm运行交互流程
5 | * php-fpm参数调优
6 | * 常用命令、配置文件位置等
7 |
8 | ### nginx
9 | * nginx进程模型
10 | * nginx有哪些功能
11 | * 常用配置项参数调优
12 | * nginx和php-fpm两种交互作用模式及区别
13 | * nginx负载均衡策略优缺点
14 |
15 | ### 守护进程supervisor
16 | * 作用和原理
17 | * 配置项解释
18 | * 常用命令
19 |
20 | ### linux常用操作
21 | * 常用命令
22 | * 文件权限相关
23 | * 统计nginx 404个数
24 | * 动态查看日志
25 | * 查看进程状态
26 | * 动态查看资源消耗
27 | * 查看端口占用
28 | * 防火墙操作
29 | * 文本处理grep和sed
30 | * 关闭包含关键字进程
31 | * 定时任务管理以及参数含义
32 |
33 | ### git
34 | * git和svn的区别
35 | * git常用操作及命令
36 | * git操作规范和分支管理
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PHPSeniorInterview
2 | ### 全网最全最新的高级PHP面试题,由浅入深从底层到架构全方位分析讲解
3 | #### 欢迎各位大佬PR完善补充, 不限于试题、 答案及深入讲解
4 |
5 | ### 算法和设计模式
6 | * [PHP算法](https://learnku.com/articles/66907)
7 | * [PHP设计模式](https://learnku.com/articles/66974)
8 |
9 | ### [PHP基础](./PHP.md)
10 |
11 | ### [Mysql](./Mysql.md)
12 |
13 | ### [Redis](./Redis.md)
14 |
15 | ### [消息中间件](./MQ.md)(Kafka)
16 |
17 | ### [常驻进程框架](./Workframe.md)(Swoole)
18 |
19 | ### [微服务架构](./Structure.md)
20 |
21 | ### [场景方案设计](./Solution.md)
22 |
23 |
24 | ### [中间件运维](./Devops.md)
25 |
26 | ### [网络和系统](./NetAndOs.md)
27 |
28 |
29 |
30 | ### 个人观点
31 |
32 | 面试没必要写太多类似的中间件技能,应该深入其中一个原理和大致了解同类中间件的使用场景区别
33 |
--------------------------------------------------------------------------------
/Redis.md:
--------------------------------------------------------------------------------
1 | redis是非关系型数据库,常用于应用于数据缓存,减轻后端数据库压力
2 | * Q: redis常用的基本数据类型、常用命令、使用场景
3 | * 字符串类型 常用于k,v简单键值对缓存,简单计数器,分布式锁 set get
4 | * list类型 可以用于简单的队列处理, push压入队列,pop出队列, bpop阻塞式出队列
5 | * 有序集合 可以根据分值的大小做排行榜,以及延迟队列 在 Redis 可以使用有序集合(ZSet)的方式来实现延迟消息队列的,ZSet 有一个 Score 属性可以用来存储延迟执行的时间。 使用 zadd score1 value1 命令就可以一直往内存中生产消息。再利用 zrangebysocre 查询符合条件的所有待处理的任务, 通过循环执行队列任务即可。
6 | * 无序集合 集合运算,求交集可以获取共同好友,求并集可以去重
7 | * hash类型 缓存对象用户信息等
8 | * 位图 二值状态统计的场景,登陆状态,在线人数
9 | * HyperLogLog:不精准计数场景,uv统计,基数越大越精准
10 | * GEO:空间索引,存储地理位置信息的场景
11 | Stream(5.0新增):提供了可以消息的持久化,能分组消费,主备复制功能的消息队列
12 | * 布隆过滤器
13 | * Q: redis管道是什么,有什么作用
14 | * Q: redis事务有什么特点和使用场景
15 | * Q:redis实现队列有哪些方式,优缺点
16 | * Q: redis为什么这么快?
17 | * 内存操作,大部分命令的执行时间复杂度为O(1)
18 | * 单线程模型避免了线程切换的性能开销
19 | * IO多路复用机制,一个线程处理多个IO流,epoll模型
20 | * Q: redis和memcache的区别和各自使用场景
21 | 都是基于内存的数据库,常用作缓存,性能都很高,区别
22 | * memcache支持多线程,Redis6.0以前支持单线程
23 | * redis支持多种数据类型,memcached仅支持kv模式
24 | * redis可以持久化数据能保存到磁盘
25 | * redis原生支持集群模式,主从结构,memcached需要客户端hash一致化实现
26 | * Q: redis线程模型是怎么样的,redis6为啥引入多线程
27 | * Q: redis持久化的两种方式及区别
28 | * Q: redis过期删除模式
29 | * Q: redis内存满了自动缓存淘汰,淘汰策略有哪些
30 | * Q: redis如何配置淘汰策略
31 | * Q: LRU和LFU算法的区别
32 | * Q: 缓存更新策略有哪些缓存数据一致性问题怎么解决
33 | * Q: redis 大key问题是什么,怎么查找,怎么避免
34 | * Q: 缓存雪崩、击穿、穿透有什么区别,怎么避免,怎么解决
35 | * 缓存雪崩是短时间内大量缓存过期,请求都跑到数据库,造成数据库压力剧增甚至宕机, 1、缓存加上过期时间加个随机错位时间 2、设置缓存永不过期
36 | * 缓存击穿是某个热点key突然过期失效导致高并发访问数据库。1、使用互斥锁保证只有一个进程能够读取缓存并访问数据库加载缓存 2、不给热点数据设置过期时间,异步去更新热点缓存
37 | * 缓存穿透是用户访问的数据,既不在缓存中,也不在数据库中,这样就直接访问数据库了。1、如果是非法请求就限制 2、设置空值获取默认值 3、使用布隆过滤器,如果全部hash获取值都不存在那数据肯定不存在,就不读缓存也不读数据库
38 | * Q: redis如何实现相对靠谱的分布式锁
39 | * Q: redis集群的三种方式,各有什么优缺点
40 | * Q: redis cluster的实现原理
41 | * Q:哈希一致性原理是什么,解决了什么问题
42 | * Q:简单描述下redis数据类型对应的数据结构实现
--------------------------------------------------------------------------------