时间:2021-07-01 10:21:17 帮助过:51人阅读
本篇文章给大家分享PHP面试题之概念题最新汇总,有一定的参考价值,需要的朋友可以参考一下,希望对大家有所帮助。
相关推荐:《PHP面试题之应用题最新汇总》
创建型:员工当生抽(原型、工厂、单例、生成器、抽象工厂)
结构型:是敲响外带组装(适配器、桥接、享元、外观、代理、组合、装饰)
行为型:被责命碟中装模防观测(备忘录、责任链、命令、迭代器、中介者、状态、模板方法、访问者、观察者、策略)
通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。
XSS(跨站脚本攻击)本质是攻击者在 web 页面插入恶意代码,当用户浏览该页面之时,嵌入其中的代码会被执行,从而达到恶意攻击用户的目的。
如何防止?
答:使用 htmlspecialchars() 函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。
在整个网站架构中,Web Server(如Apache)只是内容的分发者。举个栗子,如果客户端请求的是 index.html,那么Web Server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。
如果请求的是 index.php,Web Server 收到这个请求后,会启动对应的 CGI 程序,这里就是 PHP 的解析器。接下来PHP解析器会解析 php.ini 文件,初始化执行环境,然后处理请求,再以规定 CGI 规定的格式返回处理后的结果,退出进程,Web server 再把结果返回给浏览器,这就是一个完整的动态PHP Web访问流程。
MVC 是一种开发模式,主要分为三部分:
PHP 可以自动进行内存管理,清除不再需要的对象。PHP 使用了引用计数(reference counting)的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,当 reference 连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP 释放其所占的内存空间。
阶段 | 调用函数 | 作用 |
---|---|---|
模块初始化阶段 | php_module_startup() | 主要进行 PHP 框架, zend 引擎的初始化操作 |
请求初始化阶段 | php_request_startup() | 对 fpm 来说, 是在 worker 进程读取,并解析完请求数据后的一个阶段 |
脚本执行阶段 | php_execute_script() | 解析 php 语法,生成抽象语法树 |
请求关闭阶段 | php_request_shutdown() | 请求结束时执行 |
模块关闭阶段 | php_module_shutdown() | 进程关闭时执行 |
FastCGI 是 Web 服务器(如 Nginx,Apache )和处理程序(如 PHP )之间的一种通信协议,它是一种应用层通信协议。php-fpm 是 PHP FastCGI 运行模式的一个阻塞的单线程模型进程管理器,单 master, 多 worker 结构, 同一个 worker 进程同时只能处理一个请求。PHP 处理完请求后将解析的结果再通过 FastCGI 协议转发给 Web 服务器,Web 服务器再返回给用户。
基本实现
PHP-FPM 是 fast-cgi 的实现, 提供了进程管理的功能, 包含 master, worker 两种进程:
worker—请求处理
worker 进程不断 Accept 请求,有请求到达后,将读取并解析 FastCGI 协议的数据,解析完成后开始执行 PHP 脚本,执行完成后关闭请求。各worker处理请求的步骤如下:
worker 进程的结构里有个参数用来记录 worker 当前所处的阶段 fpm_scoreboard_proc_s->request_stage,一次请求过程中这个值将先后被设置为以下值:
master–进程管理
master 在调用完 fpm_run() 后不再返回,而是进入一个事件循环中,此后 master 将始终围绕着几个事件进行处理,在具体分析这几个事件之前,首先介绍 Fpm 三种不同的进程管理方式,具体要使用哪种模式可以在 conf 配置中通过 pm 指定,例如 pm=dynamic。
master 进程进入 fpm_event_loop() 事件循环,在这个方法中 master 将循环处理 master 注册的几个 IO 及定时器事件,当有事件触发时将回调具体的 handler 进行处理。
预先申请一块内存在 PHP 内部管理, 应用在申请内存时, 会从这一部分进行申请, 释放时也是先释放回到内存管理中。这样设计话可以避免小内存的申请释放对操作系统上的额外性能的消耗。
PHP 数组的底层实现是散列表(也叫 hashTable ),散列表是根据键(Key)直接访问内存存储位置的数据结构,它的 key - value 之间存在一个映射函数,可以根据 key 通过映射函数得到的散列值直接索引到对应的 value 值,无需通过关键字比较,在理想情况下,不考虑散列冲突,散列表的查找效率是非常高的,时间复杂度是 O (1)。
概念:指服务依赖的其他服务不通过服务自己创建的方式, 而是由外部传入的方式。
如何实现的?答:通常来说使用反射实现的.。
能解决什么问题?答:降低服务模块之间的耦合度,编写代码时不用考虑外部服务的具体实现,只需要依据接口来使用服务即可。
概念:面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
主要特征:封装、继承、多态。
五大基本原则: 单一职责原则;开放封闭原则;替换原则; 依赖原则; 接口分离原则。
本文章首发在 LearnKu.com 网站上。
相关推荐:《2021年PHP面试题大汇总(收藏)》
以上就是PHP面试题之概念题最新汇总的详细内容,更多请关注gxlcms其它相关文章!