
java学习随记
文章平均质量分 90
峰马
这个作者很懒,什么都没留下…
展开
-
Guava提供的RateLimiter限流原理以及漏桶算法和令牌桶算法
文章目录漏桶算法、令牌桶算法思路及使用场景RateLimiter实现原理SmoothBurstySmoothWarmingUp漏桶算法、令牌桶算法思路及使用场景在介绍RateLimiter之前我们先看下常说的漏桶算法和令牌桶算法,看下两种算法的思想和适用场景:漏桶算法:结合上面的图,漏桶算法就是将请求放入桶中,然后始终以一个固定的速率从桶中取出请求来处理,当桶中等待的请求数超过上限后(桶的容量固定),后续的请求就不再加入桶中,而是执行拒绝策略(比如降级)适用于需要以固定速率的场景,而在多数业务场原创 2021-05-14 00:05:33 · 3443 阅读 · 4 评论 -
Synchronized原理
1.Syncronized应用synchronized是java中加锁的关键字,可以用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程可以执行这段代码。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍可以访问该object中的非加锁代码块。1.1 三种应用方式synch...转载 2019-10-31 10:31:56 · 167 阅读 · 0 评论 -
记一次JDK8的Metaspace区域的调优过程,及MetaspaceSize参数的误解
JDK8用metaSpace区域来代替了以前的永久区,这个区域主要存放被加载的class信息,我手上一个项目每次启动时候都会伴随一次fullgc,排查思路是:一、查看内存使用率命令:jstat -gcutil PID ,这里的PID是Java进程ID可以看到老年代使用率只有1.96%,但是MetaSpace区域使用率是96.13%,初步怀疑是metaSpace区域设置太小。二、查看gc日...原创 2019-04-30 18:09:03 · 10753 阅读 · 1 评论 -
EnumSet原理介绍
为了便于理解EnumSet,需要先知道这种数据结构是为了解决什么问题而设计的。一、场景举例一个场景,你系统里的用户会有各种身份,而一个用户会有多个身份,你设计了一个UserDTO对象,这时候要考虑怎么来表示身份,有一种比较常用的方法,比如定义一个Long属性,long类型有64位,每一位对应一种身份,1标识拥有该身份,0标识没有该身份。这样做就比较节省空间,那么在对这个UserDTO增加身份、...原创 2019-06-27 01:34:20 · 533 阅读 · 0 评论 -
逃逸分析-Java对象并不一定都是在堆上分配内存的
JVM内存分配策略关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。以下是我们知道的一些常识:1、根据Java虚拟机规范,Java虚拟机所管理的内存包括方法区、虚拟机栈、本地方法栈、堆、程序计数器等。2、我们通常认为JVM中运行时数据存储包括堆和栈。这里所提到的栈其实指的是虚拟机栈,或者说是虚拟栈中的局部变量表。3、栈中存放一些基本类型的变量数据(int/short/l...转载 2019-07-09 09:46:24 · 304 阅读 · 0 评论 -
0拷贝的理解
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限制了操...转载 2019-07-11 11:34:08 · 1053 阅读 · 0 评论 -
HTTPS数字证书验证原理
通常网络请求我们分为两种,分别是HTTP请求和HTTPS请求,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的超文本传输协议。HTTP的传输属于明文传输,所以说是不安全的,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS传输的信息是通过加密的,也是一种安全的传输。说到加密算法,先来了解一下两种常用的加密方式,分别是对称加密和非对称加密:1.对称加密:加...转载 2019-07-12 15:34:55 · 1206 阅读 · 1 评论 -
弄懂同步与阻塞
一次调用有两个参与者,调用方 和 被调用方。同步是对被调用方来说的,依据是被调用方的【反馈方式】,如果被调用方一直等到任务执行完才反馈给调用方执行结果,那么就是同步;如果被调用方在被调用时就回复【知道了】,而真正的执行结果以通知的方式告知调用方,那么就是异步。阻塞和非阻塞是对调用方的处理方式来说的,如果调用方在调用后,不需要等到任务执行结束就去做别的事,那么就是非阻塞的,如果调用方在调用后,需...原创 2019-08-06 18:08:22 · 294 阅读 · 0 评论 -
HBase详解(很全面)
【转自:http://jiajun.iteye.com/blog/89963...转载 2019-09-02 10:53:36 · 510 阅读 · 0 评论 -
Java中数组为什么不支持泛型,集合却支持泛型?
首先需要明白泛型是在编译器校验类型安全的,在运行期会将类型擦除,比如:List<String> list = new ArrayList<>();这段代码在允许期会被擦掉泛型,就等同于List list = new ArrayList();其次 要明白集合中的泛型是不可变的,但是数组里的类型是可变的,比如:List<String> list = new ...原创 2019-09-30 00:05:15 · 2987 阅读 · 0 评论 -
bootstrap模态框报错modal is not a function
1、Jquery.js必须放到bootstrap.min.js之前但是我原创 2019-04-20 00:46:24 · 834 阅读 · 0 评论 -
VIPServer:阿里智能地址映射及环境管理系统详解
作者: 周遥,阿里技术专家,花名玄胤,毕业于四川大学。六年大型分布式与中间件系统经验,三项国家专利,参加过多次“双十一”。2013年从零开始带出VIPServer,目前已成为集团环境管理与路由的标准。 王建伟,阿里巴巴工程师,花名正己,西北工业大学计算机学院硕士毕业。目前在阿里中间件技术部软负载小组负责VIPServer系统。 本文为《程序员》原创文章,未经允许...转载 2019-03-25 21:01:02 · 694 阅读 · 0 评论 -
章文嵩博士和他背后的负载均衡帝国
负载均衡的演变http://jm.taobao.org/2016/06/02/zhangwensong-and-load-balance/VipServer详解https://blog.youkuaiyun.com/zdy0_2004/article/details/52944867转载 2019-02-17 15:45:12 · 570 阅读 · 0 评论 -
synchronized、ReentrantLock 、ReentrantReadWriteLock 随记
1. synchronized实际使用的对象内部锁,那什么是对象内部锁?java中每个Object对象都有一个自己的内部锁,而在Object对象里的 wait、notify、notifyall方法都是针对这个对象内部锁的方法。所以有人认为对象内部锁有些违背 oop原则,因为我们看不见,摸不着… 使用在静态方法上时,使用的是这个类的class对象的内部锁 使用在非静态方法上时...原创 2018-07-24 02:48:22 · 316 阅读 · 0 评论 -
AtomicLong和LongAdder的区别
并发场景下的number操作,都会选用java.util.concurrent.atomic包下的数据结构,比如典型的计数场景,而AtomicLong是其中一个,但是jdk1.8后Doug Lea大神又添加LongAdder和DoubleAdder,在大并发场景下性能会远高于AtomicLong,看下源码了解下原理。首先看下AtomicLong是怎么保证原子操作,以add操作,拿其中 addAn...原创 2018-11-28 17:01:59 · 1587 阅读 · 1 评论 -
通过ProxyFactoryBean创建proxy代理类源码分析
Spring Aop介绍:Spring 实现Aop除了自己的实现方式外,还封装了AspectJ供我们使用,这里主要是对Spring自身Aop实现的源码做下解析,而这两种方式之间的区别主要在于实现方式和作用时机上:Spring Aop 虽然底层也是通过字节码技术,但是是通过AopProxy生成新的的代理类,在运行时进行类加载,拦截代理对象的调用来实现切面增强。AspectJ 是通过字节码技术...原创 2018-12-10 00:00:58 · 698 阅读 · 0 评论 -
https协议梳理
大家都知道https协议比http更安全,那么为什么说https更安全,它是怎么做到安全通信的呢。这两天在看这个,总结下,加深下理解。client和sever端通信时,要做到安全的话,需要做到三方面:通信的信息不被泄露通信的信息不被篡改通信双方身份是可信的,没有被欺骗。https是怎么做到的呢,简单的说就是通过加密防止信息泄露,通过签名防止信息被篡改,通过证书来证明通信双方身份的可信...原创 2018-12-27 01:36:22 · 171 阅读 · 0 评论 -
java锁里的AQS源码解析
AQS是current包下面的java.util.concurrent.locks.AbstractQueuedSynchronizer(抽象队列同步器),ReentrantLock(重入锁)、ReentrantReadWriteLock(读写锁)都是基于这个类来实现的。作用就是将对共享资源的访问进行控制。这个类里的锁有两种:共享锁和独占锁。共享锁之间可以共享资源,比如读写锁里,读与读之间是不...原创 2019-01-23 19:58:30 · 205 阅读 · 0 评论 -
互联网架构演变过程
前言:架构选型是根据当前业务需要来的,在满足业务需求的前提下,既要有足够的扩展性也不能过度设计,每次的架构升级都是为了解决系统瓶颈而做的。我根据个人理解梳理下web应用的架构演变过程。以电子商务网站为例:1.0时代这个时候是一个web项目里包含了所有的模块,一个数据库里包含了所需要的所有表,这时候网站访问量增加时,首先遇到瓶颈的是应用服务器连接数,比如tomcat连接数不能无限增加,线程数...原创 2019-02-14 17:44:24 · 1278 阅读 · 0 评论 -
联合索引在B+树上的结构介绍
前言最近在学习MySQL的存储引擎和索引的知识。看了许多篇介绍MyISAM和InnoDB的索引的例子,都能理解。像这张索引图:PS:该图来自大神张洋的《MySQL索引背后的数据结构及算法原理》一文。但许多文章讲述的都是单列索引,我很好奇联合索引对应的结构图是怎样的。疑惑:联合索引的结构是怎样...转载 2019-03-25 20:45:44 · 1653 阅读 · 2 评论 -
Thread类的sleep、join、yield、interrupt方法与Object类的wait、notify、notifyAll方法
主要从用途、场景及结合锁和cpu资源说下这几个方法,用于记录自己的学习心得。一、interrupt方法:改变中断状态,无法中断正在运行的线程。中断的真正原理是当线程被Object.wait(),Thread.join()或sleep()方法阻塞时,调用interrupt()方法后改变中断状态,而wait/join/sleep这些方法内部会不断地检查线程的中断状态值,当发现中断状态值改变时则抛出In...原创 2018-03-23 16:40:45 · 457 阅读 · 0 评论