都2023年了这些PHP基础面试题还有用吗?精选21_30题去背吧!

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: PHP基础面试题集合

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

111.png

21.isset (),empty () 的区别

isset():
若变量不存在则返回 FALSE 
若变量存在且其值为NULL,也返回 FALSE 
若变量存在且值不为NULL,则返回 TURE 
同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE 

empty():
若变量不存在则返回 TRUE
若变量存在且其值为""0"0"NULL、、FALSEarray()var $var; 以及没有任何属性的对象,则返回 TURE\
若变量存在且值不为""0"0"NULL、、FALSEarray()var $var; 以及没有任何属性的对象,则返回 FALSE

22.六大设计原则(接 14 点设计模式)

.单一职责原则:一个类只负责一个职责。

.开闭原则:一个软件实体比如类-模块-函数,应该对扩展开放,对修改关闭。

.里氏替换原则:所有引用基类的地方必须透明地使用其子类的对象,
子类必须完全实现父类的方法,可以拓展自己的方法和属性,
即子类可以扩展父类的功能,但是不能改变父类的原有功能。

.迪米特法则:一个对象应该对其他对象保持最少的了解。

.接口隔离原则:类间的依赖应该建立在最小的接口上。

.依赖倒置原则:高层模块不应该依赖底层模块,二者应该依赖其抽象;
抽象不应该依赖细节;细节应该依赖抽象;

23.开发中应该注意哪些安全机制

1.PHP配置
2.Sql注入,
3.Xss攻击(cross site script 跨站脚本),
4.盗链,
5.CSRF(跨站请求伪造cross site request forgery),
6.CC(是利用不断对网站发送连接请求致使形成拒绝服务的目的)

24.memcache 和 Redis 的区别

数据结构:memcache仅支持简单的key-value形式,Redis支持的数据更多(string字符串,set集合,list列表,hash散列,zset有序集合);
多线程:memcache支持多线程,Redis支持单线程
持久化:Redis支持持久化,memcache不支持持久化
分布式:Redis做主从结构,memcache服务器需要通过hash一致化来支撑主从结构

1.  Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcache相比一个最大的区别。
2.  Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcache只是简单的K/V缓存。
3.  他们的扩展都需要做集群;实现方式:master-slave、Hash。
4.  在100k以上的数据中,Memcache性能要高于Redis。
5.  如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcache。当然,这和你的应用场景和数据特性有关。
6.  如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcache都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
7.  Redis和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强

25.PHP常用的数组函数

数组的键名和值:
array_values($arr);  获得数组的值
array_keys($arr);  获得数组的键名
array_flip($arr);  数组中的值与键名互换(如果有重复前面的会被后面的覆盖)
in_array("apple",$arr);  在数组中检索apple
array_search("apple",$arr);  在数组中检索apple ,如果存在返回键名
array_key_exists("apple",$arr);  检索给定的键名是否存在数组中
isset($arr[apple]):   检索给定的键名是否存在数组中

数组的内部指针:
current($arr);  返回数组中的当前单元\
pos($arr);  返回数组中的当前单元\
key($arr);  返回数组中当前单元的键名\
prev($arr);  将数组中的内部指针倒回一位\
next($arr);  将数组中的内部指针向前移动一位\
end($arr);  将数组中的内部指针指向最后一个单元\
reset($arr;  将数组中的内部指针指向第一个单元\
each($arr);  将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位\
list({
   mathJaxContainer[0]}value)=each($arr);  获得数组当前元素的键名和值

数组的排序:
1.通过元素值对数组排序:
sort($arr);  由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序\
rsort($arr);  由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序\
usort($arr,"function");  使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序\
asort($arr);  由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序\
arsort($arr);  由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序\
uasort($arr,"function");  使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序

2.通过键名对数组排序
ksort($arr);  按照键名正序排序\
krsort($arr);  按照键名逆序排序\
uksort($arr,"function");  使用用户自定义的比较函数对数组中的键名进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)

数组的合并:
array_merge({
   mathJaxContainer[1]}arr2);  合并两个或多个数组(相同的字符串键名,后面的覆盖前面的,相同的数字键名,后面的不会做覆盖操作,而是附加到后面)
array_merge_recursive({
   mathJaxContainer[2]}arr2);   递归合并操作,如果数组中有相同的字符串键名,这些值将被合并到一个数组中去。如果一个值本身是一个数组,将按照相应的键名把它合并为另一个数组。当数组 具有相同的数组键名时,后一个值将不会覆盖原来的值,而是附加到后面

数组的差集
array_diff({
   mathJaxContainer[3]}arr2);  返回差集结果数组\
array_diff_assoc({
   mathJaxContainer[4]}arr2,$arr3);  返回差集结果数组,键名也做比较

数组的交集
array_intersect({
   mathJaxContainer[5]}arr2);  返回交集结果数组\
array_intersect_assoc({
   mathJaxContainer[6]}arr2);  返回交集结果数组,键名也做比较

其他:
extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值
compact(var1,var2,var3);compact() 函数创建包含变量名和它们的值的数组。
array_slice($arr,0,3);  可以将数组中的一段取出,此函数忽略键名
array_push($arr,"apple","pear");  将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数\
array_pop($arr);  将数组栈的最后一个元素弹出(出栈)

26. 大致说出浏览器通过 URL 访问的原理流程

1.键盘或触屏输入URL并回车确认
2.URL解析/DNS解析查找域名IP地址
3.网络连接发起HTTP请求
4.HTTP报文传输过程
5.服务器接收数据
6.服务器响应请求/MVC
7.服务器返回数据
8.客户端接收数据
9.浏览器加载/渲染页面
10.打印绘制输出

27. 常见的负载均衡方案

1.基于DNS的负载均衡
2.基于四层交换技术的负载均衡
3.基于七层交换技术的负载均衡
4.四层+七层负载结合方案

28. mysql_fetch_row () 和 mysql_fetch_array () 的区别

mysql_fetch_row() 从和结果标识 data 关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSEmysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。

解释:
(1)如果你的表里面有字段a,b,c那么你用mysql_fetch_row()  就返回array1=>a的值,2=>b的值,3=>c的值)这个时候你读数组的话,只能这样写{
   mathJaxContainer[7]}array[2]才能得到a的值;

(2)要是用mysql_fetch_array()  就返回array(a=>a的值,b=>b的值,c=>c的值)和 array1=>a的值,2=>b的值,3=>c的值)这个时候你读数组的话{
   mathJaxContainer[8]}array[a]都能得到a的值

29.如何保障代码在多个 PHP 版本中可以正常运行解决方案

通过修改nginx配置文件的fastCGI,监听不同端口,从而选择不一样的版本。

30.分析 MySQL 查询慢的原因

.查看慢查询日志
.通过pt-query-digest工具分析
.设置set profiling = 1;开启服务,执行show profile。查看所有语句会监测消耗时间存到临时表
.找到消耗时间大的ID,执行show profile for query 临时表ID
.使用show status,show processlist 等命令查看
.使用explain分析单条SQL语句
相关文章
|
9月前
|
PHP Python
最新【Python】 实现循环最快的方式_python while循环加速,2024年最新阿里php面试题
最新【Python】 实现循环最快的方式_python while循环加速,2024年最新阿里php面试题
|
5月前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
72 10
|
9月前
|
程序员 PHP Python
2024年Python最全Python基础教程:keys()、values()和 items()方法,百度面试题php
2024年Python最全Python基础教程:keys()、values()和 items()方法,百度面试题php
2024年Python最全Python基础教程:keys()、values()和 items()方法,百度面试题php
|
设计模式 算法 关系型数据库
|
9月前
|
PHP
PHP 面试常见对比
PHP 面试常见对比
53 0
|
存储 缓存 NoSQL
PHP面试题目搜集
搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记。 曾经看过数据结构、设计模式、HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘记了。
PHP面试题目搜集
|
1天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
40 25
|
3月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
112 0
|
2月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####

热门文章

最新文章