骆驼整理说
这个作者很懒,什么都没留下…
展开
-
Java异常
异常和错误原创 2025-03-09 23:24:53 · 24 阅读 · 0 评论 -
Java泛型枚举和反射
Java泛型枚举和反射原创 2025-03-09 23:12:20 · 23 阅读 · 0 评论 -
Java函数式编程
Java 8在java.util.function包中提供了一系列预定义的函数式接口,如Function<T,R>、Consumer<T>、Predicate<T>等,这些接口为常见的函数式编程任务提供了支持。下面是一个使用Java函数式编程的示例,演示了如何使用Lambda表达式和java.util.function包中的函数式接口。Java函数式编程是Java编程语言中的一种编程范式,可以将函数赋值给变量,将函数作为参数传递给其他函数,以及从其他函数返回函数。原创 2025-03-09 23:00:22 · 24 阅读 · 0 评论 -
组合优于继承,为什么不推荐使用继承?
设计模式 组合优于继承原创 2025-02-18 18:56:35 · 32 阅读 · 0 评论 -
什么是IO
IO流原创 2024-12-20 10:36:26 · 129 阅读 · 0 评论 -
跳表(Skip List)
跳表(Skip List)是一种随机化的数据结构,它结合了链表和二分查找的优点,能够在保持较低空间复杂度的同时,提供高效的插入、删除和查找操作。跳表的全称是跳跃表,它的基础是有序链表,在有序链表的基础上,增加多级索引,实现快速查找。跳表是一种随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树、AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LevelDB中都有用到。由于跳表的多级索引结构,这些操作的时间复杂度均为O(log n),其中n为跳表中元素的个数。原创 2024-12-03 16:19:54 · 66 阅读 · 0 评论 -
二叉堆树结构
下沉操作是将替换后的堆顶元素与其子节点进行比较,如果堆顶元素小于子节点(在最大堆中),则与较大的子节点交换位置,继续向下比较,直到满足堆性质或到达叶子节点。上浮操作是将新插入的元素与其父节点进行比较,如果新元素大于父节点(在最大堆中),则交换两者的位置,继续向上比较,直到满足堆性质或到达堆顶。对于每个节点i,其子节点的值(或关键字)要么都小于等于节点i的值(称为最小堆),要么都大于等于节点i的值(称为最大堆)。堆性质:对于每个节点i,其子节点的值满足最小堆或最大堆的要求。最大堆的最大元素位于堆顶。原创 2024-11-12 10:31:19 · 99 阅读 · 0 评论 -
RSA加密算法实现
rsa加密算法原创 2024-10-29 08:50:17 · 391 阅读 · 0 评论 -
对称加密算法和非对称加密算法
RSA加密算法是一种非对称加密算法。AES算法全称Advanced Encryption Standard,又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。原创 2024-10-28 23:52:55 · 196 阅读 · 0 评论 -
加密类算法
任意长度的输入经过Hash算法转化为一定长度的输出,就像读一本书,看书的操作可以理解为hash算法,总结成一本摘要就是hash值,所以hash算法也称为摘要算法或者散列算法。Hash算法的特点:不可逆,不能通过hash值计算出原本的值;效率高,hash算法通常能够快速的得到结果;冲突少,优秀的hash算法应具备的条件。原创 2022-03-08 16:22:20 · 317 阅读 · 0 评论 -
查找类算法
查找类算法 顺序查找 二分查找原创 2022-02-15 10:00:10 · 260 阅读 · 0 评论 -
字符串算法
字符串算法原创 2022-02-15 09:56:38 · 1675 阅读 · 0 评论 -
算法有哪些
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,代表着用系统的方法描述解决问题的策略机制。也就是说,算法能够对一定规范的输入,在有限时间内获得所要求的输出。算法应该具有有穷性、确切性、输入项、输出项以及可行性这五个重要的特征。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。在各个领域,算法都有着广泛的应用。例如,在数据分析与挖掘中,算法可以帮助开发人员有效地处理和分析海量数据,挖掘数据中隐藏的价值;原创 2024-10-28 23:22:42 · 177 阅读 · 0 评论 -
栈的实现方式
在编译时就确定了栈的大小,不能在运行时改变。使用一个数组来存储栈中的元素,并使用一个整型变量(如top)来记录栈顶元素的位置。数组来实现栈的进栈(push)和出栈(pop)操作示例。使用一组节点来存储栈中的元素,每个节点包含一个数据域和一个指向下一个节点的指针。链式栈的大小可以动态地根据需要增长。在某些情况下,还可以使用其他数据结构(如队列、树等)来实现栈的功能,但这些实现通常不如基于数组和链表的实现常见。原创 2024-10-28 22:26:46 · 80 阅读 · 0 评论 -
队列的实现方式
Java中队列(Queue)可以通过多种方式实现,包括使用数组、链表以及Java标准库中的Queue接口及其实现类(如LinkedList、PriorityQueue等)。原创 2024-10-28 21:21:37 · 481 阅读 · 0 评论 -
线性结构和非线性结构
数据结构是计算机存储、组织数据的一种方式,相互之间存在一种或多种特定关系的数据元素的集合。数据结构研究的内容是如何按一定的逻辑结构把数据组织起来并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。它分为线性存储结构和非线性存储结构,线性存储结构元素之间的关系是一对一的,如栈、队列,非线性存储结构每个元素可能连接零个或者多个元素,如树、图。线性结构和非线性结构是数据结构的两种基本类型,它们在组织、存储和访问数据元素的方式上有着显著的区别。数据结构和算法。原创 2024-10-28 19:40:22 · 90 阅读 · 0 评论 -
数据结构分类
数据结构(data structure)是计算机存储、组织数据的方式,是带有结构特性的数据元素的集合。是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。这种“结构”指的是数据元素之间存在的关系,分为逻辑结构和存储结构。顺序存储结构:数据元素在存储器中是连续存储的,可以借助数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。链式存储结构:每个数据元素里设置了一个指针用来指向另一个元素的存储地址,以此来表示数据元素之间的逻辑结构。图形结构:数据元素之间存在着多对多的关系。原创 2024-10-28 17:33:16 · 143 阅读 · 0 评论 -
Jdk是什么
JDK(Java Development Kit)是Java程序软件开发工具包,包含Java虚拟机、Java运行时环境JRE、Java开发工具、Java基础类库。原创 2024-10-08 18:12:52 · 283 阅读 · 0 评论 -
Java函数式编程示例
根据需要定义自己的函数式接口。只要接口中只有一个抽象方法,它就可以被视为函数式接口。// 使用 Lambda 表达式实现自定义函数式接口// 结果为 7这些特性使得程序更加简洁、易读、易维护,同时充分利用多核处理器和并行处理的能力。原创 2024-09-12 07:55:34 · 215 阅读 · 1 评论 -
双亲委派模型
像java.lang.Object 这些存放在rt.jar中的类,无论使用哪个类加载器加载,最终都会委派给最顶端的启动类加载器加载,从而使得不同加载器加载的Object类都是同一个。一个类加载器收到类加载的请求,自己不会加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,所有的加载请求最终都传送到顶层的启动类加载器中,当父加载器反馈自己无法完成这个加载请求(找不到所需的类)时,子加载器才会尝试自己去加载。它要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。原创 2024-07-31 17:19:44 · 126 阅读 · 0 评论 -
JVM的无关性
都有各自的语法规则,它们的编译器都能将各自的源码编译成符合JVM规范的 .class文件,从而能够借助JVM运行它们。Java语言中的各种变量、关键字和运算符号的语义最终都是由多条字节码命令组合而成的, 因此字节码命令所能提供的语义描述能力会比Java语言本身更加强大。无符号数:表示Class文件中的值没有任何类型,但有不同的长度,u1、u2、u4、u8分别代表1个字节、2个字节、4个字节和8个字节的无符号数。Class文件是二进制文件,它的内容具有严格的规范,文件中没有任何空格,全都是连续的0或1。原创 2024-07-31 13:18:54 · 132 阅读 · 0 评论 -
JVM组成结构
Java虚拟机,英文名Java Virtual Machine,简称JVM,主要由类加载器、执行引擎、运行时数据区以及本地接口等部分组成,这些部分共同协作,使得Java程序能够在多种平台上运行。原创 2024-07-31 13:10:26 · 362 阅读 · 0 评论 -
final、finally和finalize区别
finalize是Object类的一个方法,它在垃圾收集器执行的时候会被调用,用于在对象被垃圾收集器回收之前执行一些清理工作。但有时候,可能需要在对象被垃圾回收之前执行一些特定的清理工作,这时可以重写finalize方法。finally块通常用于执行一些清理工作,如关闭文件、数据库连接等,确保无论是否发生异常,这些清理工作都会被执行。当修饰类时,表示这个类不能被继承,即不能有子类。从Java 9开始,finalize方法已被标记为已弃用(deprecated),并在后续的Java版本中可能会被移除。原创 2024-07-23 23:52:12 · 167 阅读 · 0 评论 -
Error和Exception区别
Error类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA应用程序也不对这类错误进行捕获,一旦这类错误发生,通常应用程序会被终止,仅靠应用程序本身无法恢复;Error:主要用于表示系统级错误或资源耗尽等严重问题,这些问题通常是由JVM或者操作系统层面的错误导致的,因此程序员很难直接处理Error。Exception 类的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。原创 2024-07-23 23:45:26 · 160 阅读 · 0 评论 -
Jvm是如何处理异常的
它会从上至下匹配异常处理器,直到找到第一个能够处理该异常的catch块。如果JVM没有找到可以处理该异常的catch块,它会将该异常转交给默认的异常处理器(通常是JVM的一部分)。当Java程序运行时遇到无法处理的情况时,会抛出一个异常(比如在一个方法中如果发生异常),这时会创建一个异常对象,并转交给JVM,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。在Java中,如果一个方法可能会抛出某个异常,但该异常没有在方法内部被捕获,那么该方法必须使用throws关键字声明可能会抛出的异常类型。原创 2024-07-23 23:38:28 · 282 阅读 · 2 评论 -
Java异常实例
一连串调用,易产生NPE。Java API 提供了上百种针对不同情况的异常类型,在开发中首先尽可能使用 Java API 提供的异常,如果标准的异常不能满足你的要求,这时候创建自己的定制异常。说明:try块中的return语句执行成功后,并不马上返回,而是继续执行finally块中的语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try块中的返回点。不应该使用异常控制应用的执行流程,例如,本应该使用if语句进行条件判断的情况下,却使用异常处理,这是非常不好的习惯,会严重影响应用的性能。原创 2024-07-23 23:20:25 · 100 阅读 · 0 评论 -
Java异常有哪些
读取文件时若发生异常,代码会进入catch代码块,之后进入finally代码块,若读取文件时未发生异常,则会跳过catch代码块直接进入finally代码块。捕获那些知道如何处理的异常,将不知道如何处理的异常继续传递下去,直接抛出,在方法签名处使用throws关键字声明抛出的异常。运行时异常,不需要手工捕获,将一个不是该类的实例转换成这个类就会抛出这个异常。它是受检查异常,需要进行捕获,是在加载类的时候抛出的,即在类路径下不能加载指定的类。当访问某个类的不存在的方法时抛出该异常。发生在操作数据库时的异常。原创 2024-07-23 23:10:10 · 102 阅读 · 0 评论 -
Jdk22新特性
JDK 22作为Java SE平台的第22个版本的参考实现,引入了多项新特性,旨在提升Java语言的性能、简化开发过程以及增强代码的可读性和可维护性。提供了一种新的并发编程模型,简化了并发代码的编写和理解,通过Project Loom项目实现,旨在通过更简洁的API来编写和理解并发代码。允许使用下划线字符“_”表示未命名变量和模式,这在处理某些不需要的变量或作为模式匹配的一部分时非常有用,增强了代码的可读性和可维护性。引入了一种新的流操作,用于将流元素收集到容器中,提高了流处理的灵活性。原创 2024-07-23 22:02:02 · 222 阅读 · 0 评论 -
Jdk17新特性
JDK 17作为Java SE的一个重要版本,引入了许多新特性和改进,这些新特性旨在提升Java的性能、安全性和开发效率。原创 2024-07-23 21:54:40 · 433 阅读 · 0 评论 -
Jdk有哪些版本
JDK(Java Development Kit)是Java编程语言的软件开发工具包,版本随着Java语言的发展而不断更新,每个新版本都带来了新特性和改进。引入了多个新的特性和改进,如Unnamed Variables & Patterns(JEP 456)、String Templates(Second Preview)(JEP 459)、Implicitly Declared Classes and Instance Main Methods(Second Preview)(JEP 463)等。原创 2024-07-23 21:50:18 · 612 阅读 · 0 评论 -
Java虚拟机工作原理
JVM(Java Virtual Machine)的可以归纳为以下几个关键步骤和组成部分。原创 2024-07-23 20:46:08 · 124 阅读 · 0 评论 -
如何实现跨域
跨域实现是Web开发中常见的需求,主要涉及到不同源(协议、域名、端口三者之一不同即为不同源)之间的资源共享问题。实现跨域方案:服务器端运行跨域设置CORS等于 *;在单个接口使用注解 @CrossOrigin 运行跨域;使用 jsonp跨域。原创 2024-07-08 20:10:18 · 554 阅读 · 0 评论 -
TCP粘包
TCP粘包是指在TCP通信中,发送方发送的多个数据包在接收方被错误地合并成一个数据包的现象。原创 2024-07-08 20:00:00 · 866 阅读 · 0 评论 -
重定向(Redirect)和转发(Forward)
在HTTP通信和Web开发中,重定向(Redirect)和转发(Forward)是两种常见的导航机制,它们各自具有不同的特点和适用场景。原创 2024-07-08 19:51:54 · 962 阅读 · 0 评论 -
HTTP Client
jdk9开始引入HTTP Client标准化,jdk10开始更新。CompletableFutures提供了非阻塞请求和响应式,java.util.concurrent.Flow API提供流量控制支持,从用户请求发布者和响应订阅者,一直到底层套接字,更容易的跟踪数据流。原创 2024-07-08 19:08:19 · 1929 阅读 · 0 评论 -
Java提供的网络通信Api
在与URL的连接建立好后,可以使用URLConnection的getContent()获得该URLConnection的内容,调用getHeaderField(String name)获得指定响应头字段的值,也可以调用下列方法获得特定响应头字段的值:getContentEncoding()、getContentLength()、getContentType()、getDate()、getExpiration()、getLastModifed()。带层次的文件路径:用来定位特指的资源。原创 2024-07-08 19:06:51 · 96 阅读 · 0 评论 -
Http网络通信流程
这个请求包括请求行(包含请求方法如GET、POST,请求的URL,以及HTTP协议版本如HTTP/1.1或HTTP/2),请求头部(包含附加信息,如User-Agent、Accept等),以及可选的请求体(对于POST或PUT请求)。这个响应包括状态行(如HTTP/1.1 200 OK,表示请求成功),响应头部(包含Content-Type、Content-Length等信息),以及可选的响应体(即客户端请求的数据)。url:HTTP请求的内容的url地址,如果写作"/",表示请求默认页。原创 2024-07-08 19:02:51 · 484 阅读 · 2 评论 -
Socket网络通信流程
Socket不是一种协议,是对TCP/UDP等协议进行封装后供程序调用的接口,代码中调用相应的接口,即可将数据发送给对方,这种编程方式叫做socket编程。客户端建立一个socket,服务端建立一个socket,二者建立连接后便可以进行通信。原创 2024-07-08 18:58:19 · 385 阅读 · 0 评论 -
序列化的过程
在要序列化的类的定义中,实现java.io.Serializable接口。这个接口是一个标记接口,没有任何方法需要实现。实现这个接口告诉Java虚拟机(JVM)这个类的对象可以被序列化。如果类的字段是对象引用,那么这些引用的对象也必须是可序列化的,或者它们的字段被标记为transient(不会被序列化)。原创 2024-07-07 10:21:32 · 331 阅读 · 0 评论 -
如何验证序列化数据的完整性和真实性
序列化数据安全原创 2024-07-07 09:53:10 · 546 阅读 · 0 评论