PHP 后端面试题整理
PHP 传值和传引用的区别传值是把变量的值复制一份传给函数函数里修改这个值原来的变量不变。传引用是把变量的内存地址传给函数函数里修改时原来的变量也会跟着变。想让外面的变量不变就传值想让外面的变量跟着改就传引用。XSS 攻击和 CSRF 攻击的区别及解决方法XSS 是往网页插恶意代码用户打开后在自己浏览器执行偷信息或改页面CSRF 是骗已登录用户在网站上不自觉执行操作比如转账利用网站对用户身份的信任。解决办法XSS 做输入过滤和输出转义CSRF 用 Token 验证或验证码。MySQL 事务的特性以及隔离级别事务特性 ACID原子性事务要么全执行要么全不执行一致性事务执行前后数据保持合法状态隔离性多个事务并发执行时相互不干扰持久性事务提交后修改永久保存。隔离级别从低到高读未提交可能脏读读已提交解决脏读但有不可重复读可重复读解决不可重复读MySQL 默认级别串行化解决所有并发问题但性能低。API 的幂等性是什么以及如何解决API 幂等性是同一请求调用多次结果和副作用都一样比如支付接口不重复扣款。解决办法1. 生成唯一 Token存在 Redis请求时验证 Token执行后删除2. 数据库加唯一索引防止重复数据。如何检查 PHP 脚本和 MySQL 数据库查询效率PHP 脚本效率用 microtime () 记录开始和结束时间算耗时用 xdebug 生成性能分析报告。MySQL 查询效率开启慢查询日志记录慢 SQL用 EXPLAIN 分析执行计划看是否用索引用 SHOW PROFILE 查看查询各阶段耗时。NginxPHP-FPM 的工作原理Nginx 收到 PHP 请求后通过 FastCGI 协议转发给 PHP-FPMPHP-FPM 分配预先启动的空闲 PHP 子进程处理请求处理完结果返回 Nginx再响应给用户主进程会监控子进程崩溃自动重启。网站攻击方式有哪些xss、csrf、sql 注入MySQL 索引失效的场景索引列用函数 / 计算如 WHERE YEAR (create_time)2023索引列用 NOT IN//!可能全表扫描字符串不加引号如 WHERE name123隐式转换失效联合索引不满足最左前缀如索引 (a,b,c) 只查 b1 AND c2OR 连接条件中某列无索引导致相关索引失效索引列大量 NULL 时IS NULL/IS NOT NULL 可能失效数据量过小数据库选择全表扫描而非索引。MySQL 分库分表的方案分库水平分库按用户 ID 哈希取模分 2 个库每个库存部分用户数据分散单库读写压力垂直分库按业务模块拆分如用户相关表放 user_db订单相关放 order_db。分表水平分表按用户 ID 哈希取模分 4 张表或按时间分表垂直分表按列拆分如用户表拆为基本信息表和详情表。负载均衡的实现方式有哪些软件比如 Nginx能按轮询或 IP 哈希分发请求中小公司常用硬件比如 F5成本高适合大型企业。k8s 的核心组件有哪些控制平面组件1. API Server2. Scheduler3. Controller Manager4. etcd。节点组件1. kubelet2. kube-proxy。K8s 的作用是管理容器的平台通常和 Docker 配合使用Docker 负责将应用打包成容器K8s 则负责这些容器的部署、自动重启故障容器、根据流量自动扩缩容让容器应用的运行和维护更高效省心。