PHP 面试题每日一更,欢迎入群与大家一起交流(Github 项目主要用作维护示例代码,不会更新每个问题的答案):
1、请用最简单的语言描述什么是 PHP,以及它能做什么?
2、说出下面这段代码中变量 $a
和 $b
的输出值:
3、请使用 PHP 代码实现官方自带的 var_dump
函数,或者你还可以发散下,尝试实现 Laravel 框架中使用的 dd
/dump
函数。
4、孔乙己经常卖弄「回」有四种写法,我们知道,PHP 代码可以通过 PHP 标记直接嵌入到 HTML 文档中,其实,PHP 开始与结束标记也有四种方式,你知道是哪四种吗?请列举出来。
5、require
、include
、require_once
、include_once
它们各自的用途是什么?有什么区别?如果某个业务需要按需加载 PHP 文件,你会怎么设计和实现?
6、对于熟练使用 Laravel 框架的同学来说,对 Composer 肯定不陌生,我们在 Laravel 框架中无论使用辅助函数还是通过命名空间管理的类,都不会涉及到类和文件的加载操作,但实际上这个工作是 Composer 这个大管家在底层默默帮我们完成的,今天的问题是,有多少同学知道 Composer 底层是如何实现 PHP 命名空间与目录的映射,以及类和文件的按需加载的?
7、我们都知道可以通过索引对数据库查询进行优化,MYSQL 支持哪些索引,不同索引之间的性能对比如何?索引越多越好吗?
8、在日常开发实践中,如何定位数据库慢查询语句?针对慢查询语句,你是如何进行优化的,说说你的思路。
9、请具体解释下什么是 SQL 注入攻击,通常发生在哪些场景,以及如何避免 SQL 注入攻击?
10、请简单介绍下数据库事务的定义及其作用,有哪些特性,以及在 PHP 或者你所使用的框架中如何实现,数据库事务能保证并发操作的原子性问题吗?
11、如何在高并发的场景下(比如秒杀、抢红包)保证数据库操作的原子性?说说你的思路。
12、说说关系型数据库有哪些范式,以及我们在设计数据库的时候如何遵循这些范式。
13、什么是数据库主从分离?为什么要做主从分离?主从分离要怎么设计,主从之间的数据同步是怎么做的?针对主从分离网络延迟导致的数据不一致,你会怎么处理?
14、对于大型应用系统,数据库 SQL 优化、读写分离、添加缓存之后,往往还是满足不了系统的并发处理要求,这个时候往往就要进行垂直拆分和水平拆分,以进一步提高数据库负载能力,说说你对数据库水平拆分和垂直拆分的理解,以及面对这样的数据库系统改造,从代码层面和数据库层面我们要注意哪些问题,如果需要你去做这样的系统改造,你会怎么设计?