数据结构和算法
二分查找算法
- 数据有序排列
- 可比较的
- 将数据一分为二,从中间对比
时间复杂度
- 对数
概念
php的核心数据结构hash table(散列表)特点:
- 支持k->v查询
- 可当做数组
- foreach线性遍历
- 添加和删除节点的是O(1)复杂度
- key支持关联和索引数组
- value支持混合类型
php四层体系
application
- webserver cli etc
SAPI
- apache2handler cgi fast-cgi isapi cli
- PHP
- Zend API
- Zend Engine
opcode优化
- 扫描
- 转义
- 解释为opcode
- 执行
PHP 7 新特性
- 太空操作符
- 标量类型与返回值类型声明
- NULL合并运算
- 常量数组
- 匿名类
- Closure::call()
- 过滤 unserialize()
http 三次握手四次挥手
建立连接
- 客户端发送带有syn的tcp报文至服务端
- 服务端接收报名并返回syn和ack的标示
- 客户端返回ack
断开连接
- 客户端发送fin报文
- 服务端发送ack表示已接收到
- 服务端发送fin报文,通知断开
- 客户端发送ack报文
tcp与udp的区别
tcp
- 面向连接、两端建立连接时需要进行确认
- 数据传输更加可靠
- 数据传输效率低
udp
- 面向非连接
- 数据传输快
- 数据传输不可靠
框架
laravel的设计模式
- 工厂模式 函数封装、统一入口实例化对象、构建工程降耦
- 单例模式 不重复创建对象,节省资源
- 注册树模式 数组结构存储对象,工厂实例化的对象保存在注册树,调用注册树的对象使用
- 策略模式 定义接口、不同的策略调用不同的逻辑
- 适配器模式 多种不同的逻辑调用统一的适配器
- 数据对象映射模式 ORM
- 观察者模式 对象发生改变,监听它的对象全部会收到通知并更新
laravel 生命周期
index.php 入口
- bootstarp
http/console 内核
- errors
- middleware
- session
- log
- config
- environment
- ...
- providers
- route
MySQL
数据结构
- 二叉树
- 红黑二叉树
- B树 叶子节点存储的是数据
- B+数 B+树的每一个叶子节点存储的是索引和下一个节点的指针
优化方案
- 合适的数据类型
- 优化配置合适的长度
- 定长字符串代替变长字符串
- not null省去匹配null值
- join代替 sub query
- union代替临时表
- 事务
优化sql
- 匹配相同的字符类型
- 避免自动转换导致索引失效
- 避免sql中使用函数
- 慢查询日志
- 索引
- explain分析sql
- profile分析sql耗时记录
- limit 1
范式
- 字段原子性,不可再拆分
- 主键依赖
- 确保每列都和主键列直接相关,而不是间接相关
事务
- 原子性 一个事务要么成功要么失败
- 持久性 事务结束的影响时永久性的
- 隔离性 通过事务的隔离级别对应不同的并发场景
- 一致性 事务开始的前后数据库完整性没有破坏
隔离级别
- Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
- Repeatable read (可重复读):可避免脏读、不可重复读的发生。
- Read committed (读已提交):可避免脏读的发生。
- Read uncommitted (读未提交):最低级别,任何情况都无法保证。
MyISAM与InnoDB
InnoDB
- 支持外键约束
- 聚集索引
- 支持事务
- 行级锁
- 聚集索引 索引储存的是行数据,触发辅助索引返回的是主键,再通过主键获取数据
- 索引与数据保存在同一个为念.idb
MyISAM
- 保存行数,count聚合效率高
- 支持全文索引
- 查询效率优
- 非聚集索引 索引储存的是数据行的地址,通过地址获取行,辅助所以和主键索引是分离的
- 索引保存在.myi,数据保存在.myd
NoSQL
redis数据类型、应用场景
- string 单个元素的值最大512MB的数据容量,适合用户应用的数据缓存,统计计数等功能
- hash 存储、读取复杂对象的数据
- list 增删快,适合消息队列
- set 数据唯一性、curd操作的时间复杂度为O(1)
- sorted set 带权重的消息队列、与set相比每个数据多了一个score进行权重排序
并发
线程数据安全
- (库存你记录场景)数据库记录number字段加unsigned,避免写入复数,数据库逻辑捕捉异常,出现异常回滚。
悲观锁思路
- 数据库行级锁
- 文件锁、redis锁
乐观锁思路
- redis watch
- 队列
高并发
流量优化
- 防盗链优化,祛除恶意请求
前端优化
- 静态文件合并
- 异步请求
- 浏览器缓存、文件压缩
- CDN加速,独立静态文件服务器
后端优化
- 页面静态化
- 队列
- OP cache
- 数据缓存
数据库
- 数据库缓存
- 分库分表分区
- 读写分离
- 负载均衡
服务器
- nginx反向代理
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。