自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 从零实现一个短链接项目

短链接就是短网址,是在长度上比较短的网址。简单来说就是帮您把冗长的URL地址缩短成8个字符以内的短网址。当我们在腾讯、新浪发微博时,有时发很长的网址连接,但由于微博限制字数,所以微博就自动把您发的长网址给转换成短网址了。在和手机提醒等限制字数的地方来使用短网址,的确是一个不错的方案。

2024-12-02 18:17:46 1769

原创 在 Linux 上安装 JDK 和 Maven:超详细图文教程

本文详细介绍了在Linux系统(Ubuntu和CentOS)上安装JDK和Maven的步骤。首先,选择适合的JDK版本(如OpenJDK 11或17),并通过官方软件源或手动下载安装包进行安装。接着,配置环境变量并验证安装。对于Maven,从官网下载最新版本,解压并配置环境变量,最后验证安装。文章还提供了一个自动化安装脚本,支持一键安装JDK和Maven,适用于Ubuntu和CentOS系统。通过这些步骤,用户可以顺利完成Java开发环境的搭建,为后续的Java项目开发做好准备。

2025-05-16 23:42:05 411

原创 基于策略模式实现灵活可扩展的短信服务架构

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端。多种短信服务的统一接入业务代码与具体实现的解耦灵活的策略扩展能力便于维护和测试的代码结构这种设计不仅适用于短信服务,也可以推广到支付网关、文件存储等需要支持多实现的场景。策略模式是保持软件扩展性和维护性的重要工具之一。

2025-04-30 14:31:16 763 1

原创 基于RabbitMQ实现订单超时自动处理

设置消息的存活时间死信队列(DLX):处理过期消息手动确认机制:确保消息可靠消费订单生产者(投递延迟消息)RabbitMQ配置(队列和交换器)订单消费者(处理超时订单)本文介绍的基于RabbitMQ的订单超时处理方案,相比传统定时任务方式具有明显优势。通过合理利用消息队列的特性,我们构建了一个可靠、高效、实时的订单处理系统。该方案也可扩展应用于其他需要延迟处理的业务场景,如优惠券过期、自动确认收货等。

2025-04-23 13:24:19 628

原创 Spring Boot 中 Bean 的生命周期详解

通过@Component@Service等注解定义或通过 XML 配置、Java 配置类 () 定义@Component@Override// 初始化逻辑@Override// 销毁逻辑Spring Boot 中 Bean 的生命周期是一个精心设计的过程,提供了多个扩展点供开发者干预。理解这些阶段和扩展点,能够帮助我们更好地控制组件的行为,构建更加健壮的应用。在实际开发中,应根据具体需求选择合适的干预方式,同时注意避免常见的陷阱和性能问题。

2025-04-11 11:35:55 1213

原创 微信小程序登录--后端版

通过以上可以实现后端获取用户信息的主要逻辑,其余业务代码可根据自身进行调节。

2025-03-29 15:53:12 451

原创 Spring Cloud 2023.0.x 整合 Nacos 2.2.x 全指南

【代码】Spring Cloud 2023.0.x 整合 Nacos 2.2.x 全指南。

2025-03-28 14:06:39 452

原创 手撕代码之前缀树(Trie)

Trie的"非典型性"体现在其**结构设计哲学**上:- **空间换时间**:每个节点固定26个子节点指针(对应26个字母)- **隐式存储**:字符信息通过指针数组索引隐式存储(非显式存储字符)- **路径即信息**:从根节点到当前节点的路径构成存储的字符串

2025-03-03 22:27:43 402

原创 从零实现一个简易的聊天软件(Netty版)

官方的简介:Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。为什么使用Netty,我们这里就不说java自带的socket,我们这里说为什么不使用Nio呢?NIO的类库和API繁杂,学习成本高,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能写出高质量的NIO程序。臭名昭著的

2025-02-06 11:35:22 985

原创 初识Netty(使用Netty实现服务端与客户端)

Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程,但是你仍然可以使用底层的 API。Netty 的内部实现是很复杂的,但是 Netty 提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty 是完全基于 NIO 实现的,所以整个 Netty 都是异步的。

2025-01-23 12:02:56 407

原创 Mybatis-plus代码生成器

代码自动生成器非常好用,我们只需要提供我们数据库的表名,然后就可以让代码生成器自动帮我们完成各种代码的创建,整个过程非常便捷。

2024-12-18 10:09:45 213

原创 全局token验证

​通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。JWT的认证流程如下:前端通过Web表单将自己的用户名和密码发送到后端的接口,这个过程一般是一个POST请求。建议的方式是通过SSL加密的传输(HTTPS),从而避免敏感信息被嗅探。

2024-12-05 21:30:10 766

原创 设计模式之代理模式

​ 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能,这种类型的设计模式属于结构型模式。代理模式通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端的请求转发给目标对象,同时可以在转发请求前后进行额外的处理。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

2024-11-29 14:50:23 597

原创 Springboot+aop实现配置多数据源

​ 这是我司在对于动态数据源的一个处理方法,采用动态加载数据库信息实现动态数据源的切换。通过使用Spring AOP + 注解来替换当前线程ThreadLocal中的值,并且通过重写AbstractRoutingDataSource类重写determineCurrentLookUpKey()方法,实现动态数据源切换,满足功能实现的代码0侵入性,并且高度解耦,实现可拔插功能效果.

2024-11-20 20:23:16 598

原创 mysql锁之乐观锁、悲观锁、表锁、行锁、共享锁、排他锁

锁是计算机协调多个进程或线程并发访问某一个资源的机制,在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

2024-10-14 22:42:36 1121

原创 socket编程(java)

​ Socket(套接字)是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口,允许应用程序通过网络进行数据传输,实现不同主机之间的通信。​ Socket可以看作是一种抽象的概念,用于描述网络通信的端点。它包含了通信所需的各种参数和状态信息,以便应用程序能够通过它进行数据的发送和接收。

2024-10-14 08:55:53 986

原创 redission实现分布式锁

在使用SETNX实现的分布式锁中,因为存在锁无法续期导致并发冲突的问题,所以在真实的生产环境中用的并不是很多,其实,真正在使用Redis时,用的比较多的是基于Redisson实现分布式锁。为了避免锁超时,Redisson中引入了看门狗的机制,他可以帮助我们在Redisson实例被关闭前,不断的延长锁的有效期。(默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。)基于Redisson可以非常简单的就获取一个可重入的分布式锁。基本步骤如

2024-10-08 19:43:55 387

原创 设计模式之代理模式

​ 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能,这种类型的设计模式属于结构型模式。代理模式通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端的请求转发给目标对象,同时可以在转发请求前后进行额外的处理。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

2024-10-08 09:43:08 698

原创 Spring Aop实现日志收集和重复属性赋值

​ AOP(Aspect-Oriented Programming),即面向切面编程,用人话说就是把公共的逻辑抽出来,让开发者可以更专注于业务逻辑开发。​ 和IOC一样,AOP也指的是一种思想。AOP思想是OOP(Object-Oriented Programming)的补充。OOP是面向类和对象的,但是AOP则是面向不同切面的。一个切面可以横跨多个类和对象去操作,极大的丰富了开发者的使用方式,提高了开发效率。譬如,一个订单的创建,可能需要以下步骤:权限校验事务管理创建订单日志打印。

2024-10-05 14:13:01 991

原创 用setnx实现一个分布式锁

优点(1)实现简单:SETNX命令实现简单,易于理解和使用。(2)性能较高:由于SETNX命令的执行原子性,保证了分布式锁的正确性,而且在Redis中,SETNX命令是单线程执行的,所以性能较高。缺点(1)锁无法续期:如果加锁方在加锁后的执行时间较长,而锁的超时时间设置的较短,可能导致锁被误释放。(2)无法避免死锁:如果加锁方在加锁后未能及时解锁(也未设置超时时间),且该客户端崩溃,可能导致死锁。

2024-10-04 20:35:11 1371

原创 kafka的成神秘籍(java)

​ Kafka 最初是由Linkedin 即领英公司基于Scala和 Java语言开发的分布式消息发布-订阅系统,现已捐献给Apache软件基金会。Kafka 最被广为人知的是作为一个 消息队列(mq)系统存在,而事实上kafka已然成为一个流行的分布式流处理平台。其具有高吞吐、低延迟的特性,许多大数据处理系统比如storm、spark、flink等都能很好地与之集成。按照Wikipedia上的说法,kafka的核心数据结构本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”。

2024-10-02 23:55:30 2265

原创 x-file-storage实现文件上传

​ 不使用x-file-storage时如果使用某个云首先需要学习他的sdk,这样很麻烦,而x-file-storage集成了各种云的上传,只需要进行配置即可一行代码进行上传,方便简洁。​ 一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、 Amazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2、金山云

2024-09-27 18:42:25 912

原创 JAVA基础之枚举

枚举类型是指由一组固定的常量组成合法的类型。Java中由关键字enum来定义一个枚举类型。

2024-09-26 08:47:58 273

原创 WebSocket详解

WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2011年成为标准。

2024-08-27 21:24:59 415

原创 Redis常用的数据类型之哈希(Hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。以用户id为key,商品id为field,商品数量为value,恰好构成了购物车的3个要素。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

2024-08-27 16:56:39 224

原创 Redis常用的数据类型之字符串(String)

​ 验证手机号,将验证码存放于redis中添加过期时间,并持久化于mysql中,登录成功后将用户唯一token存放于redis中,当异地登录时先判断用户本地是否有该token,没有则更新token。​ 当本地token与远程token不一致时,及证明远程登录情况发生,则强制本地下线。Redis 字符串数据类型的相关命令用于管理 redis 字符串值。​ Redis实现短信验证码单点登录。

2024-08-27 16:54:14 900

原创 redis的使用(java)

redis的使用

2024-08-27 11:28:39 180

原创 设计模式之装饰器模式

动态地给一个对象添加额外的职责,同时不改变其结构。装饰器模式提供了一种灵活的替代继承方式来扩展功能。

2024-08-22 20:29:10 356

原创 实现linux下的简易回收站

​ 在日常工作中,我们经常需要管理和维护大量的文件。误删文件的情况时有发生,特别是在 Linux 环境下,传统的rm命令一旦执行便不可撤销。为了解决这一问题,我们开发了一款简易的 Linux 回收站脚本,旨在为用户提供一种安全可靠的文件管理方式。

2024-08-22 16:42:00 326

原创 Nexus从入门到精通

nexus的全称是Nexus Repository Manager,是Sonatype公司的一个产品。它是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。我们主要用它来搭建公司内部的maven私服。但是它的功能不仅仅是创建maven私有仓库这么简单,还可以作为nuget、docker、npm、bower、pypi、rubygems、git lfs、yum、go、apt等的私有仓库,功能非常强大。

2024-08-20 21:22:11 3461

原创 FastJson操作

使用FastJson将Java对象序列化为JSON字符串很简单,只需要调用FastJson提供的静态方法JSON.toJSONString()。是版本号,根据需要使用特定版本,建议使用最新版本。

2024-08-20 10:55:52 686

原创 设计模式之单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。

2024-08-18 22:47:41 271

原创 Arthas的使用

​ Arthas的功能包括进程状态查看、Java类、方法的查找和监控、异常信息分析、线程状态监控、JVM统计信息查看等。而运维只需要将目标关注于。​ Arthas对于java程序是毫无影响的。

2024-08-06 21:10:36 1403

原创 一文知数据库

什么是数据库​ 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。什么是数据库管理系统​ 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。数据库与数据库管理系统的关系1.2。

2024-07-15 20:55:00 6820

原创 JAVA文件操作

1.因为上次笔试题有文件操作,而自己很久没有写过文件操作了,而没有完全A出来,狠狠打自己脸🆒2.FileInputStream类 和 FileOutputStream类总是成对出现的,一个用作输入流,另一个自然是输出流结果[外链图片转存中…(img-krsqfAV2-1720870103694)]1.因为上次笔试题有文件操作,而自己很久没有写过文件操作了,而没有完全A出来,狠狠打自己脸🆒。

2024-07-13 19:34:08 608

原创 docker安装mysql

docker -v。

2024-07-01 19:35:31 341

原创 RabbitMQ部署指南

我们在Centos7虚拟机中使用Docker来安装。

2024-06-30 20:06:26 448

原创 git常用命令及冲突解决

git -v。

2024-06-27 22:05:53 357

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除