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

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

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($key,$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($arr1,$arr2);  合并两个或多个数组(相同的字符串键名,后面的覆盖前面的,相同的数字键名,后面的不会做覆盖操作,而是附加到后面)
array_merge_recursive($arr1,$arr2);   递归合并操作,如果数组中有相同的字符串键名,这些值将被合并到一个数组中去。如果一个值本身是一个数组,将按照相应的键名把它合并为另一个数组。当数组 具有相同的数组键名时,后一个值将不会覆盖原来的值,而是附加到后面

数组的差集
array_diff($arr1,$arr2);  返回差集结果数组\
array_diff_assoc($arr1,$arr2,$arr3);  返回差集结果数组,键名也做比较

数组的交集
array_intersect($arr1,$arr2);  返回交集结果数组\
array_intersect_assoc($arr1,$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的值)这个时候你读数组的话,只能这样写$array[1],$array[2]才能得到a的值;

(2)要是用mysql_fetch_array()  就返回array(a=>a的值,b=>b的值,c=>c的值)和 array1=>a的值,2=>b的值,3=>c的值)这个时候你读数组的话$array[1]$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语句

"👍点赞" "✍️评论" "收藏❤️"

大家的支持就是我坚持下去的动力!

如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,欢迎一起交流学习❤️❤️💛💛💚💚
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值