自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小大虽差,各任其性,苟当其分,逍遥一也。

  • 博客(574)
  • 论坛 (1)
  • 收藏
  • 关注

原创 java 如何实现 binary search 二分查找法?

顺序查找如果让你在一堆书架上找到自己想要的书,你会怎么找呢?实际上最简单最粗暴的方式就是一本一本的看过去。这个用计算机实现就对应着顺序查找。概念顺序查找适合于存储结构为顺序存储或链接存储的线性表。基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。复杂度分析:查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n.

2020-11-28 12:20:26 6

原创 7 天时间,我整理并实现了这 9 种最经典的排序算法

回顾我们前面已经介绍了 3 种最常见的排序算法:java 实现冒泡排序讲解QuickSort 快速排序到底快在哪里?SelectionSort 选择排序算法详解(java 实现)然而天下排序千千万,今天老马就和大家一起把最常见的几种都学习一遍。堆排序堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。基础知识 JCIP-11-二叉堆最大堆若以升序排序说明,.

2020-11-23 20:58:26 17

原创 mysql learn-00-overview

序言mysql 作为一款开源数据库,使用范围非常之广。最核心的原因在于便宜,而且生态日趋完善。所以本系列将对 mysql 进行重新整理学习,并且后期尝试实现简易版本的 mysql。整体模块myql 安装mysql 基本使用mysql 进阶技巧mysql 实现原理mysql 简易版实现拓展阅读mysql 相关专题相关书籍以前阅读完了两本书:《MySQL技术内幕(第4版)》这本书一般。《[[高性能MySQL》真本书偏应用。但是对于 mysql 感觉还是没有学到精髓,最近开始阅读一

2020-11-14 21:11:02 15

原创 阻塞队列(1)java 7 种阻塞队列 BlockingQueue 介绍

一些值得思考的问题为什么要有阻塞队列?什么是阻塞队列优缺点适用场景实现思想+源码个人启发阻塞队列什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供.

2020-11-08 22:14:19 26

原创 java 实现跳表(skiplist)及论文解读

什么是跳跃表跳表由William Pugh发明。他在论文 《Skip lists: a probabilistic alternative to balanced trees》中详细介绍了跳表的数据结构和插入删除等操作。跳表是一种可以用来代替平衡树的数据结构,跳表使用概率平衡而不是严格执行的平衡,因此,与等效树的等效算法相比,跳表中插入和删除的算法要简单得多,并且速度要快得多。为什么需要?性能比较好。实现相对于红黑树比较简单。占用更少的内存。论文解读为了学习第一手的资料,我们先学习一.

2020-11-02 21:46:49 40

原创 CopyOnWriteArrayList 使用入门及源码详解

CopyOnWriteArrayList官方定义CopyOnWriteArrayList是ArrayList的线程安全变体,其中通过创建底层数组的新副本来实现所有可变操作(添加,设置等)。这通常成本太高,但是当遍历操作大大超过突变时,它可能比替代方法更有效,并且当您不能或不想同步遍历但需要排除并发线程之间的干扰时非常有用。“快照”样式迭代器方法在创建迭代器时使用对数组状态的引用。这个数组在迭代器的生命周期中永远不会改变,所以干扰是不可能的,并且保证迭代器不会抛出ConcurrentModific.

2020-10-31 14:47:03 228 2

原创 面试经典 ConcurrentHashMap 源码你读过吗?

HashMap 的线程安全性HashMap 是线程不安全的。为了使用线程安全的数据结构,多线程条件下,可使用 Collections.synchronizedMap 方法构造出一个同步Map,或者直接使用线程安全的 ConcurrentHashMap。Java 7基于分段锁的ConcurrentHashMap注:本章的代码均基于JDK 1.7.0_67数据结构Java 7中的ConcurrentHashMap的底层数据结构仍然是数组和链表。与HashMap不同的是,ConcurrentHas

2020-10-29 23:38:20 211

原创 并发类 AtomicInteger 使用入门及源码详解

AtomicInterger 介绍可以原子性更新的 Integer 值,当然这个类并不能完全替代 Integer 对象。使用使用起来还是很方便的。比如说我们定义一个计数器,使用 AtomicInteger 可以同时兼顾性能与并发安全。import java.util.concurrent.atomic.AtomicInteger;/** * @author binbin.hou * @since 1.0.0 */public class Counter { private

2020-10-28 20:58:08 188

原创 StampedLock 读写锁中的最强王者

StampedLock简介我们前面介绍了 ReentrantReadWriteLock可重入读写锁详解,不过 jdk1.8 引入了性能更好的 StampedLock 读写锁,我愿称之为最强!一种基于能力的锁,具有三种模式用于控制读/写访问。StampedLock的状态由版本和模式组成。锁定采集方法返回一个表示和控制相对于锁定状态的访问的印记; 这些方法的“尝试”版本可能会返回特殊值为零以表示获取访问失败。锁定释放和转换方法要求stamps作为参数,如果它们与锁的状态不匹配则失败。三种模式这.

2020-10-24 08:14:27 208

原创 ReentrantLock 可重入锁这样学,面试没烦恼,下班走得早

为什么需要 ReentrantLock ?既生 synchronized,何生 ReentrantLock?每一个接触过多线程的 java coder 肯定都知道 synchronized 关键字,那为什么还需要 ReentrantLock 呢?其实这就是 ReentrantLock 与 synchronized 对比的优势问题:(1)ReentrantLock 使用起来更来更加灵活。我们在需要控制的地方,可以灵活指定加锁或者解锁。这可以让加锁的范围更小,记住老马的一句话,更小往往意味着更快。.

2020-10-21 23:18:28 210

原创 工作 5 年了,竟然不知道 volatile 关键字?

“工作 5 年了,竟然不知道 volatile 关键字!”听着刚面试完的架构师一顿吐槽,其他几个同事也都参与这次吐槽之中。都说国内的面试是“面试造航母,工作拧螺丝”,有时候你就会因为一个问题被PASS。你工作几年了?知道 volatile 关键字吗?今天就让我们一起来学习一下 volatile 关键字,做一个在可以面试中造航母的螺丝工!volatileJava语言规范第三版中对 volatile 的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该

2020-10-20 21:13:47 193

原创 java 从零实现属于你的 redis 分布式锁

点赞再看,已成习惯。为什么需要分布式锁在 jdk 中为我们提供了加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。上一节我们已经对分布式锁原理进行了详细讲解,参见:red.

2020-10-17 21:24:42 191

原创 3天时间,我是如何解决redis bigkey删除问题的?

问题的出现一个平坦无奇的工作日,领导到我工位和我说,“有一个 redis 慢操作,你这几天有时间帮忙解决一下。”“好的。”,管他什么问题,既然让我做,我自然觉得自己能搞定。然后我收到一封 redis 慢操作的 excel 文件,这个还挺好,每个操作的耗时都给出来了,看了下我们系统有几个操作耗时几秒钟。好家伙,对于单线程的 redis 来说,一个操作几秒钟确实是挺致命的,不过都是在凌晨左右,还好。慢操作分析redis 的慢操作已经有了,如果没有,我们可以自己去 redis 服务器查看历史的慢日.

2020-10-17 14:58:24 223

原创 java 手写并发框架(二)异步转同步框架封装锁策略

序言上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java 手写并发框架(1)异步查询转同步的 7 种实现方式异步转同步的便利性实现方式循环等待wait & notify使用条件锁使用 CountDownLatch使用 CyclicBarrierFutureSpring EventListener上一节我们已经对上面的 7 种实现方式进行了详

2020-10-12 21:51:04 218

原创 从零手写缓存框架(14)redis渐进式rehash详解

redis 的 rehash 设计本文思维导图如下:HashMap 的 rehash 回顾读过 HashMap 源码的同学,应该都知道 map 在扩容的时候,有一个 rehash 的过程。没有读过也没有关系,可以花时间阅读下 从零开始手写 redis(13) HashMap源码详解 简单了解下整个过程即可。HashMap 的扩容简介这里简单介绍下:扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组

2020-10-11 21:50:50 255

原创 从零开始手写缓存框架 redis(13)HashMap 源码原理详解

为什么学习 HashMap 源码?作为一名 java 开发,基本上最常用的数据结构就是 HashMap 和 List,jdk 的 HashMap 设计还是非常值得深入学习的。无论是在面试还是工作中,知道原理都对会我们有很大的帮助。本篇的内容较长,建议先收藏,再细细品味。不同于网上简单的源码分析,更多的是实现背后的设计思想。涉及的内容比较广泛,从统计学中的泊松分布,到计算机基础的位运算,经典的红黑树、链表、数组等数据结构,也谈到了 Hash 函数的相关介绍,文末也引入了美团对于 HashMap 的源

2020-10-10 21:39:03 225

原创 java 手写并发框架(一)异步查询转同步的 7 种实现方式

序言本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式。思维导图如下:异步转同步业务需求有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。比如业务开发中我们调用其他系统,但是结果的返回确实通知的。或者 rpc 实现中,client 调用 server 端,结果也是异步返回的,那么如何同步获取调用结果呢?正常处理逻辑触发异步操作,然后传递一个唯一标识。等到异步结果返回,根据传入的唯一标识,匹配此次结果。如何转换为同步正常的应用场景很多,但是有时

2020-10-09 21:12:08 275

原创 从零开始手写缓存框架(12)redis expire 过期的随机特性详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(二)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写redis(七)LRU 缓存淘汰策略详解java从零开始手写redis(八)朴素 LRU 淘汰算法性能优化第二

2020-10-08 14:32:56 207

原创 java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写 redis(七)LRU 缓存淘汰策略详解前面我们实现了 FIFO/LRU/LFU 等常见的淘汰策略,不过在操作

2020-10-07 19:20:42 307

原创 java 从零开始手写 redis(十)缓存淘汰算法 LFU 最少使用频次

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零手写实现redis(七)LRU 缓存淘汰策略详解从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化本节一起来

2020-10-06 21:56:18 360

原创 从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。

2020-10-04 18:12:36 235

原创 从零开始手写 redis(七)LRU 缓存淘汰策略详解

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。

2020-10-03 21:50:45 1139

原创 java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路我们前面简单实现了 redis 的几个特性,java从零手写实现redis(三)内存数据如何重启不丢失? 中实现了类似 redis 的 RDB 模式。redis aof 基础Redis AOF 持

2020-10-02 12:59:32 231

原创 java 从零开始手写 redis(五)过期策略的另一种实现思路

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器前面实现了 redis 的几个基本特性,其中在 expire 过期原理时,提到了另外一种实现方式。这里将其记录下来,可以拓展一下自己的思路。以前的实现方式核心思路原来的实现方式见:java从零手写实现redis(三)redis expire 过期原理

2020-10-01 22:18:39 205

原创 从零开始手写 redis(四)监听器的实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?本节,让我们来一起学习一下如何实现类似 guava-cache 中的 removeListener 删除监听器,和类似 redis 中的慢日志监控的 slowListener。删除监听器说明我们在两种场景下删除数据是对用户透明的:(1)size 满了之后,进行数据淘汰。(2)expire 过期时,清

2020-09-30 19:56:08 244

原创 从零手写 cache 之 redis expire 过期实现原理

前言我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache。本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能。过期是一个非常有用的特性,比如我希望登录信息放到 redis 中,30min 之后失效;或者单日的累计信息放在 redis 中,在每天的凌晨自动清空。代码实现接口我们首先来定义一下接口。主要有两个:一个是多久之后过期,一个是在什么时候过期。public interface ICache<K, V>

2020-09-28 20:11:15 233

原创 从零开始手写缓存之如何实现固定缓存大小

程序员的三高前段时间有一位同事体检,体检医生说他三高。我打趣道,程序员三高不是高性能、高并发、高可用吗?你是哪三高?每一个追求性能的开发者,都对高性能孜孜不倦地追求着,而缓存是我们踏上这条高性能大道的必经之路。小到 cpu 设计,大到服务分布式缓存,我们每时每刻都在接触缓存,今天我们就一起学习下缓存的发展之路,以及如何如何手写一个可以指定大小的 cache。cache 发展之路古代社会 - HashMap当我们应用有一定流量之后或者查询数据库特别频繁,这个时候就可以祭出我们的java中自带的H

2020-09-27 23:17:25 208 2

原创 18次版本迭代,从零到一实现 java web 权限管理控台(文末福利)

​privilege-adminprivilege-admin 是一款为 java 设计的权限管理控台。特性用户,角色,权限的管理黑白名单管理登入/登出日志审计基于 auto-log 的统一日志输出创作目的权限作为 web 开发可以说是最基础,但同时也是最重要的一个环节。前端时间写了 https://github.com/houbb/privilege 权限管理框架,但是没有控台配置,总觉的是残缺的,于是花时间从零实现了一个权限管理控台。多年不接触前端,前端技术变化也

2020-09-26 22:38:29 209

原创 java 注解结合 spring aop 自动输出日志新增拦截器与过滤器

auto-logauto-log 是一款为 java 设计的自动日志监控框架。前面已经写过了两篇:java 注解结合 spring aop 实现自动输出日志java 注解结合 spring aop 实现日志 traceId 唯一标识经过前面2篇的代码实现,发现依然存在下列问题:(1)注解的使用依然不够便捷。如果每一个方法上都指定 @AutoLog,依然会比较麻烦。个人在使用的时候也不想这么麻烦。于是想添加基于类的注解。后期考虑是否可以基于包,动态指定 AOP 的扫描包范围。(2)对于日志

2020-09-26 12:24:03 212

原创 如何从零开始设计权限管理系统

背景说明近期写代码又开始重新接触了一点控台应用,接触到的项目年代久远,所有的权限管理用起来感觉不是很得心应手。于是想着自己能否从零设计一个,梳理一下思路,当然实际用不用也无所谓。权限管理主要是为了安全,项目中的权限管理是全部放在前端控制的,感觉这一点非常不安全。前端防君子,不防小人。当然本次造轮子主要也是为了打造一款自己满意的权限控制框架,所以设计采用 MVP 模式,采用渐进式的方式开发。可以一起学习一下权限控制的设计和实现思路。如果生产想直接使用,也推荐目前比较成熟的框架:spring-

2020-09-17 23:24:15 277

原创 税后收入

税后收入我们每个在生活的跌打滚爬的人,都渴望着财富自由。因为我们知道,有钱不是万能的,没有钱是万万不能的。没有钱,连远方的车票都买不到。很多人都渴望暴富,在当前高房价的压力之下难以喘息。对投资一窍不通的,也天天跑去投资理财,怕手中的钱跑不过通胀。随处可见的自主创业心灵鸡汤,幸存者效应让我们看不到那些创业路上的失败者。我们抬起头看着天上的浮云,却少有人看清脚下的路。不论是在公司上班也好,自主创业也罢,我们每个挣钱的人都要面临一个问题,那就是纳税。这件事情基本每一个月都会发生,只是有时候我们习以为常

2020-09-16 21:37:20 267

原创 面试官:谈一谈你对 redis 分布式锁的理解

​为什么需要分布式锁在 jdk 中为我们提供了多种加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。锁的准则首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:.

2020-09-10 22:38:45 265

原创 java 注解结合 spring aop 实现日志traceId唯一标识

MDC 的必要性日志框架日志框架成熟的也比较多:slf4jlog4jlogbacklog4j2我们没有必要重复造轮子,一般是建议和 slf4j 进行整合,便于后期替换为其他框架。日志的使用基本上所有的应用都需要打印日志,但并不是每一个开发都会输出日志。主要有下面的问题:(1)日志太少,出问题时无法定位问题(2)日志太多,查找问题很麻烦,对服务器磁盘也是很大的压力(3)日志级别控制不合理(4)没有一个唯一标识贯穿整个调用链路我们本次主要谈一谈第四个问题。为什么需要唯一标识对于

2020-09-06 22:48:15 466 2

原创 ACP 学习-08-DDoS 防护

DDos分布式拒绝服务(Distributed Denial of Service,简称DDoS)将多台计算机联合起来作为攻击平台,通过远程连接利用恶意程序,对一个或多个目标发起DDoS攻击,消耗目标服务器性能或网络带宽,从而造成服务器无法正常地提供服务。攻击原理通常,攻击者使用一个非法账号将DDoS主控程序安装在一台计算机上,并在网络上的多台计算机上安装代理程序。在所设定的时间内,主控程序与大量代理程序进行通讯,代理程序收到指令时对目标发动攻击,主控程序甚至能在几秒钟内激活成百上千次代理程序的运行

2020-09-03 23:27:04 223 1

原创 ACP 学习-07-CDN

CDN阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。阿里云CDN分担源站压力,避免网络拥塞,确保在不同区域、不同场景下加速网站内容的分发,提高资源访问速度。阿里云CDN将源站资源缓存至阿里云遍布全球的加速节点上,当终端用户请求访问和获取该资源时,无需回源,系统自动调用离终端用户最近的CDN节点上已缓存的资源。目前,CDN部分节点已支持IPv6进行访问。为什么选择阿里云 CDN产品竞争

2020-09-03 23:26:35 456

原创 ACP 学习-06-对象存储 OSS

对象存储服务对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。定义阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%。OSS具有与平台无关的RESTful API接口,您

2020-09-03 23:24:46 265

原创 ACP 学习-04-负载均衡(Server Load Balancer)

负载均衡负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。概述负载均衡通过设置虚拟服务地址,将添加的同一地域的多台ECS实例虚拟成一个高性能、高可用的后端服务池,并根据转发规则,将来自客户端的请求分发给后端服务器池中的ECS实例。负载均衡默认检查云服务器池中的ECS实例的健康状态,自动隔离异常状态的ECS实例,消除了单台ECS实例的单点故障,提高了应用的整体服务能

2020-09-03 23:23:34 325

原创 ACP 学习-03-弹性伸缩(Auto Scaling)

弹性伸缩使用弹性伸缩(Auto Scaling),您可以根据业务需求和策略设置伸缩规则,在业务需求增长时自动为您增加ECS实例以保证计算能力,在业务需求下降时自动减少ECS实例以节约成本。弹性伸缩不仅适合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序。弹性伸缩效果示例您需要提前设置触发弹性伸缩的条件。下图中,监控项为伸缩组内ECS实例的vCPU使用率平均值,并假设触发弹性扩张的阈值为80%,触发弹性收缩的阈值为30%。弹性扩张当您的业务升级时,弹性伸缩为您自动完成底层资源升级,避免

2020-09-03 23:23:06 270

原创 java 注解结合 spring aop 实现自动输出日志

auto-logauto-log 是一款为 java 设计的自动日志监控框架。创作目的经常会写一些工具,有时候手动加一些日志很麻烦,引入 spring 又过于大材小用。所以希望从从简到繁实现一个工具,便于平时使用。特性基于注解+字节码,配置灵活自动适配常见的日志框架支持编程式的调用支持注解式,完美整合 spring支持整合 spring-boot支持慢日志阈值指定,耗时,入参,出参,异常信息等常见属性指定变更日志核心原理注解定义import ja

2020-09-02 22:20:11 226

原创 JSP 实战学习笔记-19-expression 表达式语言

JSP 表达式语言JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。一个简单的语法典型的,当您需要在JSP标签中指定一个属性值时,只需要简单地使用字符串即可:<jsp:setProperty name="box" property="perimeter" value="100"/>JSP EL允许您指

2020-08-31 23:15:21 198

空空如也

叶止水的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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