php面试题2022答案详细,PHP中高级面试题 – 第一天

php面试题2022答案详细目录

php面试题2022答案详细

PHP中高级面试题 – 第一天

php面试遇到的面试题

PHP中高级面试题 – 第二天

php面试题2022答案详细

    1. 解释什么是PHP,并说明它的主要特点。

    PHP是一种通用的开源脚本语言,主要用于Web开发。它嵌入在HTML中,并允许开发者编写动态生成的网页。PHP的主要特点包括易于学习、使用灵活、支持多种数据库、可扩展性等。

    2. 描述一下PHP中的变量类型。

    PHP中的变量类型主要有以下几种:

    - 标量类型:包括整型(integer)、浮点型(float)、布尔型(boolean)和字符串(string)。

    - 复合类型:包括数组(array)和对象(object)。

    - 特殊类型:包括null和资源(resource)。

    3. PHP中有哪些常见的流程控制语句?

    PHP中有以下常见的流程控制语句:

    - if语句:用于条件判断。

    - switch语句:用于多分支选择。

    - while语句:用于循环执行一段代码。

    - do-while语句:先执行一次代码块,然后进行条件判断,再循环执行。

    - for语句:用于循环次数已知的情况。

    - foreach语句:用于遍历数组或对象。

    - break语句:用于跳出循环或switch语句。

    - continue语句:用于跳过当前循环的剩余语句,进入下一次循环。

    4. 如何连接到MySQL数据库?

    ```php

    u003c?php

    $servername =

    // 创建连接

    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // 检查连接是否成功

    if (!$conn) {

     die( 如何执行SQL查询并获取结果?

    ```php

    u003c?php

    $servername = 数据库用户名

    $password =

    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // 检查连接是否成功

    if (!$conn) {

     die(qli_query($conn, conn));

    }

    // 遍历结果集并输出数据

    while ($row = mysqli_fetch_assoc($result)) {

     echo : ($result); // 释放结果集内存

    mysqli_close($conn); // 关闭数据库连接

    ?u003e

    ```

PHP中高级面试题 – 第一天

一、写一个函数,获取一篇文章内容中的全部图片,并下载

二、什么是 CSRF 攻击?XSS 攻击?如何防范?

CSRF:跨站请求伪造,可以通过通过判断来源和加 Token 的方式来防范。

XSS:跨站脚本攻击,可以通过对内容转义和过滤来防范,还有 CSP

三、应用中我们经常会遇到在 user 表随机调取 10 条数据来展示的情况,简述你如何实现该功能。

四、MYSQL 中主键与唯一索引的区别

主键:绝对不能有空值。

唯一索引:可以有空值

关键是 S 上。

六、两台 mysql 服务器,其中一台挂了,怎么让业务端无感切换,并保证正常情况下讲台服务器的数据是一致的

不是核心业务的话,先停写,把备机拉起来,查看两台机器的日志,进行数据补偿,开写。

如果是核心业务的话,现在所有的操作都在正常的状态机器上。

把好的这台机器的备机拉起来,当主机。

以上全是应急操作。

实际上数据库的容灾设计要复杂得多。

面试官要是问你,备机的数据不一致怎么办,你要勇敢怼回去,你们每秒多少写入操作。

按照百万级表,每秒 1000 的写入效率,正常的设计是,分布在 2 台机器上每台 500。

这个级别的数据同步,出现差异的概率 可以忽略不计的。

有一台出现问题,另一台也可以抗住。

(正常的操作,还是先停写,等数据一致,切换,开写。

我们公司搞这些切换都是在凌晨 4.00 左右,核心业务的每秒写操作,只有十几个。

前后耽搁不到 20 秒)。

七、10 瓶水,其中一瓶有毒,小白鼠喝完有毒的水之后,会在 24 小时后死亡,问:最少用几只小白鼠可以在 24 小时后找到具体是哪一瓶水有毒。

答案:四只

二进制问题。

薛定谔的老鼠。

一只老鼠有两个状态,死活,对应 01。

假设老鼠的个数为 A,则有 2^A>=10; A=4;

思路很简单,十瓶药编号:0,1,10,11….1001;

0 不喝。

第一只老鼠喝所有个位是 1 的:13579,第二只喝十位是 1 的,第三只和百位是 1 的,第四只喝千位是 1 的。

24 小时后,看下死了的是 1,活着的是 0。

按老鼠的顺序乖乖站好…… 假如第一只和第三只死了,那就是 0101,就是 5 有问题。

php面试遇到的面试题

面试题吗?有错吧?php 里边有 is_empty()方法吗?

改良版的代码如下

<?php

$a = '';

$b = "";

$c = null;

$d = array();

echo is_null($a)." _a1<br>";

echo is_null($b)." _a2<br>";

echo is_null($c)." _a3<br>";

echo is_null($d)." _a4<br>";

echo empty($a)." _b1<br>";

echo empty($b)." _b2<br>";

echo empty($c)." _b3<br>";

echo empty($d)." _b4<br>";

echo isset($a)." _c1<br>";

echo isset($b)." _c2<br>";

echo isset($c)." _c3<br>";

echo isset($d)." _c4";

测试的结果是

_a1

_a2

1 _a3

_a4

1 _b1

1 _b2

1 _b3

1 _b4

1 _c1

1 _c2

_c3

1 _c4

分析结果,自己看吧。

PHP中高级面试题 – 第二天

一、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即 P 点

二、从扑克牌中随机抽出 5 张牌,判断是不是一个顺子,即这5张牌是连续的

这个问题有个关键点,扑克牌,1-13 不能再多了。

这就很简单了。

用PHP来做,定义一个数组分别存着1到13, 拿出一个,置空一个,最后看下这五个置空的 是不是连续的。

这种情况不考虑抽出的顺序。

三、说一下 PHP 的(内存)垃圾回收机制

每一个变量对应一个 zval 数据结构,在该结构内还有一个 val 结构体,该结构体内有一个引用计数(php7 而言,对于 php5,这个引用计数是保存在 zval 结构中的),标识该对象的引用数,当对象的引用计数为 0 时代表这个对象可被回收。

对象的 refcount 减少的时机:修改变量、函数返回(释放局部变量)、unset 变量

对于数组和对象而言,可能存在变量中的成员引用变量本身的情况,也就是循环引用,这样会造成这个变量永远不会被内存回收,而成为垃圾。

PHP 里对于这种情况给出了垃圾回收机制:如果数组、对象的引用计数减少而且不为零,则认为他们可能是垃圾,把他们放到垃圾收集器里。

等垃圾收集器到了一定的数量之后,进行垃圾处理:对所有可能的垃圾 refcount 减 1,如果为 1,说明是垃圾,则进行内存回收;如果不为 1,说明还有其他变量在使用,refcount 重新加 1;这种对象复用以及垃圾回收机制在其他语言中也有体现:redis 中也使用了引用计数表示每个对象的引用数量。

四、简述一下PHP短信验证码如何防刷?

1、时间限制:60 秒后才能再次发送

从发送验证码开始,前端(客户端)会进行一个 60 秒的倒数,在这一分钟之内,用户是无法提交多次发送信息的请求的。

这种方法虽然使用得比较普遍,但是却不是非常有用,技术稍微好点的人完全可以绕过这个限制,直接发送短信验证码。

3、短信验证码限制:30 分钟之内发送同一个验证码

网上还有一种方法说:30 分钟之内,所有的请求,所发送的短信验证码都是同一个验证码。

第一次请求短信接口,然后缓存短信验证码结果,30 分钟之内再次请求,则直接返回缓存的内容。

对于这种方式,不是很清楚短信接口商会不会对发送缓存信息收取费用,如果有兴趣可以了解了解。

4、前后端校验:提交 Token 参数校验

这种方式比较少人说到,个人觉得可以这种方法值得一试。

5、唯一性限制:微信产品,限制同一个微信 ID 用户的请求数量

如果是微信的产品的话,可以通过微信 ID 来进行识别,然后对同一个微信 ID 的用户限制,24 小时之内最多只能够发送一定量的短信。

6、产品流程限制:分步骤进行

7、图形验证码限制:图形验证通过后再请求接口

用户输入图形验证码并通过之后,再请求短信接口获取验证码。

为了有更好的用户体验,也可以设计成:一开始不需要输入图形验证码,在操作达到一定量之后,才需要输入图形验证码。

具体情况请根据具体场景来进行设计。

8、IP 及 Cookie 限制:限制相同的 IP/Cookie 信息最大数量

使用 Cookie 或者 IP,能够简单识别同一个用户,然后对相同的用户进行限制(如:24 小时内最多只能够发送 20 条短信)。

然而,Cookie 能够清理、IP 能够模拟,而且 IP 还会出现局域网相同 IP 的情况,因此,在使用此方法的时候,应该根据具体情况来思考。

9、短信预警机制,做好出问题之后的防护

以上的方法并不一定能够完全杜绝短信被刷,因此,我们也应该做好短信的预警机制,即当短信的使用量达到一定量之后,向管理员发送预警信息,管理员可以立刻对短信的接口情况进行监控和防护。

五、mySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据

相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。

redis 提供 6 种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db [i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db [i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db [i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db [i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db [i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

(随机推荐阅读本站500篇优秀文章点击前往:500篇优秀随机文章)
来源:本文由易搜IT博客原创撰写,欢迎分享本文,转载请保留出处和链接!