面霸养成系列——PHP进阶知识问答
通过上一篇文章的学习,我们基本掌握了面试过程中一些基础的问题,今天我们再来说说关于PHP进阶知识在面试中经常被问到的一些问题。
1.面向对象?
面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。
面向对象有三大特征:封装性、继承性、多态性。
现在纯正的OO语言主要是 Java 和 C#,PHP、C++也支持OO,C是面向过程的。
2.private、 protected、 public修饰符的访问权限?
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
3.什么是构造函数,什么是析构函数,作用是什么?
构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。PHP中使用__construct()声明构造方法,并且只能声明一个。
析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。
4.说一下PHP的垃圾回收机制?
主要说一下PHP中垃圾回收机制中有两个重要的概念:1)引用计数 2)写时拷贝
引用计数值得是变量每被引用一次,refcount就会+1。当变量销毁或者函数结束的时候,refcount就会-1。
但是需要注意的是:垃圾回收与变量自动GC的区别。
5.PHP7的改变?
1)抽象语法树
2)Native TLS 线程安全
3)强类型的出现
4)错误处理
5)zval的变化
5)HashTable的变化
6.PHP的生命周期?
1)模块初始化
2)请求初始化
3)脚本执行
4)请求关闭
5)模块关闭
7.__autoload()方法的工作原理是什么?
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数可以不必要写很多个include或者require函数。
8.设计模式相关?
单例模式
工厂模式
观察者模式
策略模式
适配器模式
注册树模式
9.说说你对缓存技术的了解?
缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库
10.什么是 CSRF 攻击 ?XSS 攻击?如何防范?
CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。
讲述基本原理:用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网站给A网站的请求(此时相当于是用户访问),A网站会认为是用户发的请求,从而B网站就成功伪装了你的身份,因此叫跨站脚本攻击。
CSRF防范:A、合理规范api请求方式,GET,POSTB、对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。
XSS,跨站脚本攻击。
防范:不相信任何输入,过滤输入。
11.用PHP实现无限极分类?
递归函数实现
12.常见的排序算法?
选择排序,快速排序,冒泡排序,插入排序
13.还知道哪些常用的算法?
二分查找,贪心算法,动态规划,回溯算法
14.对于大流量的网站,您采用什么样的方法来解决访问量问题?
A、有效使用缓存,增加缓存命中率
B、使用负载均衡
C、对静态文件使用cdn进行存储和加速
D、想法减少数据库的使用
E、查看出现统计的瓶颈在哪里
F、反向代理
更多内容已上传至github:https://github.com/LeeToug/interview,欢迎star