- 博客(729)
- 问答 (7)
- 收藏
- 关注
原创 Go语言的接口
接口(interface)是 Go 语言中的一种类型,用于定义行为的集合,它通过描述类型必须实现的方法,规定了类型的行为契约。Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。Go 的接口设计简单却功能强大,是实现多态和解耦的重要工具。接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。Go 的接口 = 行为的集合,关注“你能做什么”,而不是“你是谁”最重要的特点:隐式实现(无需。
2026-01-09 11:52:45
171
原创 Java使用Redis ZSet恢复用户能量
当用户进行答题,消耗一定的能量,每隔30分钟恢复一个能量值,很多时候我们会想到使用定时任务,每隔一段时间扫描有哪些用户能量低于最大能量值,然后进行恢复。但不同用户恢复能量的时间点不一样。3.如果用户开通会员,或者浏览广告恢复能量后,当该用户从能量恢复的用户体系中移除出去。前面博文使用了redis hash存储用户能量信息,本篇使用zset管理用户能量恢复。1.当用户进行答题扣除能量后,为该用户进行订阅,列入能量恢复的用户体系中;这样做的好处是避免用户能量表全表扫描。2.然后在定时任务中为用户进行能量恢复;
2026-01-08 15:40:58
260
原创 使用策略模式+装饰器模式实现接口防重复提交
RepeatSubmitStrategy(策略)Redis / 内存 / Token。提现 / 下单 / 行为记录接口。Redis / 内存都可能用。新加一个 Strategy。
2026-01-07 16:59:06
119
原创 使用docker安装myql 8.0
编辑配置文件[mysqld]# 基础配置default-authentication-plugin=mysql_native_password # 兼容旧客户端default-time_zone = '+8:00' # 中国时区lower_case_table_names=1 # 表名不区分大小写(Windows兼容)# 性能配置(基础版)skip-name-resolve # 跳过域名解析,提升连接速度[client][mysql]port=3309。
2026-01-03 16:53:26
234
原创 Java开发中VO的使用
如果只有个别字段跟前端要求不一样,为了给前端提供所需的JSON key,可以在实体类对应属性上添加注解:@JsonProperty。VO(View Object,视图对象)清楚这个边界,能有效防止各种O的滥用。这里重点说下VO的使用。那么VO 的边界在哪?不需要 VO 的情况。必须用 VO 的情况。返回结构 ≠ 表结构。表结构与返回结构一致。
2025-12-28 11:48:13
235
原创 Go语言的递归函数
递归函数函数在自己的函数体中调用自己递归 =当前问题拆成更小规模的同类问题直到一个终止条件(base case)少了终止条件,程序就会「无限套娃」直接栈溢出。n!0!= 1Go 实现return 1 // 终止条件调用f(0) = 0f(1) = 1Go 实现//1、声明return n//2、调用fmt.Println(fib(6)) // 输出8注意这个写法在 n 大时性能很差(重复计算)
2025-12-20 14:25:37
421
原创 Go语言的范围range
range是 Go 里用于遍历数据结构的语法糖...它能遍历的对象包括:数组 / 切片字符串mapchannel每次循环,range 会返回“索引/键 + 值”Go 的 range = 更安全、更简洁的 for-each,但要记住:1. 值是拷贝;2. map 无序;3. 字符串按 rune。
2025-12-18 10:34:29
339
原创 Go语言结构体
结构体是 Go 里用来组织一组不同类型字段的复合数据类型,有点像 Java 里的class没有继承没有构造函数首字母大写 = 对外可见,首字母小写 = 包内可见Id intAge intAge intu.SayHi()
2025-12-16 11:20:12
453
原创 Go 语言中的数组
项目数组 Array切片 Slice长度固定可变类型值类型引用类型内存分配整块分配指向底层数组赋值/传参拷贝整个数据拷贝指针,指向同一底层数据使用频率较低极高。
2025-12-08 17:19:58
229
原创 本地开发环境切换node导致项目启动和打包失败问题的解决
因开发需要,本地开发环境可能安装有多个node和npm版本,有时切换node版本时,比如升级到较高版本后,低版本项目再次使用npm install安装依赖、启动和打包提示错误,类似这样:npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!npm ERR!
2025-12-02 17:32:59
698
原创 Go语言的常量
Go 使用const可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。显式类型定义:隐式类型定义://多重赋值fmt.Printf("面积为:%d", area)println()执行后输出:面积为:200const (Female = 1Male = 2数字 0、1 和 2 分别代表未知性别、女性和男性。常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。
2025-12-01 11:52:01
944
原创 Go 语言常见的数据类型
每个字段都是 zero value。表示“可选值”(nullable)适用于底层开发,不推荐业务中使用。节省内存,用作信号量(0 字节):元素的 zero value。JSON、数据库 ORM 对象。性能敏感、固定长度、底层处理。不安全指针,用于绕过类型检查。Goroutine 通信。并发编程(CSP 模型)缓存、频次统计、配置。在方法中修改对象内容。
2025-11-28 10:02:40
541
原创 Go语言开发环境准备和配置
main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。我的电脑是windows系统,选择msi版本进行下载,下载后双击安装,选择默认一路next即可。我的安装路径在:C:\Program Files (x86)\Go。我们还可以在cmd命令行使用go run去运行hello.go程序,也可以用 go build 命令执行hello.go,输出hello.exe文件。新建用户变量GOROOT,填入上面的安装路径,保存。
2025-11-27 20:05:18
254
原创 使用redis hash+定时任务实现用户能量快速查询
组件角色优势Redis主要数据源高速读写,支撑高频访问MySQL数据备份数据持久化,防止数据丢失定时任务数据同步保证双存储数据一致性该架构有效平衡了系统性能与数据安全性,为用户提供了流畅的能量管理体验。下面是示例代码@Service// 每30分钟恢复1个能量值//每天允许看广告恢复能量的次数/*** 获取用户能量信息* lazy 计算:基于 lastUpdate 计算恢复*///使用redis中的Hash结构存储用户能量信息。
2025-11-25 19:33:53
245
原创 使用自定义线程池启动器进行异步开发
1、创建一个Springboot项目 ,项目名称以spring-boot-starter结尾,表示这是一个启动器,如threadpool-spring-boot-starter。,用于让 Spring Boot 发现自动配置类,其中ThreadPoolAutoConfiguration为第4步创建的自动配置类,需将包名替换为自己项目中的包名。IO 密集线程池(ioPool):适合远程调用、文件操作、数据库长耗时任务;线程池参数(core、max)不好动态调整。11.使用自定义线程池启动器创建的Bean。
2025-11-22 17:14:51
417
原创 支付宝授权登录和提现功能的实现(二)
支付宝私钥和证书文件配置在nacos,由于我采用的是证书生成的加签,所以使用的是证书crt文件,而证书较多,里边的信息较为敏感又长,这里我将证书文件放在指定路径,代码中读取证书文件的内容,app-private-key最初也是采取读取文件的方式,在项目运行时读取app-private-key老是出错,才把私钥放在nacos里。本文基于上一篇文章:支付宝授权登录和提现功能的实现(一),主要介绍编码实现。读取nacos上的支付宝配置信息,生成AlipayClient的Bean。1、配置支付宝开发信息。
2025-11-21 20:24:57
330
原创 支付宝授权登录和提现功能的实现(一)
创建应用时须选择应用平台,填写安卓和苹果应用相关信息,如果创建时未填写应用平台信息,应用创建好后,支付宝不允许追加应用平台信息,此时只能重新创建一个移动应用,支付宝允许有多个相同名称的应用。接口加签方式,要想调用支付宝api,必须进行设置接口加签方式,接口加签方式目前有2种,密钥和证书,通过下载支付宝开放平台密钥工具来生成,如果要实现红包,提现功能,接口加签方式必须选择证书。APP获取支付宝授权,完成APP端用户账号体系和支付宝账号绑定,最终在APP端发起支付宝提现,从而实现商家端转账给支付宝用户。
2025-11-21 19:29:46
316
原创 MyBatis updateById和LambdaUpdateWrapper区别
而使用updateById前,先根据id查询出对象,虽然后台代码未手动指定updatTime的值,在查询出的对象中updatTime有值,它会被包含在 UPDATE 语句中,从而触发 MySQL 的。可能更新不必要的字段(如果对象中某些字段为null,则会被更新为null)updatTime更新为当前执行的时间。希望优化性能,避免不必要的字段更新。:用于构建复杂的更新条件,可以。:根据主键 ID 更新一个。,并支持丰富的条件设置。从表单提交了完整数据时。
2025-11-11 15:50:22
445
原创 scrcpy的安装和使用
的对话框,勾选“一律允许使用这台计算机进行调试”,然后点击“确定”。进入“设置” -> “关于手机”,连续点击“版本号”7次,直到提示“您已处于开发者模式”。直接将电脑上的文件(如图片、APK)拖拽到 scrcpy 窗口,文件会被传输到手机的。手机上屏幕内容就会以一个窗口的形式显示在电脑上,你可以直接用鼠标和键盘操作手机。在某些情况下,可以直接在 scrcpy 窗口激活时打字,文字会输入到手机。返回“设置”,找到“系统”或“更多设置”中的“开发者选项”。在“开发者选项”中,找到并开启 “USB 调试”。
2025-11-10 17:11:15
2507
原创 RestTemplate使用示例
是 Spring 框架提供的一个用于同步(阻塞式)HTTP 请求的客户端工具类。它简化了与 HTTP 服务的通信过程,极大地方便了在 Java 应用中调用 RESTful Web 服务。模板方法设计模式:封装了复杂的底层细节(如强大的消息转换器:自动将 Java 对象与 HTTP 请求/响应体(如 JSON, XML)进行序列化和反序列化。集成 Spring 生态:与 Spring 的依赖注入、AOP 等无缝集成。全面的 HTTP 方法支持。
2025-11-09 18:59:10
736
原创 SpringAI整合deepseek的一个简单入门案例
temperature值越高,生成的文本越多样化,但也可能包含更多的随机性和不可预测的内容。1、本文大模型以deepseek为例,需提前到DeepSeek官网申请到key。值越低,生成的文本越接近于确定性的结果,即生成的文本会更加一致和可预测。二、配置springai的api地址和key,这里以deepseek为例。2、本文采用的调用deepseek在线api的方式。1.api-key需替换为自己在deepseek上申请到的key;2.关于temperature参数说明,请参考下文和项目需要进行配置。
2025-11-09 14:38:35
996
原创 Java对接微信支付
在controller中主要提供3个接口:微信下单,提供给微信的异步回调接口(被动等待微信返回支付是否成功的通知,该接口需配置在微信支付开发者平台,对应配置文件中的notifyUrl),主动查询微信API获得支付是否成功的结果。下面的数据是模拟数据,notifyUrl为提供给微信的异步回调接口,需本地开发好并部署到公网环境。我这里分别创建了订单表和支付表,分别对应用户在前台下的订单和订单相应的支付流水。3、创建配置文件,读取application.yml配置的商户信息。对接微信支付,需要在。
2025-11-09 12:04:17
374
原创 规则引擎Drools语法要点
规则文件的`RHS`部分的主要作用是通过**插入,删除或修改工作内存中的Fact数据**,来达到控制规则引擎执行的目的。Drools提供了一些方法可以用来操作工作内存中的数据,**操作完成后规则引擎会重新进行相关规则的匹配,**原来没有匹配成功的规则在我们修改数据完成后有可能就会匹配成功了。1、如果对象类型为**包装类型**时,在一个规则中改变了global的值,那么**只针对当前规则有效**,对其他规则中的global不会有影响。LHS(Left Hand Side):是规则的条件部分的通用名称。
2025-11-01 12:45:46
918
原创 规则引擎入门使用教程
规则引擎(BRMS)是将业务决策从代码中分离的系统,支持动态修改规则而无需重启服务。Drools是一款基于Java的开源规则引擎,通过规则文件(.drl)定义业务规则。本文介绍了规则引擎的优势(集中管理、快速响应变更等)和适用场景(风控、促销等系统),并提供了Drools的Spring Boot集成示例:包括配置类、实体类、规则文件定义和单元测试。示例展示了如何根据订单金额计算积分,验证了规则引擎的业务规则解耦能力。规则引擎特别适合业务规则复杂且频繁变化的系统。
2025-11-01 12:13:04
655
原创 PocketBase轻量级后端解决方案
项目阶段推荐使用方式学习 / 原型直接使用 PocketBase个人项目 / 小型系统前端 + PocketBase,无需 Java 后端企业系统 / 微服务Java 作为主服务,PocketBase 作为快速子系统(例如内容、用户、上传)
2025-10-30 17:51:26
1144
原创 java使用lombok提示找不到符号问题的解决
正是两者不一一致导致lombok不能正确工作。意思是lombok未能正确工作,不能生成getter和setter方法,可是maven中已引入lombok的依赖。修改后,刷新Maven,再次启动,终于不报上面的错误了。符号: 方法 setTimestamp(long)java: 找不到符号。
2025-10-15 10:11:48
330
原创 JDK11先进特性
一款可扩展的低延迟垃圾收集器,目标是将停顿时间控制在 10ms 以内,即使处理 TB 级堆内存。它是一个低开销的性能剖析和事件收集框架,用于诊断生产环境中的性能问题。只是一个语法糖,编译时类型就已确定,不是动态类型。一个“无操作”的 GC,用于性能测试、内存分配测试和短期任务,帮助你了解应用的纯内存开销。这是最具颠覆性的特性之一,让我们在写代码时能少打很多字,同时保持代码可读性。,提供现代、易用、支持 HTTP/2 和 WebSocket 的客户端。用于接收方法返回的复杂类型,避免书写冗长的类型声明。
2025-10-14 16:06:59
902
空空如也
$.messager.alert()中文显示成???
2017-08-24
在前端页面格式化显示日期
2017-08-22
多文件上传文件数组不为空的判断
2017-08-19
恢复linux系统里的/bin/sh文件
2017-07-08
使用canvas绘制心电图
2017-05-06
内网怎样使用Maven管理JAVA WEB项目
2017-03-24
怎样将一个新的Web项目绑定到已备案的域名
2017-03-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅