自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java】线程暂停比拼:wait() 和 sleep()的较量

wait()是Object类的一个方法,它使得调用它的线程释放对象的锁,并进入对象的等待池(wait set)。

2024-09-22 19:32:28 976 5

原创 代码陷阱:多线程中的死锁危机

死锁是多线程编程中的一个复杂问题,但是通过理解其产生的原因和条件,我们可以采取有效的策略来避免或解决它。在实际编程中,合理地设计资源的分配和访问策略,是避免死锁的关键。同时,利用现代并发库提供的工具和类,可以帮助我们更好地管理和协调多线程之间的资源访问,从而减少死锁的发生。希望这篇博客能为你理解多线程编程中的死锁提供一些帮助。如有不足之处请多多指出。我是高耳机。

2024-09-18 15:54:26 909 6

原创 【Java】synchronized 基础线程安全

Java 提供了多种机制来处理线程安全问题,其中关键字是最常用和最基础的一种。本文将介绍线程安全问题的原因,并解释关键字如何帮助解决这些问题。线程安全问题通常发生在多个线程同时访问和修改共享数据时,如果没有适当的同步机制,就可能导致数据不一致、程序崩溃或其他不可预测的行为。

2024-09-18 09:30:00 393 8

原创 【Java】线程状态:线程生命周期的六个阶段

了解这些状态及其转换条件对于编写高效且无错误的多线程应用程序至关重要。本文将总结Java线程的几种状态,每种状态的含义,以及状态之间的切换条件。

2024-09-16 18:06:49 514 2

原创 【Java】多线程:Thread类并行宇宙

线程是提高程序性能和响应能力的一种重要手段。Java 通过Thread类和Runnable接口提供了丰富的线程管理功能。本文是对Thread类基本用法的总结。

2024-09-16 17:46:46 856 2

原创 进程vs线程:高效并发编程的基石

随着单核CPU的发展逐渐遇到瓶颈,多核cpu的出现为世界打开了一扇门,而并发编程则是那把提高效率,优化资源的使用和充分地利用多核资源的钥匙,而系统调度并发编程资源中进程和线程的区别和联系,是本文需要探讨的问题。线程虽比进程轻量,但人们还不满足,于是又有"线程池"(TreadPool) 以及"协程"(Coroutine)的出现,为进程调度提供了更多的解决方案,在本文中我们先不做讨论.

2024-09-15 17:23:06 545 2

原创 操作系统的心脏:进程调度的基本过程

了解进程调度对我们了解计算机以及进行多线程编程大有帮助!在操作系统中,进程是系统分配资源的最小单位,线程是系统调度的最小单位;进程包含线程,每个进程至少存在一个线程,即主线程;同一个进程的线程之间共享一个内存空间;

2024-09-15 17:06:41 659

原创 【数据结构】HashMap及HashSet

欢迎浏览高耳机的博客希望我们彼此都有更好的收获。

2024-07-09 15:15:00 1034 1

原创 【数据结构】TreeMap及TreeSet

欢迎浏览高耳机的博客希望我们彼此都有更好的收获。

2024-07-09 15:00:00 797 2

原创 【数据结构】使用堆实现 求最小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 545 1

原创 【数据结构】从前序与中序遍历,或中序与后序遍历序列,构造二叉树

需要注意的是,由于postIndex根据后序遍历(左,右,根)创建,与前序遍历相反,所以每次递归时postIndex--,从根节点前的右子树开始递归;同样的,已知根节点,则右子树表示范围为(rootIndex + 1,inEnd);已知根节点,则左子树的范围表示为(inBegin,rootIndex - 1);同样的,根据后序遍历可以确定根节点,再在中序遍历中通过根节点确定左树和右数;设立inBegin和inEnd,通过这两个参数的游走,来进行子树的创建;通过递归调用,即可不断创建子树,直到叶子节点;

2024-06-04 07:00:00 556 1

原创 【数据结构】栈和队列的相互实现

欢迎浏览高耳机的博客希望我们彼此都有更好的收获。

2024-05-23 20:25:19 503 4

原创 【Java】高效解决 非降序数组合并 两种方法

合并两个有序数组是个经典问题,它不仅在算法学习中频繁出现,也在实际开发中经常遇到。在Java中,我们有一些方法可以解决这个问题,每种方法都有其独特的优势和适用场景。第二种,使用双指针思想,从末尾开始同时对比nums1与nums2,将较大值放入nums1的末尾,同时对应数组长度-- ,来达到排序的目的。首先是第一种,先将两个有序数组合并到nums1中,接着调用Array.sort()方法进行排序,这种方法简单易懂,很容易想到。希望这篇博客能为你理解java编程思想提供一些帮助。希望我们彼此都有更好的收获。

2024-05-11 17:28:59 205 3

原创 【Java】图书管理系统 介绍与实现

图书馆作为知识的殿堂和学术的中心,其管理系统不仅是图书馆管理的必备工具,更是为用户提供优质、高效服务的重要保障,促进了知识的传播和学术的发展。随着信息量的急剧增长和用户需求的多样化,传统的图书馆管理方式已经难以满足现代社会的需求。因此,引入一套高效、智能的图书馆管理系统变得尤为迫切。在本篇博客中,我们将探讨如何构建一套易用便捷的图书馆管理系统。我们将从系统的需求分析开始,一步步领略图书馆管理系统背后的编程思想。相信本文能为您带来新的启发和思考。该代码主要涉及了类和对象继承和多态抽象类和接口这些编程思想。

2024-04-29 19:58:44 537 7

原创 【Java】探索封装:解锁代码保险柜,保护你的数据隐私

欢迎浏览高耳机的博客希望我们彼此都有更好的收获在JAVA面向对象编程中,封装是一种将数据和方法捆绑在一起并对外部隐藏其内部细节的重要概念。它提供了一种保护数据和方法的机制,使得对象的实现细节被封装在对象内部,从而增强了代码的安全性、可维护性和可复用性。

2024-04-19 19:00:00 844 2

原创 【Java】位运算如何优化你的代码性能

位运算是一项强大而神秘的工具。你可能熟悉加法、减法、乘法和除法等常见的算术运算,但是位运算却是一种不同寻常的计算方式,它涉及到数字的二进制表示形式,以及一系列高效的操作。Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位。字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。

2024-04-09 19:00:00 1032 8

原创 【C语言】深度剖析:结构体内存对齐原理与实践

C语言中,结构体(struct)是一种用户定义的数据类型,允许你将不同类型的数据组合在一起,形成一个新的数据类型。结构体由多个成员变量组成,每个成员变量可以是不同的数据类型。你可以使用结构体来表示复杂的数据结构,比如表示学生信息、坐标点、汽车属性等。在本篇博客中,我将重点介绍结构体的内存布局以及对齐方法(重点)结构体的内存布局以及对齐对齐规则为什么存在内存对齐? 例如描述一个学生:结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 再例如: 在这个示例中,我们定义了一

2024-03-10 20:36:58 1258 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 390 3

原创 【C语言】atoi:隐藏的数值转换宝藏函数

atoi是 C 语言标准库函数,用于将字符串转换为整数。这个函数原型定义在头文件中。atoi的名称代表 "ASCII to Integer",即从 ASCII 字符串转换到整数。它是处理字符串和数字之间转换的常用函数之一。

2024-03-08 14:00:00 534 5

原创 【C语言】计算机大小端字节序的奥秘

在计算机科学中,数据存储的方式对应着不同的字节序(Byte Order),其中最常见的是大端字节序(Big Endian)和小端字节序(Little Endian)。这两种字节序决定了数据在内存中的存储顺序和组织方式。让我们来了解一下什么是大小端字节序以及它们在计算机系统中的作用。

2024-03-06 09:30:00 390 9

原创 【C语言】神奇的分割利器:strtok函数解析

strtok函数是C语言中一个用于分割字符串的函数。它被包含于头文件中。它可以将一个字符串按照指定的分隔符进行分割,每次调用返回被分割出的部分,并在内部记录当前位置,以便下一次调用时能够继续分割。

2024-03-06 09:15:00 3845 7

原创 【C语言】模仿qsort的功能实现一个通用的冒泡排序

qsort函数是C语言标准库中提供的一个快速排序函数,定义在stdlib.h头文件中。它可以对数组进行排序,用户可以定义排序的规则。qsort函数的使用灵活性高,不仅可以用于基本数据类型的排序,还可以用于结构体或其他自定义类型的排序。nmembsizesizeofcomparb知道了基本原理,现在我们需要模仿qsort的功能实现一个通用的冒泡排序;

2024-03-02 21:40:53 339 6

原创 【C语言】初学者了解 指针 及应用

在C语言中,指针是一种非常重要且强大的概念,它可以让我们直接访问和操作内存中的数据。理解和运用指针是C语言编程中的重要一环,能够帮助我们更灵活地操作内存和数据,提高程序的效率和灵活性。

2024-03-02 21:13:45 1119 11

原创 【C语言】代码实现 扫雷 游戏及进阶功能(初学者详解)

扫雷游戏的起源可以追溯到20世纪60年代,当时这款游戏是由IBM开发出来的。在80年代初,微软公司将其收归旗下,并将其作为Windows操作系统自带的一款游戏。自此以后,扫雷成为了Windows用户最喜欢的休闲游戏之一,也受到了全球范围内的玩家喜爱。现在,我们使用C语言,来实现一个简单的扫雷游戏。

2024-01-01 19:13:53 1349 10

原创 【C语言】分支和循环(初学者简明介绍)

通过键盘输入定义常量,来选择需要执行的分支,可以实现单独执行某条功能,退出分支等功能;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断;for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分;do...while中,执行先循环,再判断,与while、for语句相反;if 语句可以实现分支选择、循环嵌套等功能,是C语言中最常用的分支语句;执行循环后,若表达式为真,则继续循环,若为假,则结束循环;⾸先执⾏判断表达式,若表达式的值为0,循环直接结束;

2023-12-02 19:24:55 180 3

空空如也

空空如也

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

TA关注的人

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