PHP篇
张罗丰
这个作者很懒,什么都没留下…
展开
-
面试-PHP篇-workman和swoole区别和异同
workerman和swoole在现阶段很受争议,有时间你得认识认识,不然你就不是混php圈子的。swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同。先说下swoole的进程模型,看一下以下解析图。master进程这个进程比较复杂,也是我认为最核心的进程,这是一个包含多线程的进程,分别是一个主线程和n个reactor线程(数量可以配置)。其中,主线程用于accept新的连接,然后评估一下每个re.原创 2020-05-13 17:23:40 · 3816 阅读 · 1 评论 -
面试-Redis篇-Redis雪崩、穿透、击穿
面试官:关于Redis雪崩,穿透,击穿你是怎么理解的?Redis 雪崩:雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。解决办法:将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。原创 2020-05-13 16:13:41 · 2698 阅读 · 3 评论 -
面试-PHP篇-Nginx实现高并发和常见的优化手段
面试题:Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?面试官心理分析主要是看应聘人员的对NGINX的基本原理是否熟悉,因为大多数运维人员多多少少都懂点NGINX,但是真正其明白原理的可能少之又少。明白其原理,才能做优化,否则只能照样搬样,出了问题也无从下手。懂皮毛的人,一般会做个 Web Server,搭建一个 Web 站点;初级运维可能搞个 HTTPS 、配置一个反向代理; 中级运维定义个 upstream、写个正原创 2020-05-13 13:48:53 · 723 阅读 · 0 评论 -
面试-PHP篇-依赖注入和控制反转
什么是依赖注入?IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection,简称DI)。当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。举个简单的例子:(1)原始社会里,几乎没有社会分工。需要斧子的人(调原创 2020-05-13 17:24:15 · 644 阅读 · 0 评论 -
面试-PHP篇-php.ini配置文件参数优化
用于生产环境中的PHP需要对其进行优化,让PHP自身发挥更好的性能,除了写好PHP代码,还要配置好php-fpm以及php.ini调优。本文从内存、OPcache、上传、会话以及安全等方面讲解php.ini的配置调优。内存优化运行 PHP 时需要关心每个 PHP 进程要使用多少内存,php.ini 中的memory_limit设置用于设定单个 PHP 进程可以使用的系统内存最大值。这个设置的默认值是 128M,这对于大多数中小型 PHP 应用来说或许合适,不过,如果运行的是微型 PHP 应用,可.原创 2020-05-12 11:30:33 · 528 阅读 · 0 评论 -
面试-PHP篇-nginx搭建及加固
Nginx安装及配置Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务安装我是用的环境是centos 7,系统默认的yum源没有nginx,找到一个使用nginx官方源地址首先建立nginx的yum仓库,执行下面的命令sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarc原创 2020-05-12 10:27:31 · 635 阅读 · 1 评论 -
面试-PHP篇-高精度计算问题
从事金融行业的PHPer,资金运算频繁,稍不留神,用户资金可能损失几十万,甚至更可怕......直接上实例吧:javascript0.1 + 0.2 为啥不等于 0.3 ? (正确结果:0.30000000000000004)0.8 * 7 为啥不等于 5.6 ? (正确结果:5.6000000000000005)PHPvar_dump(intval(0.58 * 100));正确结果是 57,而不是 58浮点运算惹的祸其实这些结果都并非语言的 bug,但和语言的实现原理原创 2020-05-12 09:36:22 · 164 阅读 · 0 评论 -
面试-PHP篇-yield
yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。yield生成器允许你 在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组。对比:function gettime($num) { $data=[]; for($i=0;$i<$num;$i++) { $data[] = time(); } ret..原创 2020-05-11 17:47:39 · 153 阅读 · 0 评论 -
面试-PHP篇-trait
自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。traits 与 interfaces 区别 及 traits 解决了什么痛点?知乎一个有趣的比喻:你可以把trait当作是多继承的一种变种,是一种加强型的接口,比如当你需要定义一个car的class,此时你需要实现vehicle定义的接口,比如必须有引擎,有外壳这些,但你这时会发现每个都自己去实现是不是太复杂了?比如对你而言引擎的实现你并不关心,你只要买一个用就好了,你比较在意汽车的外形,那么这时候就用到了trait,原创 2020-05-11 17:22:29 · 348 阅读 · 0 评论 -
面试-PHP篇-foreach、while、for性能比较
一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。那么它们在操作和性能上存在什么差别,通常使用那种方法比较好。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间:测试平台:CPU:P-M 725内存:512M硬盘:40G 5400转OS:Windows XP SP2WEB:apache 2.0.54php5.0.4测试代码:<?php/* * @ Author: Lilov * @ Ho..原创 2020-05-11 17:03:52 · 449 阅读 · 0 评论 -
面试-PHP篇-PHP-FPM多进程模型
PHP中的“进程”系列这个系列会分几个部分,从PHP-FPM进程模式起,到Linux进程,最后回到PHP本身谈一谈如何设计一个PHP的进程池。整个系列会氛围大致5个主要部分,分别是:①:PHP-FPM的多进程模型②:Linux进程介绍③:PHP中的多进程④:进程间通讯⑤:PHP的进程池设计此篇为系列第一篇:PHP-FPM的多进程模型。那么,我们谈论PHP-FPM多进程模型的时候,作为PHPer的你,可能需要先看看下面一些关于PHP-FPM的多进程模型,是否都有所了解①:PHP-FPM原创 2020-05-11 16:43:58 · 515 阅读 · 0 评论 -
面试-PHP篇-构造函数和析构函数
PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。class Car { function __construct() { print "构造函数被调用\n"; }}$car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串在子类中如果定义了__construct则不会调用父类的__construc原创 2020-05-11 15:19:21 · 153 阅读 · 0 评论 -
面试-PHP篇-传值和传引用
传值:在php中传值的意思相当于复制,我将你的值复制给我,我可以随意改变复制之后的值,对你是不会产生影响的。 function test1() { $a = 1; $b = $a; echo $b.'<br>'; //1 $b = 2; echo $a .'<br>'.$b; //1 2 }// 解释:将a的值赋给b,改变b的值,a的值不受影响。传引用:在php中传引用用‘&’符号,是相当于我不仅将你的值赋给我,还将你的内存地址原创 2020-05-11 15:02:27 · 191 阅读 · 0 评论 -
面试-PHP篇-cookie和session
面试-PHP篇-cookie和session原创 2020-05-11 14:10:57 · 338 阅读 · 0 评论 -
面试-PHP篇-CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系
一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的CGI(Common Gateway Interface),公共网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准。如请求/index.html,那么web server会去指定目录下找到这个文件(如果存在的话)发送给浏览器,这里分发的是静态数据。那么,请求的是/index.php的时候,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给P原创 2020-05-08 17:52:10 · 323 阅读 · 0 评论