1 数据库篇
1.1 事务
1.2 优化
1.2.1 SQL语句优化
避免硬删除,硬删除会导致索引改变
SQL语句最左原则,写where语句时,压缩量最大的查询条件放左边
避免在where语句中使用!=或者<>操作符,会导致引擎放弃索引,全表查询
用关联语句代替 in 或者not in语句
对于连续的数值能用between就不用in
模糊查询,尽量避免使用%abc%,会导致全表扫描
不要使用select * from table, 用具体字段值代替
用union all替代union,因为union去重代价高,尽量放到程序中去重
如果想校验表里是否有某条记录,用exist比count(1)>0效率高
1.2.2 表结构优化
尽可能的用varchar代替char,因为变长字段存储空间小,查询效率高
尽量可能用not null填充数据库,因为对于char(100)字段来说,null也会占100字节空间
1.2.3 索引优化
ORDER BY + LIMIT组合的索引优化
WHERE + ORDER BY + LIMIT组合的索引优化
WHERE + IN + ORDER BY + LIMIT组合的索引优化
1.3 锁
1.4 MySQL索引
二级索引
联合索引
原则
最左前缀原则,一个联合索引有(a,b,c),如果有一个查询条件有a,有b则会用到此联合索引,如果查询条件是b,c则不会走索引
使用唯一索引,具有多个重复值的列,其索引效果最差,如sex列,对性能提升不高
不要过度索引,占磁盘空间,并降低写操作的性能
索引列不能参与计算,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’)
主键推荐用自增id,而不是uuid
区别
普通索引是最基本的索引类型,没有任何限制,值可以为空,仅加速查询。普通索引是可以重复的,一个表中可以有多个普通索引。主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;索引列的所有值都只能出现一次,即必须唯一。
1.5 MySQL缓存
原理
MySQL的查询缓存实质上是缓存SQL的hash值和该SQL的查询结果,如果执行相同的查询SQL,服务器直接从缓存中取结果,而不用执行去解析,优化等操作,大大提升了查询速度.
缺点
如果表的数据有一条变化,缓存结果不再有效,所以对于频繁更新数据的表不适用
缓存结果是通过对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 补充
喜欢做饭的PHP开发