我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP面试题之概念题有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP面试题之概念题有哪些

这篇文章主要介绍PHP面试题之概念题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. HTTP 状态中状态码的含义

  • 302:临时转移成功,请求的内容已转移到新位置 。

  • 401:未授权。

  • 403:禁止访问 。

  • 500:服务器内部错误

2. 传值与传引用

  • 传值:是把实参的值赋值给形参 ,对形参的修改,不会影响实参的值。

  • 传引用 :将实参的地址传递形参,实参和形参则指向同一存储空间,对行参的修改将影响实参的值。

3. 设计模式

创建型:员工当生抽(原型、工厂、单例、生成器、抽象工厂)

结构型:是敲响外带组装(适配器、桥接、享元、外观、代理、组合、装饰)

行为型:被责命碟中装模防观测(备忘录、责任链、命令、迭代器、中介者、状态、模板方法、访问者、观察者、策略)

4. 代码管理

通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。

5. XSS 攻击

XSS(跨站脚本攻击)本质是攻击者在 web 页面插入恶意代码,当用户浏览该页面之时,嵌入其中的代码会被执行,从而达到恶意攻击用户的目的。

如何防止?

答:使用 htmlspecialchars() 函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

6. CGI、FastCGI、PHP-FPM 关系图解

在整个网站架构中,Web Server(如Apache)只是内容的分发者。举个栗子,如果客户端请求的是 index.html,那么Web Server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。

PHP面试题之概念题有哪些

如果请求的是 index.php,Web Server 收到这个请求后,会启动对应的 CGI 程序,这里就是 PHP 的解析器。接下来PHP解析器会解析 php.ini 文件,初始化执行环境,然后处理请求,再以规定 CGI 规定的格式返回处理后的结果,退出进程,Web server 再把结果返回给浏览器,这就是一个完整的动态PHP Web访问流程。

PHP面试题之概念题有哪些

  • Web Server :一般指 Apache、Nginx、IIS、Lighttpd、Tomcat 等服务器。

  • Web Application: 一般指 PHP、Java、Asp.net 等应用程序。

  • CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。

  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。

  • PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。

  • PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。

7. MVC

MVC 是一种开发模式,主要分为三部分:

  • m(model),也就是模型,负责数据的操作;

  • v(view),也就是视图,负责前台的显示;

  • c(controller),也就是控制器,负责业务逻辑

8. PHP 的垃圾收集机制

PHP 可以自动进行内存管理,清除不再需要的对象。PHP 使用了引用计数(reference counting)的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,当 reference 连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP 释放其所占的内存空间。

9. CLI  模式的生命周期

阶段调用函数作用
模块初始化阶段php_module_startup()主要进行 PHP 框架, zend 引擎的初始化操作
请求初始化阶段php_request_startup()对 fpm 来说, 是在 worker 进程读取,并解析完请求数据后的一个阶段
脚本执行阶段php_execute_script()解析 php 语法,生成抽象语法树
请求关闭阶段php_request_shutdown()请求结束时执行
模块关闭阶段php_module_shutdown()进程关闭时执行

10. php-fpm 运行机制

FastCGI 是 Web 服务器(如 Nginx,Apache )和处理程序(如 PHP )之间的一种通信协议,它是一种应用层通信协议。php-fpm 是 PHP FastCGI 运行模式的一个阻塞的单线程模型进程管理器,单 master, 多 worker 结构, 同一个 worker 进程同时只能处理一个请求。PHP 处理完请求后将解析的结果再通过 FastCGI 协议转发给 Web 服务器,Web 服务器再返回给用户。

基本实现

PHP-FPM 是 fast-cgi 的实现, 提供了进程管理的功能, 包含 master, worker 两种进程:

  • master 创建并监听 socket, fork 多个 worker 进程, 通过共享内存获取 worker 的状态, 进而通过信号控制 worker 进程

  • worker 自由 accept 请求

worker—请求处理

worker 进程不断 Accept 请求,有请求到达后,将读取并解析 FastCGI 协议的数据,解析完成后开始执行 PHP 脚本,执行完成后关闭请求。各worker处理请求的步骤如下:

  1. 等待请求: worker 进程阻塞在 fcgi_accept_request() 中等待请求。

  2. 解析请求: fastcgi 请求到达后被 worker 接收,然后开始接收并解析请求数据,直到 request 数据完全到达。

  3. 请求初始化:执行 php_request_startup()。

  4. 执行PHP脚本。

  5. 关闭请求。

worker 进程的结构里有个参数用来记录 worker 当前所处的阶段 fpm_scoreboard_proc_s->request_stage,一次请求过程中这个值将先后被设置为以下值:

  • FPM_REQUEST_ACCEPTING:等待请求阶段。

  • FPM_REQUEST_READING_HEADERS: 读取 fastcgi 请求 header 阶段。

  • FPM_REQUEST_INFO:获取请求信息阶段,此阶段是将请求的 method,query string,request uri 等信息保存到各 worker 进程的fpm_scoreboard_proc_s 结构中,此操作需要加锁,因为 master 进程也会操作此结构。

  • FPM_REQUEST_EXECUTING:执行PHP脚本阶段。

  • FPM_REQUEST_END:没有使用。

  • FPM_REQUEST_FINISHED:请求处理完成。

master–进程管理

master 在调用完 fpm_run() 后不再返回,而是进入一个事件循环中,此后 master 将始终围绕着几个事件进行处理,在具体分析这几个事件之前,首先介绍 Fpm 三种不同的进程管理方式,具体要使用哪种模式可以在 conf 配置中通过 pm 指定,例如 pm=dynamic。

  • 静态模式(static):这种方式比较简单,在启动时 master 根据 pm.max_children 配置 fork 出相应数量的 worker 进程,也就是 worker 进程数是固定不变的。

  • 动态模式(dynamic):这种模式比较常用,在 Fpm 启动时会根据 pm.start_servers 配置初始化一定数量的 worker。运行期间如果 master 发现空闲 worker 数低于 pm.min_spare_servers 配置数(表示请求比较多,worker 处理不过来了)则会 fork worker 进程,但总的 worker 数不能超过 pm.max_children。如果 master 发现空闲 worker 数超过了 pm.max_spare_servers(表示闲着的 worker 太多了)则会杀掉一些 worker,避免占用过多资源,master 通过这四个值来动态控制 worker 的数量。

  • 按需模式(ondemand):这种模式很像传统的 cgi,在启动时不分配 worker 进程,等到有请求了后在通知 master 进程f ork worker 进程,也就是来了请求后再 fork 子进程进行处理。总的 worker 数不超过 pm.max_children,处理完成后 worker 进程不会立即退出,当空闲时间超过 pm.process_idle_timeout 后再退出。

master 进程进入 fpm_event_loop() 事件循环,在这个方法中 master 将循环处理 master 注册的几个 IO 及定时器事件,当有事件触发时将回调具体的 handler 进行处理。

11. 内存分配流程

预先申请一块内存在 PHP 内部管理, 应用在申请内存时, 会从这一部分进行申请, 释放时也是先释放回到内存管理中。这样设计话可以避免小内存的申请释放对操作系统上的额外性能的消耗。

12. php 数组的实现

PHP 数组的底层实现是散列表(也叫 hashTable ),散列表是根据键(Key)直接访问内存存储位置的数据结构,它的 key - value 之间存在一个映射函数,可以根据 key 通过映射函数得到的散列值直接索引到对应的 value 值,无需通过关键字比较,在理想情况下,不考虑散列冲突,散列表的查找效率是非常高的,时间复杂度是 O (1)。

13. 依赖注入

概念:指服务依赖的其他服务不通过服务自己创建的方式, 而是由外部传入的方式。

如何实现的?答:通常来说使用反射实现的.。

能解决什么问题?答:降低服务模块之间的耦合度,编写代码时不用考虑外部服务的具体实现,只需要依据接口来使用服务即可。

14. 面向对象

概念:面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。

主要特征:封装、继承、多态。

五大基本原则: 单一职责原则;开放封闭原则;替换原则; 依赖原则; 接口分离原则。

以上是“PHP面试题之概念题有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP面试题之概念题有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP面试题之概念题有哪些

这篇文章主要介绍PHP面试题之概念题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. HTTP 状态中状态码的含义302:临时转移成功,请求的内容已转移到新位置 。401:未授权。403:禁止访问 。500:
2023-06-14

PHP有哪些面试题

这篇文章主要介绍PHP有哪些面试题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. echo()、print()、print_r() 的区别echo()、print() 是 PHP 语句;print_r() 是函数
2023-06-14

PHP面试问题有哪些

这篇文章主要介绍了PHP面试问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。垃圾回收机制每个 PHP 变量存在一个叫 zval 的结构体中,除了包含变量类型和值,还包
2023-06-20

php高级面试题有哪些

小编给大家分享一下php高级面试题有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampServer也同样的
2023-06-14

PHP经典面试题有哪些

这篇文章给大家分享的是有关PHP经典面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.合并两个数组有几种方式,试比较它们的异同方式:1、array_merge()2、’+’3、array_merge_
2023-06-15

php算法面试题有哪些

这篇文章主要介绍php算法面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要
2023-06-14

php初级面试题有哪些

这篇文章主要介绍php初级面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Phalc
2023-06-14

PHP有哪些面试题及答案

今天小编给大家分享一下PHP有哪些面试题及答案的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、什么事面向对象?主要特征是什
2023-07-02

常见的PHP面试题有哪些

本文小编为大家详细介绍“常见的PHP面试题有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“常见的PHP面试题有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。100 个常见的 PHP 面试题1) PHP是
2023-06-30

net面试题有哪些

这篇文章给大家分享的是有关net面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  1、现场编码。  要求写出:缓存类+SqlHelper类(30分钟内,然后由代码引向面象对象或设计模式)。  2、数据
2023-06-03

Kotlin面试题有哪些

这篇文章主要介绍“Kotlin面试题有哪些”,在日常操作中,相信很多人在Kotlin面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kotlin面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-04

java面试题有哪些

这篇文章将为大家详细讲解有关java面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、什么是ARQ协议自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据
2023-06-20

HTML5面试题有哪些

这篇文章主要介绍“HTML5面试题有哪些”,在日常操作中,相信很多人在HTML5面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTML5面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-05

Nodejs面试题有哪些

这篇文章主要为大家展示了“Nodejs面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Nodejs面试题有哪些”这篇文章吧。  第1题:什么是nodejs?我们在哪里使用它?  Nod
2023-06-04

ES6面试题有哪些

今天小编给大家分享一下ES6面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.let 变量声明以及特性声明变量
2023-06-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录