- 博客(46)
- 收藏
- 关注
原创 福运抽抽乐-抽奖项目的测试报告
测试结果显示所有请求都成功通过,没有失败或错误。平均响应时间为492.48毫秒,用户体验较好(APDEX值较高)。吞吐量和事务数较高,表明系统性能良好。网络数据传输量较大,接收和发送的数据量都较高。总体来看,系统在本次测试中表现良好,没有明显性能瓶颈或错误。
2025-03-19 13:49:51
749
原创 云服务器“抢”本地消息队列:一场开发中的乌龙事件
这次问题虽然最终得到了解决,但也给我带来了深刻的教训。在本地开发时,我们往往只关注本地环境的配置和代码逻辑,很容易忽略云服务器上可能存在的冲突。为了避免类似问题再次发生,我总结了以下几点经验:1. 明确环境差异:在本地开发时,一定要清楚本地环境和云服务器环境之间的差异,尤其是在配置方面。如果两者使用了相同的资源(如消息队列、数据库等),很容易出现冲突。2. 检查运行实例:在本地开发时,最好确认云服务器上的项目实例是否在运行。如果不需要,及时停止它们,避免不必要的干扰。
2025-03-19 00:43:26
230
原创 墨香阁-测试报告
1、墨香阁-操作简单的基于Spring前后端分离的项目,同时使用MySQL数据库来进行数据存储,并对项目进行测试,并完成部署上线,前端由四个页面组成:登录页面,注册页面,文章列表页,文章详情页,文章编辑(添加)页,个人中心,发送私信,文章回复模块等等,通过以上实现一个操作简单,安全可靠的,便于交流,分享的论坛。
2025-03-15 21:27:59
1003
原创 项目-个人博客测试报告
1、个人博客系统是一个操作简单的基于Spring前后端分离的项目,同时使用MySQL数据库来进行数据存储,并对项目进行测试,并完成部署上线,前端由四个页面组成:登录页面,博客列表页,博客详情页以及博客编辑(添加)页,通过以上四个页面实现一个简单的个人博客系统,在这个页面你可以记录自己学习的知识,所见所闻等等分享。2、列表页面:成功登录之后,会跳转到列表页,列表每页展示4篇博客,可以对博客列表进行翻页,以查看不同的博客,还可以对博客进行查看全文,对自己的博客可以进行在此编辑或者删除,
2025-03-14 22:34:22
779
原创 MySQL_事务的四大特性
有了上面的两条规则,我们就不能在写的时候进行读,在读的时候进行写,但是如果事务A修改数据之后提交,事务B在读取数据,事务C不对B读取的数据进行修改,而是对对应的表进行增加/删除数据,这就会导致B读的数据集不一样,要先说明的是这里读的数据集原有的是一致的,就是条数多了或者少了,就是幻读问题,可以认为是不可重复读问题的特殊情况。对于幻读问题,数据库的解决方案,就是串行化支持执行事务,也就是一个事务接着一个事务执行,这时候数据库的准确率是最高的,效率是最低的,隔离性是最高的。
2025-02-20 16:02:21
692
原创 Linux的基础指令和环境部署,项目部署实战(下)
dev指的是开发环境的配置,test指的是线上环境的配置,固定格式,只有后面的字母可以修改,在不同的配置文件写不同的内容(下面只是将数据库的配置作为展示,如果自己还有其他配置,像:日志的存储路径,图片的存取路径都是要按这种方式修改的。注意: 此处安装的是OpenJDK, OpenJDK是一个开源版本的 JDK, 和 Oracle 官方的 JDK 略有差别. 此处我们就使用 OpenJDK 即可. 安装 Oracle JDK 比较麻烦.实际工作中,开发环境,测试环境和线上环境的配置是不一样的。
2025-02-18 23:38:41
1098
原创 Linxu的基础指令和环境部署,项目部署实战(上)
上一篇通过这一篇我们能够了解到如何购买云服务器,以及通过终端软件XShell去连接我们的我们服务器,接下来就让我们一起来理解一下操作Linux的一些基础指令,然后我们就会带大家部署一个项目到服务器上,部署完成之后,我们就可以让自己的朋友访问你的网站。
2025-02-18 23:38:39
631
原创 Ubuntu 的RabbitMQ安装
RabbitMQ已经包含在标准的Ubuntu仓库中, 然而,包含的版本通常比最新的RabbitMQ发行版落后很多,可能提供的RabbitMQ版本已经不支持. RabbitMQ团队制作了自己的软件包,并使用Cloudsmith进行分发具体操作可以参考: Installing on Debian and Ubuntu | RabbitMQ由于该种方法安装比较复杂, 学习阶段, 咱们。
2025-02-18 18:25:57
1165
2
原创 Redis的简单使用
Redis服务器安装在云服务器上,而我们编写的代码实在本地主机的。要想让本地机器能够访问到Redis,需要把Redis的端口通过云服务器的后台页面的“防护墙”/“安全组”放开,但是这会使得端口转发的方式,直接把服务器的redis端口映射到本地。# 连接空闲超过N(s秒、ms毫秒)后关闭,0为禁用,这里配置值和tcp-keepalive值一致。也就说如果你要在本地使用redis,就要启动云服务器,并且确保redis服务器启动;# 连接用完时,新的请求等待时间(s秒、ms毫秒),超过该时间抛出异常。
2025-02-18 17:25:23
1024
原创 浅介绍redis特性
以下纯属于个人学习见解,不是官方知识,仅供参考,有错误的地方欢迎评论区指出Redis是一个在内存在存储数据的中间件(中间件:与实际业务无关的服务,如数据库,redis,消息队列等等)。Redis的作用主要有两方面,一方面是是作为数据库,另一方面是作为数据缓存。根据Redis的特性,使得它能够在分布式系统中大展拳脚。
2025-02-15 22:29:25
946
原创 浅谈分布式系统
前面讲数据库分离的时候应对的高的请求量,但是我们不仅仅要处理高的请求量,还要关注数据量,一个请求涉及到数据量可能有很多,很多的的请求涉及到数据量就更不可计数了,一个数据库的容量可以有几十TB,但是也有不够的情况,例如现在很活的短视频,数据库存的就是视频数据,这就不是简简单单的存一张照片,一个变量那么少了,所以但一个数据库服务器不够存的就是,我们就会给数据库的每一个表都安排一个数据库服务器,可以视情况再分为主数据库和从数据库,但请求涉及到哪个表就去访问哪个数据库就可以了,这就是数据库分库;
2025-02-13 23:09:06
729
原创 lombok插件不生效
无论你是修改lombok版本,勾线注释生效,还是javac编译器.....都发现还是发现不了方法,以上的勾选都先确保对了,这个方法才是适合的。我的是jdk17,lombok用的最新的1.18.36。
2024-12-23 11:26:47
651
5
原创 HTTPS的加密流程
HTTP协议采用的是明文传输,所以就存在数据被截取和修改的危险,比较有名的一件事就是2015的运营商劫持事件,所以针对HTTP协议传输的数据进行加密是非常有必要的,H,可以说HTTPS=HTTP+SSL;了解加密过程之前需要了解几个概念:明文,密文,密钥,对称加密,非对称加密:要传输的数据;:对明文进行加密就可以得到密文;:对明文进行加密和解密的重要道具/方法,密钥是非常安全,没有解密的密钥破解是非常大的,所以一般黑客不回去破解密钥,而是想法设法劫取到密钥。:加密,解密是同一个密钥。
2024-09-13 00:45:53
1470
原创 HTTP 协议的基本格式
HTTP协议("超文本传输协议"),是一个被广泛使用应用层协议,自1991年正式发布HTTP协议以来,HTTP协议就一直在更新,目前已经更新到3.0版本,但是目前主流的依旧是1.1版本,但依旧是一个最主流使用的应用层协议。HTTP协议一般是基于TCP协议实现的,当时知道HTTP3.0开始支持UDP协议实现传输,使用TCP相比较UDP虽然安全,但是速度却相差很多,从3.0版本开始支持UDP协议,为了的实现更快的传输,并且该版本在应用层实现了可靠传输的机制,保证了高速传输的同时,也保证可靠传输。
2024-09-12 17:00:00
1726
1
原创 Fiddle的安装与基础使用------一个非常好用且正规的抓包工具
点开可以看到响应的详情(点击Raw可以查看报文格式),有的响应转码过的,点击那一行Response body is encoded.Click to decode(黄色的),就可以转码成字符。Fiddle运行的过程中,只要你访问网络,像访问网站之类的,就可以在左边看到一个一个HTTP请求/响应,都可以点开看看详情。以上跟我一样设置,确认无误之后就点击OK,注意会跳出一个让你确认是否要按照协议,一定要点击是,不然你就得卸载,重新安装。,可以看到请求的详情(点击Raw可以查看报文格式)
2024-09-11 22:55:48
333
原创 CSS选择器
本篇文章只是为学习JS,简单的了解一下CSS选择器,做一下日常总结在head中构建一个style标签写在style标签中一个网页有什么内容是html要做的事情,这些内容标签要怎么放置,长什么样子,就是CSS要做的事情,简单来说就是给页面做规划,选择器就是为了能够方便选择这些标签,对标签进行操作。(放了方便阅读,更好看,算是行业规范)这里只用内部样式演示,方便演示。
2024-09-06 21:30:18
986
原创 传输层协议---TCP协议
说到这里,已经接近末尾了,回头再看TCP协议段格式还有一些没有谈论到,这里我就粗略谈一下,因为对我们来说也不是很重要,想仔细了解的话就去查看RFC-TCP标准文档,是官方的,更详细。标志位:URG报文和16位紧急指针是控制TCP自身工作特殊机制的;标志位:PUH报文,意思是推的试意思,催促对方尽快给自己的一个回复。
2024-09-03 00:00:17
889
1
原创 传输层协议-UDP数据报
数据报的记录方式无非就是光信号或者电信号或者电磁波,无论是哪种传输方式,都有可能在传输的过程收到外界的影响导致数据改变,发生错误,最常见的就是发生的比特翻转,0变成1,1变成0,高电平变成低电平,低电平变成高电平,检验和在数据传输之前通过某种计算方法,用载荷数据参与运算,等待数据到达目的端口时,在重新以这种方式计算,将再次计算获得校验和与报头的校验和比较,如果不同,证明传输过程数据发生改变,反之成立;无论是发生前计算的校验和还是接收到计算的校验和,我们都不关心校验和的具体数值,只关心前后校验和是否相同;
2024-08-30 00:34:29
1132
原创 总结Java文件操作
根据查看创建的文件可以看到,只能创建普通文件,不能创建文件夹,已经存在相同的文件,会返回一个false;查看我们的硬盘,我们可以发现文件在硬盘上的存储结构是树型的存储结构,文件夹里可以由文件夹和文件,文件夹里又可以继续嵌套文件和文件夹,不难发现是一个树型结构,n叉树;构造方法中最常用的第一个,最直接明了,可以是绝对路径也可以是相对路径,如果是相对路径,你要明确自己的当前目录(工作目录);新建文件,删除文件,修改文件名字,查找文件.....,只是介绍我认为需要注意的,简单的不做多赘述;文件系统为我们提供了。
2024-08-23 11:55:32
881
原创 文件---IO
文件IO实际就是针对文件内容进行操作,包括打开,读取/写入,关闭文件;I就是Input,O就是Output;针对文件IO,就要说要“流”(stream)这个概念了;说要流,我们就会想到水流,源源不断的水流,我们要接100ml的水,可以一次性接完,也可以两次接完,一次接50ml,还有很多种接法;对于要读取100字节的数据,你可以选择一次性接100字节,也可以分两次,一次接50字节;这与接水非常相似,也可以叫文件流;和;
2024-08-23 11:54:52
1091
原创 总结HashMap, HashTable, ConcurrentHashMap 之间的区别
ConcurrentHashMap还对数据进行了优化,由原来的数组+链表变成数组+链表/红黑树。但链表的数据个数超过8个,就会把链表变成红黑树,进一步提高效率;
2024-08-17 18:21:30
412
原创 synchronized
由于两个线程的方法竞争的是同意一把锁(一样的标志对象),所以无论哪个线程先执行,只有另一个线程synchronized代码块完全执行完,另一个线程获取到锁才能继续执行;synchronized是一个保证线程安全的关键字,常用来修饰方法和代码块,确保同一个时刻只有一个线程被修饰的代码在执行,防止数据被多个线程获取修改带来的线程不安全;由于代码中的两个方法,锁的都是调用该方法的对象,所以同一个线程同一个时刻只能执行一个方法,称之为同步方法。如果由其他线程的锁竞争,就会取消偏向锁状态,进入轻量级锁;
2024-08-16 21:41:46
829
原创 锁策略,CAS和synchronized的锁优化
某个线程没有锁的是时候就是一个无锁的状态,当这个线程获取到synchnorized时会变成偏向锁,但是不会真正的加锁,只是这个锁会记录目前是哪个线程获取到这个锁,只是做一个标记(不会产生任何的开销,非常快);指的是所有等待线程获取锁的机会公平与否,如果是按照先来回到的顺序,那么这个锁就是公平锁,如果等待的线程获取锁的概率是均等的,这个锁就是不公平锁,这是由以前发明锁的大佬定义的,如果另一个时间线定义的是概率均等是公平锁,就又是另一个说法;指的是锁的粒度,这个锁要完成的任务越多,代码量越多,粒度就越大;
2024-07-13 15:43:34
907
原创 总结线程池
最大核心线程数最大线程数(核心线程数+非核心线程数)非核心线程允许存在的最大空闲时间keepALiveTime的时间单位,时分秒之类要执行的任务线程队列创建线程的工厂类,使用不同的工厂相当于对线程池进行不同的初始化拒绝策略。
2024-07-13 10:58:17
436
原创 线程安全问题的原因与解决方案
为了可以更好的解释,给大家看一个错误的代码,问题是两个线程修改同一个变量,每个线程每次对变量+1循环50000次;测试发现,结果都是错误的;
2024-06-17 23:30:05
877
1
原创 两种单例模式(保证线程安全)
单例模式也叫单个实例,也就是这个类只有且只能有一个实例对象,这样一个类就叫做“单例”;单例模式有很多种,这里只介绍“饿汉模式”和“懒汉模式”两种;
2024-06-17 00:33:15
1282
2
原创 Java 线程的几种状态
基于六种线程的状态的学习,将来我们在线程出现问题之后我们就就可以借助第三方工具,就可以关注线程的状态,通过状态就能看到线程是在哪一行被卡住(阻塞)了,原因大概是什么;六种状态的转换。
2024-06-07 22:02:57
865
原创 Thread类中run和start的区别
run方法是描述这个线程是要干什么,比如我的这个线程就是让它每间隔一秒就打印一次”Hello thread“;而start()就是让这个实例化的线程跑起来,两个从中文意思上看好像都是让线程执行起来,但是这个方法是完全不同的;举个例子更好理解:run方法就是放学了之后你把作业是什么写下来在本子上,而start()方法就是开始写作业;再看代码:在main方法,也就是main主线程中new了Mythread的对象,并调用start();先看代码:继承Thread创建了一个线程,重写了run方法;
2024-06-03 22:19:58
223
原创 进程(process)与线程(thread)
主要是如果针对每一个客户端执行后连接上服务器,服务器就会给创建一个进程供客户端使用,客户客户端运行结束,服务器就把进程销毁,咋一看这样好像没什么问题,但是如果这个服务器频繁的有客户端来来去去,就要频繁的创建销毁进程,频繁的分配资源/释放资源,虽然不至于拖垮服务器,但是会使服务器的响应速度变慢;同个进程中的所有线程的共用内存指针和文件描述表;但是每一个线程是不同的cpu上调度的,但是同一个进程中的线程A中new一个对象,线程B是可以访问到的,线程B中打开一个文件,A也是可以打开的;PCB(描述线程的)
2024-06-03 18:56:10
332
原创 进程调度1.0
进程的执行是抢占式,进程的运行需要占有CPU资源,有的进程需要更多的CPU资源,有的进程相对就不需要那么多,就需要适当的分配好CPU资源,设置优先级高的分配更多的资源,设置优先级低的分配少的资源,优先级的高低就可以决定进程运行的次序,优先级高的可能反复在CPU上执行;查看任务管理器的进程,我们可以看到又非常多的进程,每个进程有都需要执行,执行就需要占用cpu资源,但是cpu的资源又有限,例如我的电脑只有16个逻辑处理器,就意味着我的电脑只能同时处理16个进程,那其他进程怎么办呢?
2024-06-02 23:01:57
380
原创 TreeMap和TreeSet
这里用替换法作为方法,即找到cur左子树的最大值或者右子树的最小值p节点,将p值赋给 cur,删除掉p, 这里选择找左子树的最大值作为分享。3.1 p==tp.right,这里选择删除3,左子树最大值就是2(这里由于2是最大的,所以2不会有右子树,但 是可以有左子树),就像链表的节点的一样,只不过存储的Key-Value两个值的键值对,该内部类中主要提供了 的获取,value的设置以及Key的比较方式。而Map中存储的就是key-value的键值对,Set中只存储了Key。
2024-04-24 13:05:55
639
原创 优先级队列 PriorityQueue 模拟实现
优先级队列实际是小堆,根据不同的比较方法实现小堆,也可以根据自己的需要重写比较方法,从而实现自己想要的优先级队列,获取想要的数据,接下来将会用整数模拟实现一个优先级队列;//交换第一个元素和最后一个元素,出队最后一个元素,//交换上去的元素,即放在的元素向下调整。usedSize--;//插入的元素的元素个数减一。这里我的优先是优先获取最小的元素,保证出队的永远是现存的数据里最小的;再者就是出队元素,优先队列出的就是最小的或者最大的看自己的选择。* @param root 是每棵子树的根节点的下标。
2024-03-22 16:06:04
1193
1
原创 建堆入队元素必用向上调整方法
while(parent>=0){ //一直向上调整,直到parent<0不存在为止。//父亲节点的下标由孩子的下标可推出,以此循环。//parent为child的父亲节点。if(elem[child]<elem[parent]){ //如果孩子节点的值小于父亲节点。private void shiftUp(int child) { //child为插入的元素的下标。//右孩子小于左孩子,child++,是的child刚好指向小的那一个。
2024-03-22 15:28:38
625
1
原创 建堆必须用到的向下调整方法
找到他的左右孩子的最小的一个child,如果父节点parent小于这个child节点,就不交换,这个父节点就向下调整结束;如果父节点parent大于child就交换,此时父节点就变成子节点,再以该节点为父节点,找到他的两个孩子节点中的较小的一个,如果父节点parent小于这个child节点,就不交换,这个父节点就向下调整结束;采用向下调整,并不是从第一个元素开始向下调整,而是从下往上第一个非叶子节点开始,也就是如图的25,之后就是49,18,34,28,27,65;
2024-03-22 13:50:42
310
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人