PHP 常用面试题及详细答案(实战版)_第1页
PHP 常用面试题及详细答案(实战版)_第2页
PHP 常用面试题及详细答案(实战版)_第3页
PHP 常用面试题及详细答案(实战版)_第4页
PHP 常用面试题及详细答案(实战版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

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

文档简介

PHP常用面试题及详细答案(实战版)一、PHP基础核心面试题1、简述PHP中变量传值和引用传值的区别变量传值是默认的传值方式,传递的是变量的值副本,函数内部修改参数的值,不会影响外部原变量。引用传值需要在参数前加&符号,传递的是变量的内存地址,函数内部对参数的修改,会直接改变外部原变量的值。示例:php

//值传递

functiontest($a){

$a=100;

}

$num=10;

test($num);

echo$num;//输出10

//引用传递

functiontest2(&$a){

$a=100;

}

test2($num);

echo$num;//输出1002、PHP常量和变量的区别1、变量可以随时赋值、修改、销毁;常量一旦定义,无法修改和销毁。2、变量作用域灵活,可全局、局部;常量默认全局,整个脚本均可使用。3、变量可以存储所有数据类型;常量仅支持标量类型(字符串、数字、布尔、null)。4、变量需要$符号修饰;常量无需$,定义方式为define()或const。3、isset()、empty()、is_null()的区别isset():检测变量是否存在且不为null。变量未定义、值为null时返回false,其余情况(0、''、[])均返回true。常用于判断变量是否声明、表单参数是否存在。empty():检测变量是否为空。空字符串、0、0.0、false、null、空数组、未定义变量,都会返回true。适合判断数据是否有效。is_null():仅检测变量值是否为null,只有变量值严格为null时返回true,其余全部返回false。4、PHP数据类型有哪些?标量和复合类型区别PHP共8种基础数据类型:标量类型(4种):字符串、整型、浮点型、布尔型复合类型(2种):数组、对象特殊类型(2种):null、资源区别:标量类型只能存储单个值;复合类型可以存储多个、任意类型的数据。5、PHP超全局变量有哪些?各自作用超全局变量全局可用,函数、类中无需global声明:$_GET:获取URL地址栏传参数据$_POST:获取表单POST提交数据$_REQUEST:兼容GET/POST/COOKIE所有请求数据(不推荐多用,安全性差)$_SERVER:获取服务器信息、请求头、请求方式、域名、脚本路径等$_SESSION:服务端会话存储,保存用户登录等全局会话数据$_COOKIE:读取客户端Cookie数据$_FILES:获取文件上传的信息$_ENV:环境变量$GLOBALS:全局变量集合,可访问所有全局变量6、include、require、include_once、require_once的区别include:引入文件,文件不存在抛出警告,脚本继续执行require:引入文件,文件不存在抛出致命错误,脚本终止执行include_once:引入文件,重复引入只加载一次,报错级别同includerequire_once:引入文件,重复引入只加载一次,报错级别同require使用场景:核心配置、函数文件用require_once;模板、视图文件用include。二、PHP数组与常用函数面试题1、PHP索引数组和关联数组区别索引数组:键名是连续数字,默认从0开始,适合存储有序列表数据,如商品列表、分页数据。关联数组:键名是自定义字符串,适合存储结构化数据,如用户信息、配置参数。2、常用数组函数有哪些(高频)array_merge():合并数组,字符串键名覆盖,数字键名重新排序array_column():多维数组提取指定字段,常用于列表提取ID、名称array_unique():数组去重array_values():重置数组键名,转为连续索引数组array_keys():获取数组所有键名in_array():判断值是否存在数组中array_search():查找值对应的键名sort/rsort:索引数组升序、降序排序ksort/krsort:按键名升序、降序排序3、array_merge和+合并数组的区别array_merge:数字键名会重新索引排序,字符串键名后面覆盖前面,不保留原数字键。+合并数组:保留原有所有键名,键名重复时,前面数组的值保留,后面数组的值直接舍弃,不会覆盖。三、PHP面向对象面试题(高频必考)1、面向对象三大特性及作用封装:将属性和方法封装到类中,通过访问修饰符控制权限,隐藏内部实现细节,提高代码安全性和复用性。继承:子类继承父类的属性和方法,减少重复代码,实现代码复用,便于统一维护。多态:同一个方法,不同子类实现不同效果,提高代码扩展性,适配不同业务场景。2、三种访问修饰符public、protected、private区别public:公共的,类内部、子类、外部均可访问protected:受保护的,类内部、子类可以访问,外部无法访问private:私有的,仅当前类内部可以访问,子类和外部都无法访问3、构造方法和析构方法的作用构造方法__construct():实例化对象时自动执行,常用于初始化操作,如赋值属性、连接数据库、初始化配置。析构方法__destruct():对象销毁、脚本执行结束时自动执行,常用于释放资源,如关闭数据库连接、关闭文件句柄。4、static静态属性和静态方法的特点1、静态属性和方法属于类,不属于对象,无需实例化即可调用(类名::静态方法/属性)。2、静态属性全局唯一,所有对象共享同一个静态属性的值。3、静态方法中不能使用$this,只能使用self/static访问静态资源。4、适合存储公共配置、通用工具方法。5、接口和抽象类的区别抽象类:1、用abstract修饰,可包含普通方法和抽象方法(无实现)2、可以有属性、常量、构造方法3、子类只能单继承一个抽象类4、可以有访问修饰符接口:1、用interface修饰,仅能声明方法,不能实现方法(PHP8前),PHP8支持默认实现2、只能有常量,不能有属性3、类可以多实现接口4、方法默认都是public,不能修改权限四、Session与Cookie面试题1、Session和Cookie的区别1、存储位置:Cookie存储在客户端浏览器;Session存储在服务器端。2、安全性:Session安全性更高;Cookie保存在本地,容易被篡改、窃取。3、存储大小:Cookie有大小限制(一般4KB);Session无严格大小限制。4、有效期:Cookie可设置永久有效期;Session默认浏览器关闭失效,可手动设置过期时间。5、依赖关系:Session依赖Cookie,浏览器禁用Cookie后,需通过URL传参传递session_id维持会话。2、Session失效原理和解决方案失效原因:浏览器关闭、服务端session文件过期、清理缓存、Cookie被清空。解决方案:设置session过期时间、持久化存储Session(Redis)、开启URL重写、登录时记录用户令牌。五、PHP安全面试题(面试高频)1、简述SQL注入原理及防护方式原理:用户恶意输入SQL语句,程序直接拼接SQL执行,导致数据库数据泄露、删除、篡改。防护方式:1、使用PDO/MySQLi预处理语句(参数绑定),杜绝SQL拼接2、过滤、转义用户输入数据3、关闭数据库多余权限,禁止root账号操作业务4、限制SQL执行权限,禁止删除、修改高危操作2、XSS跨站脚本攻击原理和防护原理:用户提交恶意JS代码,网站未过滤直接展示,其他用户访问页面时执行恶意脚本,窃取Cookie、劫持页面。防护方式:1、输出数据时使用htmlspecialchars()转义HTML特殊字符2、设置CSP安全策略3、Cookie设置httponly属性,禁止JS读取Cookie3、CSRF跨站请求伪造防护原理:利用用户已登录状态,诱导用户在第三方网站发起请求,冒用用户身份执行业务操作。防护方式:1、表单、接口增加Token验证2、验证请求来源Referer、Origin3、重要操作增加验证码、短信验证4、文件上传漏洞防护1、校验文件后缀、MIME类型,禁止php、asp等脚本文件上传2、上传文件重命名,避免文件名绕过检测3、上传目录禁止脚本执行权限4、二次校验文件真实类型六、PHP性能与优化面试题1、PHP常见性能优化方式1、开启OPCache缓存,缓存编译后的PHP脚本,减少重复编译开销2、数据库优化:加索引、避免select*、分页查询、优化SQL语句3、使用Redis/Memcached缓存热点数据,减少数据库查询压力4、精简代码,避免循环内查询数据库、循环内实例化对象5、开启Gzip压缩,压缩页面资源6、静态资源CDN加速2、echo、print、print_r、var_dump区别echo:语言结构,无返回值,输出速度最快,适合输出字符串print:函数,有返回值,速度慢于echoprint_r:打印数组、对象,仅输出值,不显示类型var_dump:打印变量值、类型、长度,调试专用七、MySQL高频PHP面试题1、索引的作用、优缺点作用:大幅提升查询速度,快速定位数据行。优点:加快查询、排序、分组速度。缺点:占用磁盘空间,增加写入、更新、删除的开销,索引越多,写入越慢。2、什么是事务?四大特性ACID事务是一组SQL操作,要么全部执行成功,要么全部回滚失败,保证数据一致性。ACID:原子性:事务整体不可分割一致性:事务前后数据状态一致隔离性:多个事务互不干扰持久性:事务提交后数据永久生效八、Redis面试题(PHP后端必备)1、Redis常用场景1、热点数据缓存(商品、配置、列表数据)2、会话存储(替代文件存储Session)3、计数器、限流、防刷4、分布式锁5、队列、秒杀、点赞排行2、Redis过期淘汰策略定时删除、惰性删除、定期删除;内存满后触发淘汰策略,优先淘汰过期数据,无过期数据则根据配置淘汰对应key。九、ThinkPHP/Laravel框架高频面试题1、MVC架构原理M(Model模型):负责数据层,操作数据库、处理数据逻辑V(View视图):负责页面展示,渲染页面数据C(Controller控制器):负责接收请求、调用模型、返回视图,调度整体业务2、框架中ORM的作用ORM是对象关系映射,将数据表映射为程序对象,无需手写大量SQL,通过面向对象方式操作数据库,简化开发,提升代码可读性和维护性。十、手写代码面试题(实战必考)1、手写PHP递归遍历文件夹所有文件php

functionscanDir($path){

$arr=[];

$files=scandir($path);

foreach($filesas$v){

if($v=='.'||$v=='..')continue;

$newPath=$path.'/'.$v;

if(is_dir($newPath)){

$arr[$v]=scanDir($newPath);

}else{

$arr[]=$v;

}

}

return$arr;

}2、手写简单单例模式php

classDb{

privatestatic$instance

温馨提示

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

评论

0/150

提交评论