自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

define_us的专栏

JAVA深入,python浅出

  • 博客(24)
  • 收藏
  • 关注

原创 sofaboot的启动原理解析

SpringBoot的原理我们先找到这张springboot的原理图

2020-12-29 10:04:23 947 3

转载 JUC之AQS总结

转载https://www.cnblogs.com/liqiangchn/p/11960944.html简单而言AQS内部维护了这样一个CLH队列。这样,只要具体的锁的实现利用这个队列(调用acquire release)就可以了。acquire的第一步,尝试CAS直接修改状态。如果失败了,那就老老实实去排队吧获取失败的线程,加入到同步队列的队尾;加入到队列中后,如果当前节点的前驱节点为头节点再次尝试获取同步状态如果头节点的下一个节点尝试获取同步状态失败后,会进入等待状态如果抢占成功

2020-12-27 23:08:53 157

原创 ngnix

转载https://blog.csdn.net/weixin_47082274/article/details/107333450架构简介首先要明白,Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器。多进程的工作模式Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。master 接收来自外界的信号,向各 worker 进程发送信号,每个进程都有可能来处理这个连接。

2020-12-27 22:27:31 98

原创 分布式系统限流

hystrix可以参考下面的博文https://blog.csdn.net/loushuiyifan/article/details/82702522支付宝内部用的是guardianhttps://help.aliyun.com/document_detail/149848.html资源隔离的思想参考上述的舱壁隔离模式,在hystrix中提供了两种资源隔离策略:线程池隔离、信号量隔离。线程池隔离:线程池隔离会为每一个依赖创建一个线程池来处理来自该依赖的请求,不同的依赖线程池相互隔离,就算依赖

2020-12-27 19:48:26 307

原创 Tair

https://www.jianshu.com/p/ccb17daed766简单介绍简单而言,类似于redis的哨兵模式。统一的API。无论底层使用何种引擎,上层的API是一样的。Tair有四种引擎:mdb, rdb, kdb和ldb。分别基于四种开源的key/value数据库:memcached, Redis, Kyoto Cabinet和leveldb。Tair可以让你更方便地使用这些KV数据库。比如Redis没有提供sharding操作,如果有多个Redis Server,你需要自己写代码实现

2020-12-27 16:42:44 107

原创 分布式锁的一点看法

分布式锁的主流方案基于数据库基于redis基于zookeeper

2020-12-26 21:56:43 75

转载 Spring的循环依赖和三级缓存

转载https://blog.csdn.net/bntX2jSQfEHy7/article/details/111658814Spring有著名的三级缓存singletonObjects:【一级缓存】 存储的是所有创建好了的单例BeanearlySingletonObjects:【二级缓存】完成实例化,但是还未进行属性注入及初始化的对象singletonFactories:【三级缓存】提前暴露的一个单例工厂,二级缓存中存储的就是从这个工厂中获取到的对象一般而言,一个Spring对象创建分为三

2020-12-26 20:29:50 123

原创 Lindorm:一种Hbase的改进

9月18日云栖大会,阿里云推出业内首款云原生多模数据库Lindorm,同时提供宽表引擎、时序引擎、搜索引擎和文件引擎,重新定义万物互联时代多类型数据的存储方式。Lindorm可同时满足key-value数据、宽表数据、时序数据、文件、图片等多种类型数据的存储、实时查询和检索需求,解决分别部署不同类型数据库带来的架构复杂维护困难、数据存储成本高、难以应对业务规模灵活多变等问题,海量数据存储成本降低80%,是互联网、IoT、车联网、广告、社交、游戏等场景的首选。大家使用HBASE都会有如下痛点宕机恢复时间

2020-12-26 15:33:12 1584 1

原创 java中的optional

简介一个避免NPE的神器String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();这行代码一般而言,你只敢向下面这么写if (user != null) { Address address = user.getAddress(); if (address != null) { Country country = address.getCountry(); i

2020-12-26 14:34:48 86

原创 数据库中的MVCC机制

基础知识首先要了解数据库中的redo 和undo机制。https://blog.csdn.net/define_us/article/details/84139912简介是一种多版本控制的方式。可以用来代替行级锁。假设没有MVCC,为了实现读已提交的隔离级别,第二个事务在修改第一个事务的行时,就必须等待第一个事务完成。相当于一个行级别锁。原理trx_id这个id用来存储的每次对某条聚簇索引记录进行修改的时候的事务id。roll_pointer它指向这条聚簇索引记录的上一个版本的位

2020-12-26 00:24:59 184

原创 guava的LoadingCache原理

用法用户需要覆com.google.common.cache.CacheLoader#reload这个方法。这个方法返回一个 ListenableFuture。这个对象可以用 public static <V> ListenableFutureTask<V> create(Callable<V> callable) { return new ListenableFutureTask<V>(callable); }从一个Callable对象

2020-12-24 22:36:29 1051

转载 JUC中多线程的集合——ConcurrentLinkedQueue

转载https://blog.csdn.net/qq_38293564/article/details/80798310原理入队列操作代码如下 public boolean offer(E e) { checkNotNull(e); final Node<E> newNode = new Node<E>(e); for (Node<E> t = tail, p = t;;) { N

2020-12-24 19:43:59 81 1

原创 JAVA集合类之LinkedHashMap

代码原理在HashMap的基础上,在节点上增加了一个前向和后向的指针。使之可以保存插入顺序或者访问顺序(默认是保存插入顺序)

2020-12-24 19:23:33 74 1

原创 reactor模型和其在netty中的实现

启动一个典型的nettyserver拥有两个EventLoopGroup(parent负责连接,childGroup负责具体IO).前者也一般被称为bossGroup,后者则被称为workerGroup。EventLoopGroup 是一组 EventLoop 的抽象,一个 EventLoopGroup 当中会包含一个或多个 EventLoop,EventLoopGroup 提供 next 接口,可以从一组 EventLoop 里面按照一定规则获取其中一个 EventLoop 来处理任务。启动时,bo

2020-12-22 00:00:57 150

原创 MINA中的reactor

启动时SocketAcceptor代码服务启动时将ioHandler和acceptor绑定 IoHandler ioHandler = new DefaultIoHandler(this); try { if (null == bindIP) { acceptor.bind(new InetSocketAddress(port), ioHandler);bind的主要代码如下 synchroniz

2020-12-21 22:03:50 104

原创 Spring源代码阅读(3):AOP

创建时调用时利用反射算是一个略有变化的的责任链模式。利用CGLIBcglib会生成一个enhancedBySpringCGlib的类。其他和利用反射的时候是一致的。before:6, Asp1 (example)invoke0:-1, NativeMethodAccessorImpl (sun.reflect)invoke:62, NativeMethodAccessorImpl (sun.reflect)invoke:43, DelegatingMethodAccessorImpl (

2020-12-15 15:25:15 408

原创 fastThreadLocal

原理ThreadLocal是好的和烂代码的必备。

2020-12-14 22:04:13 77

原创 Spring源代码阅读(2):事务

转载https://blog.csdn.net/weixin_44366439/article/details/90381619原理编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。声明式事务是建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最

2020-12-11 23:40:51 90

原创 Spring代码阅读:(1)ClassPathXmlApplicationContext类说开去

类的设计继承和实现了一系列接口比如描述生命周期的public interface Lifecycle { void start(); void stop(); boolean isRunning();}在AbstractApplicationContext中,写了核心的refresh的设计如下 public void refresh() throws BeansException, IllegalStateException { synchronized (

2020-12-11 22:09:44 124

原创 Spring实战之Spring动态加载jar模块和卸载模块

Spring提供了下面这些类来加载外部jar。classPathResorce可以用来加载类路径上的jar。一般推荐使用 classLoader = new UrlClassLoader(new URL[] {resource.getURL()}, parentClassLoader);来创建一个classLoader。其中parentClassLoader可以通过BeanClassLoaderAware从当前Spring上下文中拿到。一般,我们会写一MyClassPa

2020-12-11 20:50:19 4714

原创 ReentrantReadWriteLock的详解

概述内部包含一个内部类Sync,FairSync和NonfairSync都是继承自Sync。ReentrantReadWriteLock根据构造函数的不同,有公平锁和非公平锁两种形式。提供下面两种方法分别返回一个写锁和一个读锁。 public ReentrantReadWriteLock.WriteLock writeLock() { return writerLock; } public ReentrantReadWriteLock.ReadLock readLock() { re

2020-12-07 17:07:51 139

原创 JAVA多线程之wait&notify&notifyAll

原理wait&notify&notifyAll都是java的native的方法。synchronized代码块通过javap生成的字节码中包含 ** monitorenter ** 和 ** monitorexit **指令。使用这三个API的时候,外面必须调用在synchronized中。表示线程执行lock.wait()方法时,必须持有该lock对象的monitor,如果wait方法在synchronized代码中执行,该线程很显然已经持有了该对象的monitor。wait方法会将

2020-12-07 10:25:47 79

原创 JUC实战之利用JUC解决问题

题目1 使用3个线程循环打印10遍ABC方案一 public static void main(String[] args) { Maj maj = new Maj(); Thread a = new Thread(new ThreadABC(maj,"A")); Thread b = new Thread(new ThreadABC(maj,"B")); Thread c = new Thread(new ThreadABC

2020-12-04 19:57:56 540

原创 SPI和类加载器

主要目的如果同时面临下面两个问题,就可以使用SPI1)A模块依赖B模块。2)A模块又要先于B模块被类加载。大部分场景其实根本不需要SPI。合理的类依赖可以避免这个问题。一个简单的demo具体的例子见https://blog.csdn.net/qq_27292113/article/details/100324127核心代码如下在外部jar中定义services使用是是会选择第一个实现类加载机制实际应用JDBCDriverManager类会在其static代码段执行

2020-12-02 15:36:43 881 1

空空如也

空空如也

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

TA关注的人

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