![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PHP
文章平均质量分 81
PHP开源社区
公众号:PHP开源社区,领取大厂PHP面试题、实战资料
展开
-
面试问你Redis持久化,懂?
我们都知道Redis是个内存数据库,所有的数据都存储在内存中。一旦服务器上Redis进程退出,数据库中的数据就会丢失 。持久化是做什么事呢? 持久化简单的理解就是将内存中的数据做个备份。Redis的持久化有两种方法,即RDB持久化和AOF持久化。 本文将会分两部分介绍这两种持久化方法,以及实现原理。一、RDB持久化Redis数据持久化是将内存中的数据保存到磁盘里,避免数据意外丢失。RDB持久化会生成一个RDB文件,这个RDB文件是一个经过压缩的二进制文件。通过该文件可以还原出Redis数据库中的数原创 2021-09-14 11:24:02 · 145 阅读 · 0 评论 -
新手Redis的分布式锁解析
在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现。固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效率高。redis锁失效的情况:客户端1从master节点获取了锁master宕机了,存储锁的key还没来得及同步到slave节点上slave升级为master客户端2从新的master上获取到同一个资源的锁于是,客户端1和客户端2同事持有了同一个资源的锁,锁的安全性被打破。如果我们不考虑这种极原创 2021-09-10 10:19:30 · 180 阅读 · 0 评论 -
MySQL 慢查询是怎样优化的
为什么查询速度会慢1.慢是指一个查询的响应时间长。一个查询的过程:客户端发送一条查询给服务器服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果。否则进入下一个阶段服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询。将结果返回给客户端2.数据访问是否向数据库请求了不需要的数据是否扫描额外的记录3.查询的方式一个复杂的查询还是多个简单的查询切分查询(将大查询切分成小查询,循环完成小查原创 2021-09-08 10:32:16 · 213 阅读 · 0 评论 -
php-fpm - 启动参数及重要配置详解
约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm的启动参数#测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t #启动p原创 2021-08-30 10:26:44 · 487 阅读 · 0 评论 -
PHP观察者模式(Observer)解析与应用
【看一下观察者模式结构图】概念(Observer),首先要有一个被观察的角色,但ta是【唯一的】。虽然"表演者"只有一个但是"观众"有很多,既一群"人"围观一个"人"。既然有无数个观察者,那么我们需要知道都有哪一些"人"。所以我们需要一个“容器”来记录这些"人",一个类似于数组一样来储存所有观察者的容器。一个"演员"(被观察者),一群"观众"(观察者),一台"摄影机"(记录容器)【观察者模式中主要角色】抽象主题(Subject)角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可原创 2021-08-28 11:38:57 · 263 阅读 · 0 评论 -
PHPer的20 道 shell 脚本面试题
想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务。如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答:Q:1 Shell脚本是什么、它是必需的吗?答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。\Q:2 什么是默认登录shell,如何改变指定用户的登录shell答:在Linux操作系统,“原创 2021-08-27 14:00:41 · 159 阅读 · 0 评论 -
PHP 核心特性 - 错误处理
错误与异常错误,可以理解程序本身的错误,例如语法错误。而异常则更偏向于程序运行不符合预期或者不符合正常流程;对于 PHP 语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑。例如,我们希望通过捕获异常来处理除数为 0 的情况,但是在捕获到异常之前,PHP 就触发了错误。try { $a = 5 / 0;} catch (Exception $e) { $e->getMessage(); $a = -1; // 通过异常来处理 $a 为 0 的情况,原创 2021-08-26 10:26:48 · 87 阅读 · 0 评论 -
php队列的实现思路和过程
一:队列场景当我们使用某讯或者某浪的邮箱时,点击群发邮件之后,只需等待很短的时间,浏览器 提示提交成功,正在发送之类的信息时,用户就可以关掉浏览器,稍后,收件地址栏里的邮箱将陆续收到该群发邮件,再比如群发定时邮件,以及当商城系统中有客 户下单,客户,客服,仓库等相关人员收到订单邮件信息。诸如此类,队列的应用范围是如此之广。二:普通工程师的解决方案和架构师的解决方案方案1:建表存邮件,消息等,用定时程序取出发送。方案2:抽象到更高一层,开发一套通用异步处理队列适用于任何复杂的业务逻辑那么,作为架构师原创 2021-08-20 16:32:27 · 287 阅读 · 0 评论 -
深入解析PHP7个预定义接口
场景:平常工作中写的都是业务模块,很少会去实现这样的接口,但是在框架里面用的倒是很多。1. Traversable(遍历)接口该接口不能被类直接实现,如果直接写了一个普通类实现了该遍历接口,是会直接报致命的错误,提示使用 Iterator(迭代器接口)或者 IteratorAggregate(聚合迭代器接口)来实现,这两个接口后面会介绍;所有通常情况下,我们只是会用来判断该类是否可以使用 foreach 来进行遍历;class Test implements Traversable {.原创 2021-08-17 11:28:22 · 151 阅读 · 1 评论 -
PHP多进程是怎样执行的
我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守护进程时,多进程的优势不用多说。PHP的多线程也曾被人提及,但进程内多线程资源共享和分配的问题难以解决。PHP也有多线程想关的扩展 pthreads ,但据说不太稳定,且要求环境为线程安全,所用不多。追求高性能可用Swoole协程编程即可!要实现PHP的多进程,我们需要两个扩展 pcntl和 posix,安装方法原创 2021-08-16 11:18:48 · 174 阅读 · 0 评论 -
解析PHP-FPM的一些心得
作用PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。(1). 为什么会出现php-fpmfpm的出现全部因为php-fastcgi出现。为了很好的管理php-fastcgi而实现的一个程序(2). 什么是php-fastcgiphp-fastcgi 只是一个cgi程序,只会解析php原创 2021-08-14 10:04:32 · 174 阅读 · 0 评论 -
mysql索引命中规则
最左匹配原则1、先定位该sql的查询条件,有哪些,那些是等值的,那些是范围的条件。2、等值的条件去命中索引最左边的一个字段,然后依次从左往右命中,范围的放在最后。分析讲解1、mysql的索引分为聚簇索引和非聚簇索引,mysql的表是聚集索引组织表。聚集规则是:有主键则定义主键索引为聚集索引;没有主键则选第一个不允许为NULL的唯一索引;还没有就使用innodb的内置rowid为聚集索引。非聚集索引也称为二级索引,或者辅助索引。2、mysql的索引无论是聚集索引还是非聚集索引,都是B+树结构。聚原创 2021-08-13 14:46:55 · 385 阅读 · 0 评论 -
Laravel生命周期与原理
一旦用户(浏览器)发送了一个HTTP请求,我们的apache或者nginx一般都转到index.php,因此,之后的一系列步骤都是从index.php开始的,我们先来看一看这个文件代码。<?phprequire __DIR__.'/../bootstrap/autoload.php';$app = require_once __DIR__.'/../bootstrap/app.php';/*|--------------------------------------------------原创 2021-08-07 10:53:41 · 110 阅读 · 0 评论 -
让php7性能达到最高的5点小技巧
1. Opcache记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:zend_extension=opcache.soopcache.enable=1opcache.enable_cli=1"2. 使用新的编译器使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启原创 2021-08-05 10:48:49 · 149 阅读 · 0 评论 -
PHP-FPM的面试题解析
面试官:说说你对PHP-FPM的理解1. CGI(Common Gateway Interface,CGI)通用网关接口, 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、Java、VB 和原创 2021-08-04 12:00:46 · 489 阅读 · 0 评论 -
php-parser在Aop编程中的使用
在laravel下使用php-parser实现aopcomposer require nikic/php-parserTest.php<?php/** * Created by PhpStorm. * User: CSH * Date: 2019/4/4 * Time: 11:26 */namespace app;/** * 为该类创建代理,并植入切面 埋点 * 使用parser生成对应的语法树,然后主动修改方法体内的逻辑 * * Class Test * @pa原创 2021-08-02 11:09:45 · 174 阅读 · 0 评论 -
基于Nginx的负载均衡原理与实战
本文主要讲解以下3个方面介绍Nginx的负载均衡:负载均衡介绍Nginx如何实现负载均衡Nginx负载均衡配置项介绍\01负载均衡介绍什么是负载均衡? 顾名思义就是让客户端的请求均匀地分布到各个服务器上。从下图可以看出,客户端的请求先到达负载均衡器,由负载均衡器通过一系列算法将请求转发到某台上游的业务服务器上。实现负载均衡的方式有很多,下面将列出几种方式,并对比优劣:硬件层面可以通过F5实现负载均衡,性能优异。F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理原创 2021-07-30 16:31:32 · 156 阅读 · 0 评论 -
Redis实现分布式锁与任务队列的思路
一、正文大家都知道在天猫、京东、苏宁等等电商网站上有很多秒杀活动,例如在某一个时刻抢购一个原价1999现在秒杀价只要999的手机时,会迎来一个用户请求的高峰期,会有几十万几百万的并发量,来抢这个手机,在高并发的情形下会对数据库服务器或者是文件服务器应用服务器造成巨大的压力,严重时说不定就宕机了。另一个问题是,秒杀的东西都是有量的,例如一款手机只有10台的量秒杀,那么,在高并发的情况下,成千上万条数据更新数据库(例如10台的量被人抢一台就会在数据集某些记录下 减1),那次这个时候的先后顺序是很乱的,很容易原创 2021-07-27 14:38:36 · 435 阅读 · 0 评论 -
Redis 缓存锁的实现方法
1. redis加锁分类redis能用的的加锁命令分表是INCR、SETNX、SET2. 第一种锁命令INCR这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说明这个锁正在被使用当中。 2、 客户端B也去请求服务器获取key的值为2表示获取锁失败 3、 客户端A执行代码完成,删除锁 4、 客户端B在等待一段时间后在去请求的时候获取key的值为1原创 2021-07-14 10:24:25 · 573 阅读 · 0 评论 -
基于redis的分布式锁解析
在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现。固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效率高。redis锁失效的情况:客户端1从master节点获取了锁master宕机了,存储锁的key还没来得及同步到slave节点上slave升级为master客户端2从新的master上获取到同一个资源的锁于是,客户端1和客户端2同事持有了同一个资源的锁,锁的安全性被打破。如果我们不考虑这种极端情原创 2021-07-13 14:34:34 · 74 阅读 · 0 评论 -
PHP + Redis 实现简单消息队列
Redis做消息队列的好处在于它的轻量级,高并发,延迟敏感,应用场景有 即时数据分析、秒杀计数器、缓存等Redis做消息队列待解决的问题:1、消息的可靠性: 没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理。生产者只管向队列中插入数据,不管消费者是否成功消费。2、消费者挂掉消息不会丢失,但是需要重新触发一下消费者,才能够继续消费消息。代码如下:lib.php 是工具文件,里面有数据库的连接、Redis的连接:...原创 2021-07-08 16:57:13 · 335 阅读 · 2 评论 -
MySQL-InnoDB为什么采用B+树结构实现索引
索引的作用是提高查询效率,其实现方式有很多种,常见的索引模型有哈希表、有序列表、搜索树等。哈希表一种以key-value键值对的方式存储数据的结构,通过指定的key可以找到对应的value。哈希把值放在数组里,用一个哈希函数把key换算成一个确定位置,然后把value放在数组的这个位置。但是,多个key值经过哈希函数的换算,可能会出现同一个值,即哈希冲突,常见的解决办法是链地址法,即将所有的相同Hash值的key放在一个链表中,这样,无论有多少个冲突,都只是在当前位置给单链表增加节点。适用于只有等值原创 2021-07-06 15:54:46 · 133 阅读 · 0 评论 -
php程序优化之数组操作优化
设计一个数据表如下: id INT NOT NULL AUTO_INCREMENT, value VARCHAR(10) NOT NULL, PRIMARY KEY(id));现在有一个业务需求需要批量插入数据。先来看看下面这一段代码:原创 2021-07-01 17:47:25 · 111 阅读 · 0 评论 -
彻底搞懂 Redis 事务原理
提到redis的事务,相信很多初学的朋友会对它的理解和使用有些模糊不清,料想它和我们常见的关系型数据库(mysql 、mssql等)中的事务相同,也支持回滚,但这样理解就进入了一个误区,首先:关系型数据中的事务都是原子性的,而redis 的事务是非原子性的。再多说一句,什么是程序原子性?简单的理解就是:整个程序中的所有操作,要么全部完成,要不全部不完成,不会停留在中间某个环节。那么非原子性就是不满足原子性的条件就是非原子性了。我们用例子来解释一下:原子性:数据库中的某个事务A中要更新t1表、t2表的某条记原创 2021-06-29 16:46:28 · 302 阅读 · 3 评论 -
PHP操作Elasticsearch详解
一、安装以下es基于6.41、在 composer.json 文件中引入 elasticsearch-php: "require":{ "elasticsearch/elasticsearch":"~6.0", "monolog/monolog": "~1.0" }}2、用 composer 安装客户端:php composer.phar install --no-dev二、快速开始1、创建一个test.php文件,内容如下<?p原创 2021-06-28 11:31:49 · 885 阅读 · 2 评论 -
php-fpm启动,重启,终止操作
启动php-fpm:/usr/local/php/sbin/php-fpmphp 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制:master进程可以理解以下信号INT, TERM 立刻终止QUIT 平滑终止USR1 重新打开日志文件USR2 平滑重载所有worker进程并重新载入配置和二进制模块一个简单直接的重启方原创 2021-06-26 10:19:03 · 321 阅读 · 0 评论 -
【2021版PHP高级教程-Swoole4.X从入门到精通全套高级实战】
众所周知,Swoole 和我们传统的 PHP 开发差别是有的,需要理解的概念也是有的。使用目前一些基于 Swoole 的框架开发的话,从开发习惯上和传统的TP 框架相差不多。根据官方介绍它是一个底层通信框架,最大的优势在于:常驻内存,避免重复加载带来的性能损耗,提升海量性能协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件通信PHP 高性能微服务架构成为现实那么很多人学习Swoole都遇到了很多原创 2021-04-06 09:00:05 · 691 阅读 · 0 评论 -
B/S架构和C/S架构有哪些区别?
首先,什么是B/S、C/S。它们之间的优缺点各是什么,这是一个学习软件的人都应该掌握的知识。关于这个问题,google一下能够得到很多具体而有效的答案。(一)、什么是C/S和B/S:C/S又称Client/Server或客户/服务器模式。在C/S模式中服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。B/S又称Brower/Server模式。客户机上只要安装一个浏览器(Browse原创 2021-06-24 16:34:07 · 377 阅读 · 0 评论