1

数据结构和算法

二分查找算法

  • 数据有序排列
  • 可比较的
  • 将数据一分为二,从中间对比

时间复杂度

  • 对数

概念

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进行权重排序

并发

线程数据安全

  1. (库存你记录场景)数据库记录number字段加unsigned,避免写入复数,数据库逻辑捕捉异常,出现异常回滚。
  2. 悲观锁思路

    • 数据库行级锁
    • 文件锁、redis锁
  3. 乐观锁思路

    • redis watch
  4. 队列

高并发

  1. 流量优化

    • 防盗链优化,祛除恶意请求
  2. 前端优化

    • 静态文件合并
    • 异步请求
    • 浏览器缓存、文件压缩
    • CDN加速,独立静态文件服务器
  3. 后端优化

    • 页面静态化
    • 队列
    • OP cache
    • 数据缓存
  4. 数据库

    • 数据库缓存
    • 分库分表分区
    • 读写分离
    • 负载均衡
  5. 服务器

    • nginx反向代理

Terry
290 声望2 粉丝

此心安处是吾乡