1、php面向对象(oop)五大原则
(1)、单利模式
每个类职责鲜明,不应有超出其本应有的功能,提高类的可读性,提高系统的可维护性
(2)、开放封闭原则
一个模块对于扩展开发,对于修改是封闭的
(3)、里氏替换原则
子类可以替换父类出现父类能够出现的如何地方
(4)、依赖倒置原则
是面向接口编程。上层模块不应该依赖于下层模块,应该依赖于接口。从而使得下层模块依赖于上层的接口,降低耦合 度,提高系统的弹性
(5)、单一原则
模块直接要通过抽象接口隔离开,而不是通过具体的类强耦合起来
2、php面向对象设计模式(*最好实际操作一下*)
php设计模式我常用单利模式和工厂模式
(1)、单一原则
单利模式是防止重复实例化对象,单利模式好处很大,比如说数据库操作,若不采用单利模式,当程序中出现大量数据库操作时,每次都要执行new操作,每次都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库链接都是对数据库的一种极大考验和浪费,如果使用单利模式,只需 要实例化一次,不需要每次都执行实例化操作,极大降低了资源耗费
(2)、工厂模式
工厂模式用于创建多种类型的多个实例对象,如果已经使用的类内部发生改变,那不需要在所有的地方都改变,只需要在类工厂类里改变即可。比如:链接数据库,可以使用mysqli、 pdo,根据不同参数配置使用不同的数据库操作类
3、面向对象的三大特征?
封装、继承、多态
封装就是把抽象的数据和对数据进行的操作封装到一个类中
继承可以让一个类型获取另外一个类型的属性的方法。
多态分为:
重写:子类拥有跟父类相同的方法,但实现的功能不一样
重载:
4、php为什么可以跨平台
因为php是一个解释性的脚本语言,每个平台都有对php解释器版本,只要php代码满足对应的解释器,也就是所说的跨平台
5、php的运行原理?
nginx把请求给fpm,php-fpm分配一个子进程去查询opcache缓存,如果没有缓存就通过zeng引擎来解析代码,形成缓存,
将查询到的数据返回给php-fpm,php-fpm返回给nginx
6、mysql怎么优化?(*不要光会说,也要懂得意思*)
(1)、添加适合的索引
(2)、表设计优化
(3)、Sql语句优化
(4)、慢查询优化
(5)、开启查询缓存
(6)、读写分离
(7)、分区分表
7、分表是怎么分的?
分表分为水平分表和垂直分表
水平是将一张数据较多的表取模分给多张表里
垂直分表是将一张字段较多表,将常用字段和不常用字段存储在不同的表中
8、分区类型有哪些?
Range 分区
Hash 分区
List 分区
子分区
9、分表和分区有什么区别?
分表是物理分割,分区是逻辑分割
分表是要创建多张表,分区是一张表
10、Mysql索引有哪几种类型?
普通索引
唯一索引
主键索引
联合(组合)索引
全文索引
11、索引为什么会影响mysql性能
虽然索引可以大大提高搜索的速度,同时会降低增删改的速度,因为不仅要保存数据,还要保存索引文件,这样的话会影响到mysql性能
12、Mysql什么是索引覆盖
覆盖索引是指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取
13、什么是Mysql事务,特性有哪些?
事务是必须满足4个条件:原子性、一致性、隔离性、持久性
原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节
一致性:在事务开始之前和事务结束之后,数据库的完整性没有配破坏
隔离性:事务隔离性分为不同级别,包括读未提交、读已提交、可重复读和串行化
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
14、什么是事务的隔离级别?
藏读就是指当一个事务正在访问数据,并且对数据进行了修改但这种修改还没提交的数据库中,这是,另一个事务也访问这个数据,然后使用了这个数据
不可重复读是指一个在数据库访问中,一个事务范围内有个相同的查询却返回了不同数据。
幻读与不可重复读有点相似,只是再访问二次事务之前做了一个新增,导致二次事务读取内容不相同,感觉出现幻觉
不断更新