自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 垃圾回收相关

走过的路径称之为"引用链",当一个对象到GC Roots没有任何的引用链相连时(从GC Roots到这个对象。算法分为"标记"和"清除"两个阶段 : 首先标记出所有需要回收的。新生代中98%的对象都是"朝生夕死"的,所以并不需要按照1 : 1的比例来划分内存空间,而是将内存(新。在上面我们讲了,Java并不采用引用计数法来判断对象是否已"死",而采用"可达性分析"来判断对象是。在 Java 中,所有的对象都是要存在内存中的(也可以说内存中存储的是一个个对象),因此我们将内。比如Python语言就采。

2023-11-23 15:11:26 56

原创 JVM 类加载

1. 避免重复加载类:比如 A 类和 B 类都有一个父类 C 类,那么当 A 启动时就会将 C 类加载起来,那。其中前 5 步是固定的顺序并且也是类加载的过程,其中中间的 3 步我们都属于连接,所以对于类加载来。从上面的图片我们可以看出整个 JVM 执行的流程中,和程序员关系最密切的就是类加载的过程了,所以。类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最 终都应该传送到最顶层的启。如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父。

2023-11-23 15:07:55 125

原创 Linux 常用命令

vim 是一个知名的文本编辑器. 前面学习的 cat, less, head, tail 等命令只能查看文本, 不能编辑文本. 使用。说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在。3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源。的目录,则它会把前面指定的所有文件或目录复制到此目录中。-r递归处理,将指定目录下的文件与子目录一并处理。Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。

2023-11-22 21:56:33 267

原创 Cookie 和 Session

会话的本质就是一个 "哈希表", 存储了一些键值对结构. key 就是令牌的 ID(token/sessionId), value 就是。服务器收到请求之后, 根据请求中的 sessionId / token 在 Session 信息中获取到对应的用户信息,Servlet 的 Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.服务器同一时刻收到的请求是很多的. 服务器需要清除的区分清楚每个请求是从属于哪个用户, 就需要在。

2023-11-11 21:43:05 29

原创 HTTPS 的加密流程

据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等.但是要想对密钥进行对称加密, 就仍然需要先协商确定一个 "密钥的密钥". 这就成了 "先有鸡还是先有蛋"引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的。在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密。当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的).

2023-10-28 10:31:40 31

原创 HTTP 协议的基本格式

关于 Content-Type 的详细情况: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求.正文中的内容格式和 header 中的 Content-Type 密切相关. 上面也罗列了三种常见的情况.在比特教务系统的登陆页面, 输入用户名, 密码, 验证码之后, 点击登陆, 就可以看到 POST 请求.

2023-10-28 09:54:48 37

原创 HTTP 请求 (Request)认识 URL

URL 的详细规则由 因特网标准RFC1738 进行了约定. (https://datatracker.ietf.org/doc/html/rfc1738)n.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5, 通过不同的片段标识跳转到文档的不同章节)v.bitedu.vip : 服务器地址. 此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址.带层次的文件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问。

2023-10-27 22:26:02 492

原创 数据链路层重点协议

虽然我们在这里介绍ARP协议,但是需要强调,ARP不是一个单纯的数据链路层的协议,而是一个介于。以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要。这个限制是不同的数据链路对应的物理层,产生的限制。每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记。在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬。掌握TCP的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,

2023-10-27 22:16:57 23

原创 IP协议

4位头部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节。8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。

2023-10-27 22:15:59 23

原创 TCP协议

FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认,则进入FIN_WAIT_2,[ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时,向服务器发送结束报文段,同时进。[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段,进入TIME_WAIT,并发。一般而言,对于服务器上出现大量的 CLOSE_WAIT 状态,原因就是服务器没有正确的关闭 socket,导。所以TCP头部最大长度是。

2023-10-27 21:13:05 24

原创 UDP 的报文结构和注意事项

1. UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传。没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会。UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一。2. UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;UDP的socket既能读,也能写,这个概念叫做 全双工。

2023-10-10 20:57:21 42

原创 网络通信基础

端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制。对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四。同一个类型的数据,格式可能也不同,如。在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类。

2023-10-07 09:12:24 23

原创 File 类的用法和 InputStream, OutputStream 的用法

String getCanonicalPath() 返回 File 对象的修饰过的绝对路径。boolean isDirectory() 判断 File 对象代表的文件是否是一个目录。boolean isFile() 判断 File 对象代表的文件是否是一个普通文件。String getAbsolutePath() 返回 File 对象的绝对路径。String[] list() 返回 File 对象代表的目录下的所有文件名。String getParent() 返回 File 对象的父目录文件路径。

2023-10-03 21:59:35 28

原创 IO、存储、硬盘、文件系统相关常识

往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然。家,因为从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描。即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件。和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。就类似办公桌上的一份份真实的文件一般。

2023-10-03 21:27:14 21

原创 总结synchronized

会根据情况,进行依次升级。偏向锁不是真的 "加锁", 只是给对象头中做一个 "偏向锁的标记", 记录这个锁属于哪个线程.当前申请锁的线程是不是之前记录的线程), 那就取消原来的偏向锁状态, 进入一般的轻量级锁状态.经历了一系列的沧海桑田, 这个锁被其他线程释放了, 操作系统也想起了这个挂起的线程, 于是唤醒。如果该锁被占用, 则加锁失败. 此时线程进入锁的等待队列, 挂起. 等待被操作系统唤醒.随着其他线程进入竞争, 偏向锁状态被消除, 进入轻量级锁状态(自适应的自旋锁).

2023-09-25 15:52:22 18

原创 HashTable, HashMap, ConcurrentHashMap 之间的区别

是是用 synchronized, 但是不是锁整个对象, 而是 "锁桶" (用每个链表的头结点作为锁对象), 大大降。后续每个来操作 ConcurrentHashMap 的线程, 都会参与搬家的过程. 每个操作负责搬运一小。一旦触发扩容, 就由该线程完成整个扩容过程. 这个过程会涉及到大量的元素拷贝, 效率会非常低.充分利用 CAS 特性. 比如 size 属性通过 CAS 来更新. 避免出现重量级锁的情况.发现需要扩容的线程, 只需要创建一个新的数组, 同时只搬几个元素过去.5.计算hash值方法不同。

2023-09-25 15:27:06 44

原创 线程池详解

创建 20 个线程, 每个线程都尝试申请资源, sleep 1秒之后, 释放资源. 观察程序的执行效果.当有车开进去的时候, 就相当于申请一个可用资源, 可用车位就 -1 (这个称为信号量的 P 操作)当有车开出来的时候, 就相当于释放一个可用资源, 可用车位就 +1 (这个称为信号量的 V 操作)如果计数器的值已经为 0 了, 还尝试申请资源, 就会阻塞等待, 直到有其他线程释放资源.unit: keepaliveTime 的时间单位, 是秒, 分钟, 还是其他值.

2023-09-25 08:25:00 20

原创 多线程-初阶1

在调用 increase2 的时候, 先加了一次锁, 执行到 increase 的时候, 又加了一次锁. (上个锁还没释。所谓的 "主内存" 才是真正硬件角度的 "内存". 而所谓的 "工作内存", 则是指 CPU 的寄存器和高速缓存.2) 一旦线程1 修改了 a 的值, 此时主内存不一定能及时同步. 对应的线程2 的工作内存的 a 的值也不一定。最后, 线程虽然比进程轻量, 但是人们还不满足, 于是又有了 "线程池"(ThreadPool) 和 "协程"

2023-09-08 19:15:42 30

原创 Java数据类型与变量

/ 编译成功:a + b==>int + long--->long + long 赋值给long。// 编译成功:a + b==>int + long--->long + long 赋值给long。// a是变量,a中的值是可以修改的,注意:= 在java中表示赋值,即将100交给a,a中保存的值就是100。// a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值。// 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l。

2023-06-05 13:03:15 34

原创 栈和队列详解

FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。// 下面是定长的静态栈的结构,实际中一般不实用,所以我们主要实现下面的支持动态增长的栈。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。// 支持动态增长的栈。

2023-05-21 09:13:27 27

原创 顺序表和链表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间。概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表。用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在物理上存储时,通常以数组和链式结构的形式存储。

2023-05-21 09:01:07 28

原创 算法的时间复杂度和空间复杂度

5. 实例5基本操作执行最好N次,最坏执行了(N*(N+1)/2次,通过推导大O阶方法+时间复杂度一般看最。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。机发展的早期,计算机的存储容量很小。4. 实例4基本操作执行最好1次,最坏N次,时间复杂度一般看最坏,时间复杂度为 O(N)时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算时间。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基法的时间复杂度。

2023-04-28 19:46:25 40

原创 程序环境和预处理

/ 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。1. 每次使用宏的时候,一份宏定义的代码将插入到程序中。当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能。程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器。在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。

2023-04-06 19:23:43 33

原创 C语言文件操作

在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯。这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。字,文件状态及文件当前的位置等)。

2023-04-06 18:50:08 22

原创 动态内存管理

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小。但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序。但是对于空间的需求,不仅仅是上述的情况。实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。分配的内存容量有限。如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。

2023-04-06 13:30:03 21

原创 自定义类型:结构体,枚举,联合

4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的。联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联。跟结构相比,位段可以达到同样的效果,但是可以很好的节省空间,但是有跨平台的问题存在。这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

2023-04-06 13:23:47 27

原创 字符函数和字符串函数

字符函数和字符串函数

2023-03-17 17:29:21 30

原创 指针的进阶

指针进阶版

2023-03-15 19:58:00 31

原创 深度剖析数据在内存中的存储

深度剖析数据在内存中的存储

2023-02-22 13:37:26 31

原创 结构体详解

结构体详解

2023-02-14 19:51:52 23

原创 指针详解版

指针详解版

2023-02-14 17:49:21 39

原创 操作符详解

操作符详解

2023-02-14 16:53:34 30

原创 扫雷详解版

扫雷详解版

2023-01-28 22:41:18 91

原创 三子棋详解

三子棋详解

2023-01-26 15:23:48 51

原创 数组内容详解

数组

2023-01-25 22:24:58 62

原创 函数详解(2)

函数详解2

2023-01-22 22:02:59 31

原创 函数详解(1)

函数详解

2023-01-20 22:00:37 31

原创 goto语句

goto语句

2023-01-20 20:17:49 33

原创 循环语句*

循环语句

2023-01-12 22:02:37 4418

原创 分支语句*

分支语句

2023-01-12 19:37:04 33

空空如也

空空如也

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

TA关注的人

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