MySQL
数据库引擎
MyISAM,Innodb,Memory,Archive
mysql事务特点
原子性
一致性
隔离性
持久性
mysql安全
不相信用户输入,正则,限制长度,对单引号和算-转换
不可动态拼接sql
不要用管理员权限链接
字符串转义 mysqli_real_escape_string
addcslashes
优化
慢查询日志,设置需要优化的sql语句的执行时间,记录下超过该设置时间的语句,即为需要优化的语句
设计角度:存储引擎的选择,字段类型选择,范式
功能角度:可以利用mysql自身的特性,如索引,查询缓存,碎片整理,分区、分表等
sql语句的优化方面:尽量简化查询语句,能查询字段少就尽量少查询字段,优化分页语句、分组语句等。
部署大负载架构体系:数据库服务器单独出来,负载大时可以采用主从复制,读写分离机制进行设计
从硬件上升级数据库服务器
优化group by 语句
尽量避免模糊匹配,这样会导致全盘扫描
为了避免建议索引而造成索引文件过大,有时候我们会使用复合索引,这时候要遵循最左原则
索引
主键索引:数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。
普通索引:使用字段关键字建立的索引,主要是提高查询速度
唯一索引:字段数据是唯一的,数据内容里面能否为null,在一张表里面,是可以添加多个唯一索引。
全文索引:在比较老的版本中,只有myisam引擎支持全文索引,在innodb5.6后引擎也支持全文索引,在mysql中全文索引不支持中文。我们一般使用sphinx集合coreseek来实现中文的全文索引。
如何实现链式操作 $obj->w()->m()->d();
简单实现(关键通过做完操作后return $this;)
<?php
class Sql{
private $sql=array(“from”=>””,
“where”=>””,
“order”=>””,
“limit”=>””
);
public function from($tableName) {
$this->sql[“from”]=”FROM “.$tableName;
return $this;
}
public function where($_where=’1=1’) {
$this->sql[“where”]=”WHERE “.$_where;
return $this;
}
public function order($_order=’id DESC’) {
$this->sql[“order”]=”ORDER BY “.$_order;
return $this;
}
public function limit($_limit=’30’) {
$this->sql[“limit”]=”LIMIT 0,”.$_limit;
return $this;
}
public function select($_select='*') {<br /> return "SELECT ".$_select." ".(implode(" ",$this->sql));<br /> }<br />}<br /> <br />$sql =new Sql();<br />echo $sql->from("testTable")->where("id=1")->order("id DESC")->limit(10)->select();<br />//输出 SELECT * FROM testTable WHERE id=1 ORDER BY id DESC LIMIT 0,10
JWT安全
header 头部
payload 载荷
signature 加密签名
备注
api坚决不能依赖token作为唯一身份证明
csrf 防止令牌窃取
https 双向认证,双向加密,避免写入日志
token 唯一凭证
timestamp 有效时间
ip地址 防止截取后使用其他设备请求
mac地址
device_id 设备唯一id
修改密码,退出登录
其中一个条件改变jwt立即失效
面向对象
封装
继承
多态
设计模式
依赖注入
单例模式(重点)、工厂模式(重点)、观察者模式(重点)、依赖注入(重点)、装饰器模式、代理模式、组合模式
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承此类的子类调用。
private: 私有类型,只有在本类中使用。
abstract:修饰抽象方法,没有方法体,由继承该类的子类来实现。
interface 定义接口 用implements 实现类
final:PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。(因此final和abstract不能同时出现)
常见 HTTP 状态码
2xx成功:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受
3xx重定向:这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。
404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求
5xx服务器错误:表示服务器无法完成明显有效的请求。
Autoload、Composer 运行原理
https://www.yuque.com/baiyutang/tech/tvgpha
异常处理
PSR 是什么,PSR-1, 2, 4, 7
PSR-1—-基础编码规范
PSR-2—-编码风格规范
PSR-4—-自动加载规范
PSR-7—-HTTP 消息接口规范
redis
https://learnku.com/articles/46510 缓存穿透,失效,雪崩,数据不一致
redis 集群
算法
冒泡算法
缓存淘汰算法
服务器
linux
接口安全方面是怎么处理的
我们当时是这么做的,使用HTTP的POST方式,对固定参数+附加参数进行数字签名,使用的是md5加密,比如:我想通过标题获取一个信息,在客户端使用 信息标题+日期+双方约定好的一个key通过md5加密生成一个签名(sign),然后作为参数传递到服务器端,服务器端使用同样的方法进行校验,如何接受过来的sign和我们通过算法算的值相同,证明是一个正常的接口请求,我们才会返回相应的接口数据。
