自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

原创 【2021版PHP高级教程-Swoole4.X从入门到精通全套高级实战】

众所周知,Swoole 和我们传统的 PHP 开发差别是有的,需要理解的概念也是有的。使用目前一些基于 Swoole 的框架开发的话,从开发习惯上和传统的TP 框架相差不多。根据官方介绍它是一个底层通信框架,最大的优势在于:常驻内存,避免重复加载带来的性能损耗,提升海量性能协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件通信PHP 高性能微服务架构成为现实那么很多人学习Swoole都遇到了很多

2021-04-06 09:00:05 417

原创 全网最强腾讯10级PHP架构师学习路线+视频教程

这次发布一波视频教程福利,适合1-5年进阶人群,因为0基础的可能会听的比较吃力!!!感兴趣的直接看视频目录即可、不感兴趣的,认为PHP差劲的直接忽略就是了(又没吃你家大米,不接受你的装逼):【Laravel框架专题】Laravel框架的生命周期01Laravel目录讲解02Laravel应用程序的初始化03Laravel路由应用04Laravel路由解析05Laravel路由参数06Laravel路由到控制器07Laravel路由分组08Laravel服务加载09Laravel路由校验

2021-04-02 16:42:26 272

原创 2021最新一线大厂百度、腾讯PHP面试经验分享,拿到了百度offer

今天下午来到北京百度科技园进行复试PHP工程师岗位。面试官问了很多问题,因为主要是从事php方面的,所以下面谈的这些面试问题主要都是php方面的,当然其它的语言面试有些问题也会被问到。我大概整理回忆下:如果你经常参加面试的话,你就会发现几乎所有的面试开场白都是进行自我介绍,这是因为一方面面试官是刚从HR那里得到你的信息的,面试之前他可能不太了解你的具体信息,所以他希望你通过自我介绍这个环节,了解一下你的过往经历,还有就是他利用这个时间看下你的简历。经过三面、四面后几家公司等到了百度offer,下面我把面

2021-04-02 16:40:23 360 1

原创 面试问你Redis持久化,懂?

我们都知道Redis是个内存数据库,所有的数据都存储在内存中。一旦服务器上Redis进程退出,数据库中的数据就会丢失 。持久化是做什么事呢? 持久化简单的理解就是将内存中的数据做个备份。Redis的持久化有两种方法,即RDB持久化和AOF持久化。 本文将会分两部分介绍这两种持久化方法,以及实现原理。一、RDB持久化Redis数据持久化是将内存中的数据保存到磁盘里,避免数据意外丢失。RDB持久化会生成一个RDB文件,这个RDB文件是一个经过压缩的二进制文件。通过该文件可以还原出Redis数据库中的数

2021-09-14 11:24:02 44

原创 新手Redis的分布式锁解析

在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现。固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效率高。redis锁失效的情况:客户端1从master节点获取了锁master宕机了,存储锁的key还没来得及同步到slave节点上slave升级为master客户端2从新的master上获取到同一个资源的锁于是,客户端1和客户端2同事持有了同一个资源的锁,锁的安全性被打破。如果我们不考虑这种极

2021-09-10 10:19:30 51

原创 MySQL 慢查询是怎样优化的

为什么查询速度会慢1.慢是指一个查询的响应时间长。一个查询的过程:客户端发送一条查询给服务器服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果。否则进入下一个阶段服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询。将结果返回给客户端2.数据访问是否向数据库请求了不需要的数据是否扫描额外的记录3.查询的方式一个复杂的查询还是多个简单的查询切分查询(将大查询切分成小查询,循环完成小查

2021-09-08 10:32:16 95

原创 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 263

原创 PHP观察者模式(Observer)解析与应用

【看一下观察者模式结构图】概念(Observer),首先要有一个被观察的角色,但ta是【唯一的】。虽然"表演者"只有一个但是"观众"有很多,既一群"人"围观一个"人"。既然有无数个观察者,那么我们需要知道都有哪一些"人"。所以我们需要一个“容器”来记录这些"人",一个类似于数组一样来储存所有观察者的容器。一个"演员"(被观察者),一群"观众"(观察者),一台"摄影机"(记录容器)【观察者模式中主要角色】抽象主题(Subject)角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可

2021-08-28 11:38:57 139

原创 PHPer的20 道 shell 脚本面试题

想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务。如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答:Q:1 Shell脚本是什么、它是必需的吗?答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。\Q:2 什么是默认登录shell,如何改变指定用户的登录shell答:在Linux操作系统,“

2021-08-27 14:00:41 63

原创 PHP 核心特性 - 错误处理

错误与异常错误,可以理解程序本身的错误,例如语法错误。而异常则更偏向于程序运行不符合预期或者不符合正常流程;对于 PHP 语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑。例如,我们希望通过捕获异常来处理除数为 0 的情况,但是在捕获到异常之前,PHP 就触发了错误。try { $a = 5 / 0;} catch (Exception $e) { $e->getMessage(); $a = -1; // 通过异常来处理 $a 为 0 的情况,

2021-08-26 10:26:48 40

原创 php队列的实现思路和过程

一:队列场景当我们使用某讯或者某浪的邮箱时,点击群发邮件之后,只需等待很短的时间,浏览器 提示提交成功,正在发送之类的信息时,用户就可以关掉浏览器,稍后,收件地址栏里的邮箱将陆续收到该群发邮件,再比如群发定时邮件,以及当商城系统中有客 户下单,客户,客服,仓库等相关人员收到订单邮件信息。诸如此类,队列的应用范围是如此之广。二:普通工程师的解决方案和架构师的解决方案方案1:建表存邮件,消息等,用定时程序取出发送。方案2:抽象到更高一层,开发一套通用异步处理队列适用于任何复杂的业务逻辑那么,作为架构师

2021-08-20 16:32:27 124

原创 深入解析PHP7个预定义接口

场景:平常工作中写的都是业务模块,很少会去实现这样的接口,但是在框架里面用的倒是很多。1. Traversable(遍历)接口该接口不能被类直接实现,如果直接写了一个普通类实现了该遍历接口,是会直接报致命的错误,提示使用 Iterator(迭代器接口)或者 IteratorAggregate(聚合迭代器接口)来实现,这两个接口后面会介绍;所有通常情况下,我们只是会用来判断该类是否可以使用 foreach 来进行遍历;class Test implements Traversable {.

2021-08-17 11:28:22 64 1

原创 PHP多进程是怎样执行的

我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守护进程时,多进程的优势不用多说。PHP的多线程也曾被人提及,但进程内多线程资源共享和分配的问题难以解决。PHP也有多线程想关的扩展 pthreads ,但据说不太稳定,且要求环境为线程安全,所用不多。追求高性能可用Swoole协程编程即可!要实现PHP的多进程,我们需要两个扩展 pcntl和 posix,安装方法

2021-08-16 11:18:48 53

原创 解析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 90

原创 mysql索引命中规则

最左匹配原则1、先定位该sql的查询条件,有哪些,那些是等值的,那些是范围的条件。2、等值的条件去命中索引最左边的一个字段,然后依次从左往右命中,范围的放在最后。分析讲解1、mysql的索引分为聚簇索引和非聚簇索引,mysql的表是聚集索引组织表。聚集规则是:有主键则定义主键索引为聚集索引;没有主键则选第一个不允许为NULL的唯一索引;还没有就使用innodb的内置rowid为聚集索引。非聚集索引也称为二级索引,或者辅助索引。2、mysql的索引无论是聚集索引还是非聚集索引,都是B+树结构。聚

2021-08-13 14:46:55 89

原创 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 46

原创 让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 68

原创 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 287

原创 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 61

原创 基于Nginx的负载均衡原理与实战

本文主要讲解以下3个方面介绍Nginx的负载均衡:负载均衡介绍Nginx如何实现负载均衡Nginx负载均衡配置项介绍\01负载均衡介绍什么是负载均衡? 顾名思义就是让客户端的请求均匀地分布到各个服务器上。从下图可以看出,客户端的请求先到达负载均衡器,由负载均衡器通过一系列算法将请求转发到某台上游的业务服务器上。实现负载均衡的方式有很多,下面将列出几种方式,并对比优劣:硬件层面可以通过F5实现负载均衡,性能优异。F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理

2021-07-30 16:31:32 68

原创 Redis实现分布式锁与任务队列的思路

一、正文大家都知道在天猫、京东、苏宁等等电商网站上有很多秒杀活动,例如在某一个时刻抢购一个原价1999现在秒杀价只要999的手机时,会迎来一个用户请求的高峰期,会有几十万几百万的并发量,来抢这个手机,在高并发的情形下会对数据库服务器或者是文件服务器应用服务器造成巨大的压力,严重时说不定就宕机了。另一个问题是,秒杀的东西都是有量的,例如一款手机只有10台的量秒杀,那么,在高并发的情况下,成千上万条数据更新数据库(例如10台的量被人抢一台就会在数据集某些记录下 减1),那次这个时候的先后顺序是很乱的,很容易

2021-07-27 14:38:36 223

原创 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 314

原创 基于redis的分布式锁解析

在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现。固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效率高。redis锁失效的情况:客户端1从master节点获取了锁master宕机了,存储锁的key还没来得及同步到slave节点上slave升级为master客户端2从新的master上获取到同一个资源的锁于是,客户端1和客户端2同事持有了同一个资源的锁,锁的安全性被打破。如果我们不考虑这种极端情

2021-07-13 14:34:34 29

原创 PHP + Redis 实现简单消息队列

Redis做消息队列的好处在于它的轻量级,高并发,延迟敏感,应用场景有 即时数据分析、秒杀计数器、缓存等Redis做消息队列待解决的问题:1、消息的可靠性: 没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理。生产者只管向队列中插入数据,不管消费者是否成功消费。2、消费者挂掉消息不会丢失,但是需要重新触发一下消费者,才能够继续消费消息。代码如下:lib.php 是工具文件,里面有数据库的连接、Redis的连接:...

2021-07-08 16:57:13 115 2

原创 MySQL-InnoDB为什么采用B+树结构实现索引

索引的作用是提高查询效率,其实现方式有很多种,常见的索引模型有哈希表、有序列表、搜索树等。哈希表一种以key-value键值对的方式存储数据的结构,通过指定的key可以找到对应的value。哈希把值放在数组里,用一个哈希函数把key换算成一个确定位置,然后把value放在数组的这个位置。但是,多个key值经过哈希函数的换算,可能会出现同一个值,即哈希冲突,常见的解决办法是链地址法,即将所有的相同Hash值的key放在一个链表中,这样,无论有多少个冲突,都只是在当前位置给单链表增加节点。适用于只有等值

2021-07-06 15:54:46 65

原创 php程序优化之数组操作优化

设计一个数据表如下: id INT NOT NULL AUTO_INCREMENT, value VARCHAR(10) NOT NULL, PRIMARY KEY(id));现在有一个业务需求需要批量插入数据。先来看看下面这一段代码:

2021-07-01 17:47:25 62

原创 彻底搞懂 Redis 事务原理

提到redis的事务,相信很多初学的朋友会对它的理解和使用有些模糊不清,料想它和我们常见的关系型数据库(mysql 、mssql等)中的事务相同,也支持回滚,但这样理解就进入了一个误区,首先:关系型数据中的事务都是原子性的,而redis 的事务是非原子性的。再多说一句,什么是程序原子性?简单的理解就是:整个程序中的所有操作,要么全部完成,要不全部不完成,不会停留在中间某个环节。那么非原子性就是不满足原子性的条件就是非原子性了。我们用例子来解释一下:原子性:数据库中的某个事务A中要更新t1表、t2表的某条记

2021-06-29 16:46:28 165 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 339 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 208

原创 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 131

原创 【shell脚本】字符串和数组的使用

字符串可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析username="mayuan"str_1="hello ${username}" str_2='hello ${username}'echo $str_1 # hello mayuanecho $str_2 # hello ${username}获取字符串的长度username="mayuan"echo ${#username} # 6截取字符串username="mayuan"echo ${user

2021-06-23 10:05:07 41

原创 nginx与php-fpm通信的两种方式

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

2021-06-18 11:35:43 314

原创 复习下Linux去除重复项命令uniq

iq也是linux管道命令家族中的一员,其主要功能是去除重复项。在介绍uniq命令之前,我们先来新建在下面的案例中需要用到的文件/tmp/uniq.txt,内容如下默认情况下uniq只会检索相邻的重复数据从而去重。在/tmp/uniq.txt中虽然“onmpw web site” 有三条,但是其中一条是和其他两条不相邻的,所以只去重了一条,同理“error php function”也是这种情况。鉴于以上的检索机制,所以uniq一般情况下要和sort命令一块儿使用。alpha css webcat

2021-06-16 15:15:24 68

原创 PHP进程及进程间通信

环境php中的进程是以扩展的形式来完成。通过这些扩展,我们能够很轻松的完成进程的一系列动作。pcntl扩展:主要的进程扩展,完成进程创建于等待操作。posix扩展:完成posix兼容机通用api,如获取进程id,杀死进程等。sysvmsg扩展:实现system v方式的进程间通信之消息队列。sysvsem扩展:实现system v方式的信号量。sysvshm扩展:实现system v方式的共享内存。sockets扩展:实现socket通信。这些扩展只能在linux/mac中使用,window

2021-06-11 11:28:30 292

原创 php SESSION入库的实现

session入库,就是重写session制机,在session的周期内,获得到session的数据并记录到数据库Session默认是存放到服务器上的文件中,不方便管理,如果能把session存放到数据库中就可以方便的对数据库进行管理了比如:session入库可以解决哪些问题?可以解决跨域操作可以实现单点登陆可以统计在线人数可以实现同一时只允许一个用户在线session_set_save_handler的回掉函数描述实现session入库第一步:在php.ini配置文

2021-06-08 17:12:08 47

原创 PHP内存溢出是什么样的

相信很多人做大批量数据导出和数据导入的时候,经常会遇到PHP内存溢出的问题,在解决了问题之后,总结了一些经验,整理成文章记录下。优化点1、优化SQL语句,避免慢查询,合理的建立索引,查询指定的字段,sql优化这块在此就不展开了。2、查询的结果集为大对象时转数组处理,框架中一般有方法可以转,如Laravel中有toArray(),Yii2中有asArray()。3、对于大数组进行数据切割处理,PHP函数有array_chunk()、array_slice()。对于大型的字符串和对象,使用引用传递&a

2021-06-07 11:57:29 75 3

原创 PHP代码优化

使用PHP内置函数的性能优劣尽可能少用魔法函数抑制符@会产生额外开销优化点:合理使用内存,利用unset()及时释放不使用的内存(unset()出现注销不掉的情况)避免在循环内做运算<?php$str="110world";$strlen=strlen($str);for($i=0;$i<$strlen;$i++){ echo "1";}减少计算密集型业务务必使用带引号字符串做键值如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4

2021-06-04 10:31:37 43

原创 PHP实现QQ登录原理

第三方登录,就是使用大家比较熟悉的比如QQ、微信、微博等第三方软件登录自己的网站,这可以免去注册账号、快速留住用户的目的,免去了相对复杂的注册流程。下边就给大家讲一下怎么使用PHP开发QQ登录的功能。1、进入QQ互联官网进行登录(可以使用自己的QQ或者重新注册一个QQ号作为咱们项目的单独QQ进行管理),地址:https://connect.qq.com/2、点击“应用管理”进入QQ互联管理中心,在这里进行相关应用的创建,分为 网站应用 和 移动应用。选择自己想要的应用进行资料的填写(审核需要等待大概7天

2021-05-31 09:59:49 77

原创 PHP的代理模式详解

在客户端与实体之间建立一个代理对象(proxy),客户端对实体进行的操作全部委派给代理对象,隐藏实体的具体实现细节。Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务。//代理接口interface Proxy{ public function getUserName($id); public function setUserName($id, $newName);}//用户操作代理实现class UserProxy implem..

2021-05-29 10:52:35 265 2

原创 MySQL常用的函数,总结下基础

1.在使用MySQL的时候,灵活运用函数可以提高开发效率,方便解决一些棘手的问题。本文讲解的MySQL常用函数包括常用的字符串函数、数值函数、日期和时间函数、聚合函数等。CHARSET(str) //返回字符串字符集CONCAT (string2 [,… ]) //连接字符串INSTR (string ,substring ) //返回substring首次在字符串中出现的位置,不存在返回0LCASE (string ) //字符串转换成小写LEFT (string ,length ) //从字符

2021-05-28 10:15:32 51 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除