编程知识总结
2022-04-27 10:19:55 5 举报
AI智能生成
PHP总结
作者其他创作
大纲/内容
算法
时间复杂度
冒泡排序
重复遍历需要排序的数组,每次比较相邻两个元素,按照大小交换位置,直到遍历结束
快速排序
拟定一基数,通过循环,将比基数大的放置右边,小的放右边,通过递归继续筛选左右两个数组
十大排序
https://www.cnblogs.com/onepixel/articles/7674659.html
协议
http
明文传输,端口号是80
https
加密传输,端口443,需要ca证书,协议基于sll+http构建
tcp/ip
面向连接
三次握手/四次挥手
upd
无连接状态传输协议
http状态码
200
成功
3xx
重定向
4xx
403
服务端拒绝访问
404
没找到
5xx
500
服务器错误,一般就是bug
502
已到达网关,fpm执行超时或进程数不足
503
服务暂时不可用
504
Nginx超时,请求没有到fpm
服务器
nginx
PHP-fpm
FastCGi
Master
worker
worker
php
PHP基础
变量
变量类型
数组
字符串
对象
布尔
资源
null
变量传值和引用传值
字符串函数
trim去除两边空格
ltrim,rtrim
字符转义
htmlspecialchars,htmllentities
字符匹配
大小写转换
strtoupper大写
strtolower小写
ucwords 将每个字符串首字母转大写
ucfirst首字母转大写
字符操作
strstr(字符串,匹配的字符串) 返回符合匹配的部分
substr(字符串,开始位置,字符串长度)
mb_substr(str,start,len,编码)中文字符串截取
str_replace(要替换的内容,需要替换的字符串,原字符串)
explode(分隔符,字符串) 分割字符串为数组
implode(分隔符,数组)/join 分割数组为字符串
chr() 字符串转换ASCII码
echo() 输出字符串
md5()、md5_file() MD5加密
数组函数
数组排序
sort 按照数组值升序 rsort降序
ksort 对关联数组按照值升序 krsort降序
asort 对关联数组 按照key名升序 arsort降序
usort自定义函数排序
数组操作
array_sum 求和
array_merge合并数组
注意merge与+的区别
array_map自定义函数操作数组每个单元
array_rand随机取数组
array_diff取差集
array_unique数组去重
array_flip 反转数组 重复值取最后一个
正则表达式
preg_match执行表达式,返回命中次数
preg_replace
/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/
文件引用
include,include_once
require,require_once
对象
概念
一种编程范式
特性
封装,继承,多态
抽象类 abstract
类名定义 abstract class A
继承使用extend
抽象类方法 abstract public function say();
方法最少有一个抽象方法,可以带参数
子类必须实现该方法
子类方法可见性必须大于或等于抽象方法的定义
接口类 interface
类名定义 interface
继承使用implements
接口方法
function func1();
子类必须使用所有 接口方法
接口 可以使用多继承
全部方法都为抽象方法,方法可见性为public
可以定义常量
多继承Traits
魔术方法
__construct 构造函数
__destruct 析构函数
__get,__set 读取,设置属性
__call,__staticcall 调用方法/静态方法
__clone 克隆
类引用
this
调用非静态属性
self
调用当前类的静态方法
static
可以动态绑定,调用最新类的方法
设计模式
单例模式
一个类只有一个实例
私有构造,克隆,静态属性 公开的实例化方法
工厂模式
简单工厂
由静态方法创建
工厂方法
提供一个创建对象实例的功能,由子类觉得实例化对象
抽象工厂
提供一个创建一系列或相互依赖对象的接口
观察者模式
门面模式
提供一个统一的接口,去访问多个子系统的不同接口
进阶
自动加载机制
__autoload
__aotuload由于是全局函数只能定义一次,不够灵活
spl_autoload_register
可以按需多次写spl_autoload_register注册加载函数
垃圾回收机制
GC机制
zval变量容器
普通变量
变量名称
变量值
is_ref
是否使用的 &取地址符强制引用
引用计数ref_count
引用该变量的数量,当为零时进行销毁
复合类型变量(数组和对象)
is_ref
是否使用的 &取地址符强制引用
引用计数ref_count
引用该变量的数量,当为零时进行销毁
变量
根缓存区
ref_count 减少后仍大于0,很可能是一个垃圾,将放入缓存区
缓存区达到临界点时,回收算法会循环遍历缓存区所有zval,判断是否是垃圾,并清理.可以使用gc_collect_cycles 强制回收垃圾
引擎
缓存区
map结构?
高并发优化
数据库优化
PHP优化
字符串使用单引号
页面静态化
异步处理任务
Redis缓存
图片,视频,大文件 单独存储
服务器分布式集群
执行过程
初始化,启动zend引擎,加载注册模块
读取脚本文件,zend引擎进行词法(lex)/语法(bison)分析,生成语法树
Zend引擎编译语法树,生成opcode
Zend引擎执行opcode,return 结果
laravel
IOC控制反转
mysql
索引
索引虽然提升查询效率,同时会降低更新表的速度
索引类型
主键索引
不允许null值
唯一索引
唯一可为空
普通索引
联合索引
只有查询条件使用第一个字段才会使用,遵循最左原则
全文索引
索引结构
B+树
树形结构,非叶子节点不存储数据,叶子节点存储完整数据
聚簇
非叶子节点存储的索引,叶子节点存储索引及完整数据,顺序存储
非聚簇
innodb叶子节点存储的是主键的值
myisam叶子节点存储的是数据的指针地址
hash
通过hash算法匹配到数据地址
制定查询效率高
不支持范围查找,like查询,不遵循最左原则
存储引擎
myisam
支持表锁,不支持事务,支持全文索引,非聚簇索引
innodb
支持表/行锁,查询条件未命中索引时会锁表
支持事务
聚簇索引
mvcc多版本并发控制
事务
事务的特性
原子性
要么全部成功,要么全部回滚失败
一致性
事务前后的数据必须一致性
隔离性
即多个事务之间不能被干扰,多个事务要相互隔离
持久性
即事务提交后,数据的改变是永久性的
事务隔离级别
产生的影响
脏读
事务A读取到事务B未提交的数据
幻读
事务A变更数据时,事务B插入或修改提交事务,造成有数据未修复的现象 成为幻读
不可重复读
一个事务多次读取,查询到的数据不一致
隔离级别
读未提交
数据已更改,但未提交,基于排他写锁,不排除读锁。会造成脏读
读已提交/不可重复度
允许其他事务读写,会造成不可重复读。事务A读取,事务B更新并提交,事务A再次读取,发现数据已改变
可重复读
mysql默认的事务隔离级别 确保了多个事务互不影响,保持事务的隔离性
串行化
事务隔离级别最高的一种,读写多进程都会产生阻塞
mvcc多版本并发控制
用来解决读-写冲突的无锁并发控制
隐式字段
事务ID
回滚指针(上一版本)
隐式主键
flag字段
读试图
事务开启时,进行快照读时,对该记录创建一个读试图,并维护当前活跃事务的id
即当前事务ID,会通过活跃事务列表比对,如不符合可见性,会通过回滚指针查询当前事务之前最新的老版本数据
快照读
即普通的select查询,基于undo log+mvcc实现,读取的是数据的最新可见版本
当前读
读取的最新数据,并对当前记录枷锁,阻塞其他进程
二阶段提交?
red log?
锁
行锁
innodb查询命中索引时会触发行锁,锁定某一行或者某几行或某个范围
行锁模式
读锁/共享锁
共享读锁,不阻塞读,但不能修改,同一时间可同时有多个事务加锁
写锁/排它锁
只能当前事务读写,其他事务不可读写,同一时间只能一个事务加锁
读写意向锁
意向锁是在加读写锁之前加上意向锁
行锁的类型
记录锁/Record Lock
记录锁是最简单的行锁,未命中索引会将全表加记录锁
间隙锁/Gap Lock
封锁索引记录中的间隔
临键锁/Next-key Locks
是记录锁与间隙锁的组合,它的封锁范围,既包含索引记录,又包含索引区间
表锁
DDL操作也会触发表锁
DDL锁表情况
修改列类型
删除PK
转换字符集
添加全文索引
删除PK
转换字符集
添加全文索引
优化
索引优化
索引不存储null值
重复值较多的列 例如枚举数据
违反最左原则
like '%xx'
联合索引 未包含第一列
order by
group by
or条件包含非索引项
索引列进行 运算/函数/类型转换
避免隐式类型转换
innodb count(*) where条件二级索引比主键查询快
主键与数据存储在一起 全表扫描较慢
主键与数据存储在一起 全表扫描较慢
查询优化
避免*查询,注意回表查询
子查询优化
子查询分解为多段查询,或者使用join
子查询避免使用<> in not in null和函数运算
explain
type
查询类型
all全表扫描
index遍历索引树
range范围查询
possible_keys
可能会使用的索引
key
使用的索引 必然在possible_keys中
extra
use index非回表查询
use where 回表查询
利用小表驱动大表
主从/读写分离
分区分表
redis
Redis数据类型
string
列表
有序集合
无序集合
hash
缓存问题
缓存穿透
缓存不存在,热点数据多次请求数据库,导致负载过高
设置集合存储空key
缓存雪崩
大量缓存某一时间失效,造成后端压力猛增
缓存时效范围随机
缓存击穿
某一时间,某个热点缓存失效,造成后端压力
缓存失效,查询期间 加锁处理
分布式锁实现机制
0 条评论
下一页