2021最新面试题php
1.php传值与传引用的区别? 答:传值在函数范围内改变变量值的大小不会影响函数外的变量值; 传引用在函数范围内改变变量的大小在函数外也会有所体现,因为传引用传的是内存地址。 2.说几个常用的数组函数? 答:array_merge($arr1,$arr2)合并两个数组; array_intersect($arr1,$arr2)获取两个数组的交集; array_diff($arr1,$arr2) 获取两个数组的差集; array_push($arr,1); 在数组末尾插入元素1; array_values($arr); 获得数组的值; array_keys($arr); 获得数组的键名; 3.php的设计模式? 单例模式 工厂模式 注册模式 适配器模式 策略模式 观察者模式 原型模式 装饰器模式 4.事务的特性? 原子性:强调事务不可分割,事务中任何一个元素失败则整个事务失败。 一致性:事务执行前后数据的完整性保持一致。 隔离性:一个事务的执行过程中不应收到其他事务的干扰。 持久性:事务一旦结束数据就持久到数据库。 5.简述cgi,php-cig,fast-cgi,php-fpm? cgi是为了保证web server传递的数据是标准格式的。 当web server 收到请求后会启动对应的cgi程序,这里就是php解析器。接下来php解析器会解析php.ini,初始化运行环境,处理请求,在一规定的cgi格式返回处理的结果,退出进程,web server再把结果返回给浏览器。 php-cgi是一个cgi程序,是cgi的实现。 fastcgi是用来提高cgi程序性能的。 cgi的性能问题在“php解析器会解析php.ini,初始化执行环境”,标准cgi对每个请求都会执行这些步骤,处理时间会比较长。所以fastcgi会先启动一个master,解析配置文件,初始化执行环境,然后启动多个worker。当请求过来时master会传递给一个worker,然后立即接受下一个请求,这样避免重复劳动,效率提高。当worker不够时,master会根据配置预先启动几个worker。当worker过多时也会停掉一些。 php-fpm是一个实现了fastcgi的程序。 php-cgi只是个cgi程序只能解析请求,返回结果,不会进程管理,所以就出现了一些可以调度进程的程序,php-fpm就是这样的程序。 6.mysql四种隔离级别? 读未提交的内容 所有事物都能看到其他未提交事务的执行结果。 该级别会出现的问题是:脏读,即读取到了未提交的数据。 读取提交内容 一个事务只能看见已经提交事务所做的改变。 该级别会出现的问题是:不可重复读,即在同一事务中执行完全相同的select语句时可能看到不一样的结果。 导致这种情况的原因可能有: 1)、有一个交叉的事务有新的commit,导致了数据的改变; 2)、一个数据库被多个实例操作时,同一事务的其他实例在该实例处理其间可能会有新的commit。 可重复读 同一事务的多个实例在并发读取数据时,会看到同样的数据行。 该级别会出现的问题是:幻读 (Phantom Read)。 幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。 InnoDB和Falcon存储引擎通过多版本并发控制机制解决了该问题。 可串行化 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。 7.isset和empty的区别? isset 是否设置 测试变量是否被赋值 empty 空的 测试已经被赋值的变量是否为空。 8.什么情况下不需要创建索引什么情况下需要索引? 不需要索引的情况: 表中数据量较少; 经常增、删、改的表不需要创建索引,因为索引只能提高查询速度; 数据唯一性差的字段不要使用索引; where条件里用不到的字段不创建索引。 需要索引的情况: 主键自动创建唯一索引; 频繁作为查询条件的字段创建索引; 与其他表关联的字段需要创建索引; 查询中排序的字段需要索引; 查询中统计或者分组的字段。 9.索引的种类? 普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有null) 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并 全文索引:对文本的内容进行分词,进行搜索
|