Whatever is worth doing is worth doing well.

使用 nohup 和 Docker 部署 Spring Boot 项目


本文详细介绍了如何使用传统的 nohup 方法和 Docker 容器化部署 Spring Boot 项目,包括步骤、注意事项和两种方法的对比。 1. 使用 nohup 部署 JAR 包 nohup 是一个常用的 Linux 命令,可以在后台运行进程,即使关闭终端,进程仍然会继续运行。 1.1 部署步

Redis是什么,它的架构是什么?


在讨论 Redis 是什么之前,假设我们有这样一个场景,在我们的系统中,有一个商品购买的服务,这个商品服务在某个时间段对外提供 每秒 1w 次查询,但背后的 MySQL 只支持每秒 5000 次查询,这样的话 MySQL 就承受不住这样的流量,就会造成 MySQL 服务宕机。这类的问题也比较常见,比

为什么要使用消息队列?


为什么要使用消息队列? 使用消息队列有很多优势,主要体现在 异步处理,解耦,削峰填谷(平滑流量)等方面。这些优势有助于提升系统性能,可扩展性和灵活性。 解耦 在传统模式中,业务之间的耦合太过于严重,比如说,现在系统A直接调用系统B的代码,而现在有一个新系统C要接入,那么我们就需要修改系统A的业务代码

将用户的token存储到Local Storage/Session Storage中,会有哪些潜在的安全问题?


关于这个问题,我的理解如下: 安全性问题 信息泄露风险:LocalStorage 是存储在用户浏览器中的数据存储机制,它以明文形式存储数据。如果用户的设备被恶意软件入侵或者浏览器存在安全漏洞,保存在 LocalStorage 中的用户 token 可能会被窃取。 跨站脚本攻击(XSS):如果应用程序

快速排序的最坏时间复杂度和归并排序的时间复杂度是怎么计算出来的?


快速排序是一种分治算法,主要通过以下过程进行排序: 选择一个基准元素。 根据基准元素将数组分为两部分:一部分包含所有小于基准的元素,另一部分包含所有大于基准的元素。 对这两部分递归排序。 快排的最坏时间复杂度为O(n^2),平均时间复杂度O(n log n)(递归树的高度大约是 log n,每一层的

什么是Hash算法?


哈希算法也被称为散列,是一种能将任意数据映射为固定长度的数值(哈希值)的函数。 基本原理 哈希算法是通过对输入数据进行一系列复杂的数学运算来生成哈希值。无论数据是文本,图片,音频还是其他类型的数据,哈希算法都可以按照既定的规则去映射为固定长度的数值输出。比如说:常见的哈希算法 MD5 会将任意长度的

口腔诊所管理系统


项目基本描述: 分为管理员、医生、病人、药剂师、收费员五种角色。 管理员:管理药品,管理检查项目,管理角色权限,管理用户信息,数据统计报表(挂号费、药品销售的日统计、月统计等)。 医生:审核挂号信息,接诊,开药,开检查单等。 病人:挂号,查看当前排队人数等。 药剂师:药品管理,取药等。

Springboot 2.7.18 配置 Knife4j 报错 Failed to start bean ‘documentationPluginsBootstrapper‘; nested excep


Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 先展示报错信息。 造成问题的原因:Springfox 假设 Spring MVC 的

MyBatis-Plus分页查询返回total为0


问题描述: 在使用MyBatis-Plus进行分页查询时,能够查询到records,但是total始终为0。 问题解决: 通过查阅MyBatis-Plus文档 分页插件 | MyBatis-Plus得知在 Spring Boot 项目中,需要通过 Java 配置的方式来添加分页插件(没配置之前单体项

解决前端精度丢失问题:后端Long类型到前端的处理


产生问题的原因: 关于这个问题是由于前端JavaScript的number类型的精度限制,如果说Long类型的值超过了number类型的精度范围,就会出现失去进度这样的问题,导致我们查询时数据id匹配不上。 解决方法: 方法一:使用@JsonSerialize注解将Long类型转换为String类型