自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 在JAVA中Mybatis的使用

本文介绍了MyBatis框架的基本配置与使用。主要内容包括:1)配置MyBatis依赖项和数据库连接;2)创建DAO层工具类实现SQLSession管理;3)定义Mapper接口及XML映射文件;4)SQL语句的编写与参数传递方式;5)动态SQL标签的使用(if、where、set、trim、foreach等)。文章详细说明了如何通过MyBatis实现CRUD操作,处理多表关联查询,以及使用动态SQL简化开发工作。重点介绍了MyBatis的核心配置、结果集映射、事务管理以及多种参数传递方法,为开发者提供了完

2025-09-01 21:44:37 1053

原创 mysql笔记

本文介绍了MySQL数据库的基础知识与应用开发要点。主要内容包括:数据库的作用与重要性(数据保存、完整性、共享性等);MySQL的安装配置步骤;常见数据类型(数值、字符串、日期时间等);以及数据库约束类型(主键、外键、唯一、非空等)。文章重点讲解了如何初始化MySQL服务、修改密码、处理常见错误,并详细说明了各种字段类型的特点和适用场景。最后,对外键约束的概念和使用方法进行了专门说明,为数据库设计和开发提供了基础指导。

2025-08-21 18:59:25 793

原创 Java中JDBC的使用

本文介绍了JDBC(Java Database Connectivity)的基础知识与应用。主要包括:1)JDBC的基本概念和核心接口(DriverManager、Connection、Statement、ResultSet);2)连接MySQL数据库的具体步骤和代码示例;3)三层架构实现学生管理系统的项目案例;4)SQL注入问题的原理与解决方案(PreparedStatement);5)连接池技术(C3P0和Druid)的使用方法。文章通过完整的代码示例,展示了从基础连接到实际项目开发的全过程,重点讲解了

2025-08-21 18:51:05 722

原创 使用单调栈解决力扣第42题--接雨水

本文介绍了单调栈的概念及其在算法问题中的应用。单调栈是指栈内元素保持单调递增或递减的数据结构,可分为严格单调和非严格单调两种形式。文章通过两个具体问题展示了单调栈的实用价值:1)寻找数组中每个元素左侧第一个比它大的元素,将暴力解法的O(n²)时间复杂度优化为O(n);2)解决LeetCode第42题"接雨水"问题,通过维护左右两侧的最大值单调栈,计算每个柱子能接的雨水量。作者提供了完整的Java代码实现,并分析了算法优化的思路,展示了单调栈在提升算法效率方面的优势。

2025-08-10 17:59:18 538

原创 JAVA中关于Stream流的使用

文章摘要: 本文介绍了Java中Stream流的使用及其优势。首先通过传统集合操作与Stream流对比,展示了Stream流更优雅的函数式编程风格。详细讲解了Stream的获取方式、常用方法分类(终结与非终结方法),以及forEach、filter、limit等核心操作的使用。同时阐述了Stream的注意事项,包括只能操作一次、返回新流、惰性求值等特性。最后还介绍了并行流的使用方法,通过多线程提升处理效率。Stream流通过链式调用和函数式编程,使数据处理逻辑更加清晰简洁。

2025-08-10 15:45:33 482

原创 Java Lambda表达式:简洁高效的函数式编程

Java Lambda表达式与函数式接口摘要 Lambda表达式是Java 8引入的匿名函数,用于简化函数式编程。其语法为(parameters)->expression,可替代传统匿名内部类写法,使代码更简洁。函数式接口(@FunctionalInterface)是仅含一个抽象方法的接口,支持Lambda实现。Java.util.function包提供常用函数式接口:Supplier(无参有返)、Consumer(有参无返)、Function(类型转换)、Predicate(条件判断)和Compar

2025-08-07 18:58:42 621

原创 Java中的反射机制

摘要: Java反射机制允许程序在运行时动态获取类信息并操作类对象,包括实例化、访问属性和调用方法。通过Class类可获取构造方法(Constructor)、成员变量(Field)和方法(Method),支持动态创建对象(如clazz.newInstance())和绕过封装访问私有成员(setAccessible(true))。反射适用于不确定类名的场景(如Spring IOC容器、JDBC驱动加载),提升灵活性,但会破坏封装性并带来性能损耗。典型应用包括工厂模式优化和框架设计,需权衡灵活性与安全性。

2025-08-07 18:41:28 971

原创 JAVA中关于多线程的学习和使用

文章摘要:本文系统介绍了Java多线程编程的核心概念与技术。主要内容包括:1.线程基础概念,解释进程与线程的关系;2.四种线程创建方式(继承Thread类、实现Runnable/Callable接口、线程池);3.线程常用方法(命名、休眠、优先级、守护线程等);4.线程同步机制(synchronized关键字和Lock锁);5.线程生命周期状态;6.线程池原理及四种类型(FixedThreadPool、CachedThreadPool等)的实现与使用。

2025-08-06 18:58:20 1054

原创 字符串匹配--KMP算法

KMP算法是一种高效的字符串匹配算法,通过利用已匹配部分的信息避免不必要的回溯。其核心是构建next数组,记录模式串的最长公共前后缀,从而在匹配失败时快速调整模式串位置。相比暴力匹配O(n*m)的时间复杂度,KMP算法优化至O(n+m)。实现包括两部分:1)计算next数组;2)利用next数组进行匹配。虽然原理复杂,但掌握后能显著提升字符串处理效率。学习时建议理解算法逻辑而非死记模板,通过手动演算加深理解。该算法在编程竞赛中应用广泛,值得深入学习。

2025-08-05 19:07:52 704

原创 加密与安全

本文介绍了编码算法和哈希算法的基本原理及其应用。在编码算法部分,详细讲解了ASCII、Unicode、URL编码和Base64编码的实现方式与使用场景。哈希算法部分阐述了其核心特性(相同输入固定输出、不同输入大概率不同输出)、哈希碰撞原理,以及MD5、SHA等常见算法的应用,包括文件校验和密码存储的安全实践。此外,文章还介绍了Hmac算法作为更安全的密钥哈希方案,以及BouncyCastle提供的扩展算法支持。最后简要说明了对称加密算法(如AES)的工作模式(ECB/CBC)和实现方法,强调密钥长度对安全性

2025-08-01 17:48:25 763

原创 Java网络编程 TCP与UDP协议

本文介绍了计算机网络和网络编程的基础知识。主要内容包括:1. 计算机网络概念,互联网作为网络的网络,TCP/IP协议的重要性;2. IP地址的类型(IPv4/IPv6、公网/内网)及子网划分原理;3. 网络分层模型(OSI和TCP/IP模型);4. TCP和UDP协议的特点及区别;5. Java网络编程实现,包括TCP编程(ServerSocket/Socket)和UDP编程(DatagramSocket/DatagramPacket)的基本用法,涵盖服务器端和客户端的创建、数据传输等核心操作。文章提供了J

2025-07-31 20:50:37 692

原创 Excel文件解析

/创建工作簿//创建工作表//创建行//根据行创建单元格//填充值}finally {;try (//创建工作簿){//创建单元格表头样式//设置单元格的水平对齐类型为居中对齐//设置单元格的垂直对齐方式为居中对齐//设置字体样式//是否加粗//颜色设置为红色//创建工作表XSSFSheet sheet=workbook.createSheet("礼品金额表");//创建行//根据行创建单元格。

2025-07-30 21:24:22 771

原创 JSON在java中的使用

本文介绍了JSON与Java对象之间的转换方法,包括JSONObject和JSONArray的使用。主要内容有:1) 将JavaBean转为JSON字符串(toJSONString);2) JSON字符串与JavaBean互相转换(parseObject);3) 处理JSON数组(parseArray)并转为List集合;4) 处理嵌套JSON对象并转为Map集合。通过示例代码演示了如何获取JSON中的特定字段值,以及使用TypeReference处理复杂类型的转换。这些方法实现了Java对象与JSON格式

2025-07-29 19:58:45 291

原创 文件操作与IO流

【摘要】本文介绍了Java中文件操作的核心类File及其常用方法。主要内容包括:1)File类的基本概念和创建方式;2)文件信息获取(名称、大小、修改时间等);3)目录操作(list/listFiles);4)文件判断(exists/isFile/isDirectory);5)文件创建与删除;6)Files工具类的字符/字节操作;7)IO流体系(InputStream/OutputStream/Reader/Writer)及其缓冲流的使用;8)Properties类的属性操作。文章通过实例代码演示了文件读写

2025-07-29 19:48:10 403

原创 Map集合

本文介绍了Java中Map集合的常用操作,重点讲解了HashMap、LinkedHashMap和TreeMap的特点及使用方法。HashMap是无序的键值对集合,通过示例展示了put、get、remove等基本操作以及遍历方式;LinkedHashMap保持插入顺序;TreeMap支持排序,使用自定义比较器实现对象排序。此外还介绍了Collections工具类的常用方法,如排序、查找、交换、乱序等集合操作。文章内容涵盖Map集合的核心操作和实用技巧,适合Java开发者参考使用。

2025-07-27 18:04:45 410

原创 Set集合

摘要:本文介绍了Java中三种Set集合的特点与用法。HashSet无序且元素不可重复,通过hashCode和equals方法判断重复性;LinkedHashSet继承HashSet但保持插入顺序;TreeSet可排序,需通过Comparable或Comparator提供排序规则。文章演示了集合的基本操作(添加、删除、遍历)和对象排序的实现方式,特别展示了使用Comparator对自定义类Book对象按价格排序的示例。三种Set都保证元素唯一性,区别主要在于排序和存储顺序特性。

2025-07-27 16:40:55 148

原创 List集合

本文介绍了Java中两种重要的List实现类ArrayList和LinkedList。ArrayList基于动态数组实现,具有快速随机访问(O(1))和高内存连续性等优点,但在插入删除时需要移动元素;LinkedList基于双向链表实现,插入删除效率高(O(1))但随机访问慢(O(n))。文章详细分析了二者的常用方法、扩容机制、优缺点比较,并通过教室座位比喻形象说明了数组和链表的区别。最后作者提出将二者优势结合的构想,并预告后续将发布相关数据结构实现的文章。

2025-07-23 20:32:54 918

原创 Exception捕获异常

自定义异常BaseException应该提供多个构造方法}else {throw new AgeException("年龄不符");

2025-07-22 21:39:37 141

原创 mysql笔记

MySQL数据库基础操作指南 本文档介绍了MySQL数据库的基础操作,包括安装配置、数据类型、约束条件和表操作等内容。主要涵盖MySQL的安装步骤(初始化、服务安装、密码修改)、常见错误处理方案,以及详细的字段类型说明(数值、字符串、日期时间等类型)。文档还详细讲解了七种约束条件及其应用场景,包括主键、外键、唯一性等约束的使用方法。最后提供了完整的表操作命令,包括创建表、修改表结构、更新数据、删除表和数据插入等常用SQL语句模板,为数据库开发人员提供了实用的操作参考。

2025-07-21 20:00:51 1095

原创 BigInteger、BigDecimal、Enum枚举类以及其他工具类的使用

本文介绍了Java中处理大数和随机数的工具类。BigInteger用于表示任意大小的整数,提供加减乘除等运算方法;BigDecimal则用于高精度浮点数计算,支持四舍五入等精确操作。枚举类(enum)用于定义固定集合的值,支持switch语句和方法重写。随机数部分介绍了Random类生成伪随机数的方法,以及更安全的SecureRandom类,后者提供不可预测的安全随机数。这些工具类为Java开发者提供了处理特殊数值类型和安全随机数生成的有效解决方案。

2025-07-21 19:15:10 403

原创 十大经典排序算法 Python与JAVA双语言的实现

插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。② 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。

2025-07-20 19:03:40 1108

原创 String类、String其他类与Integer类的使用

本文摘要:本文系统介绍了Java中String类、StringBuffer/StringBuilder类、StringJoiner类和Integer类的核心用法。String类部分详细讲解了多种创建方式及其区别、常用方法(如replace、split、format等),以及编码转换。StringBuffer和StringBuilder部分重点对比了两者的线程安全性和性能差异,并演示了字符串操作方法。StringJoiner类展示了高效的字符串拼接技巧。Integer类章节涵盖了创建方式、自动装箱拆箱、进制转

2025-07-20 17:35:10 269

原创 面向对象中static,package,作用域,内部类

本文摘要:Java面向对象编程中的static关键字、包机制与内部类三大核心概念。1.static部分详解静态成员变量的共享性、静态方法的调用限制(不能使用非静态成员/this),以及静态代码块的初始化特性(类加载时执行、优先于构造代码块)。2.包机制部分说明package解决命名冲突的原理,包作用域的访问规则,以及import的三种使用方式(完整类名/简单类名/静态导入)。3.内部类部分对比普通内部类(依赖外部实例)、匿名内部类(一次性实现接口)和静态嵌套类(独立类可访问外部静态成员)的差异,重点分析它们

2025-07-18 21:04:37 830

原创 抽象类与接口

由于多态的存在,每个子类都可以重写父类的方法,例如,Shape分类派生的Circle和Triangle子类都可以都可以覆写draw()方法。@Override@Override如果父类Shape的draw()方法没有需要执行的代码逻辑,能否去掉方法体中的执行语句?答案是不行,因为会导致编译错误,因为定义方法的时候,必须实现方法的语句。能不能去掉父类的draw()方法?答案还是不行,因为去掉父类的draw()方法,就失去了多态的特性。

2025-07-17 19:41:40 616

原创 面向对象--多态

在上一个文章中,我们已经知道,引用变量的声明类型可能与其实际类型不符,那么,一个实际类型为Shape,引用类型为Circle的变量,调用其draw()方法,调用的是Shape还是Circle的draw()方法?Override重写与Overload重载不同的是:如果方法签名不同,就是Overload重载,Overload重载方法是一个新方法;因此可以得出结论:Java的实例方法调用的是基于运行时的实际类型的动态调用,而非变量的声明类型。注意:方法名相同,方法参数也相同,但方法的返回值不同,也是不同的方法。

2025-07-17 19:00:30 222

原创 Java面向对象--继承的使用

类型的实例,对它进行操作,是没有问题的。@Override也可以不加,但若是不加的话,如果重写方法时方法的签名不同,系统不会报错。发生在子父类中,父类提供的方法不能满足子类的需求,此时,可以在子类中对此方法进行重写。除了将父类中的方法进行重写外,还可以将超类中的方法进行重写,如。方法的重写要求 方法名,参数项,返回值类型,修饰符都一样。如果想要使用子类自己独有的成员变量和方法,需要进行向下转型。向下转型:将对外声明的父类类型的对象,转回到具体的子类。如果此方法有变量,则优先使用此方法的局部变量。

2025-07-16 19:40:21 405

原创 Java中面向对象的使用--封装与构造方法

本文摘要: Java面向对象编程基础,包含类与对象的基本概念和实现方式。重点介绍了:1)类的定义语法,包括成员变量和方法的声明;2)对象创建和成员访问方法;3)构造方法及其重载特性;4)封装技术的实现,通过private修饰成员变量并提供getter/setter方法;5)this关键字的使用场景;6)静态代码块和构造代码块的区别;7)通过超市商品管理系统案例演示了类的实际应用。文章完整展示了Java面向对象的核心概念和实现细节,适合初学者系统学习类与对象的基础知识。

2025-07-15 19:02:09 395

原创 MySql数据库的安装详细教程

MySQL安装与配置简明指南:通过官方Installer下载,选择典型安装模式。关键步骤包括:1)安装时勾选蓝框组件;2)配置环节保持默认设置;3)设置root账号密码;4)添加bin目录到系统环境变量。验证安装时使用命令"mysql -hlocalhost -u root -p123456",退出时输入quit/exit/\q。注意:学校环境默认密码为123456,安装路径和密码设置需特别注意。

2025-07-14 20:25:40 338

原创 Java中方法的使用

参数项:0-n个参数,每个参数用逗号分隔,参数类型 参数名;* 方法体:n行代码,如果方法有返回值,return 给返回值。修饰符 返回值类型 方法名(参数1,...参数n){方法运行的顺序和方法定义的顺序无关,和方法的调用顺序有关。* 1,在一个方法中只能有一个动态参数。* 方法定义的位置:类内部,方法外部。* 方法调用时,方法名参数项必须一致。* 方法执行次数和调用次数保持一致。* 方法名:见名之意,小驼峰命名。* 方法调用完成返回回到原调用处。* 方法不调用不执行。方法中动态参数的使用。

2025-07-14 20:21:24 181

原创 对于数组的操作

本文介绍了数组操作的多种方法:1) 合并数组的三种方式(两次循环、一次循环、Math.max比较);2) 合并有序数组保持有序性的算法;3) Knuth洗牌算法实现数组随机化;4) 数组左右旋转操作;5) Arrays类常用方法(排序、查找、复制、比较等);6) 二维数组的初始化、赋值和两种遍历方式(for循环和foreach)。这些方法涵盖了数组的基本操作和常见应用场景。

2025-07-14 18:23:32 222

原创 Java基础-循坏迭代语句

摘要:本文介绍了Java中的三种循环语句(for、while、do...while)的语法及适用场景:for用于确定循环次数,while适用于不确定次数,do...while至少执行一次。通过冒泡排序、双指针查找和二分查找等算法演示了循环的实际应用,最后展示了使用冒泡排序对联系人名单按首字母排序的实例。

2025-07-11 20:21:24 118

原创 第十六届蓝桥杯python组B组第七题

先来说说就解决问题的思路,题目既然说原始序列就是从1~n之间的一个递增序列,那么我们可以将输入的这串数字进行遍历,若数列的第i个元素n不等于i+1,那么就直接访问第n-1个元素,以递归的方式继续去访问下一个元素,结束条件为第第i个元素n等于i+1或是第n-1个元素已经被访问过了,这里就需要注意,我们需要建立一个列表来保存每个数字访问的状态。对于30% 的评测用例,1 ≤ n ≤ 103 ,1 ≤ ai ≤ n ,a1;对于所有评测用例,1 ≤ n ≤ 106 ,1 ≤ ai ≤ n ,a1;

2025-04-19 18:37:04 502

原创 Python蓝桥杯基础练习——杨辉三角满分代码

通过题目我们可以发现,我们可以将它理解为一个二维列表:[[1],[1,1],[1,2,1],[1,3,3,1],~,],通过观察我们不难发现,后一个小列表的第一位与最后一位都是1,所以当我们每次在大列表中追加小列表时,我们可以令小列表的第一位为1,然后取追加的小列表的前一小列表的所有值并且将相邻的两个加在一起,最后再追加一个1,再将生成的小列表追加到大列表之中。杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

2023-03-01 20:15:09 516

原创 使用scrapy爬取平凡的世界

使用scrapy爬取平凡的世界全系列内容

2022-10-01 23:12:21 365

原创 爬取下厨房美食的本周最受欢迎的菜品并且存储到Excel文件中

爬取下厨房美食的本周最受欢迎的菜品并且存储到Excel文件中

2022-09-02 16:07:43 545

原创 下载王者荣耀高清壁纸

一共有两种下载方法,一种单线程下载,一种多线程下载,运行时须创建image文件夹

2022-08-29 15:19:01 2678 1

空空如也

空空如也

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

TA关注的人

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