- 博客(112)
- 收藏
- 关注
原创 【redis初阶】------redis客户端(1)
直接开放 Redis 端口到公网 ≈ “给服务器开大门”,风险极高(Redis 无复杂认证时,黑客可暴力破解)。Java 操作 redis 的客户端有很多. 其中最知名的是 jedis.创建 maven 项目, 把 jedis 的依赖拷贝到 pom.xml 中。:安全访问云服务器 Redis,同时不暴露 Redis 端口到公网。→ 说明本地 8888 端口已被 SSH 客户端监听,转发规则生效。进行通信的,这是 Jedis 连接字符串的标准格式。,把云服务器的 Redis 端口(如 6379)
2025-08-10 15:58:49
487
原创 【redis初阶】-------数据库管理
许多关系型数据库,例如 MySQL 支持在一个实例下有多个数据库存在的,但是与关系型数据库用字符来区分不同数据库名不同,Redis 只是用数字作为多个数据库的实现。Redis 默认配置中是有 16 个数据库。如果真的需要完全隔离的两套键值对,更好的做法是维护多个 Redis 实例,而不是在一个Redis 实例中维护多数据库。这是因为本身 Redis 并没有为多数据库提供太多的特性,其次无论是否有多个数据库,Redis 都是使用单线程模型,所以彼此之间还是需要排队等待命令的执行。Redis 提供了几个面向。
2025-08-10 15:41:19
216
原创 【redis初阶】-----渐进式遍历
每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执行多次 scan。整个过程如图所示。•首次 scan 从 0 开始.• 当 scan 返回的下次位置为 0 时,遍历结束.
2025-08-10 15:32:23
205
原创 【redis初阶】Zset 有序集合类型
有序集合相对于字符串、列表、哈希、集合来说会有一些陌生。它保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关联,使得有序集合中的元素是可以维护有序性的,但这个有序不是用下标作为排序依据而是用这个分数。如图所示,该有序集合显示了三国中的武将的武力。有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利用有序集合,可以帮助我们在实际开发中解决很多问题。💡 有序集合中的元素是不能重复的,但分数允许重复。
2025-08-10 14:30:34
518
原创 【redis初阶】--------Set 集合类型
集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中1)元素之间是无序的;2)元素不允许重复;如图所示。一个集合中最多可以存储 2^32 - 1 个元素。Redis 除了支持集合内的增删查改操作,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。基本命令2.1 SADD将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。本次添加成功的元素个数。示例:SMEMBERS。
2025-08-10 13:24:43
695
原创 【redis初阶】------List 列表类型
这意味着可以通过索引下标获取某个元素或者某个范围的元素列表,例如要获取图的第 5 个元素,可以执行 lindex user:1:messages 4 或者倒数第 1 个元素,lindex。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等(如图所示)。quicklist 相当于是 链表 和 压缩列表 的结合整体还是一个链表,链表的每个节点,是一个压缩列表,每个压缩列表,都不让它太大,同时再把多个压缩列表通过链式结构连起来;
2025-08-10 11:45:00
808
原创 【redis初阶】-----Hash 哈希类型
几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是一个键值对结构,形如 key = "key",value = { {field1,value1 }, ..., {fieldN, valueN } },Redis 键值对和哈希类型二者的关系可以用图来表示哈希类型中的映射关系通常称为 field-value,用于区分 Redis 整体的键值对(key-value),
2025-08-10 11:09:25
488
原创 【redis初阶】------string 类型
string 类型是 Redis 最基础的数据类型,关于字符串需要特别注意1)首先 Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。2)其次,如图 2-7所示,字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚至是二进制流数据,例如图片、音频、视频等。不过一个字符串的最大值不能超过 512 MB。
2025-08-10 09:53:46
636
原创 【Redis初阶】------单线程模型
3.单线程模型不会出现线程冲突4.redis的核心功能比mysql要更加简单5.一个线程可以管理多个socket大部分的时候都是闲置的(对计算机来说)所以我们给一个线程管理一个socket,然后导致:然后就让一个线程管理多个socket前提:这些socket都是不冲突且不繁琐的,不然还是乖乖多创建几个吧。
2025-08-05 16:07:35
173
原创 【Redis初阶】------Redis实战操作.
如果get的key无对应的value,则返回nil。如果直接遍历所以的key肯定是不行的耗费时间太长了。注意:keys * 的时间复杂度是O(N)在线上环境的时候,禁止使用keys *每次抽取一部分,看有没有过期(一定要快)未过期时候显示剩余秒数,过期后显示-2。返回key对应的数据类型。
2025-08-05 10:56:14
259
原创 【Redis初阶】------初识Redis
Redis 提供了简单的 TCP 通信协议,很多编程语言可以很方便地接入到 Redis,并且由于 Redis 受到社区和各大公司的广泛认可,所以支持 Redis 的客户端语言也非常多,几乎涵盖了主流的编程语言,例如:C、C++、Java、PHP、Python、NodeJS 等,后续我会对 Redis 的客户端使用做详细说明。一台主机的硬件资源是有限的(cpu,硬盘,内存......),如果同一时刻处理的数据多了,就会导致硬盘资源不足,最终导致消息的等待时间增加。
2025-08-05 07:41:30
1602
原创 【MySQL进阶】------MySQL程序
MySQL安装Linux系统程序⼀般在 /usr/bin⽬录下,可以通过命令查看:windows系统⽬录:你的安装路径\MySQL Server 8.0\bin,可以通过命令查看:每个 MySQL 程序都有许多不同的选项。⼤多数程序都提供⼀个 --help 选项,您可以使⽤该选项来获取程序不同选项的描述。例如: mysql --help,可以通过在命令⾏或配置⽂件中指定选项来覆盖 MySQL 程序的默认选项值程序名作用mysqldMySQL的守护进程即 MySQL 服务器。
2025-08-03 22:14:50
989
原创 标准项目-----网页五子棋(5)------对战功能
本文介绍了基于WebSocket实现五子棋游戏对战功能的关键技术方案。主要内容包括:1. 建立WebSocket连接并约定交互协议,包括游戏就绪、落子请求和响应等消息格式;2. 实现服务器端的房间管理、玩家状态维护和胜负判断逻辑;3. 完成客户端与服务器的落子交互处理,包括坐标传输、棋盘更新和胜负判定;4. 优化处理玩家掉线、胜负提示和页面跳转等细节问题。系统采用双哈希表维护玩家在线状态,通过坐标检测实现五子连珠判断,并解决了游戏结束后的数据同步和界面优化问题。该方案实现了完整的五子棋对战功能,确保了游戏过
2025-08-02 10:06:40
798
原创 标准项目-----网页五子棋(4)-----游戏大厅+匹配+房间代码
Component// 创建三个匹配队列@Autowired// 操作匹配队列的方法.// 把玩家放到匹配队列中System.out.println("把玩家 " + user.getUsername() + " 加入到了 normalQueue 中!");System.out.println("把玩家 " + user.getUsername() + " 加入到了 highQueue 中!");} else {
2025-08-01 16:12:38
923
原创 标准项目-----网页五子棋(3)-----用户模块
• selectByName:根据⽤⼾名查找⽤⼾信息.⽤于实现登录.• userLose:⽤⼾给失败玩家修改分数.• userWin:⽤于给获胜玩家修改分数.• insert:新增⽤⼾.⽤⼾实现注册.来完成,所以还需要引入jquery。实现UserMapper.xml。创建login.html。在后续的前后端交互中我们。
2025-08-01 11:09:02
324
原创 标准项目-----网页五子棋(2)-----项目介绍
本文介绍了一个基于Web的五子棋对战系统设计方案。系统采用SpringBoot+MyBatis技术栈实现,分为三大功能模块:1)用户模块实现注册登录及分数记录;2)匹配模块基于天梯分实现玩家匹配;3)对战模块提供完整的五子棋游戏流程。系统使用MySQL存储用户数据,WebSocket实现实时对战,前端采用HTML/CSS/AJAX技术。数据库设计包含用户表存储基本信息,系统配置了Jackson处理JSON序列化。该方案实现了从用户管理、智能匹配到在线对战的完整五子棋游戏流程。
2025-08-01 01:01:15
510
原创 标准项目-----网页五子棋(1)-----认识WebSocket
Websocket是一种协议,用于在客户端和服务器之间建立持久的双向通信连接,广泛应用于需要实时数据交换的应用程序,例如在线聊天、实时游戏、股票行情等。是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制WebSocket 协议 与 HTTP 协议有什么区别呢?HTTP 协议通常使用在 "一问一答" 的应用场景中:客户端向服务器发送一个 HTTP 请求,服务器给客户端返回一个 HTTP 响应上述情况中,服务器属于被动的一方,若客户端不主动发起请求,服务器就无法主动给客户端响应。
2025-07-31 21:03:59
921
原创 【测试开发】----用例篇
也就是一些常规正常的输入集合(例如红包0-200内的正常金额,再例如发送的请求数据合理),利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能。依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类。如果这个测试用例测试通过,则认为所代表的等价类测试通过。边界值分析法就是对输入或输出的边界值进行测试的一种。通常边界值分析法是作为对等价类划分法的补充。常规思考+逆向思考+发散性思维。从等价类中选出一个测试用例。对于程序的规格说明书,
2025-07-22 14:36:35
852
1
原创 【测试开发】---Bug篇
软件测试贯穿于软件开发的整个周期1.需求分析2.测试计划3.测试设计与开发4.测试执行5.测试评估6.上线7.运行维护bug的描述是很重要的,如果你只是指出开发人员的代码的一个bug,让他现在就改,他不得骂死你,所以你应该描述清清楚楚这个bug一个具体的bug应该包括版本,环境,重现步骤,预期结果,实际结果BUG的级别 为什么要对bug进行级别划分bug的生命周期前提:一定不能吵架3.我们可以将bug定义文档拿出来,有理有据的讲 4.如果是一位有能力的测试人员,可以给出自己的建议(注意态度一定要好,而不是命
2025-07-22 13:20:25
368
原创 【测试开发】--概念篇
满足用户期望或正式规定文档(合同、标准、规范)所具有的条件和权能,包含用户需求和软件需求。可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成 的任务。该需求一般比较简略或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。大多数公司在进行软件开发的时候会把用户需求转化为软件需求,开发人员和测试人员工作的直接依据就是软件需求用户需求:平台支持邮箱注册从软件测试人员角度看需求需求是测试人员开展软件测试工作的依据。2.开发模式软件的生命周期。
2025-07-21 17:35:30
623
原创 【测试开发】----认识测试
最常见的理解就是:软件测试就是找BUG,发现缺陷。所以,并不是程序执行错误,执行异常才是缺陷,不符合产品特性和预期,不满足用户需求也是缺陷测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性测试的活动是以测试人员“预期结果”为依据,这里的“预期结果”指的就是需求定义。
2025-07-21 15:56:29
1010
原创 每日五题系列------java面试题总结
Write Once, Run Anywhere(一次编写,随处运行)”这句宣传口号,真心经典,流传了好多年!以至于,直到今天,依然有很多人觉得跨平台是 Java 语言最大的优势。避免死锁问题只需要打破上述四点的其中一点即可,对于第一点和第二点对于Java中是打破不了的,他们都是synchronized的基本特性。:一个线程拿到锁后,除非自己释放,否则别的线程无法抢夺。:一个线程拿到锁后,不释放这个锁的前提下,获取其他锁。:一个线程拿到锁后,其余线程就得阻塞等待。1.通过虚拟机实现跨平台。
2025-07-20 02:02:11
800
原创 Spring 底层原理剖析
Spring Boot 的自动配置:当 Spring 容器启动后,一些配置类、bean 对象等就自动存入 Ioc 容器中,而不再需要我们手动去声明,从而简化了程序开发过程,省去了繁琐的配置操作也就是说,Spring Boot 的自动配置,就是SpinrgBoot将依赖 jar 包中的配置类以及Bean加载到Spring Ioc容器中的过程我们主要学习一下两个方面:1. Spring 如何将对象加载到 Spring Ioc 容器中2. SpringBoot 是如何进行实现的。
2025-07-20 00:10:02
1129
原创 【JavaEE进阶】使用云服务器搭建Linux环境
我们在⼯作中会涉及到几个"环境"开发环境: 开发⼈员写代码用的机器.测试环境: 测试⼈员测试程序使用的机器.⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器.对稳定性要求很⾼.把程序安装到⽣产环境上,这个过程称为"部署".也叫"上线"⼀旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到.换句话说,如果程序有BUG,这个BUG也就被千千万万的⽤⼾看到了.部署过程⾄关重要,属于程序开发中最重要的⼀环.⼀旦部署出现问题,极有可能导致严重的事故(服务器不可⽤之类的).
2025-07-17 15:18:25
642
原创 @Transactional 详解
事务传播机制就是: 多个事务⽅法存在调⽤关系时,事务是如何在这些⽅法间进⾏传播的.比如有两个⽅法A,B都被 @Transactional 修饰,A⽅法调⽤B⽅法A⽅法运⾏时,会开启⼀个事务.当A调⽤B时,B⽅法本⾝也有事务,此时B⽅法运⾏时,是加⼊A的事务,还是创建⼀个新的事务呢?这个就涉及到了事务的传播机制.⽐如公司流程管理执⾏任务之前,需要先写执⾏⽂档,任务执⾏结束,再写总结汇报此时A部⻔有⼀项⼯作,需要B部⻔的⽀援,此时B部⻔是直接使⽤A部⻔的⽂档,还是新建⼀个⽂档呢?
2025-07-13 00:37:54
628
2
原创 【JavaEE进阶】Spring事务
本篇文章主要内容为以下两个方面对事务进行一个简单的介绍Spring中事务如何实现事务的概念,我相信很多人在数据库的时候已经听过和了解了,所以这里只进行简单的介绍事务是⼀组操作的集合,是⼀个不可分割的操作。事务会把所有的操作作为⼀个整体,⼀起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。
2025-07-13 00:09:19
600
原创 Spring Aop 原理----代理模式
前面对Spring AOP的详细使用进行了介绍,这篇博客博主将详细讲解一下Spring AOP的原理,也就是Spring是如何实现AOP的.Spring AOP是基于动态代理来实现AOP的,动态代理又是代理模式的一种。
2025-07-12 20:12:03
995
原创 【JavaEE进阶】Spring AOP详解
面向切面编程比如在前面文章实现的的"登录校验",就是⼀类特定问题.登录校验拦截器,就是对"登录校验"这类问题的统⼀处理.所以,拦截器也是AOP的⼀种应用.AOP是⼀种思想,拦截器是AOP思想的⼀种实现.Spring框架实现了这种思想,提供了拦截器技术的相关接⼝.同样的,统⼀结果返回和统⼀异常处理,也是AOP思想的⼀种实现.简单来说:AOP是⼀种思想,是对某⼀类事情的集中处理AOP是⼀种思想,它的实现⽅法有很多,有Spring AOP,也有AspectJ、CGLIB等.
2025-07-12 16:06:07
1018
原创 图书管理系统(完结版)
统⼀的数据返回格式使⽤ @ControllerAdvice 和ResponseBodyAdvice 的⽅式实现@ControllerAdvice 表⽰控制器通知类添加类。当我们程序出现异常的时候,Spring会对我们进行异常相关的处理,当发生异常的时候,它会走到BasicErrorcontroller类中的 error方法。ResponseAdvice ,实现 ResponseBodyAdvice 接⼝,并在类上添加@ControllerAdvice 注解。但是如果每一个接口都这样写,岂不太麻烦了一点儿。
2025-07-10 23:16:25
892
原创 拦截器(DispatcherServlet)源码剖析
适配器模式,也叫包装器模式.将⼀个类的接⼝,转换成客⼾期望的另⼀个接⼝,适配器让原本接⼝不兼容的类可以合作⽆间.简单来说就是⽬标类不能直接使⽤,通过⼀个新类进⾏包装⼀下,适配调⽤⽅使⽤.把两个不兼容的接⼝通过⼀定的⽅式使之兼容.比如下⾯两个接⼝,本⾝是不兼容的(参数类型不⼀样,参数个数不⼀样等等。
2025-07-10 00:03:09
636
2
原创 【JavaEE进阶】图书管理系统(未完待续)
前面我们基本实现了图书股管理系统的功能,但是我们依旧存在一个问题。就是我们不论是否登录,我们直接访问图书列表。也可以进行访问及修改而我们希望达到的效果是,必须要进行登录后才能进行一系列操作这里我们使用拦截器来完成着一系列操作拦截器是Spring框架提供的核⼼功能之⼀,主要⽤来拦截⽤⼾的请求,在指定⽅法前后,根据业务需要执⾏预先设定的代码.也就是说,允许开发⼈员提前预定义⼀些逻辑,在⽤⼾的请求响应前后执⾏.也可以在⽤⼾请求前阻⽌其执⾏.
2025-07-09 16:41:35
1789
37
原创 Mybatis----留言板
需求分析:实现一个简单的表白墙,用户访问表白墙页面时,可以在输入框中输出 from、to、message的基本信息,然后点击发送按钮就可以将信息提交到表白墙上。我们这里主要是对一些内容的修改,因为我们之前用的Say,而现在用的message,这里我们就需要知道,哪里是前端的属性,哪里是后端实体类的属性。后端接口:只需要提供两个接口给前端,一个是提交留言的接口,另一个是获取留言信息的接口。最后就是书写前端代码,对我们后端开发来说,前端代码还是需要好好练习的。前端:id,以及data后面$(#"")的内容。
2025-07-06 20:26:08
340
原创 Mybatis--动态SQL
前面我们学习如何使用 Mybatis 框架来操作数据库,可以发现相比于 JDBC 来说,Mybatis 相当的简单,与 JDBC 繁琐的步骤不同,Mybatis 只需要创建一个接口类,然后可以选择使用注解的方式或者XML的方式来实现该接口类中的方法即可,后续Service层的代码只需要调用mapper接口类中的方法即可实现对应的SQL语句的功能。相比于XML的方式,注解的实现可谓是简单易上手,并且可读性也很好,但是XML也有它自己的好处,现在我们就来学习哪种场景下使用XML更好。
2025-07-06 20:06:03
681
原创 javaEE-mybatis操作数据库
摘要:本文介绍了MyBatis框架简化JDBC操作的优势及基础使用方法。通过SpringBoot项目演示了MyBatis的快速入门流程,包括创建表、配置数据源、编写Mapper接口(注解/xml两种方式)以及测试。重点讲解了CRUD操作实现、参数传递、结果映射(起别名/ResultMap/驼峰命名)、#{}与${}的区别(预编译SQL防注入)、多表查询等核心内容。文章还对比了XML和注解两种实现方式,强调了数据库连接池的重要性,并提供了MyBatisX插件的使用技巧。最后指出MyBatis既能独立使用也可整
2025-06-28 16:35:16
1082
原创 javaee----SpringBoot日志
日志级别代表着日志信息对应问题的严重新,为了更快地筛选符合目标的日志信息。如果没有日志级别会怎么样呢?假设今天是放假,正常情况下没有Error级别以上的日志信息,就不需要我们来处理或者说可以在工作日内处理,但如果不存在日志级别,老板发现这里打印了许多日志,误以为是代码哪里出现了问题,赶紧把你从休假的状态叫回来,结果你发现这只是一个小小的警告信息,想一想这时你的心里状态是咋样的,肯定是双眼冒火的看着老板。
2025-06-25 10:26:29
741
35
原创 【JavaEE进阶】Spring Boot文件配置
计算机上有数以千计的配置⽂件,我们使⽤的绝⼤多数软件,⽐如浏览器,微信,Idea, 甚⾄电脑,⼿机,都离不开配置⽂件.我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上,⽐如C:\Users,C:\Windows⽂件夹,以及各种*.config,*.xml⽂件。配置⽂件主要是为了解决硬编码带来的问题,把可能会发⽣改变的信息,放在⼀个集中的地⽅,当我们启动某个程序时,应⽤程序从配置⽂件中读取数据,并加载运⾏。并且上述文件名字不能有错,否则配置无效。
2025-05-27 16:10:16
1133
59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人