摘要:
看到一篇写的不错的 阅读全文
摘要:
什么时候需要 对象的创建与使用分离 对于不同类型的产品创建,使用不同的工厂类实现 对象创建难度不同,比如某个service用到dao,dao的实现有redis,mysql,mongodb,创建dao的难度不同,需要的细节不同,如果把创建代码放到service里面,就会显得臃肿难以维护 模式结构 抽象 阅读全文
摘要:
什么时候需要 根据参数不同创建同一父类下不同子类 将对象的创建与对象的使用分离,比如service负责使用dao,而不应该负责创建dao;否则,同一个dao的创建会出现在很多service,一旦需要修改,不仅违背开闭原则,而且改动面很大 模式结构 抽象产品角色:Product 具体产品角色:Conc 阅读全文
摘要:
ClassVisitor 访问者模式 我们不讲访问者模式,只说说这个类的设计的个人思考 package org.springframework.asm; /** * A visitor to visit a Java class. The methods of this class must be 阅读全文
摘要:
问题提出 用户参与抽奖,每日只能参与3次,总共只能参与15次,如何控制?(限额) 给用户发送短信,每天只能发送3条,每条间隔10分钟,如何控制?(防骚扰) 两个问题其实类似 ,都是多个限制条件 以问题2制定方案 使用redis做计数器,使用StringRedisTemplate作为API 使用两个校 阅读全文
摘要:
预备知识 官方客户端地址 Java客户端分析 分为Java API Client和Java Rest Client Java API Client默认连接的是9300端口,传输协议,依赖netty Java API Client不同版本有兼容问题 Java API Client通过方法调用完成交互, 阅读全文
摘要:
背景参考 线程之ExecutorService Reactor 首先,搞懂JDK线程池 再熟练掌握reactor模式 最后再来理解Netty的线程模型 Future扩展 Future 继承JDK的Future,提供更多状态方法,额外引入事件监听 监听在操作完成后自动触发 异步获取执行结果 Promi 阅读全文
摘要:
编解码 为什么需要编解码? 数据在网络中以流的形式传递,在NIO中,读写的都是ByteBuffer socket数据传输的时候会发生粘包、半包等情况 通信双方的编解码格式预先定义,一定是一致的 业务代码与编解码逻辑需要解耦 编解码流程 首先,Client组装Request数据,发送到Server 端 阅读全文
摘要:
Channel package io.netty.channel; public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable<Channel> { ChannelId id(); EventLo 阅读全文
摘要:
总览 Executor package java.util.concurrent; public interface Executor { void execute(Runnable command); } 命令模式 分离任务提交和任务执行 ExecutorService package java. 阅读全文