- 博客(64)
- 收藏
- 关注
原创 Spring Boot自动装配原理(源码详细剖析!)
自动装配是Spring Boot的核心功能,它能够根据应用程序的依赖和配置自动配置Spring。这意味着我们只需要添加大量的依赖,Spring Boot就能自动完成配置,减少了人工配置的工作量。Spring Boot自动装配流程:获取@SpringBootApplication注解并解析处理@@EnableAutoConfiguration注解,并通过@Import注解导入自动配置选择器AutoConfigurationImportsSelector。
2025-04-20 17:00:36
564
原创 MySQL索引
本篇文章的重点还是MySQL的索引原理。MySQL的存储也是类似文件系统的那样的东西,只不过文件系统的data blocks是以4kb为单位,而MySQL则是16kb的page为单位。在InooDB下,每个叶子节点的page页存储的都是数据,非叶子节点的页也被称为目录页,目录页只存储其他页的地址,不存储数据。而在学习的过程中我也遇到了一些疑问,将在下面分享给大家。疑问一:每次查询都要加载一次B+树吗?答案是否定的,因为每次查询都加载一次,就疑问IO效率很低,如果B+树已经构建好了的话,则不需要。
2025-04-11 09:23:08
979
原创 IP报文详解
当片偏移量为0的时候,那么可以说明这是第一个报文,如果此时的"更多分片"标志位为1,则说明后面还有分片,那么当前分片就是第一个分片。最后一个分片报文因为后面没有分片了,所以它的"更多分片"标志位为0,并且片偏移量一定大于0。那么此时这个分片报文就是最后一个分片。
2024-08-17 17:54:06
2147
1
原创 TCP的可靠机制
先来说为什么不能是一次握手如果是一次握手的话,客户端只要发送连接,服务器就认为连接成功了。那么客户端是不是可以同时发送大量的SYN连接请求,而服务器每收到一个连接请求就建立一个连接。因为每建立一个连接就要消耗一份系统资源,而客户端那边发起连接请求几乎没有成本。所以服务器最终会不会因为连接请求过多而导致崩溃呢?答案是会的!而同时发送大量SYN连接请求这种行为,也被称为SYN洪水攻击为什么不能是2次握手?2次握手和1次握手的本质是一样的。只要客户端发送SYN,服务器就认为已经连接成功了!
2024-07-30 13:55:58
1680
原创 【计算机网络】TCP报文详解
其实协议的形式都是一个结构化的数据,TCP协议也不例外。一起来看看TCP协议的报头是怎么样的。以上就是TCP报头,实际上是一个结构化的数据,也就是一个结构体。其中16位源端口号,就是你当前发送报文的端口号。目的端口号则是目标主机的端口号。这也就是我们在用accept时,能够获取连接套接字的同时,还能获取到对端主机的端口号(ip也获取到了,这个在网络层的时候解释)。而目的端口号也很好理解,因为端口号能够确定一台主机中唯一的一个进程。当你的报文被发送到对端主机的时候,就能够通过端口号去锁定对应的PCB进程。
2024-06-13 08:07:00
2121
2
原创 Http协议之 Cookie 和 Session
相信我们在登陆一些网站的时候,比如说哔哩哔哩,csdn等网站的时候。我们登陆了一次过后,之后的一段时间内就不需要再次登录了,而是进入这些网站之后自动就给登陆了。这又是什么原理呢???很简单,自然是我们的浏览器保存了cookie信息,而之后每次向该网站发送http请求时,就会自动把cookie信息发送给服务器。因为http是无状态的!!所以对方不知道你现在是否已经登陆!
2024-04-25 19:38:14
991
原创 Https协议如何保证安全性?
在对摘要进行数据签名(签名下面会说,就是对摘要的一种加密)。随后把加密后的摘要发送到百度网盘的服务器,而百度网盘的服务器会在后台进行查找。看摘要是否存在,如果摘要不存在,则让你上传,并把该摘要保存一份,建立摘要与文件的映射关系。如果摘要存在,则找到摘要对应的文件,创建一个软链接,给你的账户映射。所以这样就可以保证,网盘中真正存储的文件只有一份(也有可能有备份)。摘要是一串固定长度的字符串,当你上传文件的时候先文件进行hash散列然后形成摘要发送给网盘服务器,网盘服务器去判断摘要是否存在。
2024-04-20 11:54:38
1436
3
原创 让你的进程24小时在linux上运行
可能我们都在使用xshell时,都会遇到一些问题,就是你在xshell运行了你的服务器。可是你把xshell页面一关,你的服务器就自动关闭了,这是为什么呢??本质是因为我们的xshell在登陆服务器时,会创建一个会话,而在这个会话中,只能允许一个进程在前台运行,多个进程在后台运行。而会话退出时会话的内容也会跟着退出,因为会话的内容都是以bash为父进程创建的。我们在命令行输入执行的进程,都是以bash为父进程创建的。我们还要明白一个进程组的概念,我们可以分别执行和。
2024-04-12 18:56:39
630
原创 UDP实现Mini版在线聊天室
只有当客户端先对服务器发送online消息的时候,服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候,服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时,表明自己要下线了,此时服务器把该用户踢出在线列表。此时的用户看不到公屏的信息也无法在发送信息。只要把用户踢出在线列表,那么它就是离线了,因为服务器只关心在线列表中的客户。
2024-04-10 23:53:25
939
原创 Udp实现一个小型shell
首先我们要有个客户端和一个服务器,客户端向服务器传递命令。而服务器收到命令后创建一个管道,并fork一个子进程。随后子进程解析命令,再把标准输出换成管道文件,因为命令行命令是自动输出到显示器的,所以我们要把命令的结果重定向到管道文件。然后服务器主进程等待子进程返回的结果,并把结果返回给客户端。
2023-12-31 10:34:52
1407
8
原创 【计算机网络】网络基础
OSI七层模型,自顶向下分别是: 应用层 -> 表示层 -> 会话层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层。而实际上表示层和会话层都属于应用层,所以也有另一种说法,那就是TCP/IP五层模型。也就是 : 应用层->传输层->网络层->数据链路层->物理层。为什么要设置这么多层呢?这是因为分层是有优势的, 分层可以让每个模块之间的耦合度降低,也可以把每一层的功能集中,每一层做每一层应该做的事而互不影响。这也是软件设计中一个很重要的思想,那就是而每一层也都有自己要做的事。
2023-12-18 16:49:37
1843
3
原创 网络编程之套接字
套接字的创建(UDP/TCP/服务端/客户端)int domain : 通信范围,例如AF_UNIX,AF_LOCAL是本地通信,AF_INET是IPV4,AF_INET6是IPV6int type: 通信类型,最常见的是TCP的SOCK_STREAM面向字节流,UDP的SOCK_DGRAM面向数据报int protocol: 确定socket支持的哪个协议,一般默认为0即可。返回值:一个文件描述符,小于0则代表创建套接字(打开文件)失败端口号绑定(UDP/TCP/服务端/客户端)
2023-12-02 18:05:47
1592
3
原创 POSIX信号量
POSIX信号量用于同步操作,达到无冲突访问临界资源的目的,可以用于线程之间的通信。而信号量的本质其实就是一把计数器!!而我们对计数器有2个操作,一个是增加计数器的值,一个是减少计数器的值。而信号量的P,V操作都是原子的!当信号量计数为0时执行P操作。那么该线程就会进入等待,直到信号量计数不为0才会继续唤醒。而此时另一个线程就可以对信号量进行V操作,让计数器++,从而唤醒之前进入等待的线程。
2023-11-18 19:43:14
286
1
原创 并发编程之生产者消费者模型
生产者消费者模型是多线程中一个比较典型的模型。打个比方:你是一个客户,你去超市里买火腿肠。这段话中的 "你"就是消费者, 那么给超市提供火腿肠的供货商就是生产者。超市呢?超市是不是被所有人所共享?大家都可以去访问超市,所以这里的超市是一份临界资源。所以生产者消费者有三种关系,两种角色,一个交易场所。1.生产者与生产者2.消费者与消费者3.生产者与消费者生产者与生产者是竞争关系,因为厂商之间互相竞争。所以生产与生产者是关系。
2023-11-15 19:03:09
832
原创 深入理解Linux中信号处理过程
类似handler函数,自己指定函数处理信号。默认和忽略是什么区别?默认是一种默认的处理方式,和忽略的处理方式是直接不处理。
2023-09-24 22:36:33
769
28
原创 【数据结构】堆的原理&实现
就是让当前节点与它的父亲进行比较,我们拿大堆来说,如果父节点比当前节点小。那么就交换这两个节点,一直循环直到父节点比当前节点到或者当前节点已经是根节点时才结束。举两个例子,我们有一个大堆。这时候我们要新增一个节点,35,那么我们先把它加在末尾。然后让当前节点与它的父节点比较大小。如果当前节点比父节点大,则交换位置(大堆的情况下)。随后再让该节点和它的父亲比较,比它的父亲小,调整完毕。第二个例子依旧是刚刚那个堆,只不过我们把插入的数据换成了70那么它会一直调整到根节点才结束。如图。
2023-08-04 16:35:11
335
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人