软件
文章平均质量分 87
Old Wang
这个作者很懒,什么都没留下…
展开
-
java实现lru
网上说了很多linkhashmap的实现,但是我觉得还是不要用jdk的工具,自己用最原始的方式实现才更有利于理解。public class Lru { private static final int MAX_NUM = 3; //用来记录节点,使得遍历链表复杂度降低到O(1) private static ConcurrentHashMap<String, L...原创 2019-10-28 14:29:24 · 104 阅读 · 0 评论 -
redis&zk分布式锁
本文主要介绍redis分布式锁,要点1、删除时确认锁防止超时误删除锁 2、锁的续签看代码吧public class RedisLock { private static String lockkey = "defalut-lock-key"; private static long locktimeSecond = 30; private static Concu...原创 2019-08-20 18:11:04 · 176 阅读 · 1 评论 -
transmittable-thread-local解析
这玩意我第一次用到是在用springcloud时候,有组员跟我说希望可以用线程池异步执行。本来没啥问题,但是我们希望模块之间传递traceId(方便日志查询),我们做法是把traceid放在threadlocal里,然后feign请求时候再取出来带到下一个模块去,然后就出现问题了,最后用transmittable-thread-local解决了。一、源码解析点开TransmittableT...原创 2019-08-09 18:34:40 · 1407 阅读 · 0 评论 -
Guava Ratelimit源码分析以及仿造优化版本
今天介绍Guava的限流RateLimit,主要介绍2个,一个是源码分析,一个是仿造他的原理写一个优化版本。一、源码分析首先我个人认为RateLimit的设计思想很好很优秀,但是写的有点瑕疵,后面我会说到。①create方法第一个参数是Guava的秒表工具用来计时的,第二个参数是你输入的,也就是每秒生成的令牌数。SmoothBursty是RateLimit的子类,看看他的构造方...原创 2019-07-30 16:56:53 · 267 阅读 · 0 评论 -
synchronized和lock全面详细讲解
synchronized和lock应该是最常用的锁,今天讲这2个原理和比较。我不粘贴也不摘抄,完全是按我自己理解来说,努力做到大白话。一、synchronized原理说原理之前先说synchronized4个状态,因为不同状态的实现原理不同。锁的状态分为无锁->偏向锁->轻量级锁->重量级锁①无锁状态初始化时候状态②偏向锁当只有一个线程进入synchron...原创 2019-07-19 16:14:31 · 555 阅读 · 0 评论 -
UnsupportedOperationException异常分析
直接先说结论:1不会报错,2、3都会报UnsupportedOperationException错源码分析:①先看看ArrayList的add方法的原理看上去很简单,就是数组赋值,但是注意这个ArrayList的包名:java.util.ArrayList(这个就是引发问题的核心区别)②再看看singletonLIst的add方法原理实例化singletonLI...原创 2019-07-11 12:11:48 · 501 阅读 · 0 评论 -
zuul源码解析
zuul——springcloud的网关。如果看过我之前的博客,可以知道feign的坑是比较多的,但是网关这块做的是比较好的,不管是性能还是灵活性。一、网关的作用: ①路由 ②利用filter可以实现限流(也可以使用ratelimit),鉴权,验签,黑白名单,对请求处理等等。二、zuul源码及其工作流程:我们首先从开启网关注解进行跟踪——@EnableZ...原创 2018-10-06 16:46:20 · 616 阅读 · 0 评论 -
Feign源码解析
首先我要说的是springcloud没有rpc,这就涉及rpc和微服务的区别。springcloud的模块通信工具feign跟httpclient和okhttp是一样的东西,都是对http请求封装的工具,其实feign可以选择httpclient或者okhttp作为底层实现(修改配置即可)。一、Feign的作用: ①封装http请求,使开发人员对发送请求的过程无感知,给人一种伪...原创 2018-10-04 17:16:12 · 2209 阅读 · 0 评论 -
ThreadLocal和InheritableThreadLocal解析
一、两者区别: ThreadLocal:为每一个线程创建一个副本,每个副本线程隔离。但是他不支持继承。 InheritableThreadLocal:支持继承。这里的继承不是extends,是指线程的继承。也就是说新起一个线程可以拥有老线程的数据。二、原理: 这里要先说另一个概念ThreadLocalMap。他和普通map差不多,也是key-value结构,key为threadl...原创 2018-07-05 14:57:35 · 1392 阅读 · 0 评论 -
Eureka源码解析与配置
Eureka只要分为2部分,一个server,一个是client(包含生产者和消费者)。 Eureka client: ①DiscoveryClient接口定义了发现服务的方法,EurekaDiscoveryClient是它的实现。EurekaDiscoveryClient引用EurekaClient接口,DiscoveryClient类是EurekaClient实现。 ...原创 2018-07-01 16:54:23 · 866 阅读 · 0 评论 -
携程apollo配置中心介绍及安装
分布式配置中心有很多,springcloud的config、百度的disconfig、携程的apollo、淘宝的diamond。由于携程的apollo极少的侵入性,以及面对springcloud开发,所以我项目技术选型最终定为apollo。 一、携程apollo优点: ①支持配置热更新,而且不需要想springcloud那样需要消息总线来回调通知。 ②对于接入项目,只需要引cl...原创 2018-03-16 16:59:04 · 9568 阅读 · 1 评论 -
封装springboot基础框架(含demo)
写此篇博文目的有2个: 一、我想做一个最小化框架,包括配置、拦截器,工具包等等都一应具备,使开发可以直接开始编写业务代码,所以我的demo的名字叫做springboot-base。 二、这也是为了以后介绍springcloud做的一个铺垫。 该框架所有设置均来自本人工作实际开发经验总结出来的。好,废话不多说,我们开始吧!一、springboot介绍 ...原创 2018-03-16 15:04:28 · 2761 阅读 · 0 评论