- 博客(65)
- 收藏
- 关注
原创 3D打印云平台订单模块设计与优化(高并发+幂等性+异步解耦)
在本项目中,通过Token令牌+Redis+AOP实现幂等性和RabbitMQ实现异步解耦,是保障订单模块稳定、高效的两大核心技术手段。幂等性是分布式系统的基石:任何可能重试的操作都应考虑幂等性,设计时应选择与业务场景最契合的方案。异步是性能优化的银弹:凡是能异步的操作,就不要同步做。解耦不仅能提升性能,更能提升系统的可维护性和扩展性。技术为业务服务:所有的架构设计和技术选型,最终目的都是为了更好地支撑业务,解决实际痛点。
2025-09-04 18:01:42
1065
原创 Elasticsearch赋能3D打印机任务统计分析
在3D打印机管理系统中,PrinterController负责提供各类打印任务统计接口,如打印时长分布、耗材用量趋势、任务成功率等关键指标。随着系统运行时间增长(假设已累计10万+打印任务),基于MySQL的传统统计方案逐渐面临严峻挑战:• 需要扫描PrinterJobStatus全表(10万+行)• 关联Printer表时反复索引查询• 排序前需生成临时表存储所有分组结果• 生产影响:报表页面卡死,无法快速定位高负荷设备2. 实时性要求难以满足:管理员需要实时查看当前打印任务状态和趋势,但My
2025-09-02 13:40:51
1272
原创 意向锁(Intention Lock)
MySQL意向锁是InnoDB中的表级锁,主要作用是提高加锁效率,避免行锁与表锁冲突。它不是真正的锁,而是用于快速判断表中是否有行被锁的"信号"。意向锁分为IS(意向共享锁)和IX(意向排他锁)两种,分别对应行锁的共享锁和排他锁。关键特性包括:自动获取、表级锁、不会阻塞除全表锁外的请求。意向锁之间相互兼容,但会与表级S/X锁冲突。例如,当一个事务获取行锁时会先在表级加意向锁,其他事务加表锁时只需检查意向锁即可判断冲突,无需遍历所有行。
2025-08-24 18:15:28
613
原创 软件工程基本知识
软件用户是指使用软件并获取软件功能的人或组织,例如“铁路12306”的旅客,也含管理维护人员;实际中,需求分析人员将成果写成软件需求规格说明书,交给设计者指导设计、给用户评估,这体现文档能记录开发成果,助力交流、保证软件质量,同时也方便后续开发管理维护。软件体系结构设计的任务就是根据具体的软件需求,考虑遗留的系统和可重用软件资源,参考软件体系结构风格,给出软件系统在体系结构层面的解决方案,得到软件体系结构模型,以指导后续的软件设计和实现工作。迭代模型:指导思想:多次迭代,每次仅针对部分明确的软件需求;
2025-06-20 14:06:17
518
原创 软件工程的相关名词解释
在α测试过程中,参与测试的人员要尽可能逼真地模拟实际的运行环境以及实际用户对软件产品的使用,最大限度地涵盖用户的可能操作方式,以尽可能多地发现软件中的缺陷,经过α测试的软件通常被称为软件的β版。它提供了一系列过程、策略、方法学和工具,帮助需求工程师加强对业务或领域问题及其环境的理解,获取和分析软件需求,指导软件需求的文档化和评审,以尽可能获得准确、一致和完整的软件需求,产生软件需求的相关软件制品。这些现象发生在逻辑层面,而非发生在物理层面。①将系统的、规范的、可量化的方法应用于软件开发、运行和维护的过程。
2025-06-14 15:24:19
1026
原创 SpringBoot自动装配原理和自定义starter(小学生版)
用「早餐机做煎饼」的比喻 + 分步图解 + 面试模板,帮你彻底搞懂自定义starter(附可直接背诵的模板)。一、做煎饼的比喻假设要做一个自动煎饼机配方包(自动配置类):决定什么时候放鸡蛋、什么时候加葱花材料包(starter项目):把配方和必备材料(如面粉、油纸)打包智能开关(条件注解):检测用户有没有自带鸡蛋二、手把手四步实现第一步:新建项目(材料包)my-emoji-starter(空壳项目,只放pom.xml)└── my-emoji-autoconfigure(核心代码)
2025-02-22 21:10:39
978
原创 Sentinel
Sentinel 是阿里巴巴开源的分布式系统流量防卫组件,提供流量控制熔断降级系统自适应保护等功能。作为 Spring Cloud Alibaba 核心组件,广泛应用于电商秒杀、直播等高并发场景,防止系统因突发流量崩溃。
2025-02-16 20:48:40
961
原创 Java基础面试题day02——数据类型
另一个非常重要的原因就是在Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList集合类就只能以类作为他的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成类,也就是Integer才能被List所接受。由于我们这里声明的sum为Integer类型,在上面的循环中会创建将近4000个无用的Integer对象,在这样庞大的循环中,会降低程序的性能并且加重了垃圾回收的工作量。因此在我们编程时,需要注意到这一点,正确地声明变量类型,避免因为自动装箱引起的。
2025-01-12 15:39:34
893
原创 Java基础面试题--概念 day01
跨平台主要依赖于JVM我们编写的Java源程序会被Java编译器(javac)编译成字节码文件(.class),Java虚拟机就是负责把字节码文件翻译成特定平台下的机器语言然后运行。也可以这样子理解:JVM就是一个“桥梁",一个中间件,是实现跨平台的关键!所以,运行Java程序必须有JVM的支持。注意跨平台的是Java程序而不是JVM(JVM是C/C++开发的,不同平台下安装不同版本的JVM)
2025-01-10 15:15:55
841
原创 freemarker了解
FreeMarker 是一个用Java编写的模板引擎,主要用于生成HTML网页、电子邮件、配置文件、源代码等文本输出。它最初是为Java服务器页面(JSP)的替代品而设计的,但可以用于任何需要动态生成文本输出的场景。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。常用的java模板引擎还有哪些?技术说明JspJsp 为 Servlet 专用,不能单独进行使用VelocityVelocity从2010年更新完 2.0 版本后,7年没有更新。
2024-12-04 19:58:11
1313
原创 真实情景之:处理用户密码时的“加盐”措施
盐:是一串随机生成的数据,它与用户的密码一起被哈希处理。加盐的目的:使得即使两个用户拥有相同的密码,由于使用的盐不同,最终存储的哈希值也会不同,从而增加安全性。
2024-12-02 15:46:57
1481
原创 JVM的生命周期
Java虚拟机(JVM)是Java应用程序运行的核心,它负责加载、验证、准备、解析和初始化Java类,并执行其字节码。JVM的生命周期涵盖了从启动到退出的全过程,其间涉及复杂的类加载、内存管理和垃圾收集机制。JVM提供自动内存管理,即垃圾收集机制,以释放不再使用的对象所占用的内存。常见的垃圾收集算法包括标记-清除、复制、标记-整理等。(initial class)来完成的,这个类是由虚拟机的具体实现指定的。实际上,执行所谓的Java程序时,真正执行的是一个叫做Java虚拟机的进程。
2024-11-30 15:00:36
1251
原创 数据库主键设计:自增ID、UUID与雪花算法的探讨
在数据库设计中,选择合适的主键是至关重要的。主键的选择不仅影响到数据的唯一性,还关系到查询性能、存储空间以及系统的可扩展性。当雪花算法中的序列号达到最大值后重置为零时,可能会导致短时间内生成的ID分布不均匀。一种解决方案是在序列号部分引入时间戳的最后一位,这样即使序列号重置,ID也不会完全相同,从而解决了分布不均的问题。在实际应用中,应根据具体的业务需求和系统规模来选择最合适的主键策略。最终组合得到的64位ID将是这些部分的二进制形式的按位或运算结果。适用于单库单表且不需要考虑分布式环境的情况;
2024-11-29 15:08:41
1504
原创 Docker 详解与入门案例
Docker 是一个开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速部署、可扩展性和一致性。Docker 的出现极大地改变了软件开发和部署的方式,使得应用程序的开发、测试和部署更加高效和可靠。(一)Docker 的历史Docker 最初是由 Solomon Hykes 在 2013 年创建的一个开源项目,其灵感来源于集装箱运输的理念。
2024-10-21 17:48:10
1429
1
原创 WebSocket介绍和入门案例
WebSocket 是一种在单个TCP连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传输,克服了传统 HTTP 协议只能由客户端发起请求、服务器响应的单向通信模式的局限性。特点包括低延迟、实时性强、减少不必要的网络流量和服务器资源消耗等。HTTP协议和WebSocket协议对比:HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请求响应模式(浏览器发送请求给服务器)WebSocket支持双向通信HTTP和WebSocket底层都是TCP连接。
2024-10-17 21:51:55
1482
原创 Spring Task快速入门
Spring Task 是 Spring 框架提供的一个轻量级的任务调度工具。它允许开发者在 Spring 应用中方便地实现定时任务,无需引入额外的复杂的任务调度框架。简单易用:通过注解的方式即可轻松定义定时任务,配置简单。与 Spring 框架集成良好:可以充分利用 Spring 的依赖注入等特性。支持多种任务调度方式:如固定延迟、固定速率、cron 表达式等。
2024-10-17 21:26:22
542
1
原创 初识HttpClient之记录
除了基本的 HTTP 协议,一些 HTTP Client 还支持其他相关协议和功能,如 HTTPS(安全 HTTP)、HTTP/2、连接池管理、代理设置、身份验证等。:HTTP Client 能够构造各种类型的 HTTP 请求,包括请求方法(GET、POST、PUT、DELETE 等)、请求头部信息、请求参数和请求体。这些库提供了丰富的 API,允许开发人员轻松地与 Web 服务进行交互,处理请求和响应的头部信息、请求参数、响应实体等。它可以解析响应头部信息、获取响应状态码,并提取响应实体中的数据。
2024-10-13 13:54:08
1174
原创 Nginx快速入门
公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。
2024-10-04 23:06:12
770
原创 Java中JWT(JSON Web Token)的运用
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间以紧凑的方式安全地传递信息。JWT可以被用作身份验证和信息交换的手段,特别适合用于前后端分离的应用程序。
2024-10-04 15:11:43
5024
原创 Spring之Bean的生命周期 2024-9-6 19:47
Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。
2024-09-06 20:17:33
953
2
原创 Redis 入门到精通2
输出:等待接收消息,当有发布者向“news”频道发布消息时,会显示消息内容。输出:显示读取到的消息内容,格式为一个数组,包含消息 ID 和字段值。输出:显示读取到的消息内容,格式为一个数组,包含消息 ID 和字段值。输出:返回订阅者的数量,表示有多少个订阅者接收到了这条消息。:向 Stream 中添加消息。:读取 Stream 中的消息。:消费者从消费者组中读取消息。输出:返回生成的消息 ID。:消费者确认处理完消息。:订阅一个或多个频道。:向指定频道发布消息。输出:确认的消息数量。
2024-08-30 12:32:36
917
原创 Redis 入门到精通1
设置一个键值对。输出:OKGET key:获取指定键的值。GET name输出:“John”INCR key:将键的值自增 1。输出:1DECR key:将键的值自减 1。输出:1:将值追加到指定键的现有值后面。输出:11(表示新字符串的长度)
2024-08-30 11:48:50
585
原创 Node.js自学速通---- 24-8-22 22-44
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可以让 JavaScript 在服务器端运行。
2024-08-23 00:22:43
1156
原创 StringBuffer与StringBuilder 2024-8-21 22-13
和都是 Java 中用于操作可变字符串的工具类。它们的主要区别在于线程安全性和性能。是线程安全的,但性能相对较低;是非线程安全的,但在单线程环境下性能更高。在选择使用哪个类时,需要根据具体的应用场景来决定。如果是在多线程环境下操作字符串,应该使用;如果是在单线程环境下,为了获得更好的性能,可以选择使用。
2024-08-21 22:24:29
890
原创 JavaFX入门01 制作简易计算器
*** Main 类,继承自 Application,是 JavaFX 应用程序的入口*//*** 主函数,用于启动 JavaFX 应用程序* @param args 命令行参数*/// 启动 JavaFX 应用程序,传递命令行参数/*** 重写 start 方法,用于设置应用程序的初始界面* @param stage 应用程序的主舞台* @throws Exception 如果在加载 FXML 文件时发生异常*/@Override// 设置舞台的标题。
2024-08-20 13:02:17
580
原创 MybatisPlus多表查询及分页查询 2024/8/18 19:10
具体来说,内连接会根据连接条件(通常是两个表之间的共同字段)将两个表中符合条件的行进行匹配,并将匹配的结果作为输出。例如,如果在第一段代码中,假设每页显示 10 条数据,当前是第 2 页,那么它会返回年龄为 18 岁的用户数据,并且按照每页 10 条,第 2 页的规则进行分页。例如,如果在查询用户数据时使用了这些条件,那么最终得到的结果将是年龄为 18 岁、用户名包含 “Jack” ,并且按照用户。内连接是SQL中最常用的连接类型之一,用于从多个表中检索相关数据,是数据查询和分析中非常重要的操作。
2024-08-18 19:11:21
4009
2
原创 MySQL入门 DDL\DML\DQL
然后,我们通过 INSERT 插入了几条员工记录,使用 UPDATE 命令将 Alice 的薪资更新,使用 DELETE 删除了 Bob 的记录,最后使用 SELECT 检索出薪水高于 60000.00 的员工信息。换句话说,product_id 列的值在 Orders 表中必须是来自 Products 表的合法产品标识符。通过外键约束,可以确保数据的一致性和有效性,因为它阻止在子表中插入不存在的父表主键值。:这是 Orders 表中的一个列,用于存储产品的标识符。命令来添加列,并指定默认值。
2024-08-08 21:02:46
1615
原创 字符串中的第一个唯一字符(简单)
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。输入: s = “leetcode”输出: 0输入: s = “loveleetcode”输出: 2输入: s = “aabb”输出: -1。
2024-08-06 17:38:42
439
原创 有效的括号(简单)
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。输入:s = “()”输出:true输入:s = “()[]{}”输出:true输入:s = “(]”输出:false。
2024-08-06 17:27:14
561
原创 力扣每日一题2024.8.5
给定一个正整数 n ,请你统计在 [0, n] 范围的非负整数中,有多少个整数的二进制表示中不存在。输入: n = 5输出: 5解释:下面列出范围在 [0, 5] 的非负整数与其对应的二进制表示:0 : 01 : 12 : 103 : 114 : 1005 : 101其中,只有整数 3 违反规则(有两个连续的 1 ),其他 5 个满足规则。输入: n = 1输出: 2输入: n = 2输出: 3。
2024-08-05 18:04:11
940
原创 Java修炼之反射 2024.7.30 15:13
Java 反射(Reflection)是一种强大且灵活的机制,允许程序在运行时检查和操作类、接口、字段和方法等高级结构。它使开发者可以动态地获取对象的信息,甚至可以在运行时创建新的类实例、调用方法和改变属性。反射是 Java 提供的一个API,可以对 Java 类的组成部分进行观察和操作类的名称类的方法类的字段(属性)类的构造函数修饰符(如publicprivate等)Java 的反射机制是一种强大的工具,可以在运行时动态操作对象及其成员。
2024-07-30 15:13:32
554
原创 2024.7.30力扣每日一题(笔记)
给你一个下标从 0 开始的二维数组 variables ,其中 variables[i] = [ai, bi, ci, mi],以及一个整数 target。输入:variables = [[2,3,3,10],[3,3,3,1],[6,1,1,4]], target = 2输出:[0,2]
2024-07-30 14:28:03
599
原创 289.生命游戏(中等)
通过使用一个复制数组,确保计算的准确性和逻辑的简单性,从而实现稳定、正确的细胞状态更新。这样能够避免直接在遍历过程中修改原始数据所带来的复杂性和潜在错误,是一种非常常见的编程技巧。public void gameOfLife(int[][] board) { // 定义游戏的主函数,输入参数为二维数组 'board',表示细胞的状态// 创建数组 'neighbors' 用于表示细胞相对于自身的偏移量,以便计算邻居// 获取 'board' 的行数// 获取 'board' 的列数。
2024-07-29 12:31:38
490
原创 2024.7.29力扣每日一题(笔记)
你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:1.- 表示本回合新获得分数 x2.- 表示本回合新获得的得分是。题目数据保证记录此操作时前面总是存在两个有效的分数。3.- 表示本回合新获得的得分是。题目数据保证记录此操作时前面总是存在一个有效的分数。4.- 表示前一次得分无效,将其。
2024-07-29 11:46:28
403
原创 54.螺旋矩阵(中等) 2024.7.28 18:01
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]
2024-07-28 18:09:54
439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅