当前位置: 首页 > 后端技术 > PHP

PHPer面试指南-PHP

时间:2023-03-30 02:42:39 PHP

本书GitHub地址:https://github.com/todayqq/PH...PHP收集了一些常见的基础和高级面试题,基础面试题不再解答。Get和POST的区别Cookie和Session和关系的区别单引号和双引号的区别isset和empty的区别echo,print_r,print,var_dump什么是MVC?按值传递和按引用传递之间的区别?高级部分简介S.O.L.I.D设计原则SRP单一职责原则一个类有一个而且只有一个理由改变OCPOpen-ClosedPrinciple能够在不改变类的情况下扩展类的行为LSPLiskovSubstitutionPrinciple派生类可以替换基类使用ISP接口隔离原则使用客户端特定的细粒度接口DIP依赖??倒置原则依赖抽象而不是具体实现PHP7和PHP5的区别,有哪些新特性?性能提高了两倍。添加了组合比较运算符(<=>)。添加了标量类型声明和返回类型声明。try...catch加入了多条件判断,更多的Error错误可以用异常处理。增加了匿名类,现在支持通过newclass实例化一个匿名类,可以用来替代一些“用完就烧”的完整类定义。为什么PHP7的性能比PHP5好?减少变量存储字节,减少内存占用,提高变量运算速度,改进数组结构。数组元素和哈希映射表分配在同一块内存中,减少了内存占用,提高了cpu缓存命中率,完善了函数调用机制,通过优化参数传递的环节,减少了一些指令,提高了执行效率。简述PHP垃圾回收机制(GC)。在PHP5.3之前,内存是通过引用计数来管理的。PHP中的所有变量都有一个名为zval的变量容器,当变量被引用时,引用计数会+1,当变量引用计数变为0时,PHP会销毁内存中的变量。但是对于引用计数中的循环引用,引用计数不会减为0,会导致内存泄漏。5.3版本之后做了这些优化:每次引用计数减少时不会进入回收循环,只有在rootbuffer满后才开始垃圾回收;可以解决循环引用的问题;它可以始终将内存泄漏保持在阈值以下。更多信息请参考PHP手册,垃圾回收机制。如何解决PHP内存溢出问题增加PHP脚本内存分配变量引用并及时销毁批量处理数据Redis和Memecached有什么区别?Redis支持更丰富的数据存储类型,String、Hash、List、Set和SortedSet。Memcached只支持简单的键值结构。Memcachedkey-value存储比Redis使用hash结构进行key-value存储,内存利用率更高。Redis提供了事务功能,可以保证一系列命令的原子性。Redis支持数据持久化,可以将内存中的数据保存在磁盘上。Redis只使用单核,而Memcached可以使用多核,所以平均每核Redis在存储小数据时比Memcached有更高的性能。Redis是如何实现持久化的?RDB持久化将Redis在内存中的状态保存到硬盘中,相当于备份了数据库的状态。AOF持久化(Append-Only-File),AOF持久化通过保存Redis服务器锁执行的写状态来记录数据库。相当于备份数据库接收到的命令,所有写入AOF的命令都以Redis协议格式存储。延伸阅读3年PHPer面试总结垃圾收集机制S.O.L.I.D面向对象设计浅谈IOC--说说什么是IOCRedis和Memcached的区别