摘要: 问题: 曾经遇到一个设计模式的问题:spring里面的HandlerInterceptor有个实现类是HandlerInterceptorAdaptor,这个类的名字是以adaptor结尾的,但是实际就是HandlerInterceptor接口做了几个基本的实现,为什么不叫做AbstractHand 阅读全文
posted @ 2019-05-29 01:26 饭小胖 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 前言 消息中间件首先我们会有三种作用:异步、解耦、削峰; 异步:进程内事件也可以异步,但是无法做分布式系统的异步。 解耦:相对于观察者模式,消息中间件还拥有发布订阅的功能。 削峰:中间件特有,利用中间特效,可以堆积大部分事件。 特性 消息中间件一般要解决的问题: 发布订阅 优先级消息队列 如果是在内 阅读全文
posted @ 2019-05-07 13:37 饭小胖 阅读(575) 评论(0) 推荐(0) 编辑
摘要: SortSet 有序的Set,其实在Java中TreeSet是SortSet的唯一实现类,内部通过TreeMap实现的;而TreeMap是通过红黑树实现的;而在Redis中是通过跳表实现的; 首先它是一个Set所以它必须有个数组作为随机存储访问的性能log常数的实现 然后它必须有序,有序就需要保证新 阅读全文
posted @ 2019-04-23 01:06 饭小胖 阅读(3474) 评论(0) 推荐(0) 编辑
摘要: Redis高可用 对于搭建高可用Redis服务,网上已有了很多方案,例:Keepalived,Codis,Twemproxy,Redis Sentinel。这里介绍官方的解决方案Redis Sentinel,图片来源:https://www.cnblogs.com/xuning/p/8464625. 阅读全文
posted @ 2019-04-21 23:44 饭小胖 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 数据结构 redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。 redis 其实都是key,value的结构,但是value支持以下几种数据类型:string、hash、list、set、sor 阅读全文
posted @ 2019-04-07 16:09 饭小胖 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 空位 阅读全文
posted @ 2019-04-07 14:41 饭小胖 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 今天,自己开发的事件驱动的java大规模爬虫程序上线了几个新任务后突然异常。 异常: 程序业务异常,经查看CPU利用率满,内存满,一直报OOM,目测有内存泄露。如下图所示,四核16G的内粗,CPU高达400%,内存使用了 6G,刚好爆满,JVM启动参数为: 内存截图: 分析: 首先找java进程为1 阅读全文
posted @ 2019-03-15 01:39 饭小胖 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 【内存操作与内存屏障】 内存模型操作: lock(锁定) : 作用与主内存的变量, 它把一个变量标识为一条线程独占的状态 unlock(解锁) : 作用于主内存变量, 它把一个处于锁定状态的变量释放出来, 释放后的变量才可以被其他线程锁定 read(读取) : 作用于主内存的变量, 它把一个变量的值 阅读全文
posted @ 2019-02-24 18:45 饭小胖 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 如果认真观察程序员把最多的时间耗在哪里,你就会发现,编写代码其实只占非常小的一部分。有些时间用来决定下一步干什么,另一些时间花在设计上,最多的时间则是用来调试;修复错误通常是比较快的,但找出错误却是噩梦一场;当你修复一个bug的时候,还会扯上另一个bug出现。 1、确保所有测试都完全自动化,让他们检 阅读全文
posted @ 2019-02-19 01:12 饭小胖 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 许多人把设计看作软件开发的关键环节,而把写代码认为是机械的劳动,他们认为工程就是画设计图,而写代码就是施工;但是你要知道,软件和机械有很大区别,软件的可塑性更强;正如Alistair Cockburn所说,“有了设计,我可以思考的更快,但其中充满了小漏洞” 另一方面认为,重构可以取代预先设计,意思是 阅读全文
posted @ 2019-02-14 01:26 饭小胖 阅读(153) 评论(0) 推荐(0) 编辑