转身已离去
码龄11年
关注
提问 私信
  • 博客:16,724
    问答:259
    动态:11
    16,994
    总访问量
  • 16
    原创
  • 72,522
    排名
  • 12
    粉丝
  • 0
    铁粉

个人简介:毕业于江南大学,目前工作4年,主要从事于大数据开发和Java服务开发

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2014-07-22
博客简介:

qq_18221459的专栏

查看详细资料
  • 原力等级
    当前等级
    1
    当前总分
    28
    当月
    7
个人成就
  • 获得22次点赞
  • 内容获得1次评论
  • 获得68次收藏
创作历程
  • 1篇
    2025年
  • 1篇
    2022年
  • 21篇
    2020年
  • 1篇
    2017年
  • 12篇
    2016年
  • 2篇
    2015年
成就勋章
TA的专栏
  • Java面试和学习
    3篇
  • Spark
  • SpringBoot源码学习
    1篇
  • Spring源码学习
    7篇
  • JVM
    4篇
  • 数据库
    1篇
  • 数据结构与算法
    1篇
  • Java并发编程艺术
    2篇
  • kafka
  • Redis
    3篇
  • Netty
  • 心得
    8篇
  • hdfs
    1篇
  • spring
    2篇
  • Sping MVC
    3篇
兴趣领域 设置
  • Java
    spring
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Nacos服务注册源码解析

自己学习Nacos服务注册源码整理,主要是摘抄别人的,自己做一下记录防止以后找不到
原创
发布博客 2025.02.16 ·
661 阅读 ·
11 点赞 ·
0 评论 ·
26 收藏

定义Feign API以及使用

实际开发过程使用openFeign定义API的记录
转载
发布博客 2022.07.11 ·
646 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

SpringBoot源码解析(一)------启动@SpringBootApplication注解

主程序类(主入口类)@SpringBootApplicationpublic class HelloWorldMainApplication { public static void main(String[] args) { //Spring应用启动 SpringApplication.run(HelloWorldMainApplication.class, args); }}@SpringBootApplication注解定义如下:@
转载
发布博客 2020.07.24 ·
203 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring源码-Spring中循环依赖

Spring源码中的3个缓存map/** Cache of singleton objects: bean name to bean instance. *//** singletonObjects 一级缓存,可以理解为spring单利池 存放完整的bean*/private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);/** Cache of singleton f
转载
发布博客 2020.07.16 ·
333 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Class.forName和ClassLoader区别

解释 Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中。Class.forName()方法实际上也是调用的ClassLoader来实现的。Class.forName(String className)的源码是@CallerSensitivepublic static Class<?>..
转载
发布博客 2020.06.08 ·
259 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

B树和B+树

1.B树1.1 B树的定义每个节点最多有m-1个关键字(可以存有的键值对) 根节点最少可以只有1个关键字 非跟节点至少有m/2个关键字 每个节点的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它 所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同 每个节点都存有索引的数据,就是对应的key和value 所以,跟节点的关键字数量范围:1<= k <= m-1,非根节点的关键字数量范围:m/2 <...
转载
发布博客 2020.06.02 ·
765 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

深入理解AQS

1. AQS实现原理 AQS中维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里volatile能够保证多线程下的可见性,当state=1则代表当前对象锁已经被占有,其他线程来加锁时则会失败,加锁失败的线程会被放入一个FIFO的等待队列中,比列会被UNSAFE.park()操作挂起,等地其他获取锁的线程释放锁才能被唤醒。 另外state操作是通过CAS来保证并发修改的安全性。描述图 ...
转载
发布博客 2020.06.02 ·
297 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JVM垃圾回收

1 揭开 JVM 内存分配与回收的神秘面纱Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 **堆** 内存中对象的分配与回收。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap),从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代:再细致一点有:Eden 空间、From Survivor、To Survivor 空间等。进一步.
转载
发布博客 2020.05.24 ·
132 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM最完整最深入解析

Java运行时数据区程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 虚拟机站:虚拟机站是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压入栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。 (1) 栈帧:栈帧存储方法的相关信息,包含局部变量表、返回值、操作数栈、动态链接 a) 局部变量表:包含了方法执行过...
转载
发布博客 2020.05.24 ·
164 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java内存区域

一、运行时数据区域JDK1.8之前:JDK1.8:线程私有:程序计数器 虚拟机栈 本地方法栈线程共享:堆 方法区 直接内存(非运行时数据区的一部分)1.1 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。 另外,为了线程切换后能恢复到正确的执行位置,每条...
转载
发布博客 2020.05.24 ·
133 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap面试

1.HashMap的数据结构?数组+链表实现,当链表长度超过8时,链表转换为红黑树2.HashMap的工作原理?底层是hash数组和单向链表实现,数组中每个元素都是链表,K/V存储put的过程1)调用hash(k)方法计算K的hash值,然后结合数组长度,计算数组下标;2)调整数组大小(当容器的元素个数大于capacity * loadfactor时,容器会进行扩容resize为2n);3)a)如果K的hash值在HashMap中不存在,则执行插入,若存在,则发生碰撞; ..
转载
发布博客 2020.05.08 ·
358 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

Synchronized面试

1.Synchronized关键字最主要的三种使用方式总结a)修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁b)饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁...
转载
发布博客 2020.05.08 ·
371 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

分布式锁

1.为何需要分布式锁主要两个场景:1)避免不同节点重复相同的工作:比如用户执行了某个操作有可能不同节点会发送多封邮件2)避免披怀数据的正确性:如果两个节点在同一条数据上同时进行操作,可能会造成数据错误或不一致的情况出现2.Java中实现的常见方法1)基于Mysql中的锁:Mysql本身有自带的悲观锁for update关键字,也可以自己实现悲观/乐观锁来达到目的;2)基于Z...
转载
发布博客 2020.04.26 ·
103 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis-跳跃表

为什么选择跳表经常使用的平衡数据结构有:B树,红黑树,AV树,Splay Tree,Treep等有序表的搜索考虑一个有序表:从该有序表中搜索元素 < 23, 43, 59 > ,需要比较的次数分别为 < 2, 4, 6 >,总共比较的次数为 2 + 4 + 6 = 12 次。把一些节点提取出来,作为索引,得到如下结构:这里我们把 < 14,...
转载
发布博客 2020.04.26 ·
228 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis总结

1.为什么要用redis/为什么用缓存1)高性能 第一次访问数据库的数据,非常慢,因为从磁盘上读,将用户访问的数据存在缓存中,这样可以直接从缓存中获取了,操作缓存就是直接操作内存,所以速度相当快。2)高并发 直接操作缓存能够成熟的请求远远大于直接访问数据库,所以把数据库中部分数据转移到缓存中。2.为什么要用redis而不用map/guava做缓存? 缓存分...
原创
发布博客 2020.04.25 ·
169 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java中fail-fast和fail-safe

1.同步修改 当一个或多个线程正在遍历一个集合Collection,此时另一个线程修改了这个集合的内容,就是并发修改。2.什么是fail-fast机制? fail-fast机制在遍历一个集合时,当集合机构被修改,会抛出Concurrent Modification Exception fail-fast会在以下两种情况抛出ConcurrentModificatio...
转载
发布博客 2020.04.22 ·
189 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

1.1 Spring源码解析——核心类介绍

1.DefaultListableBeanFactoryXmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,而对于XmlBeanFactory与DefaultListableBeanFactory不同的地方就是XmlBeanFact...
转载
发布博客 2020.04.20 ·
136 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring源码解析——refresh方法

refresh方法在ConfigurableApplicationContext类中定义的具体实现是在AbstractApplicationContext中实现。这个方法的原文描述信息是:由于这是一个启动方法,如果它调用失败,它应该销毁已创建的单例,以避免悬空资源。换句话说,在调用该方法之后,应该实例化所有单例或者不是单例的对象。接下来分析refresh方法public void ref...
转载
发布博客 2020.04.10 ·
468 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring源码解析——ApplicationContext介绍

相比于BeanFactory接口,我们更多时候使用ApplicationContext接口来加载Bean,两个接口都是来加载Bean的,相比之下ApplicationContext提供了更多扩展功能。使用ApplicationContext方式加载XMLApplicationContext ctx = new ClassPathXmlApplicationContext("app.xml")...
转载
发布博客 2020.04.09 ·
163 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

第二章 Java并发机制的底层实现原理

1. volatile定义与实现原理1.1 定义 确保共享变量能够被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量,若一个字段被声明为volatile,Java线程内存模型确保所有线程看到这个变量的值时一致的。1.2 当volatile修饰变量,CPU会做什么事情?比如:volatile instance = new Singleton();转变成汇编代码如下:0...
原创
发布博客 2020.04.09 ·
206 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏
加载更多