- 博客(35)
- 收藏
- 关注
原创 HTTP 1.0 时代,第一次优化
这时期的使用非常简单,请求 HTML 页面,浏览器发送 GET 请求,服务器返回 HTML 内容;请求图片,浏览器再次发送 GET 请求,服务器返回图片数据。显而易见地,就有比较多的缺点,比如多次连接导致延迟和带宽浪费,又比如无法并行处理多个请求,影响加载速度。HTTP 是 “HyperText Transfer Protocol” 的缩写,即超文本传输协议。
2025-04-10 22:22:53
291
原创 计算机网络起源
从1960年代的计算机技术和分组交换技术,到1971年电子邮件的发明,再到1989年万维网的诞生,互联网在这段时间内经历了从军事用途到科研工具,再到大众化信息平台的转变。这一系列突破不仅为互联网的发展奠定了坚实的技术基础,也改变了人类交流和获取信息的方式。互联网从一个简单的数据传输网络,逐渐演变成了一个连接全球的超级信息网,深刻影响了世界的方方面面。
2025-04-10 22:15:39
438
原创 Java的四种内部类各有其用,别再记错了
Java 内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。每种类型都有其特定的用途和优缺点,选择合适的类型可以提高代码的灵活性和可维护性。
2025-04-10 22:10:16
552
原创 Java中的Exception和Error有什么区别?还有更多扩展
在Java中,Exception和Error都是Throwable的子类,用于处理程序中的错误和异常情况。
2025-04-10 22:00:34
204
原创 为什么Java不支持多继承,却支持多实现?
所谓的菱形问题(又称钻石问题)就是,A类有一个方法a,B,C继承了A类,并重写了方法a,此时如果一个D类继承了B和C类,那么调用D类时,关于方法a的默认实现就会出现二选一的问题。这导致方法调用的不明确,增加代码的复杂性和维护难度。Java8之前接口中的每个方法都需要实现类去实现,而 Java8 及之后的版本中虽然有了默认方法了,但在实现类中如果发现多个接口定义了相同的方法签名,就会报错。多实现是指可以继承多个接口。
2025-04-10 21:46:40
165
原创 Java的三大特性详解
Java的三大特性是面向对象编程的核心概念:封装、继承和多态。这些特性为软件开发提供了强大的工具,帮助创建灵活、可维护和可扩展的代码结构。
2025-04-10 21:45:07
323
原创 HTTP 1.0和2.0 有什么区别?
HTTP 2.0通过多路复用、二进制传输、头部压缩、服务器推送和强制加密,显著提升了性能和安全性。虽然需要服务器和客户端的支持,但其优势在现代Web应用中尤为突出,特别是在复杂资源加载的环境下。HTTP 2.0的引入极大优化了用户体验,成为现代网络不可或缺的一部分。HTTP 1.0和HTTP 2.0是互联网中用于数据传输的重要协议,两者在功能和性能上有显著差异。
2025-03-26 21:30:57
304
原创 Java中的序列化和反序列化,一次讲清楚
在 Java 中,当一个对象被序列化时,它会包含一个 serialVersionUID 值,这个值用于在反序列化时验证序列化对象和当前类的版本一致性。
2025-02-23 17:06:06
832
原创 二叉树的广度优先遍历(层序遍历)
这种遍历不再按照父子节点的关系进行遍历,而是按照二叉树的节点层级,一层一层横向遍历各个节点,因此这种遍历也被称为。当我们遍历完当前层的所有节点后,我们将当前层的列表添加到结果列表中,并继续处理下一层的节点,直到队列为空。对于每个节点,我们将其值添加到当前层的列表中,并将其子节点(如果存在)添加到队列中。在while循环中,我们获取当前队列的大小(即当前层的节点数),然后遍历这些节点。在Java中,树的层序遍历通常使用队列(Queue)来实现。然后,我们创建一个队列并将根节点添加到队列中。
2024-03-31 17:16:31
558
原创 二叉树的深度优先遍历(前中后)
在上面的代码中,我们定义了preorderTraversalRecursive、inorderTraversalRecursive和postorderTraversalRecursive三个方法,分别用于前序、中序和后序遍历。对于前序遍历,我们先访问根节点,然后递归遍历左子树,最后递归遍历右子树。对于中序遍历,我们先递归遍历左子树,然后访问根节点,最后递归遍历右子树。对于后序遍历,我们先递归遍历左子树,然后递归遍历右子树,最后访问根节点。前序遍历是先输出根节点,再输出左子树,最后输出右子树。
2024-03-31 17:15:48
337
原创 树和二叉树
二叉树(Binary Tree)是树形结构的一个重要类型,它的特点是每个节点最多有两个子节点,通常被称为左子节点和右子节点。2.当n>1时,其余节点可分为m个互不相交的有限集,每一个集合本身又是一棵树,并称为根的子树。1.有且仅有一个特定的称为根的节点。树的最大层级数,被称为树的。树是n个节点的有限集。
2024-03-29 19:52:57
317
原创 栈的定义和基本操作
栈(Stack)是一种特殊的线性数据结构,它遵循后进先出(LIFO,Last In First Out)的原则。栈中的数据元素被称为栈元素,栈的顶部元素是最后入栈的元素,也是最先出栈的元素;而栈的底部元素是最先入栈的元素,但是只有在栈中其他元素都出栈后才能出栈。栈的基本操作主要包括入栈(Push)和出栈(Pop)。入栈操作是将一个新元素添加到栈的顶部;而出栈操作则是移除栈顶部的元素,并返回该元素的值。除了这两个基本操作外,栈还支持查看栈顶元素(Peek)以及判断栈是否为空(IsEmpty)等操作。
2024-03-21 21:15:07
490
原创 Java数组与链表的深度对比
数组和链表各有其优缺点,适用于不同的场景。在选择使用哪种数据结构时,需要根据具体需求进行权衡。如果数据量固定且需要频繁访问元素,数组可能是一个更好的选择;如果需要动态地添加或删除元素,或者在链表中间位置进行插入或删除操作,链表则更为合适。
2024-03-21 21:09:27
553
原创 链表的定义和基本操作
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。它由一系列节点组成,每个节点包含两部分:数据域,用于存储数据元素;指针域,用于存储指向下一个节点的地址。链表在插入操作时可以达到O(1)的复杂度,但在查找或访问特定节点时则需要O(n)的时间。链表的主要特点是允许在任意位置插入和删除节点,从而实现了灵活的内存动态管理,克服了数组需要预先知道数据大小的缺点。链表有多种类型,包括单向链表、双向链表、循环链表等,每种类型都有其特定的应用场景和优势。
2024-03-21 21:04:34
189
原创 数组的定义和基本操作
数组(Array)是程序设计中一种非常重要的数据结构,它用于存储多个相同类型的数据元素,并且这些数据元素按照一定的顺序排列。通过为有限个类型相同的变量赋予一个统一的名称(即数组名),并使用编号(即下标)来区分这些变量,数组提供了一种方便的方式来管理和操作这些元素。数组中的每个元素都可以通过其下标进行访问,这使得我们可以快速地读取、修改或执行其他操作。数组的长度一旦确定,就不能再修改。在内存中,数组会占据一整块连续的空间,而数组名则引用这块连续空间的首地址。
2024-03-21 21:03:35
370
原创 建造者模式:构建复杂对象的艺术
建造者模式是一种非常实用的设计模式,它允许我们以一种灵活且易于管理的方式构建复杂对象。通过将构建过程封装在单独的构建类中,我们可以确保构建过程的清晰性和正确性,同时还可以避免客户端代码与复杂对象构建逻辑的紧密耦合。在软件开发中,当需要处理具有多个属性和复杂构建顺序的对象时,建造者模式通常是一个很好的选择。
2024-02-19 14:45:14
324
原创 快速掌握工厂模式
在软件工程中,工厂模式是一种创建型设计模式,用于处理对象的创建过程。它提供了一种将对象创建与其实现分离的方法,使得客户端代码不需要知道具体的类,只需要与工厂接口交互即可。这种模式在复杂的对象创建过程中尤其有用,例如在需要根据不同条件创建不同类型的对象时。
2024-02-18 10:37:03
888
原创 单例模式的5种实现方式,最后一种最推荐
单例模式有多种实现方式,选择哪种方式取决于你的具体需求。如果你希望在程序启动时就创建实例,可以选择饿汉式;如果你希望在需要时才创建实例,可以选择懒汉式、静态内部类或枚举。在多线程环境下,需要注意线程安全问题。希望本文能帮助你更好地理解和使用单例模式。
2024-02-18 09:58:39
3610
原创 设计模式分类(23种设计模式,3大分类)
在软件开发的世界里,设计模式是一种被广泛认可的解决方案,用于解决在特定上下文中反复出现的软件设计问题。它们是一套经过优化并被证明有效的设计经验,可以帮助开发者编写出更加清晰、灵活和可重用的代码。
2024-02-13 10:38:52
641
原创 UML类图:可以清晰描述类的标准图形
UML类图是一种用于描述系统中类的静态结构的图形表示。它展示了类、接口、以及它们之间的各种关系,如继承、聚合和关联等。通过类图,开发人员可以更清晰地理解系统的结构和行为。UML类图是理解和设计软件系统结构的重要工具。通过图形化的方式展示类和它们之间的关系,开发人员可以更加直观地理解系统的结构和行为,从而更有效地进行设计和开发。
2024-02-10 16:42:50
1240
原创 UML概述:统一建模语言的魅力与实践
在软件开发领域,统一建模语言(Unified Modeling Language,简称UML)已经成为一种广泛采用的可视化建模工具。UML不仅提供了一种统一的表示法从各个方面描述软件系统,还帮助开发人员更好地理解、设计和实现复杂的软件系统。在本文中,我们将深入探讨UML的基本概念、特点和实际应用。
2024-02-10 16:08:13
468
原创 Java开发必会的反编译知识
将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的机器语言的程序的过程就是编译。
2024-02-04 14:46:44
698
原创 什么是Servlet?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,你可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。Servlet 有权限访问所有的 Java API,包括访问企业级数据库的 JDBC API。Servlet 是服务 HTTP 请求并实现接口的 Java 类。
2022-09-25 20:06:37
248
原创 JVM内存结构(Java8之前版本)
对于Java程序员来说,JVM相关的知识不管是面试还是写代码都有可能会用到,所以今天就来记录一下这方面的知识。首先上图为了方便记忆,我用红色表示线程私有,而绿色表示线程共享的模块。PS一般来说,堆的内存空间总是最大的,因为虚拟机将各种各样的对象都放在这里。PSJVM是一种抽象的概念和规范,这就和unicode是一种编码规范,我们使用的时候就是UTF-8,UTF-16等具体实现类似。如图所示,这篇文章里,我们只研究HotSpot虚拟机。...
2022-02-18 22:34:27
358
原创 Springboot 监听同一个RabbitMQ的多个虚拟主机Virtual-Host
目录配置信息application.properties配置类RabbitMqConfig监听消息示例场景:需要监听 同一个RabbitMQ下的 不同的虚拟主机下的 队列 来完成数据流转配置信息application.propertiesmy.rabbitmq.host=你的ipmy.rabbitmq.port=你的portmy.rabbitmq.username=你的usernamemy.rabbitmq.password=你的passwordmy.rabbitmq.first.virt
2020-07-23 11:21:11
3815
8
空空如也
在word 的 openXml中,仅凭代码能确定段落的改变吗?
2025-02-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人