加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

PHP 高级面试115题汇总(含答案)

发布时间:2020-12-24 22:23:28 所属栏目:运营 来源:网络整理
导读:1、给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,0]) 能组成一个矩形。 勾股定理,矩形是对角线相等的四边形。只要任意三点不在一条直线上,任选一点,求这一点到另外三点的长度的平方,两个短的之和如果等于最长的,那么这就是矩形

82、下面员工 3 的薪水大于其主管的薪水,一条 SQL 找到薪水比下属低的主管

id    username    salary  pid
1    a   3000    null
2    b   8000    null
3    c   5000    1
4    d   6000    3
SELECT a.*,b.*
FROM `user` as a
LEFT JOIN `user` as b ON a.pid = b.id AND a.salary > b.salary
WHERE b.id > 0;

82、在一个坐标系内有一个 N 个点组成的多边形,现在有一个坐标点,写代码或思路来判断这个点是否处于多边形内

83、数据库如果出现了死锁,你怎么排查,怎么判断出现了死锁?

84、写一个一个程序来查找最长子串

85、分析一个问题:php-fpm 的日志正常,但客户端却超时了,你认为可能是哪里出了问题,怎么排查?
检查 nginx log,请求是否达到 nginx 和是否正常转发给 php-fpm

86、nginx 的工作流程是什么样的,可以画图描述

87、进程间通信方式有哪些
1) 管道
管道分为有名管道和无名管道
无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系一般指的是父子关系。无明管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用 fork 创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方式。
有名管道也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。

2) 信号量
信号量是一个计数器,可以用来控制多个线程对共享资源的访问.,它不是用于交换大批数据,而用于多线程之间的同步。它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源。因此,主要作为进程间以及同一个进程内不同线程之间的同步手段.

3) 信号
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生.

4) 消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点。消息队列是 UNIX 下不同进程之间可实现共享资源的一种机制,UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程。对消息队列具有操作权限的进程都可以使用 msget 完成对消息队列的操作控制。通过使用消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序.

5) 共享内存
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC (进程间通信) 方式,它是针对其它进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步与通信.

6) 套接字:可用于不同及其间的进程通信

88、主从复制,从服务器会读取到主服务器正在回滚的数据吗?主数据库写成功,从服务器因为一些原因写失败,最后会出现什么情况?主从复制如果键冲突怎么办?
不会;主从数据不一致;正常是不会出现这种情景,具体看情况,是否可以修复,恢复到之前的时间点,然后追回同步。

89、事务有几种隔离级别?事务的隔离级别是怎么实现的?

读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

90、什么是 B + 树,请画 b + 树的结构

91、mysql 中的字符集,客户端与数据库不一致,怎么办?MYSQL 中字符串到显示到界面,字符转换的过程是怎样的?数据库中的字符集是 latin1,你现在将 utf8 的字符串存到 latin1 字符集的数据库表,你能将 utf8 的字符串存进去吗?假如你说能存,追问:能否恢复?假如能,那怎么恢复?

92、

写一段代码,找到所有子集合,如 [a,b,c] 的子集合有 {},{a},{b},{c},{ab},{ac},{abc}

93、

['a'=>200,'b'=>100,'c'=>100],写一个自定义排序函数,按值降序,如果值一样,按键排序
冒泡排序

94、设计一个缓存系统,可以定期或空间占满之后自动删除长期不用的数据,不能使用用遍历。
我当时的答案是用链表来存,缓存命中就将该缓存移到链表头,然后链表尾就都是冷数据了。
我记得之前是在哪里看过这个设计,但我忘记在连接了,请知道朋友的把连接贴上来。

95、

== 和 === 的区别,写出以下输出:"aa"==1,"bb"==0,1=="1"
== 等于,不需要对比数据类型
=== 全等,需要对比类型
false,true

96、一个排序好的数组,将它从中间任意一个位置切分成两个数组,然后交换它们的位置并合并,合并后新数组元素如:20,21,22,25,30,6,7,8,18,19,写一个查询函数来查找某个值是否存在。

97、设计一个树形结构,再写一个函数对它进行层序遍历

98、

'$var' 和 "$var" 的区别
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。

在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠  和插入单引号 ')。所以,当你想在字串中进行变量代换和包 含 n(换行符)等转义序列时,你应该使用双引号。单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些。

99、self 和 static 的区别
static:如果在子类中重写了父类中的 static 方法、属性,父类就会去访问了子类的 static 方法

self: 是类内指针,不管子类有没有重写过父类中的方法、属性都指向本类的静态方法、属性
100、PHP 的协程以及用途

101、描述 autoload 的机制

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读