多系统的环境下,当用户一次登录获得所有系统的信任许可,而不用每个系统都需要单独登录。

登录 -> 服务器端生成token,将不同系统对应用户的token更新该token,并且设置为有效

客户端 -> 跳转不同的系统,带上该token获取系统间的信任

什么是事务?及其特性?

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

特性:

(1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态

(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,

(4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

简单理解:在事务里的操作,要么全部成功,要么全部失败。

数据完整性(Data Integrity)是指数据的精确(Accuracy) 和 可靠性(Reliability)。

包括:

(1)实体完整性:规定表的每一行在表中是惟一的实体。

(2)域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

(3)参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。

(4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

使用HTTP的POST方式,对固定参数+附加参数进行数字签名,使用的是md5加密。

比如:我想通过标题获取一个信息,在客户端使用 信息标题+日期+双方约定好的一个key通过md5加密生成一个签名(sign)。

然后作为参数传递到服务器端,服务器端使用同样的方法进行校验,如何接受过来的sign和我们通过算法算的值相同,证明是一个正常的接口请求,我们才会返回相应的接口数据。

封装性

也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。

继承性

就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类

多态性

子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。

数据层次

  • sql的优化,多次查询的尽量用一句sql来执行
  • 索引优化。表过大,重要搜索字段一定要加上索引,多字段要遵循最左原则
  • 数据库引擎:对于非重要数据表可以使用myisam数据表,而非innerdb
  • 反三范式设计,减少数据表的查询
  • 如果数据量确实过大,需要根据适当的算法考虑分表
  • 配置数据库的主从复制,读写分离。

代码层次

  • include_once比include更加耗时
  • 变量拼接比直接使用双引号快
  • 公共变量的定义如果变量值不变化,不要写再循环内
  • 静态函数要比成员函数快(不用new了,直接使用)
  • 如果处理的文案过大,正则会很影响行性能;
  • 尽量不要使用相对路径来包含文件,因为会基于当前目录去查找;
  • ===要快于==
  • && 要比and快,并且更不容易出问题(&& 运算级别高于and),类推。
  • 后端缓存
  • 对于常用数据,要用缓存存储。可以使用redis等,但是也要考虑内存的大小。具体取舍看具体项目
  • 前端
  • 服务器缓存:pagecache,
  • 客户端:基本常用数据存储到cookie,localstorage等不需要不同页面都要获取接口数据,对接口造成压力
  • 服务器层次
  • 硬件配置
  • 服务器尽量购买使用地区最近的服务器
  • 负载均衡,让多个服务器来分解压力
  1. 接口ip请求频次限制
  2. 登录,注册再适当的时候提供注册验证码(比如请求高,或者被攻击,或者同一个客户端频繁请求)
  3. 前端的数据永远都认为是不靠谱的,加入数据库需要做转义处理,防止sql注入
  4. 非代码数据要做转义处理后方可展示。比如非法的一些script语句
  5. 代码逻辑要谨慎,自测避免出现过大漏洞
  6. 线上必须屏蔽具体错误,避免暴漏重要信息