- 博客(83)
- 收藏
- 关注

原创 枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
JVM保证的唯一性:枚举类型的每个元素都是静态的,JVM在类加载时会保证每个枚举值只被实例化一次。防止反射攻击:尽管理论上可以通过反射创建枚举的额外实例,但是Java语言规范特别指出,尝试通过反射来创建枚举实例的行为是非法的,并且会抛出异常。这意味着即使有人尝试使用反射来破坏单例模式,JVM也会阻止这种行为,从而保持枚举实现的单例模式的线程安全性。序列化安全:枚举类型是不可变的,并且JVM在反序列化时会保证枚举实例的唯一性,这使得枚举实现的单例在序列化和反序列化过程中也是安全的。
2024-11-19 13:02:00
10707
92

原创 【用Java学习数据结构系列】初识泛型
好久没有更新文章了,大概断更了20天,想着今天就写一下文章吧!最近也是又温习了一下数据结构,其实之前我写过关于数据结构的一个专栏那个专栏是写了顺序表,链表,栈和队列,但是那时是用C语言实现的,虽然数据结构不局限于语言,但是总归在语言的使用上有所不同,毕竟面向不同,一个是面向过程的C语言,一个是面向对象的Java。所以这次我打算起一个数据结构的Java专栏,当然由于之前已经写过有些地方会写得简洁一点,模糊的话大家可以去看一下前面得文章哦。今天是关于泛型的哦!
2024-07-25 17:18:27
3611
79
原创 【笑着写算法系列】位运算
位运算可以说是一个算法里面比较神奇的算法,利用这个算法可以用极少的资源来完成一些运算,主要得力于位运算的一些特殊的性质。确定一个数n的第x位二进制位是0还是1,我们可以使用((n>>x)&1))==1,来进行判断。将一个数n的第x位二进制 改成1,n=n|(1<<x)将一个数n的第x位二进制改成0,提取一个数n二进制位中最右侧的1,n&(-n)干掉一个数n二进制位中最右侧的1,n&(n-1)0^n=n;n^n=0;位图的使用:什么是位图呢,你可以理解为将一个数的二级制位如:int n。
2025-02-19 16:19:18
939
原创 【笑着写算法系列】“先苦后甜“的前缀和
前缀和一个创建辅助数组帮助我们计算的算法。常见的前缀和的题型都是需要我们直接创建一个前缀和数组方便我们去解决问题,只要前缀和数组创建好后我们对于解决题目会十分简单,且大大减少时间的花费。所以我说它是“先苦后甜”。
2025-02-18 13:09:34
722
原创 【笑着写算法系列】二分查找
这篇文章已然来到二分查找的题目,二分查找相信大家很多都听过,学校也常教,但是二分远不止学校教的那种形式简单,二分代码看着简单,但对于有些题目思想还是复杂,且细节多很容易发生死循环。了解二分的两套使用模板:int mid;如果我们将target值设为6那么,那么left和right最后的指的下标是最靠左的6int mid;这里left和right指的会是最右边的最后一个6的下标。在一个非递减的数组中,找出最左边的target和最右边的tagret下标。
2025-01-23 15:01:19
850
2
原创 【笑着写算法系列】学会滑动窗口只需七道题
直到当前right指针对应的arr[c-97]不再是0,这时会涉及到一个特殊情况,即left=right+1,count=-1的情况,但最多也就是该字母压根没在p字符串中,这时left一直移动,直到right位置的arr[c-97]++,count--后,来到right+1的位置。首先我们定义进窗口的循环,依旧是right<nums.length,我们先检测当前right的值是否为0,如果是0我们就直接count++,count指的就是0的数量,当count>k时我们就可以出窗口了,定义第二个循环。
2025-01-15 16:54:01
650
2
原创 线程状态与线程安全如何处理,内存可见性,指令重排序,sychronized,通通搞明白
如果说前两个我们无法修改,一个是操作系统层面的设置,一个是代码结构有需求要对count进行修改我们都没办法改变。那么这里的原子性操作我们是否能将不是原子的操作变成原子操作呢?答案是我们。
2024-12-29 09:52:51
1052
4
原创 【笑着写算法系列】双指针 O(n)时间复杂度的常客
从现在开始,博主决定开始将自己写的算法进行写博客输出下来,以加深印象,顺便看看给初学者一点借鉴。这个系列我会先是讲解一下概念,然后与在使用好几道题目,通过讲题给大家详细讲解如何使用正在讲解的算法进行解题。那么今天这一篇讲的就是双指算法。
2024-12-24 18:07:39
711
2
原创 进程与多线程,Thread类,线程中断(interrupt方法),CPU的随机调度之间的小关系
这是新的系列开始,进入了JavaEE的范围了,虽然已经学了挺久,但是今天才开始写博客。那么下面就来学习一下我们多线程的学习吧。在Java中,线程中断是一种协作机制,用于请求一个线程停止其正在执行的任务。中断本身不会立即停止线程,而是通过设置一个中断标志来通知线程应该停止。线程必须检查这个标志并决定如何响应。InterruptedException:当线程在阻塞状态被中断时抛出,自动清除中断标志。处理方式决定了线程是否继续执行。isInterrupted():允许线程在任何时刻检查中断标志,而不清除它。
2024-12-07 11:06:40
903
80
原创 理解反射,学会反射:撬开私有性质(private)的属性与方法
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任 意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信 息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。
2024-11-16 16:58:49
1289
32
原创 【用Java学习数据结构系列】泛型上界与通配符上界
本系列准备已经结束,反射,lambda表达示,之类知识了。本系列属于数据结构初阶,进阶的敬请期待。本文章主要是讲泛型的进一步认识,以及更加底层的String类的认识。之前也写过一篇泛型初阶的一篇文章,大家如果没看过可以再看看。包装类,简单的编译器推导,泛型的基本使用,以及泛型上界。
2024-11-04 12:37:50
818
6
原创 【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
至今为止已经写了9篇Java实现数据结构的文章了,更新的都是初阶的数据结构,今天要更新的是Map与Set,在这篇文章中会详细讲到Map与Set的关系,以及用TreeMap与HashMap是实现有什么区别。更完这一篇,初阶的数据结构也就快要更完了,预计也就有两三篇也就完成了数据结构初阶的文章了。目录什么是MapMap的接口操作TreeMap实现Map二叉搜索树搜索接口(search)插入接口(insert)移除接口(remove)TreeMap方法HashMap实现Map冲突如何减少冲突发生。
2024-10-11 12:10:02
2557
75
原创 【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
今天就写一篇关于排序的文章,本文章包含了,如标题所写的八大排序。八大排序各有各的使用场景,在某个特定场景,那么可能有一个排序就非常适合,所以排序我们是多多益善。
2024-10-01 08:45:31
2061
66
原创 【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)
上一篇文章已经给大家大致了解了一下Priority Queue以及它的底层实现---堆,但是其实大家可以发现我们上一篇文章的对象是 int 类型,所以我们进行向上调整和向下调整时我可以使用 “<” “ >” “ ==” 进行比较他们的大小进行比较调整,但是如果我们的Priority Queue 里储存的是一个对象呢?那么这时就涉及到对象的比较了。那么对象如何进行比较就往下看看这篇文章吧。
2024-09-20 17:00:23
891
12
原创 【用Java学习数据结构系列】用堆实现优先级队列
适用于给定一个数组,要将数组中的元素建成堆的形式,这时我们用向下调整的话是比较合适的,相比与向上调整是比较快的从时间复杂度上看。适用于要将数据一个一个插入,使其每次插入完成后还是堆的形式,这时因为数据通常是插入在数组尾端然后在进行调整。所以只需要调用向上调整一下为节点就可以,而这是向下调整做不到的。
2024-09-15 10:27:28
992
4
原创 【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
今天这篇文章是二叉树的第二篇文章,上一篇文章已经简单讲述了二叉树的各种遍历方法了,那么接下来就需要进阶一下,开始用二叉树的知识解决更多问题。如有哪里出现错误也欢迎指出唔。那么我们先来开始我们今天的第一道小菜。
2024-09-01 09:00:50
1691
50
原创 【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
终于到了之前C语言没有讲过的数据结构了,那就是二叉树了,关于二叉树的学习难度确实比前面学习的数据结构都要难一点,所以我们这个关于二叉树的博客大概率是有好几篇的。如有哪里出现错误也欢迎指出唔。
2024-08-19 09:47:30
1384
23
原创 【用Java学习数据结构系列】探索栈和队列的无尽秘密
前面已经给大家讲述了顺序表和链表,那么下面就到了,栈和队列,如果我们对顺序表和链表已经熟悉的话,那么我们学习栈和队列是非常轻松的。废话不多说,我们直接进入正题。
2024-08-11 09:17:16
1351
33
原创 【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
今天给大家带来一篇有关Java顺序表和链表的文章,顺序表和链表我之前的专栏也是写过的,是用C语言实现的,也是模仿实现了顺序表和链表里的方法了。你真的了解线性表中的顺序表了吗?(静态与动态顺序)-优快云博客数据结构对链表的初步认识(一)-优快云博客数据结构的带头,双向,循环链表来咯-优快云博客但是呢,学习了新语言Java那么就在用新语言在巩固一下了。基于数组:顺序表使用数组来存储元素,元素在内存中连续存放。随机访问:支持快速的随机访问,即可以直接通过索引访问任意位置的元素(时间复杂度O(1))
2024-08-07 13:44:04
2121
67
原创 【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
与C语言学习数据结构不同,Java在数据结构的学习和使用上我们必须要了解一下Java的集合框架。Java中的顺序表,链表,栈,队列,二叉树等,Java都是已经写好的了,其中队列是一个接口。那么既然Java已经实现了这些数据结构,那么我们只需要认识和会使用这些接口和类就好,那么想认识这些数据结构之前,我们必须要先了解一下Java的集合框架。集合框架是用于表示和操作集合的统一体系结构。这些是表示集合的抽象数据类型。接口允许独立于其表示的细节来操作集合。在面向对象的语言中,接口通常形成一个层次结构。
2024-08-06 18:01:06
1077
40
原创 【一步一步了解Java系列】:对这个系列的总结以及对缺漏内部类知识的补充
成员内部类成员内部类是定义在另一个类中的类。它可以访问外部类的成员变量和方法,包括私有的。它是一个静态成员,因此不能直接访问外部类的非静态成员。局部内部类局部内部类是在方法内部定义的类。它的作用域仅限于定义它的块内。它不能访问外部类的成员变量,但可以访问外部类的静态成员变量和方法。匿名内部类匿名内部类是没有名称的内部类。通常用于实现接口或继承抽象类,且只需要一次使用。它不能有构造器,但可以访问外部类的成员变量和方法,包括私有的。静态嵌套类。
2024-07-01 15:39:30
3539
75
原创 ONLYOFFICE 桌面编辑器8.1---一个高效且强大的办公软件
ONLYOFFICE 桌面编辑器经过不断的更新换代现在迎来了,功能更加强大的ONLYOFFICE 桌面编辑器8.1是一个功能强大的办公套件,专为多平台设计,包括Windows、Linux和macOS。它提供了一套全面的办公工具,包括文档处理、电子表格和演示文稿编辑功能,适合个人用户和企业使用。下面我们将着重介绍一下ONLYOFFICE 桌面编辑器8.1这次更新后它比以往版本升级了那些功能?它的强大功能体现在哪?以及如何安装。
2024-06-24 23:05:39
1417
20
原创 【一步一步了解Java系列】:认识异常类
使用的较多的异常类往往是我们自己定义的比较多,那么如何自定义异常类呢,下面我们就来讲讲如何自定义异常类。int a=0;if(a==0){如上我们只需让自己创建出的类继承Exception或其它异常类即可,这样这个类也是一个异常类了。然后我们在需要抛出异常时,抛出自己定义的异常即可。也可以用try-catch进行使用解决自己定义的异常。** 自定义异常通常会继承自 Exception 或者 RuntimeException **
2024-06-22 09:22:15
1709
37
原创 【机器学习】大模型驱动下的医疗诊断应用
传统的医疗诊断主要依赖医生的经验和专业知识,但随着医疗数据的爆炸式增长和机器学习技术的不断进步,机器学习在医疗诊断中的应用逐渐成为研究热点。3. 在肿瘤治疗中,根据患者的基因特征,模型可以协助医生制定出个性化的治疗方案,例如选择最适合患者基因特点的药物、确定最佳的治疗剂量等,从而显著提高治疗效果,减少不必要的副作用。通过分析大量的药物数据和生物数据,可以加速药物研发的进程,提高药物研发的成功率。2. 通过对海量基因数据的学习和挖掘,模型能够发现特定基因与疾病之间的关联关系,为精准医疗的实施提供重要的支撑。
2024-06-22 09:19:12
1880
37
原创 【机器学习】大模型环境下的应用:计算机视觉的探索与实践
通过在一个大型数据集上训练好的模型,可以将其用于小规模数据集的任务,从而减少训练时间和资源消耗,同时提升模型的泛化能力。传统方法主要依赖于手工设计的特征提取器和分类器,但随着深度学习方法的兴起,特别是卷积神经网络的出现,计算机视觉的性能得到了显著提升。判别器是另一个神经网络,它接收一张图像作为输入(真实的或由生成器生成的),并输出一个概率,表示输入图像来自训练数据(真实图像)的概率。在训练过程中,生成器和判别器交替训练,以便不断提升生成器生成逼真图像的能力,并提高判别器准确识别生成器生成图像的能力。
2024-06-17 08:43:06
4931
59
原创 【一步一步了解Java系列】:认识String类
在Java中String中,==的比较对于不同类型的数据比较方式是不同的,对于基本类型是比较其中的值是否相等,对于引用类型是进行比较引用的地址是否相等。请注意,StringBuffer 是Java 1.0 引入的,随着Java的发展,一些新的API和特性可能已经出现,但 StringBuffer 仍然是处理多线程字符串操作的可靠选择。注意:String是一个引用类型, 内部并不存储字符串本身,在String类的实现源码中,String类实例变量如下: 在现在的jdk中是一个byte类型的数组进行储存的。
2024-06-17 08:42:42
1424
25
原创 【一步一步了解Java系列】:探索抽象类与接口的秘密
在这个例子中,Vehicle 是一个接口,定义了一个抽象方法 drive(),一个默认方法 honk() 和一个静态方法 checkVehicle()。接口在大多数是一种过程,它只需要完成一个动作,比如walk,但是不同的对象有不同的走法,鸟是飞,蛇是爬,狗是走,这都是各不相同的,但是他们都有walk的行为,这时就需要到接口。2.在抽象类中我们可以定义抽象方法也可以定义普通的实例方法方法,但是想定义抽象方法必须在抽象类中定义。在定义类的时候在前面加上abstra,那么这个类就是抽象类简单示范一下。
2024-06-11 15:39:21
1077
5
原创 【一步一步了解Java系列】:重磅多态
当我们创建 Dog 类的实例并将其向上转型为 Animal 类型时,调用 sound() 方法会执行 Dog 类中重写的方法,而不是 Animal 类中的原始方法。由于向上转型是安全的,编译器允许这样做,并且当我们调用 makeSound() 方法时,将调用 Dog 类中重写的方法。在Java中,向上转型(Upcasting)和向下转型(Downcasting)是面向对象编程中多态性的一部分,它们允许我们处理不同类型的对象,但以更通用的类型进行操作。向上转型是安全的,因为子类是父类的特化。
2024-06-05 17:12:05
2569
61
原创 【一步一步了解Java系列】:类与对象的联系
在上方代码中我们定义了一个Student类,然后里面的成员变量有名字,那么我们还定义了一个成员方法setName,然后我们在main方法中实例化了3个对象,然后我们调用了setName方法,给每个对象起个名字。只要加上this后代码就会知道this.name指的是对象的name,单单一个name就是成员变量的name,这样就可以正确的赋值方法。emmm,在Java中有这么一句话,Java中任何东西皆可为对象,猫,狗,人,猴,洗衣机,手机,电脑,键盘等等。类是用来描述一个对象的,对象是一个真正存在的实体。
2024-05-29 08:36:28
2536
66
原创 【机器学习与大模型】驱动下的应用图像识别与处理
从自动驾驶中对交通标志和行人的识别,到医疗领域对医学影像的分析,再到智能安防中对人物和场景的判别等,大模型都极大地提高了这些应用的效果和实用性,为人们的生活和工作带来了诸多便利和进步。它能够从海量的图像数据中自动学习到丰富而细致的特征表示,无论是图像的边缘、纹理、形状、颜色等低层次特征,还是物体的类别、场景等高层次特征,都能更准确和全面地捕捉,从而为后续的识别和处理奠定坚实基础。它可以结合其他模态的数据,如文本、音频等,实现更全面和深入的图像理解与处理,提供更丰富的信息和更精准的结果。
2024-05-26 10:09:17
1455
64
原创 【机器学习与大模型】驱动下的电子商务应用
电子商务的兴起彻底改变了人们的购物方式和商业格局。在这个竞争激烈的领域中,企业不断寻求创新和优化,以提高用户体验、增加销售额和提升运营效率。机器学习和大模型作为人工智能的重要分支,正逐渐成为电子商务发展的强大驱动力。它们能够处理和分析海量的数据,挖掘潜在的规律和趋势,为电子商务企业提供更精准的决策支持和服务。 (一)机器学习的概念和方法机器学习是一门让计算机通过数据和算法进行学习和改进的科学。它包括监督学习、无监督学习、强化学习等多种方法。监督学习通过已知的输入和输出数据来训练模型,使其能够对新的数据进
2024-05-20 21:00:50
1744
72
原创 【一步一步了解Java系列】:Java中的方法对标C语言中的函数
在我看来方法就是将一些代码封装起来的一片代码块,这个代码块可以完成一个单独的功能比如:加法,加法,除法等。再比如:面向对象时有个对象的“说话”功能。是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置使用.让代码更好理解更简单.直接调用现有方法开发, 不必重复造轮子.System.out.println(year + "年是闰年");} else {System.out.println(year + "年不是闰年");
2024-05-19 14:16:18
2279
51
原创 【一步一步了解Java系列】:探索Java逻辑控制
喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。作者:小闭在 Java 中,逻辑控制主要有以下几种结构:顺序结构是最简单,也是最直观的一种结构。就是一句一句的执行代码,没有循环语句,也没有if语句。
2024-05-16 13:25:01
1011
10
原创 【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
2. 关系运算符:用于比较两个值的关系,如等于、不等于、大于、小于等。1. 算术运算符:用于执行基本的数学运算,如加法、减法、乘法、除法和取模(取余)等。在计算机中数据的储存都是以0,1的形式进行储存,而按位或 | 就可以让两个数据进行运算.5. 自增和自减运算符:用于增加或减少变量的值,例如 ++ 表示自增,-- 表示自减。在计算机中数据的储存都是以0,1的形式进行储存,而按位与 &就可以让两个数据进行运算。2. 比较操作:比较运算符(如>、<、>=、<=等)用于比较两个值的大小关系。
2024-05-12 18:14:42
2277
64
原创 【一步一步了解Java系列】:探索Java基本类型转换的秘密
喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。作者:小闭。
2024-05-06 22:24:13
2797
62
原创 【一步一步了解Java系列】:探索Java基本类型与C语言的区别
喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。作者:小闭。
2024-04-29 12:58:26
1499
15
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人