- 博客(103)
- 资源 (1)
- 收藏
- 关注

原创 spring源码解读系列(八):观察者模式--spring监听器详解
一、前言在前面的文章中spring源码解读系列(八)中,我们继续剖析了spring的核心refresh()方法中的registerBeanPostProcessors(beanFactory)(完成BeanPostProcessor的注册)和initMessageSource()(为上下文初始化message源,即不同语言的消息体,国际化处理),有心的朋友顺着我们的思路继续看,发现下面开始了initApplicationEventMulticaster()(初始化事件监听多路广播器),那么什么又是多路广播
2021-08-17 15:28:31
15000
3

原创 spring源码解读系列(七):注册BeanPostProcessor及初始化messageSource
一、前言在spring源码解读系列(五)中我们介绍了spring核心方法org.springframework.context.support.AbstractApplicationContext#refresh中的invokeBeanFactoryPostProcessors(beanFactory)方法,调用各种beanFactory处理器,并在spring源码解读系列(六)中详细介绍了最重要的beanFactory,即ConfigurationClassPostProcessor,今天我们接着介绍r
2021-08-16 17:32:24
17565
1

原创 spring源码解读系列(六):注解开发的核心实现ConfigurationClassPostProcessor
一、前言在前面的文章中spring源码解读系列(五),我们详解了spring工厂调用BeanFactoryPostProcessors的过程,今天我介绍一下spring工厂中最重要的一个BeanFactoryPostProcessor,即ConfigurationClassPostProcessor,该类是实现spring注解开发的基石,是零配置开发的基础。该类的主要作用是:完成我们常用注解的解析,例如@Configuration,@Bean,@Component,@ComponentScan,@Impo
2021-08-12 16:41:31
14371
3

原创 spring源码解读系列(五):BeanFactoryPostProcessors的调用
一、前言在前面的文章中spring源码解读系列(四),我们已经解析到spring的核心方法org.springframework.context.support.AbstractApplicationContext#refresh的prepareBeanFactory(beanFactory)方法,今天我们接着往下解析,下面postProcessBeanFactory(beanFactory)主要是个空实现,留给子类扩展使用,在spring-web中有详细的扩展,我们暂不做详解,重点看下面的invokeB
2021-08-09 16:29:59
12104
2

原创 spring源码解读系列(四):创建BeanFactory的准备工作
一、前言在前面的文章中(spring源码解读系列(二),spring源码解读系列(三)),我们已经详细介绍了spring的核心方法org.springframework.context.support.AbstractApplicationContext#refresh中的第一步prepareRefresh()和第二步ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(),今天我们接着介绍下面的方法。二、解析prepa
2021-08-06 14:49:01
11731
1

原创 spring源码解读系列(三):详解spring自定义标签
前言在spring源码解读系列(二)的最后我们发现了spring解析bean的方法分为两种,一种是解析spring工厂内部默认的标签,即import、alias、beans、bean;另一种是解析我们自定义的标签,本文详细分析spring解析自定义标签的过程,并带领大家自己实现一个自定义标签。一、解析自定义标签入口parseCustomElement方法作用:根据namespaceUri找到对应的NamespaceHandler实现类对象,然后调用parse方法对传入的标签元素进行解析 @Nulla
2021-08-03 14:04:01
14288
4

原创 spring源码解读系列(二):Spring的核心refresh
前言本篇文章我们进入Spring最核心的方法org.springframework.context.support.AbstractApplicationContext#refresh,先整体熟悉一下此方法的主要工作,然后我们再对其中调用到的核心方法以及扩展点注意解析一、核心方法AbstractApplicationContext.refresh直接进入源码,逐行理解@Override public void refresh() throws BeansException, IllegalStat
2021-08-02 15:56:20
13550
2

原创 spring源码解读系列(一):Bean生命周期图解
一、注意事项:本次源码解读基于Spring-Framework 5.2.9版本,可自行通过官网下载源码,本地安装好gradle后可自行编译和运行,跟随本教程走进Spring底层二、spring创建bean的整体流程三、查看入口代码通过main方法自定义测试类 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Person bean = ac.ge
2021-07-29 17:01:10
28792
5
原创 SpringBoot整合SSE,基于okhttp
/ 在EventSourceListener中添加更多事件处理@Overridebreak;break;
2025-04-23 17:44:51
393
原创 Spring-AI讲解
方法会正常请求chat completion 接口并且会带上funcation-call参数并携带tools属性 , 并且返回对话中的funcation-call所需参数(即WaitTimeService.Request的参数)阿里也率先为自己得通义大模型封装了基于SpringAI的spring-cloud-starter-alibaba-ai。设置代理, 如果你请求的大模型的api接口不是国内的。调用call方法, 执行openai的远程api请求。在后续的版本都会更新国内常用的大模型。
2024-12-30 10:29:52
1228
原创 分布式调度框架学习笔记
实现方式:PowerJob 的节点设计为无状态,任务的状态信息存储在外部持久化存储中(如数据库),节点通过查询持久化存储来获取任务状态。实现方式:PowerJob 通过将任务分片分配给不同的执行节点,避免了多个节点对同一资源的竞争,从而减少了锁的使用。实现方式:PowerJob 采用去中心化的调度策略,允许各个节点独立地进行任务调度和执行,减少了对中心节点的依赖。设计理念:无状态设计意味着每个节点不依赖于其他节点的状态信息,从而减少了锁的使用。cpu是分时复用的方法,线程是cpu调度的最小单元。
2024-12-25 17:45:06
583
原创 网络问题排查
当你在 Linux 系统中 ping 一个域名并发现响应时间很长时,可能存在于多个环节的问题。使用 iftop、nload 或 iptraf 等工具检查网络接口的负载,查看是否有不正常的流量导致网络拥堵。路由表:使用 netstat -rn 或 ip route 查看路由表,确保没有错误的路由配置。确保防火墙没有阻止或限制某些网络流量,这可能会导致网络延迟。网络接口:检查网络接口配置是否正确,确保没有错误的 IP 地址或子网掩码。查看输出中每一跳的响应时间,找出哪个节点导致延迟。
2024-10-30 19:29:13
623
原创 docker和Helm Chart的基本命令和操作
docker login登陆到指定的镜像仓库,docker pull 和 docker push 操作都需要预先执行 docker login 操作;登录 docker client,登录成功之后会显示 Login Succeeded。指令:(这里的用户名、密码和镜像仓库都换成自己的)dockerFile:一个用来构建镜像的文本文件。
2024-08-07 14:27:30
634
1
原创 mysql问题解决
在MySQL中禁用SSL连接涉及修改服务器的配置文件(通常是my.cnf或my.ini,取决于你的操作系统和MySQL版本)。重启MySQL服务后,你可以通过检查MySQL的状态来验证SSL是否已被禁用。查看have_ssl和have_openssl的值,如果它们都是DISABLED,则表示SSL已成功禁用。通过上述步骤,你可以在MySQL服务器上禁用SSL连接。
2024-07-31 23:06:27
494
原创 分布式系列课程--RPC编程
1. gRPC 是由google开源的一个高性能的RPC框架。Stubby Google内部的RPC,演化而来的,2015正式开源。云原生时代是一个RPC标准。2. gRPC 核心的设计思路1. 网络通信 ---> gRPC自己封装网络通信的部分 提供多种语言的 网络通信的封装 (C Java[Netty] GO)2. 协议 ---> HTTP2 传输数据的时候 二进制数据内容。支持双向流(双工)连接的多路复用。
2024-06-07 14:59:52
884
原创 内网环境使用python快速搭建文件服务器并映射到外网
3.这里的/表示根目录文件,你可以指定其它,例如/app,但是一定要保证该服务器上存在该路径,我刚开始不知道,随便设置了个/file,结果服务器/根目录下 ,根本没有这个文件夹,客户端访问就一直报错,404路径不存在;启动文件服务器,其中/path/to/your/directory 用来设置为文件服务器的根目录路径,可以不写。目前已经申请了外网域名,通过nginx可以访问到内网的服务器,因此思考,通过这个外网域名借道,在内网linux上搭建一个外网可以访问的文件服务器。
2023-12-11 20:37:56
800
原创 个人成长篇---生活需要治愈
被罗翔老师的这段话治愈了:“不要碰到一点压力,就把自己变成不堪重负的样子,不要碰到一点不确定性,就觉得自己前途黯淡无光,不要碰到一点挫折就搞得自己一蹶不振。人这一辈子啊,你该走的弯路,该吃的苦,该撞的南墙,该掉的陷阱,一样都少不了,坚强挺住,熬过去,跨过去,好运自然来。”不要对别人抱有太多期待,我们总是希望找到能与之共享痛苦和悲伤的人,然而在别人眼中,我们经历的伤痛只是微不足道的尘埃。重要的是,我们要相信自己的价值和能力,相信自己拥有足够的勇气去应对生活中的一切挑战!2.停止后悔,人生没有白走的路。
2023-11-15 09:56:56
212
原创 检查网络畅通命令
注意:telnet需要安装,默认的docker是不安装的。格式:telnet ip port。1.检查udp网络是否畅通。2.检查tcp网络是否畅通。
2023-11-15 06:50:38
988
原创 Nginx常见问题解决
在stream块中配置转发规则:在stream块中,使用server指令来配置转发规则。具有超级用户权限,在/app/lib-nginx/conf/nginx.conf中被忽略。配置后使用reload命令重启nginx,发现报错。最终选择了方法2,可以重启成功,问题得到解决;只有当主进程运行时,“user”指令才有意义。
2023-11-02 10:26:16
567
原创 springboot实现多参数的同时上传多个文件
1.注意MultipartFile[] files对象的接收,要使用注解@RequestPart(“files”) ,而不是 @RequestParam。
2023-05-04 16:18:42
1980
原创 运维工作常用命令篇之——k8s
根据ip和域名的管理, 在hosts中配置好后保存退出。3.然后执行 kubectl get node。如果返回的节点都是ready,说明已经恢复正常。2.登录异常的 122 用root账号 执行。发现有节点NotReady。1.检查node节点情况。
2023-03-20 10:41:49
1297
原创 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
一、现象二、原因分析三、解决方法vi ~/.mavenrc在文件中添加export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home然后重新加载source ~/.mavenrc验证,重新执行mvn -version:已经替换成自己指定版本的jdk四、问题解决此时重新编译,可以发现编译顺利通过...
2022-05-13 08:21:39
309
原创 算法进阶之路(七):二叉树面试真题解析及解题技巧总结
一、二叉树的打印解题思路:使用递归思路,从根节点依次打印左孩子和右孩子,直至最后一层即可,关键是设计出树的结构,我们先看打印效果:打印效果相当于一颗平躺的二叉树,顺时针旋转90度,即是一颗我们常见的二叉树,头节点用“H”包裹,左子树用“^”包裹,右子树用“v”包裹。我们固定每个节点的长度len,这里设置的17,然后不足的用空格分别在值的前后均匀补充。代码如下:二、打印二叉树的后继节点解题思路:1.后继节点指的是在二叉树中序遍历中,该节点后面的节点。中序遍历,当前节点是x的最右边节点,则x
2022-01-20 15:53:41
7908
原创 算法进阶之路(六):二叉树的结构分析及常见面试题
一、二叉树的遍历二、遍历代码—递归方式先序遍历:中序遍历:后序遍历:总结发现:先序、中序、后序只是递归序加工的结果要想遍历所有的节点,每个节点必须经过三次,每次第一次经过时就打印,便是先序遍历;第二次经过时才打印,便是中序遍历;第三次经过时才打印,便是后序遍历。三、遍历代码—非递归方式上面代码是通过递归的方式实现遍历,任何递归的方式都可以通过非递归的方式实现,通过栈这种数据结构同样可以实现遍历,本遍提供先序的非递归方式实现,感兴趣的小伙伴可以自己实现下中序和后序遍历,无非是压栈和出
2022-01-18 14:23:24
7998
原创 JVM垃圾回收器常见参数设置及优化
JVM垃圾回收器参数Serial/Serial Old开启参数-XX:+UseSerialGC 新生代和老年代都用串行收集器Parallel常用参数开启参数JDK1.8默认就是以下组合-XX:+UseParallelGC新生代使用Parallel Scavenge,老年代使用Parallel Old-XX:MaxGCPauseMillis不过大家不要异想天开地认为如果把这个参数的值设置得更小一点就能使得系统的垃圾收集速度变得更快,垃圾收集停顿时间缩短是以牺牲吞吐量和新生代空间为代价换取的
2022-01-14 10:02:58
6436
原创 Kafka系统介绍及高性能原理
一、Kafka介绍二、消息队列的分类至多一次,常见的rabbitmq,rocketmq都是这种方式,通过ACK机制确认消息已被消费者消费,此时会将消息删除;没有限制则主要是通过消费者上传的offset(偏移量)来确认消费消息的初始位置,同一消息可以被反复多次消费,一直到达到指定条件,比如kafka是默认保留7天,7天后则会被删除。三、kafka基础架构Kafka集群以Topic形式负责分类集群中的Record,每一个Record属于一个Topic,每个Topic底层都会对应一组分区的日志用于持
2021-11-16 13:47:35
11650
1
原创 无法启动此程序,因为计算机中丢失VCRUNTIME140.dll。尝试重新安装此程序以解决此问题
一、产生操作使用个人的windows系统在安装最新的mysql版本mysql-8.0.27-winx64时,在执行mysql安装初始化命令mysqld --initialize报错提示:二、原因分析MySQL 8.0 以上的版本需要Microsoft Visual C ++ 2015可再发行组件包才能在Windows平台上运行三、解决方案尝试解决:刚看到这个问题时,也是一脸迷茫,度娘各种解决方法,尤其是很多推荐去官网下载https://www.microsoft.com/zh-cn/do
2021-11-05 14:25:38
13448
原创 算法进阶之路(五):链表面试题常用数据结构和技巧
一、链表解析思路最常用的主要是两大解题思路:(1):双指针法(快慢指针)(2):使用容器(数组、哈希表等)二、小试牛刀1.面试题:2.**解题思路:**通过双指针法可以简单有效的解答此类问题,定义一个快指针,每次跳两个节点,定义一个慢指针,每次跳一个节点,当快指针调到末尾时,慢指针此时在中点附近。以上四个小题都可以通过这个思路解决,唯一不同的是,指针初始化位置的不同。3.解题代码:针对小题1的解题代码:public class LinkedListTest { public c
2021-11-03 13:43:46
11022
原创 算法进阶之路(四):桶排序之计数排序和基数排序以及排序的稳定性
一、桶排序简介 前面我们介绍的所有排序,选择排序、冒泡排序、插入排序、归并排序、快速排序、堆排序等,都是基于比较的排序,而桶排序是基于容器的排序,主要分为:计数排序和基数排序,时间复杂度都是O(N),额外空间复杂度O(M),但是应用范围有限,需要样本的数据状况满足桶的划分。二、计数排序计数排序,不是基于元素比较,而是利用数组下标确定元素的正确位置。1:找出原数组中元素值最大的,记为max。2:创建一个新数组count,其长度是m
2021-10-25 13:57:47
21336
原创 算法进阶之路(三):堆的数据结构、排序及应用
一、堆的数据结构 堆就是用数组实现的二叉树,主要分为两种:最大堆和最小堆。两者的差别在于节点的排序方式,在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。 需要注意的是,堆的根节点中存放的是最大或者最小元素,但是其他节点的排序顺序是未知的。例如,在一个最大堆中,最大的那一个元素总是位于 in
2021-10-21 15:25:19
14674
原创 算法进阶之路(二):递归、归并排序和快速排序
1.递归递归的本质是利用系统栈的数据结构,完成遍历,因此任何递归行为都可以改为非递归。递归的时间复杂度分析:任何递归的时间复杂度最终都可以使用上面的表达式来表示,其时间复杂度按照公式分析即可。真题分析使用递归的方式,判断数组任意范围内的最大值,代码实现如下:...
2021-10-15 16:31:06
15661
原创 算法进阶之路(一): 时间复杂度和空间复杂度
一、前言时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小,一般都用大O表示法来表示,记作:T(n)=O(f(n)),都是评估算法的核心指标,评估算法优劣的核心指标除了时间和空间复杂度,还包含常数项时间,其中时间和空间复杂度主要由执行流程决定,常数项时间主要有时间细节决定。下文中我们将一一介绍。二、评估算法优劣的核心指标1.常数时间的操作如果一个操作的执行时间不以具体样本量为转移,每次执行时间都是固定时间,称这样的操作常数时间的操作。2.时间复杂度时间复杂度,本质上是
2021-10-14 15:15:29
20756
原创 Spring自定义注解实现redis缓存
一、前言redis是分布式微服务中必用的基础组件之一,现在国内的大部分项目基本上用到,缓存是其主要作用之一,而在项目中频繁使用set()方法添加注解,会造成代码的重复和臃肿,对于开发经验不足的小白,甚至会因为缓存的添加不当直接影响到正常的业务流程,从而酿成事故,因此成熟的公司都会通过封装基础组件,实现通过注解自动添加redis缓存,本文会从原理出发,带领大家亲自实现自定义注解,完成redis缓存的开发,学会了,你可以在同事面前秀一把了。二、自定义注解的参数说明@Target:注解的作用目标,即注解可
2021-10-13 10:26:46
21828
软考高级-信息系统项目管理师全套备考资料及真题和论文.zip
2021-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人