昨天的控件点击时通过外面,加个 listener。然后如果外部设定当前选中位置,也要刷新一下页面,所以刷新逻辑放到设置 textSelectedIndex 中去。
RabbitMQ工作模式 1.Work queues 工作队列模式 1.1 模式说明 work queues 与入门程序的 简单模式 相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。 应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。 channel.basicConsume(Producer.FANOUT_QUEUE_2,false,consumer); } } 2.3 小结 交换机需要与队列进行绑定,绑定之后;一个消息可以被多个消费者 都收到 发布订阅模式与工作队列模式的区别 工作队列模式不用定义交换机,而发布/订阅模式需要定义交换机 工作队列模式的生产方是面向队列发送消息(底层使用默认交换机),发布/订阅模式的生产方是面向交换机发送消息 工作队列模式不需要设置,会将队列绑定到默认的交换机 1、简单模式 HelloWorld : 一个生产者、一个消费者,不需要设置交换机(使用默认的交换机) 2、工作队列模式 Work Queue : 一个生产者、多个消费者(竞争关系),不需要设置交换机(
装饰模式就是这样的一种设计方式。 什么是装饰模式 “装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additional responsibilities to an object dynamically 就增加功能来说,装饰模式相比生成子类更为灵活。) ” 是不是觉得跟代理模式有些像呢?对代理模式感兴趣的可以看看我的这篇文章: http://mp.weixin.qq.com/s? 关于装饰模式与代理模式 两者都是对功能增强。面试会经常问这两点区别。 我认为,装饰器模式关注于在一个对象上动态的添加方法,代理模式关注于控制对象的访问。 代理模式中史塔克和钢铁侠战甲已经绑死了,战甲也焊死了,小辣椒没法穿这套战甲了。 如图,左边为代理模式,右边为装饰模式。
组合模式的两种实现 组合模式有两种不同的实现,分别是透明模式和安全模式: 两者的区别在于透明模式将组合使用的方法放到抽象类中,而安全模式则是放到具体实现类中 透明模式 透明模式是把组合的方法抽象到抽象类中 设计模式系列: 设计模式【1】-- 单例模式到底几种写法? 设计模式【1.1】-- 你想如何破坏单例模式? 设计模式【1.2】-- 枚举式单例有那么好用么? 设计模式【1.3】-- 为什么饿汉式单例是线程安全的? 设计模式【2】-- 简单工厂模式了解一下? 设计模式【2.1】-- 简单工厂模式怎么演变成工厂方法模式? 设计模式【3.3】-- CGLIB动态代理源码解读 设计模式【4】-- 建造者模式详解 设计模式【5】-- 原型模式 设计模式【6.1】-- 初探适配器模式 设计模式【6.2】-- 再聊聊适配器模式 设计模式 【7】-- 探索一下桥接模式 设计模式【8】-- 手工耿教我写装饰器模式 设计模式【9】-- 外观模式?
抽象工厂模式 抽象工厂模式( Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 AbstractProduct:抽象产品 Product:具体产品 简单工厂,工厂方法,抽象工厂 对比三种工厂模式,简单工厂直接在一个静态工厂中返回产品实例,没有对产品或工厂做任何抽象,是最简单粗暴的工厂模式 当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式;当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来创建产品对象,并将创建对象的工厂方法设计为静态方法时 ,工厂方法模式退化成简单工厂模式。 另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
前言 在Java开发中,设计模式是常用的一种编码方式,合理使用设计模式可以帮助开发人员更快地编写出高效、可靠和可维护的代码。 本期将撰写一个关于设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源至:Gitee点击跳转。在上一篇《Java设计模式(10)代理模式》文章中,我们介绍了代理模式。 本文是这个系列的第十一篇章,我们将讲解一下组合模式的实现方式、应用场景以及它的用途。 组合模式 组合模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。 组合模式使得客户端对单个对象和组合对象的使用具有一致性。 使用场景 树形结构:需要表示对象的部分-整体层次结构的系统。 文件系统:文件夹和文件的层次结构。 display 方法则用于遍历这个目录结构 测试使用 此处示例将目录和文件的创建封装成一个方法 System.out.println("------------------------------组合模式
这篇文章分享一下组合模式,具体类似于树形的数据结构,二叉树中有具体运用,有兴趣的可以翻阅资料。 组合模式: 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。 这就是组合模式能够将组合对象和简单对象进行一致处理的原因。 ; } } 优缺点: 优点: · 组合模式使得客户端代码可以一致地处理对象和对象容器,无需关系处理的单个对象,还是组合的对象容器。 将”客户代码与复杂的对象容器结构“解耦。 (这个是几乎所有设计模式所面临的问题)。 使用场景: 将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树等。
apache目前主要有两种模式:prefork模式和worker模式: 1)prefork模式(默认模式) prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。 apache模式的查看和安装 1.常看当前模式 如果apache已经安装,我们可以用"httpd -l"命令查看当前模式。 若找到prefork.c则表示当前工作在prefork模式;同理出现worker.c则工作在worker模式。 另外很多php模块不能工作在worker模式下,例如redhat linux自带的php也不能支持线程安全。所以最好不要切换工作模式。
1.定义 装饰者模式是一种结构型模型,是动态的给对象增加职责,对于新增功能来说要比通过子类方式更加的灵活。 2.装饰者模式结构图 Info为抽象类,为信息类,主要扮演角色为Component,相当于蛋糕或基本信息,为了协调装饰物与被装饰物的一致性。 3.装饰者模式实现 Info为抽象类,为信息类,主要扮演角色为Component,同时提供两个方法,一个获取基本信息,另一个获取所有信息,包括附加信息。 参考文献《图解设计模式》 代码获取地址:https://gitee.com/bughong/design-pattern
Apache的几种工作模式 查看Apache所有工作模式: 在httpd目录执行以下命令: # . /configure --help /--with-mpm 在help文件中搜索“--with-mpm” 工作模式有:prefork、worker、event、beos、mpmt_os2 event模式,是为解决keep-alive保持长连接出现的一种工作模式,使用keep-alive长连接的时候,某个线程会一直被占用,及时中间没有请求,需要等到超时才会被释放,所以这个时候就出现了event 的工作模式就出现了。 在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。
Apache 是一个非常成熟的Web服务器,工作模式也在不断优化 现在 Apache 已经有了 3 个核心工作模式,看下他们各自的工作方式是什么样的 (1)prefork MPM,多进程工作模式 先生成主进程 ,完成基础的初始化工作,然后,通过fork预先产生一批的子进程(子进程会复制父进程的内存空间,不需要再做基础的初始化工作),然后等待服务 之所以预先生成,是为了减少频繁创建和销毁进程的开销 多进程的好处 因此,prefork并不太适合高并发场景 (2)worker MPM,多进程和多线程的混合模式 使用了多进程和多线程的混合模式,它也预先fork了几个子进程(数量很少),然后每个子进程创建一些线程 每个请求过来 ,却又引起了新的问题,就是“线程安全”,多个线程修改共享资源导致的“竞争行为”,因此,一定程度上增加Web服务的不稳定性 (3)event MPM,多进程和多线程的混合模式,引入Epoll 比较新的模式 Apache的三种模式中在真实应用场景中,event MPM是最节约内存的
今天粗略的把分组密码的工作模式看完了,当然了只是粗略的看完了,没有进行细化,也没有依靠自己的理解把相应的流程图和数学公式写出来。 既然分组密码有多种不同的应用场景,那么它就有不同的工作模式,其工作模式分为如下几种: 电子密码本模式 —— ECB 密文分组链接模式 —— CBC 输出反馈模式 —— OFB 密文反馈模式 —— CFB 计数器模式 —— CTR 后三种模式又将分组密码原理运用在了序列密码的加密当中。 分组密码随着工作模式的改变可以运用到不同的场景中,有的适合用于数据库加密、有的适合进行完整性的校验。 这几种分组密码的工作流程我后期会画出流程图进行分享。希望可以共同提高。
番茄工作法 & TODO LIST 领导希望员工能够在工作中投入更多的时间,甚至晚上11点下班的员工才是好员工。但是我觉得一个人能够有高效的4个小时产出时间就不错了。 工作应当以结果为导向,不应该以工作时间为判断标准。 我现在经常以「番茄工作法」来完成任务,在番茄期间如果有任务或想法,记在纸上——效率真得很高。 关于服务端的工作 大概一个月前,运营会经常找我,测试会经常找我,运维会经常找我,前端会经常找我,爬虫组会经常找我。而有60%的事情,都至少找过我两次以上,经常被打扰,真的很难受。 运营经常找我统计数据,我做好工具给他 测试经常因为某些操作失误或流程不熟悉找我,我写好wiki给他 把服务端维护好,让运维省心 最重要的还是多思考,思考如何能够改善自己的工作流(Mac下的Alfred
职责链模式 基本介绍 1)职责链模式(ChainofResponsibilityPattern),又叫责任链模式,为请求创建了一个接收者对象的链(简单示意图)。 这种模式对请求的发送者和接收者进行解耦。 2)职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 3)这种类型的设计模式属于行为型模式 原理类图 对原理类图的说明-即(职责链模式的角色及职责) 1)Handler:抽象的处理者,定义了一个处理请求的接口,同时含义另外Handler 2)ConcreteHandlerA interceptor.preHandler等等 在处理SpringMvc请求时,使用到职责链模式还使用到适配器模式 HandlerExecutionChain主要负责的是请求拦截器的执行和请求处理,但是他本身不处理请求 职责链模式的注意事项和细节 1)将请求和处理分开,实现解耦,提高系统的灵活性 2)简化了对象,使对象不需要知道链的结构 3)性能会受到影响,特别是在链比较长的时候,因此需控制链中最大节点数量,一般通过在
即将介绍的访问者模式(Visitor Pattern)可以用来解决类似的问题。访问者模式在处理数据结构较稳定,但是作用于其上的操作需要经常变化的问题时是非常有效的。 访问者模式是指作用于一个对象结构体上的元素的操作。访问者可以使用户在不改变该结构体中的类的基础上定义一个新的操作。 访问者模式的类图如图所示。 ? 在以下情况可以使用访问者模式。 当一个对象的结构中,包含有多种类型的具有不同接口的对象,且用户要在这些对象上进行依赖于具体的类的运算时,需要用到访问者模式。 反之,如果 Element 的子类经常改变结构,例如需要增加一个新的税种,这就需要在访问者类中增加新的访问方法,因此,在这种情况下使用访问者模式代价较高,尽量不要使用访问者模式。 访问者模式的优点如下。 使得在访问者类中针对复杂类结构中的某个类添加新方法较为容易,即只需要简单地添加一个新的访问者方法即可。如果不采用访问者模式,这需要在每个类中添加一个新的方法。
缺点: 1.每个开发人员都拥有所有的代码,不利于核心代码的保密(如果有重要代码需要保密,则不建议使用git) git的工作模式 远程仓库(remote) 工作区(workspace) 存放git 版本仓库的目录就是工作区 主要存放代码文件和代码库 历史区(repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 git 的工作流程 指针--- HEAD: 你的本地仓库由 git 维护的三部分组成。 第一个是你的 工作目录,它持有实际文件; 第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动; 第三个HEAD,指向你最近一次提交后的结果。
游戏同步模式 常见的游戏同步方式分为帧同步和状态同步. 帧同步 帧同步是在关键帧的时候同步操作到服务器, 服务器转发操作给客户端. 客户端只有接收到关键帧后才会进行操作.
小谈设计模式(11)—模板方法模式 专栏介绍 主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。 模板方法模式 这是一种行为型设计模式,用于定义算法的框架,将算法的具体实现延迟到子类中。 总结 模板方法模式是一种简单但非常实用的设计模式,它通过将算法的框架固定在抽象类中,将具体实现延迟到具体子类中,提供了一种灵活而可扩展的算法设计方案。
桥接模式 桥接模式的定义: 将抽象和实现解耦,是两者可以独立的变化 桥接模式的参与者: Abstraction 抽象化角色: 该角色抽象化的给出定义,并保存一个对实现化对象的引用。 Implementor 实现化角色:该角色给出实现化角色的接口,但不给出具体的实现 ConcreteImplementor 具体实现化角色:该角色对实现化角色接口中的方法进行具体的实现 桥接模式的简单示例 ConcreteImplementor(); Abstaraction abst = new RefinedAbstraction(impl); abst.doingSomething(); } } 桥接模式的优点和应用场景 桥接模式的优点: 抽象和实现分离 优秀的扩展能力 实现细节对客户透明 桥接模式的应用场景 不希望或不适用使用继承的场景 接口或抽象不稳定的场景 重用性要求较高的场景
两篇文章原理相似:有一批工作任务(job),通过工作池(worker-pool)的方式,达到多 worker 并发处理 job 的效果。 他们还是有很多不同的点,实现上差别也是蛮大的。 图大概是这样的, 然后它可以通过 context.context 达到控制工作池停止工作的效果。 最后通过代码,你会发现它不是传统意义上的 worker-pool,后面会说明。 同时通过 sync.WaitGroup,我们可以等待所有 worker 工作结束,也就意味着 work-pool 结束工作,当然可能是因为任务处理结束,也可能是被停止了。 <- Result{ Err: ctx.Err(), } return } } } 每个 worker 都尝试从同一个 jobs 获取数据,这是一个典型的 fan-out 模式 当对应的 g 获取到 job 进行处理后,会把处理结果发送到同一个 results channel 中,这又是一个 fan-in 模式。