- 博客(52)
- 收藏
- 关注
原创 关于策略模式的那些事
策略模式是一种经典的行为设计模式,核心思想是将算法封装成独立类,使其可互相替换。它解决了三大痛点:消除if-else地狱、遵循开闭原则、提高算法复用性。策略模式包含三个角色:抽象策略接口、具体策略类和上下文调度中心。通过生活例子(出行方式选择)和代码演示,展示了从基础实现到性能优化(HashMap优化)、再到灵活判断(canHandler方法)的演进过程。该模式使代码更优雅、易维护,特别适合需要频繁变更或扩展算法的场景。
2026-04-19 20:29:44
18
原创 抽奖系统(二)注册模块
本文主要介绍了用户模块注册功能的实现,重点包括敏感字段加密和参数校验。对于手机号采用AES对称加密,密码使用SHA256哈希加密,通过MyBatis的TypeHandler实现自动加解密。参数校验使用Spring Validation和正则表达式验证邮箱、手机号等格式,并检查字段唯一性。系统采用三层架构设计(Controller-Service-DAO),使用统一异常处理捕获各类异常。通过日志记录和错误码机制提升系统可维护性,实现了安全可靠的用户注册功能。
2026-03-06 16:56:17
428
14
原创 抽奖系统(一)
本文描述了一个抽奖管理系统的基本功能架构和技术实现方案。系统包含管理员模块(注册/登录)、人员管理、奖品管理、活动管理、抽奖功能以及通知模块。管理员可通过电话或邮箱登录,支持创建普通用户和管理奖品活动。抽奖过程包含多轮抽奖环节,确保每人仅中奖一次,并具备异常处理机制。技术实现方面采用Spring Boot框架,包含错误码统一管理、自定义异常处理、通用返回封装、序列化工具和日志配置等功能模块。系统通过分层架构设计,实现了前后端分离,并采用统一的错误处理和日志记录机制,确保系统稳定性和可维护性。
2026-03-06 11:43:02
711
24
原创 String类常见用法
本文摘要: Java字符串处理主要涉及String、StringBuilder和StringBuffer三类。String具有不可变性,提供了构造、比较(==、equals、compareTo)、查找、转换、替换、拆分和截取等操作。StringBuilder和StringBuffer用于可变字符串操作,支持append等方法。字符串常量池优化了相同字符串的内存使用,直接赋值的字符串会共享常量池对象,而new创建的字符串则生成独立对象。理解这些特性对高效处理字符串至关重要。
2026-03-05 23:40:05
344
6
原创 快速选择算法
本文介绍了快速选择算法及其在解决"数组中第K个最大元素"和"最小K个数"问题中的应用。核心是通过三路划分将数组分为小于、等于和大于基准值的三个区域,再根据K值所在区间递归处理部分数组,实现O(n)时间复杂度。文章详细讲解了算法实现步骤,包括基准值选择、三指针划分策略以及递归终止条件,并提供了完整代码示例。该算法相比冒泡排序等传统方法更高效,特别适用于需要快速定位特定排名元素的场景。
2025-12-10 17:19:14
796
4
原创 高效IO的理解
本文介绍了高效IO替代Scanner的使用场景及实现方法。通过对比分析指出,Scanner在小规模调试时简单易用,但在大数据量输入时性能较差,而高效IO(BufferedReader)能提升10倍以上性能。给出了包含Read类和main类的完整代码实现,详细解析了StringTokenizer分割字符串和BufferedReader缓冲读取的原理。重点讲解了next()方法的工作流程,以及nextInt()、nextLine()等方法的具体实现。最后通过输入案例的执行流程图解,展示了方法调用顺序和数据处理过
2025-09-28 15:12:02
699
23
原创 常见位运算总结
本文介绍了位运算的基本操作,包括四种位运算符(&、|、~、^)和三种移位运算符(<<、>>、>>>)。详细讲解了按位与、或、取反、异或的运算规则,以及左移、右移、无符号右移的实现原理。同时提供了5个典型例题及解法:1)判断某二进制位是0/1;2)将某位改为1;3)将某位改为0;4)提取最右侧的1;5)将最右侧1改为0。强调位运算代码虽简洁但逻辑复杂,需要多加练习掌握。建议使用括号明确运算优先级。
2025-09-23 14:36:35
876
26
原创 MYSQL数据库约束
数据库约束时关系型数据库的一个重要功能。主要的目的是保证数据的完整性,也可是为数据的正确性(数据本身是否正确,关联关系是否真确)。
2024-11-27 16:27:36
802
31
原创 MYSQL表的增删改查(下)
首先我们可以先看一下哪三位同学的总成绩为倒数前三,为了方便比较,这里把总分为null的给省略了,故只查询到10行。注意:update操作时,如果不加where条件,修改的将是整张表的所有记录,是非常危险的操作。例如,还是上面的exam表,要把 孙悟空同学的成绩删去,按照习惯,我们先把表全列查询一下,从结果可以看到,查询的行数从11行变成了9行,并且删除后的表中没有孙悟空同学。这里其实和前面的多列查询有些相似,是把set后面的一个语句换成多个。例如,把宋公明的语文成绩改为60,数学成绩改为77。
2024-11-26 21:15:09
1726
18
原创 MYSQL 表的增删改查(上)
现在将student表换为 exam表,对exam表进行全列查询,这个表可以自己创建一份,然后通过新增数据来实现。可以看到,其中有11行,并且其中有两个98和80,这时候我们可以通过去重查询去除其中一个98和80。11行,因为查询的id列并没有重复的内容,只有math里面有重复内容是无法进行去重的。我们可以通过 指定查询的列 来实现指定列查询,实际上就是把 * 换成想要查询的列。像student表中,就有id,name两列,那么我们可以选择只插入其中一列。可以看到这次查询的结果是有9行,并且没有重复的数。
2024-11-26 09:16:32
1589
14
原创 Java:插入排序
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳 定的;直接插入排序是稳定的,由上面图片能看到它是具有稳定性的,但如果是代码部分的 arr[j] > tmp 改为:arr[j] >= tmp,以上面的2a和2b为例,它们的顺序就会发生变化。所谓的排序,就是使一串记录,按照某个或某些关键字的大小,递增或递减的排列起来的操作。
2024-09-28 15:39:21
4669
67
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅