- 博客(40)
- 收藏
- 关注
原创 Bean 的生命周期的各个阶段
1. Bean的作⽤域共分为6种: singleton, prototype, request, session, application和websocket.2. Bean的⽣命周期共分为5⼤部分: 实例化, 属性复制, 初始化, 使⽤和销毁3. SpringBoot的⾃动配置原理源码⼝是 @SpringBootApplication 注解, 这个注解封装了3个注解◦ @SpringBootConfiguration 标志当前类为配置类。
2025-03-22 19:27:23
756
原创 仿RabbitMQ的消息队列
创建 common.Request// 省略 getter setter创建 common.Response// 省略 getter setter构造⼀个类表⽰⽅法的参数, 作为 Request 的 payload.不同的⽅法中, 参数形态各异, 但是有些信息是通⽤的, 使⽤⼀个⽗类表⽰出来. 具体每个⽅法的参数再通过继承的⽅式体现.// 表⽰⼀次请求/响应的唯⼀ id. ⽤来把响应和请求对上.// 省略 getter setter。
2025-03-14 13:55:32
1174
原创 IoC详解
对于同⼀个类,如何定义多个对象呢?⽐如多数据源的场景,类是同⼀个,但是配置不同,指向不同的数据源.我们看下@Bean的使⽤@Component@Bean@Bean//获取Spring上下⽂对象//从Spring上下⽂中获取对象//使⽤对象定义了多个对象的话,我们根据类型获取对象,获取的是哪个对象呢?运⾏结果:报错信息显⽰:期望只有⼀个匹配,结果发现了两个,user1,user2从报错信息中,可以看出来,@Bean注解的bean,bean的名称就是它的⽅法名。
2024-10-29 05:15:00
713
原创 JAVA阻塞队列
阻塞队列是⼀种特殊的队列.也遵守"先进先出"的原则.阻塞队列是⼀种线程安全的数据结构,并且具有以下特性:• 当队列满的时候,继续⼊队列就会阻塞,直到有其他线程从队列中取⾛元素.• 当队列空的时候,继续出队列也会阻塞,直到有其他线程往队列中插⼊元素.阻塞队列的⼀个典型应⽤场景就是"⽣产者消费者模型".这是⼀种⾮常典型的开发模型.
2024-10-28 16:42:21
261
原创 SpringMVC 中的常用注解和用法
这个注解用于标识一个类是 SpringMVC 中的控制器。控制器负责处理用户请求并返回响应。@RequestMapping既可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径+⽅ 法路径.@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息访问地址:http://127.0.0.1:8080/user/sayHi。
2024-10-22 22:45:30
1093
原创 CSS 选择器的常见用法
3. 如果需要选择多种标签,可以使⽤ , 分割,如p, div { } 表⽰同时选中p标签和div标签.逗号前后可以是以上任意选择器,也可以是选择器的组合.1. 以上三个标签选择器ul li a 中的任意,都可以替换成类选择器,或者id选择器,可以是任意选择器的组合,也可以是任意数量选择器的组合。• ⼀个类可以被多个标签使⽤,⼀个标签也能使⽤多个类(多个类名要使⽤空格分割,这种做法可以让 代码更好复⽤)• id是唯⼀的,不能被多个标签使⽤(是和类选择器最⼤的区别)
2024-10-14 13:29:43
289
原创 HTTPS 的加密流程
• 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(称为数 据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对⽐hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的.由于该密钥只有客⼾端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义.由于对称加密的效率⽐⾮对称加密⾼很多,因此只是在开始阶段协商密钥的时候使⽤⾮对称加密,后续 的传输仍然使⽤对称加密.这对密钥对⼉就是⽤来在⽹络通信中进⾏明⽂加密以及数字签名的。
2024-10-04 19:47:23
1778
2
原创 HTTP 协议的基本格式和 fiddler 的用法
一、请求格式1. 请求行- 包含请求方法(如 GET、POST、PUT 等)、请求的资源路径和 HTTP 版本。例如:“GET /index.html HTTP/1.1”。2. 请求头- 由一系列键值对组成,如“Host”表示请求的主机名,“User-Agent”表示发出请求的客户端信息等。- 每个请求头占一行,格式为“头字段名: 值”。3. 空行- 用于分隔请求头和请求体。4. 请求体- 对于某些请求方法(如 POST),会包含要提交的数据。二、响应格式。
2024-10-03 15:24:42
838
原创 数据链路层
• "以太⽹"不是⼀种具体的⽹络,⽽是⼀种技术标准;既包含了数据链路层的内容,也包含了⼀些物理 层的内容.例如:规定了⽹络拓扑结构,访问控制⽅式,传输速率等;• 例如以太⽹中的⽹线必须使⽤双绞线;传输速率有10M,100M,1000M等;• 以太⽹是当前应⽤最⼴泛的局域⽹技术;和以太⽹并列的还有令牌环⽹,⽆线LAN等;
2024-10-02 18:08:05
748
原创 IP 协议的相关特性
基本概念• 主机:配有IP地址,但是不进⾏路由控制的设备;• 路由器:即配有IP地址,⼜能进⾏路由控制;• 节点:主机和路由器的统称;协议头格式• 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4.• 4位头部⻓度(header length):IP头部的⻓度是多少个32bit,也就是length*4的字节数.4bit表⽰最 ⼤的数字是15,因此IP头部最⼤⻓度是60字节.
2024-10-02 17:59:36
964
原创 IP 数据包分包组包
MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制.• 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充位;• 最⼤值1500称为以太⽹的最⼤传输单元(MTU),不同的⽹络类型有不同的MTU;• 如果⼀个数据包从以太⽹路由到拨号链路上,数据包⻓度⼤于拨号链路的MTU了,则需要对数据包进 ⾏分⽚(fragmentation);• 不同的数据链路层标准的MTU是不同的;
2024-10-02 16:11:59
1446
原创 TCP协议
TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细 的控制;• 源/⽬的端⼝号:表⽰数据是从哪个进程来,到哪个进程去;• 32位序号/32位确认号:后⾯详细讲;• 4位TCP报头⻓度:表⽰该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最⼤⻓度是15* 4=60• 6位标志位:◦ URG:紧急指针是否有效◦ ACK:确认号是否有效◦ PSH:提⽰接收端应⽤程序⽴刻从TCP缓冲区把数据读⾛。
2024-09-28 19:48:26
843
原创 cas 和 synchronized 优化过程
CAS:全称Compareandswap,字⾯意思:”⽐较并交换“,⼀个CAS涉及到以下操作: 我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。1. ⽐较A与V是否相等。(⽐较)2. 如果⽐较相等,将B写⼊V。(交换)3. 返回操作是否成功。下⾯写的代码不是原⼦的,真实的CAS是⼀个原⼦的硬件指令完成的.这个伪代码只是辅助理解CAS的⼯作流程.
2024-07-27 21:24:33
829
原创 java线程池
ThreadPoolExecutor提供了更多的可选参数,可以进⼀步细化线程池⾏为的设定.• corePoolSize:正式员⼯的数量.(正式员⼯,⼀旦录⽤,永不辞退)• maximumPoolSize:正式员⼯+临时⼯的数⽬.(临时⼯:⼀段时间不⼲活,就被辞退).• keepAliveTime:临时⼯允许的空闲时间.• unit:keepaliveTime的时间单位,是秒,分钟,还是其他值.• workQueue:传递任务的阻塞队列。
2024-07-25 21:05:54
317
原创 Java 线程的几种状态
• NEW:安排了⼯作,还未开始⾏动• RUNNABLE:可⼯作的.⼜可以分成正在⼯作中和即将开始⼯作.• BLOCKED:这⼏个都表⽰排队等着其他事情• WAITING:这⼏个都表⽰排队等着其他事情• TIMED_WAITING:这⼏个都表⽰排队等着其他事情• TERMINATED:⼯作完成了.
2024-07-17 18:56:27
310
原创 Thread 类的基本用法
继承 Thread 来创建⼀个线程类.创建 MyThread 类的实例调⽤ start ⽅法启动线程t.start();
2024-07-17 16:10:11
157
原创 进程与线程
⼀个线程就是⼀个"执⾏流".每个线程之间都可以按照顺序执⾏⾃⼰的代码.多个线程之间"同时"执⾏ 着多份代码.还是回到我们之前的银⾏的例⼦中。之前我们主要描述的是个⼈业务,即⼀个⼈完全处理⾃⼰的业 务。我们进⼀步设想如下场景: ⼀家公司要去银⾏办理业务,既要进⾏财务转账,⼜要进⾏福利发放,还得进⾏缴社保。如果只有张三⼀个会计就会忙不过来,耗费的时间特别⻓。
2024-07-14 22:23:09
290
原创 进程调度的基本过程
每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运 ⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可 以说是计算机科学中最重要和最成功的概念之⼀。
2024-06-03 21:50:15
975
原创 HashMap和HashSet
2.创建一个新节点cur让其等于head(就是映射关系中的Key),遍历一遍链表.每次遍历都创建一个新节点node为拷贝后的节点(就是映射关系中的Val),这样我们cur和node就形成了映射关系.用put()方法,将Key与Val对应的对象存入map.比如:Key存第一个节点即head,Val存储第一个节点的拷贝.那么Key里面存在head这个完整的节点,而Val存的也是这个节点拷贝,但是目前里面只有val的值,random与next都为空.因此只要表中有一半的空位置,就不会存在表满的问题。
2024-05-09 18:21:25
684
1
原创 TreeMap及TreeSet
Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不 能重复。
2024-05-06 21:32:35
1099
原创 PriorityQueue
Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线 程不安全的,PriorityBlockingQueue是线程安全的。关于PriorityQueue的使用要注意:1. 使用时必须导入PriorityQueue所在的包,即:2. PriorityQueue中放置的元素必须要能够比较大小,不能插入无法比较大小的对象,否则会抛出 ClassCastException异常。
2024-04-12 22:37:25
987
1
原创 java二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 有一个特殊的结点,称为根结点,根结点没有前驱结点 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继 树是递归定义的。例如:E节点不能同时连接B节点和C节点。
2024-04-11 17:46:25
1086
1
原创 JAVA栈与队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头 (Head/Front)// 3. 队列中有多个元素---链表中有多个节点----将第一个节点删除。// 2. 队列中只有一个元素----链表中只有一个节点---直接删除。// 获取队头元素---获取链表中第一个节点的值域。// 获取栈中有效元素个数---> 4。
2024-04-03 16:01:31
855
1
原创 JAVA实现图书管理器(简略版)
回到Main,书接上回我们写到了选择进入管理员系统还是用户系统,现在我们把选择的结果加上去,选择进入管理员系统就应该打印出管理员的操作菜单,所以通过new一个adminUser来进入操作系统,然后返回所选择的操作,用户同理。然后通过for循环,一本一本进行比对。先查找书籍,并用j记录查找的书籍下标,然后我们选用删除书籍的方法是:从删除书籍后方的书籍依次往前移到一个位置(为什么j的初始值为-1,因为数组下标没有-1)。结果就是被覆盖掉的书籍的下标对应的被覆盖掉的书籍的下标的下一位对应的书籍。
2024-03-16 22:44:16
941
1
原创 JAVA中的继承
继承机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。共性的抽取,实现代码复用。1.2怎么继承在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下:修饰符class父类// ...修饰符class子类extends父类// ...比如:publicStringname;int。
2024-03-05 22:22:18
830
1
原创 JAVA类和对象
主要描述该实体对象具有哪些属性外观尺寸等,哪些功能用来干 啥),描述完成后计算机就可以识别了。比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。属性:产品品牌,型号,产品重量,外观尺寸,颜色...功能:洗衣,烘干、定时....
2024-03-02 11:45:05
855
原创 JAVA数据类型
1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.注意:不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节。由上面的表可以知道int型有范围,通过以下两个函数可以知道最小值与最大值。为了区分int和long类型,一般会在long类型变量初始值后面加L或l。可以先定义后赋值,也可以定义同时赋值。
2024-02-13 23:36:55
430
1
原创 C语言编译链接
编译过程就是将预处理后的⽂件进⾏⼀系列的:词法分析、语法分析、语义分析及优化,⽣成相应的。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列。接下来语法分析器,将对扫描产⽣的记号进⾏语法分析,从⽽产⽣语法树。程序必须载入内存中。静态语义分析通常包括声明和类型的匹配,类型的转换等。链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。在预处理阶段,源⽂件和头⽂件会被处理成为.i为后缀的⽂件。据汇编指令和机器指令的对照表⼀⼀的进⾏翻译,也不做指令优化。
2024-01-16 09:27:29
841
1
原创 C语言文件操作
据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯。这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据。在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显。字,文件状态及文件当前的位置等)。该结构体类型是有系统。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名。文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,
2023-12-14 15:06:43
42
1
原创 整数和浮点数在内存中存储
整数在内存中存储整数的2进制表⽰⽅法有三种,即 原码、反码和补码三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位 负整数的三种表示方法各不相同。原码 直接将二进制按照正负数的形式翻译成二进制就可以。 反码 将原码的符号位不变,其他位依次按位取反就可以得到了。 补码 反码+1就得到补码。正数的原、反、补码都相同。 浮点数在内存中存储根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形
2023-12-04 16:49:01
46
原创 字符串函数
我们将要想求长度的数组输入进去,用指针的形式进行接收,然后通过while循环求值。因为数组的末尾为\0,所以当*p的值等于\0时就代表*p已经到达数组的末尾。*p1++ = *p2++的计算方式是:后置++所以先把*p2的值赋给*p1然后进行++。把要目标的数组和要拷贝的数组 传入函数,先用ret记录下p1的地址,等下作为返回值。(如果p1作为返回值的话,p1经过循环后,p1的首地址已经不是刚传入时的地址了,会导致后面打印不出数组)。首先我们要先找到arr1地址的\0的位置,然后从\0的位置开始进行复制。
2023-11-30 14:44:09
60
原创 指针(一)
指针是内存中一个最小单元的编号,也就是地址,通常指的是指针变量,是用来存放内存地址的变量。概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个。总结:指针就是地址,口语中说的指针通常指的是指针变量。指针的类型决定了指针向前或者向后走一步有多大(距离)。就是一个指针变量,那它的类型是怎样的呢?指针变量,用来存放地址的变量。避免返回局部变量的地址。类型的指针是为了存放。类型的指针是为了存放。类型的指针是为了存放。
2023-11-23 13:54:17
30
原创 c语言实现9x9扫雷游戏
由上面打印的坐标可知a和b的范围是1-9即row或col,所以我们要先满足这个范围才能进行判断是否是雷,如果是,则打印“很遗憾,你被炸死了”,并且把布置雷的那张图也打印出。在text.c文件里面进行传值:为什么这是传的是row和col,我们使用的时候是不需要最外圈的那一层,最外圈只是辅助后面扫描周围有多少雷的。假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数时,最下⾯的三。个坐标就会越界,为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐。
2023-10-31 18:23:22
127
1
原创 C语言分支循环语句
C语言是结构化的程序设计语言,这⾥的结构指的是顺序结构、选择结构、循环结构,C语言是能够实。现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种。循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较。循环至少执行一次,使用的场景有限,所以不是经常使用。,就停止后期的所有的循环,直接终止循环。是用于终止本次循环的,也就是本次循环中。如果表达式的结果为真,则语句执行。语句后的语句执行,否则不执行。,用于初始化循环变量的。,用于循环条件的调整。
2023-10-23 18:22:05
31
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人