- 博客(32)
- 收藏
- 关注
原创 黑马Mybatis-Plus学习笔记
本文总结了MyBatis-Plus的核心功能和使用技巧,主要包括: 注解使用:通过@TableName等注解解决实体类与表名映射问题 条件构造器:详细演示了QueryWrapper和LambdaQueryWrapper的使用方法 自定义SQL:介绍了@Select等注解和XML方式的SQL编写 Service接口:说明IService接口的CRUD方法和批量操作 扩展功能:包含代码生成器、Db静态工具、逻辑删除和枚举处理器的使用 性能优化:展示了批量操作的配置方法和预编译SQL的优势 特别强调了Lambda
2025-12-05 16:53:29
210
原创 Redis安装
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.此处选择的Linux版本为CentOS 7.
2025-12-04 15:00:18
735
原创 黑马Linux学习笔记
本文介绍了Linux常用命令操作,主要包括:1)文件查找命令witch和find;2)文本处理工具grep过滤、wc统计和管道符|;3)echo输出、反引号`、tail查看尾部内容和重定向符号;4)vi/vim编辑器的命令模式和底线命令模式快捷键;5)sudo权限管理;6)用户/用户组相关操作命令。文章详细列出了各命令的使用方法和参数说明,并配有示例演示,是Linux基础操作的实用参考手册。
2025-12-03 23:09:38
815
原创 什么是AOP
本文摘要: AOP(面向切面编程)是一种编程范式,用于处理大量重复操作的统一管理。其核心概念包括连接点、切入点、通知、切面和代理对象。AOP通过切入点表达式定位目标方法,提供多种通知类型(@Around、@Before、@After等)实现不同阶段的拦截逻辑。通知执行遵循特定顺序,且支持通过@Pointcut定义可重用的切入点表达式。AOP能有效减少重复代码,典型案例包括事务管理和方法耗时统计,其底层通过动态代理机制实现。
2025-11-25 22:50:24
284
原创 多线程-抢红包案例:
文章摘要:当多线程操作共享资源时,未加锁的size()判断与后续加锁操作之间存在时间差,可能导致线程安全问题。示例中,线程A判断集合非空后,线程B移除元素导致集合变空,线程A再操作时就会抛出IndexOutOfBoundsException。正确做法是将size()判断和集合操作都放在同步代码块中,确保原子性执行。
2025-10-25 15:26:51
130
原创 多线程-并发和并行
本文简明介绍了计算机系统中的核心概念:进程是动态竞争CPU资源的执行单位,而线程则是进程内部的轻量级执行单元。并发是指通过快速切换实现的多任务处理效果,而并行则是多任务真正同时执行的能力。文章通过图示直观展示了这些概念的区别,包括单核与多核处理器环境下并发与并行的不同表现方式。这些基础概念是理解现代计算机系统运行机制的重要前提。
2025-10-25 15:26:33
125
原创 java强化-Set集合
Set集合是Java中无序、不重复、无索引的集合接口,主要有HashSet、LinkedHashSet和TreeSet三种实现方式。HashSet基于哈希表实现,通过哈希值和equals方法保证元素唯一性;LinkedHashSet在HashSet基础上维护链表保持插入顺序;TreeSet基于红黑树实现,默认按元素大小升序排序。对于自定义对象排序,需实现Comparable接口或传入Comparator比较器。HashSet的去重功能需要重写hashCode()和equals()方法确保对象内容相同时哈希值
2025-10-25 15:25:45
135
原创 多线程-线程同步
线程同步的三种实现方式:1)同步代码块(synchronized块),通过锁定当前对象或类对象实现;2)同步方法(synchronized方法),锁住整个方法;3)Lock锁(ReentrantLock),手动控制加锁解锁。三种方式各有优劣:同步代码块性能较好,可缩小同步范围;同步方法简单但范围较大;Lock锁更灵活但需手动管理。静态方法同步时锁定的是类对象。在多线程访问共享资源时,需确保同步操作以避免数据竞争问题。
2025-10-24 14:31:12
135
原创 多线程-线程常用方法
本文介绍了Java线程的常用API方法:1)线程命名可通过setName()方法或构造器实现,但需在启动前设置;2)sleep()方法可使线程休眠指定毫秒数;3)join()方法能让调用线程插队优先执行完毕。示例代码演示了主线程和子线程的交互控制,包括通过currentThread()获取当前线程、线程命名规范以及join()的插队效果。这些方法为Java多线程编程提供了基础控制能力。
2025-10-24 14:30:37
101
原创 多线程-线程池
本文介绍了Java线程池的基本概念和使用方法。线程池通过线程复用思想提高性能,可通过ThreadPoolExecutor创建,配置核心线程数、最大线程数等参数。演示了处理Runnable任务的execute()方法和Callable任务的submit()方法,并展示了如何获取任务执行结果。线程池能有效管理线程资源,避免频繁创建销毁线程的开销,同时通过任务队列和拒绝策略处理高并发场景。文章还提供了完整的代码示例,包括线程池创建、任务提交和结果获取等关键步骤。
2025-10-24 14:29:55
284
原创 多线程-线程安全(重点)
本文通过代码示例演示了线程安全问题。创建了一个账户类Account和取款线程类DrawThread,模拟小明和小红同时从同一账户取款10万元的情况。由于线程间共享账户对象,当两个线程并发执行时可能导致数据不一致问题:检查余额通过后,两个线程可能同时进行取款操作,导致账户余额出现错误。这揭示了多线程环境下共享资源访问的同步问题。
2025-10-24 14:29:10
116
原创 多线程-创建线程
Java多线程创建主要有三种方式:1)继承Thread类,重写run方法;2)实现Runnable接口,将任务对象交给Thread处理;3)实现Callable接口,通过FutureTask获取线程执行结果。其中方案1简单但扩展性差,方案2更灵活,方案3可获取返回值。三种方式都能实现线程并发执行,开发者可根据需求选择合适方案。Lambda表达式可以简化Runnable接口的匿名内部类写法。
2025-10-24 14:28:35
214
原创 IO流包含各种流操作
IO流基础与常见误区 核心概念 字节流:处理二进制数据的基本单位(1字节=8比特) 字符编码误区:1字符≠1字节(中文需2-4字节) 单位换算误区: 100Mbps网络速度=12.5MB/s下载速度 文件大小1KB在计算机系统中为1024字节,厂商标注常为1000字节 字节流操作 文件输入流: 单字节读取性能差且易导致中文乱码 字节数组读取提升性能但仍可能截断汉字 readAllBytes()适合小文件完整读取 文件输出流: 支持覆盖/追加模式 可写入单字节、字节数组或数组片段 需注意换行符(\r\n)和资
2025-10-21 18:20:49
287
原创 java基础入门-字符集
文章摘要:本文介绍了字符集的基本概念及常见类型,重点讲解了Java中字符编码与解码的操作方法。通过代码示例展示了如何使用GBK字符集对字符串"我爱你中国abc666"进行编码(getBytes方法)和解码(String构造函数),并强调了编码解码必须使用相同字符集(如GBK)的重要性。最后指出若字符集不匹配,将导致乱码问题。
2025-10-21 18:19:08
299
原创 方法递归(为多级搜索铺垫)
本文介绍了递归的基本概念和实现方法。首先通过一个简单的Java程序展示了直接递归调用可能导致栈溢出的问题。然后详细讲解了递归算法的执行流程,包括阶乘和求和两种经典递归案例的实现代码。最后提到文件搜索场景中递归的应用。递归的核心思想是方法调用自身,但需要注意终止条件以避免无限循环。文中通过清晰的代码示例和注释,帮助读者理解递归的调用过程和实现要点。
2025-10-21 18:12:31
356
原创 IO流-File
本文介绍了Java中File类的使用方法,主要包括文件路径操作、文件/目录创建删除、遍历目录等功能。通过代码示例演示了如何获取文件信息(长度、名称、路径)、判断文件类型、创建/删除文件和目录(包括多级目录)、遍历目录内容等操作。特别展示了递归搜索文件的实现,用于查找指定名称的文件并执行。文章还比较了绝对路径和相对路径的使用场景,以及listFiles()方法在不同情况下的返回值特性。这些基础操作是Java文件处理的核心内容,适合初学者快速掌握文件系统操作的基本技能。
2025-10-21 18:12:06
379
原创 java强化-Map集合(双列集合)
应用场景:Map集合体系特点// 目标:认识Map集合的体系特点。// 1、创建Map集合// Map特点/HashMap特点:无序,不重复(键),无索引,键值对都可以是null, 值不做要求(可以重复)// LinkedMap特点:有序,不重复(键),无索引,键值对都可以是null, 值不做要求(可以重复)// TreeMap: 按照键可排序,不重复(键),无索引// 一行经典代码map.put("嫦娥", 20);map.put("女儿国王", 31);
2025-10-17 19:30:00
198
原创 Java强化-Stream流
本文介绍了Java Stream流的基本使用,包括认识Stream流、获取Stream流的方式、常用中间操作方法以及终结方法。主要内容包括: Stream流的基本概念和优势,通过对比传统集合操作展示了Stream流的简洁性 获取Stream流的多种方式:从集合、Map和数组获取Stream流 Stream流的常用中间操作方法: filter()过滤 sorted()排序(支持自定义比较器) limit()和skip()截取 distinct()去重 map()数据转换 concat()合并流 终结方法和结果
2025-10-16 20:52:54
212
原创 java强化集合框架
本文介绍了Java中Collection集合的基本概念和使用方法。主要内容包括:1) 集合的分类特点,List有序可重复有索引,Set无序不可重复无索引;2) Collection接口的常用功能如添加、删除、判断空等操作;3) 三种遍历方式:迭代器遍历、增强for循环和Lambda表达式遍历。通过代码示例演示了每种遍历方式的具体实现,并对比了它们的适用场景。
2025-10-16 20:15:00
428
原创 Java强化-异常
本文介绍了Java异常处理的基本概念和自定义异常的实现。主要内容包括:1)异常体系分类(编译时异常和运行时异常);2)try-catch捕获异常处理机制;3)通过throws声明异常及throw抛出异常;4)自定义异常的实现方式(继承Exception或RuntimeException)。重点演示了如何创建自定义编译时异常和运行时异常,并通过实际案例展示了异常处理在参数校验等场景中的应用。文章配有清晰的代码示例和UML类图,帮助理解异常处理机制及其在程序流程控制中的作用。
2025-10-16 20:00:00
298
原创 java强化-泛型
本文介绍了Java泛型的基本概念和使用方法。主要内容包括:1)泛型的基础认识,通过ArrayList示例展示类型安全特性;2)自定义泛型类的实现;3)泛型接口的定义及在数据处理中的应用;4)泛型方法和通配符的使用,包括上下限约束。文章通过具体代码示例演示了如何定义和使用泛型类、接口和方法,强调了泛型在避免类型转换和保证类型安全方面的重要作用,最后还展示了通配符在游戏开发中的实际应用场景。
2025-10-16 15:59:49
320
原创 java代码块
文章摘要: 静态代码块使用static{}在类加载时执行,常用于加载本地库等一次性操作(如System.loadLibrary)。实例代码块在每次创建对象时执行,位于构造方法之前,用于对象初始化。两者区别在于执行时机:静态代码块类加载时运行一次,实例代码块每次实例化都执行。示例中静态代码块加载了"day03"本地库,实例方法show()可被对象调用。
2025-10-13 19:00:00
174
原创 java内部类
文章摘要:本文系统介绍了Java内部类的四种类型:成员内部类、静态内部类、局部内部类和匿名内部类。重点讲解了各类内部类的定义方式、创建对象语法及其访问特点,其中成员内部类可直接访问外部类成员,静态内部类只能访问外部类静态成员。特别详细说明了匿名内部类的使用场景和语法特点,包括通过实现接口创建匿名对象、作为方法参数传递等实际应用,并附有数组排序的完整代码示例展示Comparator接口的匿名实现方式。
2025-10-13 09:30:47
143
原创 函数式编程Lambda表达式
Lambda表达式是Java 8引入的函数式编程特性,主要用于简化函数式接口的匿名内部类实现。本文通过示例展示了Lambda的基本用法和实际应用场景。 主要内容包括: Lambda表达式只能简化函数式接口(只有一个抽象方法的接口)的匿名内部类实现 通过学生数组排序和按钮事件监听等案例,演示了Lambda逐步简化的过程 介绍了方法引用特性,包括静态方法引用实例方法引用 Lambda表达式使代码更简洁,典型应用场景包括集合排序和事件监听处理等。随着简化程度增加,Lambda表达式可以省略参数类型、括号,甚至方法
2025-10-13 09:29:26
365
原创 常用API
本文介绍了Java中String和ArrayList的基本使用。String部分讲解了两种创建方式(直接赋值和构造器),字符串常量池特性,以及常用方法如equals()和substring()的应用。ArrayList部分说明了其动态扩容优势,并演示了基本操作:添加(add)、获取(get)、遍历、删除(remove)和修改(set)元素。通过登录功能和验证码生成的案例,展示了字符串处理和集合操作的实际应用场景。
2025-10-13 09:27:38
329
原创 java-多线程训练
本文介绍了一个多窗口售票系统设计方案。程序模拟火车站3个窗口同时售票的场景,共100张车票。系统要求:1)每个窗口显示编号和售出票号;2)确保不超售(≤100张)和重复售票;3)售票间隔100-500毫秒模拟真实场景。技术实现采用继承Thread的售票窗口类,通过同步机制保证线程安全,票号从1到100递增。该设计解决了多线程环境下的票务竞争问题,模拟了真实售票场景。
2025-08-27 13:35:43
156
原创 Java项目老马书城多版本(包含IO流)
本文介绍了一个基于JavaIO流实现的简易书城管理系统。系统采用控制台菜单交互方式,提供书籍信息的增删改查功能,并通过ArrayList集合管理书籍数据。核心技术包括使用Serializable接口实现对象序列化,通过ObjectInputStream/ObjectOutputStream进行文件读写,实现数据的持久化存储(保存至books.txt)。系统采用try-with-resources自动管理IO流资源,程序启动时自动加载文件数据,操作后实时保存,确保数据不丢失。
2025-08-27 12:02:43
264
原创 Java——多态和继承的关系
主要通过方法重写(子类覆盖父类方法)和接口实现完成,分为编译时多态(方法重载)和运行时多态(方法重写)。答案:封装是面向对象编程的核心概念之一,指将数据(属性)和操作数据的方法(行为)捆绑在一起,形成一个独立的单元(类)。继承允许一个类(子类)基于另一个类(父类)构建,自动获得父类的属性和方法,同时可以扩展或重写功能。我用夸克网盘给你分享了「多态训练.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。)控制外部对内部数据的访问,隐藏实现细节,仅暴露必要的接口。
2025-08-24 14:15:59
236
原创 PTA 宿舍谁最高?(Java)
学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。
2023-06-17 14:41:55
338
3
原创 PTA 分支-2 完美与普通 (java)
诺诺看到三角形,觉得很好玩。有等边三角形、直角三角形、等腰三角形……她最喜欢等边三角形,认为它是完美的,评价为“Perfect”;而直角三角形评价为“Very Good”,等腰三角形评价为“Good”,其他三角形评价为“Ordinary”。
2023-06-17 13:33:59
415
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅