php常见面试题

1. php在cli 模式下的几个生命周期?

  • 模块初始化阶段(Module init)
  • 请求初始化阶段(Request init)
  • 执行PHP脚本 请求结束(Request Shutdown)
  • 关闭模块(Module shutdown)

2.php-fpm 的运行机制?

  • master进程只有一个接收来自服务器的请求,根据配置指派特定的worker进程进行请求处理
  • worker进程则一般有多个(具体数量根据实际需要配置),处理来自worker进程的请求
  • kill master进程号子进程无法正常接收请求
  • kill -9 master进程号子进程能正常接收请求
  • kill worker进程号,master检测到worker挂了,会重新创建

3.内存管理分配?

  • PHP脚本运行所需的内存空间不是直接从系统申请,而且向内存管理器(简称MM)申请,如果MM中的可用内存够用,直接分配给PHP程序;如果MM中的可用内存不够,MM再从系统申请。
  • MM申请内存按大小分成了3类:small内存(小于等于3kb的内存);large内存(大于3KB且小于等于2MB-4KB)的内存;huge内存(大于2MB-4KB的内存)。

4.垃圾回收机制?什么时候触发GC?

  • 在PHP5.3版本之前,使用的垃圾回收机制是单纯的“引用计数”。
  • 在PHP5.3中引入了更加完善的垃圾回收机制,新的垃圾回收机制解决了无法处理循环的引用内存泄漏问题。
  • 当垃圾回收机制打开时,算法会判断每当根缓存区存满时,就会执行循环查找。根缓存区有固定的大小,默认10,000。

5.PHP5和PHP7数组的实现?

  • PHP5和PHP7都是通过链地址法解决哈希冲突。
  • PHP5的链表是物理上的链表,链表中bucket之间的上下游关系通过真实存在的指针来维护。
  • PHP7的链表是一种逻辑上的链表,所有bucket都分配在连续的数组内存中,不在通过指针维护上下游关系,每一个bucket只维护下一个bucket在数组中的索引(因为是连续内存,通过索引可以快速定位到bucket)。

6.nginx 和 php-fpm 的通信方式?

  • nginx 与 php-fpm 的通信有 tcp socket 和 unix socket 两种方式。
  • unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要在nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。
  • tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式,windows系统只能使用tcp socket的通信方式。

7.fast-cgi 和 cgi 区别?

  • cgi和fast-cgi都是php解析协议,负责解析服务器分发过来的php动态文件;cgi程序就会去解析php.ini文件,初始化执行环境(启动一个进程),执行完请求之后(自动关闭),众所皆知开启进程和关闭进程对系统资源消耗很大。
  • fast-cgi先是开启一个常驻进程(master),然后当web server分发一个请求过来,就会fork出一个子进程(worker)去处理相对应的操作,这些子进程不会自动关闭,会在进程池里面等待下一个处理。这样就大大的节省进程的启动和关闭 所消耗的资源。

8.php-fpm worker 进程管理的方式?

  • pm=static,始终保持固定数量的worker进程数,由pm.max_children决定。

  • pm=dynamic,在php-fpm启动时,会初始启动一些worker,在运行过程中动态调整worker数量,worker的数量受限于pm.max_children配置,同时受限全局配置process.max。

  • pm=ondemand,php-fpm启动的时候,不会启动任何一个worker,而是按需启动,只有当连接过来的时候才会启动,启动的最大worker数决定于pm.max_children的值,同时受限全局配置process.max。

9.swoole与fpm方式比较?

  • 由 Reactor(epoll 的 IO 复用方式)负责监听 Socket 句柄的事件变化,解决高并发问题。

  • 通过内存常驻的方式节省 PHP 代码初始化的时间。

  • fpm只用于 HTTP Server,swoole不仅可以用于 HTTP Server,还可以建立 TCP 连接、WebSocket 连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值