PHP面试题-2020

1 数据库篇

1.1 事务

1.2 优化

1.2.1 SQL语句优化

  1. 避免硬删除,硬删除会导致索引改变
  2. SQL语句最左原则,写where语句时,压缩量最大的查询条件放左边
  3. 避免在where语句中使用!=或者<>操作符,会导致引擎放弃索引,全表查询
  4. 用关联语句代替 in 或者not in语句
  5. 对于连续的数值能用between就不用in
  6. 模糊查询,尽量避免使用%abc%,会导致全表扫描
  7. 不要使用select * from table, 用具体字段值代替
  8. 用union all替代union,因为union去重代价高,尽量放到程序中去重
  9. 如果想校验表里是否有某条记录,用exist比count(1)>0效率高

1.2.2 表结构优化

  1. 尽可能的用varchar代替char,因为变长字段存储空间小,查询效率高
  2. 尽量可能用not null填充数据库,因为对于char(100)字段来说,null也会占100字节空间

1.2.3 索引优化

  1. ORDER BY + LIMIT组合的索引优化
  2. WHERE + ORDER BY + LIMIT组合的索引优化
  3. WHERE + IN + ORDER BY + LIMIT组合的索引优化
  4. WHERE+ORDER BY多个栏位+LIMIT
    https://www.jianshu.com/p/06948343681b
    1.2.4 数据类型优化

1.3 锁

MySQL知识点

1.4 MySQL索引

https://www.jianshu.com/p/2530d1185778
主键索引

二级索引

联合索引

原则

  1. 最左前缀原则,一个联合索引有(a,b,c),如果有一个查询条件有a,有b则会用到此联合索引,如果查询条件是b,c则不会走索引
  2. 使用唯一索引,具有多个重复值的列,其索引效果最差,如sex列,对性能提升不高
  3. 不要过度索引,占磁盘空间,并降低写操作的性能
  4. 索引列不能参与计算,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’)
  5. 主键推荐用自增id,而不是uuid

区别
普通索引是最基本的索引类型,没有任何限制,值可以为空,仅加速查询。普通索引是可以重复的,一个表中可以有多个普通索引。主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;索引列的所有值都只能出现一次,即必须唯一。

1.5 MySQL缓存

原理
MySQL的查询缓存实质上是缓存SQL的hash值和该SQL的查询结果,如果执行相同的查询SQL,服务器直接从缓存中取结果,而不用执行去解析,优化等操作,大大提升了查询速度.
缺点

  1. 如果表的数据有一条变化,缓存结果不再有效,所以对于频繁更新数据的表不适用
  2. 缓存结果是通过对SQL的hash,得出的值key,查询结果为value存放的,这就意味着SQL必须完完全全一样,不能有大小写的差异

1.5 引擎区别

1.6 其他

MySQL主从复制

回表

2 计算机基础

2.1 协议

http
https
https与http区别

tcp/ip
tcpudp协议
tcp具体原理
tcp索引
udpselect poll epoll区别

2.2 线程与进程

定义
进程:程序的一次执行
线程:CPU的基本调度单位

进程和线程都是描述CPU工作的时间段,线程是更细小的时间段。
进程process:进程就是时间总和=执行环境切换时间+程序执行时间—>CPU加载执行环境->CPU执行程序->CPU保存执行环境
线程thread:线程也是时间总和=执行环境切换时间(共享进程的)+程序模块执行时间—>CPU加载执行环境(共享进程的)->CPU执行程序摸块->CPU保存执行环境(共享进程的)

线程与进程的区别
管道进程间通信

2.3 堆和栈

定义
区别

2.4 session与cookie

session
cookie
session 与 cookie 区别

3 缓存篇

3.1 redis 与 memcached

redis缓存
redis集群
redis持久化
redis复制过程手写算法
redis底层结构

3.2 区别

4 PHP 篇

PHP原理
PHP底层内核实现
PHP7与5的区别
如何传递变参
函数里如何访问全局变量
引用及指针的区别
yaf特性

5 框架篇

5.1 laravel框架

5.2 yii2 框架

5.3 tp框架

tp有哪些组件

6 Linux和nginx

linux命令
搜索文件前十行awk
top
nginx负载均衡
CDN加速

7 数据结构

7.1 设计模式

设计模式

7.2 进程与线程

7 数据结构篇

7.1 二叉树

二叉树镜像

二叉树遍历

广度遍历二叉树

平衡二叉树与满二叉树的区别

7.2 设计模式

单利模式
反转链表

7.3 数据结构

线性表
定义:零个活多个数据元素的有限序列
性质:数据元素可以为空;数据元素有限;数据元素类型相同;数据元素之间是线性结构,也就是一对一的关系

定义

斐波那契数列

7.4 排序

快速排序

冒泡排序

7.5 其他

递归

hash

8 实战

实时统计论坛在线人数
一次请求从用户发起到服务器都经历了哪些过程
手写代码遍历文件夹下的文件
读取文件做一个什么处理,如果文件很大怎么处理
手写建堆相关
手写单利模式
判断有环链表,有环链表如何判断开始的节点,有没有更高效的方法
手写sql语句
海量数据存储

9 补充

大佬面试总结
云计算 大数据 AI
Mysql limit 优化,百万至千万级快速分页 复合索引


喜欢做饭的PHP开发

大春儿
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!