编程知识总结
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 将每个字符串首字母转大写<br>
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
调用当前类的静态方法<br>
static
可以动态绑定,调用最新类的方法
设计模式
单例模式
一个类只有一个实例
私有构造,克隆,静态属性 公开的实例化方法
工厂模式
简单工厂
由静态方法创建
工厂方法
提供一个创建对象实例的功能,由子类觉得实例化对象
抽象工厂
提供一个创建一系列或相互依赖对象的接口
观察者模式
门面模式
提供一个统一的接口,去访问多个子系统的不同接口
进阶
自动加载机制
__autoload
__aotuload由于是全局函数只能定义一次,不够灵活<br>
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锁表情况
修改列类型<br><br>删除PK<br><br>转换字符集<br><br>添加全文索引
优化
索引优化
索引不存储null值
重复值较多的列 例如枚举数据
违反最左原则
like '%xx'
联合索引 未包含第一列
order by
group by
or条件包含非索引项
索引列进行 运算/函数/类型转换
避免隐式类型转换
innodb count(*) where条件二级索引比主键查询快<br>主键与数据存储在一起 全表扫描较慢
查询优化
避免*查询,注意回表查询
子查询优化
子查询分解为多段查询,或者使用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 条评论
下一页
为你推荐
查看更多