- 博客(81)
- 收藏
- 关注
原创 黑马点评技术汇总(六)全局ID生成器
能完成一下条件的就是redis,我们通过Redis的自增数值来生成序列号。自增的数值,而是拼接一些其它信息。的安全性,我们可以不直接使用。
2026-03-29 21:12:38
450
原创 JUC基础
就按照上述参数,创建一个你需要的线程池。随后execute方法分配任务,2,5,2L,try {i < 10;++i) {System.out.println(Thread.currentThread().getName() + " 办理业务");});
2026-03-29 09:56:33
201
原创 黑马点评技术汇总(五)缓存更新策略
先查询缓存,如果缓存命中,直接返回,如果缓存未命中,则查询数据库,将数据库数据写入缓存,返回结果先修改数据库,然后删除缓存,确保两者的原子性。redis自动进行,当redis内存达到咱们设定的max-memery的时候,会自动触发淘汰机制,淘汰掉一些不重要的数据(可以自己设置策略方式)当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存我们可以手动调用方法把缓存删掉,通常用于解决缓存和数据库不一致问题。
2026-03-27 08:19:22
46
原创 黑马点评技术汇总(四)缓存雪崩 && 缓存击穿
在第一个线程获取锁后,将查询数据库的任务交给另一个线程,自己返回过期数据。eg:多个线程同时访问一个商品页面,由于查询数据库速度较慢,多个线程同时访问就会导致多线程同时查询数据库,很多重复操作,增加数据库压力。缓存命中后判断是否过期,如果过期尝试获取互斥锁,获取失败就返回过期信息,如果获取到锁,就开启一个独立线程进行数据重建,并返回过期信息。一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。第一个线程在查询到未命中是先获取互斥锁,在开始查询数据库。
2026-03-26 19:53:24
30
原创 黑马点评技术汇总(三)缓存穿透
当没有命中redis时,并且查询数据库也为空,那我们不返回404,而是返回一个空对象存储在redis中并设置一个TTL,防止频繁访问数据库。我们在原来的基础上,当商铺不存在时将空值写入redis,并且在缓存校验时,判断是否为空值,如果是就直接返回错误信息,不是就返回商户信息。缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。1.增强id的复杂度,避免被猜测id规律。下面我们就根据这个方案修改原先的缓存方案。2.做好数据的基础格式校验。
2026-03-25 14:10:47
230
原创 黑马点评技术汇总(一)验证码登录
前端提交手机号发起code请求,服务端校验手机号是否符合格式,成功后生成验证码存入session并发送给用户。用户提交手机号和验证码验证手机是否符合格式验证码是否和session中的验证码一致,成功后查询数据库是否有该手机号,如果由就保存用户信息到session中,如果没有就就进行注册后保存。拦截器从session中获取用户信息判断用户是否存在,如果存在就存放在ThreadLocal方便以后其他类需要使用当前登录用户信息。UserHolder。
2026-03-25 13:24:09
19
原创 黑马点评技术汇总(二)redis缓存通用思路
接收店铺id,检查redis中如果有存储就直接返回数据,如果没有就查询数据库,如果查到了就存到redis并返回数据,如果没找到返回报错信息。这是一个通用思路,我们以后用redis做缓存都可以这样操作。
2026-03-25 01:06:19
126
原创 文件上传(UUID防止重名文件&&阿里云实现云端上传&&MultipartFile接收前端文件)
翻译过来就是。由Spring提供在 Java 代码中,它是一个接口,代表了客户端上传的一个完整文件。你可以通过它轻松获取文件名、文件大小、文件内容(字节流)等信息,并将其保存到服务器磁盘或云存储中。
2026-03-23 19:00:42
66
原创 SpringAOP
Aspect Oriented Programming(面向切面编程、面向方面编程),就是面向特定方法编程。当部分业务方法运行较慢,要定位到 耗时较长的方法,此时需要统计每个方法消耗时长。我们要计算一个方法运行时长就在方法开头和结尾计时再做差即可但这样做需要给每个方法都单独写,太耗时了。Sspring中提供了AOP。
2026-03-22 20:30:44
403
原创 获取用户详情ThreadLocal && 更新用户头像 && 当没有实体类接收json参数时使用Map来接收&& 实体类转换成JSON是指定日期格式
用于提供ThreadLocal会为每个线程创建独立空间。
2026-03-22 08:33:51
38
原创 Springboot项目配置文件分解
有时候遇到不同场景需要不同的配置时,我们把配置文件统一放在一个yml文件需要不断修改,因此Spring提供了相应的方法。在spring:application:profiles:active:选项中指定要扫描哪个配置文件,配置文件命名为。
2026-03-20 15:30:53
20
原创 md5加密(存放用户密码信息时使用) && Spring Validation参数校验
我们使用一个提供的例如:将密码字符串转换为字节数组,就可以直接得到加密后的字符串。
2026-03-15 09:23:52
46
原创 REST风格基本写法
但是我们的问题也随之而来了,一个相同的url地址即可以是新增也可以是修改或者查询,那么到底我们该如何区分该请求到底是什么操作呢?
2026-03-14 15:09:42
20
原创 SpringBoot项目的基本构建
我们先用maven的quickstart模板快速创建基本骨架后,开始引入我们需要用到的几个依赖(web,mybatis,mysql)随后我们创建我们需要用到的软件包,并重命名我们的启动类的名称。随后在application.yml中配置基本的数据源信息。
2026-03-14 13:30:15
29
原创 Bean的条件注册
例如下面这个注解,就是设置只有当配置文件中,以country为前缀,有name和system属性,才会进行注册。其他延申注解自行探索,见明知意。SpringBoot提供了。我们可以使用它的延申注解。
2026-03-14 08:35:56
22
原创 Tlias智能学习辅助系统(三)
Mapper方法我们上文已经弄好了,直接调用即可,将数据放到List<Map<String,Object>>list中。接下来的操作是主要功能是。
2025-12-27 01:15:20
635
2
原创 Vue工程化
最后将应用实例app挂载到‘#app’上。我们现在把这段代码放到,我们的main.js文件里我们和官方文档有所不同的就是,用了链式编程,创建应用实例后立马添加组件立马挂载。
2025-12-15 13:50:46
1077
原创 Tlias智能学习辅助系统(二)员工管理
本文详细介绍了员工管理系统的开发实现过程,主要包括以下核心功能: 员工列表查询:通过GET请求接收查询条件,返回分页数据和员工信息列表,包括创建数据库表结构和测试数据。 新增员工:通过POST请求接收JSON数据,实现员工基本信息和经历的双表插入,使用@Transactional进行事务管理。 文件上传:使用MultipartFile处理文件上传,实现本地存储和防止文件名冲突。 员工删除:支持单条和批量删除,同时删除员工基本信息和经历记录。 员工更新:实现查询回显和修改功能,包括动态SQL更新和事务管理。
2025-12-12 00:23:56
751
1
原创 Tlias智能学习辅助系统(一)
(1)创建SpringBoot工程,并引入web开发起步依赖、mybatis、mysql驱动、lombok(2)检查设置选择你的JDK版本和对应的语言级别将文件编码格式全部换成UTF-8将项目结构更改成如图检查pom.xml中相关依赖是否配置好再到DataGrip中建立需要的数据库再回到idea中将application.properties删掉,换成application.yml我们进行文件配置。
2025-12-01 21:59:43
693
原创 C++算法 堆排序
下沉函数:(除了比较自己和子节点,还要比较那个子节点更优,也就是三个节点互相比较,谁赢继承权在谁手上),如果我的左儿子在数组范围内并且比当前获得继承权,如果有儿子在数组范围内并且比当前继承权的人更优那么他获得,最后,如果继承权节点和不是我自己,那么我就移交它,和继承节点交换位置,继续下沉。//排序,将根节点与最后一个元素交换位置,这样能保证队尾永远是最大的,再将交换过去的元素进行下沉,放到他该在的地方,反复操作,最后就排好序了。堆的元素插入:我们需要将要插入元素查到堆的尾部,再进行一个上浮操作。
2025-11-09 13:24:13
844
原创 C++算法 基数排序
优点:由于不需要元素间的比较,在排序范围有限或者元素有特定的顺序时,可能比比较型排序算法更有效 可以更容易排序有固定宽度的数字序列,如:电话号码,身份证。因为我们根据每一位分配到桶中时,桶是有序的,因此桶的分配是正序的,我们收集的时候从最前面的桶开始收集,因此小的在前大的在后,我们根据第二位进行。从所有元素最低位开始遍历,根据所选取的位数的值对每个元素进行分配,分配到对应的桶中。O(d(n+r)),其中d是数字位数,n是待排序的数量,r是基数。1.获取待排序元素的最大值,并确定其位数。
2025-11-07 17:25:09
240
原创 滚动数组(空间优化)
在遇到我们不需要使用前面几行的数据时,我们可以使用滚动数组,就是在两行之间来回交替的数组。在「杨辉三角」中,每个数是它左上方和右上方的数的和。,返回「杨辉三角」的第。你可以优化你的算法到。
2025-10-25 19:07:22
205
原创 最大字符串配对数目(哈希表实现)
我们将第 0 个字符串与第 2 个字符串匹配,因为 word[0] 的反转字符串是 "dc" 并且等于 words[2]。- 我们将第 1 个字符串与第 3 个字符串匹配,因为 word[1] 的反转字符串是 "ca" 并且等于 words[3]。- 我们将第 0 个字符串与第 1 个字符串匹配,因为 words[1] 的反转字符串 "ab" 与 words[0] 相等。反转字符串后cnt[s]++表示当前字符串期待的反转形式。当我们遇到反转字符串后,成功配对,ans+=cnt[s]
2025-10-10 19:01:41
197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅