(大神整理的php面试题)(php经典面试题及答案)

1、给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形。

勾股定理,矩形是对角线相等的四边形。只要任意三点不在一条直线上,任选一点,求这一点到另外三点的长度的平方,两个短的之和如果等于最长的,那么这就是矩形。

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

(大神整理的php面试题)(php经典面试题及答案)

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

(大神整理的php面试题)(php经典面试题及答案)

4、获取当前客户端的 IP 地址,并判断是否在

(大神整理的php面试题)(php经典面试题及答案)

如果没有使用代理服务器

(大神整理的php面试题)(php经典面试题及答案)

使用透明代理

(大神整理的php面试题)(php经典面试题及答案)

5、nginx 的 log_format 配置如下

(大神整理的php面试题)(php经典面试题及答案)

从今天的 nginx log 文件 access.log 中:

a、列出 “request_time” 最大的 20 行?

b、列出早上 10 点访问量做多的 20 个 url 地址?

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

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

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

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

(大神整理的php面试题)(php经典面试题及答案)

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

这个问题有个关键点,扑克牌,1-13 不能再多了。这就很简单了。用 PHP 来做,定义一个数组分别存着 1 到 13, 拿出一个,置空一个,最后看下 这五个置空的 是不是连续的。这种情况不考虑抽出的顺序。

9、两条相交的单向链表,如何求它们的第一个公共节点

思想:

如果两个链表相交,则从相交点开始,后面的节点都相同,即最后一个节点肯定相同;

从头到尾遍历两个链表,并记录链表长度,当二者的尾节点不同,则二者肯定不相交;

尾节点相同,如果 A 长为 LA,B 为 LB,如果 LA>LB, 则 A 前 LA-LB 个先跳过

如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的 m_pNext 都指向同一个结点。但由于是单向链表的结点,每个结点只有一个 m_pNext,因此从第一个公共结点开始,之后它们所有结点都是重合的,不可能再出现分叉。所以,两个有公共结点而部分重合的链表,拓扑形状看起来像一个 Y,而不可能像 X。

10、最长公共子序列问题 LCS,如有 [1,2,5,11,32,15,77] 和 [99,32,15,5,1,77] 两个数组,找到它们共同都拥有的数,写出时间复杂度最优的代码,不能用 array_intersect(这里有坑,需要去研究一下动态规划)。

11、linux 的内存分配和多线程原理

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

主键:绝对不能有空值。唯一索引:可以有空值

13、http 与 https 的主要区别

关键是 S 上。简而言之,https 建立连接后要先把 SSL 的证书发下去,有了公钥和私钥,就可以解密了。

14、http 状态码及其含意

(大神整理的php面试题)(php经典面试题及答案)

15、linux 中怎么查看系统资源占用情况

(大神整理的php面试题)(php经典面试题及答案)

16、SQL 注入的原理是什么?如何防止 SQL 注入

原理:第一 SQL 本身有问题(这个不是主要问题)。第二你写的 SQL 很有问题(这是最主要的)

防范:第一,绝对不要相信用户输入的任何东西。第二,预编译。现在的框架一般都会有 SQL 过滤的。

17、isset (null) isset (false) empty (null) empty (false) 输出

PHP 入门问题,isset 和 empty 的区别

分别是 false, true, true, true

18、优化 MYSQL 的方法

第一,数据超过一定数量或者体积,请拆分表,垂直或者水平分(最有效果的优化)

第二,务必有自增主键。通过自增主键来查数据是最快的。

第三,常用的查询字段建立联合索引,写 SQL 一定要尊从最左原则,用到这个索引。

第四,不要把逻辑运算放到 sql 里。言外之意是,不要写太复杂的 SQL,你能写复杂的 SQL 你肯定也能通过 PHP 实现。

19、数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,

事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

20、写一个函数,尽可能高效的从一个标准 URL 中取出文件的扩展名

会 写正则最好。我反正不会正则,需要用的时候就百度。

21、参数为多个日期时间的数组,返回离当前时间最近的那个时间

遍历数组,求当前时间差,和第一个进行对比,小于第一个交换位置。最后取第一个即可。

22、echo、print、print_r 的区别

这三个放在一起,回答的点在于,print_r 是函数,echo、print 是结构语言。

23、http 协议的 header 中有哪些 key 及含义

这个问题,很难。一会半会说不清楚。如果做过 PHP restful 接口开发,也踩过这里面的坑,那应该是可以答出来常用的几个 KEY 的。

24、二叉树前中后遍历代码

  1. 层序遍历
  2. 先序遍历
  3. 中序遍历
  4. 后序遍历

25、PHP 的数组和 C 语言的数组结构上有何区别?

但从 PHP 来讲,考的是 PHP 数组的实现。可以简单的认为,PHP 的数组是 hash 桶 + 十字链表(实际上是数列 Array,列表 List,散列表 / 关联数组 / 字典 Hashtable 的聚合体)。优点是查询效率很高,遍历很方便,缺点是,占内存较多。(还是空间换时间的思路,毕竟现在内存又不值钱)

C 语言的数组,就是定长定类型的数列。

26、Redis 的跳跃表怎么实现的

跳跃表 (skiplist) 是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。

27、哈希是什么?hash 冲突后,数据怎么存?

28、聚簇索引,聚集索引的区别?

29、B+Tree 是怎么进行搜索的

30、数组和 hash 的区别是什么?

31、写个函数,判断下面扩号是否闭合,左右对称即为闭合: ((())),)(()),(()))),(((((()),(()()),()()

32、 找出数组中不重复的值 [1,2,3,3,2,1,5]

用普通方法,肯定很容易的。

33、32 题你的时间复杂度是多少?有的情况下,你写了个算法,然后面试官会让你把你的算法的时间复杂度表达式写出来

34、PHP 的的这种弱类型变量是怎么实现的?

考 zval 的,PHP 的八种类型,本质只有一个结构。

35、在 HTTP 通讯过程中,是客户端还是服务端主动断开连接?

三次握手和四次挥手,以及他们每步的状态。

这个问题最好能一步到位回答的全面的。一般都是有客户端告诉服务端,我这边东西发完了,可以断连接了么。但是如果客户端发完 FIN 服务端没有回复,就会重试,直到超过超时时间,就断了。服务端也一样,超过时间,服务端就断了。

36、PHP 中发起 http 请求有哪几种方式?它们有何区别?

(大神整理的php面试题)(php经典面试题及答案)

37、有一颗二叉树,写代码找出来从根节点到 flag 节点的最短路径并打印出来,flag 节点有多个。比如下图这个树中的 6 和 14 是 flag 节点,请写代码打印 8、3、6 和 8、10、14 两个路径

典型的二叉搜索树。大学数据结构的基础题。

38、有两个文件文件,大小都超过了 1G,一行一条数据,每行数据不超过 500 字节,两文件中有一部分内容是完全相同的,请写代码找到相同的行,并写到新文件中。PHP 最大允许内内为 255M。

将文件拆分成若干个小文件,根据内容计算 hash 值,分散到不同文件。

39、请写出自少两个支持回调处理的 PHP 函数,并自己实现一个支持回调的 PHP 函数

(大神整理的php面试题)(php经典面试题及答案)

40、请写出自少两个获取指定文件夹下所有文件的方法(代码或思路)。

核心方法是 scandir, 核心思想是递归。

41、请写出自少三种截取文件名后缀的方法或函数(PHP 原生函数和自己实现函数均可)

(大神整理的php面试题)(php经典面试题及答案)

42、PHP 如何实现不用自带的 cookie 函数为客户端下发 cookie。对于分布式系统,如何来保存 session 值。

这个题有点绕。考的还是 COOKIE 和 SESSION 的基础知识。服务端通过 set-cookie 命令来通知客户端保存 cookie。

只要按照 domain path 过期时间等规则 用 header 函数就可以实现。

分布式系统 session,集中处理。按我们公司的架构,为了实现高可用和高容灾,提供一个分布式的验签服务。具体的可以看下 redis 的分布式服务架构。

43、请用 SHELL 统计 5 分钟内,nginx 日志里访问最多的 URL 地址,对应的 IP 是哪些?

44、写一段 shell 脚本实现备份 mysql 指定库(如 test) 到指定文件夹并打包,并删除 30 天前的备份,然后将新的备份推送到远端服务器,完成后送邮件通知。

45、mysql 数据库中 innodb 和 myisam 引擎的区别

区别主要在数据和索引的存储结构和存储方式上,以及对于事务的支持。

46、从用户在浏览器中输入网址并回车,到看到完整的见面,中间都经历了哪些过程。

入门问题。这个问题有一个很大的坑,面试官可能会从这个问题下手问你一大堆问题。

以 PHP 为例:通常最简单的回答,从用户的电脑找到最近的 DNS 服务,然后解析到对应的 IP 然后双方开始 HTTP 连接,然后发送请求信息,服务器拿到请求信息就开始准备回应的信息,中间要经过 nginx 转发到 frstCGI (PHP-FPM), 然后 PHP 开始解析框架,解析请求头部,找到对应的 API,该查数据库查数据,该组装 HTML 组装 HTML,完事了就重新返回给用户。用户拿到返回数据,浏览器开始渲染页面,JS 开始加载。

47、如何分析一条 sql 语句的性能。

explain,具体的请百度。(基本很少用性能分析语句。MYSQL 的表设计上尽量冗余一部分字段,避免在 MYSQL 里处理大量的逻辑运算。我们是做 PHP 服务开发的,mysql 语句能简单尽量简单。逻辑运算的地方可以在 PHP 里做。)

48、ping 一个服务器 ping 不通,用哪个命令跟踪路由包?

(大神整理的php面试题)(php经典面试题及答案)

49、

(大神整理的php面试题)(php经典面试题及答案)

50.

(大神整理的php面试题)(php经典面试题及答案)

51、数据库中的存放了用户 ID, 扣费很多行,redis 中存放的是用户的钱包,现在要写一个脚本,将数据库中的扣费记录同步到 redis 中,每 5 分钟执行一次。请问要考虑哪些问题?

思路:生产者和消费者模式。这个问题也没有说其他的状态,比如数据库的数据会实时增加么?redis 中每个钱包是否有其他服务在读取或者写入啊。什么的。数据库和 REDIS 放一起,要么考数据一致性,要么考出现锁,导致效率降低。

52、MYSQL 主从服务器,如果主服务器是 innodb 引擎,从服务器是 myisam 引擎,在实际应用中,会遇到什么问题?

不知道,没用过,为什么这么设计?故意给自己找不愉快?

53、linux 中进程信号有哪些?

kill -l 很少用

54、redis 的底层实现

面试官这么样问你,你就反问他,你要的底层实现是字段的设计?内存分配管理?网络模型?数据同步?还是分布式的实现?(TIPS: 面试就是两个人的博弈。面试官给出一个描述不清晰的问题,我们没必要回答。让他把问题讲清楚再思考怎么回复)

这篇文章 要多读几遍。

55、异步模型

问清楚是 IO 异步模型。还是 AJAX 这类的异步请求模型。差别非常大的。

狗东某风控研发必考题。

56、10g 文件,用 php 查看它的行数

粗暴一点的方法 ini_set ('memory_limit','-1'); 先把当前内存限制解除了 然后直接逐行统计。时间会非常的久。

有更好的方法请留言。

57、有 10 亿条订单数据,属于 1000 个司机的,请取出订单量前 20 的司机

(TIPS)不要中招。不要用常用思路来处理,10 亿数据 你再怎么优化,全表求和,都是要死人的。

我们从设计上解决这个问题。只有一千个司机。我们可以做个简单哈希,分库分表,% 求余数。保证这一千个司机分在一千个表里,每个人有每个人的单独表。引擎用 MYSAIM,求表中数据的总数,效率飞快,遍历一千张表,求最大前二十即可。

58、设计一个微信红包的功能

没做过。其实题目表达不清楚。如果做过微信公众号开发,知道微信事件模型的 XML 数据结构,应该会好做一点。

59、根据 access.log 文件统计最近 5 秒的 qps,并以如下格式显示,01 1000(难点在 01 序号)

(大神整理的php面试题)(php经典面试题及答案)

60、php7 性能为什么提升这么高

不逼逼,直接参考:http://www.laruence.com/php-internal

鸟哥的文章要多读,多读。

61、遍历一个多维数组

递归。array_map 传入一个回调函数。

62、有这样一个字符串 abcdefgkbcdefab…… 随机长度,写一个函数来求 bcde 在这个字符串中出现的次数

substr_count();

63、有一个 1G 大小的一个文件,里面每一行是一个词,词的大小不超过 16 个字节,内存限制大小是 1M。返回频数最高的 100 个词

方法太多了,但是实现起来 各有各的问题。

我可能只会用 HASH 映射做。其他的,不会。

参考:第 64 题。

64、十道海量数据处理面试题与十个方法大总结

(大神整理的php面试题)(php经典面试题及答案)

65、php 进程模型,php 怎么支持多个并发

守护进程模型(需要知道 php-fpm 的各种配置了)

参考:https://www.jianshu.com/p/542935a3bfa8

66、nginx 的进程模型,怎么支持多个并发

这个三言两语说不清楚。

参考:https://www.zhihu.com/question/22062795

67、php-fpm 各配置含义,fpm 的 daemonize 模式

(大神整理的php面试题)(php经典面试题及答案)

68、让你实现一个简单的架构,并保持高可用,两个接口,一个上传一条文本,一个获取上传的内容,你怎么来设计?要避免单机房故障,同时要让代码层面无感。

参考:分布式架构设计必备 CAP 原理。

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

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

如果是核心业务的话,现在所有的写操作都在正常的状态机器上。把好的这台机器的备机拉起来,当主机。

以上全是应急操作。实际上数据库的容灾设计要复杂的多。

面试官要是问你,备机的数据不一致怎么办,你要勇敢怼回去,你们每秒多少写入操作。按照百万级表,每秒 1000 的写入效率,正常的设计是,分布在 2 台机器上每台 500。这个级别的数据同步,出现差异的概率 可以忽略不计的。有一台出现问题,另一台也可以抗住。

(正常的操作,还是先停写,等数据一致,切换,开写。我们公司搞这些切换都是在凌晨 4.00 左右,核心业务的每秒写操作,只有十几个。前后耽搁不到 20 秒)。

70、http 协议具体的定义

这种题 有是很难回答的。太宽泛了,我们面试早就不问这种问题了。

(大神整理的php面试题)(php经典面试题及答案)

声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者自学PHPer所有,原文出处。若您的权利被侵害,请联系删除。

本文标题:(大神整理的php面试题)(php经典面试题及答案)
本文链接:https://www.51qsb.cn/article/m84wm.html

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2023-05-25
下一篇2023-05-25

你可能还想知道

发表回复

登录后才能评论