8 帅性而为1号

尚未进行身份认证

我要认证

就读于东南大学,现阿里巴巴Java工程师

等级
TA的排名 6k+

使用Guava RateLimiter限流以及源码解析

前言在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理常用的限流算法漏桶算...

2020-04-10 20:16:19

限流算法

一、限流的作用由于 API 接口无法控制调用方的行为,因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机。限流 (Ratelimiting) 指对应用服务的请求进行限制,例如某一接口的请求限制为 100 个每秒, 对超过限制的请求则进行快速失败或丢弃。限流可以应对:热点业务带来的突发请求; 调用方 bug 导致的...

2020-04-10 20:07:08

ThreadLocal弱引用与内存泄漏分析

本文对ThreadLocal弱引用进行一些解析,以及ThreadLocal使用注意事项。ThreadLocal首先,简单回顾一下,ThreadLocal是一个线程本地变量,每个线程维护自己的变量副本,多个线程互相不可见,因此多线程操作该变量不必加锁,适合不同线程使用不同变量值的场景。其实现原理这里就不做详细阐述,其数据结构是每个线程Thread类都有个属性ThreadLocalMap,...

2020-04-10 19:40:52

单一职责原则

https://blog.csdn.net/king123456man/article/details/81591792?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

2020-03-22 11:48:58

依赖倒置原则

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。面向对象的开发很好的解决了这个问题,一般情况下...

2020-03-22 11:40:22

软件设计七大原则实战(二)-开闭原则

1 开闭原则的定义开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统,先来看开闭原则的定义:Software entities like classes,modules and functions should be open for extension but closed for modifications定义初看到这个定义,可能会很迷惑...

2020-03-22 11:27:53

比较两个实体类的属性值工具

public static Map<String, CompareDTO> compareFields(Object source, Object target, List<String> comparedPropertyList) { try { Map<String, CompareDTO> map = Map...

2019-10-10 19:22:07

通过itext合并PDF工具类

maven坐标:<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependen...

2019-08-22 14:09:15

JVM命令使用演示

之前推送了一本jvm相关的书籍【JVM Troubleshooting Guide】书籍推荐及下载,个别小伙伴反馈说关于jvm看了不少资料,有些印象,但是不知道如何使用那些命令。就着这个前提,简单演示一下jvm一些命令的使用。(温馨提示,由于jvm命令返回的字符串偏长一些,手机上效果差一些,建议在电脑上看)首先,先准备一段代码,直接运行一个java程序也可以,比如:@Sl...

2019-07-28 11:16:39

JVM性能调优监控工具jps、jmap、jstack、jstat使用详解

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 ...

2019-07-28 11:11:12

JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解

jps查看所有的jvm进程,包括进程ID,进程启动的路径等等。我自己也用PS,即:ps -ef | grep javajstack观察jvm中当前所有线程的运行情况和线程当前状态。系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发...

2019-07-28 11:04:41

通过jstack与jmap分析一次线上故障

一、发现问题 下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。二、排查思路简单分析下可能出问题的地方,分为5个方向:1.系统本身代码问题2.内部下游系统的问题导致的雪崩效应3.上游系统调用量突增4.http请求第三方的问题5.机器本身的问题三、开始...

2019-07-28 11:00:28

为什么Map桶中个数超过8才转为红黑树

被问及的一个问题,应该不少人看到这个问题都会一面懵逼。因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作。笔者第一反应也是一样,只能初略的猜测是因为时间和空间的权衡。 要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升...

2019-07-24 11:38:45

LinkedHashMap 源码详细分析(JDK1.8)

https://www.imooc.com/article/22931作者:田小波链接:https://www.imooc.com/article/22931来源:慕课网本文原创发布于慕课网 ,转载请注明出处,谢谢合作...

2019-07-24 10:49:31

HashMap 源码详细分析(JDK1.8)

https://www.imooc.com/article/30668作者:田小波链接:https://www.imooc.com/article/22931来源:慕课网本文原创发布于慕课网 ,转载请注明出处,谢谢合作

2019-07-24 10:45:42

BASE理论

什么是BASE理论BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的简写,由 eBay 架构师 Dan Pritchett 于 2008 年在《BASE: An Acid Alternative》(论文地址点这里)论文中首次提出。BASE 思想与 ACID 原理截然不同,它满足...

2019-07-23 21:02:43

Java开发体系(转)

今天,就为大家整理一份目前互联网公司最主流的技术选型:阅读源码程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这也造成了很多错误看源码的方式。那要如何正确的分析源码呢?分布式架构随着我们的业务量越来越大和越重要,单体的架构模式已经无...

2019-07-16 13:45:29

微服务--分布式事务的实现方法及替代方案(转)

概念事务补偿机制: 在事务链中的任何一个正向事务操作, 都必须存在一个完全符合回滚规则的可逆事务. CAP理论: CAP(Consistency, Availability, Partition Tolerance), 阐述了一个分布式系统的三个主要方面, 只能同时择其二进行实现. 常见的有CP系统, AP系统. 幂等性: 简单的说,业务操作支持重试, 不会产生不利影响. 常见的实现方式...

2019-07-16 11:39:14

Java中CAS原理详解

前言在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是vol...

2019-07-14 12:02:32

解释一下什么叫AOP(面向切面编程)

解释一下什么叫AOP(面向切面编程)java动态代理中的invoke方法是如何被自动调用的(转)

2019-07-10 20:47:36

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。