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

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

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

104、myisam 和 innodb 的区别,为什么 myisam 比 innodb 快,myisam 和 innodb 的索引数据结构是什么样的?innodb 主键索引和非主键索引的区别?其索引上存放的数据是什么样的?
区别主要在数据和索引的存储结构和存储方式上,以及对于事务的支持。

105、断开 TCP 连接时,timewait 状态会出现在发起分手的一端还是被分手的一端
为什么建立 TCP 连接需要三次握手?
原因:为了应对网络中存在的延迟的重复数组的问题
例子:
假设 client 发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达 server。本来这是一个已经失效的连接报文,但是 server 接收到这个连接报文之后,误认为 client 发起了新的连接,于是向 client 发送确认报文段。此时因为没有了连接的 3 次握手,client 不会对 server 的确认报文作出回应,也不会向 server 发送数据,server 就以为连接已经建立,一直在空等 client 的数据,这样 server 的这一部分网络资源就被浪费了。

为什么断开 TCP 连接需要进行四次握手 ?
因为 TCP 连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免 client 数据发送完毕,向 server 发送 FIN 关闭连接,而 server 还有发送到 client 的数据没有发送完毕的情况。所以关闭 TCP 连接需要进行四次握手,每次关闭一个方向上的连接需要 FIN 和 ACK 两次握手。

TIME_WAIT 状态的意义

在 TCP 连接中,当被动关闭连接的一方 (图中 client) 发送的 FIN 报文到达时,被动关闭连接的一方会发送 ACK 确认报文,并且进入 TIME_WAIT 状态,并且等待 2MSL 时间段 (MSL:maximum segment life)。这么做有下述两个原因:

被动关闭连接的一方 (图中的 server) 在一段时间内没有收到对方的 ACK 确认数据包,会重新发送 FIN 数据包,因而主动关闭连接的一方需要停留在等待状态以处理对方重新发送的 FIN 数据包。否则他会回应一个 RST 数据包给被动关闭连接的一方,使得对方莫名其妙。

在 TIME_WAIT 状态下,不允许应用程序在当前 ip 和端口上和之前通信的 client (这个 client 的 ip 和端口号不变) 建立一个新的连接。这样就能避免新的连接收到之前的 ip 和端口一致的连接残存在网络中的数据包。这也是 TIME_WAIT 状态的等待时间被设置为 2MSL 的原因,以确保网络上当前连接两个方向上尚未接收的 TCP 报文已经全部消失。

106、AWK 各种数据分析考得非常多,要多练习,题目不再一一写了

107、redis 中集合、有序集合、hyperLog、hash 的数据结构是啥样的
key value

108、描述一下:一个请求到达 nginx 的全部处理过程(nginx 自身会调用哪些逻辑)、然后怎么与 php 通信,中间的流程是什么样的等等?

109、nginx 和 php-fpm 的相关配置,随便问里面各种参数啥意思
php-fpm 可以通过 tcp socket 和 unix socket 两种方式实现。

110、假如有一张地图,如下图,"-" 代表海洋、"+" 代表陆地,用你最擅长的方式,取出陆地的坐标。

--++----++--+++---
-++++----+++++++--
-+++----++++------
-----++------++++-
---++++++-----+++-
-----+++------+++-
比如上图在数组中表示成,1 表示成陆地,0 表示海洋:

[
    [0,1....],1.....],]
写个算法取出所有陆地的坐标,并按块放到一起,如地图上左上角第一个陆地的坐标是:

[
    [0,2],3],4],[2,3]
]

111、Jsonp 的实现原理,你还知道哪些跨域方式?
JSONP
添加响应头,允许跨域
代理的方式

112、如果某个博客通过判断 referer 方式来进行图片防盗链,如何破解?
curl 设置来源地址来欺骗对方服务器验证

113、简述 mysql 查询优化的本质,并举 2 个例子
114、设计一个秒杀系统,如何保证商品不超卖?

115、单例模式的优点是什么?抽象类是什么?还了解哪些设计模式?
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:

它们必须拥有一个构造函数,并且必须被标记为 private
它们拥有一个保存类的实例的静态成员变量
它们拥有一个访问这个实例的公共的静态方法
单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

(编辑:核心网)

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

热点阅读