自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 linux中浅谈端口占用和开闭管理

背景平时开发或线上运维少不了跟端口打交道,今天我们简单聊聊平时跟端口相关的几个场景首先查看某台主机某个端口服务是否正常比如查看本机 redis服务是否正常telnet127.0.0.16379如果提示如下:Trying127.0.0.1...telnet:connecttoaddress127.0.0.1:Connectionrefused则说明服务没有正常监听端口或者端口没有开放,可以用下面2中方法一一排除查...

2020-05-31 20:06:46 98

原创 如何使用sentry进行异常监控

参考:http://phpmianshi.com/?id=99系统架构中应用程序的监控非常重要。比如你是否遇到过这种问题:当用户向你抛出一个bug(或者说异常),而你却找不到异常出现的原因和时机,也很难去重现这种奇葩的事件,此时你有一种众里寻他千百度,那bug却不知在何处的感觉。所以,利用某种工具去实现系统的异常监控,方便我们及时查看结果,并且作出合理的处理,这对于每个架构师来说都是挺重要的。一、概念理解:1、异常与捕获 异常指的是在程序运行过程中发生的异常事件,通常是由外部问..

2020-05-25 14:38:17 205

转载 php-fpm进程数优化

参考:http://www.phpmianshi.com/?id=78CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。CGI(Common Gateway Interface)全称是“通用网关接口”,WEB 服务器与PHP应用进行“交谈”的一种工具FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。从根本上来说,FastCGI是用来提高CGI程序性能的。类似于CGI..

2020-05-11 20:26:12 38

原创 PHP内核分析之GDB使用(一)

1.PHP源码下载和安装https://github.com/php/php-src/releases$ ./configure --prefix=/usr/local/php7 --enable-debug --enable-fpm$ make && sudo make install2.环境工具介绍CENTOS 7.2PHP-7.4.1G...

2019-12-23 11:35:46 32

原创 Mysql中 面试必考

通用规则是:多读少写加缓存,少读多写加队列带事务的不要整体commit,分段commit一、要保证数据库的效率,要做好以下四个方面的工作:① 数据库设计② sql语句优化③ 数据库参数配置④ 恰当的硬件资源和操作系统二、通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不...

2019-12-19 11:53:33 34

原创 Redis中 面试必考

参考:http://note.youdao.com/noteshare?id=2839dbb376ab21135183dc1603b10379&sub=0B126347AFB347B8ACDD337A5A808D05一. Redis性能如此高的原因纯内存操作,内存的读写速度非常快 单线程,保证了每个操作的原子性,省去了很多上下文切换线程的时间 高效的数据结构,如压缩表,对短数据...

2019-12-19 10:09:18 30

原创 Docker中部署Golang项目

1. 安装docker参考:https://blog.csdn.net/tiancityycf/article/details/1027996462. 默认你已经有一个可以正常运行的golang项目了 比如叫project启动方式 go run main.go参考:https://github.com/tiancityycf/gogin3. cd project &&...

2019-10-29 15:33:51 550

原创 Laravel中用到的设计模式

参考:https://www.phpmianshi.com/?id=891:工厂模式Auth::user()此处Auth这个类就是工厂中的方法,Auth是注册树中的别名。好处:类似于函数的封装,使对象有一个统一的生成(实例化)入口。当我们对象所对应的类的类名发生变化的时候,我们只需要改一下工厂类类里面的实例化方法即可。2:单例模式好处:对象不可外部实例化并且只能实例化一次,节省资源。实现方式:privatestatic$ins=null;...

2020-08-03 20:32:24 16

原创 Laravel神奇的IoC容器

Laravel 的核心就是一个IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是IoC(控制反转)和DI(依赖注入)超人和超能力,依赖的产生!我们把一个“超人”作为一个类,一个超人肯定拥有至少一个超能力,这个超能力也可以抽象为一个对象。classPower{/***能力值*/protected$ability;/***能力范围或距离*/protected...

2020-08-02 11:31:36 19

原创 Laravel中的基本概念

参考:https://www.phpmianshi.com/?id=37一.什么是 DI依赖注入/IOC控制反转DI依赖注入啥都不说,直接上代码<?phpclassUserController{private$user;function__construct(UserModel$user){$this->user=$user;}}$u...

2020-08-02 10:35:04 17

原创 设计模式的基本原则

设计模式设计模式的世界丰富多彩,比如生产一个个「产品」的工厂模式,衔接两个不相关接口的适配器模式,用不同的方式做同一件事的策略模式,构建步骤稳定、根据构建过程的不同配置构建出不同对象的建造者模式等。面向对象结合设计模式,才能真正体会到程序变得可维护、可复用、可扩展、灵活性好。设计模式对于程序员而言并不陌生,每个程序员在编程时都会或多或少地接触到设计模式。无论是在大型程序的架构中,亦或是在源码的学习中,设计模式都扮演着非常重要的角色。设计模式基于六大原则 开闭原则:一个软件实体如类、模.

2020-07-30 15:03:38 8

原创 代理模式、桥接模式、中介者模式区别和联系

参考:https://www.phpmianshi.com/?id=134联系在现实生活中,如房屋中介、买房人、卖房人,房屋中介是一个中介,因为它担任买房人和卖房人之间的相同;房屋中介也是一个代理,它在卖房人眼前是买房人的代理,在卖房人眼前是买房人的代理;最后房屋中介也是一个桥接,用于连接买房人和卖房人。那这字面意思相似的三者到底有什么不同的应用场景。代理模式场景 1. 最常见的就是数据库中间件,他们代理了数据库的访问,访问一个集群跟访问一个单机数据...

2020-07-30 14:50:31 55

原创 php中介者模式

参考:https://www.phpmianshi.com/?id=145概念中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改。一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式。PHP中不是特别常用的设计模式。场景 我们有一个CD类和一个MP3类,两个类的结构相似。 我们需要在CD类更新的时候,同步更新MP3类。 传统的做法就是在CD类中实例化MP3类...

2020-07-28 21:17:41 17

原创 php中的状态模式

参考:https://www.phpmianshi.com/?id=140概念状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。角色上下文环境(Work):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的具体对象来处理。抽象状态(State):定义一个接口以封装使用上下..

2020-07-27 20:02:55 16

原创 php中的模板模式

参考:https://www.phpmianshi.com/?id=139概念在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。示例<?php​abstract class Game{ ..

2020-07-26 12:57:18 27

原创 php中的依赖注入模式

参考:https://www.phpmianshi.com/?id=131概念依赖注入模式(Dependency Injection),用松散耦合的方式来更好的实现可测试、可维护和可扩展的代码。依赖注入模式是控制反转(Inversion of Control)的一种实现方式。要实现控制反转,通常的解决方案是将创建被调用者实例的工作交由 IoC 容器来完成,然后在调用者中注入被调用者(通过构造器 / 方法注入实现),这样我们就实现了调用者与被调用者的解耦,该过程被称为依赖注入。示..

2020-07-26 12:48:03 12

原创 php中的组合模式

参考:https://www.phpmianshi.com/?id=129概念当我们的一个对象可能代表一个单一的实体,或者一个组合的实体,但是仍然需要通过同样的方式被使用时,这种情形则适合使用组合模式的设计。示例一个表单类实例在处理其表单所有元素的方法与处理该表单自身实例方法相同,在调用方法 render()时,会随之遍历它的所有子元素并对他们调用render()方法<?phpinterfaceRenderableInterface{publ...

2020-07-24 15:20:44 14

原创 对象池模式和注册树模式的区别和联系

参考:https://www.phpmianshi.com/?id=127区别对象池主在对象创建开销较大或要控制对象数量的时候使用。最常见的对象池应该是数据库连接池和线程池,例如程序需要数据库连接时从连接池中取一个(连接池里有多个连接),用完了不是关闭连接而是把连接放回连接池给其他程序使用。一个对象池通常只放同一类的对象。注册树(Registry模式)其实类似对象池,但是里面各种类型的对象都放一个,方便程序通过Registry找到这些对象直接使用而不需自己创建。联系两者...

2020-07-23 09:07:42 11

原创 php中的对象池模式

参考:https://www.phpmianshi.com/?id=126概念对象池设计模式是创建型设计模式,它会对新创建的对象应用一系列的初始化操作,让对象保持立即可使用的状态 - 一个存放对象的 “池子” - 而不是对对象进行一次性的的使用(创建并使用,完成之后立即销毁)。对象池的使用者会对对象池发起请求,以期望获取一个对象,并使用获取到的对象进行一系列操作,当使用者对对象的使用完成之后,使用者会将由对象池的对象创建工厂创建的对象返回给对象池,而不是用完之后销毁获取到的对象。对象池在..

2020-07-22 19:50:13 16

原创 php中享元模式

参考:https://www.phpmianshi.com/?id=132概念享元模式(Flyweight),为了节约内存的使用,享元模式会尽量使类似的对象共享内存。在大量类似对象被使用的情况中这是十分必要的。常用做法是在外部数据结构中保存类似对象的状态,并在需要时将他们传递给享元对象示例<?php/***创建享元接口FlyweightInterface。*/interfaceFlyweightInterface{/***创...

2020-07-22 19:47:49 14

原创 php中的数据映射模式

参考:https://www.phpmianshi.com/?id=130概念数据对象映射模式,就是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作,数据映射模式使您能更好的组织你的应用程序与数据库进行交互。大家如果用过 thinkphp 这个框架,应该知道里面的 Model 吧,当你 new User(或 $user = M(‘User’)) 的时候,其实就是在操作 user 表示例classUser{//分别对应User表里面的四...

2020-07-20 12:04:48 178

原创 php中的流接口模式

参考:https://www.phpmianshi.com/?id=128概念流接口模式(Fluent Interface)用来编写易于阅读的代码,就像自然语言一样(如英语)场景Doctrine2 的 QueryBuilder,就像下面例子中类似PHPUnit 使用连贯接口来创建 mock 对象Yii 框架:CDbCommand 与 CActiveRecord 也使用此模式示例<?phpclassSql{/***@vara...

2020-07-19 16:45:04 19

原创 php中的门面模式Facade

参考:https://www.phpmianshi.com/?id=70概念门面模式又叫外观模式,用来隐藏系统的复杂性,提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。构成1.定义一个(或多个)具备所需接口的新类(门面类Facade)2.新类门户(门面类Facade)使用原来的系统(包含Hotel,Traffic,ScenicAr..

2020-07-16 21:13:44 26

原创 nginx中request_time和upstream_response_time详解

参考:https://www.phpmianshi.com/?id=123背景最近监控报警有短暂的502,赶紧分析问题原因,查看nginx的access_log 发现短暂报警的request_time比较大,但是upstream_response_time有2个值,一个比较小,一个比较大,日志如下:request:GET/index/allHTTP/1.1request_time:30.049up_resp_time:0.015:30.033up_addr:11.11.1...

2020-07-15 20:12:47 74

原创 linux中sed用法读这一篇就够了

参考:https://phpmianshi.com/?id=1171.概念sed是一种行编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。2.语法sed [options] 'co.

2020-07-15 11:27:20 28

原创 php中的代理模式

参考:https://www.phpmianshi.com/?id=69概念代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服.

2020-07-13 20:49:21 35

原创 linux中配置内核参数sysctl详解

​参考:https://www.phpmianshi.com/?id=116概念sysctl用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。命令格式sysctl[-n][-e]-wvariable=valuesysctl[-n][-e]-p<filename>(default/et...

2020-07-13 20:47:01 31

原创 php中的迭代器模式

参考:https://www.phpmianshi.com/?id=68概念迭代器:类继承PHP的Iterator接口,批量操作。1. 迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。2. 相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。示例接口Iteratorcurrent() 返回当前元素key() 返回当前元素的键next() 向前移动到下一个元素rewind() 返回到迭代器的第一个元素valid() 验证是否有效class.

2020-07-10 18:09:44 25

原创 php中原型模式(Prototype Pattern)

参考:https://www.phpmianshi.com/?id=67概念原型模式(Prototype Pattern):与工厂模式类似,都是用来创建对象的。利用克隆来生成一个大对象,减少创建时的初始化等操作占用开销场景多用于创建大对象,或初始化繁琐的对象。如游戏中的背景,地图。web中的画布等等1,有些时候,我们需要创建多个类似的大对象。如果直接通过new对象,开销很大,而且new完还得进行重复的初始化工作。可能把初始化工作封装起来的,但是对于系统来说,你封不封装,初始化..

2020-07-09 22:08:15 43

原创 策略模式与桥接模式区别

参考:https://www.phpmianshi.com/?id=65实际上所有模式可以只分为类模式和对象模式两种,类模式是用继承而对象模式是用委托。Bridge模式和Strategy模式相似就是因为他们都将任务委托给了另外一个接口的具体实现,他们之间的区别在于Bridge的目的是让底层实现和上层接口可以分别演化,从而提高移植性而Strategy的目的是将复杂的算法封装起来,从而便于替换不同的算法。因此可以想象一般情况下Bridge的实现几乎不会在运行时更改而Strategy的算法则很有可能.

2020-07-08 22:14:24 51

原创 php中的桥接模式

参考:https://www.phpmianshi.com/?id=64桥接模式 (Bridge Pattern):将抽象与实现解耦,使得两者可以独立的变化(一)为什么需要桥接模式1,如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。2,抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色

2020-07-07 09:13:35 35

原创 记一次连接Redis偶现超时的问题

参考:https://www.phpmianshi.com/?id=118问题描述公司老的项目没有任何监控,对于系统的运行健康情况完全不知,于是搭建了2套监控系统,一套sentry监控代码层面的exception,一套cls告警,监控所有系统的状态码,应用日志等。监控系统上线后,就发现有一台跑定时任务的机器,经常偶现报错 RedisException: Connection timed out,一天几十次,也不是固定时间,如下图:问题分析于是开始分析为何超时,首先...

2020-07-05 14:10:43 74

原创 linux中tcpdump的详细用法

参考:https://www.phpmianshi.com/?id=115在调试网络通信程序是tcpdump是必备工具。tcpdump很强大,可以看到网络通信的每个细节。如TCP,可以看到3次握手,PUSH/ACK数据推送,close4次挥手,全部细节。包括每一次网络收包的字节数,时间等。tcpdump的选项 -a —— 将网络地址和广播地址转变成名字 -d ——将匹配信息包的代码以人们能够理解的汇编格式给出 -dd ——将匹配信息包的代码以c语言程序段的格式给出 ..

2020-07-05 14:04:49 36

原创 php中适配器模式与装饰器模式的区别

参考:https://www.phpmianshi.com/?id=63概念适配器与装饰器模式的别名都是包装模式(Wrapper)。区别适配器模式的意义将一个接口转变成另一个接口,目的是通过改变接口来达到重复使用的目的。装饰器模式的意义不改变被装饰对象的接口,而是保持原有的接口,增强原有对象的功能,或改变原有对象的处理方式而增提高性能。...

2020-07-02 15:52:11 44

原创 php中的适配器模式

参考:https://www.phpmianshi.com/?id=62概念适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。场景老代码接口不适应新的接口需求,或者代码很多很乱不便于继续修改,或者使用第三方类库。例如:php连接数据库的方法:mysql,,mysqli,pdo,可以用适配器统一示例/**在我们的示例中,目标接口是MonkeyInterface,*...

2020-07-01 11:48:38 51

原创 php中装饰器模式

概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点..

2020-06-30 15:09:28 29

原创 php中策略模式详解

参考:https://www.phpmianshi.com/?id=60概念在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。场景场景1:假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。场景2:例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,...

2020-06-29 11:13:19 29

原创 php中责任链模式

参考:https://www.phpmianshi.com/?id=59概念又叫职责链模式。包含了一些命令对象和一些处理对象,每个处理对象决定它能处理哪些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的方法。示例情景一: 当用户发布一个帖子时: 如果版主可以决定,就版主处理; 如果版主不能决定,就交给上一级管理员处理; 如果管理员不能决定,就交给上一级治安部门处理...

2020-06-28 16:04:47 32

原创 php中spl库观察者模式接口

参考:https://www.phpmianshi.com/?id=58PHP-SPL标准库中实现了观察者模式接口,PHP内置提供了两个接口来供外部应用区实现这个模式。<文档>http://www.php.net/manual/zh/splobserver.update.phpSplSubject 接口SplSubject代表着被观察的对象,其结构:interfaceSplSubject{//添加(注册)一个观察者publicfunctionat...

2020-06-23 11:43:18 37

原创 单例模式(Singleton)和 多例模式(Multiton)

参考:https://www.phpmianshi.com/?id=461、概念简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。 常见使用实例:数据库连接器;日志记录器(如果有多种用途使用多例模式);锁定文件。2、示例Singleton.php<?php/** * Singleton类 */class Singleton{ private static $inst

2020-06-22 14:17:15 73

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