Mark’s Blog

Confident, modest and patient。

排序:
默认
按更新时间
按访问量

观察者模式

### 观察者模式 当一个对象状态发生改变时,依赖他的对象全部会收到通知,并自动更新。 场景:当一个事件发生后,要执行一连串更新操作。传统操作是在事件发生后的代码中直接处理逻辑。当新的逻辑增加时,代码变的难以维护。这种方式是耦合的,侵入式修改的。增加逻辑需要修改事件主体的代码。 观察着实现了低...

2018-07-21 11:14:55

阅读数:21

评论数:0

策略模式

策略模式 一般来说,使用设计模式时,首先考虑“什么会导致重新设计”?然后要避免那些导致重新设计的因素。 设计模式的主要原则之一是封装变化的内容。大部分情况下,对于不同类别的请求,需要有不同的算法来实现。这时候策略模式就派上用场了。 UML类图 图 8-1 策略模式 关于策略...

2018-07-21 11:12:20

阅读数:16

评论数:0

代理模式

代理模式是一种结构型设计模式。参与者主要有两个,即代理对象和真实对象。 远程代理 代理对象在一个地址空间,而实际对象在另一个地址空间,此时代理就是远程的。除了使用远程代理做防火墙,远程代理还可以用于在线游戏平台。 虚拟代理 虚拟代理可以缓存一个真实主题的有关信息,从而能延迟对这个真实主体的...

2018-07-21 11:04:04

阅读数:18

评论数:0

状态设计模式

状态(state)设计模式是一种针对状态改变的有用的模式。游戏通常使用状态模式,因为游戏中的对象会频繁改变状态。状态模式的作用就是允许对象在状态改变时改变其行为。 UML类图 图 6-1 状态模式类图 使用场景 游戏和模拟器经常使用状态模式来处理不同的状态。当目标对象状态需要频繁更...

2018-07-19 07:12:30

阅读数:39

评论数:0

模板方法模式

模板方法模式 首先来说下反向控制结构(好莱坞原则),好莱坞原则指父类调用子类的操作,而子类不调用父类的操作,仅仅是实现具体方法。(比如面试完毕之后,面试官告诉你,先回去吧,有消息我们会通知你,不要给我打电话问,我们会给你电话的),模板方法是好莱坞原则的最佳实践之一。模板方法定义操作中算法的“骨架...

2018-07-17 08:34:35

阅读数:19

评论数:0

装饰器模式

装饰器模式 作为一种结构型设计模式,装饰器模式是对一个已有结构增加“装饰”。对于适配器模式,为现有的结构增加的是一个适配器类,用来处理不兼容的接口。装饰器模式回想现有的对象增加对象。装饰器也称为包装器,Decorator参与者用具体组件包装Component参与者。 使用场景 一...

2018-07-15 16:02:22

阅读数:22

评论数:0

适配器模式

适配器模式 设计模式有个重要的格言:组合优先于继承。一般来说组合要优先于继承,因为参与者之间的绑定更加宽松,在重用、结构和修改等方面有很多优点,这点与继承不同,继承具体类或者所继承的类中包含已经实现的方法时,存在一种紧密绑定的缺点。 适用场景 适配器在电气领域非常常见,两项转三项...

2018-07-12 08:49:44

阅读数:9

评论数:0

关于设计模式那些事儿

关于设计模式那些事儿 在开始学习设计模式基础之前,你需要具备的一些基础知识,如OOP思想、PHP开发经验和UML基础,这些有助于你快速理解和掌握设计模式。 如果说之前的OOP,PHP开发技巧学的是一招一式的话,设计模式更像是一本武功秘籍,可以让你把之前学会的一招一式融会贯通,发挥更大的威力。 ...

2018-07-10 23:24:03

阅读数:19

评论数:0

原型设计模式

原型设计模式 原型设计模式主要使用克隆技术,复制原型实例来创建新对象。这里Client类是原型设计模式中不可缺少的一部分。客户通过Prototype接口创建一个具体原型的实例,Prototype接口中包含一个克隆方法。 应用场景 如果一个项目需要你创建某个远行对象的多个实例,就可...

2018-07-10 08:43:08

阅读数:22

评论数:0

工厂模式

工厂方法模式 作为一种创建型设计模式,工厂方法就是要创建“某种东西”。对于工厂模式,要创建的东西和创建它的工厂类之间不存在绑定。为了保持松耦合,客户一般会通过一个工厂发出请求,工厂去创建所需求的产品。 应用场景: 如果实例化的对象的子类可能变化,就要使用工厂方法模式。每个子类相当...

2018-07-08 11:21:17

阅读数:44

评论数:0

FastCGI模式下运行php7

众所周知,常用的跟php搭配的web server 有两个,apache 和nginx,编译完server之后需要配置下才可以正常解析php文件。下面我们来看下两种服务器是如何解析php文件。 Nginx 一、主流的nginx+php的运行原理如下: nginx的worker进程直接管理每...

2018-06-17 18:25:14

阅读数:306

评论数:0

socket带宽占用过高?

最近部署服务器集群的时候,查看了下原来单节点的配置,4核8G+8M带宽,跟领导申请是否需要保持配置,领导让根据实际情况调整下,尤其带宽部分,带宽太贵了主要是。 登录服务器之后,top下发现,cpu、内存占用并不高,iftop -i eth0,之后发现带宽占用居然有5M,检查在线人数发现,并没有太...

2018-06-16 19:42:07

阅读数:251

评论数:0

socket 莫名其妙的断开连接?

之前有客户反馈,经常会收到客户端断开连接的提醒。影响聊天,希望能查下问题。开始我以为是用户网络波动,导致的连接断开,后来同事跟我反馈,网络正常的时候也会出现断开连接的现象,希望我查下服务器是否配置了什么,会话保持时长之类的参数。 问题重现 这个问题在c++端比较容易重现,在web端偶现,移动端...

2018-06-16 19:04:53

阅读数:1573

评论数:0

socket消息推送延迟-fwrite引发的血案

最近有同事反映,自己的推送消息延迟严重,最长的大概一分钟左右,导致相关业务逻辑受影响,但是类似的业务在JS client 却没有问题,只是在PHP client上延迟严重。该业务对消息及时性要求非常高,于是领导要求尽快查清原因,并解决问题。 问题重现 同事给我现场演示,发现问题确实存在。以前并...

2018-06-16 18:08:48

阅读数:160

评论数:0

前端框架选型调研报告

前言 随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScript脚本。谷歌浏览器的V8引擎就是为解决这一问题而生,在node中也是采用该引擎来解析JavaScript。V8在运行之前将JavaScript编...

2018-06-09 20:19:45

阅读数:283

评论数:0

HAProxy and ejabberd

HAProxy and ejabberd 英文链接:https://blog.onefellow.com/post/76702632637/haproxy-and-ejabberd 虽然以前我已经发布了关于使用Cisco SLB的负载均衡ejabberd的文章,主要针对那些有能力使用基于思科的...

2018-04-27 22:20:04

阅读数:38

评论数:0

IM服务器架构设想

简单架构   最初的IM聊天服务器可能像下图所示: 由于仅有一台im服务器,一台mysql,一旦任何一个服务出现故障,不得不对外停止服务.因此参考官方文档,做了ejabberd集群调研. 内部模块 ejabberd是一个高度模块化的服务器,它允许你按照自己实际需求,自由组合模块来实现功...

2018-04-27 20:56:22

阅读数:105

评论数:0

服务器负载Load分析

相信管理过服务器的朋友们都收到过服务器负载过高的报警,今天我们一起来分析下关于服务器负载的那些事儿. 一、load average 首先,了解下平均负载: top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载。 系统平均负载被定义为在特定时间间隔内运行...

2018-03-31 17:49:07

阅读数:228

评论数:0

自助Linux之问题诊断工具strace

原文链接 引言 “Oops,系统挂死了…” “Oops,程序崩溃了…” “Oops,命令执行报错…” 对于维护人员来说,这样的悲剧每天都在上演。理想情况下,系统或应用程序的错误日志提供了足够全面的信息,通过查看相关日志,维护人员就能很快地定位出问题发生的原因。但现实情况,许多错误日志打印...

2018-03-13 15:12:05

阅读数:55

评论数:0

如何使用strace+pstack利器分析程序性能

引言 有时我们需要对程序进行优化、减少程序响应时间。除了一段段地对代码进行时间复杂度分析,我们还有更便捷的方法吗? 若能直接找到影响程序运行时间的函数调用,再有针对地对相关函数进行代码分析和优化,那相比漫无目的地看代码,效率就高多了。 将strace和pstack工具结合起来使用,就可以达到...

2018-03-13 14:18:58

阅读数:57

评论数:0

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