- 博客(65)
- 收藏
- 关注
原创 云聊天项目测试
根据部分自动化测试用例执行结果可知,项目功能大体完善。接下来可以继续执行编写的测试用例,进一步测试功能、界面、兼容性、安全性等等。
2023-08-21 18:11:07
362
原创 使用SpringBoot+SpringMVC+Mybatis+WebSocket实现云聊天项目并对项目进行自动化测试
本项目是仿照微信实现网页版聊天程序,用户注册登录后可与在线好友实时聊天,下线好友上线后可以查看到好友发送的消息;用户可以在搜索框搜索用户添加好友;用户还可以查看好友申请列表,选择是否同意好友申请;用户可以删除与好友的聊天记录或者删除好友。
2023-08-20 20:39:55
686
原创 参考RabbitMQ实现一个消息队列
消息队列的本质就是阻塞队列,它的最大用途就是用来实现生产者消费者模型,从而实现解耦合以及削峰填谷。在分布式系统中不再是单个服务器而是服务器“集群”,如果我们我们直接A服务器给B服务器发送请求,B服务器给A服务器返回响应,这样的话我们AB的耦合较大,如果A或者B服务器挂了,我们业务也就崩溃了。引入消息队列之后我们将请求和响应都通过消息队列这个中间人来传递,就降低了耦合度。
2023-08-06 14:53:18
1582
1
原创 使用SSM框架实现个人博客管理平台以及实现Web自动化测试
在几个月前实现了一个servlet版本的博客系统,本项目则是在原有基础上进行升级。使用SSM框架、数据库密码使用加盐算法加密、使用Redis对session进行持久化存储从而支持分部式部署、通过拦截器实现用户登录校验、对于数据格式返回以及异常处理进行统一功能处理、增加分页以及点击量统计等功能。用户进入主页可以看到他人发布的博客,同时也可以注册账号通过本平台编写发布博客,平台支持markdown编辑;用户也可以在个人中心修改个人信息,同时对博客可以随写随存以草稿形式,之后也可以发布修改草稿。
2023-07-30 21:46:23
1215
1
原创 Redis在云服务器上的安装与客户端连接配置
然后打开app点击新建连接,host选择云服务器地址,端口号默认6379,建议不设置密码直接点击OK。下载后点击安装即可。
2023-07-26 13:41:20
977
原创 Spring事务与事务传播机制
Spring事务与MySQL事务类似,都是将一组操作封装成一个执行单元,要么全部成功,要么全部失败。比如我们A给B转账100元,如果A账号成功扣款100元,但是B账号由于某种原因进款失败,那么A账号就相当于凭空失去了100元。使用事务就能够解决这个问题,整体执行一起成功或者失败。
2023-07-22 15:17:55
278
原创 Spring 统一登录验证、数据格式返回、异常处理的实现
在上一篇博客我们介绍了Spring AOP以及简单使用了Spring AOP,这篇博客将完整的利用Spring AOP实现统一的功能。
2023-07-20 12:32:42
350
原创 Spring AOP的介绍与实现
对于切面我使用的注解是@Component,让该类醉着框架启动。通过@Aspect表示该类是一个切面;/**/**/**/**/**/**/**/**/**/**/**/**定义切点通过@Poincut注解,使用Aspect的表达式语法;该方法是空方法只起到表示作用,指向后面多个对应的通知。
2023-07-19 21:19:49
1385
原创 详解应用层的HTTP协议与HTTPS协议
在前面我们介绍了数据链路层、网络层、传输层的相关协议,本文将继续介绍应用层应用相对来说较广泛的HTTP协议。HTTP 往往是基于传输层的 TCP 协议实现(HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP实现)。目前我们主要使用的还是 HTTP 1.1 和 HTTP2.0。本文讨论的 HTTP 以 1.1 版本为主。我们平时打开一个网站, 就是通过 HTTP 协议来传输数据。
2023-07-18 23:45:19
231
原创 抓包工具Fiddler的下载安装使用
右侧显示就是我们主机发送http/https请求的记录。如果我们要查看某一次访问,可以双击该记录,在右侧就会显示这次http请求的内容以及返回的响应的内容。右键全选,点击remove,选择selected sessions,就能删除选择的sessions。安装过程只用一路next即可;
2023-07-18 21:56:48
685
原创 CSS中常见选择器及其用法
之前介绍过HTML中常见标签的用法,以下将介绍CSS中不同选择器的使用。CSS是用来实现页面的样式规则,可以起到美化页面的作用。通过标签选择器可以选中对HTML中对应的标签等设置特定的样式,通过类选择器可以设置同一类元素的样式,以下将详细介绍。
2023-07-16 22:55:03
658
原创 保姆级自动化测试教程(Selenium+java)
自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化接口自动化单元测试自动化。单元测试:最大的投入应该在单元测试上,单元测试运行的频率也更加高。java的单元测试框架是Junit。接口自动化:接口测试就是API测试,相对于UI自动化,API自动化更加容易实现,执行起来也更稳定。- 可在产品前期,接口完成后介入。- 用例维护量小。- 适合接口变动较小,界面变动频繁的项目。
2023-06-29 12:58:43
17123
11
原创 实现第一个服务器版本的表白墙程序
基于MySQL数据库和servlet实现的前后端交互的服务器版本表白墙。在页面输入表白内容,在本地通过数据库存储历次表白内容,保证网页刷新重进时数据仍存在。以下为打开表白墙效果展示:我们可以在输入框输入表白对象,表白内容然后提交就能显示到新动态中,提交之后输入框自动清空内容。完整项目代码可以通过我的gitee获取MessageWall我们在idea里面点击new project创建一个maven项目,然后一路next选择好项目位置以及命名即可。在创建完maven项目之后我们需要加载依赖,部分同学可能由
2023-05-17 22:14:28
883
原创 HTML基本知识与常用标签的使用以及实现一个HTML版本个人简历
head 标签中写页面的属性,body 标签中写的是页面上显示的内容,title 标签中写的是页面的标题。一段比较长的文本粘贴到 html 中, html是不会将它们分段的,此时需要我们用段落标签。是 break 的缩写表示换行,br 标签不像 p 标签那样带有一个很大的空隙,通常写成。ctrl + / 快捷键可以快速进行注释/取消注释,注释的目的是提高代码的可读性。主要用于用户输入,包括单行文本框, 按钮, 单选框, 复选框。span标签中的内容并没有独占一行,div中的内容独占一行。
2023-05-16 21:58:37
1313
原创 数据链路层及其重要协议——以太网
不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等。以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等。以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等。就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他交换结点。是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
2023-05-10 21:44:14
1489
原创 网络层——IP协议详细解读
一个路由器有两个IP地址,WAN口IP和LAN口IP,分别在不同的局域网中,路由器的作用就是将两个局域网连接起来。以下三个字段就是用来分包组包的,多个被拆分的IP数据报的16位标识相同,13位偏移确定拆分的数据报顺序,三位标志位有一位有效,为0时表示不是最后一个数据报,1时表示为最后一个数据报。动态分配地址:设备上网就分配ip地址,不上网就不分配,但是这种方式并没有增加ip的数量,只是暂时缓解,如果同时上网个数达到一定量也会不够用。4位首部长度:IP的报头和TCP类似,都是长度可变的,带有选项。
2023-05-10 20:07:03
2289
原创 详解UDP协议与实现UDP版本字典翻译客户端与服务器
UDP协议也是传输层的一种协议,上篇文章我们介绍了TCP协议可以参考我的另一篇博客详解TCP协议以及实现TCP版本的字典翻译服务器客户端,以下来介绍一下UDP协议以及他的使用。UDP协议是无连接,不可靠传输,面向数据报。全双工的协议。无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;不可靠:发送端发送数据报后就算没有接收UDP协议层也不会返回错误信息给应用层;面向数据报:应用层交给UDP多长的报文,就发送多长,既不会拆分也不会合并;
2023-04-17 16:57:37
491
原创 详解TCP协议与模拟实现TCP版本的字典翻译客户端与服务器
我们编写网络程序涉及数据传输时,应用层需要调用传输层提供的api进行数据传输。原本系统给应用程序提供的api是C风格的,但是我们JDK针对这些api进行封装,形成Java风格的api。系统对于传输层提供的socket基于UDP协议的api和基于TCP协议的api。以下介绍TCP协议的相关特性与核心机制以及基于TCP协议的字典翻译客户端与服务器实现。是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。TCP协议。
2023-04-14 10:26:47
1354
原创 计算机网络模型、网络传输、封装分用的详细讲解
在互联网诞生之前,人们通过发电报等方式进行通信,这种方式是分层不稳定的,通信链路容易被打断。由于战争时期需要更好的通信手段,此时就将原本两点之间简单的通信链路,扩展成复杂的链路,保证就算有一条链路被打断也能进行通信,就类似于我们现在的互联网。紧接着就诞生出局域网,利用交换机将几台主机连接起来进行通信,但是局域网只是小范围的联机,随着社会发展对联机范围需求增大,通过增加路由器交换机数量就慢慢发展为广域网。
2023-04-12 16:13:10
2180
7
原创 Java中Hashtable、HashMap、ConcurrentHashMap之间的区别
Hashtable是java早期发布时提供的一种键值映射的数据结构,而HashMap产生于JDK1.2。对于在单线程中使用,由于Hashtable为保证线程安全在许多关键方法中都加锁以至于效率相比于HashMap低。对于在多线程中我们又有ConcurrentHashMap在jdk1.8之前通过加分段锁,在jdk1.8通过直接给每个哈希桶(链表分配一个锁)实现线程安全效率相比于Hashtable高。所以目前Hashtable基本上已经被弃用了。
2023-04-08 11:51:05
453
原创 Java中文件操作——IO
对于文件的管理,我们可以通过自己的电脑发现,我们文件是按层级结构进行存储的,类似于数据结构中的树形结构。文件系统中的任何一个文件,对应的路径是唯一的,但是在Linux上可能存在一个文件有两个不同的路径能找到它,在Windows上不存在。Java中提供一个File类对文件(包括目录)进行抽象描述,在内存中创建一个对应的对象,通过操作对象来间接操作硬盘中的文件。内容是你好,一个汉字对应三个字节,我们输出的就是6个编码,这个一般对应的是utf-8字符集。最多读取数组长度的内容到数组中,方法返回实际读取的数量。
2023-04-03 14:03:36
710
原创 Java中线程池的基本介绍
Java中有许多池,字符串常量池、数据库连接池、线程池。对于线程池来说,我们提前将线程创建好放进池子里,当我们要使用时直接从池子中拿,而不是再从系统申请,我们用完之后,就还给池子而不是直接销毁。从池子里拿线程和还线程的过程中,我们都是纯用户态的操作,而不是直接创建或销毁线程涉及到操作系统的内核态。==这样在频繁创建销毁的情况下,就能节省开销并且提高效率。==以下我们将要介绍Java标准库中现有线程池的使用。我们在实际开发中通常通过new的对象创建线程池,这种方法可以更灵活的创建线程池。
2023-03-30 16:54:12
191
原创 java中单例模式的实现
什么是单例模式?单例模式是java设计模式的一种,这个模式的目的就是保证某一个类只有一个实例存在。比如我们java中的DataSource数据源就是需要只有一个实例,是单例模式的一种实现。单例模式由于在内存中只有一个实例,减少了内存的开销,当我们频繁的创建和销毁实例时,并且该模式还能避免对资源的多重占用。单例模式中我们主要分为饿汉模式和懒汉模式,以下介绍这两种模式以及实现方式。
2023-03-22 11:22:49
360
原创 线程不安全的几种情况与解决办法
什么是线程安全?线程安全就是保证多个线程同时对某一对象或资源进行操作时不会出错。比如当我们购物时,两个用户同时下单将商品加入购物车,此时两个用户可以看作两个线程,在线程安全的情况下,两个用户同时下单购买时,我们商品总额会减少两个。线程不安全就是指多个线程执行结果不符合预期的情况。
2023-03-20 16:59:19
1099
原创 线程创建的五种方式与Thread类方法的使用
为了更好的操作线程,Java为我们定义了一个类用来管理线程。Thread类即是,且每一个线程都有唯一的Thread对象与之关联。JVM会将这些Thread 对象组织起来,用于线程调度,线程管理。Thread(),无参创建线程对象。Thread(Runnable tarrget),使用实现Runnable接口对象创建线程对象。Thread(String name),创建线程对象并命名。
2023-03-15 21:45:42
318
原创 进程与线程的区别
概念:进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。当我们执行一个.exe程序时就是开启了一个进程。进程是操作系统分配资源的基本单位,一个进程拥有自己的堆、栈、虚存空间(页表)、文件描述符等信息。关于进程的相关知识可以参考操作系统中的进程管理。
2023-03-15 12:09:15
122
原创 操作系统中的进程管理
1.引入:在多道程序的环境下,为了运行多个程序并发执行,此时他们将失去封闭性,并具有不间断性及不可再现的特征,为此引入了进程。以便更好地描述和控制程序并发执行的过程。2. 概念:简单来理解,进程是程序的一次执行过程,但是进程不等于程序。当我们点击.exe文件时,该文件就进入了运行状态,此时可以理解为一个进程的开启。3.进程是cpu进行资源分配和接受调度的基本单位。
2023-03-15 11:38:08
196
原创 java——多态详解
1.概念多态就是多种形态,具体来说就是完成某种行为时,不同的对象表现出不同的状态。对于Java来说出现多态的情况是:必须在继承的体系下子类重写父类的方法通过父类的引用调用重写的方法解释说明在代码运行时,当传递不同类的对象时,会调用对应类下重写的方法,通过父类的引用调用重写的方法,实际上就是发生了向上转型。
2023-03-12 21:12:35
593
原创 归并排序的递归与非递归实现
3.我们通过申请一个临时数组tmp,将小的有序序列依次添加其中,全部添加完毕后,拷贝一下,就得到一个有序序列了,合并时我们是对每一层n个段进行合并,由于树的深度为logN所以总的时间复杂度是O(N*logN)。1.gap代表一个段的长度,left,right代表段的头尾,mid可以用来确定归并时下一个段的位置,mid就等于一个段的头加上段长-1,就是下一个的段头的前一个。2.通过对序列进行不断二分,当我们将序列分解到不能再分的时候(也就是一个),再通过比较分解成的最小有序序列头的大小,确定合并顺序。
2023-02-09 17:35:33
142
原创 HashMap和HashSet的那些关系
上一节讲了TreeSet、TreeMap的关系,具体可以看博客TreeSet与TreeMap那些关系,这一节讲解的HashMap,HashSet其底层都是用哈希表实现的Map,Set。接下来将介绍,他们之间的一些区别。解释说明哈希表也称散列表,是为了提高搜索效率,不经过任何比较,一次直接从表中得到要搜索的元素(理想情况哈希表是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系。结构如图:以一下哈希函数的存储方式。这种情况下,会出现哈希冲突。
2023-02-08 14:31:03
345
原创 TreeSet与TreeMap的那些关系
接下来要介绍的TreeSet、TreeMap,分别实现了Set、Map接口,在数据结构中Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以纯 key 模型,比如:有一个英文词典,快速查找一个单词是否在词典中。Key-Value 模型,比如:统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:
2023-02-07 15:10:54
188
原创 Java实现堆的创建及相关操作
1.观察可知,堆删除最后一个节点时只需要usedSize–即可,(也是定义usedSize的好处),所以我们可以将第一个结点的值与最后一个节点的值交换,然后再将第一个节点向下调整,即可。1.将插入的数存入到数组最后,也就是最后一个节点,由于堆的性质,我们需要调整堆的结构,直插入了一个节点,只需向上调整,将最后一个节点的值不断向上比较,就能确定下堆。由于堆实际上是完全二叉树的变形,且二叉树某个节点的值总是不大于或者不小于其父节点的值(分别称为最大堆、最小堆)。2.时间复杂度:即树的高度O(logN)
2023-02-05 12:36:20
501
原创 快排的三种方法(附源码)
取出第一个元素,空出一个位置拿出来定义两个指针,l,r分别指向头和尾,r向左移动如果遇到小于第一个元素的,放入空位,l向右移动,找比第一个元素大的放入刚刚空出来的位置,再次重复,l、r相遇时,将第一个元素放入空的位置,再以其下标为界限,左右用相同的方法继续。如果遇到大的继续行走,prev不走。定义l,r从头尾开始,l找比第一个元素大的,r找比第一个元素小的,找到后交换两个元素,直到相遇时,将相遇的元素与第一个元素交换,如何以此基准(相遇时下标),再次左右进行。
2023-02-03 17:06:06
795
原创 完全二叉树与堆的转换
1.实际上是一种完全二叉树,且某个节点的值总是不大于或者不小于其父节点的值(分别称为最大堆、最小堆)。2.jdk1.8中优先级队列 PriorityQueue,底层即采用堆的数据结构存储,具有返回优先级最高的对象,添加新的对象的最基本操作。3.堆底层使用数组实现(顺序存储),使用堆总是完全二叉树,这样不会出现数组中间出现 null 的情况。
2023-01-28 11:48:29
1137
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人