- 博客(1824)
- 收藏
- 关注
原创 SSM - Spring_day03 - 3.AOP工作流程
SpringAOP是在不改变原有设计(代码)的前提下对其进行增强的,它的底层采用的是代理模式实现的,所以要对原始对象进行增强,就需要对原始对象创建代理对象,在代理对象中的方法把通知[如:MyAdvice中的method方法]内容加进去,就实现了增强,这就是我们所说的代理(Proxy)。不能直接打印对象,从上面两次结果中可以看出,直接打印对象走的是对象的toString方法,不管是不是代理对象打印的结果都是一样的,原因是内部对toString方法进行了重写。
2025-05-06 20:02:58
102
原创 SSM - Spring_day03 - 2.AOP入门案例
环境准备的时候,BookDaoImpl已经准备好,不需要做任何修改通知就是将共性功能抽取出来后形成的方法,共性功能指的就是当前系统时间的打印。类名和方法名没有要求,可以任意。BookDaoImpl中有两个方法,分别是save和update,我们要增强的是update方法,该如何定义呢?切入点定义依托一个不具有实际意义的方法进行,即无参数、无返回值、方法体无实际逻辑。execution及后面编写的内容,后面会有章节专门去学习。
2025-05-06 19:44:14
265
原创 Spring_day03 - 1.AOP简介
前面我们在介绍Spring的时候说过,Spring有两个核心的概念,一个是IOC/DI,一个是AOP。前面已经对IOC/DI进行了系统的学习,接下来要学习它的另一个核心内容,就是==AOP==。对于AOP,我们前面提过一句话是:==AOP是在不改原有代码的前提下对其进行增强。==对于下面的内容,我们主要就是围绕着这一句话进行展开学习,主要学习两方面内容AOP核心概念AOP作用AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构。
2025-05-06 16:59:32
366
原创 Spring_day02 5.注解开发总结&6,Spring整合
前面我们已经完成了XML配置和注解的开发实现,至于两者之间的差异,咱们放在一块去对比回顾下:课程学习到这里,已经对Spring有一个简单的认识了,Spring有一个容器,叫做IoC容器,里面保存bean。在进行企业级开发的时候,其实除了将自己写的类让Spring管理之外,还有一部分重要的工作就是使用第三方的技术。前面已经讲了如何管理第三方bean了,下面结合IoC和DI,整合2个常用技术,进一步加深对Spring的使用理解。在准备环境的过程中,我们也来回顾下Mybatis开发的相关内容:Mybatis是来操
2025-05-06 16:20:57
327
原创 Spring_day02 4.IOC/DI注解开发管理第三方bean
遇到上述问题,我们就需要有一种更加灵活的方式来定义bean,这种方式不能在原始代码上面书写注解,一样能定义bean,这就用到了一个全新的注解==@Bean==。前面定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办?如何来优化下面的代码?中,虽然可以,但是不利于代码阅读和分类管理,所有我们就想能不能按照类别将这些bean配置到不同的配置类中?@Import注解在配置类中只能写一次,下面的方式是==不允许的==
2025-05-06 15:26:04
545
原创 Spring_day02 2.核心容器
前面已经完成bean与依赖注入的相关知识学习,接下来我们主要学习的是IOC容器中的==核心容器==。这里所说的核心容器,大家可以把它简单的理解为,前面虽然已经用到过,但是并没有系统的学习,接下来咱们从以下几个问题入手来学习下容器的相关知识:如何创建容器?创建好容器后,如何从容器中获取bean对象?容器类的层次结构是什么?BeanFactory是什么?在学习和解决上述问题之前,先来准备下案例环境:创建一个Maven项目pom.xml添加Spring的依赖<dependencies>  
2025-05-06 10:38:50
510
原创 Spring_day02 1.IOC/DI配置管理第三方bean
数据连接池在配置属性的时候,除了可以注入数据库连接四要素外还可以配置很多其他的属性,具体都有哪些属性用到的时候再去查,一般配置基础的四个,其他都有自己的默认值。Druid和C3P0在没有导入mysql驱动包的前提下,一个没报错一个报错,说明Druid在初始化的时候没有去加载驱动,而C3P0刚好相反。方式四:不仅可以加载当前项目还可以加载当前项目所依赖的所有项目的根路径下的properties配置文件。前面所讲的知识点都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理?
2025-05-06 10:13:36
534
原创 Day23 - 集合 - 2.Set集合
不可以存储重复元素没有索引,不能使用普通for循环遍历不可以存储重复元素没有索引可以将元素按照规则进行排序TreeSet():根据其元素的自然排序进行排序TreeSet(Comparator comparator) :根据指定的比较器进行排序两种比较方式小结自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序。
2025-05-05 20:34:27
467
原创 Day22 - 集合 - 2.List集合
List集合的概述有序集合,这里的有序指的是存取顺序用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素与Set集合不同,列表通常允许重复的元素List集合的特点存取有序可以重复有索引。
2025-05-05 20:16:53
507
原创 Day22 - 集合 - 1.Collection集合
Collection集合概述是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现创建Collection集合的对象多态的方式具体的实现类ArrayListCollection集合常用方法方法名说明添加元素从集合中移除指定的元素根据条件进行移除清空集合中的元素判断集合中是否存在指定的元素判断集合是否为空int size()集合的长度,也就是集合中元素的个数。
2025-05-05 19:57:09
495
原创 Day24 - 集合 - HashMap底层源码超详细解析
HashMap 的源码看似复杂,其实逻辑是分层渐进的:数组 + 链表(链表冲突)+ 红黑树(优化性能),并结合扩容机制让它成为 Java 中最强大的“键值对”工具之一。
2025-05-05 17:13:48
496
原创 Day26 - 集合 - 3.方法引用
方法引用是 Java 8 提供的一种新特性,它是对 Lambda 表达式的进一步简化。当 Lambda 中仅仅是调用已有的方法时,方法引用允许我们直接使用“类名::方法名”或“对象::方法名”的形式来代替 Lambda,从而让代码更简洁。二者的关系可以这样理解:Lambda 表达式是一种匿名函数,用于实现函数式接口;方法引用则是 Lambda 表达式的“快捷方式”,本质上也是实现函数式接口。// Lambda// 方法引用。
2025-05-05 16:42:05
477
原创 Day26 - 集合 - 2.Stream流
Stream流是Java 8引入的新特性,主要用于对集合、数组等数据源进行高效、简洁、函数式风格的处理。Stream本质上是一个流水线,支持数据的筛选、转换、聚合等操作,它强调“什么做”而不是“怎么做”,即更偏向声明式编程。Stream流的核心优势包括:1️⃣简洁优雅的代码风格:支持链式调用,多个操作可以无缝连接,显著减少了for循环和中间变量的使用,使代码更易读、维护成本更低。2️⃣懒加载机制。
2025-05-05 16:25:09
530
原创 Day36 - Java基础加强 - 1. 注解
自定义注解的本质:只是一个标记,没有功能,必须结合反射来解析。通常在框架底层使用,开发者平时只需要学会使用现成注解。
2025-05-05 15:54:42
684
原创 Day36 - Java基础加强 - 1. 单元测试 Junit
对部分代码进行测试。🧠单元测试是对程序的最小可测试单元(如方法、函数、类)进行验证的过程,主要目的是保证代码的正确性、健壮性。它强调“最小单元”的粒度,一般是一个方法或类。单元测试的最大价值在于,也是TDD(测试驱动开发)的基石。🏢:在服务端项目中,单元测试是 CI/CD 流水线中的“必测项”,未覆盖单元测试的代码无法合并主干。:强调“代码未测试=有缺陷”,每次提交必须附带单元测试,特别是支付、订单等核心模块,单元测试覆盖率要求≥80%。
2025-05-05 15:39:52
641
原创 Day36 - Java基础加强 - 1.xml
万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)、可扩展标记语言XML(标准通用标记语言下的一个子集)、
2025-05-05 15:25:38
723
原创 Day36 - Java基础加强 - 1.类加载器
基础加强包含了:反射,动态代理,类加载器,xml,注解,日志,单元测试等知识点其中最难的是反射和动态代理,其他知识点都非常简单由于B站P数限制,xml,注解等知识点,阿玮写了详细文档供大家学习。
2025-05-05 15:07:09
790
原创 Day36 - 1. 日志
跟输出语句一样,可以把程序在运行过程中的详细信息都打印在控制台上。利用log日志还可以把这些详细信息保存到文件和数据库中。🧠日志的本质是程序运行状态的一种“记录手段”。它可以实时输出程序执行的详细信息,便于开发者调试错误、跟踪程序执行过程、定位问题。和简单的不同,日志可以按不同级别分类(比如 info、error)、可以定制输出格式,还支持输出到文件、数据库、远程服务器等多个媒介,从而实现专业化的运维监控。🏢。
2025-05-05 11:57:10
642
原创 Day36 基础加强 - 2. 动态代理
动态代理是指在运行时动态生成代理类和代理对象,实现方法调用的增强或拦截。好处是:无侵入式增强功能可复用性强,只需编写一次。
2025-05-05 11:43:48
435
原创 Day35 Java进阶 - 1. 反射
反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。利用反射创建的对象可以无视修饰符调用类里面的内容。可以跟配置文件结合起来使用,把要创建的对象信息和方法写在配置文件中:读取到什么类,就创建什么类的对象。读取到什么方法,就调用什么方法。这样当需求变更时,不需要修改代码,只要修改配置文件即可。
2025-05-05 11:22:35
860
原创 Day33 Java 进阶 - 1. 网络编程入门
指将地理位置不同的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的系统。在网络通信协议下,不同计算机上运行的程序可以进行数据传输的开发方式。
2025-05-05 10:52:09
629
原创 DAY01 - JVM - 垃圾回收机制详解 - 4. 垃圾回收
在这类语言中,没有内置的垃圾回收机制。程序员需要,否则就会造成。内存泄漏是指,如果长时间积累,会导致,甚至程序崩溃。在这段代码中,程序通过死循环不停创建Test类的对象,每次循环结束后对象就已经不再使用了,但没有主动删除它们,最终造成内存泄漏。在这段代码中,程序显式调用delete删除对象,避免了内存泄漏。我们称这种回收过程为。在 C/C++ 中,这属于。
2025-05-05 10:39:06
591
原创 DAY01 - JVM - 字节码文件详解
核心组件是,它负责将.class字节码文件中的内容加载到内存中,使 JVM 能找到类和接口信息。JVM 管理的内存区域,所有创建出来的对象、类的信息、运行时数据都会存放在这里。例如方法区、堆、虚拟机栈、本地方法栈、程序计数器等都属于它的范畴。包含。执行引擎的职责是:使用解释器将字节码指令转为机器码;使用 JIT 提高执行性能;使用 GC 垃圾回收器释放无用对象。允许 Java 代码调用本地方法(C/C++ 编译的),Java 中用native修饰的就是本地方法。
2025-05-04 20:59:35
633
原创 DAY01 - JVM - 基础篇 - 1.初始化JVM - 1.3 常见的JVM
Java虚拟机规范》是 Oracle 制定的标准,描述了虚拟机如何加载、解析和执行 .class 字节码文件,规范了虚拟机的内存结构(堆、栈、方法区等)、类加载机制、指令集等内容。其核心作用是保证“跨平台”兼容性,不同 JVM 实现者需严格遵守这个规范来确保一致性。
2025-05-04 20:38:03
852
原创 JUC并发编程 - 原理篇 - 指令级并行原理
主频的概念大家接触的比较多,而 CPU 的 Clock Cycle Time(时钟周期时间),等于主频的倒数,意思是 CPU 能够识别的最小时间单位,比如说 4G 主频的 CPU 的 Clock Cycle Time 就是 0.25 ns,作为对比,我们墙上挂钟的 Cycle Time 是 1s。例如,运行一条加法指令一般需要一个时钟周期时间。
2025-05-04 17:06:16
495
原创 JUC并发编程 - 应用篇 - 多线程高效利用CPU
为了对比多线程在不同 CPU 核数下的表现,本次测试选择了专业的基准测试工具。它能够实现:程序预热(避免首次调用影响测试结果)多次测试并自动计算平均值方法一:使用虚拟机,分配合适的 CPU 核数方法二:通过msconfig修改 CPU 核数(缺点:需要重启)最初尝试使用,但发现它调度不可控,容易带来问题改为手动创建ThreadFutureTask,实现简单高效的并行🧠高效利用多线程前,首先要搭建。
2025-05-04 16:42:40
572
原创 JUC并发编程 - 解决方案模式篇 - 线程安全单例:JVM 内存监控
单例模式是一种常见的创建型设计模式,确保在整个程序运行期间,某个类只能被实例化一次,并提供一个全局访问点。这些实现方法各有优缺点,核心考虑点包括线程安全、性能、延迟加载、以及反射和反序列化的安全性。
2025-05-04 16:09:40
948
原创 JUC并发编程 - 解决方案模式篇 - 同步模式之保护性暂停
💬场景题(阿里)现象:你在项目中发现,主线程需要等待一个子线程下载文件完成后才能继续处理,但偶尔会出现“永远挂起不结束”的现象。问题:请分析原因,并说明如何用保护性暂停解决。✅参考答案原因分析:主线程直接wait()等待,子线程负责下载完毕后notify();出现“永远挂起”的原因:子线程未正确notify();主线程wait()时未用while包裹检查条件,可能遇到虚假唤醒;或者锁对象不一致,导致通知失败。解决方案:用 GuardedObject 封装等待逻辑,主线程调用get()
2025-05-04 15:47:37
985
原创 JUC并发编程 - 4.2 synchronized 解决方案
采用互斥机制:让同一时刻最多只有一个线程持有对象锁,其它线程如果想获取锁,就会被阻塞。这样就能保证持有锁的线程安全执行临界区代码,不受上下文切换干扰。的基本原理互斥与同步的区别如何用对象锁保护共享资源面向对象的加锁思路任何时候,锁对象要统一,否则加锁就形同虚设。的本质是用锁机制实现线程安全的“原子性”。
2025-05-04 15:25:00
869
原创 JUC并发编程 - 4. 共享模型之管程 - 4.1 共享带来的问题
这一节我们通过一个有趣的小故事,讲清楚了:线程共享模型的本质为什么会出现线程安全问题临界区 & 竞态条件的概念以及 Java 中经典的竞态演示在并发编程中,共享资源 + 多线程修改是 bug 的温床!下一节我们将进入解决方案 👊。
2025-05-04 14:53:45
948
原创 JUC并发编程 - 3.12 五种状态(增强版)
这一节深入解析了线程的五种基本状态初始状态可运行状态运行状态阻塞状态终止状态并扩展了Java Thread.State 状态细节调优视角和大厂级应用背景,让你既懂理论也看清实战问题。
2025-05-04 14:40:28
734
原创 JUC并发编程 - 3.4 原理之线程运行(增强版)
本节从理论到实战全面解析了「线程的运行原理」,补充了:栈帧结构细节上下文切换的细节与优化程序计数器的核心作用多核调度的企业级视角远程监控的安全配置👉 这节课不仅让你看懂 JVM 是怎么调度线程的,还让你具备大厂级的实战视野✅。
2025-05-04 13:57:28
844
原创 JUC并发编程 - 3.3 查看进程线程的方法
任务管理器可以查看进程和线程数,也可以用来杀死进程。查看进程(可以查找包含"java"的所有进程)杀死进程表示强制关闭,12345是进程号。🔎任务管理器 → 详细信息 → 右键列 → 选择“线程数”列,可看到每个进程的线程数。更深入分析线程:使用(微软官方工具),支持查看线程栈。🧠 理论理解Windows 提供了多种查看进程和线程的方法,核心工具包括任务管理器、命令行工具(tasklisttaskkill。
2025-05-04 13:36:41
860
原创 JUC并发编程 - 2.3 应用
以调用方角度场景描述同步调用必须等待结果返回,才能继续执行异步调用不需要等待结果返回,立刻继续执行你可以理解为:异步 = 不用干等,任务在后台悄悄做。这一节我们介绍了:多线程的两个典型应用:1️⃣提升程序的响应性,不阻塞主流程2️⃣让 CPU 多核并行跑任务,减少总耗时多线程并不总能提升效率,要具体问题具体分析学会辨别场景,用对线程,才能让程序更高效!
2025-05-04 13:08:05
557
原创 JUC并发编程 - 1. 概览
这门课中的「并发」涵盖了:程序的执行实例,拥有独立的内存空间。:进程内独立执行的最小单位,多个线程共享同一个进程的内存。:多个任务交替执行,利用单核CPU切换上下文实现“同时执行”的效果。:多个任务真正同时执行,通常基于多核CPU。此外,这门课还包括:Java的与;其他领域的并发知识拓展,比如和。
2025-05-04 12:52:48
295
原创 Java进阶DAY32-03-JUC扩展 4 原子性
原子性指操作是“不可中断的整体”。一次或多次操作,要么全部执行完毕,要么完全不执行,中间不会被线程切换打断。在并发场景中,如果多个线程同时修改同一个变量,没有原子性保障,就会导致数据竞争、丢失更新、状态不一致等问题,造成系统异常。
2025-05-04 10:07:45
998
原创 Java进阶DAY32-03-JUC扩展 3 volatile关键字
分析如下程序,说出在控制台的输出结果。Thread的子类测试类控制台输出结果前面是false,过了一段时间之后就变成了true按照我们的分析,当我们把volatileThread线程启动起来以后,那么volatileThread线程开始执行。在volatileThread线程的run方法中,线程休眠1s,休眠一秒以后那么flag的值应该为true,此时我们在主线程中不停的获取flag的值。发现前面释放false,后面是true信息,那么这是为什么呢?要想知道原因,那么我们就需要学习一下JMM。
2025-05-03 23:02:45
630
数值计算方法实验报告四
2023-05-14
数值计算方法实验报告3
2023-05-14
数值计算方法实验报告二
2023-05-14
华北水利水电大学数值计算方法实验报告实验一
2023-05-14
需要道路行人检测系统数据集
2025-04-01
我想问第二个问题在写页面的时候为什么要有换行和照片莫名奇妙跑到超链接上
2024-07-19
离散数学的集合的覆盖和划分吗?
2024-06-30
整数划分的递归关系是怎么讨论出来的
2023-03-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人