- 博客(39)
- 资源 (11)
- 收藏
- 关注
原创 Hystrix的线程池隔离和信号量隔离
信号量的隔离:it executes on the calling thread and concurrent requests are limited by the semaphore count.每次调用线程,当前请求通过计数信号量进行限制,当信号大于了最大请求数(maxConcurrentRequests)时,进行限制,调用fallback接口快速返回。最重要的是,信号量的调用...
2019-02-26 19:08:48 9441 1
原创 Beanstalk(内存队列)
Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格。其基本设计思想很简单:高性能离不开异步,异步离不开队列,而内部都是生产者-消费者模式的。Beanstalk介绍: 那下面开始说beanstal...
2019-02-26 17:17:02 1759
原创 Spring REST Docs 介绍
Spring REST Docs 是一个为 Spring 项目生成 API 文档的框架,它通过在单元测试中额外添加 API 信息描述,从而自动生成对应的文档片段。本文会以一个最简单的示例介绍如何在一个 Spring Boot 应用中使用 Spring REST Docs,并在最后与目前最常见的 SpringFox 进行一些对比,分别介绍其特点和优劣。 基础准备首先需要一个 Spri...
2019-02-26 14:38:27 7795 4
原创 hexo-bugs-000
在hexo本地服务器模式下,一旦文章内容过多(具体没测试,可以多放些内容试试),则生成的html在本地就会出问题,没有上一页下一页以及脚标信息,在浏览器里查看网页源代码发现都是些小方格,不知道是什么鬼。但是用户不知道啊,我搞了半天,发现原来是个bug,部署到github上一切正常,真的是脑壳痛……...
2019-02-25 20:17:16 111
原创 使用 Protocol Buffers 代替 JSON 的五个原因
原因一: 模式本身很不错有一种痛苦的讽刺指向一个事实,我们小心谨慎地在我们的数据库里面编写数据模型,维护各个层次的代码,保持这些数据模型处于控制之中,当我们想要发送数据连接到另一个服务的时候,要求所有的疑虑都要被考虑到。然而,我们往往依靠的是在边界上与我们的系统之间不一致的代码,我们的系统不能强制结构化我们的数据组件,这是如此的重要,编码的语义是你曾经的业务对象,在proto格式中,...
2019-02-25 18:09:42 290
原创 图书列表清单
阅读清单2018-12-08第一批次Java编程思想 第4版 Head First 设计模式 深入理解Java虚拟机 JVM高级特性与最佳实践 Effective Java英文版 第三版 重构 改善既有代码的设计 Docker技术入门与实战 Hadoop权威指南第四版 Hive编程指南 Spark快速大数据分析 2019-01-24第二批次Effect...
2019-02-25 09:46:29 1694
原创 按键精灵编码最佳实践
总来来说就是一次循环就执行一个动作,代码按照界面来操作(到了这个界面应该做什么动作)遵循这个理论下面是具体的执行标准代码规范用else if代替单条if 每条else if代表一个界面Debug技巧刚修改的地方全部注释,缩小范围 注释一整段if语句,缩小范围...
2019-02-22 16:16:36 1454
原创 hexo admin注意事项
这是一个坑安装方式我就不说了,就是按照网上说的那样,我主要说一下Deploy中的脚本怎么配置,网上都是类似这种./xxxx.sh完了我也傻不拉几的按照这种方式写,后来发现这就是一个脚本,你不用deploy就用命令行运行也是一样的,admin只是一个写markdown的工具,部署只是提供给你一个快捷键罢了,问题是我是Windows,居然也用.sh真是尴尬,改成.bat路径前面也不需...
2019-02-22 14:20:13 1574 1
原创 ETL工具Kettle(数据清洗好帮手)
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ETL会花掉整个项目至少1/3的时间,ETL设计的好坏直接关接到BI项目的成败。...
2019-02-20 20:05:01 3137
原创 一秒钟搞懂zookeeper实现的分布式锁
分布式锁获取思路a、在zookeeper指定节点(locker)下创建临时顺序节点。b、客户端调用createNode方法在locker下创建临时顺序节点,然后调用getChildren(“locker”)来获取locker下面的所有子节点,注意此时不用设置任何Watcher。c、客户端获取到所有的子节点path之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。...
2019-02-19 21:46:09 121
原创 else if的运作流程
今天工作中碰到了一个else if,我一直以为else if跟if一样都会判断,然而,事情并不是我想的那样。 /** * @author R.oldmee * @date 2019/2/19 5:59 PM */public class ElseIfTest { @org.junit.Test public void test() { int...
2019-02-19 18:10:25 783
转载 快速排序(最容易理解的版本)
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比...
2019-02-18 13:19:01 252
原创 redis 过期策略
redis 过期策略redis 过期策略是:定期删除+惰性删除。所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。...
2019-02-16 15:46:30 160
原创 redis的几种数据类型
redis 主要有以下几种数据类型:string hash list set sorted setstring这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。set college szuhash这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 redis 里,然后每次读写...
2019-02-16 13:49:03 120
转载 Redis的I/O多路复用机制
都说例子举的好,原理自然就能明白,上栗子:小曲在S城开了一家快递店,负责同城快送服务。小曲因为资金限制,雇佣了一批快递员,然后小曲发现资金不够了,只够买一辆车送快递。经营方式一客户每送来一份快递,小曲就让一个快递员盯着,然后快递员开车去送快递。慢慢的小曲就发现了这种经营方式存在下述问题几十个快递员基本上时间都花在了抢车上了,大部分快递员都处在闲置状态,谁抢到了车,谁就能去送快递...
2019-02-16 13:29:22 7081 3
原创 Hexo + gitHub pages
网址:https://oldmee.github.io/ hexo的写作流程就是会按照日期自动帮你归类,你new了一个page会生成一个markdown文件,你就可以愉快的写作了,边写边看效果,写完了就直接运行hexo generate来生成静态文件html,完了你再运行hexo deploy部署到服务器,如果主题里自带rss都会自动帮你生成好xml文件,确实很方便。...
2019-02-16 10:35:14 427
转载 spring cloud bus中的env与refresh
1. 依赖需要引入下面三个依赖:compile('org.springframework.cloud:spring-cloud-starter-config')compile('org.springframework.boot:spring-boot-starter-actuator')compile('org.springframework.boot:spring-boot-sta...
2019-02-15 15:12:54 1096
转载 ElasticSearch最佳实践
es 第一是准实时的,数据写入 1 秒后可以搜索到;可能会丢失数据的。有 5 秒的数据,停留在 buffer、translog os cache、segment file os cache 中,而不在磁盘上,此时如果宕机,会导致 5 秒的数据丢失。归根结底,你要让 es 性能要好,最佳的情况下,就是你的机器的内存,至少可以容纳你的总数据量的一半。根据我们自己的生产环境实践经验,最佳的情况下...
2019-02-15 13:02:52 1049
原创 Spring Cloud中bus组件配置
原理架构图 用rabbitMQ或者Kafka都属于三方组件,必然要开启@EnableDiscoveryClient来代替@EnableEurekaClient想用上消息总线还须要加上如下配置,这样消息总线才能监测到组件的变化并进行同步spring.rabbitmq.host=localhostspring.rabbitmq.port=5672spring.ra...
2019-02-15 11:34:21 359
原创 第一次100%
说起来从去年六月份开始打王者已经有大半年了,本人之前从来不玩手机游戏的人,因为2018年所有家当在股市中大幅缩水,2017年底开始停牌,停了半年,开盘9个跌停,看着每天好几万的亏损,那酸爽…… 前段时间在《故事FM》中听到一个哥们的故事,他是赌球,也是输的精光,还好只是一小部分钱,这哥们总结的很到位,赌博的弊端不是输钱,那都是小事,而是惶恐,坐立不安,焦虑,心理状态异常...
2019-02-14 16:26:29 267
原创 双重验证模式(新)
public class DoubleClick { // Double-check idiom for lazy initialization of instance fields private volatile FieldType field; private FieldType getField() { FieldType result =...
2019-02-14 15:33:50 341 2
原创 Java 7新特性之ForkJoin框架
Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+3+4,可以分割...
2019-02-14 14:25:57 127
原创 如何设计一个秒杀系统(吹牛逼专用)
很多的电商平台,在节假日如双十一,618等都会有商品描述的活动,今天和大家讨论一下,如何设计一个秒杀系统。什么是秒杀在一定的时间内几秒或者几分钟,对一定数量的库存进行出卖。场景分析:1,在秒杀之前,比如上午十点开始秒杀,很多用户可能在九点五十左右就开始访问自己心仪的秒杀商品,这样就会出现在秒杀之前用很多的并发量,所以在秒杀之前的半个小时之前,是否可以将参加秒杀活动商品的一些信息缓...
2019-02-14 10:25:09 773 1
原创 Effective Java(Third Edition) item76:努力使失败保持原子性
一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被称为具有失败原子性(failure atomic)public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[...
2019-02-13 15:39:40 214
原创 Effective Java(Third Edition) item73:抛出与抽象对应的异常
如果方法抛出的异常与它所执行的任务没有明显的联系,这种情况将使人不知所措。当方法传递由低层抽象抛出异常时,往往会发生这种情况。除了使人感到困惑之外,这也“污染”了具有实现细节的更高层的API。如果高层的实现在后续的发行版本中发生了变化,它所抛出的异常也可能跟着发生变化,从而潜在地破坏现有的客户端程序。为了避免这个问题,更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。这种...
2019-02-13 15:08:44 158
原创 Class.forName("com.mysql.jdbc.Driver")到底在干啥
Class.forName("com.mysql.jdbc.Driver").newInstance() (Java 9开始newInstance()就已经不赞成使用了) 等价于 com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态...
2019-02-13 12:39:51 981
原创 StringBuffer中的toStringCache字段
不知道大家有没有注意到,StringBuffer中比StringBuilder多了一个toStringCache字段,字段上的解释是返回最后一次toString的缓存值,一旦StringBuffer被修改就清除这个缓存值。/** * A cache of the last value returned by toString. Cleared * whenever the...
2019-02-13 10:31:40 3051 3
原创 关于@HotSpotIntrinsicCandidate注解
@HotSpotIntrinsicCandidate昨天在看源码的时候看到了很多这个注解,应该是Java 9引入的新特性,作用如下:JDK的源码中,被@HotSpotIntrinsicCandidate标注的方法,在HotSpot中都有一套高效的实现,该高效实现基于CPU指令,运行时,HotSpot维护的高效实现会替代JDK的源码实现,从而获得更高的效率。 @Override ...
2019-02-13 09:58:07 8244 4
原创 我的半生感悟
人到中年,有很多想法,也有很多困惑,今天是2019年第一天上班,本来说要昨天做个总结的,但是昨天不知道干嘛了,这个总结也是昨天突然想写的,今天补上吧(其实平时有很多想法都是灵光一闪,想记录着的,但是就是没记)。 关于家庭,感觉自己就像处在沼泽中在使劲挣扎着,特别不想动,累吗?好像也不是特别累,但就是不想动,又不得不动,给自己下个总结,就是...
2019-02-13 09:48:29 719
原创 Java 9新增的一个方法InputStream.transferTo()
在Java每个重要的发型版本中,都会有许多新的特性被加入到类库中,所以与这些新特性保持同步是值得的。假设想要编写一个程序,用它打印出命令行中指定的一条URL的实际内容(类似于curl命令)。在Java 9之前,这些代码有点烦琐,但是Java 9在InputStream中增加了transferTo方法,程序一下子就简单了很多:public class Curl { public s...
2019-02-12 17:49:53 1107
原创 关于Java中的随机数库
一、Random 1、生成伪随机数(流),使用48位种子,使用线性同余公式进行修改。可以通过构造器传入初始seed,或者通过setSeed重置(同步);默认seed生成主导变量为系统时间的纳秒数。 2、如果两个(多个)不同的Random实例,使用相同的seed,按照相同的顺序调用相同方法,那么它们得到的数字序列也是相同的。这种设计策略,既有优点也有缺点,优点是“相同seed”生...
2019-02-12 17:33:34 712
原创 Java8 如何正确使用 Optional
Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。不使用Optional,代码是这样的:public static String getName(User u) { if (u == null) return "Unknown"; retur...
2019-02-12 15:17:07 193
原创 Effective Java(Third Edition) item52:慎用重载
public class SetList { public static void main(String[] args) { Set<Integer> set = new TreeSet<>(); List<Integer> list = new ArrayList<>(); for (i...
2019-02-12 13:23:17 228
原创 Java 8中的Stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行...
2019-02-12 11:45:36 173
原创 关于注解@FunctionalInterface
什么是函数式接口(Functional Interface)其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。 函数式接口用途它们主要用在Lambda表达式和方法引用(实际上也可认为是Lambda表达式)...
2019-02-12 10:43:17 361
原创 [Ljava.lang.String
"["代表数组 "L"代表对象二维数组String[][] 字节码表示为 [[Ljava.lang.String
2019-02-06 13:01:05 1448
原创 Effective Java(Third Edition) item8:避免使用终结方法(finalizer)和清除方法(cleaner)
注:Java9之前只有终结方法,Java9出现了新的清除方法取代了终结方法。终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的。清除方法没有终结方法那么危险,但仍然是不可预测、运行缓慢,一般情况下也是不必要的。talk is cheap,show me the code。定义一个Room类,实现AutoCloseable接口(使用try-with-res...
2019-02-02 11:44:02 745
转载 分布式系统的接口幂等性设计
在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次 一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到已付款,然...
2019-02-01 13:40:36 209
elasticsearch集群部署配置
2019-01-03
高效能程序员的修炼(HOT)
2016-11-01
自己用struts2和hibernate改的一个博客第二版
2016-11-01
自己用struts2和hibernate改的一个博客
2009-12-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人