自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UDP三种通信方式

广播是将数据包发送到同一网络中的所有设备。发送方将数据包发送到广播地址(如255.255.255.255),所有在同一网络中的设备都能接收到该数据包。广播适用于一对多的通信场景,但会占用大量网络带宽。发送方将数据包发送到组播地址(如224.0.0.1),只有加入该组播组的设备才能接收到数据包。组播适用于一对多的通信场景,且比广播更节省网络带宽。单播是最常见的通信方式,数据从一个发送方传输到一个特定的接收方。发送方将数据包发送到接收方的IP地址和端口号,接收方通过监听指定的端口接收数据。

2025-05-17 11:15:53 511

原创 java-----线程池

【代码】java-----线程池。

2025-05-16 14:10:46 322

原创 Java多线程售票系统实现与异常处理详解

本文介绍了如何使用Java实现一个简单的多线程售票系统,并详细讨论了异常处理机制。通过继承Thread类,使用静态变量ticket记录票数,并利用ReentrantLock确保线程安全。在run方法中,通过while循环检查票数,使用try...catch...finally块处理异常,确保锁的正确释放。主程序中创建并启动三个线程,模拟多线程售票场景。该实现展示了多线程编程的基本概念和异常处理的重要性。

2025-05-14 14:25:38 218

原创 线程的生命周期

当线程的 `run()` 方法执行完毕,或者在线程中抛出了未捕获的异常,线程就会进入死亡状态。例如,线程调用了 `sleep()` 方法,使线程暂停一段时间;在阻塞状态下,线程不会占用CPU时间片,直到导致阻塞的原因消除,线程才会重新回到就绪状态,等待CPU再次分配时间片。:当线程获得CPU时间片后,就会进入运行状态,开始执行 `run()` 方法中的代码。在运行状态下,线程会一直执行,直到 `run()` 方法执行完毕,或者因为某些原因(如调用了 `sleep()` 方法、等待资源等)导致线程暂停。

2025-05-14 12:26:34 153

原创 Java多线程实现:Thread、Runnable与Callable详解

在Java中,多线程的实现主要有三种方式:继承Thread类、实现Runnable接口和实现Callable接口。继承Thread类的方式是通过创建子类并重写run()方法,然后调用start()方法启动线程。实现Runnable接口的方式是将实现类实例作为参数传递给Thread对象,再调用start()方法启动线程。实现Callable接口的方式与Runnable类似,但Callable可以返回执行结果并抛出异常,通常与FutureTask或线程池结合使用。这三种方式各有特点,开发者可以根据具体需求选择合

2025-05-14 11:40:29 318

原创 java-----异常

表示系统级错误或者资源耗尽的状况,像OutOfMemoryError、StackOverflowError等。这类错误是程序无法处理的,通常也不应该尝试去处理。:表示程序可以处理的异常。它又能细分为::是Exception类及其子类(不包含RuntimeException)。这类异常在编译时就会被检查,必须通过try-catch捕获或者用throws声明抛出,否则程序无法通过编译,例如IOException、SQLException。

2025-05-12 16:29:38 409

原创 Java字节缓冲流高效读写文件指南

该代码展示了如何使用Java中的字节缓冲流(BufferedInputStream和BufferedOutputStream)进行文件的读取和写入操作。首先,通过BufferedInputStream从指定路径的文件中读取数据,然后使用BufferedOutputStream将数据写入到另一个文件中。代码通过循环逐字节读取文件内容,并将其写入目标文件。最后,释放资源,关闭输入输出流。这种方式相比直接使用字节流,能够提高文件读写的效率,尤其是在处理大文件时。

2025-05-10 18:27:03 197

原创 java用IO流修改文件中的数据

将排序后的整数列表写回原文件,确保数据格式与读取时一致。整个过程展示了文件读取、数据处理和文件写入的基本操作。该Java程序实现了从文件中读取数据、对数据进行排序,并将排序后的结果写回文件的功能。接着,将读取的字符串按“-”分割并转换为整数列表,使用。读取文件内容,并将其存储在。方法对列表进行升序排序。

2025-05-10 09:57:12 185

原创 Unicode字符集&字符流

FileReader和FileWriter是用于文件读写的字符流类。FileReader用于从文件中读取字符数据,FileWriter用于向文件中写入字符数据。编码与解码规则不一样。1.read():默认也是一个字节一个字节的读取的,如果遇到中文就会一次读取多个。有时候会产生乱码,产生乱码的原因:读取汉字时未读完整个汉字。2.在读取之后,方法的底层还会进行解码并跳转成十进制。UTF-8不是字符集,是一种编码方式。这个十进制的数据也表示在字符集上的数字。最终把这个十进制作为返回值。Unicode:万国码。

2025-05-08 15:09:32 154

原创 FileInputStream

如果要拷贝大文件,我们可以利用数组,但是数组也会占用内存,所以,我们经量用合适的数组。

2025-05-07 16:12:02 154

原创 FileOutputStream补充细节

不同系统的换行符不一样,但是在java底层如果你没有书写完全,也会给你补齐。

2025-05-07 15:13:37 121

原创 JAVA-----初识IO流

字节输出流FileOutputStream。这段代码的意义是在程序与文件直接建立联系。IO流:存储和读取数据的解决方案。写出一段文字到本地文件中。

2025-05-07 11:17:41 289

原创 Stream流

在实际开发中,filter方法常用于从大量数据中筛选出符合特定业务规则的数据,比如从用户列表中筛选出年龄大于 18 岁的用户,或者从订单列表中筛选出已完成的订单。在这个例子里,map(n -> n * n) 将列表中的每个整数进行平方运算,生成了一个新的包含平方值的列表。filter方法是Stream流中用于数据筛选的重要工具,它接收一个Predicate函数式接口作为参数,该接口定义了筛选的条件,流中的元素只有满足这个条件才能被保留下来。forEach方法简洁明了,

2025-05-07 10:22:28 433

原创 不可变集合的初步学习

在 Java 里,不可变集合是指集合创建之后,其内容就不能再被修改。Java 从 9 版本开始,提供了创建不可变集合的简便方法。如果集合的长度>数组的长度:数据在数组中放不下,此时会根据实际数据的个数,重新创建数组。如果集合的长度<=数组的长度:数据在数组中放的下,此时不会创建新的数组,而是直接用。toArray方法在底层会比较集合的长度与数组长度两者的大小。Map集合跟Set集合类似。此方法会把集合元素转为。

2025-04-28 13:40:34 175

原创 初识HashMap

HashMap:无序,不重复,无索引。

2025-04-25 13:55:42 111

原创 集合小练习

我们可以用一种方法来解决这种概率问题,我们定义数组,里面添加7个1和3个0,再随机的抽取数组里面的一个元素,1代表男生,0代表女生,然后用if语句来根据男生女生随机名字。我们使用remove方法,点一个从集合里面删除一个,因为要有多轮点名,所以在一轮点名结束之后,我们需要把删除的元素归还回集合。③:班级里N个学生,被点到的学生不会被点到,如果班级的学生都点完了,那么需要重写开始第二轮点名。②:班级里有N个男生,70%的概率点到男生,30%的概率点到女生。①:班级里有N个同学,实现随机点名的效果。

2025-04-23 14:58:55 203

原创 Java——可变参数

【代码】Java——可变参数。

2025-04-23 13:15:52 95

原创 TreeMap小练习

【代码】TreeMap小练习。

2025-04-23 12:18:40 208

原创 Map遍历

通过获取元素中的键,get到对应的值,通过增强for循环获取集合里的键,然后用get方法通过键获取值。跟之前的遍历差不多,原理是依次得到每一个键和值,再调用方法。通过键值对对象进行遍历。

2025-04-20 13:31:44 209

原创 Java-----双列集合(初识Map)

双列集合是 Java 集合框架中的重要组成部分,它以键值对(Key - Value)的形式存储数据,每个键对应一个值。

2025-04-20 12:04:44 246

原创 Java------初始Set集合

由于其元素存储位置是基于哈希值随机分布在哈希表中的,不存在像数组那样有逻辑顺序的索引概念,所以没有传统意义上的索引。添加元素时,根据元素的哈希值计算在数组中的索引位置进行存储。不同元素哈希值计算出的存储位置是随机分布在数组中的,和添加顺序没有必然联系,所以存和取的顺序通常不一样。当发生哈希冲突(不同元素计算出相同哈希值)时,冲突的元素会被添加到链表(或红黑树)中。3.当添加元素后,若哈希表的负载因子(已使用桶数 / 总桶数)达到阈值(默认 0.75 ) ,会进行扩容操作,重新计算元素在新数组中的位置。

2025-04-17 14:03:02 607

原创 平衡二叉树

在数据插入和删除过程中,如果数据分布不均匀,很容易出现树的高度失衡,导致树的形态偏向一侧,退化为的结构,就类型人的长短腿一样。这种非平衡的二叉树在进行查找、插入和删除操作时,时间复杂度会急剧上升。

2025-04-16 15:08:46 145

原创 java------泛型(通配符)

泛型,简单来说,就是参数化类型。在没有泛型之前,我们编写的代码往往只能处理特定类型的数据。例如,一个存储整数的列表就只能存储整数,无法存储其他类型的数据。而泛型允许我们在定义类、接口或方法时,使用类型参数来表示数据类型,这样在使用这些类、接口或方法时,可以指定具体的类型。

2025-04-15 15:23:39 130

原创 Java------Collection遍历方式

细节:报错NoSuchElementException(hasNext方法要于next方法配套使用)4.迭代器遍历时,不能用集合的方法进行增加或者删除。2.迭代器遍历完成,指针不会复位。3.循环中只能用一次next方法。方法用于检查迭代器中是否还有下一个元素,方法用于获取迭代器中的下一个元素。循环,能逐个访问集合中的元素。

2025-04-13 13:07:01 230

原创 算法小练习

当 n > 2 时,到达第 n 阶楼梯的最后一步可能是从第 n - 1 阶爬 1 阶上来的,也可能是从第 n - 2 阶爬 2 阶上来的。所以爬到第 n 阶楼梯的方法数等于爬到第 n - 1 阶楼梯的方法数加上爬到第 n - 2 阶楼梯的方法数,即 f(n) = f(n - 1) + f(n - 2)。当 n = 2 时,有两种方法:一次爬 2 阶;分两次,每次爬 1 阶,所以 f(2) = 2。当 n = 1 时,只有一种方法,即一次爬 1 阶,所以 f(1) = 1。首先找到递归的出口:第十天的时候。

2025-04-09 15:46:14 163

原创 关于Arrays的小练习

定义数组并存储对象,要求用Array中的sort方法。

2025-04-08 15:26:36 202

原创 Java------Arrays

用于复制数组,它可以创建一个新的数组,并将原数组的元素复制到新数组中,新数组的长度可以指定。(不足的用默认值0来填充)如果数组是基本数据类型的,需要变成其对应的包装类。是Arrays类中非常实用的方法之一,用于对数组进行排序。,并且针对不同类型的数组有相应的重载方法。用于在已排序的数组中查找指定元素的索引。细节:只能给引用数据类型的数组进行排序。则用于复制数组的指定范围。

2025-04-08 14:29:28 391

原创 MySQL------约束

用于唯一标识表中的每一行记录。一个表只能有一个主键,它可以由一个或多个列组成。用于建立两个表之间的关联关系。它确保一个表中的数据与另一个表中的数据保持一致。确保表中指定列的值是唯一的,但与主键约束不同的是,一个表可以有多个唯一约束。用于限制列的值必须满足特定的条件。确保表中的列不能包含NULL值。

2025-04-07 13:09:16 155

原创 Java递归算法

递归算法:简单来说,就是一个函数在其定义中调用自身的过程。这种自我调用并非无休无止,而是在满足特定的终止条件时停止。1-100之间的和=100+(1-99之间的和)1-99之间的和=99+(1-98之间的和)找规则:如何把大问题变成规模较小的问题。就像是将大事化小,小事化了的过程。找出口:什么时候不再调用方法。例如:计算1到100之间的和。

2025-04-01 15:23:51 147

原创 Java冒泡排序

冒泡排序是最经典也是最简单的排序算法,他的核心就像水中的气泡,较轻的气泡会逐渐上升到水面。在数组中,我们从第一个元素开始,依次比较相邻的两个元素,如果顺序不对(例如,在升序排序中,前一个元素大于后一个元素),则交换它们的位置。这样,每一轮比较过后,最大(或最小,取决于排序顺序)的元素就像气泡一样 “浮” 到了数组的末尾。

2025-04-01 14:37:41 101

原创 Java分块查找

为每个块创建一个索引项,索引项包含块内最大元素的值以及块的起始地址。例如,对于上述 1 - 100 分成 10 块的例子,第一个索引项可能是(10,地址 0),表示第一个块内最大元素是 10,块的起始地址是 0。利用二分查找在索引表中找到目标元素可能所在的块。例如,查找 55 时,通过二分查找索引表确定其在第 6 块。分块查找:其核心思想是将数据集合分成若干个块,每一块中的数据可以无序,但块与块之间必须有序。在确定的块内进行顺序查找,直到找到目标元素或遍历完整个块。分块查找概括就是:块内无序,块外有序。

2025-04-01 13:46:51 326

原创 MySQL日期时间函数

或 SELECT DATE_SUB(CURDATE(), INTERVAL 3 MONTH);或 SELECT DATE_ADD(CURDATE(), INTERVAL 10 DAY);SELECT DATE_FORMAT('2024-10-01', '%Y年%m月%d日');返回包含年、月、日、时、分、秒的完整时间戳,格式为 YYYY-MM-DD HH:MM:SS。一年中的第几周(00 - 53),周日为一周的第一天。一年中的第几周(00 - 53),周一为一周的第一天。

2025-03-30 15:40:50 740

原创 Spring---IoC(控制反转)

Spring提供了一种容器,称为IoC容器,用来充当IoC思想中的外部,就是将这个对象放在里面。在传统的软件开发中,组件之间的依赖关系通常是硬编码的,这使得组件之间的。对象的控制权由程序转移到外部,这种思想就叫做控制反转。

2025-03-30 15:39:34 174

原创 代码小练习

【代码】【无标题】

2025-03-30 15:02:46 207

原创 Calender类

是一个抽象类,它为我们提供了丰富的方法来操作日期和时间,像获取特定的日期字段、设置日期和时间、进行日期的加减运算等。add方法:能够对指定的时间字段添加或减去特定的时间量。在Java中,已经把这些索引定义成了常量。查表法:让数据跟数组里的索引产生对应关系。set方法:可以修改时间的年月或者日。5:一个月中的第几天(星期)4:一个月中的第几周。

2025-03-29 11:41:38 373

原创 MySQL基本函数

基本函数: 函数类别函数名称功能描述示例及结果数值函数 - 算术函数ABS(x)返回 x 的绝对值SELECT ABS(-5);返回5数值函数 - 算术函数CEIL(x)返回大于或等于 x 的最小整数SELECT CEIL(3.14);返回4数值函数 - 算术函数FLOOR(x)返回小于或等于 x 的最大整数SELECT FLOOR(3.14);返回3数值函数 - 算术函数ROUND(x, d)将 x 四舍五入到 d 位小数,省略 d 则默认四舍五入到整数SELECT ROUND(3.14159, 2);返

2025-03-25 16:00:17 477

原创 Java----用正则表达式爬取数据

在这种模式下,正则表达式会从字符串的起始位置开始,尽可能少地匹配符合模式的字符,一旦找到一个能满足匹配条件的最小子串,就停止匹配。带参数时,参数代表捕获组的编号,返回对应捕获组匹配到的子字符串。捕获组是通过在正则表达式中使用括号()定义的,捕获组编号从 1 开始,group(0)等同于无参数的group(),表示整个匹配的字符串。在这种模式下,正则表达式会从字符串的起始位置开始,尽可能多地匹配符合模式的字符,直到无法再匹配为止。例如,对于正则表达式a.*b,它会在字符串中寻找以a开头、以b结尾的最长子串。

2025-03-25 15:08:23 578

原创 MySQL多表查询

自然连接会遍历Employees表和Departments表,将Employees表中DepartmentID值与Departments表中DepartmentID值相同的行组合在一起,形成最终的结果集。所以,当我们确定合并的结果集中不会出现重复行,或者即使有重复行也不影响业务需求时,优先使用UNION ALL可以提高查询性能,减少数据库的处理开销。UNION ALL同样用于合并多个SELECT语句的结果集,但与UNION不同的是,它不会去除重复行。WHERE 子句在表连接中用于筛选符合特定条件的行。

2025-03-24 16:07:17 485

原创 Java----正则表达式的学习

插件::Any - rule 维护了一个庞大的常用正则表达式合集,涵盖了几乎所有常见的规则,如数字、字母、特殊字符的匹配,以及手机号、身份证号、社会信用代码、网址等特定格式的验证,目前已收录了 82 条常用的正则验证表达式。细节:忽略大小写的书写方式。可以忽略abc的大小写。

2025-03-24 14:54:03 184

原创 对象克隆以及BigInteger()方法,与BigDecima()方法的学习

先变成二进制的补码,再以32位为一组,再转换成十进制,正负号通过一个变量去表示,1表示正数,-1表示负数,放入数组当中。1.通过传递double类型的小数来创建对象是不精确的,不建议使用。2.通过传递字符串表示的小数来创建对象。这表示这是一个二进制的100。3.通过静态方法获取对象。

2025-03-23 14:32:58 223

空空如也

空空如也

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

TA关注的人

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