PHP面试经常被问到的问题(附答案)

回答问题时带上你自己的理解会更好。
倾情整理,希望每道题都可以举一反三,防止被面试官挖坑。

一、PHP方面的问题

1.什么是composer?以及composer是干什么用的?工作原理

composer是一个依赖管理工具,composer会帮你安装这些依赖的库文件;
比如composer可以解决自动加载类,不用你写过多的new。

2.PHP如何实现静态化

PHP的静态化分为:纯静态和伪静态。其中纯静态又分为:局部纯静态和全部纯静态。
PHP伪静态:利用Apache mod_rewrite实现URL重写的方法;
PHP纯静态,就是生成HTML文件的方式,我们须要开启PHP自带的缓存机制,即ob_start来开启缓存。

3.你了解设计模式吗?说下你最常用的设计模式

PHP常用六大设计模式

4.观察者模式是如何实现的?工厂模式是如何实现的?适配器模式是如何实现的?

观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且有所作为。即出版者+订阅者=观察者模式。

工厂模式 :将调用者和创建者分离,调用者直接向工厂类请求获取调用对象,减少代码耦合,提高系统的维护性和扩展性;
工厂模式应用场景:有多个产品类时就要用到工厂模式,比如在数据库连接中,我们可以采用多种数据库连接方法,有mysql扩展,mysqli扩展,PDO扩展等,在这种情况下我们可以一个扩展对应一个产品类,然后采用工厂模式。

适配器模式核心思想:把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)–适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则。

5.PHP的优化方案

常用性能优化方案
1.使用单引号替换双引号,单引号在运行的时候不检查运行引号内部的变量,执行效率是双引号的两倍;
2.使用PHP内置的数组操作方法,PHP内置的数组操作方法的运行效率是自行编写代码的10倍以上;
3.使用字符串函数替换正则函数,例如:使用 str_replace 替换 preg_replace;
4.使用isset( a 5 ) 替 换 s t r l e n ( a{5})替换strlen( a5)strlen(a)>5;
5.require_once() 代价昂贵,include 文件时尽量使用绝对路径,因为它避免了PHP去 include_path 里查找文件的速度,解析操作系统路径所需时间会更少。
循环优化方案
1.在执行for循环之前确定最大循环数,不要把count/strlen/sizeof等每次都要重复做的但结果都一样的事情放到for循环的条件语句中,另外最好运用foreach代替for循环;
2.禁止在循环内部查询数据库,应将查询放在循环外部;
3.循环内部不宜使用@操作符;
4.循环内部不宜声明变量,尤其是大变量:对象,解决办法是循环之前预定义需要声明的变量。

6.说下你了解的session和cookie

(1)、存储位置不同:
cookie的数据信息存放在客户端浏览器上。
session的数据信息存放在服务器上;
(2)、存储容量不同:
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制;
(3)、存储方式不同:
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
(4)、隐私策略不同:
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。
(5)、有效期上不同:
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
(6)、服务器压力不同:
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
(7)、浏览器支持不同:
假如客户端浏览器不支持cookie:
cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。
运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。
假如客户端支持cookie:
cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。
session只能在本窗口以及子窗口内有效。
(8)、跨域支持上不同:
cookie支持跨域名访问。
session不支持跨域名访问

7.如何实现不基于session和cookie的用户认证。

将用户信息加密放到http的header部分,每次拿到http的时候,验证获取header的信息。

8.说下你目前框架所用到的核心概念

主要说下目前所用框架的好处以及为什么要用这个框架。
比如:免费的,代码开源,类库强大,易扩展,上手容易等等。

TP框架:
ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。

Easyswoole框架:
EasySwoole是一款常驻内存型的分布式swoole框架,专为API而生,支持同时混合监听HTTP、WebSocket、自定义TCP、UDP协议,且拥有丰富的组件,例如协程 连接池、TP风格的协程ORM、协程微信SDK、协程支付宝SDK、协程Kafka客户端、协程ElasticSearch客户端、协程Consul客户端、协程Redis客户端、协程Apollo客户端、协程NSQ客户端、协程自定义队列、 协程Memcached客户端、协程视图引擎、JWT、协程RPC、协程SMTP客户端、协程HTTP客户端、协程Actor、Crontab定时器等诸多组件。让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。

9.什么是CSRF攻击,XSS攻击?如何防范

CSRF(Cross-site request forgery)跨站请求伪造,黑客建立一个伪造网站或发送邮箱带了一个正常URL链接来让正常用户访问,来让正常用户让自己浏览器里的COOKIE权限来执行一些非法请求,
如转账,提权等操作,
防范方法有,验证 HTTP Referer 字段;在请求地址中添加 token 并验证;
XSS攻击
主要将XSS代码提交存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。当目标用户访问该页面获取数据时,XSS代码会从服务器解析之后加载出来,返回到浏览器做正常的HTML和JS解析执行,XSS攻击就发生了。
防范方法:通过过滤是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数

10.你了解RESTful API吗?说说干什么用的。

RESTful API是REST风格的API,是一套用来规范多种形式的前

  • 15
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值