黑马点评项目问题总结

黑马点评项目总结 超卖问题的解决方案:加锁加乐观锁还是悲观锁呢??悲观锁串行性能太差,显然和我们的秒杀业务不太符合,那就加乐观锁,啥叫乐观锁?个人理解就是不加锁,只在更新时判断是否有别的线程在修改数据。乐观锁有版本号法和CAS法。本质无区别。一人一单一个用户只能买一张优惠券。那写业务。买优惠券请求来了,先查下订单表(用用户id和优惠券id查),如果查到有订单,则不能再买。写完业务用jmeter一测试,我尼玛怎么一个人还能买好多张,黄牛搁这卡bug呢? 阅读详情

一、登录模块

1.Session存在共享问题

2. redis

因此选择用redis,数据结构:
手机号:验证码code
随机码为token:用户信息(保存为一个Map<String,Object>对象,具体为key与value)

3.整体流程

(1) 发送验证码
(2) 短信验证码登录、注册
(3) 校验登录状态 token
(4) 拦截器优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、实现商品信息缓存

1. 查询流程

在这里插入图片描述

2. 缓存与数据库一致性问题

  • redis缓存更新策略有几种?选择哪种?
    内存淘汰和过期淘汰 主动更新
  • 操作缓存和数据库
    (1) 删除缓存还是更新缓存 删除
    (2)如何保证缓存与数据库的操作同时成功或失败 事务
    (3)先操作缓存还是数据库 写数据库比较慢

3. 三大问题及解决方案

  • 缓存穿透
    定义、有哪两种方式解决
    在这里插入图片描述
    在这里插入图片描述
  • 缓存雪崩
    定义(2种情况)、解决方案
  • 缓存击穿
    定义
    两种解决方案: 一致性、可用性
  1. 互斥锁 setnx
    利用redis的setnx命令,通过获取锁和释放锁的方式来完成。锁的过期时间设置10s,能够保证一致性,但是无法保证可用性(线程会一直查询)
    在这里插入图片描述
  • 设置逻辑过期时间
    给缓存设置一个逻辑过期时间
    还是需要互斥锁,不同的就是:不是每一个线程都需要取重写数据库,如果发现获取不到锁会直接返回旧的数据,获取不到锁不会说一直重试,而且拿到锁也是开启一个新线程取写数据库。保证了可用性,但失去了一致性(此时拿到的数据不是新的数据)
    在这里插入图片描述
    在这里插入图片描述
  • 结果对比

在这里插入图片描述

三、优惠券秒杀

1. Redis自增实现全局唯一id

  • 常见的生成全局唯一id生成策略
    (各自特点,自己搜资料补充)
  • 具体实现方式及原因
    符号位+时间戳+序列号 保证了递增性、安全性、唯一性

2. 秒杀下单,并利用乐观锁解决超卖问题

在这里插入图片描述

  • 超卖是什么
    库存小于0
  • 下单必须满足的条件
    秒杀是否开始或结束,如果尚未开始或已经结束则无法下单
    库存是否充足,不足则无法下单
  • 能不能直接采用版本号?存在什么问题
    只要我扣减库存时的库存和之前我查询到的库存是一样的,就意味着没有人在中间修改过库存,那么此时就是安全的,但是以上这种方式通过测试发现会有很多失败的情况,失败的原因在于:在使用乐观锁过程中假设100个线程同时都拿到了100的库存,然后大家一起去进行扣减,但是100个人中只有1个人能扣减成功,其他的人在处理时,他们在扣减时,库存已经被修改过了,所以此时其他线程都会失败
  • 项目中的乐观锁如何实现
    在扣减库存之前 判断库存大于0就好

3. 优惠券秒杀:一人一单

  • 一人一单
  • 解决方案
    在这里插入图片描述
    根据用户id加一个synchronized锁
    控制锁的粒度
    代理模式解决事务失效,并且保证提交事务后再释放锁(不建议自己说出来,坑太多,不好讲)
  • 存在的问题:集群模式下锁失效

4.分布锁解决集群下锁失效的问题(基于Setnx)

4.1 基于setnex(setIfAbsent) 实现分布式锁

防止死锁?添加过期时间

4.2 分布式锁的误删问题

什么是误删? 线程1发生了业务阻塞,锁超时释放了自己的锁,后面正常执行业务后,线程1又执行锁释放把线程2的锁给释放了
如何解决?:在释放锁的时候判断锁是否属于自己
在这里插入图片描述

4.3 分布式锁的原子性问题

判断锁和释放锁是两个不同的动作!需要让判断和释放锁变成一个原子操作
利用lua脚本

4.4 存在的问题

不可重入
不可重试
超时释放
主从一致性

5. 基于Redission的分布式锁(对setnex的优化)

5.1 不可重入

在这里插入图片描述

5.2 锁重试和watchdog机制

在这里插入图片描述
在这里插入图片描述

5.3 MultiLock解决主从不一致问题

redission提出来了MutiLock锁,使用这把锁咱们就不使用主从了,每个节点的地位都是一样的, 这把锁加锁的逻辑需要写入到每一个主丛节点上,只有所有的服务器都写入成功,此时才是加锁成功,假设现在某个节点挂了,那么他去获得锁的时候,只要有一个节点拿不到,都不能算是加锁成功,就保证了加锁的可靠性

6. 异步秒杀优化

在这里插入图片描述

  • 基于阻塞队列的思路
  • 先利用Redis完成库存余量、一人一单判断,完成抢单业务
  • 再将下单业务放入阻塞队列,利用独立线程异步下单
  • 基于阻塞队列的异步秒杀存在哪些问题?
    内存限制问题
    数据安全问题
  • 基于Redis的Stream结构作为消息队列,实现异步秒杀下单
  • 创建一个Stream类型的消息队列,名为stream.orders
  • 修改之前的秒杀下单Lua脚本,在认定有抢购资格后,直接向stream.orders中添加消息,内容包含voucherId、userId、orderId
  • 项目启动时,开启一个线程任务,尝试获取stream.orders中的消息,完成下单 (用Java代码消息队列中的信息),出现异常需要读取Pending List的
  • Stream类型消息队列的消费者组的特点

四. 点赞排行榜

SortedSet数据结构 根据时间进行排行的

  • 问题一:代码细节
    List<UserDTO> userDTOS = userService.query()
            .in("id", ids).last("ORDER BY FIELD(id," + idStr + ")").list()
            .stream()
            .map(user -> BeanUtil.copyProperties(user, UserDTO.class))
            .collect(Collectors.toList());
  • 问题二:SortedSet底层
    hash结构:关联元素和权重
    跳跃表:空间换时间,提高查找效率

五. 附近商户

  • 设计思路
    在这里插入图片描述
  • 选择geo数据结构
  • 分组
    根据type来对数据进行筛选,所以我们可以按照商户类型做分组,类型相同的商户作为同一组,以typeId为key存入同一个GEO集合中即可
  • 导入数据
    数据库表中的数据导入到redis中去,redis中的GEO,GEO在redis中就一个menber和一个经纬度,我们把x和y轴传入到redis做的经纬度位置去,但我们不能把所有的数据都放入到menber中去,毕竟作为redis是一个内存级数据库,如果存海量数据,redis还是力不从心,所以我们在这个地方存储他的id即可。

六. 用户签到

0. 数据结构

Bitmap
bitMap返回的数据是10进制
在这里插入图片描述

1. 签到功能

@Override
public Result sign() {
    // 1.获取当前登录用户
    Long userId = UserHolder.getUser().getId();
    // 2.获取日期
    LocalDateTime now = LocalDateTime.now();
    // 3.拼接key
    String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
    String key = USER_SIGN_KEY + userId + keySuffix; //user:sign:5:202302
    // 4.获取今天是本月的第几天
    int dayOfMonth = now.getDayOfMonth();
    // 5.写入Redis SETBIT key offset 1
    stringRedisTemplate.opsForValue().setBit(key, dayOfMonth - 1, true);
    return Result.ok();
}

2. 统计签到天数

思路:
bitMap返回的数据是10进制,哪假如说返回一个数字8,那么我哪儿知道到底哪些是0,哪些是1呢?我们只需要让得到的10进制数字和1做与运算就可以了,因为1只有遇见1 才是1,其他数字都是0 ,我们把签到结果和1进行与操作,每与一次,就把签到结果向右移动一位,依次内推,我们就能完成逐个遍历的效果了。

七. UV统计

数据结构的选择HyperLogLog

八. 共同关注

选择的数据结构是set,比如用户1关注了A B C,那么就是 1:A B C
同理对用户2有同样的操作,求共同关注就是求两个set的交集

//设置key:当前登录用户,关注的对象
   stringRedisTemplate.opsForSet().add(key, followUserId.toString());
 //求交集
   Set<String> intersect = stringRedisTemplate.opsForSet().intersect(key, key2);

九. 推模式Feed流

1. Feed流理论

  1. feed流:内容推送给用户
  2. feed流两种模式:Timeline和智能排序
  3. Timeline三种实现方式:推、拉、推拉结合
    拉模式:
    当张三和李四和王五发了消息后,都会保存在自己的邮箱中,假设赵六要读取信息,那么他会从读取他自己的收件箱,此时系统会从他关注的人群中,把他关注人的信息全部都进行拉取,然后在进行排序
    拉模式
    推模式:
    推模式是没有写邮箱的,当张三写了一个内容,此时会主动的把张三写的内容发送到他的粉丝收件箱中去,假设此时李四再来读取,就不用再去临时拉取了
    优点:时效快,不用临时拉取
    缺点:内存压力大,假设一个大V写信息,很多人关注他, 就会写很多分数据到粉丝那边去
    在这里插入图片描述
    推拉结合模式:也叫做读写混合,兼具推和拉两种模式的优点。
    推拉模式是一个折中的方案,站在发件人这一段,如果是个普通的人,那么我们采用写扩散的方式,直接把数据写入到他的粉丝中去,因为普通的人他的粉丝关注量比较小,所以这样做没有压力,如果是大V,那么他是直接将数据先写入到一份到发件箱里边去,然后再直接写一份到活跃粉丝收件箱里边去,现在站在收件人这端来看,如果是活跃粉丝,那么大V和普通的人发的都会直接写入到自己收件箱里边来,而如果是普通的粉丝,由于他们上线不是很频繁,所以等他们上线时,再从发件箱里边去拉信息。

2. 实现方案

在保存完探店笔记后,获得到当前笔记的粉丝,然后把数据推送到粉丝的redis中去。按照时间顺序feed,数据结构

@Override
public Result saveBlog(Blog blog) {
    // 1.获取登录用户
    UserDTO user = UserHolder.getUser();
    blog.setUserId(user.getId());
    // 2.保存探店笔记
    boolean isSuccess = save(blog);
    if(!isSuccess){
        return Result.fail("新增笔记失败!");
    }
    // 3.查询笔记作者的所有粉丝 select * from tb_follow where follow_user_id = ?
    List<Follow> follows = followService.query().eq("follow_user_id", user.getId()).list();
    // 4.推送笔记id给所有粉丝
    for (Follow follow : follows) {
        // 4.1.获取粉丝id
        Long userId = follow.getUserId();
        // 4.2.推送
        String key = FEED_KEY + userId;
        stringRedisTemplate.opsForZSet().add(key, blog.getId().toString(), System.currentTimeMillis());
    }
    // 5.返回id
    return Result.ok(blog.getId());
}

功能二:实现分页查询
思路分析
1、每次查询完成后,我们要分析出查询出数据的最小时间戳,这个值会作为下一次查询的条件
2、我们需要找到与上一次查询相同的查询个数作为偏移量,下次查询时,跳过这些查询过的数据,拿到我们需要的数据
综上:我们的请求参数中就需要携带 lastId:上一次查询的最小时间戳 和偏移量这两个参数。
这两个参数第一次会由前端来指定,以后的查询就根据后台结果作为条件,再次传递到后台。

黑马点评面试题 1)setnx:redis提供的分布式锁存在问题:线程还没释放锁系统宕机了,造成死锁2)setnx +setex:给锁设置过期时间,到期自动删除。存在问题:因为加锁和过期时间设置非原子,存在设置超时时间失败情况,导致死锁3)set(key,value,nx,px):将setnx+setex变成原子操作存在问题:加锁和释放锁不是同一个线程的问题。 阅读详情

相关推荐

黑马点评前63节课遇到的问题及解决方案(在看网课过程中会有很多老师运行成功但我们失败并且老师还不没有讲到的情况,本文致力于解决这个问题,记录了本人在做这个项目的时候遇到的所有问题)

在看网课过程中会有很多老师运行成功但我们失败并且老师还不没有讲到的情况,本文致力于解决这个问题,记录了本人在做这个项目的时候遇到的所有问题,希望可以帮助到大家。可以直接在根据目录或者导航栏找到自己的遇到问题的章节,看看你遇到的问题我有没有解决过,如果有,那么,可以试试我的方法。在最后测试的时候,更新了RefreshTokenIntercepter后,再次运行idea刷新后,前端界面没有退出无法登录。在redis里的TTL也和老师的不一样,是一个很大的值。

m0_63695860的博客 1583

黑马点评项目全部功能实现及详细笔记--Redis练手项目

黑马点评项目实战篇全部业务实现以及部分代码逻辑分析与记录

SeeYouAgain的博客 9万+

黑马点评详细总结(问题 + 踩坑点 + 解决思路)

黑马点评详细总结(问题 + 踩坑点 + 解决思路),可以用来配合做黑马点评项目,也可用来复盘总结,总之,非常好用,总结的非常到位。

黑马点评项目学习笔记(15w字详解,堪称史上最详细,欢迎收藏)

当前笔记是第二遍学习Redis实战篇所写的,第一次学习要在1月份前了,当时刚学完SpringBoot练手项目瑞吉外卖,然后放松之时刷到B站UP主 鱼皮 的视频,他推荐大家如果学完SpringBoot后可以尝试着学习这门Redis课程。我也有幸知道了B站还有一门这么牛X的课程,于是当时一股脑连着肝了两周把这么这门课程看完了。当时是第一次接触到Redis,被这么课程而深深打动了,不愧被广大B友称之为B站最有含金量的一门课程,里面不仅大量运用了Lambda表达式、还有大量高并发相关知识点,感触最大的还是对于各种R

热爱编程、热爱生活、热爱探索 18万+

【QGIS】【OsGeo4w】安装方法

every blog every motto: You will never know unless you try 0. 前言 因为目前要使用QGIS,然而环境配置就整了大半天,哎,进行简单记录,方便自己方便他人。 一共分为两种方式安装: 独立安装包 网络安装包(下载osgeo4w-setup) QGIS提供了不同的版本: 长期发行版(LTR) 最新版(LR) 开发人员版本(DEV,母版或测试版) 说明: 本文推荐第二种 1. 正文 1.1 下载osgeo4w 下载链接 下载完成: 1.2

胡侃有料的博客 2万+

不止于连接:用VS Code Remote-SSH深度开发树莓派(Ubuntu 22.04环境实战)

本文详细介绍了如何在Ubuntu 22.04环境下使用VS Code的Remote-SSH功能进行树莓派深度开发。通过SSH配置、VS Code扩展安装和远程环境优化,开发者可以在本地高效编写代码,同时在树莓派上直接运行和测试,解决性能瓶颈问题。文章还提供了高级功能如端口转发、多项目管理和远程调试的实战技巧。

didui8202的博客 352

黑马点评项目报错问题整理笔记2025

学习黑马点评项目报错问题整理笔记。

weixin_51867624的博客 2801

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

25年导入黑马点评项目配置及问题解决(个人记录、详细图解)

本博客主要记录在25年导入黑马点评项目配置及问题解决的个人记录

2301_80558092的博客 5284

告别手动复制粘贴!用R语言脚本批量抓取TCMSP中药靶点基因(附完整代码)

本文介绍如何使用R语言脚本自动化抓取TCMSP数据库中的中药靶点基因数据,告别手动复制粘贴的低效操作。通过详细的代码示例和参数设置,帮助研究人员快速获取并过滤符合药代动力学标准的中药成分及其靶点基因,大幅提升研究效率。特别适合生物信息学和中药现代化研究领域的从业者。

weixin_26950847的博客 261

Open3D 计算点云的倒角距离(Chamfer Distance)【2025最新版】

;Chamfer Distance距离可以计算生成点云数据与标签点云数据之间的平均最短点距离。Open3D可以直接用来计算点云的Chamfer Distance距离。博客长期更新,本文最近一次更新时间为:2025年2月18日。

点云侠的博客 3254

黑马点评项目解决负载均衡问题

黑马点评项目解决nginx负载均衡问题

qq_45733304的博客 1522

真正的工业级环形缓冲区(Circular Buffer)完整实现细节

永远不要永远不要ToArray()或AddRange()永远返回或两段Span永远用_head_tail% Capacity实现环形照着上面这套代码改,你的系统将彻底告别内存爆炸,从“实验室玩具”变成“产线战神”!需要我给你一个支持两段绘制的完整实现吗?

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 127

大厂面试----黑马点评项目面试过程中可能遇到的问题整理

该文总结了黑马点评过程中的一些常问问题, 相关解答我也会后续编撰并发出

XiaoDuof优快云的博客 3372

YOLOv11改进 | Conv篇 | 2024最新轻量化自适应提取模块LAE助力边缘设备部署计算(附代码 + 修改教程 + 运行教程)

本文给大家带来的一个改进机制是最新由LSM-YOLO提出的轻量化自适应特征提取(Lightweight Adaptive Extraction, LAE)模块,其是LSM-YOLO模型中的关键模块,旨在进行多尺度特征提取,同时降低计算成本。LAE通过以下方式实现更有效的特征提取:多尺度特征提取、自适应特征提取。LAE模块可以在不增加额外参数的情况下提高了模型对ROI区域的检测性能。​欢迎大家订阅我的专栏一起学习YOLO!YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍。

Snu77的博客 4054

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【已解决】黑马点评项目中调用Lua脚本,项目启动失败问题(不要用EmmyLua插件)

是EmmyLua插件的问题,只要启动了它,项目就会崩,EmmyLua2插件也不行,会报错,得用SumnekoLua插件

weixin_57706322的博客 759

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

黑马点评项目遇到的部分问题

此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用之前就会启动transaction。然而,如果这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,所以就不会启动transaction,我们看到的现象就是@Transactional注解无效。在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的,所以我们需要创建一个代理对象,使用代理对象来调用方法。

Suburbia的博客 2611

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【已解决】黑马点评项目中测试集群环境下的并发问题操作 - IDEA 2023版

黑马点评项目中测试集群环境下的并发问题操作 - IDEA 2023版

weixin_57706322的博客 614

关于黑马点评导入前端项目后没有显示图片的问题

个人原因,mysql外部导入的时候少导入了hmdp.tb_blog这个表。然后会导致黑马点评前端节目显示服务器异常。最后重新引入sql文件得以解决。

qq_56448742的博客 1009

Java项目,黑马程序员的黑马点评项目面试问题总结,高频问题,进阶深挖题,Redis核心以及Redisson 分布式锁的 WatchDog 机制原理

【代码】Java项目,黑马程序员的黑马点评项目面试问题总结,高频问题,进阶深挖题,Redis核心以及Redisson 分布式锁的 WatchDog 机制原理。

2301_80361887的博客 1029

【已解决】黑马点评项目中-实战篇11-状态登录刷新章节设置RefreshTokenInterceptor拦截器后登录异常的问题

黑马点评项目中-实战篇11-状态登录刷新章节设置 RefreshTokenInterceptor 拦截器后登录异常的问题

weixin_57706322的博客 857

黑马点评前125节课遇到的问题及解决方案(在看网课过程中会有很多老师运行成功但我们失败并且老师还不没有讲到的情况,本文致力于解决这个问题,记录了本人在做这个项目的时候遇到的所有问题)

在看网课过程中会有很多老师运行成功但我们失败并且老师还不没有讲到的情况,本文致力于解决这个问题,记录了本人在做这个项目的时候遇到的所有问题,希望可以帮助到大家。可以直接在根据目录或者导航栏找到自己的遇到问题的章节,看看你遇到的问题我有没有解决过,如果有,那么,可以试试我的方法。在最后测试的时候,更新了RefreshTokenIntercepter后,再次运行idea刷新后,前端界面没有退出无法登录。在redis里的TTL也和老师的不一样,是一个很大的值。

m0_63695860的博客 2599

黑马点评前102节课遇到的问题及解决方案(在看网课过程中会有很多老师运行成功但我们失败并且老师还不没有讲到的情况,本文致力于解决这个问题,记录了本人在做这个项目的时候遇到的所有问题)

在看网课过程中会有很多老师运行成功但我们失败并且老师还不没有讲到的情况,本文致力于解决这个问题,记录了本人在做这个项目的时候遇到的所有问题,希望可以帮助到大家。可以直接在根据目录或者导航栏找到自己的遇到问题的章节,看看你遇到的问题我有没有解决过,如果有,那么,可以试试我的方法。在最后测试的时候,更新了RefreshTokenIntercepter后,再次运行idea刷新后,前端界面没有退出无法登录。在redis里的TTL也和老师的不一样,是一个很大的值。

m0_63695860的博客 1805

Redis-黑马点评项目-01-postman测试-时间戳-localDate序列化问题

安装postman后发送请求地址和请求体中,采用 RestFul 风格,修改采用putIDEA报错:原来是Jackson无法将时间戳转换为LocalDateTime 类型数据。

csdn_l_z的博客 742

Java面试前必看,黑马点评项目面试问题总结,涵盖高频必问题,补充问题,结合项目内容总结所有面试过程中可能问到的问题,包括标准答案以及面试加分项

核心标准答案:这个项目是我独立开发完成的,开发周期一个半月。整体是前后端分离架构,前端采用Vue实现,后端基于SpringBoot构建单体服务,接入Nginx做反向代理、负载均衡与动静分离,MySQL做数据持久化存储,Redis作为核心组件,实现缓存、分布式锁、消息队列、高频数据存储等能力,核心解决本地生活场景下,高并发访问、秒杀超卖、缓存异常等业务痛点。核心业务流程:用户通过手机号验证码完成登录后,可实现附近商户查询、限时优惠券秒杀、探店笔记发布与点赞、博主关注与共同关注查看、每日签到与连续签到统计等核心

2301_80361887的博客 2606
上一篇: Leetcode差分数组、前缀和刷题总结
下一篇: Leetcode整数&位运算
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值