PHP开发工程师面试题及详细答案(真实企业版)_第1页
PHP开发工程师面试题及详细答案(真实企业版)_第2页
PHP开发工程师面试题及详细答案(真实企业版)_第3页
PHP开发工程师面试题及详细答案(真实企业版)_第4页
PHP开发工程师面试题及详细答案(真实企业版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP开发工程师面试题及详细答案(真实企业版)一、PHP基础核心面试题1、说说PHP中常量和变量的区别?参考答案:1.定义方式不同:变量使用$符号声明,可直接赋值;常量通过define()或const定义,无需$符号。2.值是否可修改:变量的值在代码执行中可随意重新赋值、修改;常量一旦定义,全程不可修改、不可销毁。3.作用域不同:变量有全局、局部、静态作用域,局部变量仅函数内有效;常量默认全局生效,整站脚本均可调用,无作用域限制。4.数据类型:常量仅支持标量类型(字符串、数值、布尔、null);变量支持所有PHP数据类型,包括数组、对象。2、PHP中传值赋值和引用赋值的区别?参考答案:传值赋值:默认赋值方式,将变量的值复制一份赋予新变量,两个变量相互独立,修改其中一个,另一个不受影响。适用于普通数据、不需要联动修改的场景。引用赋值:使用&符号,新变量和原变量指向同一个内存地址,本质是别名关系。任意一个变量修改值,另一个变量的值会同步改变。常用于大数组、对象赋值,节省内存开销。3、isset()、empty()、is_null()的区别和使用场景?参考答案:1.isset():检测变量是否存在且不为null。变量未定义、值为null时返回false,其余情况(0、空字符串、空数组、false)均返回true。主要用于判断变量、数组下标是否存在。2.empty():检测变量是否为空。空字符串、0、0.0、false、空数组、null、未定义变量,都会判定为空,返回true。常用于表单参数、数据非空校验。3.is_null():仅判断变量值是否为null,只有变量值严格等于null时返回true,其余全部返回false。4、PHP静态变量static的特性?参考答案:1.仅在首次调用时初始化一次,后续调用会保留上一次的值,不会重复初始化。2.作用域仅在当前函数/类方法内部,外部无法直接访问。3.生命周期贯穿整个脚本执行周期,页面执行结束后才会销毁。常用场景:函数内部计数、缓存单次执行结果、类内部共享数据。5、PHP面向对象中public、protected、private的访问权限?参考答案:1.public(公共):公开权限,本类、子类、外部代码均可访问。2.protected(受保护):仅本类和继承的子类可以访问,外部无法调用。3.private(私有):权限最严格,仅当前类内部可以访问,子类、外部均不可访问。6、谈谈PHP魔术方法的常用场景,列举3-5个常用方法?参考答案:魔术方法是系统预设、无需手动调用,满足特定条件自动触发的方法,常用的有:1.__construct():构造方法,实例化对象时自动触发,常用于初始化属性、连接数据库。2.__destruct():析构方法,对象销毁时自动触发,常用于关闭资源、释放内存。3.__get():访问不存在或私有属性时自动触发。4.__set():给不存在或私有属性赋值时自动触发。5.__call():调用不存在或私有方法时自动触发,可用于方法容错。二、MySQL数据库面试题(PHP开发核心)1、InnoDB和MyISAM的核心区别?参考答案:1.事务支持:InnoDB支持事务、事务回滚、ACID特性;MyISAM不支持事务。2.锁机制:InnoDB支持行级锁、表级锁,并发性能高;MyISAM只有表级锁,读写互斥,并发差。3.外键:InnoDB支持外键约束;MyISAM不支持。4.崩溃恢复:InnoDB支持故障自动修复,数据安全性高;MyISAM崩溃后容易数据损坏、丢失。5.适用场景:InnoDB适用于增删改频繁、需要事务的业务(订单、支付、用户);MyISAM适用于查询多、读写少、无需事务的场景(日志、静态统计数据)。2、什么是索引?索引的优缺点?参考答案:索引是数据库优化查询的机制,相当于数据表的目录,通过排序存储字段数据,快速定位查询内容。优点:极大提升查询、排序、分组的效率,减少数据库扫描行数。缺点:占用磁盘空间;增删改数据时,需要同步更新索引,会降低写入性能。使用原则:高频查询字段建索引,低频更新字段建索引,避免过度索引。3、常见的索引类型及使用场景?参考答案:1.主键索引:唯一且非空,一张表只能有一个,查询优先级最高。2.唯一索引:字段值唯一、允许为空,适用于手机号、邮箱、账号等唯一字段。3.普通索引:最基础索引,允许重复、允许为空,适用于普通查询筛选字段。4.联合索引:多个字段组合索引,遵循最左匹配原则,适用于多条件联合查询场景。4、SQL注入的原理和PHP防护方案?参考答案:原理:用户通过输入框、URL参数等位置,提交恶意SQL语句,程序未做过滤直接拼接SQL执行,导致数据库数据泄露、篡改、删除。防护方案:1.优先使用PDO、MySQLi预处理语句(占位符绑定参数),杜绝SQL拼接。2.对用户输入做转义、过滤、正则校验,限制输入格式。3.关闭数据库远程权限、降低数据库账号操作权限,禁止root账号对接业务。4.禁止页面直接输出数据库错误信息,隐藏报错细节。三、Redis缓存面试题1、Redis相比MySQL的优势,为什么项目要用缓存?参考答案:Redis是内存型数据库,数据存储在内存,读写速度远超磁盘型的MySQL;MySQL数据持久化在磁盘,IO速度慢,高并发下容易卡顿。项目使用缓存的核心目的:减轻数据库压力、提升接口响应速度、支撑高并发场景,把高频查询、低频修改的数据缓存到Redis,避免频繁查库。2、缓存穿透、缓存击穿、缓存雪崩的区别及解决方案?参考答案:1.缓存穿透:查询不存在的数据,Redis无数据、每次都查数据库,恶意请求可打垮数据库。解决方案:接口层参数校验、布隆过滤器、空值缓存(短期缓存不存在的数据)。2.缓存击穿:热点key过期瞬间,大量并发请求直接涌入数据库。解决方案:热点key永不过期、加互斥锁、续期过期时间。3.缓存雪崩:大量key同时过期,或Redis宕机,所有请求全部访问数据库,导致数据库崩溃。解决方案:过期时间加随机值、Redis集群高可用、多级缓存、服务熔断降级。四、ThinkPHP/Laravel框架面试题(通用)1、说说MVC的架构思想?参考答案:MVC是分层开发架构,核心是代码解耦、分工清晰:M(Model模型):负责数据层,处理数据库增删改查、数据逻辑、数据校验。V(View视图):负责展示层,页面渲染、数据展示、前端交互展示。C(Controller控制器):负责业务调度,接收前端请求、调用模型、返回数据和视图,不直接操作数据库。2、框架中ORM的作用是什么?参考答案:ORM是对象关系映射,将数据表映射为程序中的对象,无需手写原生SQL,通过面向对象的方式操作数据库。优势:简化数据库操作、代码简洁易维护、防止SQL注入、适配多数据库切换,大幅提升开发效率。3、Laravel/TP中路由的作用及路由缓存的意义?参考答案:路由负责绑定URL地址和控制器方法,拦截请求、分发业务逻辑,统一管理接口地址。路由缓存会把所有路由规则编译为静态文件,避免每次请求重新解析路由文件,有效提升项目访问速度,适合生产环境开启。五、PHP性能优化面试题1、日常开发中,PHP代码层面的优化方式?参考答案:1.减少全局变量,全局变量生命周期长、占用内存高。2.循环内不做重复计算、不调用函数、不查询数据库,能提到循环外的逻辑全部外提。3.优先使用静态方法、常量,减少对象实例化开销。4.及时销毁无用对象、大数组,释放内存。5.避免大量使用正则表达式,优先使用字符串函数。2、数据库层面优化方案?参考答案:1.合理建立索引,避免冗余索引、无效索引。2.禁止使用select*,只查询业务需要的字段,减少数据传输量。3.分页查询、限制查询条数,避免全表扫描。4.复杂SQL拆分、避免多表嵌套查询,合理使用联表查询代替子查询。5.大表分表分库、读写分离,缓解单库压力。3、服务器及环境层面优化?参考答案:1.开启OPcache缓存PHP脚本,减少文件编译开销。2.配置合理的Nginx并发参数、超时参数。3.静态资源(图片、js、css)配置缓存、CDN加速。4.使用Redis缓存高频数据,减少数据库请求。六、PHP安全面试题1、简述XSS攻击及防护方式?参考答案:XSS是跨站脚本攻击,攻击者提交恶意JS脚本,其他用户访问页面时脚本执行,导致cookie窃取、页面篡改、账号劫持。防护:前端输出转义、PHP后端对输出数据做htmlspecialchars转义、设置cookiehttponly、开启CSP安全策略。2、简述CSRF攻击及防护方式?参考答案:CSRF是跨站请求伪造,利用用户登录状态,诱导用户在第三方网站发起恶意请求,执行非自愿的操作(改密码、下单、转账)。防护:接口请求校验Token、验证Referer请求头、开启验证码验证关键操作。七、实战场景面试题(高频必问)1、接口返回数据乱码怎么解决?参考答案:1.PHP头部设置编码:header('Content-Type:application/json;charset=utf-8')。2.数据库连接指定utf8mb4编码,数据表、字段统一utf8mb4。3.代码文件保存编码为UTF-8,禁止GBK、GB2312编码。2、如何处理PHP高并发秒杀场景?参考答案:1.前端限流:按钮防抖、限制重复提交。2.Redis预存库存,先校验缓存库存,拦截无效请求,避免超卖。3.Redis加分布式锁,保证同一商品同一时间只有一个请求扣库存。4.异步处理:秒杀成功后通过队

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论