buguge_个人页

buguge
个人头像照片 个人头像照片
27
2
0

个人介绍

☀ 随写、跑步,一静一动,保持近10年的两个习惯在坚持。已分不清习惯于自律还是自律成习惯。 ☸ 研发一线TL,注重成本和绩效。大龄码匠,不停奔跑,才能留在原地。 ☂ 知识就是力量,但更重要的是运用知识的能力。会 is one thing,会用 is another。

擅长的技术

  • 数据库
  • 程序设计
  • Java
  • 企业应用业务场景实现
  • 开发者
获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息

2025年08月

  • 08.24 19:22:58
    回答了问题 2025-08-24 19:22:58
  • 08.24 18:31:15
    发表了文章 2025-08-24 18:31:15

    【面向接口开发(IOP)典型场景】底层组件如何实现回调通知上层应用系统?

    本文介绍了在账务插件开发中,如何通过“面向接口编程”实现异步转账完成后的回调通知机制。通过定义回调接口 `TransferCallback`,账务组件在异步操作完成后可通知上层应用进行后续业务处理。文章提供了纯 Java 和 Spring 两种实现方式的代码示例,展示了接口在插件化架构中的重要作用,体现了面向接口编程在解耦与扩展方面的优势。
  • 08.20 19:53:03
    回答了问题 2025-08-20 19:53:03

    6的二进制是多少?

    踩0 评论0
  • 08.07 23:30:36
    发表了文章 2025-08-07 23:30:36

    【分享排雷经历】系统引入Apache-Tika产生的NoClassDefFoundError错误

    为实现文件导入的安全控制,在系统中引入了基于`Apache Tika`的文件类型校验机制。但在运行时出现`NoClassDefFoundError`,提示缺少`commons-io`类。经排查发现,`monorepo`依赖的`commons-io`版本(2.6)低于Tika 2.9.1所需版本(2.16.1)。由于系统依赖统一管理,直接升级`commons-io`可能影响其他模块。最终解决方案为降级Tika版本至2.4.1,该版本兼容`commons-io:2.6`,问题得以解决且功能满足需求。

2025年02月

2024年12月

  • 12.17 22:06:00
    发表了文章 2024-12-17 22:06:00

    系统网站登录,如何合规传输用户登录密码?

    用户登录密码属于用户隐私数据。为防止密码在登录接口中明文传输,提出将密码转换为MD5值再进行传输,并在服务端使用加盐的MD5值进行比对。为进一步提升安全性,建议使用可逆加密算法结合时间戳,确保每次传输的密码值不同。
  • 12.02 22:49:36
    发表了文章 2024-12-02 22:49:36

    发现一肉鸡接口,快来围攻啦~

    本文开篇以系统登录页面的安全加固实践说起,详细分析了服务端提供的`loginEncryptKey` API 代码存在的问题,如接口对任意用户名返回密钥导致的安全风险,以及在高并发场景下可能引起的Redis缓存穿透问题。针对这些问题,提出了改进措施:首先对接口请求参数进行严格校验,确保用户名合法且存在于系统中;其次,优化加密密钥的生成与获取逻辑,采用预生成密钥池结合自定义哈希算法的方式,减少重复生成密钥的资源消耗。此外,为了适应集群环境,提出了利用Redis哈希表存储密钥和结合本地缓存的解决方案。最后,文章建议将密钥预置于应用配置文件中,简化了集群环境下的数据同步需求。

2024年11月

  • 11.18 21:08:14
    发表了文章 2024-11-18 21:08:14

    开发一份API接口,需要注意这些,看你做到了几项

    本文介绍了设计API接口时需注意的关键点,包括数字签名、敏感数据加密与脱敏、限流、参数校验、统一返回与异常处理、请求日志记录、幂等设计、数据量限制、异步处理、参数定义、完整文档及开发者对接SDK等内容,旨在帮助开发者设计出安全、稳定、易维护的API接口。

2024年10月

  • 10.21 19:57:47
    发表了文章 2024-10-21 19:57:47

    发现问题就解决,往往是低效的方式。关于对象参数的赋值取值问题

    在审查中台task服务代码时,发现TaskVO对象的industryTypeName字段在某些方法调用中未进行空值检查,导致潜在bug。提出两种解决方案:一是在方法③中增加对industryTypeName的空值判断;二是改变方法③的参数类型,避免外部调用方直接设置industryTypeName,从而减少错误发生的可能性。

2024年09月

2024年08月

  • 08.29 20:10:50
    发表了文章 2024-08-29 20:10:50

    【优秀程序设计】【good-practice】聚合系统如何实现通道侧回调的业务结果通知?

    【8月更文挑战第3天】本文介绍了公司短信平台聚合系统中,短信通道回调的业务处理方法。文章详细描述了如何通过统一回调接口与合理分层设计优化代码结构,避免烟囱式代码堆砌,提高扩展性和维护性。
  • 08.20 20:09:39
    发表了文章 2024-08-20 20:09:39

    方法的职责

    【8月更文挑战第2天】这段代码示例展示了在一个Web控制器类中的方法处理短信上行通知的过程,注意到for循环中的`oneRecord`变量。通过重构,将`oneRecord`的定义和赋值逻辑后置,实现更清晰的代码结构和更明确的职责划分。
  • 08.05 19:59:58
    发表了文章 2024-08-05 19:59:58
  • 08.04 17:45:44
    发表了文章 2024-08-04 17:45:44

    有关于异常捕获点滴,plus我也揭揭apache-common ExceptionUtils的短

    本文通过示例展示了Java编程中异常处理的几种不当做法,包括无意义地捕获并重新抛出异常、改变异常堆栈信息以及私自“吞噬”异常等,并指出了这些做法可能带来的问题,如增加排障难度等。同时,文章推荐了在捕获异常后打印错误日志的良好习惯,并介绍了如何使用`try...finally`结构进行资源管理和程序状态记录。此外,还特别提到了Apache Commons Lang库中的`ExceptionUtils`工具类在记录异常堆栈信息方面的应用价值,但也对其某些行为提出了疑问,鼓励读者深入探究。

2024年07月

  • 07.30 20:47:59
    发表了文章 2024-07-30 20:47:59

    解决非Spring Bean访问Spring Bean的问题:实用指南

    在非SpringBean类中直接获取SpringBean可能会引发问题,例如上面案例里提到的空指针和自动装配失败。为避免这些问题,建议将需要访问Spring Bean的类也注册为Spring Bean,以确保依赖关系得到正确管理。
  • 07.29 10:04:27
    发表了文章 2024-07-29 10:04:27

    局部变量,在使用时再定义

    关于局部变量,适时定义可以提高代码可读性并规避不必要的bug。示例代码中,为了避免误解`checkTaskApplyDTO`仅设置了`userId`,在`existAppliedTask`方法内部,可以通过将`checkTaskApplyDTO`的定义与设置属性的操作靠近,以明确其所有属性值的来源。 另外,本文还展示了一个因提前定义变量`ret`而导致的bug实例。如果将此变量的定义延迟至其实际使用前,则可以避免此类问题。适时定义变量有助于减少混淆,提高代码质量。

2024年06月

  • 06.18 20:32:24
    发表了文章 2024-06-18 20:32:24

    【程序设计】做一个发送系统邮件的功能,如何设计数据表? 转至元数据结尾

    重构系统邮件发送旨在实现统一的邮件发送功能,通过公共API提供服务。设计包括两个核心数据表:`mail` 表用于存储邮件基本信息,如邮件ID、业务类型、发送者、标题、内容、附件信息、发送状态和时间戳;`mail_receiver` 表记录邮件接收者信息,包括邮件ID、接收者邮箱、接收者类型、发送状态和重试次数。为了优化查询性能,建议创建`Email_Content`表,将`content`和`attach_file`从`Email`表中分离,以减少主表大小。这有助于提高主表的查询速度,并通过定期的数据结转策略,确保热表只存储最近的数据。
  • 06.06 21:56:47
    发表了文章 2024-06-06 21:56:47

    不扒瞎,这个程序让我从150s优化到了5s

    在优化一个业务开发组的生产问题时,发现销售管理系统查询数据延迟高达2-3分钟。问题根源在于,程序在for循环中频繁读取Redis大KEY数据,导致性能下降。解决方案是采用本地缓存HutoolCache,将耗时降至毫秒级别。此外,还对RedisTemplate配置进行了研究,Jackson2JsonRedisSerializer在序列化时包括了所有字段,即使字段值为null,增加了数据体积。通过对ObjectMapper的调整,仅序列化非空字段,可以显著提升redis读取性能。本文同时还提醒我们在使用Redis时要注意大对象缓存,强调了正确使用和配置缓存以及避免大对象存储的重要性。
  • 06.04 10:12:19
    发表了文章 2024-06-04 10:12:19

    设计文档中的流程图,靠得住吗?

    本文讨论了软件开发设计文档中图形化设计图的重要性,如流程图、思维导图等,它们有助于清晰传达设计意图和提高沟通效率。然而,当面临迭代更新、人员变动时,基于截图的图形设计图可能会带来协作难题。作者提倡使用简单文字格式搭配标签和符号作为替代方案,分享了团队内部实践,通过表格来实现类似思维导图和流程图的功能,以增强文档的可维护性和协作性。同时,作者强调这不是反对使用设计图,而是提出在某些场景下的一种有效补充方法。
  • 06.03 19:41:26
    发表了文章 2024-06-03 19:41:26

    通过一次性能优化,再次记牢了mybatisplus的QueryWrapper、LambdaQueryWrapper、AbstractWrapper这三者之间的关系...

    本文描述了一次针对SpringBoot应用中MyBatisPlus分页查询的性能优化过程。在优化时,作者重写了BaseMapper的`selectPage`方法,通过`Wrapper`的`between`操作添加了ID区间限制以提升SQL执行效率。然而,由于在业务服务类中循环调用分页查询时未每次都创建新的`Wrapper`对象,导致`id BETWEEN ? AND ?`条件重复出现在SQL中。那么,如何解决这个问题呢?

2024年05月

  • 05.30 23:17:14
    发表了文章 2024-05-30 23:17:14

    HTTP的系统登录页面,如何避免明文传输用户密码?

    该文讨论了登录页面中密码安全传输的问题。当使用HTTP时,密码以明文形式传输,存在风险。在示例中,前端使用JavaScript的CryptoJS库和当前时间戳作为动态加密key对密码进行DES加密。后端接收到密文后,利用相同的时间戳解密。为了增强安全性,文章还建议使用RSA等非对称加密算法。
  • 05.30 22:45:27
    发表了文章 2024-05-30 22:45:27

    短信验证码登录接口,如何防止恶意攻击

    该文讨论了移动应用中常见的手机短信验证码登录(短验登录)的安全设计。后端通常需要提供获取短信验证码和手机短验登录两个API。为了增强机短验登录API的安全性,提出了几种无需依赖Redis等存储介质的方案:1)使用数字签名确保请求合法性;2)基于时间戳的验证,允许在一定时间范围内有效;3)应用TOTP算法生成动态码进行验证;4)利用JWTToken进行身份验证并设置有效期。文章强调了创新思考在解决安全问题中的重要性,并鼓励读者分享更多方案。
  • 05.30 22:38:38
    发表了文章 2024-05-30 22:38:38

    短信验证码登录接口,如何防止恶意攻击

    该文讨论了移动应用中常见的手机短信验证码登录方式,后端实现通常涉及两个API:获取短信验证码和短信验证码登录。在设计时,为增强短信验证码接口的安全性,提出了几种无需使用Redis等存储介质的方案:1) 使用数字签名,基于时间戳或随机数生成唯一签名进行验证;2) 基于时间的有效期验证,通过加密或修改时间戳形式确保安全性;3) 应用TOTP算法,按时间生成动态码进行比对;4) 利用JWTToken生成带有限期的签名进行验证。这些方法旨在防止恶意攻击并优化登录接口性能。

2023年09月

2023年08月

  • 发表了文章 2025-08-24

    【面向接口开发(IOP)典型场景】底层组件如何实现回调通知上层应用系统?

  • 发表了文章 2025-08-07

    【分享排雷经历】系统引入Apache-Tika产生的NoClassDefFoundError错误

  • 发表了文章 2025-02-27

    如何精准做到合同到期后不再发生业务?还是邻家系统做得真好!

  • 发表了文章 2024-12-02

    发现一肉鸡接口,快来围攻啦~

  • 发表了文章 2024-11-18

    开发一份API接口,需要注意这些,看你做到了几项

  • 发表了文章 2024-10-21

    发现问题就解决,往往是低效的方式。关于对象参数的赋值取值问题

  • 发表了文章 2024-09-26

    系统里这个同时查冷热表的sql,动动手指,从8s降到3s

  • 发表了文章 2024-09-24

    redis序列化数据时,如何包含clsss类型信息?

  • 发表了文章 2024-09-21

    niubility!即使JavaBean没有默认无参构造器,fastjson也可以反序列化。- - - - 阿里Fastjson反序列化源码分析

  • 发表了文章 2024-08-29

    【优秀程序设计】【good-practice】聚合系统如何实现通道侧回调的业务结果通知?

  • 发表了文章 2024-08-20

    方法的职责

  • 发表了文章 2024-08-05

    通过一个简单的应用案例来说说迪米特法则

  • 发表了文章 2024-08-04

    有关于异常捕获点滴,plus我也揭揭apache-common ExceptionUtils的短

  • 发表了文章 2024-07-30

    解决非Spring Bean访问Spring Bean的问题:实用指南

  • 发表了文章 2024-07-29

    局部变量,在使用时再定义

  • 发表了文章 2024-06-18

    【程序设计】做一个发送系统邮件的功能,如何设计数据表? 转至元数据结尾

  • 发表了文章 2024-06-06

    不扒瞎,这个程序让我从150s优化到了5s

  • 发表了文章 2024-06-04

    设计文档中的流程图,靠得住吗?

  • 发表了文章 2024-06-03

    通过一次性能优化,再次记牢了mybatisplus的QueryWrapper、LambdaQueryWrapper、AbstractWrapper这三者之间的关系...

  • 发表了文章 2024-05-30

    HTTP的系统登录页面,如何避免明文传输用户密码?

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 2025-08-24

    开发者需要怎样的技术社区?

    我是一个擅长应用系统程序设计的开发者,有着15年的一线程序开发和管理经历。我身边,包括社区里,有许多优秀的程序设计开发者。社区是否可以开辟程序设计/架构设计呢?
    踩0 评论0
  • 回答了问题 2025-08-20

    6的二进制是多少?

    6的二进制表示是 110。 计算过程: 分解6的二进制位权:• 最高位(4):6 ÷ 4 = 1(余2)→ 1 • 次高位(2):余数2 ÷ 2 = 1(余0)→ 1 • 最低位(1):余数0 ÷ 1 = 0 → 0 组合结果:从高位到低位排列:1 1 0 → 110 验证: • 110₂ = 1×4 + 1×2 + 0×1 = 6₁₀ ✅ 其他编程语言中的表示: • Java/Python:bin(6) → '0b110' • C语言:printf('%b', 6) → 110 需要其他数字的二进制转换可以随时提问! 😊
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息