2019(初级)PHP最全常见面试题集合(附答案)!

2019(初级)PHP最全常见面试题集合(附答案)!1 常见状态码 1xx 临时响应 表示临时响应并需要请求者继续执行操作的状态代码 100 继续 请求者应当继续提出请求 服务器返回此代码表示已收到请求的第一部分 正在等待其余部分 101 切换协议 请求者已要求服务器切换协议 服务器已确认并准备切换 102 由 WebDAV RFC2518 扩展的状态码 代表处理将被继续执行 2xx 成功 表示成功处理了请求的状态代码



2019(初级)PHP最全常见面试题集合(附答案)!

以下所有几乎必问,每个公司侧重点不同,面试前先大概了解公司业务或者岗位需求。

PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

1、常见状态码

1xx (临时响应)表示临时响应并需要请求者继续执行操作的状态代码。

2xx (成功)表示成功处理了请求的状态代码。

3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

4xx (请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。

5xx (服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

600 源站没有返回响应头部,只返回实体内容

延伸:OSI七层模型,物理层,数据链路层,网络层(IP),传输层(TCP),会话层,表示层,应用层(HTTP、FTP、TFTP、SMTP)
说明: 以上状态码不会都问,记住你所常见的,有时间尽量都记住。

2、get和post区别

3、cookie和session的区别

4、reqiure的include的作用及区别?

两者都用于包含文件,require如果包含文件出错会报致命错误并且停止运行,而include会报Notice错误,程序继续运行。require_once会检查是否重复包含,如果已经包含则不再执行,include同理。

5、PHP中常量定义的方式有哪些?有什么区别?

const和define()。const更快,是语言结构,define是函数。define不能用于类常量定义,const可以。

6、客户端IP地址和服务器端IP地址。

 $_SERVER['REMOTE_ADDR'] $_SERVER['SERVER_ADDR'] 

7、print()、echo、print_r()、var_dump()等区别。

print()、echo 都是语言结构,不同的是前者打印只能接受一个变量,后者可以输出多个。

8、常用字符串函数。

serialize()、unserialize()	序列化是将变量转换为可保存或传输的字符串的过程。
strlen()	返回字符串长度。
strrev()	反转字符串。
strpos(原字符串,待查找字符串)	存在返回第一个字符下标,不存在返回false。
strstr(原字符串,待查找字符串)	返回待查找字符串及其后剩余部分,不存在返回false。
str_replace("world", "Kitty", "Hello world!")	 将某个字符串替换为另一个字符串。
explode(" ",原字符串)	将原字符串按分割字符串转成数组。
implode(" ",原数组)		将原数组中的元素连接分割字符组合成字符串。
trim()		移除字符串两侧的空白字符和其他字符。ltrim()移除左边、rtrim()移除右边。
substr("Hello world",6)	返回字符串的一部分。
substr_replace(string,replacement,start,length)	函数把字符串的一部分替换为另一个字符串。
htmlspecialchars()	把一些预定义的字符转换为 HTML 实体。
str_repeat("Shanghai",5)	字符串重复指定次数。
str_split("Shanghai",3)		将字符串分割成数组,可以指定每个数组元素长度。

9、常用数组函数

array_keys() 返回数组中所有的键名。 array_values() 返回数组中所有的值。 array_shift() 删除数组中首个元素,并返回被删除元素的值。 array_unshift() 在数组开头插入一个或多个元素,并返回数组元素个数。 array_diff() 比较数组,返回差集(只比较键值)。 array_intersect() 比较数组,返回交集(只比较键值)。 array_diff_assoc() 比较数组,返回差集(比较键名和键值)。 array_merge() 把一个或多个数组合并为一个数组。 array_pop() 删除数组的最后一个元素(出栈)。 array_push() 将一个或多个元素插入数组的末尾(入栈)。 sort() 对数组进行升序排序。 rsort() 对数组进行降序(逆向)排序。 asort() 对关联数组按照键值进行升序排序。 ksort() 对数组按照键名进行升序排序。 array_rand() 返回数组中一个或多个随机的键。 array_combine() 通过合并两个数组来创建一个新数组。 array_unique() 删除数组中的重复值。 

10、常用文件操作函数。

fopen() 打开一个文件或 URL。 fread() 读取打开的文件。 fwrite() 写入文件。 fclose() 关闭打开的文件。 file_get_contents() 将文件读入字符串。 file_put_contents() 将字符串写入文件。file_put_contents("test.txt","test!",FILE_APPEND); filesize() 返回文件大小。 filetype() 返回文件类型。 file_exists() 检查文件或目录是否存在。 

真题:打开文件,将文件内容读取出来,在开头加入Hello World,将拼接好的字符串写回到文件当中

$file = './hello.txt'; $handle = fopen($file,'r'); $content = fread($handle,filesize($file)); $content = 'Hello World'.$content; fclose($handle); $handle = fopen($file,'w'); fwrite($handle,$content); fclose($handle); 

真题:PHP遍历文件夹

$dir = './test'; function loopDir($dir) { $handle = opendir($dir); //目录/文件/子目录/子文件名称为0或者空这种情况不全等于false不跳出循环,目录里指针全读取完则为false,跳出循环 while(false!==($file = readdir($handle))) { //$file只显示名称,并不显示完整路径 if($file != '.' && $file != '..') { echo $file."\n"; if(filetype($dir.'/'.$file) == 'dir') { loopDir($dir.'/'.$file); } } } } loopDir($dir); 

11、PHP垃圾回收机制

php中的变量存储在变量容器zval中,zval中除了存储变量类型和值外,还有is_ref和refcount字段。refcount表示指向变量的元素个数,is_ref表示变量表示是否是引用变量。如果refcount为0时,就回收该变量容器。

12、PHP常见的设计模式

工厂模式、单例模式、注册模式、适配器模式、观察者模式、策略模式、原型模式、装饰器模式

13、栈和堆、栈和队列的区别?

栈是编译期间就分配好的内存空间, 存取数据较快,代码中必须就栈的大小有明确的定义,缺乏灵活性。 堆是程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存的大小。 队列先进先出,栈先进后出。 栈是只能在表的一端进行插入和删除操作的线性表。 队列是只能在表的一端进行插入和在另一端进行删除操作的线性表。 

14、数据库事物及其特性?

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。 事务特性: (1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。 (2)一致性。事务的执行使得数据库从一种正确状态转换成另一种正确状态 (3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务, (4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。 

15、数据库三范式

第一范式(1NF)无重复的列(原子性) 第二范式(2NF)属性完全依赖于主键 第三范式(3NF)属性不依赖于其它非主属性 

16、数据库索引作用、类型及其区别?

大大减少服务器需要扫描的数据量 帮助服务器避免排序和临时表 将随机I/O变顺序/O 大大提高查询速度,降低写的速度、占用磁盘 索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。 普通索引:最基本的索引,没有任何约束限制。 唯一索引:与普通索引类似,但是具有唯一性约束。 主键索引:特殊的唯一索引,不允许有空值。 组合索引:将多个列组合在一起创建索引,可以覆盖多个列。 外键 全文基本不用,一般用业务逻辑实现。 外键索引:只有 InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。 全文索引: MySQLI自带的全文索引只能用于 MyISAM,并且只能对英文进行全文检索。 

真题: 2019新浪PHP实习生原题
慕课网360大牛PHP面试视频关注公众号【蛋叔】回复“PHP面试”
复合索引前缀原则(向左原则)考点




KEY(a, b, c) WHERE a land b=2 and c= 3 WHERE a =1 and b =2 WHERE a =1 WhERE b=2 and c= 3(不生效) WHERE a =1 and c=3(不生效) 

17、表存储引擎 InnoDB和MyISAM的区别

InnoDB支持行锁,MyISAM支持表锁 InnoDB支持事务处理,MyISAM不支持 InnoDB默认使用共享表空间,MyISAM不使用 InnoDB数据存储在共享表空间,MyISAM存储在后缀为MYD和MY InnoDB支持外键、崩溃后的安全恢复,MyISAM不支持崩溃后的安全恢复 

18、数据库中join和left join的区别

left join 左连接 意思是包含左边表所有记录,右边所有的匹配的记录,如果没有则用空补齐 JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 

19、SQL查询的安全方案

1使用预处理语句防SQL注入 delete from user where id= 1 or 1=1 delete from user where id=? 2写入数据库的数据要进行特殊字符的转义 3查询错误信息不要返回给用户,将错误记录到日志 //MySQL的其他安全设置 //1.定期做数据备份 //2.不给查询用户root权限,合理分配权限 //3.关闭远程访问数据库权限 //4.修改root口令,不用默认口令,使用较复杂的口令 //5.删除多余的用户 //6.改变root用户的名称 //7.限制一般用户浏览其他库 //8.限制用户对数据文件的访问权限 

20、定位SQL慢查询

//分析SQL查询慢的方法 //记录慢查询日志,分析查询日志,不要直接打开慢查询日志进行分析,这样比较浪费时间和精力, //可以使用 pt-query-digest工具进行分析 //使用 show profile //set profiling=1;开启,服务器上执行的所有语句会检测消耗的时间,存到临时表中 //show profiles //show profile for query临时表ID //使用 show status //show status会返回一些计数器, show global status查看服务器 //级别的所有计数 //有时根据这些计数,可以猜测出哪些操作代价较高或者消耗时间多 //使用 show processlist //观察是否有大量线程处于不正常的状态或者特征 //使用 explain(desc) 分析单条SQL语句 

21、SQL优化

a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。 c. mysql库主从读写分离。 d. 找规律分表,减少单表中的数据量提高查询速度。 e。添加缓存机制,比如memcached,apc等。 f. 不经常改动的页面,生成静态页面。 g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE. 

22、PDO连接MySQL实例

 
    $dbms='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $dbName='test'; //使用的数据库 $user='root'; //数据库连接用户名 $pass=''; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; try { 
     $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象 echo "连接成功
"
; /*你还可以进行一次搜索操作 foreach ($dbh->query('SELECT * from FOO') as $row) { print_r($row); //你可以用 echo($GLOBAL); 来看到这些值 } */ $dbh = null; } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "
"
); } //默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样: $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); ?>

23、数据结构和数据类型

数组,最简单而且应用最广泛的数据结构之一特性:使用连续的内存来存储、数组中的所有元素必须是相同的类型或类型的衍生(同质数据结构)、元素可以通过下标直接访问 链表,线性表的一种,最基本、最简单,也是最常用的数据结构特性:元素之间的关系是一对一的关系(除了第一个和最后一个元素,其他元素都是首尾相接)、顺序存储结构和链式存储结构两种存储方式。 栈,和队列相似,一个带有数据存储特性的数据结构特性:存储数据是先进后出的、栈只有一个出口,只能从栈顶部增加和移除元素 堆,一般情况下,堆叫二叉堆,近似完全二叉树的数据结构特性:子节点的键值或者索引总是小于它的父节点、每个节点的左右子树又是一个二叉堆、根节点最大的堆叫最大堆或者大根堆、最小的叫最小堆或者小根 线性表,由零个或多个数据元素组成的有限序列特性:线性表是一个序列、0个元素构成的线性表是空表、第一个元素无先驱、最后一个元素无后继、其他元素都只有一个先驱和后继、有长度,长度是元素个数,长度有限 双向链表 特性:每个元素都是一个对象,每个对象有一个关键字key和两个指针(next和prev) 队列 特性:先进先出(FIFO)、并发中使用、可以安全将对象从一个任务传给另一个任务 字典特性:关联数组、也被叫做字典或者键值对 图特性:通常使用邻接矩阵和邻接表表示、前者易实现但是对于稀疏 矩阵会浪费较多空间、后者使用链表的方式存储信息但是对于图搜 索时间复杂度较高 

24、MVC

MVC是一种架构模式,M(model)、V(view)、C(controller),model是模型层处理数据,view是视图层展示交互界面,controller是控制器层处理业务逻辑。

用户在视图层提交数据到控制器层,控制器层调用模型层的方法进行数据处理然后根据返回结果再进行不同的业务处理最后返回到视图层。

25、AOP思想

AOP面试切面编程,提取各个模块中可能重复操作的部分,权限认证,异常处理,日志记录等。

26、RESTful

restful api是rest在web接口的应用和延伸。轻量级、通常用json描述数据。请求是无状态的,一个请求不需要依赖于另一个请求。统一的错误返回处理。

27、数据结构和算法

常见的排序算法和查找算法以及相应的时间复杂度和空间复杂度要掌握,冒泡排序、快速排序、选择排序、二分查找等要能手写出来,还有一点常问的就是让你写某个算法并且改进该算法以及改进前后相应的时间复杂度。

这里我就不贴了,网上随手一搜太多了

28、项目

以上都是对你相应技术栈的能力考查,面试另外一个重点就是问你的项目。

简历上最好写两到三个项目,一个主项目,你最熟悉的,面试官可能会基于你的项目问你一些问题,也可能会让你自己阐述你的主要项目,在这个过程中一定要提前想好你主项目中的亮点,难点,这个是对于项目这一块最重要的。

29、其他建议

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/174081.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月27日 上午7:14
下一篇 2026年3月27日 上午7:15


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号