自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dynamo2120的博客

分享技术、分享生活

  • 博客(40)
  • 收藏
  • 关注

原创 探究Google Proto Buf 序列化工具为什么高效

为什么Proto Buf高效序列化和反序列化大家接触的比较多的是java自带的序列化工具,例如我们要对象数据进行持久化到硬盘或者通过网络传输到对端主机上,所以我们需要通过某种序列化工具将数据转化成一种特定数据结构,并且对端或者从磁盘读取时能够按照这种结构解析形成对象。 序列化:对象—>特定结构的二进制串 反序列化:二进制串–>对象。序列化工具有:Hessian(主要还是java,...

2019-11-22 23:27:23 496

原创 服务网格模式(Server Mesh)

服务网格模式(Server Mesh)服务网格模式可以看作是边车模式的集群方式,当多个边车相互连接在一起就形成了一个一个的服务网格,网格其实就是相互关联的服务Server Mesh(去中心化):在网络协议栈中,为了避免应用程序加入一些流量控制、拥塞的逻辑,从而将一些保证数据可靠到达对端的基本逻辑封装到一个组件中也就是TCP协议,然而应用程序只关心业务逻辑,已经需要发送什么格式数据到对方就可以...

2019-11-22 22:55:33 4232

原创 分布式服务之边车模式

边车模式边车:就是在原来二轮摩托车旁边增加一个座位成了三轮摩托车,增加的一部分称为边车边车模式:对现有的服务增加额外的功能,这些功能并不影响业务逻辑,例如增加日志,限流、熔断、服务的注册和服务发现有专门服务来实现。 像程序中的控制和业务逻辑分离(Controller 和 Service 层分离) 这样大大降低了服务之间的耦合度并提升了扩展性和降低业务的复杂性这也符合单一职责原则,服务就是负载...

2019-11-22 22:31:37 3927

原创 服务弹力设计总结

服务弹力设计总结一、服务冗余1、负载均衡器+健康检查 Nginx或HAProxy2、RPC框架 实现服务自动发现和注册 zookeeper3、自动化实现服务伸缩二、服务解耦1、分层(应用层、服务层、数据服务层)2、服务拆分(纵向拆分,将大应用拆成多个小应用 横向拆分:将应用层公共逻辑业务抽象出一个公共的服务独立部署向外提供服务)3、数据分片,每个服务独立用一个数据库,如...

2019-11-22 22:27:37 193

原创 大型网站技术架构之安全性

大型网站技术架构之安全性网站攻击方式XSS(Cross Site Script) 跨站脚本攻击 一般在PC浏览器端反射性:例如有张图片或者连接,当用户一点击就会执行攻击的脚本,向攻击者服务器发送cookie或密码信息,或者执行一个用户非自愿的一个请求到服务端持久性:将攻击的脚本信息通过页面的表单保存到了数据库中,当其他人访问到该条记录时就会在其他人浏览器上执行有害脚本,弹出框或盗取co...

2019-11-22 22:19:41 200

原创 大型网站技术架构之可扩展性

大型网站技术架构之可扩展性可扩展性首要步骤:1、将整个系统按照纵向划分多个层次(应用层、服务层、数据服务层),横向分割成多个模块2、保证模块之间是高内聚、低耦合的,将耦合降到最低实现可扩展性的方式(降低耦合)1、使用消息队列来保证分布式服务之间进行通讯,这种通讯方式将服务之间依赖降低到最小,消费端只管消费消息并不关心消息产生者是谁,同样消息产生者只管往消息队列放数据不关心消费方有哪些。这...

2019-11-22 22:18:03 351

原创 大型网站之伸缩性

大型网站技术架构之伸缩性什么是伸缩性当面临大量并发,大流量时,为了能够提高系统的处理能力,通过增加机器来提升系统性能,能够方便并且性能提升会根据增加机器数量呈线性增长,这个称为网站的伸缩性负载均衡算法随机轮询随机加权最少连接数(通过zk同步服务连接数量)应用层的伸缩通过负载均衡器将请求分发到应用层的服务,常用的负载均衡器为Nginx 反向代理,Ngnix会通过心跳方式(定时发...

2019-11-22 22:16:43 114

原创 大型网站之高可用

标题大型网站技术架构之高可用服务部署:一般上线之前会合并代码到develop分支上,然后通过打包平台进行编译打包,然后将包通过scp传到服务器上,ssh 服务器ip 然后执行命令重启服务,重启之前,先从ngnix切除到这台服务器的请求(通过命令修改配置删掉对应服务器ip,然后reload nginx),等待1、2秒 等到应用服务处理完正在处理的数据,最后重启服务器,然后检查其端口是否启用,是否...

2019-11-22 22:14:58 127

原创 大型网站之高性能

标题大型网站技术架构之高性能标题标题性能指标:用户角度:使用app或网站响应的快慢开发角度: 吞吐量、响应时间、并发数以及系统资源利用情况吞吐量:每秒处理的请求数,称为TPS或QPS响应时间:从请求发送开始计时到获取结果所花费的时间,例如从缓存中获取数据所消耗的时间并发数:有多少用户同时请求数据并发数和吞吐量以及响应时间都是有关联的,当并发数增多时相应的吞吐量也会增大,但是响应时间会...

2019-11-22 22:13:58 95

原创 CPU中断请求理解

CPU软中断1、什么是中断中断表示我们请求操作事件准备就绪了,例如从磁盘读取数据,我们知道CPU执行速度比磁盘执行速度快几个数量级,因此如果CPU每次check磁盘是否准备就绪了,那么系统的并发能力和性能会大大下降,但是采用中断方式,异步事件驱动方式来提升系统效率,首先会在驱动程序中嵌入中断程序,一旦磁盘准备就绪就会通过驱动程序发生一个中断请求操作,CPU立马停下手里的活来执行中断程序,该中断...

2019-10-26 14:57:28 2351

原创 AQS深入剖析实现原理

AQS(AbstractQueueSynchronizer)概念AQS是什么?从全称可以看出,它是一个抽象类,并且内部由一个双向链表结构提供的FIFO队列(CLH)存放因没有获取到资源的线程AQS作用?在多线程环境下,为了保证共享资源安全的使用,以及线程之间的同步,java提供了一个AQS供其子类扩展。例如ReentrantLock就是一种排他锁,保证仅有一个线程获取锁资源进入...

2019-08-18 12:47:22 286 2

原创 类加载子系统

Class Load System加载:把二进制字节码流(可以是class文件、网络字节流)加载到内存中,这片内存称为方法区(存放Code 字节码 + 元数据 (类、字段(名称和描述符)、方法(名称和描述符)、常量池信息),然后经过以下几个阶段来完善class字节码中信息,为虚拟机的执行做准备。因此在加载阶段虚拟机需要完成的三件事1、通过全限定名获取二进制字节流(可以从类文件、ZIP(jar...

2019-03-24 14:51:42 654

原创 由Netty引出对协议的思考

协议到底是什么?之前我们接触过很多协议,最熟悉莫过于HTTP、TCP、DUBBO 那么到底是什么是协议,又和Netty、TCP、SOCKET有何关系?协议:两端约定好的一种字节数组结构,应用层协议:例如前8个字节表示消息类型 后8个字节代表总数据的长度,由于现在都是使用面向对象语言编程,那么如何将业务对象数据转换成网络传输的字节,已经将字节反序列化成对象。目前用的比较多方式有json序列化,...

2019-03-17 21:50:36 164

原创 JVM之Class字节码解析

Class Format类文件就是由以下两种类型组成的u(n) 表示存放n个无符号字节info 一种复杂结构由无符号和其他表项组成class二进制流数据组成项名称类型数量magic(魔法数)u41minor_version(次版本)u21major_version(主版本)u21constant_pool_count(常量池的个数)u...

2019-03-17 21:43:22 196

原创 Netty引导类(Bootstrap类的解析)

Bootstrap 引导类前面讲解了Netty整体架构以及类之间的关系,然后下面就先从框架的入口引导类(就是一个帮助类,存放了一些框架启动时必要的属性,例如ChannelFactory、ChannelPipeline、Map<String,Object> options)开始,看看是如何把这些类组装在一起的。类关系Bootstrap:封装了一些服务端和客户端引导类公共的逻辑,通过...

2019-01-05 12:13:45 886

原创 Netty架构分析

Netty架构解析Netty中Reactor模式前面分析了Reactor模式,下面来详细介绍Netty通过哪些类组件、怎样的类之间关系来实现Reactor模式的。下面为netty中涉及到的类,以及类与类之间的关系,下面会将各个类角色和Reactor模式中结合起来理解。图-netty-class-channel1、ChannelChannel实现类中会包含NIO Channel,这个才...

2018-12-31 21:59:12 423

原创 Reactor模式解析

前言即将结束的2018年,准备迎接全新的2019年,在此祝大家新年快乐、工作事事顺心、更上一层楼。在2018年里,去了想去的城市,找到了一份心仪的工作,坚持做自己想做的事情。在这里想真诚的和自己说:在2018年里,你已经做的很好了,希望能在新的一年2019,再接再厉。前一段时间里,一直都在研究Netty3源码,学习代码设计中的高内聚、低耦合,复用和模块化。将精华如何应用到工作上。 以下属于理论...

2018-12-31 21:51:53 1028

原创 设计模式之责任链模式

责任链模式概念类图代码实例概念例如不同层级的领导,审批权限不一样,不同的请假请求会流向不同的管理层,如果使用传统的方式 if else实现,这样在类中写很多逻辑,不易维护,违反了单一职责,当增加新的层级管理层进而导致修改类,不符合开闭原则。将各个分支条件转好成各个类,并抽出一个抽象管理类,如果类A没有权限处理该请求那么就会交给下个管理类进行处理,此时类A仅仅包含下个处理类。 通过这...

2018-11-29 20:26:34 130

原创 设计模式之命令模式

命令模式概念类图代码实例概念将一个请求(命令)封装成一个对象,从而具有不同请求(命令)供客户度选择,对请求排队、记录以及支持可重做和撤销操作好处:1、能很容易设计一个命令队列2、很容易记录每个命令的日志3、可以实现命令重做和撤销4、在不修改已有类情况下,很容易添加新命令类5、将请求一个操作对象和具体执行该操作的对象分离开,也就是下面讲到的将客户和烧烤人分开之间通过Wait...

2018-11-28 11:40:13 145

原创 设计模式之桥接模式

类与类之间的桥梁(桥接模式)概念类图代码实例概念将抽象部分和实现部分分离出来,使它们可以独立变化。这里抽象部分和实现部分通俗意思是指,当一个软件系统中可以多个角度进行分类时,每一种分类都会发生改变,那么把这种角度分离出来,让它们独立变化,减少彼此之间的依赖。例如:根据从手机品牌角度来分类的话 可以有M品牌 N品牌都是继承与手机品牌,然后想给这些品牌加上相应的软件功能:然后手机M品牌...

2018-10-24 23:16:23 131

转载 https双向加密认证

一、背景&概念HTTPS:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议。 http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层。从发送端看,这一层负责把http的内容加密后送到下层 的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容。SSL(Secure Socke...

2018-10-24 22:44:50 2577

原创 设计模式之单例模式

类的计划生育(单例模式)概念类图代码实例概念允许类产生仅且只有一个对象,如何在多线程环境下实现这一功能应该是这个类来控制的,所以需要实现产生单个实例关键点有以下几点1、构造器设置为private2、有一个包含本来的字段,并且是static类型,如果采用double check方式还需要增加volatile修饰保证可见性和有序性3、创建对象的时机(类一加载时就创建这个实例是饥饿式...

2018-10-19 22:48:40 89

原创 设计模式之迭代器模式

迭代器模式概念使用场景类图代码实例概念屏蔽了具体集合、数组、列表的遍历方式和具体遍历的对象, 是一种获取集合中元素的一种方式。 提供一个抽象迭代接口,里面有 hashNext() 是否有下一个元素, next()下一个元素,first()获取第一个元素等方法。 这个迭代接口由具体集合来实现,并返回一个迭代器,上层不需要关心迭代的对象是什么以及内部是以何种方式(逆序还是顺序方式)。...

2018-10-19 21:49:39 174

原创 设计模式之组合模式

分公司=一个部门概念类图代码实例概念分公司=一个部分 把分公司看成一个部门,而分公司又可以有其他分公司和部门 …,这里介绍一种适合这种场景的设计模式那就是组合模式。组合模式:将对象组合成树形结构以表示 部分-整体的层次结构。组合模式使用户对单个对象和组合对象的使用具有一致性。类图Company:公司的抽象类(Component)ConcreteCompany:具体公司类 ...

2018-10-14 10:59:34 296 1

原创 开发经验总结Mark1

开发经验Summaryexperience1:由于做的APP是国际版的软件,需要支持跨时区问题(也就美国发送一条信息给中国用户,中国用户显示的时间为中国当地时区对应时间),将接口中传入和返回的时间参数统一定义为long 类型(不能使用yyyy-MM-dd 时间字符串,因为转换成Date对象时需要指定那个时区否则就会导致时间错乱问题),由于在同一时刻无论在哪里unix timestamp都是代表...

2018-10-12 11:10:52 105

原创 设计模式之备忘录模式

从头再来(备忘录)概念备忘录模式实现的三种方式类图代码实例概念备份对象状态,以便恢复到上一个状态。 通俗来说就是在对象(Originator发起人)执行某个动作之前先将状态(属性值)拷贝一份到一个备忘录(Memento备忘录)对象中,并且由一个管理者(Caretaker管理者)保管。 然后对象执行动作,执行完后又想要回到执行动作之前的状态,那么就是将被备忘录对象属性值重新再赋值给...

2018-10-12 10:44:54 165

原创 设计模式之适配器模式

复用已有代码来完成现有功能概念使用场景类图代码实例概念适配器: 我们国家使用的电脑和手机充电必须在220V电压进行的,但是有些国家例如泰国的电压就达不到220V这个时候我们就需要使用电源适配器进行将低电压转换成高电压。 适配器就是使用一个东西适合另一个东西的东西。使用场景例如原来系统某类一些功能和现有逻辑类似,因此我们想要复用代码,但是又要满足现有接口。 一个类需要实现现有接...

2018-10-10 18:09:25 125

原创 设计模式之状态模式

替换繁琐if else和多状态转换概念使用场景类图代码实例概念一个对象中存在多种状态,并且不同的状态下对象有不同的行为操作,传统的实现方式就是if else 分支条件就是不同的状态,分支内容就是对应状态下的操作。 如果对象仅仅有一两个状态,不复杂还行。当状态很多且状态转换很复杂时就需要考虑使用状态模式状态模式:抽象出一个状态接口,if else分支中的条件对应不同的状态子类,将...

2018-10-10 08:11:40 149

原创 设计模式之观察者模式(委托机制)

观察者模式和发布/订阅模式概念观察者模式和发布/订阅模式区别为什么要使用委托机制观察者模式和委托机制类图观察者模式和委托机制代码实例概念观察者模式是一种一对多的依赖关系,让多个观察者对象同时监听同个主题对象。当这个主题对象在状态发生变化时,会同时所有注册到主题对象的观察者对象,使他们能够自动更新自己。观察者模式和发布/订阅模式区别观察者模式:比较概念的解释是,目标和观察者是...

2018-10-05 12:32:55 326

原创 设计模式之建造者模式

建造者模式概念将构建一个复杂对象分成几个部分(多道工序),构建步骤顺序不一致会导致对象表示不同,原来我们直接 A a = new A(); a.setXXX() … A类有很多属性,如果后面需要修改构建步骤顺序时,改动量就很大。建造模式:当创建复杂对象时,将对象的组成部件和装配这些部件方式(组装部件顺序)分离开,这样灵活的建造对应的对象。对象的构建和对象的表示进行分离。使用场景(1)相同...

2018-09-28 15:56:44 128

原创 Unix编程艺术之第一部分

文章目录第一部分 上下正文第一章.哲学文化?什么文化?Unix的持久性反对学习Unix文化的案例Unix出了什么问题第一部分 上下正文第一章.哲学文化?什么文化?这一本有关于Unix编程的书籍,但是我们反复提到’文化’,'艺术’和’哲学‘。如果你不是一个程序员,或你是一位很少接触过Unix的程序员,对这些词语可能奇怪。然而Unix有一种文化,它具有一种独特的编程艺术;文化承载着一种强有力的...

2018-09-26 22:49:50 159

原创 设计模式之门面模式(外观模式)

门面模式概念何时使用类图代码实例概念当类A和多个类交互时,并且调用其方法很乱时,为了降低类之间的耦合性,符合迪米特最少知识法则,专门抽出一个类,并且提供出几个简单明了的接口给A类,那么具体的复杂方法调用交给此类进行管理,该类就是为门面类。何时使用在开发的时候,我们采用分层思想,控制层、逻辑层、持久层。每层之间使用门面类进行交互。 还有就是在开发过程中,使用各种设计模式导致有很多...

2018-09-26 18:19:07 645

原创 设计模式之模板模式

代码复用概念好处和使用场景类图代码实例概念在各个子类中包含了很多相同的逻辑,而且这个逻辑在各个子类中并不会改变,因此把这些不变的行为搬到一个抽象类中,去除了子类中的重复代码。但是会有几个步骤随不同子类会有不同,这个时候就需要在抽象类提供几个抽象方法由子类提供不同实现。好处和使用场景模板模式提供了一个很好的代码复用平台,使用场景:就是当我们从整体流程由一系列步骤组成,但是有几个步...

2018-09-23 22:50:55 98

原创 设计模式之原型模式

克隆对象概念浅复制和深复制类图代码实例概念原型模式就是我们常常接触的克隆,为了更高效更快的创建对象,无须再进行通过new来创建对象并初始化对象数据,直接通过拷贝内存的对象结构(浅复制),拷贝对象结构和数据(深度复制)进行创建对象。科普下,记得之前面试的时候被问知道那些创建对象的方式:1、new 构造方法进行创建2、反序列化方式3、clone克隆4、反射,cls.getCo...

2018-09-23 17:52:03 112

原创 代理模式(静态代理和动态代理原理分析)

控制对象访问权限概念类图代码实例和装饰者区别概念为其他对象提供一种代理以控制这个对象的访问,在某些情况下一个对象不能直接访问那个对象时,代理就起到了客户端和被代理对象(委托类)中介作用。 代理类和委托类都有同样接口。好处:可以不用动原来类的逻辑,再次增加一些功能,符合开闭原则。真正的业务还是交给被代理对象处理的,因此在其委托被代理对象处理业务前后实现一些公共逻辑服务,例如加入缓...

2018-09-23 09:55:00 5201

原创 Unix编程艺术-翻译-开篇

反思我本人很想提高英语能力包括阅读国外软件文档、和口语交流能力,其实这些能力我也每天坚持练习。后面我想可以通过翻译著名国外软件书籍,既可以提高英文阅读理解能力,又可以把专业知识提高到一个层次,同时将自己的思想和大家一起分享共同成长,何乐不为,没有理由不去做。既然想好了就要付诸行动,不要空想,然后我就在网上也搜集了一些英文软件书籍,最终决定将The Art of Unix Programming...

2018-09-18 11:46:08 277

原创 策略模式

轻便更换策略概念类图代码实例概念当不同时间段,业务上会采取不同的策略,这个可以采用策略模式,将一种抽象计算方式通过一个Context类暴露给Client,然后在Context中会根据条件选择具体的算法实现策略。一种方式是通过客户端决定具体的算法策略通过Context()构造方法传入,还有一种方式通过简单工厂方式,传入一个type创建具体算法策略由Context决定,第二种方式更大降...

2018-09-18 10:53:50 109

原创 生产对象的工厂

简单工厂+工厂方法+抽象方法概念区别类图代码实例概念工厂的概念:用来生产产品的地方,同一种类型产品会有具体的不同产品对象。1、简单工厂:提供一个方法,根据客户端提供的参数创建对应的产品对象并返回,具体创建那种对象逻辑封装到工厂类中( 可以使用反射+配置文件 替代switch case)2、工厂方法:提供一个工厂抽象类用来产生该类产品类型对象,如果想产生具体产品对象则需创建一个...

2018-09-18 10:51:40 433

原创 装饰者模式

给类添加额外的功能概念类图代码实例概念如果想要给类添加其他逻辑的话,在不改动原来核心功能的情况下,采用装饰者模式,可以动态设定,并且按照想要的顺序来装饰核心功能。满足了开闭原则,如果增加修饰功能只需要扩展抽象装饰类就可以。 例如我们人”类” 尤其是女性喜欢使用各种各样的化妆品来打扮自己,人本身具有独特的样貌,然后采用各种修饰方式,穿好看的衣服、涂美白化妆品等修饰...

2018-09-17 14:53:10 168

原创 生活中的面向对象

感悟:要想成为合格工程师,必须拥有面向对象思维 初工程师和高级工程师以及架构师最大的区别就是等级越高看问题的角度就不一样,犹如初级工程师写系统完全就是面向过程 if else写满整个类,而且类之间的耦合性很大,不好维护,牵一发而动全身,扩展性很不好。他们站在角度就是能完成功能需求,但是高级工程师以及架构师站在项目角度,考虑未来需求变化和如何做到可维护性、可复用、可扩展(当然这里从代码层面,...

2018-09-15 16:08:35 919 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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