![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码
文章平均质量分 94
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
天天用 Spring,bean 实例化原理你懂吗?
来源:小小木的博客www.cnblogs.com/wyc1994666/p/10650480.html本次主要想写spring bean的实例化相关的内容。创建spring bean 实例是spring bean 生命周期的第一阶段。bean 的生命周期主要有如下几个步骤: 创建bean的实例 给实例化出来的bean填充属性 初始化bean 通过IOC容器使用bean 容器关闭时销毁bean 在实例化bean之前在BeanDefinition.转载 2020-08-15 11:12:39 · 194 阅读 · 0 评论 -
面试官:你能告诉我一个请求过来,Spring MVC 是如何找到正确的 Controller 的?
前言SpringMVC是目前主流的Web MVC框架之一。我们使用浏览器通过地址 http://ip:port/contextPath/path进行访问,SpringMVC是如何得知用户到底是访问哪个Controller中的方法,这期间到底发生了什么。本文将分析SpringMVC是如何处理请求与Controller之间的映射关系的,让读者知道这个过程中到底发生了什么事情。源码分析在分析源码之前,我们先了解一下几个东西。1.这个过程中重要的接口和类。HandlerMethod类:转载 2020-08-06 10:17:50 · 335 阅读 · 0 评论 -
Spring中AOP相关的API及源码解析,原来AOP是这样子的
前言之所以写这么一篇文章主要是因为下篇文章将结束Spring启动整个流程的分析,从解析配置到创建对象再到属性注入最后再将创建好的对象初始化成为一个真正意义上的Bean。因为下篇文章会涉及到AOP,所以提前单独将AOP的相关API及源码做一次解读,这样可以降低阅读源码的障碍,话不多说,我们进入正文!一个使用API创建代理的例子在进入API分析前,我们先通过两个例子体会下如何使用API的方式来创建一个代理对象,对应示例如下: 定义通知 publicclassDmzAfterRetur..转载 2020-07-27 10:01:53 · 215 阅读 · 0 评论 -
真强啊!建议每一位Java程序员都读读Dubbo心跳设计的源码...
# 前言谈到RPC肯定绕不开TCP通信,而主流的RPC框架都依赖于Netty等通信框架,这时候我们还要考虑是使用长连接还是短连接:短连接:每次通信结束后关闭连接,下次通信需要重新创建连接;优点就是无需管理连接,无需保活连接; 长连接:每次通信结束不关闭连接,连接可以复用,保证了性能;缺点就是连接需要统一管理,并且需要保活;主流的RPC框架都会追求性能选择使用长连接,所以如何保活连接就是一个重要的话题,也是本文的主题,下面会重点介绍一些保活策略;# 为什么需要保活上面介绍的长连接、短连接并转载 2020-07-20 21:53:17 · 228 阅读 · 0 评论 -
深度 | 一条查询SQL的前世今生 —— ClickHouse 源码阅读
作者:逍凯,阿里云数据库实习开发工程师注:以下分析基于开源 v19.15.2.2-stable 版本进行,社区最新版本代码改动较大,但是总体思路是不变的。01用户提交一条查询SQL背后发生了什么在传统关系型数据库中,SQL处理器的组件主要包括以下几种:• Query Parsing负责进行词法和语法分析,把程序从人类高可读的格式(即SQL)转化成机器高可读的格式(AST,抽象语法树)。词法分析指的是把SQL中的字符序列分解成一个个独立的词法单元——Token(<类型,值&..转载 2020-07-11 21:35:01 · 650 阅读 · 0 评论 -
Spring 是解析配置类过程详解
Spring执行流程图如下:Spring执行流程图这个流程图会随着我们的学习不断的变得越来越详细,也会越来越复杂,希望在这个过程中我们都能朝着精通Spring的目标不断前进!在上篇文章我们学习了Spring中的第一行代码,我们已经知道了Spring中的第一行代码其实就是创建了一个AnnotatedBeanDefinitionReader对象,这个对象的主要作用就是注册bd(BeanDefinition)到容器中。并且在创建这个对象的过程中,Spring还为容器注册了开天辟地的几个bd,包括Con转载 2020-07-08 21:52:39 · 487 阅读 · 0 评论 -
听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译
之所以写这么一篇文章是因为群里的小伙伴在编译源码时碰到了问题,再加上笔者自身正准备做一个源码的注释版本,恰好也需要重新编译一份代码,至于为什么要将源码编译到本地就不用多说了吧?比如,你可以任意的添加注释,一边读源码一边记笔记,甚至你可以修改源码,更好的调试程序等等。但是如果你坚持通过导入依赖或者引入jar包的方式来学习源码,我觉得也可以,没有最好的,只有最适合自己的!本文的主要目的是帮助那些在源码学习之初就被源码编译劝退的同学重拾信心!”话不多说,我们开始正题参考官方文档:http转载 2020-07-06 10:29:44 · 214 阅读 · 0 评论 -
MyBatis版本升级引发的线上告警回顾及原理分析
本文从一次MyBatis版本升级引发的线上告警开始讲起,然后针对告警定位过程、源码原理进行了深入的分析,并加入了不同版本的类比分析,最后结合实际工作做了一些经验总结,希望能对大家的工程实践有一定的帮助。背景某天晚上,美团到店事业群某项系统服务正在进行常规需求的上线。因为在发布时,提示inf-bom版本需要升级,于是我们就将inf-bom版本从1.3.9.6升级至1.4.2.1,如下图1所示:图1 版本升级不过,当服务上线后,开始陆续出现了一些更新系统交互日志方面的报警,这属于系统的辅助流程,.转载 2020-06-19 10:51:15 · 303 阅读 · 0 评论 -
再深一点:面试工作两不误,源码级理解Spring事务
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。Spring有5种隔离级别,7种传播行为。这是面试常问的内容,也是代码中经常碰到的知识点。这些知识枯燥而且乏味,其中有些非常的绕。如果栽在这上面,就实在是太可惜了。xjjdog在一些事务的基础上,再探讨几个容易淡忘的概念,从源码层面找原因,加深我们的理解,问题大概包括:Spring的事务和数据库的...转载 2020-04-30 13:52:19 · 791 阅读 · 0 评论 -
最近看Kafka源码,着实被它的客户端缓冲池技术优雅到了
最近看kafka源码,着实被它的客户端缓冲池技术优雅到了。忍不住要写篇文章赞美一下(哈哈)。注:本文用到的源码来自kafka2.2.2版本。背景当我们应用程序调用kafka客户端 producer发送消息的时候,在kafka客户端内部,会把属于同一个topic分区的消息先汇总起来,形成一个batch。真正发往kafka服务器的消息都是以batch为单位的。如下图所示:...转载 2020-03-21 16:44:53 · 319 阅读 · 0 评论 -
源码读不会,小白两行泪!
作者:青石路来源:https://www.cnblogs.com/youzhibing/p/9553752.html读源码的经历刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该不需要改;另外即使我改了源码,怎么样让我的改动生效了?项目中引用的不还是没改的jar包吗。回想起来觉得那时候的想法确实挺……工作了一年多之后准备跳槽了,开...转载 2020-03-04 22:01:47 · 260 阅读 · 0 评论 -
HashSet 和 LinkedHashSet 源码分析,竟如此简单!
HashSet是一个可存储不重复元素的容器,底层实现依赖HashMap,所以在添加,删除,查找元素时的时间复杂度均为 O(1).构造方法,初始化内部的HashMap:publicHashSet(){map=newHashMap<>();}publicHashSet(Collection<? extends E> c){map=...转载 2020-03-02 14:08:44 · 246 阅读 · 0 评论 -
为什么要看源码、如何看源码,高手进阶必看
由于项目的需求,最近花了较多的时间来看开源项目的代码,在本文中,简单总结一下对为什么要看源码、如何看源码这两个问题的思考。看源码的意义看源码只是一种方法、手段,而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标,现在看起来真的很蠢,一点不smart(specific、measurable、attainable、relevant、time-bound)。只有搞清楚了阅读代码的目标,...转载 2020-01-09 21:39:11 · 313 阅读 · 0 评论 -
厉害了!SpringBoot是如何动起来的!
作者:襄垣juejin.im/post/5c6f730ce51d457f14363a53程序入口SpringApplication.run(BeautyApplication.class,args);执行此方法来加载整个SpringBoot的环境。1. 从哪儿开始?SpringApplication.java/***RuntheSp...转载 2019-12-19 09:06:58 · 149 阅读 · 0 评论 -
分布式锁选型背后的架构设计思维【附源码】
1. 分布式锁本质提到分布式锁,有很多实现,比如Redis分布式锁、ZooKeeper分布式锁、etcd分布式锁等。但是选择哪个更适合你的项目?在《基于CAP模型设计企业级真正高可用的分布式锁》一文深入分析过分布式锁的哲学本质,以及如何结合场景来选择合适的分布式锁。分析业务场景,得到业务本质,就是架构思维。思维最终是需要落地的,接下去分享一下对分布式锁的思考和实践。锁的本质是对共享资源的处...转载 2019-12-18 11:20:51 · 282 阅读 · 0 评论 -
RocketMQ Consumer 负载均衡算法源码学习 -- AllocateMessageQueueConsistentHash
RocketMQ 提供了一致性hash 算法来做Consumer 和 MessageQueue的负载均衡。 源码中一致性hash 环的实现是很优秀的,我们一步一步分析。一个Hash环包含多个节点, 我们用 MyNode 去封装节点, 方法 getKey() 封装获取节点的key。我们可以实现MyNode 去描述一个物理节点或虚拟节点。MyVirtualNode 实现 MyNode, 表示一个虚...转载 2019-12-17 16:39:49 · 286 阅读 · 0 评论 -
深入理解Feign之源码解析
什么是FeignFeign是受到Retrofit,JAXRS-2.0和WebSocket的影响,它是一个java的到http客户端绑定的开源项目。 Feign的主要目标是将Java Http 客户端变得简单。Feign的源码地址:https://github.com/OpenFeign/feign写一个Feign在我之前的博文有写到如何用Feign去消费服务,文章地址:http:...转载 2017-10-09 16:13:52 · 330 阅读 · 0 评论 -
【手写系列】理解数据库连接池底层原理之手写实现
前言数据库连接池的基本思想是:为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,再将管道放入池子中,从而避免了频繁的向数据库申请资源,释放资源带来的性能损耗。在如今的分布式系统当中,系统的QPS瓶颈往往就在数据库,所以理解数据库连接池底层构造原理与设计思想是很有益处的。我们常用的数据库连接池有C3P0,DBCP,Druid等,...转载 2018-11-21 08:48:20 · 627 阅读 · 0 评论 -
【手写系列】透彻理解MyBatis设计思想之手写实现
前言MyBatis,曾经给我的感觉是一个很神奇的东西,我们只需要按照规范写好XXXMapper.xml以及XXXMapper.java接口。要知道我们并没有提供XXXMapper.java的实现类,MyBatis到底是怎么做到这一点的呢?有人会说是动态代理,现在我就来通过手写一个迷你版的MyBatis来彻底理解它的设计思想!如果你不了解JDK动态代理,请参考:《纯手写实现JDK动态代理》...转载 2018-11-21 08:46:14 · 703 阅读 · 0 评论 -
【手写系列】纯手写实现JDK动态代理
前言在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架。JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充。本篇博客将涉及2个话题:第一,JDK动态代理的实现原理,带你探索动态代理的实质面目;第二,自己动手写代码去实现JDK动态代理,去创造世界! JDK动态代理先写一个例子,感性认识下动态代理...转载 2018-11-20 08:36:56 · 788 阅读 · 0 评论 -
【手写系列】写出我的第一个框架:迷你版Spring MVC
你没有看错标题,今天,我将实现我人生中第一个框架,^_^前期准备我这里要写的是一个迷你版的Spring MVC,我将在一个干净的web工程开始开发,不引入Spring,完全通过JDK来实现。我们先来看一眼工程:工程代码结构 第一,在annotation包下,我将提供自定义的注解,为了方便理解,就和Spring MVC保持一致。第二,为了模拟Spring MV...转载 2018-11-20 08:36:36 · 700 阅读 · 0 评论 -
面试问烂的 Spring MVC 过程
SpringMVC ,这个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。Spring MVC 过程先来张图:代码位置:com.interface21.web.servlet.DispatcherServlet#doService(没错,就是 Spring 1.0 的代码,大道至简...转载 2018-11-26 10:00:40 · 197 阅读 · 0 评论 -
买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)
上篇的动图数据结构反响不错,这次来个动图排序算法大全。数据结构与算法,齐了。几张动态图捋清Java常用数据结构及其设计原理本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法:冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 0、排序算法说明0.1 排序的定义对一序列对象根据某个关...转载 2018-11-25 10:51:07 · 479 阅读 · 0 评论 -
【手写系列】写一个迷你版的Tomcat
前言Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!Tomcat Write MyTomcatTomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系?从感性上来说,我们一般需要把Web应用打成WAR包部署到Tom...转载 2018-11-24 11:12:13 · 1187 阅读 · 0 评论 -
Java8 HashMap源码分析
前言 今天,我们主要来研究一下在Java8中HashMap的数据结构及一些重要方法的具体实现。研究HashMap的源代码之前,我们首先来研究一下常用的三种数据结构:数组、链表和红黑树。数组作为一种基本的数据结构,以线性的方式组织数据,按数据的插入顺序来排列数据。在内存中,数组的物理组织形式是一段连续的内存空间。在数据操作上,由于数组的物理特点,可以在O(1...转载 2019-03-11 15:36:22 · 172 阅读 · 0 评论 -
足够应付面试的Spring事务源码阅读梳理
来源:编程新说Starting from a joke问:把大象放冰箱里,分几步?答:三步啊,第一、把冰箱门打开,第二、把大象放进去,第三、把冰箱门带上。问:实现Spring事务,分几步?答:三步啊,第一、找出需要事务的方法,第二、把事务加进去,第三、执行事务。You may find it's not a joke, it's serious。Try to find ...转载 2019-04-06 18:42:39 · 1206 阅读 · 0 评论 -
源码实战 | 本地可跑,上线就崩?慌了!
前言上周一好友向我反馈一个问题,他们项目在本地是可以跑的,但是在线上环境,就报错.报错日志如下:Couldnotfindresultmapcn.mycs.server.persistence.dao.UserMapper.BaseResultMap说实话,我每天这么忙,看到这种直接丢个异常出来的根本不想理.但是他一句话彻底改变了我的想法.首先出现了这几个关键词....转载 2019-04-29 14:08:36 · 389 阅读 · 1 评论 -
Spring Boot Redis 入门
本文,我们基于 Spring Boot 2.X 版本。1. 概述在快速入门 Spring Boot 整合 Redis 之前,我们先来做个简单的了解。在 Spring 的生态中,我们使用Spring Data Redis来实现对 Redis 的数据访问。可能这个时候,会有胖友会有疑惑,市面上已经有 Jedis、Redisson、Lettuce 等优秀的 Java Redis 工具...转载 2019-10-01 15:36:29 · 374 阅读 · 0 评论 -
【手写系列】对HashMap的思考及手写实现
前言HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想,并手写一个迷你版的HashMap! 对HashMap的思考HashMap底层数据结构 第一,如图所示,HashMap有3个要素:hash函数+数组+单链表第二,对于hash函数而言,需要考虑些什么...转载 2018-11-21 08:47:54 · 307 阅读 · 0 评论 -
干货:阅读跟踪 Java 源码的几个小技巧!
今天跟大家分享一下我平时阅读源码的几个小技巧,对于阅读Java中间件如Spring、Dubbo等框架源码的同学有一定帮助。本文基于Eclipse IDE,我们每天都使用的IDE其实提供了很多强大的功能,掌握它们,往往能够事半功倍。 1、Quick Type Hierarchy 快速查看类继承体系。快捷键:Ctrl + T查看类很多人可能都知道,可源码阅读的时候更多用来查...转载 2018-11-09 08:46:17 · 349 阅读 · 0 评论 -
【手写系列】透彻理解Spring事务设计思想之手写实现
事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)。在实际开发中,我们对事务应用最多就是在数据库操作这一环,特别是Spring对数据库事务进行了封装管理。Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决...转载 2018-11-16 08:51:10 · 375 阅读 · 0 评论 -
Spring Boot 2.x 启动全过程源码分析(全)
上篇《Spring Boot 2.x 启动全过程源码分析(一)入口类剖析》我们分析了 Spring Boot 入口类 SpringApplication 的源码,并知道了其构造原理,这篇我们继续往下面分析其核心 run 方法。SpringApplication 实例 run 方法运行过程 上面分析了 SpringApplication 实例对象构造方法初始化过程,下面继续来看...转载 2018-08-14 11:18:00 · 796 阅读 · 1 评论 -
Thread类源码剖析
目录1.引子2.JVM线程状态3.Thread常用方法4.拓展点 一、引子说来也有些汗颜,搞了几年java,忽然发现竟然没拜读过java.lang.Thread类源码,这次特地拿出来晒一晒。本文将剖析Thread类源码(本文后面源码全部默认JDK8),并讲解一些重要的拓展点。希望对大家能有一些帮助。本文讲解主干全部出自源码和注释,保证了权威性。(注意:网上,某...转载 2018-02-02 15:33:24 · 984 阅读 · 0 评论 -
看透 Spring MVC 源代码分析与实践 —— 俯视 Spring MVC
Spring MVCSpring MVC 之初体验环境搭建在 IDEA 中新建一个 web 项目,用 Maven 管理项目的话,在 pom.xml 中加入 Spring MVC 和 Servlet 依赖即可。 1 2 3 4 5 6 7 8 9 10 11 12 ...转载 2017-12-19 21:01:23 · 941 阅读 · 0 评论 -
如何看懂源代码--(分析源代码方法)
我们在写程式时,有不少时间都是在看别人的代码。 例如看小组的代码,看小组整合的守则,若一开始没规划怎么看, 就会“噜看噜苦(台语) ” 不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限的时间下,不免会对庞大的源代码解读感到压力。 网路上有一篇关于分析看代码的方法,做为程式设计师的您,不妨参考看看, 换个角度来分析。 也能更有效率的解读你想要的程式码片段。 六个章节: ( 1...转载 2018-01-12 16:40:26 · 18476 阅读 · 2 评论 -
Java 线程池艺术探索
线程池Wiki 上是这样解释的:Thread Pool作用:利用线程池可以大大减少在创建和销毁线程上所花的时间以及系统资源的开销!下面主要讲下线程池中最重要的一个类 ThreadPoolExecutor 。ThreadPoolExecutorThreadPoolExecutor 构造器:有四个构造器的,挑了参数最长的一个进行讲解。七个参数:corePoo...转载 2017-12-19 15:25:22 · 259 阅读 · 0 评论 -
springboot源码分析之环境属性构造过程1
使用springboot的目的就是在项目开发中,快速出东西,因此springboot对于配置文件的格式支持是非常丰富的,最常见的配置文件后缀有如下四种:properties、xml、yml、yaml,比如我们在springboot项目根目录中配置了一个application.properties文件,则springboot项目启动的时候就会自动将该文件的内容解析并设置到环境中,这样后续需要使用该文...转载 2017-10-26 10:12:17 · 380 阅读 · 0 评论 -
spring boot应用启动原理分析
spring boot quick start在spring boot 里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。如果之前没有使用过spring boot可以通过下面的demo来感受下。 下面以这个工程为例,演示如何启动Spring boot项目:git clone git@gi...转载 2017-03-09 20:30:21 · 607 阅读 · 0 评论 -
NanoHttpd源码分析
最近在GitHub上发现一个有趣的项目——NanoHttpd。说它有趣,是因为他是一个只有一个Java文件构建而成,实现了部分http协议的http server。GitHub地址:https://github.com/NanoHttpd/nanohttpd 作者最近还有提交,看了下最新的代码,写篇源码分析贴上来,欢迎大家多给些建议。------------------------...转载 2017-02-20 14:37:23 · 1983 阅读 · 0 评论 -
spring boot实战(第十篇)Spring boot Bean加载源码分析
前言前面的文章描述了Application对应Bean的创建,本篇将阐述spring boot中bean的创建过程 refresh 首先来看SpringApplication#run方法中refresh()方法[html] view plain copy// Refresh the context refresh(context); ...转载 2018-01-27 15:25:20 · 542 阅读 · 0 评论