7 KeepMoving++

尚未进行身份认证

学如逆水行舟,不进则退。心似平原跑马,易放难收。

等级
TA的排名 1w+

秒杀系统设计原则

秒杀活动的特点1、持续时间短,但访问冲击量大;2、业务的请求量远远大于售卖量,大部分是最终无法购买成功的请求;3、秒杀往往价格便宜,因此各种非法作弊手段层出。设计原则1、尽力将请求拦截在系统上游,如验证码等; 2、商品信息设计成静态页,保存在CDN或代理服务器; 3、开始前,按钮置灰,抢购一次后按钮置灰,避免重复提交; 4、秒杀系统独立部署,负载均衡,避免单点...

2020-02-12 00:32:38

缓存的三种读写方式

结合业务场景,缓存的读写方式可以分为以下三种模式: Cache Aside(旁路缓存) Read/Write Through(读写穿透) Write Behind Caching(异步缓存写入) Cache Aside查询:应用程序先去cache中读取数据,如果可以命中,则直接返回;如果没有命中,则去数据库中查询,成功后存入缓存。 更新:应用程序先去更新数据库...

2020-02-10 17:07:28

破坏双亲委派模型

我们知道双亲委派模型很好的解决了各个类加载器基础类型的一致性问题,而基础类型往往是被用户代码继承、调用的API存在,但这总设计有时候并不是完美的,比如基础类型又要调用用户的代码,那该怎么办?典型的例子就是SPI机制的实现,以JDBC的实现为例。JDK提供了统一的JDBC驱动接口Driver,各种数据库厂商(MySQL、Oracle等)会根据SPI规范,以jar包形式提供自己的实现。对于实现...

2020-01-31 03:38:01

Java四种引用类型

JVM在进行GC回收时,会从GC Roots开始遍历,判断引用是否可达,引用的可达性是判断GC回收的基本条件。但是在某些场景下,即使引用可达,也希望能够根据语义的强弱进行有选择的回收。引用根据语义强弱可分为强引用、软引用、弱引用、虚引用。强引用(永久有效)Strong Reference,最为常见的引用类型,如:Object obj = new Object();只有对象...

2020-01-30 16:54:20

面试题:能否自定义一个java.lang.Object类

创建自定义的java.lang.Object首先尝试在工程中创建自己的java.lang.Object类:package java.lang;/** * 自己创建的java.lang.Object * * @author hujy * @version 1.0 * @date 2020-01-30 01:12 */public class Object { st...

2020-01-30 13:24:46

观察者模式

定义观察者模式又称为发布订阅模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者,使他们能够自动更新自己。场景举例微信公众号订阅。具体实现定义发布者接口Observablepublic interface Observable { // 注册观察者 void registerObs...

2020-01-29 20:17:35

责任链模式

定义将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象处理。场景举例员工请假流程。具体实现请假申请基本信息类:/** * 封装请假的基本信息 */public class LeaveRequest { // 员工名称 private String...

2020-01-29 19:18:16

LeetCode两数之和、三数之和(Java)

LeetCode第1题:两数之和给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所...

2019-04-22 18:12:16

Netty之编码

目录writeAndFlushMessageToByteEncoderhead节点的write方法总结head节点的flush方法总结writeAndFlushNetty写出数据是通过Outbound事件传播完成的,具体则是通过pipeline.writeAndFlush从tail节点开始依次向前传播,最后由head节点完成数据的写出与刷新。writeAndFlush的...

2020-01-19 00:57:16

Netty之解码

ByteToMessageDecoderByteToMessageDecoder是一个抽象类,实现了ChannelInboundHandlerAdapter接口,Netty所有顶层解码器都是基于ByteToMessageDecoder实现的,它将整体过程进行抽象,具体逻辑交给子类实现,并通过pipeline进行事件传播。它的整体过程可分三个步骤:累加字节流。 调用子类的decode方...

2020-01-18 00:57:46

Netty之内存管理

目录Netty内存规格介绍内存区间划分内存分配单位内存分配命中缓存分配申请新内存分配ByteBuf的释放与回收Netty内存规格介绍内存区间划分tiny:0~512B small:512B~8K normal:8K~16M huge:16M以上内存分配单位Chunk:Netty中所有内存都是以Chunk为单位分配的,一个Chunk有16M,例...

2020-01-16 22:33:51

Netty之内存分配器ByteBufAllocator

目录内存分配器继承体系ByteBufAllocatorAbstractByteBufAllocatorUnpooledByteBufAllocatornewHeapBuffernewDirectBufferPooledByteBufAllocatorPoolThreadLocalCachePoolArenaarena分配内存流程内存分配器继承体系...

2020-01-15 23:39:20

Netty之认识ByteBuf

目录ByteBuf的结构常见APIreadwriteget、setmark、resetByteBuf的分类继承体系图AbstractByteBufPooled与UnpooledUnsafe与非UnsafeHeap与DirectByteBuf是Netty底层直接与数据打交道的一层抽象。ByteBuf作为数据流的载体,提供了一些列简单易用的API来操...

2020-01-15 00:11:41

Pipeline之异常传播

异常传播Demo启动类public final class Server { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGro...

2020-01-14 14:57:26

Pipeline之Outbound事件传播

ChannelOutboundHandler基于ChannelHandler,扩展了一些Outbound事件。public interface ChannelOutboundHandler extends ChannelHandler { // 端口绑定 void bind(ChannelHandlerContext ctx, SocketAddress localAd...

2020-01-13 23:40:46

Pipeline之Inbound事件传播

ChannelHandler继承体系ChannelHandler:所有逻辑处理器的抽象。public interface ChannelHandler { // handler添加完成回调 void handlerAdded(ChannelHandlerContext ctx) throws Exception; // handler删除完成回调 ...

2020-01-13 15:19:32

Pipeline添加与删除ChannelHandler

添加ChannelHandlerChannelHandler是在服务端启动过程中,Channel初始化时通过addLast方法添加的。 public static void main(String[] args) throws Exception { // 配置服务端的 NIO线程组 // boss线程组用于网络事件的监听 Even...

2020-01-12 21:40:36

Netty之Pipeline的初始化

Pipeline的初始化Pipeline的初始化逻辑是在AbstractChannel的构造函数中完成的,在其子类NioServerSocketChannel实例化时触发。 protected AbstractChannel(Channel parent) { this.parent = parent; id = newId(); u...

2020-01-12 00:59:28

Netty之Channel的分类

Channel:是对网络Socket的封装,抽象了网络I/O的读、写、连接与绑定。AbstractChannel:实现了Channel接口的大部分功能,一次连接用到的Channel、ChannelId、eventLoop、pipelIne、unsafe都会保存在这里。AbstractNioChannel:通过select的方式对读写事件进行监听。客户端Channel:主要注册rea...

2020-01-11 23:05:31

Netty之NioEventLoop

目录NioEventLoop的创建NioEventLoop的启动NioEventLoop的执行检测IO事件并解决空轮询Bug处理IO事件任务执行NioEventLoop的创建NioEventLoop的字面意思为NIO事件循环,它主要用于新连接的接入,以及数据流的读与写,可以理解为是整个Netty组件的发动机。每一个NioEventLoop都是由NioEvent...

2020-01-11 17:40:20

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条Blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。