JAVA
文章平均质量分 71
知易行难~
这个作者很懒,什么都没留下…
展开
-
i++、++i
一道面试题:int i =1; ①i = i++; ②int j =i++; ③int k = i + ++i * i++; ④System.out.println(i);System.out.println(j);System.out.println(k);结果是: i=4,j=1, k=11第一步:局部变量表中初始化 i =1,同时将 i=1压入操作数栈,此时, i++ 会把局部变量表中 i=1 变为2,但是只是暂时的, 操作数栈的 i=1返回结果,把 i=2覆盖,所以最终原创 2021-08-16 16:52:56 · 186 阅读 · 0 评论 -
基于AOP实现日志切面功能
基础概念:Target(目标对象):代理的目标对象。Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类。Joinpoint(连接点):所谓的连接点是指那些被拦截到的点。在spring中,这些点指的就是方法。通俗来讲就是可以被增强的方法叫做连接点。Pointcut(切入点):所谓切入点就是指我们要对拿些连接点进行拦截的定义。切点只是连接的一部分,真正被增强的方法 。Advice(通知/增强):所谓通知是指拦截到Joinpoint只后所要做的事情就是通知。封装增强业务逻辑的方法As原创 2021-07-11 17:13:10 · 1429 阅读 · 1 评论 -
synchronized和Lock的区别及生产者消费者模型的三种实现方式
1、原始构成sync是关键字属于JVM层面,monitorenter(底层通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象,只有在同步代码块或方法中才能调用wait/notify等方法)montitorexitLock是具体类(java.util.concurrent.locks.Lock)是API层面的锁2、使用方法sync不需要手动去释放锁,当sync代码完成后系统会自动让线程释放对锁的占用,不会产生死锁。ReentrantLock 则需要手动去原创 2021-07-11 16:42:25 · 157 阅读 · 0 评论 -
Collection 源码探究
ArrayList注意事项:可以加入null值,并且可以加入多个 底层是有数组来实现数据存储的。ArrayList基本等同于Vector,处理ArrayList是线程不安全(执行效率高),多线程情况下,不建议使用ArrayList.源码分析:ArrayList1. ArrayList维护了一个Object类型的数组 elementData。transient Object[] elementData。 transient 表示短暂、瞬间的意思,修饰属性时,表示不会被序..原创 2021-06-09 11:34:32 · 218 阅读 · 0 评论 -
Hystrix
前言:** 分布式系统面临的问题**复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.对于高流量的应用来说,单一的后避依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,原创 2021-03-10 15:18:26 · 180 阅读 · 0 评论 -
CAS
概念CAS,Compare And Swap的简称,CPU并发原语。用来判断内存中某个位置的值是否符合期望值,如果是则更新为最新值,这个过程属于原子操作。CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类(rt.jar包中的类)中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语原创 2021-03-09 14:25:06 · 260 阅读 · 0 评论 -
OpenFeign
OpenFeign是什么Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。Feign能干什么Feign旨在使编写J原创 2021-03-09 12:51:19 · 162 阅读 · 0 评论 -
Ribbon入门
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balacer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮训,随机连接等)去连接这些机器。可以使用Ribbon实现自定义的负载均衡算法。LB负载均衡(Load B原创 2021-03-09 09:53:28 · 270 阅读 · 2 评论 -
Eureka、Consul、Zookeeper三者异同点
组件名语言CAP服务健康检查对外暴露接口Spring Cloud集成EurekaJavaAP可配支持HTTPConsulGoCP支持HTTP/DNSZookeeperJavaCP支持客户端已集成CAP:C:Consistency (强一致性)A:Availability (可用性)P:Partition tolerance (分区容错性)最多只能同时较好的满足两个。CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,...原创 2021-03-08 14:42:58 · 239 阅读 · 2 评论 -
JAVA排序
排序原创 2021-01-04 12:00:56 · 154 阅读 · 0 评论