自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FeiChangWuRao的博客

记录自己成长

  • 博客(345)
  • 资源 (4)
  • 收藏
  • 关注

原创 Spring学习笔记:Spring JDBC(jdbc Template)的深入学习和使用

JdbcTemplate是Spring JDBC的核心类,jdbcTemplate主要功能:(1)数据库CRUD操作以及存储过程/函数执行(2)对结果集ResultSet执行迭代并提取,封装为指定类型的结果(3)捕获JDBC异常并将其转换为org.springframe.dao 包中定义的通用、信息更丰富的异常层次结构。(4)JdbcTemplate的参数化sql方法使用PreparedStatement,可以防止sql注入。jdbcTemplate的方法按照名字和作用可以分为几类。

2025-08-28 14:19:12 858

原创 Spring学习笔记:@EventListener Spring事件的发布深入学习与使用

本文介绍了Spring框架中的事件发布机制,这是一种基于观察者模式的代码解耦方案。关键组件包括ApplicationEvent(事件类)、ApplicationListener(监听器)、ApplicationEventPublisher(发布者)和ApplicationEventMulticaster(广播器)。从Spring4.2开始,事件发布机制得到增强,支持不继承ApplicationEvent的自定义事件,并可通过@EventListener注解简化监听器实现。文章还详细说明了同步和异步事件处理方

2025-08-20 16:27:07 870

原创 Spring学习笔记:@Async Spring异步任务的深入学习与使用

对应Spring Boot应用,容器不存在任何定义Executor执行器,那么将在TaskExecutionAutoConfiguration这个自动配置类中默认创建一个ThreadPoolTaskExecutor类型的执行器,名为applicationTaskExecutor ,别名为taskExecutor,线程名为“task-xx”,它将作为默认的执行器,如果有至少一个执行器,那么将不会创建。(这个在项目中可以看到日志)

2025-08-18 18:30:38 827 1

原创 Spring学习笔记:基于注解的Sprig AOP配置的深入学习

本文主要介绍了Spring AOP的注解配置方式,对比了XML与注解两种配置方案的优缺点。通过示例代码展示了如何通过@Aspect注解定义切面类,使用@Pointcut声明切入点,以及利用@Before等注解配置通知。文章还详细说明了如何通过XML或Java配置开启AOP注解支持,并分析了Spring AOP与AspectJ框架的区别。注解方式具有代码直观、模块化等优势,Spring团队也推荐使用基于注解的配置方案。

2025-08-13 19:54:34 769

原创 Spring学习笔记:Spring AOP入门以及基于Spring AOP配置的深入学习与使用

AOP面向切面编程,通过提供一种程序结构的思考方式来补充面向对象的编程。(面向对象编程 OOP)首先代码是面向业务的,业务也有轻重缓急,也就是有的业务是核心业务,有的业务是非核心业务。比如说消息系统,接受和发送消息是核心业务,对于日志,异常报错处理,以及具体的校验就是非核心业务。这些业务是在一起的,这样让系统运作起来,只有核心业务可能系统最起码的安全性和稳定性都提供不了。但是没有核心业务,这些非核心业务也没有什么必要。

2025-08-09 19:50:58 1085

原创 Spring学习笔记:Spring SPEL表达式语言深入的学习和使用

SPEL(Spring Expression Language)是Spring框架提供的功能强大的表达式语言,支持运行时查询和操作数据。它可以单独使用或与Spring集成,通过XML配置、注解或代码方式调用。SPEL支持字面量表达式、对象属性导航、集合操作(数组、List、Map),并提供了内联List和Map的语法。使用ExpressionParser解析表达式,通过EvaluationContext(如Simple/StandardEvaluationContext)执行计算。SPEL还支持类型转换、方

2025-07-18 15:47:10 849

原创 Spring学习笔记:Spring IoC基于注解的DI详细配置全解

Spring注解配置通过元数据替代XML,将配置信息整合到源码中,但存在分散性问题。注解与XML可共存,但后者会覆盖前者配置。开启注解需在XML中添加context Schema,并激活特定注解处理器(如@Autowired、@Inject等)。核心注解包括: 依赖注入(@Autowired、@Resource、@Inject) 生命周期(@PostConstruct) 作用域管理(@Lookup解决单例依赖原型问题) 注解配置更符合现代开发习惯,但XML在集中管理配置方面仍有优势。Spring 2.5+/

2025-07-01 01:00:18 883

原创 关于异步任务的使用

Java多线程异步任务提交的两种主要方式:execute()和submit()。execute()无返回值,submit()可获取Future结果。此外,还可以通过实现Runnable接口自定义任务类,重写run方法执行异步逻辑。示例展示了使用线程池的execute()提交Lambda表达式任务,以及自定义SimpleTask类实现Runnable接口的典型用法。这些方法都可用于异步任务处理,选择取决于是否需要返回值和对任务的控制需求。

2025-06-18 00:16:47 202

原创 Spring学习笔记:Spring IoC基于XML的DI详细配置全解

本文是Spring学习笔记的第三部分,主要介绍了Spring框架中依赖注入的相关配置方法。内容涵盖: 字面量注入 - 使用value标签为基本类型、String和包装类属性赋值 属性文件转换 - 通过propertyEditor将XML配置转换为Properties集合 Bean引用 - 使用ref属性或标签引用其他Bean Parent继承 - 通过parent属性复用父Bean的配置 内部Bean - 在属性配置中定义匿名Bean对象 文章通过具体代码示例展示了XML配置方式,包括构造器注入和sette

2025-06-11 00:29:08 1209

原创 Spring学习笔记:Spring的基于注解的XML的详细配置

本文主要介绍了Spring框架基于XML的IoC容器配置方法。首先介绍了如何搭建Maven工程并添加Spring核心依赖,然后详细讲解了IoC容器的概念及其两种主要实现方式:DefaultListableBeanFactory(懒加载)和ApplicationContext(饿加载)。文章重点说明了Bean的定义过程,从配置元数据到BeanDefinition再到Bean实例的转换机制,并对比了XML、注解和Java三种配置方式。最后通过示例演示了XML配置的具体用法,包括多配置文件加载、Bean命名以及通

2025-06-03 01:16:56 731

原创 Spring学习笔记 IoC容器和XML的IoC装配

Spring框架的核心依赖是spring-context,它包含了Spring的核心组件,其他核心组件也依赖于此。Spring的核心概念是控制反转(IoC),即将对象的创建和属性赋值交给Spring管理。Spring通过IoC容器来管理对象的生命周期、属性及对象间的关系。IoC容器的实现主要依赖于BeanFactory接口及其子类,如ApplicationContext和DefaultListableBeanFactory。 DefaultListableBeanFactory是IoC容器的具体实现,采用懒

2025-05-19 02:06:41 894

原创 Java注解

Java注解的本质是一个接口,其具体实现依赖于框架或自定义逻辑。常见的注解类型包括Java EE(现Jakarta EE)规范中的注解(如@PostConstruct、@Resource),框架定义的注解(如Spring的@Component、@Autowired),以及自定义注解。自定义注解通过反射或动态代理(如JDK动态代理、CGLIB)实现功能,通常结合Spring框架的AOP机制进行自动化处理。例如,通过@Aspect和@Around注解,可以在方法执行前后添加逻辑,实现注解的运行时行为。

2025-05-15 02:26:34 358

原创 Spring注解@Configuration和@AutoConfiguration

但是@AutoConfiguration是自动配置的设计,针对的场景就是starter,这个starter就是一个模块,封装了实现特定功能所需的所有依赖项(如库、框架)及其兼容版本。@Configuration和@AutoConfiguration就差几个字母,看字面的意思AutoConfiguration貌似是自动注入的,但是这个@Configuration也是自动注入的,这个“Auto”是什么意思。@Configuration:是 Spring 的基础配置工具,适用于需要精细控制的场景。

2025-04-28 01:35:03 1363

原创 Spring的Bean实例化涉及到依赖注入,生命周期和常见的使用

举个例子A依赖B,有了Spring的话,,容器会负责创建对象并将它们之间的依赖关系注入,这就是所谓的依赖注入。Spring 的 IoC 生命周期管理通过对 Bean 的实例化、属性赋值、初始化、使用和销毁等阶段的管控,确保 Bean 能够按照预期的方式创建、使用和清理,提高了应用程序的可维护性和可扩展性。在 Spring 框架里,控制反转(IoC)的生命周期管理指的是 Spring 容器对其所管理的 Bean 从创建、初始化、使用到销毁整个过程的全面管控。经过前面的步骤,Bean 就可以被应用程序使用了。

2025-04-25 02:14:49 643

原创 线程安全与Java内存模型

回归需求本身,我有一个表要筛选出符合状态的数据,然后匹配关联的数据,校验状态更新,根据状态以及规则设置判断其中的数据,是否要更新另一张表的状态,要求这是一个不断循环的程序,要求高效处理,多线程处理。就是我接受一个外来参数,这个参数是可变的,它可能是一个对象,我们对他深拷贝(记住是深拷贝)或者直接new一个新的对象,将外来的对象属性赋给新的对象。如果涉及到没办法,必须要用成员变量,举个最新的例子就是Map的实现,一个是HashMap,一个是ConcurrentHashMap,将需要同步机制。

2025-04-24 01:45:37 575

原创 maven的项目管理和构建生命周期

maven现在已经是工程项目中最常用到的项目管理和构建工具之一。

2025-04-09 03:20:34 901

原创 Spring源码 AOP

这里我们用若以这个目前比较人多用的脚手架来学习AOP,贴近我们项目,而不是idea里面跳一跳。从项目启动开始来学习Spring源码,以及AOP的在整个过程中是如何起作用,都做了什么。AOP是Spring框架的一个重要特性,日志,事务,安全,权限控制等都是依赖它参与实现的。

2025-04-08 00:46:20 136

原创 deepseek本地部署以及搭建知识库

以后可能我们都需要一个自己知识库,帮助我整理分析,另一方面我们也可以从别人的知识库学到东西,现在很多相关的产品都出来了,我们还可以通过付费买token的方式帮助训练自己的知识库,后面我可能会进一步选择部署优化知识库这个,因为这个对于一些组织来说确实还挺必要的,自己本地部署一个知识库,相当于多了一个任劳任怨,经验丰富的老员工,有什么问题可以直接问它,它给你更贴合对应情况的,符合自己公司策略的解决方案。后面要创建我们自己的知识库以及补充相关的知识,这就要在管理知识那里创建和上传资料,大概如下。

2025-02-21 18:43:54 1114

原创 问一下,你熟悉多线程吗

线程池,就会涉及到线程的生成,我们知道线程的生成,有Runable和继承Thread这两种方法,为什么实现Runable接口的方式就是比继承Thread类要好要灵活,这个涉及到Java不能多重继承的问题,用接口更方便,不会涉及到修改一改就要一直往上改,比较麻烦,解耦的方式。(不能实现非公平锁)首先说一下这个多线程涉及到的,问题点,线程池,锁,线程安全,线程生成,JUC包,乐观锁悲观锁,线程池参数,ThradLocal,JDK虚拟线程。所以多线程为什么会有锁这个概念,锁的就是资源,锁的是同一个进程内的资源。

2025-01-09 15:38:10 469

原创 Java的Cursor的使用

实际上这个在数据量小的时候,实际上没啥差距,甚至普通的查询遍历可读性更强。主要是面对数据量大的时候,也就是大数据集处理会体现出的优势,主要的原理就是它可以逐行读取数据,而不是先把整个结果集读取加载到内存中,这样就可以节省内存空间。这个我么们可以通过idea工具来查看,总之当遇到一个大数据集加载导致占用内存飙升甚至内存溢出,可以考虑采用这个Cursor工具,来减小内存占用以及Cursor的并发提高效率算短时间。这里说的Cursor,一般来是JDBC的工具,像我在项目中的mybatis里面的Cursor。

2024-08-15 19:48:07 7575 2

原创 如何使用WEB前端模板

着你需要有一个自己的前端工程大体框架,买模板只是把一些样式设计卖给你,你还是要有自己前端框架,把这些整合进去。不是打开时,全是现成的东西。添加模板文件到自己web工程里面,把上面这些文件夹添加进去,看自己的文件情况,一般来说按我看法就是不一定是放在根目录里面。首先创建一个前端工程,我这里用的是Bootstrap5,你也想弄一个的话可以翻一翻我前面关于Bootstrap5和Webpack的工程构建博客。下载模板,既然是Bootstrap,我们下载对应类型的模板,我是直接从Bootstrap官网下载的模板。

2024-04-19 00:25:25 784

原创 搭建Bootstrap5+Webpack项目

你可能会问Webpack是什么,这是一个打包工具,提供了一种方式,打包JavaScript应用程序的资源,JavaScript,CSS,图片这些。我们这里的是npm来安装下载Bootstrap,当人你也可以使用别的工具yarn,RubyGems等其他的工具来下载,这里是用npm命令行输入命令的形式下载Bootstrap。安装 Bootstrap。后面我们要加入一些额外的依赖,比如css的加载器,sass加载器,style加载器,,postcss加载器,以及autoprefixer支持不同浏览器CSS代码。

2024-04-18 15:19:36 1394

原创 Java web工程的Jar包启动以及一下要注意的问题

WAR文件的结构遵循Java EE标准,包含了Web应用程序需要的所有内容,如:JSP、Java类、图片、库文件(lib文件夹下的JAR文件)、部署描述符(WEB-INF/web.xml)等。web工程是多种模块/module的形式,这些模块是依赖关系,如果我们的修改不是对应web模块,我们打包的module模块的jar包是没有更新修改,因为jar包里面对应修改的依赖jar包没有更新。我们找到对应的jar包的位置,可以直接在idea的命令行里面执行java的jar命令来执行启动jar包。

2024-02-24 11:34:24 974 1

原创 时间戳的大小写的坑

这里也会有个问题,就是用错的情况下,所有时间在上午显示转换是正常的,但是下午的就会后我们直觉的“几点”有差异。但是这个要比2023年12月31日,周年制要好弄一点,我这个“周日是一周的第一天”这个规则,而且还是属于国际标准下的一个标准之一,属实让我当天没想开,之前只是知道如果这一周跨周了不行,但没想当这一周的开始和结尾是什么?首先是年份,最常用的是小写yyyy,如果用的是大写那采用的是周年制,顾名思义这个年份还要看周的限制,假如对应的日期所在的周跨年了,那这个年也要跟着“加一”。我的公众号:我是坑货。

2024-01-15 02:33:13 916

原创 @Aspect注解切面编程

但是还有一个特点就是AOP,就是面向切面编程。市面常见的资料一举例子就是日志,关键是真正项目我们都会引入日志包,根本不需要你去设置什么切面。所以对于面向切面编程,到底是个啥,估计有的人还是有点懵。我们经常说Spring两个特点,一个是IOC控制反转,这个好说你要是从之前那种需要哪个就要创建那个对象的常规基础面向对象编程走过来,基本来说你大概明白IOC这个给你省了不少事。这里我这里准备用项目中使用的一个切面编程作为例子。这里我首先介绍一下@Aspect注解。

2023-10-10 20:14:20 874

原创 conda安装和使用

这里我这提供一个conda使用例子,就是配置一个独立的 Python 3.10 的环境,并安装好 JupyterLab、OpenAI 以及后面要用到的一系列开发包。你可以在Anaconda Prompt终端上输入上面的命令,这样你在使用conda的过程中,也配置一个独立的 Python 3.10 的环境,并配置一系列开发包。如果现在你想使用python的话,也会涉及到包管理的问题,Java有maven来帮助,python也有类似的工具,conda算是使用的比较多的一个。在创建环境后,需要激活它才能使用。

2023-06-28 14:38:12 1842

原创 Midjourney使用教程:三 图片风格提示

这时候你不在满足简单的提示生成的Midjourney的默认风格图片,实际上你可以通过一些关键词做提示,来改变输出的图片风格,像这些提示词其实并不高大上,但是他的反馈效果确实显而易见,就好比我们用chatGPT有时候会设定一个角色,或者添加一个补充信息,返回的质量会提高不少。类似的提示:1700年代,1800年代,1900年代,1910年代,1920年代,1930年代,1940年代,1950年代,1960年代,1970年代,1980年代,1990年代。类似的提示:决定,快乐的,困,生气的,害羞的,尴尬。

2023-06-25 16:26:46 2503

原创 MidJourney使用教程:一 第一次怎么用Midjourney

还有就是公共频道,那么多人用,自己的图还没完全出完,就被顶到上面去了,有没有什么好的方式,有一个自己的“独享的”空间?创建成功后,你要把MidJourney机器人引到你创建的服务器,找到之前的Midjourney服务器,随便找一个出图的房间,找到侧面成员栏,找到Midjourney机器人点击,选择“添加服务器”到自己的新建的服务器上,这样就可以在你自己的服务器输出图片。V的意思采用图片的构图形式,重新生成一组类似的图片,V1/V2/V3/V4的顺序与U的顺序一样。创建一个服务器,还是那个“加号”,

2023-06-20 11:18:46 1961

原创 MidJourney使用教程:二 初识Prompts

虽然和我搞笑图是有出入的,但是图片地池塘,岸边这些都有,毕竟解析动图相当于微小地短片,靠图片完全展示出还是有难度地,我对于这个动画风格的参数还是很满意的,因为默认的风格有些prompts产生的图片会有点阴沉,甚至有点不舒服地感觉。基础提示,就是很基础,很简短的提示,官网上说可以简单一个单词,一个短多,甚至一个表情符号(emoji),这部剧不服气了,我直接来个money单词来试一下。效果还行(至于他说的表情符号,我认为的意思是上传图片,这个我后面高级提示会有演示)主要组成部分是图片提示,文字提示,参数。

2023-06-16 02:12:48 1952

原创 Git教程:标签

tag 标签其实就算一个,我们下载一些开源项目的时候,在GitHub上经常看到版本,有的项目是通过tag来管理版本的,所以学习一下标签管理对于项目版本还是有很多帮助的,尤其是我们自己创建一个项目,设置版本设置tag,这些和分支,仓库这些开发中常用的一样重要,这是你要交付给被人使用的。这样我们想去找找个版本,就不用几比较难记的commit的版本号了,毕竟靠人脑记这些就挺不靠谱的,看一个关于加密的项目的文档,作者对人脑的对于一些比较长比较晦涩的词语记忆的形容是,“最强随机数生成机器”。

2023-05-19 18:12:13 1314

原创 windows的nvm安装

最近在看一个加密的教程,里面有一个关于node的js加密的代码,代码报错,初步判断可能是node的版本的问题。有一个管理node版本的工具nvm,可以来管理node版本,可以下载安装和切换使用环境的node版本,很希望我们其他的编译环境也可以出类似的工具。

2023-05-15 14:59:04 722

原创 Mockito实战

为什么要有个Mockito,本身Junit就可以做单元测试,为什么还要加一个Mcokito作为单元测试框架。实际上两者不矛盾,甚至两者是搭配着使用的,确切的说Mockito是一个单元测试模拟框架,来帮助发现隐藏bug,提高代码质量。为什么会有这样的作用呢,具体一点的实践场景都有哪些?首先Mockito注重的是一个模拟,本身mock本意就有模仿假装的意思在里面,假设我们的代码需要跟第三方联调,我们需要人家给我们数据,设置前置条件。实际工作中就知道,工作本身可能不太难,但是和人交流协同有时候更消耗时间。

2023-04-19 16:26:17 1071 2

原创 flowable实战(四):构建命令行程序

其实不需要多做什么,直接点击对应的SimpleDemo下面的pom文件,点击右键找到“add maven xxx”的就可以了,转化成maven工程就可以直接上手用了。画的图背后实际还是xml文件,如下,但是其中很多部分都是通用的,但是设计比较复杂的流程或和比较多的话,还是图更直接一点。创建一个maven工程,这个就不赘述了,文档还有其他关于如何创建的maven工程的文章也很多,一搜一大把。有流程了,只是定义了一个而已,实际上我们工作流要的是一个个“审批”,这就是根据流程定义得到的流程实例。

2023-01-10 19:42:36 1112

原创 UNION ALL和LEFT JOIN的区别和使用场景

left join 应该是最常用的一个连接,但是有时候left join也不能包打天下。因为left join是一个获取笛卡尔积的临时表,如果这些的表都是一对一的关系,怎么join都没事。但是实际上我们会遇到很多一对多的对应情况,就需要按照实际情况来判断。举个例子,表A和表B的关联的关系是一对多的,表A和表C也是一对多的情况,这里A和B,C的关系是关联起来一对多,也有A和B,C关联不上得情况。我们这边通过统计数量,b_staus为1取关联B的b_count,c_staus为2时取关联C的c_count。

2023-01-04 22:21:16 3897

原创 MySQL的一些指令,函数以及关键字

因为对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。如果不是索引字段的话其实还好,毕竟MySQL里面会有不少buffer,比如sort buffer这些,实际上是在内存上操作(当然太多了也会走磁盘),其实也挺快的。这里要注意的是id指的是pid,我们发现阻塞的进程直接kill pid就可以。这个里面我准备记录一些比较有意思的MySQL的指令和函数,当然使用函数的时候我们要注意,会不会因为函数导致不走索引,走全表扫描的情况。可以通过show processlist来查看。

2023-01-03 14:41:06 770 1

原创 idea的一些配置分享

有时候我们选择配置,需要重新build才能切换成功,比如说你想用UAT1,但是之前你用的是dev分支。像需要指定环境,其实可以直接配置就可以active profilese 里面添加对应的环境。

2022-12-12 15:32:03 397

原创 Java函数接口:Supplier

之前我们一提到Java8新特性,两个常提的stream和Lambda表达式,实际还有一个大的方向就是函数接口。但是stream和Lambda表达式,使用场景也比较多,基本一推出来,基本日常场景就能用到。但是函数接口就不一样,他需要他自己的使用场景,如果不理解,只背他的定义,实际没啥帮助。这里我就通过介绍使用场景的方式来说一下Supplier函数接口。

2022-11-14 10:44:39 3861

原创 spring源码学习:spring初始化流程

首先借个图,说明一下spring的bean的整个生命流程。销毁什么的这个看图就知道怎么回事,使用的话一般都是纯业务,而且我们更关心spring是怎么初始化的,初始化成我们定义的那个样子。我们就是以这个出发点来看一下spring的大概流程。

2022-10-29 15:06:34 1269

原创 Java函数式编程

函数式编程是程序面向数学的更底层的抽象,将计算过程描述为表达式。简单点讲就是,函数内部涉及的变量都是局部变量,不会像面向对象编程那样,共享类成员变量,也不会像面向过程编程那样,共享全局变量。同样的入参,不管怎么执行,得到的结果都是一样的。Functional Programming 函数式编程,这里的函数类似于一个表达式,类似我们学习中的数学公式,输入端是确定的,那输出端也是确定的,这种就是没有副作用的纯函数。面向对象的编程单元是类或对象,面向过程的编程单元是函数,函数式编程的编程单元是无状态函数。

2022-10-27 19:48:08 724

原创 JDK中各种各样的注解

Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。注解现在使用的场景原越来越多,各大框架的也有自己的注解,这里就是直接列举一下我们再看JDK源码自己的一些常用的注解,使用场景。这些注解平时也会有使用。这个过时的注解其实很有用,比如你旧的接口不想让别人用,但是比要提醒人家,你可以用这个注解。

2022-10-15 20:30:58 271

Java垃圾回收机制和内存分配

你认真演示了一遍,你就能明白JAVA的垃圾回收机制。当然文档写的不一定全面,比如文档当中关于老年区少年区有一页写的不是很完整,我也没有添加太多进去,但是还是很有很全面很有参考意义的。

2016-12-21

JAVA类加载机制与动态代理

类加载机制与动态代理吗,讲得很好对得资源分。

2017-02-21

docekr-compose-demo

docekr-compose-demo

2022-01-19

类加载机制与动态代理的测试题

可以搭配我传的对应的课程

2017-02-21

空空如也

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

TA关注的人

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