自己挖坑自己埋

Java42

谨用于记录自己在设计时由于考虑不周导致的隐患,阿门。

2021-07-19

新近上线了《智能串接》功能,该功能类似于各种工程项目中的quickStart功能,在该模块设计时留下了两个弊端。

一是部分无效数据被持久化了。

创建考试/每日学练时,用户还未最终确认,但是已经将其所选内容写入mysql数据库,导致部分数据可能是无效数据。

这些可能是本可以保存在缓存中的临时数据的内容,但当时考虑到缓存的到期时间和访问数据的便利性,我们还是选择了持久化。

[En]

These may be the contents of temporary data that could have been saved in the cache, but at that time, considering the expiration time of the cache and the convenience of accessing the data, we still chose to persist it.

此处尚可待商榷,因为这部分数据由于可以被多次部分修改,若将其置于redis中,则对其进行部分更新时比较棘手。

二是性能无法预估与限制

由于可以选择高级模块[任务],并且任务中包含多少个基本模块没有限制,因此在选择主题时无法预测性能压力或限制用户操作。

[En]

Because the advanced module [task] can be selected, and there is no limit on how many basic modules are contained in the task, it is impossible to predict the performance pressure or restrict the user operation when selecting the topic.

目前仅对有超过300条考试结果的【考试】做了并发处理,包括任务中的这种考试。
然而,这种两层线程池方案只能缓解用户操作后的部分压力,但仍然无法提前约束用户的操作。

[En]

However, this two-tier thread pool scheme can only relieve some of the pressure after the user's operation, but it is still unable to restrict the user's operation in advance.

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Hexo 博客安装 Fluid 主题

一.主题 使用 hexo 推荐选择一款自己喜欢的主题,主题带有一些额外的功能适配,不需要自己去做,比如评论、友链、访问统计。可以浏览官方网站来选择自己喜欢的主题:https://hexo.io/the...
Java

设计模式之适配器模式

本文通过老王使用纸质书籍阅读小王使用电子书籍的故事,详细说明设计模式中的结构型设计模式之适配器模式,分别对对象适配器和类适配器代码实现,最后为了加深理解,会列举适配器设计模式在JDK和Spring源码...
Java

Python实践项目2

```java 南昌理工学院人工智能学院实验室WORKSHOP实践项目 import time import random SCRIPT_NPC_SCHOOL_SISTER = ['你好!', '你好...
Java

分析 java.util.LinkedHashMap

介绍 该实现与HashMap不同的是它维护一个双向链表,可以使HashMap有序。与HashMap一样,该类不安全。 结构 和HashMap的结构非常相似,只不过LinkedHashMap是一个双向链...
Java

TCP网络协议

TCP 面向连接:三次握手,四次挥手 可靠:超时重发解决丢包,包序号解决乱序、重复包 实现:滑动窗口、拥塞控制 TCP/IP四层协议 应用层:telnet,ftp,自实现网络应用程序 netstat ...
Java

java 静态代码块 静态方法

(一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程...
Java

LRU least recently used 与LinkedHashMap

LRU ,最近最少使用淘汰算法,用于存储 限量limit的数据,不超过 limit的数据将直接存储,若超过limit,则将"最老的数据" 淘汰掉。使用LinkedHashMap实现。 LinkedHa...
Java

SpringMVC转发和重定向区别!

在servlet中,转发和重定向是由request和response完成的。两者之间的区别请看我之前的文章。那么在springMVC中是如何完成的呢? /转发/ @RequestMapping("/l...
Java

CMS前世今生

CMS一直是面试中的常考点,今天我们用通俗易懂的语言简单介绍下。 垃圾回收器为什么要分区分代? 如上图:JVM虚拟机将堆内存区域分代了,先生代是朝生夕死的区域,老年代是老不死的区域,不同的年代对象有不...
Java

GitStats-统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况: 该仓库的代码谁提交的代码最多 该仓...
Java

Shiro中Subject对象的创建与绑定流程分析

我们在平常使用Shrio进行身份认证时,经常通过获取Subject 对象中保存的Session、Principal等信息,来获取认证用户的信息,也就是说Shiro会把认证后的用户信息保存在Subjec...
Java

类加载

加载-----连接(验证---准备---解析)------初始化: 加载就是 将类的二进制字节码载入JVM中、将这个字节流代表的存储静态存储结构转化为方法区的运行时数据结构、在堆中生成一个java.l...
Java

Java8 提供的函数接口

参考资料 函数接口 Java 提供的函数接口位于 java.util.function 包下。 接下来介绍主要的函数接口: Function 接口代表一个 接收1个参数并返回1个结果的函数。 Func...