自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 资源 (1)
  • 收藏
  • 关注

原创 由浅入深剖析高频面试题:Spring 如何解决循环依赖?

本篇博客主要讲一个经典面试题,Spring如何解决三级缓存问题。Spring在实例化bean时,会先创建当前bean对象,放入缓存中,然后以递归的方式获取所依赖的属性。当注入属性时,如果出现了循环依赖则会从缓存中获取依赖对象。另外从流程到源码做了分析,希望对大家有所帮助。

2023-03-26 23:22:28 741 4

原创 Spring BeanFactory源码中是如何创建对象

加载Bean的配置信息实例化Bean依赖注入初始化Bean返回Bean实例本文介绍了 Spring BeanFactory 源码中创建对象的过程,分为实例化、属性填充和初始化三个步骤。在此基础上,介绍了对象加工的 BeanPostProcessor 这一步骤,以解除加工代码的耦合性。最后,总结了 Spring 创建 Bean 的流程,包括加载 Bean 的配置信息、实例化 Bean、依赖注入、初始化 Bean 和返回 Bean 实例。【结尾 来自 notion AI】

2023-03-19 22:28:44 456 2

原创 Spring 大白话系列:事务

那我们基于Spring ,在业务里想加一个事务,结合上一篇我们说的AOP 的形式,就可以把上边这代码写在业务逻辑处理之后和处理异常的情况里。TransactionInterceptor 会对我们添加了 @Transactional 注解的方法或者类进行拦截,之后就会在执行业务逻辑之前先调用该类。既然所有的业务逻辑事务都是可以固定这样写,那是不是可以直接封装在框架里就行了。Spring 的确是这么做的。有就挂起外部的,创建新的,没有就直接创建新的。Spring 封装了对应的标签,是通过标签这样做的。

2023-02-27 19:06:52 424

原创 Spring 大白话系列:AOP 详解

今天我们就来讲讲,为什么需要代理,最基础的代理(静态代理)是什么样的,它的优缺点是什么,而为了解决对应的缺点,动态代理是怎么解决的。动态代理的原理又是什么?

2023-02-27 18:46:42 348

原创 Spring 大白话系列:工厂

控制反转,那控制的是啥:其实就是对于成员变量赋值的控制权。以前啊,你代码内部控制,现在不用代码控制了,从代码中反转(转移)到Spring⼯⼚和配置⽂件中完成。:A调用B,就是A依赖B,以前需要A 自己创建B的实例,而现在这种关系也是可以通过Spring 去设置上。小明更加不解了,老师傅故弄玄虚的:“你刚说的没错,Spring 的工厂也是为了解除创建对象和使用对象之间的耦合。可怎么有注入,依赖注入,Context,factory ,生命周期,单例啥的。有的人说了,这个对象我要只创建一个,不能多例。

2023-02-27 18:41:04 294

原创 我的算法笔记 | leetCode easy题感受

本周刷了30道题LeetCode题。 选题的标准就是从Top榜里选easy,高频。都是easy题,也有可能是之前的有些题自己在很早之前也见过,这次刷起来极为顺手。虽然都是easy题,但感觉还是挺欣慰的。觉得从4月底到现在死磕的算法看到了一些成效。毕竟再简单的题,之前也是要费尽心思的看半天,然后对对答案再调试半天才能做出来。现在对大部分常见的简单题也可以上手就做了。逐渐对easy题有了一些掌控感。还有4天就到我的目标了。还有20道题。按照这个进度问题不大。算法如果收尾,还挺遥远的。毕竟还有动态规划和贪心还没

2022-06-26 22:07:05 288 1

原创 我的算法笔记 | 我决定摆烂了

本文是记录系统学习算法的一个过程记录。也是围绕我的计划 “80天刷题100道” 的一个总结记录。为什么要立这个Flag 呢,说白了还是觉得计算机这个行业已经卷到了一定的程度,而且从各个方面看到的信息,现在面试问算法已经是一个门槛。不希望自己因为算法而受到特别大的限制。另一方面也觉得算法无非也就这些东西,虽然它需要一定的时间,但是掌握了内核,应该也是一件一劳永逸的事情(当然还是需要复习的)。至少可以应对80% 的常见题目。所以决定把功夫用在平时,全力准备一段时间。为了防止自己半途而废,给自己立了一个flag

2022-06-19 22:23:42 426 4

原创 我的算法笔记 | 贪心算法理论知识(上)

1)最自然的算法(在当前形势下取最优)2)用一种局部最功利的标准,总是做出在当前看来是最好的选择3)难点在于证明局部最功利的标准可以得到全局最优解贪心算法无法得到最优解的例子:1,分析业务2,根据业务逻辑找到不同的贪心策略3,对于能举出反例的策略直接跳过,不能举出反例的策略要证明有效性1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试2,脑补出贪心策略A、贪心策略B、贪心策略C…3,用解法X和对数器,用实验的方式得知哪个贪心策略正确4,不要去纠结贪心策略的证明会议室能容纳的最多宣讲场次:一些项目要占用

2022-06-05 21:54:47 157 1

原创 我的算法笔记六 | 二叉树

在进入今天的二叉树的笔记之前,先简单回顾一下最近算法的学习内容。用了7周的时间,将基本的数据结构都过了一遍,并针对每个数据结构进行了练习。整体来说,对自己的进度还是非常满意的。另外这一遍刷题也明显手感要好一些了。努力不会白费!距离当初设立的flag ,时间正好过半。刷题46道。整体进度还行。Flag:从4.11 --6.30 刷100题本文总结二叉树的几种常见题型二叉树结构描述:Class Node { V value; Node left; Node right;}二叉树的

2022-05-22 21:34:12 148 1

原创 我的算法笔记| 前缀树

前缀树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。前缀树1)单个字符串中,字符从前到后的加到一棵多叉树上2)字符放在路上,节点上有专属的数据项(常见的是pass和end值)3)所有样本都这样添加,如果没有路就新建,如有路就复用4)沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1可以完成前缀相关的查询前缀树一般有两种表现形式,一种是字母在节点上,一种是字母在路径上。区别也不大。如图:图来自@五分钟学算法之Trie树还有另外一种表示,表示在路径上,然后

2022-05-15 23:52:35 165

原创 算法-堆排序及时间复杂度分析

堆结构1)堆结构就是用数组实现的完全二叉树结构。(完全二叉树:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。)2)完全二叉树中如果每棵子树的最大值都在顶部就是大根堆3)完全二叉树中如果每棵子树的最小值都在顶部就是小根堆4)堆结构的heapInsert(插入)与heapify(调整)操作5)堆结构的增大和减少6)优先级队列结构,就是堆结构语言提供的堆结构 vs 手写的堆结构取决于我们有没有动态改信息的需求。语言提供的堆结构,如果你动态改数据,不保证依然有序[ 手写堆

2022-05-08 23:16:07 5278 9

原创 算法 -归并排序改写快速排序

快速排序Partition过程给定一个数组arr,和一个整数num。请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)[ 荷兰国旗问题 ]快速排序1.0在arr[L..R]范围上,进行快速排序的过程:1)用arr[R]对该范围做partition,<= arr[R]的数在左部分并且保证arr[R]最后来到左部分 的最后一个位置,记为M; <= arr[R]的数在右部分(arr[M+1..R])2)对ar

2022-05-01 21:13:17 143

原创 算法 -归并排序

归并排序 归并介绍归并排序复杂度直观的说 为什么归并排序要比冒泡等排序快?例题及变种:本周打卡记录归并介绍1)整体是递归,左边排好序+右边排好序+merge让整体有序2)让其整体有序的过程里用了排外序方法3)利用master公式来求解时间复杂度4)当然可以用非递归实现归并排序复杂度T(N) = 2* T(N/2) + O(N^1)根据master公式可知时间复杂度为O(N* logN)merge过程需要辅助数组,所以额外空间复杂度为O(N)归并排序的实质是把比较行为变成了有序信息并

2022-04-24 23:49:42 438

原创 算法 - 打卡记录 | 前言

最近时间将针对算法进行体系性学习,后续将针对不同类型进行案例和算法心得的分享。本文开篇,聊下算法的几个常用的:算法体系评估算法优劣的核心指标时间复杂度额外空间复杂度常数项时间什么是时间复杂度?时间复杂度怎么估算?只看表达式最高阶项的部分当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉。记为:O(忽略掉系数的高阶项)对数器1,想要测的方法a2,实现复杂度不好但是容易实现的方法b3,实现一个随机样本产生器4,把方法a和方法b跑相同的随机样本

2022-04-17 21:59:20 517 3

原创 总结篇 | 详聊事务

本文介绍事务相关的概念,在数据库、spring中的事务及管理,以及分布式事务的解决方案,还有部分内容需要细化。事务数据库事务事务定义并发事务会带来哪些问题事务隔离级别事务的实现原理MVCC 实现原理readView 读取Spring事务1、Spring编程式事务2、Spring声明式事务Spring事务失效问题事务传播行为Spring事务实现原理Spring事务常见失效问题1. 数据库存储引擎不支持。2. 没有被spring 管理3. 方法不是 public 的4. 自身调用问题5. 异常被吃了6.

2022-03-27 23:00:13 1657

原创 当谈起分库分表时我们该关注什么

一、为什么分库分表首先呢,能不分表分库就不要分表分库。为什么要分库分表,用大白话说 就是数据库快扛不住了1.1 为什么分库瓶颈来自数据库的压力:数据库出现性能瓶颈,对外表现有几个方面:(1)大量请求阻塞在高并发场景下,大量请求都需要操作数据库,导致连接数不够了,请求处于阻塞状态。(2)SQL 操作变慢如果数据库中存在一张几千万甚至上亿数据量的表,一条 SQL 没有命中索引会全表扫描,这个查询耗时会非常久。(3)存储出现问题业务量剧增,单库数据量越来越大,给存储造成巨大压力。(4)写并发能力也是有.

2022-03-13 15:26:53 1796

原创 Mysql分库分表方案-上

一、分库分表背景1. 为什么分库瓶颈来自数据库的压力:链接数,写压力且写查询高时主从同步延时。至于为什么会延时,可以参考下图:如图:其中从库是一个线程异步去拉取,且从relay Log 到slave Database 也是需要顺序读到语句之后 进行随机的磁盘读写,也会延时。2. 为什么分表有一组数据可以参考:基本指标:库物理文件大小<100G;表<100;字段<200 ;单表记录数<500W经测试在单表1000万条记录以下时,写入读取性能是比较好的. 这样在留点bu

2022-03-06 21:53:53 682 2

原创 Dubbo 框架设计概览

Dubbo 框架设计概览服务注册中心以下是官网以下是官网的内容,拿来学习一下图例说明:图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。图中蓝色虚线为初始化过程,即启动时

2022-02-27 21:40:35 130

原创 redis | 单线程模型

为什么 redis 单线程模型也能效率这么高?这个问题就要来看看redis 的线程模型到底是什么了?redis 进程模型首先,redis 服务端进程初始化的时候,会将 server socket 的 AE_READABLE 事件与连接应答处理器关联。客户端 socket01 向 redis 进程的 server socket 请求建立连接,此时 server socket 会产生一个 AE_READABLE 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该 socket

2022-02-20 19:49:09 138

原创 Spring 非正式总结

本篇文章对之前的Spring进行一次阶段性非正式的总结,做一个暂时的结尾。这一遍系统的学习,除了零碎的查些概念和问题,大部分时间是跟着 极客时间上 《小马哥讲Spring核心编程思想》来学习的。视频200多集,大部分是跟着视频看,也有部分直接看讲义就过,老师的内容比较成体系,我。整体觉得课程挺受用的,除了很多需要慢慢消化的,也还有很多需要逐步深入的。我在每个模块也会先参考讲义做个导图,然后再学内容的时候,心里更清晰一些。这一点挺受用的。在spring中,从整体内容上看,有将近20个模块左右的内容,构

2022-02-13 21:46:50 328

原创 Spring 系列 | Spring Bean 作用域

我相信80%的JAVA同学在面试或准备面试中都会看到一个这样的问题 就是 Spring Bean 默认是单例么? 这个问题其实跟我们今天聊的内容有关。都是 Spring Bean 的作用域 相关的内容。 Spring Bean 的作用域主要有两种,一种是单例 一种是原型模式,除此之外,还会根据不同场景 有其他几种 :request,session,application;分类singletonsingleton:一个BeanFactory 有且只有一个实例。会执行初始化和销毁方法回调protot

2022-02-06 18:52:41 332

原创 Spring 系列 | Spring IOC依赖的来源

前面两篇文章讲Spring IOC 依赖注入和依赖查找的一些细节内容,那么无论是依赖注入 还是依赖查找 都有一个共同要涉及的问题就是依赖的来源。本文我们来聊下两种方式依赖的来源以及有什么不同以下是本篇文章讨论的内容:== 此处CSDN 今天上传图有点问题,明天再上传==Spring IOC依赖的来源一 依赖查找的来源Spring BeanDefinition<bean id= “user” class=“org…User”@Bean public User user(){}

2022-02-03 22:13:01 333

原创 Spring 系列 | SpringIOC依赖注入

在Spring IOC 里,我们知道有主要的两种实现方式,分别是依赖查找和依赖注入。在上篇文章里,我们聊到了依赖查找相关的细节,今天来展开聊一下依赖注入相关的内容。我将从以下几个方面来展开。首先是依赖注入的模式;依赖注入具体的分类和这些分类如何进行选择;以及依赖注入的实现过程;依赖注入的模式不论依赖注入有哪些类型,最终无非还是通过这两种模式进行的依赖注入。自动模式简而言之 自动模式,无需我们进行过多的手动管理,只需要按照对应规则进行相应配置就可以了。例如 autowiring手动模式手动模式

2022-02-02 19:48:42 848 1

原创 Spring 系列 | SpringIOC依赖查找

前面几篇文章我们聊过IOC以及Spring IOC ,其中Spring IOC 的一个实现方式包含 依赖查找 和依赖注入。本文我们进一步详细聊一下 SpringIOC的依赖查找,及其对应的方式 以及安全性,内置依赖等。查找类型1单元类型2 集合类型依赖查找:如何查找已知类型多个Bean集合getObjectType 提前把一些类进行初始化 导致Bean 初始化不完全,位置错误。先根据名称查找更好。ListableBean Factory 是针对于某一个类型去查找一个集合列表。集合列表可能有两种

2022-02-01 23:56:15 694 2

原创 Spring 系列 | Spring Bean

Spring bean

2022-01-31 20:05:04 593

原创 Spring 系列 | IOC及 Spring IOC 的具体表现形式

Spring系列 | IOC 知多少今天的主要内容是IOC ,重点聚焦两个问题,一个是IOC 是什么,另一个是IOC在spring中是怎么体现和应用的。IOC是什么从定义和主要实现策略两个维度来展开定义IOC 在维基百科上的定义是这样写的In software engineering, inversion of control (IoC) is a programming principle.IOC 是 inversion of control 的缩写,即控制反转。它是一种编程的原则或风

2022-01-29 23:52:48 736

原创 Spring系列 | Spring Framework 总览

从今天开始,系统梳理spring 相关的内容,计划输出5-6篇博客,来阐述spring的核心功能及实现。 今天先全局的了解一下 Spring Framework 。每个人心中先有一个图,然后在一步步把它清晰化,一点点吃透。系列的目录:这里稍后更新前言Spring Framework 总览,我觉得是有一个由浅入深的环节的。就像我们去了解一个新的事物一样,我们会先去了解这个东西是什么,有什么,为什么是这样,设计的思想是什么。那么Spring Framework 是什么呢?引用 spring gi

2022-01-28 23:19:46 1034

原创 Spring-概览

2022-01-23 23:03:41 160

原创 源码解析-为什么引入了jackson-dataformat-xml 包我的接口全变成了xml格式?

新调用上游一个接口,增加了对方的一个api包,没修改任何逻辑,接口却从json返回全变成了xml格式?原接口:现在:排查之后定位到是因为对方的api包里增加了一个依赖包<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <ver

2022-01-16 22:39:45 4815 2

原创 zk的存储及选举机制

zk 集群0)基本概念 1 PERSISTENT(持久的) EPHEMERAL(临时) PERSISTENT_SEQUENTIAL(持久顺序节点) EPHEMERAL_SEQUENTIAL(临时顺序节点) 2 leader follower observer1)选举启动时期的Leader选举i: 每个service 会发出一个投票。由于是初始情况,因此对于service1 和service2来说,都会将自己作为leader服务器来进行投票,每次投票包含的最基本

2020-12-25 13:47:01 380

原创 一看就懂TCP-总结

对比UDP:TCP并不是对所有的应用都适合,一些新的带有一些内在的脆弱性的运输层协议也被设计出来。比如,实时应用并不需要甚至无法忍受TCP的可靠传输机制。在这种类型的应用中,通常允许一些丢包、出错或拥塞,而不是去校正它们。例如通常不使用TCP的应用有:流媒体、网络游戏、IP电话(VoIP)等等。任何不是很需要可靠性或者是想将功能减到最少的应用可以避免使用TCP。在很多情况下,当只需要多路复用应用服务时,用户数据报协议(UDP)可以代替TCP为应用提供服务.参考内容:...

2020-09-27 12:03:15 135

原创 一看就懂TCP-快速之拥塞控制

再来想想这个窗口的大小 还会和什么有关系?除了接收方的能力之外,还和网络 带宽有关 ,但这个TCP 怎么能动态的知道网络的情况呢?如果我们设置发送窗口,使得发送但未确认的包为为通道的容量,就能够撑满整个管道。如图所示,假设往返时间为 8s,去 4s,回 4s,每秒发送一个包,每个包 1024byte。已经过去了 8s,则 8 个包都发出去了,其中前 4 个包已经到达接收端,但是 ACK 还没有返回,不能算发送成功。5-8 后四个包还在路上,还没被接收。这个时候,整个管道正好撑满,在发送端,已发.

2020-09-27 12:01:35 225

原创 一看就懂TCP-快速之流量控制

如果接收方没有 及时回复,发送方就要干等着,接收方回复。这样报的往返时间越长。怎么改进呢?我们让他在一段范围内,无需等待确认应答,而可以继续发送数据。这还是用我们提到的缓存。发送方 在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。也就是可以并行发送。那么这个量是多少呢?也就是TCP里的窗口?窗口的大小取决于什么呢?首先想到的一点就是取决于接受方。接收端的数据先在缓冲区,缓存区的大小是一定的。缓存区里 存放这已经成功接收的数据 待还没被应用层..

2020-09-27 11:54:43 230

原创 一看就懂TCP-不丢

不丢数据丢失数据需要重传,那这个重传的时间应该是多少呢?我们来分析下这个情况:所以我们的结论应该是再仔细分析:这个公式可以忽略,但需要记住一点,如果超时重发的数据,再次超时的时候,又需要重传的时候,TCP 的策略是超时间隔加倍。但是这样超时周期可能相对较长。那是不是可以有更快的方式呢?在上图,发送方发出了 1,2,3,4,5 份数据:第一份 Seq1 先送到了,于是就 Ack 回 2;结果 Seq2 因为某些原因没收到,Seq3 到达了,于是还是 Ack 回 2;后面的 Se.

2020-09-27 11:34:47 152

原创 一看就懂TCP -有序

源端口号、目的端口号:数据从哪来发送给哪个应用序号:包编号能解决乱序问题,表明先后顺序。确认序号:发出去的包应该有确认,如果没有收到就应该重新发送,直到送达。每个 连接 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。缓存区里是有序排列的。...

2020-09-27 11:23:39 359

原创 一看就懂TCP-连接

我们先来看一个定义。这样理解比较抽象。我们换个角度。它的本质还是传输控制。如果让我们自己设计这个传输,我们会怎么想呢。TCP 协议它会先建立连接。三次握手目的是保证双方都有发送和接收的能力 首要原因是为了防止旧的重复连接初始化造成混乱。同步双方初始序列号客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。服务端收到发 起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于

2020-09-27 11:20:13 153

原创 一看就懂TCP-前言

前言:当我输入 www.jd.com 发生了什么?先在浏览器里面输入 https://www.jd.com ,这是一个URL。浏览器只知道名字 是“www.jd.com”,但是不知道具体的地点,所以不知道应该如何访问。于是它打开地址簿去查找,是互联网世界的“门牌号”。知道了目标地址,浏览器就开始打包它的请求。 DNS、HTTP、HTTPS 所在的层我们称为应用层 经过应用层封装后,浏览器会将应用层 的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层 TCP 协议里面会有两个

2020-09-25 19:11:14 162

原创 极简单系列-kafka-高吞吐与水平扩展

2020-07-29 23:12:10 674 1

原创 极简单系列-kafka-ZK的作用

2020-07-29 23:10:38 166

原创 极简单系列-kafka 选举

2020-07-29 23:09:34 74

ionic项目应用requireJs前端模块化 示例

ionic项目应用requireJs前端模块化 示例

2016-05-18

空空如也

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

TA关注的人

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