![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
项目
文章平均质量分 72
_蓝天IT_
让亿万孩子同在蓝天下共享优质教育
展开
-
Java项目之消息队列(手写java模拟实现mq)【七、⽹络通信协议设计、消息队列服务器端实现、客户端实现】✔ ★
⼗⼀. ⽹络通信协议设计定义 Request / Response/* * 表示一个网络通信中的请求对象. 按照自定义协议的格式来展开的 */public class Request { private int type; private int length; private byte[] payload; public int getType() { return type; } public void setTy原创 2024-06-16 19:10:33 · 978 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【六、虚拟主机的创建(封装内存数据操作和硬盘数据操作)】✔ ★
虚拟主机设计⼗、创建 VirtualHost实现构造⽅法和 getter创建交换机删除交换机创建队列删除队列创建绑定删除绑定发布消息 ★路由规则1) 实现 route ⽅法2) 实现 checkRoutingKeyValid3) 实现 checkBindingKeyValid4) 实现 routeTopic5) 匹配规则测试⽤例6) 测试 Router订阅消息1) 添加⼀个订阅者2) 创建订阅者管理管理类3) 添加令牌接⼝4) 实现添加订阅者给 MsgQueue 添加⼀个订阅者列表5) 实现扫描线程6) 实原创 2024-06-14 09:52:55 · 521 阅读 · 0 评论 -
加盐加密算法保护用户密码 实战案例 PasswordUtil
为了防止这些攻击,加盐算法引入了"盐”,即一个随机的、唯一的字符串。在存储用户密码时,将密码与盐值进行组合,再使用哈希算法进行处理,得到一个唯一的哈希值。这样,即使两个用户使用相同的密码,由于使用了不同的盐值,其哈希值也会不同。这样,即使攻击者获取到数据库,也很难破解密码。它结合了哈希算法和随机盐值的概念在传统的密码存储中,用户的密码通常是经过哈希算法处理后存储在数据库中。总体来说,加盐算法通过使用随机的盐值和哈希算法,使得相同的密码拥有不同的哈希值,增加了密码的安全性提高了用户的率码保护级别。原创 2024-06-13 16:34:18 · 515 阅读 · 0 评论 -
什么是JWT?为什么用JWT?JWT的实战案例
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)头部(Header):包含了关于生成该 JWT 的信息以及所使用的算法类型。载荷(Payload):包含了要传递的数据,例如身份信息和其他附属数据。JWT 官方规定了7个字段,供选用:iss(Issuer):签发者。sub(Subject):主题。原创 2024-06-13 16:27:13 · 1162 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【上】(数据库操作、文件操作、内存操作)
Java项目之消息队列(手写java模拟实现mq)【一、实现mq必须知道的内容!!!】⼀. 消息队列背景知识⼆. 需求分析核⼼概念(面试题)★在 Broker 中, ⼜存在以下概念.核⼼ API ★交换机类型 (Exchange Type)持久化⽹络通信 ★消息应答三. 模块划分四、项目创建五、创建核⼼类创建 ExchangeExchange参数:名称、交换机类型、持久化、自动删除、额外参数针对数据库操作方便转成String,重写hashmap的get,set方法ExchangeType创建 MSGQueu原创 2024-06-12 08:54:04 · 944 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【五、内存存储数据,方便快速拿到数据对象】✔ ★
硬盘上存储数据, 只是为了实现 “持久化” 这样的效果. 但是实际的消息存储/转发, 还是主要靠内存的结构.对于 MQ 来说, 内存部分是更关键的, 内存速度更快, 可以达成更⾼的并发。原创 2024-06-11 23:23:49 · 350 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【四、整合数据库的操作和⽂件存储操作】✔ ★
使⽤ DiskDataCenter 来综合管理数据库和⽂本⽂件的内容.DiskDataCenter 会持有 DataBaseManager 和 MessageFileManager 对象实现 initDir【如何是有虚拟主机逻辑,这样写】原创 2024-06-11 23:23:40 · 189 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【三、MQ的核心类-消息类的存储(用文件存储消息)】✔ ★
/ 定义一个内部类, 来表示该队列的统计信息// 有限考虑使用 static, 静态内部类.// 此处直接定义成 public, 就不再搞 get set 方法了.// 对于这样的简单的类, 就直接使用成员, 类似于 C 的结构体了.// 总消息数量// 有效消息数量。原创 2024-06-04 10:51:50 · 359 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【二、实现消息队列的重点核心类 以及 用Sqlite存储】✔ ★
SQLite 只是⼀个动态库(当然, 官⽅也提供了可执⾏程序 exe), 我们在 Java 中直接引⼊ SQLite 依赖, 即可直接使⽤, 不必安装其他的软件.对于 Exchange, MSGQueue, Binding, 我们使⽤数据库进⾏持久化保存.此处我们约定, 把数据库⽂件放到 ./data/meta.db 中.使⽤ Spring ⾃带的单元测试, 针对上述代码进⾏测试验证.此处我们使⽤的数据库是 SQLite, 是⼀个更轻量的数据库.给 mapper.MetaMapper 中添加。原创 2024-05-31 09:51:27 · 572 阅读 · 1 评论 -
Java项目之消息队列(手写java模拟实现mq)【一、实现mq必须知道的内容!!!】✔ ★
另⼀⽅⾯, Producer 和 Consumer 则通过⽹络的⽅式, 远程调⽤这些 API, 实现 ⽣产者消费者模型.• Topic 是发⼀个画图红包, 发 10 块钱红包, 同时出个题, 得画的像的⼈, 才能领. 也是每个领到的⼈。⼿动应答的⽬的, 是为了保证消息确实被消费者处理成功了. 在⼀些对于数据可靠性要求⾼的场景, ⽐较常⻅.在实际的后端开发中, 尤其是分布式系统⾥, 跨主机之间使⽤⽣产者消费者模型, 也是⾮常普遍的需求.原创 2024-05-27 13:42:30 · 1105 阅读 · 0 评论 -
五子棋项目总结复习复盘逻辑
五子棋项目总结复习复盘逻辑逻辑用户类+MapperUser(id、账户名、密码、分数、总场数、赢场数)UserMapperinsertselectByNameuserWinuserLoseUserMapper.xmlUserAPI登录login1. 根据用户名查询User对象2. 对比User是否存在,密码是否正确3. 如果正确存入到request的session中注册register1. 创建User对象,set赋值2. UserMapper插入获取用户信息1. 从req中获取session2. 为了严谨原创 2024-05-21 11:02:49 · 996 阅读 · 0 评论 -
MySQL主从复制+读写分离(ShardingJDBC)
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。原创 2024-05-19 11:25:36 · 971 阅读 · 0 评论 -
SpringCache+redis实现缓存
Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。原创 2024-05-19 11:08:01 · 931 阅读 · 0 评论 -
✔ ★Java大项目——用Java模拟RabbitMQ实现一个消息队列(二)【创建核心类、封装数据库操作】
SQLite 只是⼀个动态库(当然, 官⽅也提供了可执⾏程序 exe), 我们在 Java 中直接引⼊ SQLite 依赖, 即可直接使⽤, 不必安装其他的软件。对于 Exchange, MSGQueue, Binding, 我们使⽤数据库进⾏持久化保存.此处我们约定, 把数据库⽂件放到 ./data/meta.db 中.SQLite 只是把数据单纯的存储到⼀个⽂件中. ⾮常简单⽅便.此处我们使⽤的数据库是 SQLite, 是⼀个更轻量的数据库.引⼊ pom.xml 依赖。原创 2024-05-03 18:47:15 · 973 阅读 · 1 评论 -
✔ ★Java大项目——用Java模拟RabbitMQ实现一个消息队列(一)
另⼀⽅⾯, Producer 和 Consumer 则通过⽹络的⽅式, 远程调⽤这些 API, 实现 ⽣产者消费者模型.• Topic 是发⼀个画图红包, 发 10 块钱红包, 同时出个题, 得画的像的⼈, 才能领. 也是每个领到的⼈。在实际的后端开发中, 尤其是分布式系统⾥, 跨主机之间使⽤⽣产者消费者模型, 也是⾮常普遍的需求.⼿动应答的⽬的, 是为了保证消息确实被消费者处理成功了. 在⼀些对于数据可靠性要求⾼的场景, ⽐。在⽹络通信的过程中, 客⼾端部分要提供对应的 api, 来实现对服务器的操作。原创 2024-05-03 09:46:05 · 1024 阅读 · 0 评论 -
✔ ★Java项目——设计一个消息队列(五)【虚拟主机设计】
◦ Topic: routingKey 是⼀个特定的字符串, 会和 bindingKey 进⾏匹配. 如果匹配成功, 则发到对应的队列中. 具体规则后续介绍.• 使⽤⼀个阻塞队列⽤来触发消息消费. 称为令牌队列. 每次有消息过来了, 都往队列中放⼀个令牌(也就是队列名), 然后消费者再去消费对应队列的消息.• 发布消息其实是把消息发送给指定的 Exchange, 再根据 Exchange 和 Queue 的 Binding 关系, 转发到对应队列中.• 新来订阅者的时候, 需要先消费掉之前积压的消息.原创 2024-05-03 09:35:09 · 952 阅读 · 0 评论 -
Java项目之消息队列(手写java模拟实现mq)【四、封装数据库存储操作和文件存储操作】✔ ★
此处的 “未确认消息” 就是指在⼿动 ACK 模式下, 该消息还没有被调⽤ basicAck. 此时消息不能删除,其中⼿动 ACK 是指当消息被消费之后, 由消费者主动调⽤⼀个 basicAck ⽅法, 进⾏主动确认. 服务器。硬盘上存储数据, 只是为了实现 “持久化” 这样的效果. 但是实际的消息存储/转发, 还是主要靠内存的结。为了保证消息被正确消费了, 会使⽤两种⽅式进⾏确认. ⾃动 ACK 和 ⼿动 ACK.对于 MQ 来说, 内存部分是更关键的, 内存速度更快, 可以达成更⾼的并发。原创 2024-04-19 09:27:15 · 627 阅读 · 0 评论 -
✔ ★Java项目——设计一个消息队列(三)【消息的存储和管理】
• 根据 Message 中的 offsetBeg 和 offsetEnd 定位到消息在⽂件中的位置. 通过randomAccessFile.seek 操作⽂件指针偏移过去. 再读取.• 读出的结果解析成 Message 对象, 修改 isValid 字段, 再重新写回⽂件. 注意写的时候要重新设定⽂件指针的位置. ⽂件指针会随着上述的读操作产⽣改变.GC 的时候会把所有有效消息加载出来, 写⼊到⼀个新的消息⽂件中, 使⽤新⽂件, 代替旧⽂件即可.原创 2024-04-16 10:00:15 · 603 阅读 · 0 评论 -
✔ ★Java项目——设计一个消息队列(二)
Java项目——设计一个消息队列四. 项⽬创建五. 创建核⼼类创建 Exchange(名字、类型、持久化)创建 MSGQueue(名字、持久化、独占标识)创建 Binding(交换机名字、队列名字、bindingKey用于与routingKey匹配)创建 Message(序列化、消息属性、消息体、起始位置和结束位置、有效、工厂方法)六. 数据库设计配置 sqlite实现创建表实现数据库基本操作实现 DataBaseManager测试 DataBaseManager四. 项⽬创建创建 SpringBoot原创 2024-04-11 21:25:17 · 915 阅读 · 0 评论 -
✔ ★Java项目——设计一个消息队列(一)【消息队列的背景知识、项目的需求分析、项目的模块划分】
另⼀⽅⾯, Producer 和 Consumer 则通过⽹络的⽅式, 远程调⽤这些 API, 实现 ⽣产者消费者模型.• Topic 是发⼀个画图红包, 发 10 块钱红包, 同时出个题, 得画的像的⼈, 才能领. 也是每个领到的⼈。在实际的后端开发中, 尤其是分布式系统⾥, 跨主机之间使⽤⽣产者消费者模型, 也是⾮常普遍的需求.⼿动应答的⽬的, 是为了保证消息确实被消费者处理成功了. 在⼀些对于数据可靠性要求⾼的场景, ⽐。原创 2024-04-06 21:11:29 · 740 阅读 · 0 评论 -
前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】
前后端分离开发,就是在项目开发过程中,对于前端代码的开发由专门的前端开发人员负责,后端代码则由后端开发人员负责,这样可以做到分工明确、各司其职,提高开发效率,前后端代码并行开发,可以加快项目开发进度。目前,前后端分离开发方式已经被越来越多的公司所采用,成为当前项目开发的主流开发方式。前后端分离开发后,从工程结构上也会发生变化,即前后端代码不再混合在同一个maven工程中,而是分为 前端工程 和 后端工程。原创 2024-03-28 10:38:35 · 1386 阅读 · 0 评论 -
Nginx【概述:网页服务器 并发能力强】【常见命令】【部署实战】【反向代理】
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。官网:https://nginx.org/Nginx可以作为静态web服务器来部署静态资源。原创 2024-03-28 10:28:43 · 1450 阅读 · 0 评论 -
在项目中缓存如何优化?SpringCache接口返回值的缓存【CachePut、CacheEvict、Cacheable】
Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。原创 2024-03-26 14:17:08 · 891 阅读 · 0 评论 -
在项目中数据库如何优化?【MySQL主从复制(创建一个从节点复制备份数据)】【数据库读写分离ShardingJDBC(主库写,从库读)】
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。二进制日志:二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。原创 2024-03-26 14:50:05 · 1248 阅读 · 0 评论 -
try catch捕获异常,如果代码多了就显得冗余重复。我们可以用ControllerAdvice捕获全局异常变量处理
【代码】try catch捕获异常,如果代码多了就显得冗余重复。我们可以用ControllerAdvice捕获全局异常变量处理。原创 2024-03-17 15:10:22 · 354 阅读 · 0 评论 -
RestContrller自动把返回对象转为JSON【自定义JacksonObjectMapper,优化对象和JSON转化】【比如bigint类型自动转成string】
super();//收到未知属性时不报异常//反序列化时,属性不存在的兼容处理//注册功能模块 例如,可以添加自定义序列化器和反序列化器@Slf4j/*** 设置静态资源映射*/@Overridelog.info("开始进行静态资源映射...");/*** 扩展mvc框架的消息转换器*/@Overridelog.info("扩展消息转换器...");//创建消息转换器对象//设置对象转换器,底层使用Jackson将Java对象转为json。原创 2024-02-27 17:27:24 · 402 阅读 · 0 评论 -
WebFilter【通过过滤器实现登录判断】
需要在引导类上, 加上Servlet组件扫描的注解, 来扫描过滤器配置的@WebFilter注解, 扫描上之后, 过滤器在运行时就生效了。原创 2024-02-27 13:13:34 · 464 阅读 · 0 评论 -
【配代码演示】Cookie和Session的区别
一、共同之处:cookie和session都是用来跟踪浏览器用户身份的会话方式。二、工作原理:1.Cookie的工作原理(1)浏览器端第一次发送请求到服务器端(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie(4)服务器端通过Cookie中携带的数据区分不同的用户2.Session的工作原理。原创 2023-09-18 16:09:02 · 124 阅读 · 0 评论 -
servlet实现登录功能【当用户当前未登陆,跳转登录页面才能访问,若已经登录了,才可以直接访问】
【代码】servlet实现登录功能【当用户当前未登陆,跳转登录页面才能访问,若已经登录了,才可以直接访问】原创 2023-09-16 15:29:56 · 453 阅读 · 0 评论 -
【入门级别java项目 一看就懂项目是如何运作的】【看完这个项目,就知道公司到底是怎么做项目的了】在线表白墙项目!!!(非常简单容易理解)
在线表白墙项目一、首先要清楚前端要工作的内容二、前端代码三、后端1. 准备idea环境2. 约定前后端交互接口3. 后端代码1. Message类 用于发送和接收数据(也用于方便存储数据库)2. 连接数据库的类 DBUtil3. 实现后端功能 类【项目—前后端交互 案例】表白墙一、首先要清楚前端要工作的内容二、前端代码三、后端1. 准备idea环境2. 约定前后端交互接口3. 后端代码1. Message类 用于发送和接收数据(也用于方便存储数据库)2. 连接数据库的类 DBUtil3. 实现后端功能 类原创 2023-09-16 14:24:06 · 78 阅读 · 0 评论 -
objectMapper的作用
把对象写成json字符串形式返回给前端。按着对象类型读取json字符串。原创 2023-09-16 11:53:12 · 105 阅读 · 0 评论 -
实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
【代码】实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理。原创 2023-09-02 11:54:29 · 702 阅读 · 0 评论 -
图书管理系统——java【接口,继承】
图书管理系统原创 2022-06-28 18:01:11 · 296 阅读 · 0 评论 -
【五子棋项目】【JSON 字符串 和JS 对象的转换】【JSON 字符串 和 Java 对象的转换】
原创 2023-08-25 19:37:00 · 41 阅读 · 0 评论 -
【五子棋项目】websocket在后端如何把java类对象转成JSON对象,并且返回给前端?【websocket是通过TextMess传递信息】
【代码】websocket在后端如何把java类对象转成JSON对象,并且返回给前端?【websocket是通过TextMess传递信息】原创 2023-08-26 11:09:05 · 185 阅读 · 0 评论 -
【五子棋项目】websocket的session和http的session是两种不同的session【但是可以转换】也就是把http的session添加到websocket中
【代码】websocket的session和http的session是两种不同的session【但是可以转换】也就是把http的session添加到websocket中。原创 2023-08-26 10:55:08 · 247 阅读 · 0 评论 -
Java实现“扑克牌游戏”底层逻辑
扑克牌原创 2022-07-12 16:10:26 · 1472 阅读 · 0 评论 -
【socket UDP实现翻译功能】【新手一看就懂】翻译软件的后台代码是怎么写的【一个用socket的UDP实现的翻译后台】
【代码】【新手一看就懂】翻译软件的后台代码是怎么写的【一个用socket的UDP实现的翻译后台】原创 2023-08-25 19:07:44 · 96 阅读 · 0 评论 -
网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块
【代码】网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块。原创 2023-08-09 16:54:43 · 811 阅读 · 0 评论 -
网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】
网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】原创 2023-08-05 11:20:50 · 1273 阅读 · 0 评论