- 博客(43)
- 收藏
- 关注
原创 HTTP协议格式
HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在浏览器中输入一个 "网址" (URL) 时,浏览器就会给相应的服务器发送一个 HTTP请求,该服务器也返回一个 HTTP 响应。这个响应结果被浏览器解析之后,就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器会对应返回多个响应,这些响应里就包含了页面 HTML,CSS,JavaScript,图片,字体等信息)。
2024-07-06 12:04:45
1031
原创 CSS选择器的常见用法
css选择器用于选择要应用样式的HTML元素,它是CSS样式表的核心组成部分。它可以通过选择特定的html元素进行css样式的修改,将html和css代码可以分开,降低耦合便于开发。
2024-07-06 12:03:19
740
原创 数据链路层相关知识
数据链路层是计算机网络体系结构中的第二层,负责实现数据在物理层上的传输。在数据链路层中,数据被组织成帧(frame),并且通过MAC地址来进行寻址,以确保数据包能够被正确地发送到目标主机。数据链路层的主要功能包括帧的封装和解封装、数据传输的错误检测和校正、流量控制和访问控制等。通过数据链路层的工作,可以实现高效可靠的数据传输,保证网络通信的稳定性和顺畅性。数据链路层是OSI模型中的第二层,负责在直接相连的两个节点之间传输数据。
2024-06-01 11:34:06
630
原创 IP 协议的相关特性
IP 协议是一个网络层协议,负责在不同网络之间传输数据包。它定义了数据包的格式、路由和传输规则,确保数据包能够正确传递到目的地。IP 协议为每个连接到互联网的设备分配唯一的 IP 地址,以便设备之间能够相互通信。IP 协议作为因特网中相当关键的网络层协议之一,它确保了数据包在网络中的传输和路由选择,为不同网络设备的连接提供了基础支撑。
2024-06-01 10:49:19
961
原创 HTTPS 的加密流程
HTTPS 工作过程中涉及到的密钥有三组。第一组(非对称加密): 用于校验证书是否被篡改。第二组(非对称加密): 用于协商生成对称加密的密钥。第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密。HTTPS是当前互联网上广泛使用的安全通信协议,对于保护用户隐私和数据安全至关重要。
2024-05-27 21:10:58
1408
1
原创 TCP协议的相关特性
总的来说,TCP 是一种可靠、面向连接的传输层协议,通过提供可靠传输、连接管理,拥塞控制、流量控制、差错检测与重传等机制,确保数据在网络中的可靠传输和有效交互。
2024-05-27 16:39:33
1262
原创 java中的字节流和File类
File类是Java中用来表示文件或目录的类,它提供了一系列方法来操作文件和目录。但File类并不是一个真正的文件对象,它只是一个用于操作文件的引用。它允许你访问和修改文件的属性,如名称、路径、权限等,以及执行一些基本的文件操作,如创建、删除、移动文件或目录字节输入流(InputStream)是Java中用于从输入源读取字节数据的抽象类。它是所有字节输入流类的超类,提供了一系列方法来读取字节数据。FileInputStream是字节输入流的一种,用于从文件中读取字节数据。
2024-05-03 13:04:14
942
1
原创 文件相关常识
本文主要对一些有关文件的基础知识进行了简单的概述和总结,大部分的知识都可以留下一个简单印象即可。有想了解的内容,可以更深层地阅读有关书籍和文章。
2024-05-03 11:24:49
600
1
原创 网络中的基本概念
计算机网络是将多台计算机通过通信设备连接在一起,实现数据交换和资源共享的系统。这些通信设备通过不同规模和范围的网络使用不同的网络协议进行通信。路由器、交换机、网桥等网络设备用于实现数据包的转发、路由和交换。网络会根据你的ip地址和端口号定位到你的设备,从而能够对你发送一些数据。
2024-05-02 10:42:54
599
1
原创 UDP的报文结构和注意事项
UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的数据传输服务,不保证数据的可靠传输。在网络通信中,UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用,如音频、视频传输等。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,用于在网络上传输数据。UDP报文结构简单,包含源端口号、目的端口号、长度和校验和字段。使用UDP需要注意处理数据的丢失、重复、乱序等问题,以及保证数据的完整性和正确性。
2024-05-02 10:05:35
1320
原创 synchronized的使用与总结
在 Java 中,是一个用于实现同步和线程安全的关键字。它主要用于控制多个线程访问共享资源时的访问冲突,确保在任一时刻只有一个线程能够执行特定代码段,从而避免并发问题。是 Java 中实现线程同步的一个基础且广泛使用的关键字。它通过确保原子性、可见性和可重入性,为多线程环境下的共享资源访问提供了基本的保护。同时,开发者需要了解其特性和局限性,以便在不同的场景下选择最合适的同步机制。
2024-04-23 16:06:29
753
原创 HashMap,HashTable与ConcurrentHashMap
名称HashMapHashtable是否线程安全非线程安全线程安全,所有方法都进行了同步处理线程安全,采用了分段锁的机制允许null键值允许null键值不允许null键值允许null键值性能HashMap在单线程环境下性能较高,但在多线程环境下需要额外的同步措施来保证线程安全。由于Hashtable的所有操作都是同步的,因此在单线程环境下性能通常比HashMap差。
2024-04-23 16:06:11
798
3
原创 CAS解析和 synchronized 优化过程
CAS(Compare-And-Swap)是一种乐观锁机制,用于实现对共享变量的原子操作。CAS 通过原子性地比较内存中的值和预期的值,当两者相等时,更新内存中的值为新值。CAS 操作包括三个步骤:读取变量当前值、比较变量当前值和期望值、更新变量值。如果当前值等于期望值,则更新变量值,否则重试。CAS 操作是在硬件层面上提供的原子操作,可以保证并发访问下的数据一致性。CAS 操作包含三个参数:内存位置(V),预期原值(A)和新值(B)。读取内存位置 V 的当前值。检查当前值是否与预期原值 A 相等。
2024-04-21 14:52:49
928
原创 总结线程池
线程池是多线程编程中常用的工具,能够有效管理线程并提高程序性能。合理使用线程池可以避免线程创建和销毁的开销,提高系统的稳定性和效率。线程池注意有两种创建方式,具体选择哪一种可以根据自己的需求来判断。
2024-04-21 11:38:53
953
原创 java线程的几种状态
目录正文:1.JConsole2.新建状态(New)3.运行状态(Runnable)4.阻塞状态(Blocked)5.等待状态(Waiting)6.计时等待状态(Timed Waiting)7.终止状态(Terminated)总结:JConsole是Java监控和管理控制台工具,是Java Development Kit(JDK)中自带的一个图形化工具,用于监视和管理Java应用程序的性能和资源消耗情况。通过JConsole,可以实时查看Java虚拟机(JVM)的运行状态、线程信息、内存使用情况、类加载信息
2024-04-05 14:07:53
769
原创 Thread的基本用法
Thread类是Java中实现多线程编程的重要类之一,通过Thread类可以创建、启动和控制线程的执行。在多线程编程中,合理使用Thread类可以实现并发执行、资源共享和协作等功能。
2024-04-05 14:07:35
980
原创 单例模式的多种写法
单例模式是一种常用的设计模式,通过保证一个类只有一个实例,提供全局访问点,方便对实例进行管理。在Java中,可以通过不同的实现方式来创建单例对象,每种实现方式都有其优缺点。在应用中,需要根据实际情况选择合适的单例实现方式,并注意线程安全和内存管理问题。
2024-04-04 16:45:15
975
原创 线程的安全问题
线程安全问题是指在多线程环境下,当多个线程同时访问共享资源时可能导致的数据不一致、竞态条件、死锁等问题。为了解决线程安全问题,可以使用同步机制(如关键字、等)来保护共享资源的访问,或者使用volatile关键字来确保共享变量的可见性。通过合理的设计和编码,可以有效地避免线程安全问题,确保多线程程序的正确性和稳定性。
2024-03-30 11:55:56
775
原创 进程调度的基本过程
进程调度是操作系统中负责管理和分配CPU时间给多个进程的机制。它确保所有进程公平、有效地共享CPU资源,并根据特定的调度策略和算法来优化系统性能,以此提高系统资源利用率,降低响应时间,提升系统吞吐量。
2024-03-30 09:40:37
623
原创 进程和线程的关系与区别
总而言之,进程和线程在操作系统中都是为了更好地管理和调度程序的执行。进程提供了资源隔离和保护,而线程则提供了高效的并发执行能力和简化的通信机制。
2024-03-23 18:14:49
1131
2
原创 二叉树及其操作
二叉树是一种树形数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树通常用于实现二叉搜索树、堆、表达式树等数据结构,以及在算法和数据结构中的许多问题中。大多数的操作都是围绕着遍历展开,所以掌握好遍历是掌握二叉树的基础。希望本文对你有所帮助。1%29。
2024-02-02 14:42:09
755
8
原创 二叉树搜索树及集合
Set和Map在底层实现上都使用了类似的数据结构,如哈希表和红黑树,但是在存储内容和数据结构的使用上有一些区别。Set主要关注元素的唯一性,而Map需要同时存储键值对,并且需要保证键的唯一性。总的来说,Set集合用于存储不重复的元素,而Map集合用于存储键值对。它们在Java集合框架中都扮演着重要的角色,可以根据具体的需求选择合适的实现类来使用。
2024-02-02 14:41:34
969
2
原创 堆详解与优先级队列
1.无参构造方法:创建一个初始容量为11的空优先级队列。2.使用Comparator的构造方法:创建一个根据指定比较器进行排序的优先级队列。// 自定义比较器类@Override// 自定义排序规则,例如按照元素的大小升序排列// 自定义比较器3.使用初始容量和Comparator的构造方法:创建一个具有指定初始容量,并根据指定比较器进行排序的优先级队列。// 自定义比较器类@Override// 自定义排序规则,例如按照元素的大小升序排列// 自定义比较器4.添加元素:使用。
2024-01-22 14:45:38
869
10
原创 顺序表和链表
顺序表和链表是两种常见的数据结构,并没有什么优劣之分,它们各自具有特定的特点和适用场景。顺序表适合对元素的随机访问较多的场景,而链表适合频繁进行插入和删除操作的场景。在实际应用中,可以根据具体的需求和操作特点选择合适的数据结构。
2023-12-03 17:27:02
2188
16
原创 java基础语法总结
总而言之,Java语法简单清晰,易于学习和使用,在学习的过程中要多复习多上手敲代码,保持自己语言学习的连贯性。本文章主要对基础语法进行了一个简单的概述,想要进一步深入学习可以多看看其它更加具体化的文章和资料,希望本文对你有所帮助。
2023-11-26 11:17:04
1186
13
原创 了解异常的特性
在Java中,除了使用Java内置的异常类来处理异常外,还可以自定义异常类来处理特定的异常情况。自定义异常类可以继承自Exception或者RuntimeException类,也可以实现Throwable接口,以实现我们自己的异常处理逻辑。自定义异常通常包括以下几个方面:继承Exception或者RuntimeException类:自定义异常类通常继承自Exception或者RuntimeException类,这样可以让我们的自定义异常类具有和Java内置异常类相同的特性和行为。
2023-11-19 16:41:51
171
11
原创 java语法:继承与多态
继承:一个类可以继承另一个类的属性和方法,这样可以避免重复编写相似的代码,并且可以实现多层次的类组织管理。多态:允许不同的对象对同一消息作出不同的响应,通过动态绑定的方式,可以根据对象的实际类型来确定调用的方法,从而实现代码的灵活性和可扩展性。
2023-11-10 19:23:57
134
8
原创 类和对象解析
类是一种抽象的数据类型,是用于描述具有相同属性和行为的对象的集合。具体来说,类是用来对一个实体(对象)来进行描述的,主要用来描述该实体(对象)具有哪些属性,哪些功能。类的定义:使用关键字class来定义一个类,通常包含类的访问修饰符、类名、类体等部分。类的访问修饰符:类可以有四种访问修饰符,分别是public、protected、private和默认(即不加修饰符)。这些修饰符控制着类的可见性,即哪些代码可以访问该类。类名:类名是一个标识符,用于唯一标识一个类。
2023-11-05 12:43:48
141
12
原创 Java中的基础知识
java中很多的基础知识与c语言一样,但细节上又有些不同,在学习时要格外注意两者的联系与区别,以免混淆。希望本文对你有所帮助。
2023-10-26 14:39:01
108
16
原创 程序环境和预处理
在C语言中,宏定义是一种预处理指令,用于将一个标识符或表达式替换为指定的文本。宏定义可以简化代码,提高代码的可读性和维护性。1.宏定义的语法:宏定义使用#define#define 宏名 替换文本宏名是一个标识符,用于表示一个宏。替换文本是一个文本字符串,可以是一个表达式、语句或任意的文本。2.宏定义的替换规则:当预处理器遇到一个宏调用时,会将宏名替换为宏定义中的替换文本。替换是简单的文本替换,没有类型检查和语法分析。替换文本中的参数可以使用和##进行特殊处理。
2023-10-19 21:25:46
212
25
原创 C语言文件操作
总而言之,文件操作是进行文件读写的重要手段,可以通过文件操作函数来实现对文件的打开、读取、写入、指针移动等操作,并通过错误处理和资源释放来保证操作的正确性和可靠性。希望本文对你有所帮助。
2023-10-10 17:44:09
171
30
原创 动态内存管理
动态内存管理是C语言中非常重要的概念,malloc、calloc、realloc和free这四个函数为我们提供了灵活地分配和释放内存的能力。了解它们的用法和区别,能够帮助我们更好地管理内存资源,避免内存泄漏和内存溢出等问题。在使用这些函数时,我们应该注意检查返回的指针是否为NULL,避免重复释放已经释放的内存块,并避免使用已经释放的内存块的指针。通过合理使用这些函数,我们可以更好地控制内存的分配和释放,提高程序的性能和可靠性。
2023-09-29 15:22:49
188
37
原创 自定义类型:结构体,枚举,联合
本文主要对结构体,枚举和联合进行了一个较为简单的介绍。主要对结构体中的内存对齐进行了研究,结构体内存对齐是C语言中一个重要的概念,它可以提高内存访问的效率,并避免由于对齐不足而导致的内存访问错误。在使用结构体时,我们需要了解结构体内存对齐的规则,并根据实际需求在实际开发中进行灵活运用。枚举可以用于定义一组相关的常量,提高代码的可读性和可维护性;联合可以在同一块内存中存储不同类型的数据,节省内存空间并实现类型转换。希望本文能帮助到你。
2023-09-24 15:21:39
97
24
原创 字符函数和字符串函数
本文主要介绍了strcmp,strcat,strstr三个函数的使用和自实现,这三个函数都是对字符串进行操作,在平常的使用中,应该注意几者的区别和注意事项。熟练了解掌握这几个函数,对编程的效率也会有较大的提升,希望本文章对你有所帮助。
2023-09-21 10:15:31
92
20
原创 qsort函数的使用和自实现(采用冒泡排序)
qsort函数在我们日常中使用的还是比较广泛的,在还没有学习很多排序算法时,qsort函数能够满足大部分的排序需求。同时,通过自实现qsort函数,我们不仅更加熟练了冒泡排序的思想和实现过程,还对qsort函数有了更深层次的理解。通过对qsort函数的自实现,我们可以更好地应对排序问题,并在实际开发中灵活运用。希望本篇文章能够对你有所帮助。
2023-09-13 20:51:38
146
22
原创 函数指针数组与回调函数
回调函数是一种强大的工具,可以提升程序的灵活性和可扩展性。通过使用回调函数,我们可以将特定的操作封装在回调函数中,实现主程序与具体操作的解耦。回调函数可以根据不同的条件执行不同的操作,从而使程序具有更高的灵活性。
2023-09-07 20:59:01
81
9
原创 指针的进阶
指针是C语言中非常重要的概念,它提供了直接访问和操作内存地址的能力。指针在编写程序和实际开发中使用的相当广泛,而指针的用法也是各种各样的,但都离不开指针最基础的概念和语法。熟练掌握指针的使用需要下一定的功夫,指针的使用需要注意内存管理和指针的合法性,否则可能会导致程序出现错误或者崩溃。因此,在使用指针时需要谨慎并遵循相关的编程规范和最佳实践。
2023-08-09 15:58:51
40
4
原创 剖析数据在内存中的存储
大小端是一种描述数据在存储和传输中字节顺序的方式。字节顺序指的是多字节数据中字节的排列顺序,包括两种主要类型:大端序和小端序。在大端序中,多字节数据的高位字节存储在内存的较低地址,低位字节存储在内存的较高地址。例如,十六进制数0x12345678在大端序中的存储顺序如下:内存地址:低位字节 高位字节内存值: 0x12 0x34 0x56 0x782.小端序:在小端序中,多字节数据的低位字节存储在内存的较低地址,高位字节存储在内存的较高地址。
2023-08-03 16:37:53
35
2
原创 C语言实现简易扫雷
总体而言,这段代码实现了一个简单的扫雷游戏,提供了雷区的生成、排雷和输赢判断功能。同时也还存在一些待完善的功能,比如可以利用递归实现在玩家排查出一个位置后,根据周围的地雷数量更新显示区的信息,并继续排查周围的位置,直到没有相邻的非地雷位置为止。这样,玩家可以一次性排查出一片区域,提高游戏的效率和体验。本代码的难度相对而言要低一点,认真思考过后,自己动手敲一敲。
2023-07-26 20:59:43
96
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人