php开发工程师面试题知识点总结(一)「建议收藏」

php开发工程师面试题知识点总结(一)

大家好,又见面了,我是全栈君。

1.PHP 优先级

$a = 0;
$a = (2 > 2) ? 2 : 3 ? $a++ : --$a;
//解析:( false ? 2 : 3) ? $a++ : --$a
//  3 ? $a++ : --$a
var_dump($a);//0
echo "<br>";
 
$a = (2 > 2) ? 2 : 3 ? ++$a : --$a;
var_dump($a);//1
 
echo "<br>";
$a = true ? 0 : true ? 1 : 2;// (true ? 0 : true) ? 1 : 2 = 2 左结合
var_dump($a);//0
 
 
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5  右结合
 
$a = 1;
echo $a + $a++; //3

优先级详情:https://www.php.net/manual/zh/language.operators.precedence.php

2.从mysql 数据库中随机取出一条记录

方法1:

select * from 表名 order by rand( ) limit 1;  //此处的1就是取出数据的条数

但这样取数据网上有人说效率非常差的,那么要如何改进呢

搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。

方法2:

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

php开发工程师面试题知识点总结(一)「建议收藏」但是这样获得的是5条连续的记录。解决办法只能是每次查询一条,查询5次,但这个又不能满足我的要求了,我要一次找几条

方法3: 高效写法

SELECT * FROM user  WHERE userId >= ((SELECT MAX(userId) FROM user )-(SELECT MIN(userId) FROM user )) * RAND() + (SELECT MIN(userId) FROM user )  LIMIT 5

php开发工程师面试题知识点总结(一)「建议收藏」个人感觉:方法3和方法2区别不大.

php开发工程师面试题知识点总结(一)「建议收藏」

3.用php写一段代码,实现不适用第3个变量,变换$a,$b的值,$a,$b初始值自己定

方法1:简洁易懂 ,没得说,顶上

list($a, $b) = array($b, $a);

方法二:两个变量必须是数字

$a=5; $b=7;
$a = $a + $b;
$b = $a - $b;
$a = $a - $b;
echo $a,$b;//7 5

方法3:(这个就比较有限制,必须用一个两个字符串都都不能出现的字符做为分隔符) 

$a = $b.','.$a ;
$a = explode(',', $a);
$b = $a[1];
$a = $a[0];

方法4:可能存在编码问题

$a = $a . $b;
$b = strlen( $b );
$b = substr( $a, 0, (strlen($a) - $b ) );
$a = substr( $a, strlen($b) );

方法5:两个变量的长度必须一样

$a = $a^$b;
$b = $b^$a;
$a = $a^$b;

4.char/varchar 区别,谁的存储速度快,为何?

一.数据存储开销

1.char(n) 是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。

在程序中,会返回给你8位,后面的用空格补上;

在数据库中,char(8),占用16个字节(1个字符=2个字节);

2.varchar(n) 是长度为 n 个字节的可变长度且非 Unicode 的字符数据。n必须是一个介于1和 8000之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

二.插入数据

1.char列的NULL值占用存储空间。

varchar列的NULL值不占用存储空间。

插入同样数量的NULL值,varchar列的插入效率明显高出char列。

插入不为null的数据时,无论插入数据涉及的列是否建立索引,varchar列的插入效率也是明显高出char列。

三.更新数据

如果更新的列上未建立索引,则char的效率低于varchar,但效率差异不大。

如果更新的列上建立索引,则char的效率低于varchar,并且效率差异很大。

四.修改结构

无论增加或删除的列的类型是char还是varchar,操作都能较快的完成,而且效率上没有什么差异。

对于增加列的宽度而言,char与varchar有非常明显的效率差异,varchar列基本上不花费时间,而修改char列需要花费很长的时间。

五.数据检索

无论是否通过索引,varchar类型的数据检索略优于char的扫描。

那实际开发中,我们使用哪种呢?

当确定字符串为定长、数据变更频繁、数据检索需求少时,使用char;

当不确定字符串长度、对数据的变更少、查询频繁时,使用varchar。

5.解释什么是队列(queue),栈(stack),有何区别,php哪些数组结合可以实现队列和栈?

栈(Stack)和队列(Queue)是两种操作受限的线性表。

php开发工程师面试题知识点总结(一)「建议收藏」

栈与队列的相同点

1.都是线性结构。

2.插入操作都是限定在表尾进行。

3.都可以通过顺序结构和链式结构实现。、

4.插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。

5.多链栈和多链队列的管理模式可以相同。

栈与队列的不同点

1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。

2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。

3.顺序栈能够实现多栈空间共享,而顺序队列不能。

PHP实现栈和队列:

array_shift : 删除数组中首个元素,并返回被删除元素的值。

array_unshift : 在数组开头插入一个或多个元素。

array_pop:删除数组的最后一个元素(出栈)。

array_push:将一个或多个元素插入数组的末尾(入栈)。

php开发工程师面试题知识点总结(一)「建议收藏」

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

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

(0)
上一篇 2022年2月12日 上午11:00
下一篇 2022年2月12日 下午12:00


相关推荐

  • idea 设置导入包不带*

    idea 设置导入包不带*

    2021年5月16日
    209
  • sigsuspend用法

    sigsuspend用法include include includevoidm op int main nbsp nbsp nbsp nbsp nbsp nbsp nbsp sigset tnew mask nbsp nbsp nbsp nbsp nbsp nbsp nbsp structsigact nbsp nbsp nbsp nbsp nbsp nbsp nbsp sigemptyset amp act sa mask nbsp nbsp nbsp nbsp nbsp nbsp nbsp act sa flags 0 nbsp nbsp nbsp nbsp nbsp nbsp nbsp act sa h

    2026年3月18日
    2
  • git更改用户名邮箱_公司给了个git账号怎么配置

    git更改用户名邮箱_公司给了个git账号怎么配置我们可以先查看一下git的配置列表:gitconfig–list1.查看用户名和邮箱地址gitconfiguser.namegitconfiguser.email2.修改全局用户名和邮箱地址:gitconfig–globaluser.name”username111″gitconfig–globaluser.email”email111″3.修改局部用户名和邮箱地址:cd~/youproject…

    2025年9月26日
    15
  • pytorch 学习 | 全局平均池化 global average pooling

    版权声明:本文为CSDN博主「qyhyzard」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/CVSvsvsvsvs/article/details/90495254利用现有的poolingAPI实现全局平均池化的效果。首先我们简单理解全局平均池化操作。如果有一批特征图,其尺寸为[B,C,H,W],我们经过全局平均池化之后,尺寸变为[B,C,1,1]。也就是说,全局平均池化…

    2022年4月11日
    657
  • UCOSii源文件概要

    UCOSii源文件概要ucosII 文件概要

    2026年3月18日
    2
  • 添加网页背景音乐的两种方法是什么_html怎么添加背景音乐

    添加网页背景音乐的两种方法是什么_html怎么添加背景音乐为网页添加背景音乐的方法一般有两种,第一种是通过普通的标签来添加,另一种是通过标签来添加 1.其中,loop=”-1″表示音乐无限循环播放,如果你要设置播放次数,则改为相应的数字即可2.。 第一种方法当页面打开时音乐播放,如果将页面最小化以后播放音乐会自动暂停,第二种方法则不会出现这种情况,只要不将窗口关闭,它会一直播放 ■  :    是用以插入背景音

    2025年12月3日
    4

发表回复

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

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