- 博客(81)
- 收藏
- 关注
原创 Java注解
Java注解是一种特殊的标记,可以附加在包、类、方法、成员变量等程序元素上,用于为代码提供额外的元数据信息。与仅供人类阅读的注释不同,注解可以被程序读取和处理,对程序的运行和开发过程有实际作用。注解使用// 注解元素// 带默认值的注解元素创建自定义注解需要使用@interface注解元素支持的类型包括:基本类型、String、枚举、Class、注解类型及它们的数组。module = "用户管理",operation = "新增用户",description = "添加新用户到系统"
2025-09-12 14:49:34
402
原创 Class类
反射是指Java在有程序运行期间拿到一个对象的所有信息。反射是为了解决在运行期间对某个实例一无所知的情况下,如何调用其方法。除了int等基本类型之外,Java的其它类型全部都是class。class是由JVM在执行过程中,动态加载的。JVM在第一次遇到某个class的时候,会把这个class加载进内存中。每加载一种class到内存中,JVM就会为该class创建一个Class类型的实例。只有JVM才能够创建Class类型的对象。每个Class对象都指向一个特定的类型,包含了该类型的完整信息。
2025-09-11 08:29:56
424
原创 Java断言
语句assert x >= 0;即为断言,断言条件x >= 0预期为true。如果计算结果为false,则断言失败,抛出AssertionError。Java断言的特点是:断言失败时会抛出AssertionError,导致程序结束退出。因此,断言不能用于可恢复的程序错误,只应该用于开发和测试阶段。断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。对于可恢复的程序错误,不应该使用断言。应该抛出异常并在上层捕获。
2025-09-09 08:54:35
150
原创 自定义异常
除了JDK自定义的异常类型之外,我们还可以自定义异常类型。我们在自定义异常类型的时候应该保持合理的异常继承体系。上述构造方法实际上都是原样照抄RuntimeException。这样,抛出异常的时候,就可以选择合适的构造方法。一般先定义一个根异常类,该类继承自RuntimeException类,再从根异常类派生其它异常类。
2025-09-09 08:42:38
142
原创 Java异常屏蔽
在 Java 中,“异常屏蔽”(Exception Suppression)主要指在异常处理过程中,后抛出的异常覆盖了先抛出的(原始)异常,导致原始异常信息丢失的现象。这通常发生在finally块或资源关闭操作中也抛出异常时。自 Java 7 起,语言提供了机制来更好地处理这种情况。
2025-09-08 09:38:21
434
原创 HTTP原理
URI全称为统一资源定位符,是用于唯一表示互联网上资源的字符串,可以把它理解为网络资源的身份证。URL和URN是URI的两种实现方式。URL不仅标识资源,并且指定了访问该资源的方式。URN只是命名了资源,但没有指定如何访问它。在互联网中,都是使用URL多,使用URN少。其中中括号代表非必要部分。
2025-09-07 23:52:07
849
原创 c++中获取随机数
在学习数据结构和算法时,我们经常需要获得测试样例,这是大概率就会用到随机数构造测试样例。接下来将介绍c和c++中获取随机数的方法。
2025-09-07 20:41:03
870
原创 Java记录类
Java记录类(Record)是Java 14引入、16正式成为标准特性的特殊类类型,主要用于简化的建模。它通过自动生成模板代码,显著减少了编写数据类所需的样板代码。
2025-09-07 17:10:21
718
原创 Javabean
如果一个class中的private字段都有对应的getter和setter,那么这种class被称为JavaBean。我们把一个private字段对应的setter和getter分别称为该字段的写/读属性。
2025-09-07 00:38:54
431
原创 Java包装类型
Java中把类型分为两种:基本类型和引用类型。包装类型的出现是为了把基本类型视为引用类型。实际上,因为包装类型非常有用,Java核心库为每种基本类型都提供了对应的包装类型。
2025-09-06 23:41:43
605
原创 Java中的字符串
Java编译器对String类型有特殊处理,可用使用"…"来表示一个字符串。实际上字符串在String内部是通过一个数组表示的。Java中字符串的一个重要特点是。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。
2025-09-06 21:27:41
577
原创 Java中的包
包是为了解决类同名的问题而诞生的。在Java虚拟机执行的时候,jvm只看完整类名,因此只要包名不同,类就不同。没有包名的class使用默认包。我们需要按照包结构把Java文件组织起来。包名对应文件夹的名字。即所有Java文件对应的目录层次要和包的层次一致。编译后的.class文件也需要按照包结构存放。
2025-09-05 22:20:11
612
原创 Java类的初始化顺序
先初始化类中的非static成员,再初始化static成员。两种成员都按照定义的顺序进行初始化。对于static成员,无论定义了多少个对象,其中的static成员只会初始化一次。类中的成员初始化完毕之后,开始执行类的构造器。类中的方法是最后被初始化的。
2025-09-01 20:44:46
188
原创 Java中数组的初始化
Java中的数组是在堆中分配内存的,并且数组大小一旦确定就不可以更改。虽然数组本身是在堆中分配内存的,但是数组引用却是在栈上分配内存的。
2025-09-01 20:28:20
235
原创 重叠IO模型
同一个线程内部向多个目标传输(或接收)数据引起的IO重叠现象称为重叠IO。调用IO函数应该立即返回,IO函数以非阻塞的模式工作。除了IO本身,如何确定IO完成时的状态也是十分重要的。
2025-08-30 22:05:47
631
原创 用户模式线程同步:关键段
关键段是用户模式下进行线程同步的方法。它不需要切换到内核模式,因此效率较高。关键段对象相当于访问临界区的一把钥匙,需要持有这把钥匙才可以进入临界区中执行代码,在执行完毕之后,需要归还钥匙以便其它线程可以持有钥匙执行临界区的代码。关键段内部使用了函数,速度非常块。关键段的缺点是无法在多个进程之间对线程进行同步。
2025-08-18 02:03:49
535
原创 基于事件的并发
简单记录,具体代码查看网络编程专栏中的select函数相关章节。基于事件的并发针对两方面的问题。一方面是多线程应用中,正确处理并发很有难度。正如我们讨论的,忘加锁、死锁和其他烦人的问题会发生。另一方面,开发者无法控制多线程在某一时刻的调度。程序员只是创建了线程,然后就依赖操作系统能够合理地调度线程。要实现一个在各种不同负载下,都能够良好运行的通用调度程序,是极有难度的。因此,某些时候操作系统的调度并不是最优的。
2025-08-18 01:40:04
489
原创 信号量的基本介绍
可以使用信号量作为锁和条件变量。信号量是有一个整数值的对象,可以用两个函数来操作它。在 POSIX 标准中,是sem_wait()和 sem_post()。因为信号量的初始值能够决定其行为,所以首先要初始化信号量,才能调用其他函数与之交互。sem_wait()要么立刻返回(调用 sem_wait()时,信号量的值大于等于1),要么会让调用线程挂起,。当然,也可能多个调用线程都调用sem_wait(),因此都在队列中等待被唤醒。该函数返回时让信号量的值减一。sem_post()并没有等待某些条件满足。
2025-08-16 20:24:22
247
原创 条件变量的基本介绍与有界缓冲区问题
多数情况下,线程需要检查某一条件是否满足之后,才会继续运行。线程可以使用条件变量来等待一个条件变成真。条件变量是一个显式队列,当某些条件不满足时线程可以把自己加入队列,等待该条件。另外某个线程改变了上述条件时,就可以唤醒一个或多个等待线程,让它们继续执行。如果没有done变量,假设子线程先运行,那么父线程就永远得不到运行。done变量记录了线程的状态,是必须的。假设在join函数中没有互斥量,那么会产生一个竟态条件。父线程在子线程前运行,在即将调用wait函数时,发生了中断使子线程运行。
2025-08-16 00:02:04
374
原创 windows线程终止
理解Windows线程终止机制对于开发稳定的多线程应用至关重要。优先让线程自然退出,确保资源正确释放避免使用TerminateThread,除非绝对必要实现优雅退出机制,使用事件或标志通知线程退出始终检查线程状态,确保预期生命周期考虑使用线程池,减少创建/销毁开销。
2025-08-09 01:05:44
477
原创 为什么通过CreateThread创建的线程调用C/C++运行库函数不稳定
在Windows编程中,直接使用创建线程并在其中调用C/C++运行时库函数确实可能导致不稳定行为,这主要与运行时库的内部实现机制有关。
2025-08-09 00:11:29
773
原创 windows线程基础
Windows线程机制提供了强大的并发编程能力,但也带来了复杂性。理解线程的基本原理、掌握同步机制、合理使用线程池是编写高效、稳定多线程程序的关键。在实际开发中,应特别注意资源同步和线程安全,避免竞态条件和死锁等问题。
2025-08-08 17:50:40
1214
原创 TCP紧急消息
TCP紧急消息提供了一种内建的优先级传输机制,但在实际应用中存在诸多限制。理解其工作原理有助于在适当场景下合理使用,但在现代网络编程中,更多是通过应用层协议来实现类似功能。紧急消息本质上是TCP协议的一种带外数据标记机制大多数实现只支持1字节紧急数据接收处理需要考虑与普通数据流的关系现代应用通常使用专用控制通道替代紧急消息正确使用TCP紧急消息可以为特定应用场景增加灵活性,但不应该依赖它来实现关键业务逻辑。
2025-08-01 01:53:52
775
原创 IO复用实现并发服务器
资源高效:单进程管理多连接编程可控:明确的事件通知机制适用场景连接数适中(数百级别)需要跨平台支持开发周期短的原型项目理解select的工作原理是掌握高性能网络编程的基础,即使在现代epoll/kqueue广泛应用的今天,select仍然是许多场景下的可靠选择。
2025-07-30 19:02:07
1005
原创 c语言获取文件大小
文件大小是文件处理中的一个基本信息,在C语言中有多种方法可以获取文件的大小。本文将详细介绍这些方法,并分析它们的优缺点和适用场景。
2025-07-30 02:03:55
847
原创 调用select之前复制fd_set
在编写使用select的程序时,经常会看到这样的模式:先将主fd_set复制到一个临时变量,然后将临时变量传递给select。这种做法看似多余,但实际上有非常重要的原因。
2025-07-28 00:20:58
751
原创 waitpid函数
waitpid精确控制:通过pid参数实现定向回收状态完备:完整处理所有可能的终止状态资源高效:合理选择阻塞/非阻塞模式异常安全:严格检查所有错误返回线程安全:多线程环境需特殊处理信号。
2025-07-22 17:46:38
737
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人