- 博客(44)
- 收藏
- 关注
原创 SpringMVC 常用注解速查:解决编码中 90% 的问题
在 SpringMVC 的开发过程中,注解是提高开发效率和代码简洁度的关键。本文将带你快速了解并掌握 SpringMVC 中的常用注解,让你在实际项目中能够得心应手地运用它们。
2025-03-11 14:11:56
1065
21
原创 垃圾回收: JVM帮程序员做了什么?
内存管理是编程中更为关键的环节。JVM内置的垃圾回收器和算法能有效管理内存,减少泄漏风险。因此,本篇博客将重点聚焦于JVM的垃圾回收机制。
2025-03-03 09:18:26
1009
21
原创 JVM类加载三步解读: 双亲委派模型如何维护Java生态
Java是面向对象编程,一切皆对象。这些对象是如何从一堆代码变成程序中的一部分?Java虚拟机(JVM)在这个过程中扮演了至关重要的角色。当你的代码通过编译器转换成.class文件,再到运行时的动态加载,JVM内部的类加载机制确保了这一切的顺利进行。本文将带你探索Java类加载,从类的加载、连接到初始化,一步步解读JVM如何管理类的生命周期。
2024-12-09 17:53:10
1437
17
原创 不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)
在(上)篇和(中)篇博客中,我们初步了解了HTTP协议的基本工作原理,包括它的工作过程,学习了如何使用Fiddler这个强大的抓包工具来捕捉和分析网络请求与响应。现在让我们继续深入,探讨与Cookie以及状态码等更为深入的内容。
2024-12-09 10:15:00
1177
23
原创 一文搞懂HTTPS:从加密到安全通信
在互联网的世界里,信息安全至关重要。HTTPS作为HTTP的安全版本,为我们的数据传输提供了一层保护。本文将详细解析HTTPS的工作原理,从加密的基本概念到HTTPS如何确保数据的安全传输,让你一文搞懂HTTPS。
2024-12-02 15:44:36
1653
27
原创 不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)
🙉在(上)篇博客中,我们初步了解了HTTP协议的基本工作原理,包括它的工作过程,学习了如何使用Fiddler这个强大的抓包工具来捕捉和分析网络请求与响应。现在让我们继续深入,探讨与URL、HTTP方法(Method)、Cookie以及状态码等更为细节的内容。
2024-11-25 17:22:30
1077
22
原创 不只是请求和响应:使用Fiddler抓包HTTP协议全指南(上)
通过这篇博客,你将学会如何通过抓包工具捕捉、分析甚至修改这些报文,不仅能够洞察网络通信的细节,还能够在必要时进行干预。无论你是学习者还是应用者,这些技能都将是你的宝贵财富。
2024-11-25 10:15:00
1506
9
原创 IP数据包的分包与组包:网络通信的幕后英雄
在网络通信的世界里,数据的传输并非总是一帆风顺。有时,数据需要被分割成更小的单元,以便在复杂的网络环境中顺利传输。这个过程,就是我们今天要探讨的IP数据包的分包与组包。
2024-11-16 17:00:18
1432
13
原创 TCP(下):三次握手四次挥手 动态控制
经过上篇TCP的初步介绍与了解,本篇中我们将重点展开包括三次握手四次挥手的过程、滑动窗口、流量控制与拥塞控制、延迟应答、粘包等问题,这些都是TCP协议的关键组成部分。
2024-11-16 13:53:10
1185
13
原创 TCP(上):成熟可靠的传输层协议
TCP(传输控制协议)是位于传输层的通信协议,是一种的传输层通信协议。主要负责在不可靠的网络环境中提供可靠的端到端字节流传输服务。TCP是互联网协议套件的核心组成部分,它为应用程序提供了一种可靠的数据传输服务,确保数据在不同网络设备间正确、完整地传输。深入探讨TCP,有几个核心概念和机制是不可忽视的。包括TCP的过程,它们在网络通信中扮演着至关重要的角色。除此之外,还有等问题,这些都是TCP协议的关键组成部分。
2024-11-08 18:02:46
1525
19
原创 UDP协议:报文结构和注意事项
在网络编程中,UDP(用户数据报协议)以其轻量级和高效性而著称。这篇博客我们就来探讨UDP的报文结构,以及在使用UDP时需要注意的一些关键事项。
2024-11-08 15:49:34
950
1
原创 UDP 实现的 Echo Server 和 Echo Client 回显程序
UDP(User Datagram Protocol)是一种无连接的网络协议,它在 IP 协议的基础上提供一种快速、简单的数据传输服务。与 TCP 协议不同,UDP 不建立连接,不保证数据的可靠传输,因此适用于对实时性要求高、可以容忍一定数据丢失的应用场景,如视频会议、在线游戏等。
2024-10-28 15:06:51
962
4
原创 网络通信的基石:网络的基本概念
在信息化的今天,网络通信就像是城市的交通系统,它负责信息的传递和交换。为了确保这个系统的顺畅运行,我们需要一些基本的规则和概念。这篇博客就来深入探讨这些构建网络世界的基石。
2024-10-28 14:15:00
1129
3
原创 【Java】IO流:InputStream与OutputStream实战指南
InputStream和OutputStream作为Java I/O体系结构中的基石,定义了操作字节流的基本接口。通过它们的各种实现类,我们可以轻松地与不同类型的输入和输出源进行交互,无论是文件、网络还是内存缓冲区。
2024-10-23 14:49:12
1323
3
原创 IO、存储、硬盘:解析文件系统和File类
在计算机科学中,IO(输入/输出)、存储、硬盘和文件系统是构成计算机数据处理和存储的基础。本文将探讨这些概念,特别是文件系统的工作原理和相关知识。
2024-10-23 14:32:18
920
9
原创 【Java】ThreadPoolExecutor创建一个忽略最新任务的线程池
程序输出将显示每个任务的执行情况,但由于使用了 DiscardPolicy() 拒绝策略,当任务队列满时,新提交的任务将被丢弃,因此不是所有的任务都会被执行.
2024-10-12 17:09:10
994
4
原创 常见锁策略总结:从悲观锁到自旋锁
在多线程编程的世界中,锁策略的选择对于确保数据一致性、提高系统性能以及优化资源利用至关重要。每种锁策略都有其独特的应用场景和性能考量。随着我们对这些锁策略的深入理解,我们可以更加精准地选择或设计适合特定应用需求的同步机制。这些策略都是我们在构建高效、稳定系统时的重要工具。
2024-10-12 14:15:00
1684
3
原创 【Java】并发革命:线程池
尽管线程的生命周期管理比进程更为轻量,但在高频率操作下,其效率仍然有待提高。 为了应对这一挑战,线程池技术应运而生。线程池的核心思想是复用,它将不再忙碌的线程保存起来,而不是销毁。当新任务到来时,线程池会重用这些线程,避免了频繁地进行系统级创建和销毁操作。
2024-10-09 13:52:50
1305
9
原创 【Java】线程暂停比拼:wait() 和 sleep()的较量
wait()是Object类的一个方法,它使得调用它的线程释放对象的锁,并进入对象的等待池(wait set)。
2024-09-22 19:32:28
1335
7
原创 代码陷阱:多线程中的死锁危机
死锁是多线程编程中的一个复杂问题,但是通过理解其产生的原因和条件,我们可以采取有效的策略来避免或解决它。在实际编程中,合理地设计资源的分配和访问策略,是避免死锁的关键。同时,利用现代并发库提供的工具和类,可以帮助我们更好地管理和协调多线程之间的资源访问,从而减少死锁的发生。希望这篇博客能为你理解多线程编程中的死锁提供一些帮助。如有不足之处请多多指出。我是高耳机。
2024-09-18 15:54:26
986
7
原创 【Java】synchronized 基础线程安全
Java 提供了多种机制来处理线程安全问题,其中关键字是最常用和最基础的一种。本文将介绍线程安全问题的原因,并解释关键字如何帮助解决这些问题。线程安全问题通常发生在多个线程同时访问和修改共享数据时,如果没有适当的同步机制,就可能导致数据不一致、程序崩溃或其他不可预测的行为。
2024-09-18 09:30:00
435
9
原创 【Java】线程状态:线程生命周期的六个阶段
了解这些状态及其转换条件对于编写高效且无错误的多线程应用程序至关重要。本文将总结Java线程的几种状态,每种状态的含义,以及状态之间的切换条件。
2024-09-16 18:06:49
935
3
原创 【Java】多线程:Thread类并行宇宙
线程是提高程序性能和响应能力的一种重要手段。Java 通过Thread类和Runnable接口提供了丰富的线程管理功能。本文是对Thread类基本用法的总结。
2024-09-16 17:46:46
908
3
原创 进程vs线程:高效并发编程的基石
随着单核CPU的发展逐渐遇到瓶颈,多核cpu的出现为世界打开了一扇门,而并发编程则是那把提高效率,优化资源的使用和充分地利用多核资源的钥匙,而系统调度并发编程资源中进程和线程的区别和联系,是本文需要探讨的问题。线程虽比进程轻量,但人们还不满足,于是又有"线程池"(TreadPool) 以及"协程"(Coroutine)的出现,为进程调度提供了更多的解决方案,在本文中我们先不做讨论.
2024-09-15 17:23:06
606
4
原创 操作系统的心脏:进程调度的基本过程
了解进程调度对我们了解计算机以及进行多线程编程大有帮助!在操作系统中,进程是系统分配资源的最小单位,线程是系统调度的最小单位;进程包含线程,每个进程至少存在一个线程,即主线程;同一个进程的线程之间共享一个内存空间;
2024-09-15 17:06:41
735
1
原创 【数据结构】使用堆实现 求最小K个数
因此,总的时间复杂度为 O(n * log(n) + k * log(n))。如果 k 远小于 n,那么算法的时间复杂度可以近似为 O(n * log(n))。因此,整个算法的时间复杂度为 O((N - K) * log(k) + k * log(k)),其中 N 为数组的长度 arr.length,k 为要求的最小元素个数。如果 k 远小于 n,那么算法的时间复杂度可以近似为 O((N-K) * log(K))。此时将堆顶元素出堆,遍历到的数组元素入堆,最终堆中就是要求的前K个最小元素;
2024-06-04 13:01:16
572
1
原创 【数据结构】从前序与中序遍历,或中序与后序遍历序列,构造二叉树
需要注意的是,由于postIndex根据后序遍历(左,右,根)创建,与前序遍历相反,所以每次递归时postIndex--,从根节点前的右子树开始递归;同样的,已知根节点,则右子树表示范围为(rootIndex + 1,inEnd);已知根节点,则左子树的范围表示为(inBegin,rootIndex - 1);同样的,根据后序遍历可以确定根节点,再在中序遍历中通过根节点确定左树和右数;设立inBegin和inEnd,通过这两个参数的游走,来进行子树的创建;通过递归调用,即可不断创建子树,直到叶子节点;
2024-06-04 07:00:00
636
1
原创 【Java】高效解决 非降序数组合并 两种方法
合并两个有序数组是个经典问题,它不仅在算法学习中频繁出现,也在实际开发中经常遇到。在Java中,我们有一些方法可以解决这个问题,每种方法都有其独特的优势和适用场景。第二种,使用双指针思想,从末尾开始同时对比nums1与nums2,将较大值放入nums1的末尾,同时对应数组长度-- ,来达到排序的目的。首先是第一种,先将两个有序数组合并到nums1中,接着调用Array.sort()方法进行排序,这种方法简单易懂,很容易想到。希望这篇博客能为你理解java编程思想提供一些帮助。希望我们彼此都有更好的收获。
2024-05-11 17:28:59
243
3
原创 【Java】图书管理系统 介绍与实现
图书馆作为知识的殿堂和学术的中心,其管理系统不仅是图书馆管理的必备工具,更是为用户提供优质、高效服务的重要保障,促进了知识的传播和学术的发展。随着信息量的急剧增长和用户需求的多样化,传统的图书馆管理方式已经难以满足现代社会的需求。因此,引入一套高效、智能的图书馆管理系统变得尤为迫切。在本篇博客中,我们将探讨如何构建一套易用便捷的图书馆管理系统。我们将从系统的需求分析开始,一步步领略图书馆管理系统背后的编程思想。相信本文能为您带来新的启发和思考。该代码主要涉及了类和对象继承和多态抽象类和接口这些编程思想。
2024-04-29 19:58:44
570
7
原创 【Java】探索封装:解锁代码保险柜,保护你的数据隐私
欢迎浏览高耳机的博客希望我们彼此都有更好的收获在JAVA面向对象编程中,封装是一种将数据和方法捆绑在一起并对外部隐藏其内部细节的重要概念。它提供了一种保护数据和方法的机制,使得对象的实现细节被封装在对象内部,从而增强了代码的安全性、可维护性和可复用性。
2024-04-19 19:00:00
884
2
原创 【Java】位运算如何优化你的代码性能
位运算是一项强大而神秘的工具。你可能熟悉加法、减法、乘法和除法等常见的算术运算,但是位运算却是一种不同寻常的计算方式,它涉及到数字的二进制表示形式,以及一系列高效的操作。Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位。字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
2024-04-09 19:00:00
1170
8
原创 【C语言】深度剖析:结构体内存对齐原理与实践
C语言中,结构体(struct)是一种用户定义的数据类型,允许你将不同类型的数据组合在一起,形成一个新的数据类型。结构体由多个成员变量组成,每个成员变量可以是不同的数据类型。你可以使用结构体来表示复杂的数据结构,比如表示学生信息、坐标点、汽车属性等。在本篇博客中,我将重点介绍结构体的内存布局以及对齐方法(重点)结构体的内存布局以及对齐对齐规则为什么存在内存对齐? 例如描述一个学生:结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 再例如: 在这个示例中,我们定义了一
2024-03-10 20:36:58
1364
20
原创 【C语言】判断一个字符串是否为另外一个字符串旋转之后的字符串。
当需要找到AABCD旋转后的字符串时,结果必定包含在AABCDAABCD中,也就是将原字符串再追加一遍。因此,我们可以用到strcat函数,来帮我们实现追加字符串的功能。例如:给定s1 = AABCD和s2 = BCDAA,返回1。给定s1 = abcd和s2 = ACBD,返回0。AABCD左旋一个字符得到ABCDA。AABCD左旋两个字符得到BCDAA。AABCD右旋一个字符得到DAABC。
2024-03-08 15:45:00
405
3
原创 【C语言】atoi:隐藏的数值转换宝藏函数
atoi是 C 语言标准库函数,用于将字符串转换为整数。这个函数原型定义在头文件中。atoi的名称代表 "ASCII to Integer",即从 ASCII 字符串转换到整数。它是处理字符串和数字之间转换的常用函数之一。
2024-03-08 14:00:00
579
5
原创 【C语言】计算机大小端字节序的奥秘
在计算机科学中,数据存储的方式对应着不同的字节序(Byte Order),其中最常见的是大端字节序(Big Endian)和小端字节序(Little Endian)。这两种字节序决定了数据在内存中的存储顺序和组织方式。让我们来了解一下什么是大小端字节序以及它们在计算机系统中的作用。
2024-03-06 09:30:00
408
9
原创 【C语言】神奇的分割利器:strtok函数解析
strtok函数是C语言中一个用于分割字符串的函数。它被包含于头文件中。它可以将一个字符串按照指定的分隔符进行分割,每次调用返回被分割出的部分,并在内部记录当前位置,以便下一次调用时能够继续分割。
2024-03-06 09:15:00
7316
8
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人