PHP高级面试题

article/2025/11/5 23:35:01

  

其实最近还在职,不过处于辞职交接状态,就挂了简历,但是没投。看到有邀约的,就和自己高度匹配的几家面试了,陆续拿到了几个offer。回忆一波面试题。按照类别来分了,因为有些也忘了是那次面试的,列的都是印象比较深刻的题目,有些忘了。如果回答错了,欢迎纠正补充。(更多:php面试题汇总)

mysql

1.谈谈你在写sql语句需要注意有哪些点?

答:

1、select * 问题,客户端需要什么,就给什么,不要给多余的字段,这种情况可能还会导致本来可以走覆盖索引的语句不能走覆盖索引。
2、不要在查询语句字段上做函数运算,这样会让索引失效。
3、一定要避免mysql自动类型转换,比如 where ‘9’ =9。
4、能不设置允许 null 的字段尽量不要设置,因为 null 会导致 mysql 多一层判断。
5、使用 like 的时候如果是通配符  % 在最前面的话也会走的全表扫描。
欢迎补充。

2.你刚才一直在提索引,把你知道的关于索引的一些技巧说下

答:

1、要在区分度高的字段上建立索引,否则索引意义不大。
2、字符串建立索引要注意大小,索引长度过长,占用的空间也就越大,适当的可以截取进行索引,缺点是不能使用到覆盖索引,具体根据业务合理安排。
3、建立联合索引要知道最左前缀原则,举个例子( name, email, phone ),最终能走这个联合索引的一定只会是 ( name ),( name, email ),( name, email, phone ),其他只能走全表,需要根据业务合理设置联合索引的顺序。

3.索引底层是什么数据结构?

答:B+树。

4.为什么用的是B+树,不能使用红黑树或者其他的?

答:可以使用红黑树。但是这样的话可能会造成树的高度过高,意味着相同查询下,会进行更多的磁盘I/O,影响性能,而 B+ 树可以保持树的高度不至于过高。这道题答得不是很好,不仅仅是这样,欢迎补充。

5.你知道索引下推吗?

本质上是对普通索引需要回表的一种优化,也就是引擎层在对索引指针遍历的过程中,先做一些优先的判断,过滤掉不符合条件的,可以减少磁盘IO。

6.假设现在有人操作数据库,不小心执行错了语句,误删除了很多数据,这时候能恢复吗?咋么恢复。

答:首先,一定要开启 bin-log ,如果没有开启的话,可能就恢复不了。要看具体的文件系统是否能恢复。开启了 bin-log ,类型设置要设置成 row 或者 mixed ,不能设置 statement 。然后,如果是误删行的话,就可以把里面对应的删除事件换成插入事件,在备用库上执行。如果是误删表的话,可以先获取最近的一次全量备份,放到备库,然后拿出 bin-log , 除了不执行删除的事件,其他事件依次重放。

7.为什么不能设置成 statement ?

答:设置成 statement ,实际 bin-log 存储的是 sql 语句( 非具体删除的主键id ),这样如果是主从架构的话,主和从可能因为选择的索引不一样而导致主从不一致。

8.你刚才说到主从,那你说说主从运行的机制吧

答:首先主库还是要开启 bin-log , 从库先设置要连接的主库 change master…… 然后执行 start slave,这时候从库会创建两个线程,一个 io_thread ,主要负责连接主数据库。一个sql_thread 主要是负责执行中转日志语句。首先,主库接收到从库的同步请求,根据传递的 bin-log 文件名和开始同步的位置,发送二进制文件给从库,从库 io_thread 负责把接收到的数据放入到中转日志,然后 sql_thread 负责从中转日志读取解析执行,执行完成,更新同步的位置标志。

9.你知道主从延迟吗?有些时候延迟的时间还会很长。遇到这种情况咋么办?

答:这种问题,注意了。划重点。问你出现问题,寻找解决方案的时候,一定要对症下药,也就是说这个问题你可以这样考虑,什么情况下导致的主从延迟。
1、如果主库和从库服务器配置不一样,从库的差点,那么就可能导致延迟时间加长。这时候,换成相同的服务器配置服务器即可。
2、从库压力太大了。一般主从了,从库基本用来查询,比如可能运营或者开发者自己都在从库上进行一系列的 sql 操作。那简单呗。多配几个从库,分摊压力,一主多从。
3、大事务。比如 delete 这种语句 不 limit 限制一下,如果数据量过大,导致主库运行时都花费了长时间,再同步到从库,这个时间间隔过长。

设计模式

你知道哪些设计模式,你平常有使用到吗?可以结合你的业务场景说下吗?

答 这里我先举例平常使用 Laravel,里面就用到大量设计模式,比如门面,组合,装饰,观察者…… 具体场景带入,然后根据之前业务上的场景说了下……., 最后也说了设计模式不是银弹,只有在合适的场景使用合适的模式才能体现它的价值。

手写算法

给定一个已排序的数组和一个指定值,返回指定值在数组中的下标位置,如果不存在,返回把给定值插入到数组之后的下标位置。注意时间复杂度。

比如给定有序数组 [1,3,5,6] 给定值5.那么返回下标2.
给定有序数组[1,3,5,6] 给定值 7,返回下标4.

答:

    function searchInsert($nums, $target) {if (!count($nums))  return 0;$l=0;$r = count($nums)-1;while ($l <= $r){$middle = $l + (($r - $l) >> 1);if ($nums[$middle] == $target) return $middle;if ($nums[$middle] < $target){$l = $middle+1;}else{$r = $middle-1;}    }return $l;}

典型的可以使用二分,时间复杂度 O(log2n)。空间复杂度O(1)。

网络

1.传输层主要有哪些协议?

答:主要有 TCP 和 UDP 协议。他们的区别是 TCP 是需要连接的 会经过三次握手,而且可以保证消息的可靠性。UDP 是不需要连接的,不保证消息的可靠性。

2.你能大体说说 TCP 的三次握手吗?

答:首先服务器监听某个端口,客户端发起请求 携带syn数据包(第一次),服务端接收到这个数据包,返回 syn/ack 的数据包给客户端(第二次),最后客户端再次发送一个 ack 的数据包(第三次)。

4.为什么需要三次握手?

答:主要是为了确认双方接收是否正常。
第一次:客户端什么都不能确认。服务端能确认客户端的发送正常,自己的接收正常
第二次:客户端能确认自己的发送和接收正常,服务端的发送和接收正常。服务端能确认自己接收正常,客户端的发送正常。
第三次:全部都能确认了。

并发

假设现在有多个入口可以同时使用一个账户操作,这个账户只有十块钱,有哪些方法可以使得不超扣消费?开放性题目,只要能解决问题的就是好方案,没有唯一答案。

答:mysql:可以直接 where amount>=current_amount and amount>0 …… , 或者悲观锁 for update。redis:lua 脚本。php 层面可以利用文件锁,还可以使用队列的特性,只有一个消费的出口。

设计

如果我们公司有很多项目都有登录的功能,咋么设计?

答:需要把这个登录单独抽出来作为一个模块开发,类似于登录中心,所有的其他子系统登录都需要从这个系统中认证。

其他

1.看你项目里说到使用过swoole,也写点go,你可以说说他们协程上的区别吗?

答:设计上他们是一样的,主要区别在于,协程调度器模式。swoole 的协程调度器是单线程,go 的协程调度器是多线程。这就意味着,同一时刻 swoole 只有一个协程在运行,而 go 同一时刻可以多个协程在运行。所以在 swoole 协程中不需要对全局变量进行加锁。而且 swoole 本质是单线程多进程的,意味着它没有超全局的变量,仅仅是进程级别变量。而 go 多线程,多线程必然会存在临界变量锁的问题。当然,go 也提供了开箱即用的 sync 读写锁,或者你也可以直接使用通道来代替。

2.你可以说说 go 的 gmp 调度模型吗?

答:巴拉巴拉半天,自己都觉得没说清楚,好吧,我不是很了解。此时猜测面试官心里,早说不知道不就完事了吗

3.说说你们这个项目最难的点是哪个地方,你是咋么解决的?

那就要看你自己对项目的掌握程度以及这个项目的含金量了。

以上就是新鲜出炉的PHP高级面试题来啦!【附答案】的详细内容,更多请关注考高分网其它相关文章!

文章转自:新鲜出炉的PHP高级面试题来啦!【附答案】_PHP-考高分网 


http://chatgpt.dhexx.cn/article/gkDIPDcL.shtml

相关文章

unity下载与安装

1、到官网下载unity&#xff1a;unity.cn/releases 2、双击下载好的文件 3、点击next 4、点击accept&#xff0c;点击next 6、点击next 7、设置安装目录&#xff0c;点击next 8、等待安装完成 9、点击finish 10、双击运行桌面图标“unity”&#xff0c;登录在官网注册的账号 11…

Unity(一)入门:Unity Hub下载 Unity安装

一. 下载Unity Hub Unity官网下载 Unity Hub :https://unity.cn/releases 先注册&#xff0c;登录 点击如下图的链接 下好安装后快捷方式如下图&#xff1a; 运行Unity Hub&#xff0c;获得个人使用的授权&#xff0c;再依次点击左侧菜单栏的安装->右上方的安装&#xf…

unity3d的下载与安装

unity的下载 打开浏览器输入unity3d.com/cn&#xff0c;即可进入unity3d的中文官网。然后我们就可以看到下图&#xff1a; 点击红色标注的“获取UNITY5"的按钮&#xff0c;会进入到下一个界面&#xff0c;如图&#xff1a; 可以看到unity提供了两个版本供大家选择&#xf…

Unity游戏开发工具的下载与安装

Unity游戏开发工具 Visual Studio下载UnityHub的下载 Visual Studio下载 打开网址https://visualstudio.microsoft.com/zh-hans/vs/unity-tools/ 点击下载VisualStudio Community 2022版本 下载后记得勾选Unity游戏开发 下载完毕后重启电脑应该就OK啦 UnityHub的下载 打开…

关于Unity Hub中安装Unity失败的解决办法

一、写在前面 相信很多朋友在安装Unity进行游戏开发时&#xff0c;都会选择使用Unity Hub安装Unity以对不同版本的Unity进行管理。同时Hub可以管理Unity Editor的多个安装及其关联组件、创建新项目以及打开现有项目。 本文记录了博主安装Hub和Unity的过程&#xff0c;以及遇到U…

unity和unityhub安装步骤+新建项目

unity安装 如果没有账号&#xff0c;用邮箱注册一个即可。 下载一般版本即可&#xff0c;因为最新版本遇到的问题不好解决。 下载之后双击UnitySetup64.exe。然后一直next(注意安装的位置最好安装在一个文件夹下面)。如果有协议就agree即可。安装完之后就会有一个Editor文件…

Unity入门(一)——Unity的安装与相关环境配置

大家好&#xff0c;最近我打算入门Unity&#xff0c;也在网络找了一些教程进行学习&#xff0c;现在就由我为大家分享一下自己的学习过程&#xff0c;也作为入门Unity的学习记录。 安装与环境配置&#xff1a;unity官网 Unity官网下载 下载并安装Unity Hub&#xff0c;然后在un…

一、Unity环境安装

目录 一、Unity Hub下载与安装二、Unity Editor安装三、Visual Studio 2022下载与安装 一、Unity Hub下载与安装 UnityHub下载地址https://unity.cn/ UnityHub安装&#xff1a;同意 -> 默认 -> 下一步 -> 即可 默认路径&#xff1a;C:\Program Files\Unity Hub Uni…

2021Unity安装教程:如何安装Unity Editor?

2021Unity安装教程&#xff1a;如何安装Unity Editor? 前言&#xff1a;在安装Unity Editor之前&#xff0c;需要先进行UnityHub安装和激活。 没有UnityHub软件的话&#xff0c;需要先去Unity官网下载和激活软件&#xff0c;操作方法可以分别参考我之前写的2篇笔记。 下面是…

入门级Unity安装教程

这是一篇面向对unity感兴趣&#xff0c;想要学习unity&#xff0c;但是还处于入门阶段的小伙伴的超详细unity安装教程。因为是面向入门的小伙伴&#xff0c;所以文章写的有点长&#xff0c;还配有许多图片&#xff0c;这样才能更详细的介绍安装流程。但是不必担心太长看起来太费…

1. Unity的下载与安装

1. 下载 Unity Hub: unity hub是unity编辑器的一个管理工具,负责平时的unity项目创建和管理,以及unity编辑器的安装等 首先在unity官网网址链接,点击左下角的DownLoad Unity图标,如下图: 进入下一个页面,继续点击 DownLoad for Windows 按钮,即可下载 unityhubsetup.e…

Unity安装笔记

下载Unity Hub Hub的作用是方便管理不同版本的Unity和项目。 Unity中国官网地址&#xff1a;Unity实时内容开发平台 - 3D、2D、VR & AR可视化 | Unity中国官网。进入官网&#xff0c;注册用户并登录。 点击右上角下载Unity。下滑页面&#xff0c;找到下载Unity Hub&…

Unity下载安装及许可证获取教程

Unity是实时3D互动内容创作和运营平台。 首先明确unity需下载两个东西&#xff1a;unityHub&#xff08;管理器&#xff09;和unity。 先下载unityHub&#xff0c;官网下载地址&#xff1a;https://unity.com/unity-hub 下载安装过程如下&#xff1a; 1.先在unity注册账号并登…

Unity安装包下载及安装教程

在安装Unity之前&#xff0c;先说明一下Unity的版本&#xff0c;Unity5.x版本以后&#xff0c;取消了以数字命名的版本规则&#xff0c;而采用年份来表示&#xff0c;例如Unity2017..x,Unity2018.x.此外&#xff0c;Unity公司还宣布了Unity全新的版本发布技术&#xff0c;包括技…

Unity快速安装教程

本教程安装的是免费版本&#xff0c;也就是社区版 目录 下载安装Unity Hub 安装Unity编辑器 添加编辑器模块 第一步 下载安装Unity Hub 前往官网&#xff1a;https://unity.cn/releases 先注册Unity账号&#xff0c;这是必做的步骤&#xff0c;没有Unity账号接下来很难操作…

Unity 安装个人免费版步骤详解

Unity Hub的下载与安装 1、进入Unity官网&#xff0c;滑动到最底部&#xff0c;点击“所有版本”&#xff1a; 2、进入Unity的下载页面&#xff0c;找到对应的版本&#xff0c;点击“从Hub下载”&#xff1a; 3、弹出系统选择提示框&#xff0c;根据自己的系统点击对应的按钮&…

Unity下载安装详细教程

文章目录 一、下载二、安装过程三、声明 一、下载 公众号&#xff1a; 发送&#xff1a;unity 二、安装过程 下载好后解压&#xff1a; 右键&#xff0c;管理员身份运行&#xff1a; 注意&#xff1a;安装路径中不能有中文 等待几分钟… 回到开始解压的文件夹&…

【Unity入门】软件Unity Hub和Unity的安装和简单尝试

目录 软件准备&#xff1a; 下载Unity Hub和需要的Unity Unity Hub配置&#xff1a; Unity3D配置&#xff1a; 开始新建项目&#xff1a;​ 简单尝试&#xff1a; 简易Demo&#xff1a; ①先认识场景的创建工具&#xff1a; ​ ②创建场景对象 ③根据自己的需求创建对…

Unity下载安装教程

目录 01、安装Unity Hub 001、打开Unity中文官网 002、点击下载Unity 003、点击下载Unity Hub 004、 双击打开安装包进行安装 ​编辑 005、点击我同意 006、选择安装路径&#xff0c;然后安装 02、安装Unity 001、打开Unity Hub,打开偏好设置 002、选择安装&#xff0…

unity的安装教程

最近领导安排我做一个高精地图模型&#xff0c;还得开源软件&#xff0c;所以在网上找到了unity这个软件&#xff0c;下面就让我带大家一起安装&#xff01; 2.大家下载的时候不要点击所有版本&#xff0c;这样下载的软件不稳定&#xff0c;运行存在一定难度。 文章目录 一、准…