自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 收藏
  • 关注

原创 Spring Aware接口

spring 的bean实现Aware接口。可以自动织入BeanFactory等Spring容器对象。Spring Aware对象实现原理class ApplicationContextAwareProcessor implements BeanPostProcessor { private final ConfigurableApplicationContext applicationC...

2018-10-20 13:18:45 302

原创 Spring FactoryBean接口

如果一个bean实现FactoryBean,那么它就不是一个简单的bean,类似于java模式中的工厂模式,用于生产不同的Object。举例 public class OkHttpClientFactoryBean implements FactoryBean, DisposableBean { private int connectTimeout; private int readTim...

2018-10-20 12:31:14 403

原创 mysql select ... for update

1.用法用法: select … for update;例如:select * from goods where id = 1 for update;排他锁的申请前提:没有线程对该结果集中的任何行数据使用排他锁或共享锁,否则申请会阻塞。**for update仅适用于InnoDB,且必须在事务块(BEGIN/COMMIT)**中才能生效。在进行事务操作时,通过“for update”语句,...

2018-10-13 21:17:55 411

原创 线程池隔离的优缺点

1.线程隔离的优点:尽管线程池提供了线程隔离,我们的客户端底层代码也必须要有超时设置,不能无限制的阻塞以致线程池一直饱和。2.线程隔离的缺点:The Netflix API processes 10+ billion Hystrix Command executions per day using thread isolation. Each API instance has 40+ th...

2018-10-13 20:35:37 4221

原创 linux 线程切换

1.什么引起线程切换时间片轮转线程阻塞线程主动放弃时间片

2018-10-11 22:35:21 1318

原创 MySql innodb和MyISAM

1.Innodb1.1 聚簇索引InnoDB中,聚簇索引就是“表”,所以不像MyIsAM那样需要独立的行存储。聚簇索引的每一个叶子节点都包含了主键值,事务ID,用于事务和MVCC的回滚指针以及所有的剩余列。如果主键时一个前缀索引,InnoDB会包含完整的主键列和剩下的其他列。聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引的索引列是主键值,如果没有,MySQL会自动创建。...

2018-10-10 23:04:56 239

原创 elastic-job--作业类型

elastic-job提供了三种类型的作业:Simple类型作业SimpleJob需要实现SimpleJob接口,意为简单实现,未经过任何封装,与quartz原生接口相似,比如示例代码中所使用的job。Dataflow类型作业Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)...

2018-10-10 21:01:20 1147

原创 elastic-job--数据分片

数据分片的目的在于把一个任务分散到不同的机器上运行,既可以解决单机计算能力上限的问题,也能降低部分任务失败对整体系统的影响。elastic-job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器(其实是Job实例,部署在一台机器上的多个Job实例也能分片),开发者需要自行处理分片项与真实数据的对应关系。框架也预置了一些分片策略:平均分配算法策略,作业名哈希值奇偶数算法策略,...

2018-10-08 23:05:34 771

原创 elastic-job --介绍

1.elastic-job是什么elastic-job是当当开发的基于qutarz以及zookeeper封装的作业调度工具,主要有两个大框架,一个是elastic-job lite另外一个是elastic-job cloud,其中qutarz是一个开源的作业调度工具,zookeeper是分布式调度工具,这两者结合搭建了elastic-job-lite,这是一个无中心节点的调度,而elastic-...

2018-10-08 22:40:26 251

转载 FreeMaker介绍

1.FreeMaker是什么FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT、电子邮件、配置文件、源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组件。FreeMarker最初设计是用来在MVC模式的Web开发中生成HTML页面的,所以没有绑定Servlet或任意Web相关的东西上,所以它可以运行在非Web应用环境中。2.工作原理Free...

2018-10-07 13:17:06 335

原创 ServletContextListener使用详解

1.介绍在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。2. 作用当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent事件,该事件由ServletContextListener 来处理。在 ServletCont...

2018-10-07 13:02:33 1547

原创 数据库水平扩展--分片

1.介绍实现数据分片需要包含以下功能:分片映射管理:是一个特殊的数据库。存储分片相关的元数据。路由:当接收到一个请求时,应用程序需要根据相关的key值从 分片映射管理器中获取映射的数据库,进行数据查询或修改。多分片查询:当一个请求涉及到多个分片时,需要对查询结果进行排序合并等。2.分片映射...

2018-10-02 23:14:47 542

原创 zab协议

1.背景在分布式系统中实现一致性是件有挑战的事。经典的二阶段提交、三阶段提交都不能完美的解决这一问题,有关传统的的分布式系统一致性问题可以看这里。Paxos 算法能完美地达到分布式系统的一致性,但由于较为复杂,在实际工程上不是很合适,Zab 协议借鉴了 Paxos 的思想,并进行了改进,以满足工程上的实际需求。2.设计目标一致性有序性:有序性是 Zab 协议与 Paxos 协议的一...

2018-09-25 22:47:49 228

原创 websocket协议

1.连接建立WebSocket复用了HTTP的握手通道。具体指的是,客户端通过HTTP请求与WebSocket服务端协商升级协议。协议升级完成后,后续的数据交换则遵照WebSocket的协议。1.1 客户端:申请协议升级首先,客户端发起协议升级请求。可以看到,采用的是标准的HTTP报文格式,且只支持GET方法。GET / HTTP/1.1Host: localhost:8080Orig...

2018-09-25 21:35:43 356

原创 mongodb-副本集2

1.同步mongodb的同步使用操作日志oplog实现的。操作日志保存了每一次主节点的写操作。oplog是主节点local数据库中的一个固定集合,备份节点通过查询这个集合就可以知道需要进行复制的操作。每个备份节点都维护着自己的oplog。记录着每次从主节点复制数据的操作。每个备份节点都可以作为同步源提供给其他成员使用。...

2018-09-24 23:14:06 158

原创 mongodb--副本集1

1.介绍副本集是一组服务器,其中有一个主服务器,用来处理客户端的请求。还有多个备份服务器,用于保存主服务器的数据副本。如果主服务器崩溃了,备份服务器会自动将其中一个升级为主服务器。...

2018-09-24 22:03:45 150

原创 设计模式--装饰模式

装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。1.装饰模式的结构装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。装饰模式的类图如下:在装饰模式中的角色有:抽象构件(Component)角色:...

2018-09-24 10:57:19 180

转载 Ngnix的基本学习-多进程和Apache的比较

1.基本的架构设计接口设计所有的模块都遵循着同样的ngx_module_t接口设计规范。Ngnix核心及其常用模块设计关系从图中可以看出,总共有四个模块。首先是配置模块,配置模块是所有模块的基础,他实现了最基本的配置项的解析功能。nginx定义了一种基础类型的模块:核心模块,模块类型是NGX_CORE_MODULE。定义核心模块的目的是使得非模块化的框架代码只关注与如何调用6个核...

2018-09-24 10:18:50 299

原创 mybatis缓存机制详解

mybatis提供了缓存机制减轻数据库压力,提高数据库性能mybatis的缓存分为两级:一级缓存、二级缓存一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的。1.一级缓存mybatis的一级缓存是SqlSession级别的缓存,在操作数据库的时候需要...

2018-09-22 21:33:51 241

原创 select,poll,epoll比较

1.selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:单个进程可监视的fd数量被限制需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大对socket进行扫描时是线性扫描缺点:单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大...

2018-09-22 11:42:46 124

原创 Mongodb--存储引擎

综述mongodb 3.0 的存储引擎默认是MMAPV1,还有一个新引擎wiredTigger,wiredTigger具有很高的性能。建议在生产环境上升级到wiredTigger。MMAPV1引擎mongodb原生的存储引擎,比较简单,直接使用系统级的内存映射文件机制。对于insert,read,update(upate 不导致文档的size变大)具有较高的性能。MMAPV

2018-09-20 23:03:16 212

原创 eureka 源码分析三--高效多线程并发实现

1. eureka server端实例存储结构ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>>其中key = appName,value = ConcurrentHashMap//存储覆盖状态protected final Concurr

2018-09-20 22:58:55 677

转载 分布式系统---幂等性设计

1. 介绍WEB资源或API方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的。幂等性是分布式系统设计中的一个重要概念,对超时处理、系统恢复等具有重要意义。声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试。例如,在因网络中断等原因导致请求方未能收到请求返回值的情...

2018-09-17 22:34:03 134

转载 Hessian原理分析

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2018-09-17 21:59:55 1066

转载 堆外内存的回收机制分析

1.堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代码中还可以使用堆外内存,比如Netty,广泛使用了堆外内存,但是这部分的内存并不归JVM管理,GC算法并不会对它们进行回收,所以在使用堆外内存时,要格外小心,防止内存一直得不到释放,造成线上故障。2.堆外内存的申请和释放JDK的ByteBuffer类提供了一个接口allocateDirect(int capacity)进行...

2018-09-16 21:22:50 1740

原创 java 引用--PhantomReference

1.引用可达性强引用可达–如果一个对象可以通过线程访问不需要访问引用对象,那个这个对象是强引用可达。软引用可达(softly reachable)–如果一个对象没有强引用,但是可以遍历软引用到达,那个这个对象是软引用可达。弱引用可达( weakly reachable)–如果一个对象没有强引用可达或者软引用可达,但是可以遍历弱引用可达。那么这个对象是弱引用可达。幽灵引用可达(phant...

2018-09-16 21:02:39 635

原创 linux软硬连接

1.linux 创建连接命令 ln -s 软链接这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s, 具体用法是:ln -s 源文件 目标文件。 当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln...

2018-09-16 16:30:35 6744

原创 java注解接口Annotation

1.介绍所有的java注解类型都继承接口Annotation2.获取注解的属性值通过反射获取注解的属性值@Retention(RetentionPolicy.RUNTIME)public @interface Vui { String name() default ""; boolean isUniuqe() default false;}@V...

2018-09-16 16:24:44 1285

原创 java effective --不可变类

1.介绍java中的不可变类更容易设计、实现和使用。不容易出错,且更加安全。2.如何设计不可变类不要提供任何修改对象状态的方法。保证类不会被扩展。使用final修饰class使所有的域都为final所有的域都为私有的。确保对任何可变组件的互斥访问。(如果类具有指向可变对象的域,必须确保客户端的类不能访问到此类)。3.举例(Guava ImmutableDoubl...

2018-09-16 16:21:44 146

原创 UUID

1.介绍1.1 经由一定的算法机器生成为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成。1.2 非人工指定,非人工识别UUID是不能人工指定的,除非你冒着UUID重复的风险。UUID的复杂性决定了“一般...

2018-09-16 16:18:23 292

原创 SHA 算法

1.介绍安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能...

2018-09-16 16:12:02 914

原创 Fastjson二

1. fastjson定制序列化字段@JSONField(name="gender") public String sex;2. fastjson序列化空字段@JsonInclude(value = Include.ALWAYS)public String sex;3. fastjson的getxxx()方法通过JSONObject的get()方法可以获取key的值...

2018-09-16 15:59:55 352

原创 Fastjson一

1.基础1.1 枚举写java的所有枚举都继承Enum类public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { SerializeWriter out = seriali...

2018-09-16 15:55:53 94

原创 Linux中profile、bashrc、bash_profile之间的区别和联系

1.profile/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.所以如果你有对/etc/profile有修改的话必须得重启你的修改才会生效,此修改对每个用户都生效。2./etc/bashrc为每一个运行bash shell的用户执行此文件.当bash shell被...

2018-08-26 18:07:09 117

原创 linux shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。1.数值比较 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真举例:num1=100num2=1...

2018-08-26 17:49:22 1160

原创 Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]作用与区别

1.$()在 bash shell 中,$( ) 与 ` (反引号) 都是用来做命令替换用(commandsubstitution)的。 例如 version=$(uname -r)和version= \uname -r都可以是version得到内核的版本号 各自的优缺点: 1. \ ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性...

2018-08-26 17:18:13 15385 1

原创 oauth2 授权

1 什么是oauthOAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。2 oauth2授权流程在浏览器中,用户点击第三方应用按钮,由第三方应用发起请求,向平台发起授权请求。平台在接收...

2018-08-25 23:24:49 169

原创 redis 缓存击穿

1、缓存击穿1.1 什么是缓存击穿缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定时间不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力。由于缓存不命中,每次都要查询持久层。从而失去缓存的意义。1.2 如何解决使用互斥锁 该方法是比较普遍的做法,即,在根据key获得的value值为空时,先锁上,再从数据库加载,加载完毕,释放锁。若其他线...

2018-08-25 22:22:58 643

原创 java 设计模式--策略模式

介绍在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。实现public enum PropertyNamingStrategy { ...

2018-07-10 23:13:32 136

原创 HashMap中的为什么hash的长度为2的幂而&位必须为奇数

1.介绍如何实现一个尽量均匀分布的Hash函数呢?我们通过利用Key的HashCode值来做某种运算。 如何进行位运算呢?有如下的公式(Length是HashMap的长度): index = HashCode(Key) & (Length - 1)2.详解下面我们以“book”的Key来演示整个过程:计算book的hashcode,结果为十进制的3029...

2018-07-09 22:54:48 357

空空如也

空空如也

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

TA关注的人

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