├── 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数据类型对应的数据结构实现
--------------------------------------------------------------------------------