当前位置: 首页 > news >正文

黑马点评大总结

8.2.1 短信登录

  • 首先是用户提交手机号,后端将生成的验证码以及用户信息存入session中,用户登录时进行拦截并从session中拿出来信息校验,并把用户信息存入ThreadLocal中
  • session共享问题:每个tomcat有自己的一份session,分布式、微服务下有多个tomcat实例,之间的session无法共享
  • 解决:
    1. 负载均衡器通过特定算法如IP哈西,保证同一用户的请求始终路由到同一服务器。(失去负载均衡的灵活性)
    2. session复制,所有服务器同步session变更。(带宽消耗大)
    3. 集中存储,将会话数据存储在外部,如redis
    4. 客户端存储。(安全性挑战)
  • 采用后端生成token存入redis,前端请求头携带token校验身份 方案,并通过两层拦截器解决token刷新TTL问题(背景是有些页面不要求登录即可访问),先拦截所有请求判断token有无,有则刷新并存信息与ThreadLocal,后拦截特殊路径判断是否登录(ThreadLocal中是否有用户信息),有则放行,无则拦截显示请登录
    8.2.2 商户缓存
  • 查询逻辑:先查询缓存再查询数据库再写入缓存(背景:老查询数据库,压力很大)
  • 缓存更新策略有内存淘汰、超时剔除、主动更新
  • 缓存双写一致性问题:数据源来自于数据库,数据库发生变化时也要更新缓存
  • 采用先更新数据库再删除缓存的方案,但仍有问题:多线程环境下可能出现缓存正好过期去查询数据库得到旧值,更新操作完成并删除缓存(空缓存)然后旧值被写入(极小概率)
  • 解决:
    1. 设置较短的TTL,减少缓存与数据库不一致的时间窗口
    2. 将策略改为 延迟双删策略
  • 引入缓存提高查询性能,必然会引出一系列问题,上面的缓存双写一致性问题为其一,其二就是缓存穿透问题,若查询本就不存在的数据,每次都会打到数据库上,增加压力
  • 解决:
    1. 缓存特殊值:查询数据库后返回特定值比如defaultNull并设置ttl写入缓存,所有命中缓存后增加判断value值一逻辑操作。问题:只能应对正常业务问题,不能应对黑客使用大量不同的key进行攻击问题(还是会全部打到数据库上)
    2. 布隆过滤器:本质是BitMap+多个Hash函数,将所有有效key存入bitmap,挡在redis前多一次判断。问题:由于其特性(hash冲突问题)导致存在误判(有的不一定有,但无的一定没有)
  • 当大量缓存key同时失效或者redis突然宕机就,导致大量请求打到数据库,造成缓存雪崩
  • 解决:
    • 给不同的Key的TTL添加随机值
    • 利用redis集群提高服务的可用性
    • 给缓存业务添加降级限流策略
    • 给业务添加多级缓存
  • 当一个高并发访问的key突然失效(热门商户),无数的请求打到数据库,造成了缓存击穿问题
  • 解决:
    1. 加互斥锁:缓存未命中则加分布式锁(set nx ex)如果失败则进行方法休眠+递归重试,成功则去查询数据库并写入缓存后释放锁。问题1:递归容易造成OOM,改为休眠+自旋重试。问题2:其他线程在重试,当缓存写好锁被释放后,又进行抢锁,改为双检加锁(在自旋过程中尝试去命中缓存),锁被释放后自旋的线程也无需在抢锁。缺点:死锁问题,且只能串行执行,性能受影响
    2. 逻辑过期:缓存击穿问题主要是key的TTL到了,不设置TTL,而是吧TTL设置到value中,通过逻辑判断是否过期。重新封装一个类包含过期时间以及Object数据。判断过期后获取互斥锁(保证异步任务只提交一次),将查询数据库写入缓存的操作提交给异步线程处理(串行处理也可以)。返回过期数据。缺点:其他线程返回的是脏数据(已经过期的)
    3. 总结:方案1是串行,执行加锁保证只有一个线程去查询数据库,方案2是异步执行,加锁保证查数据库写入缓存的操作只被执行一次,且先返回已经过期的数据
    4. 问题:只要加分布式锁(set nx ex)就需要考虑业务未执行完锁超时过期问题,但此处业务是查询以及写入逻辑,即使锁过期导致其他线程获取锁进入逻辑,无非就是多了个线程执行缓存重建操作,但在删除锁时可能会出现张冠李戴的问题(DEL命令即使key不存在也会返回成功),无伤大雅。如果是扣减库存之类的操作就会出现超卖现象,是不允许的,需要增加watchdog。
      8.2.3 优惠券秒杀
  • 全局唯一ID:规律性不能太明显,受单表数据量的限制。应当满足 唯一性、高可用、高性能、递增性、安全性。由符号位0+时间戳31bit+序列号32bit(秒内的计数器,支持每秒产生2^32个不同ID)
  • 下单业务逻辑:提交优惠券id - 查询信息 - 判断是否在活动期间 - 库存是否充足 - 扣减库存 - 创建订单
  • 超卖问题:
    • 直接扣减库存在高并发情况下会导致超卖问题。
    • 解决:加悲观锁(太重);加乐观锁(CAS):执行sql时多一个库存容量判断是否大于0
  • 一人一单问题:在判断库存后增加 - 根据优惠券id+用户id判断是否已经下过单
  • 问题:多线程下(用户多次点击)可能同时判断出未下单,然后执行下单逻辑造成一人多单
  • 解决:加synchronized锁(判断是否已经购买+下单逻辑)保证只有一个线程执行下单逻辑,加到方法上,锁的粒度太粗,改为在代码块上加锁,用intern()方法从常量池中拿用户数据加锁,因为直接用userId的话不是同一个对象,每个线程都有自己的ThreadLocal,其中的用户信息对象是分别new的,不唯一。问题:方法被spring事务控制,如果在方法内部加锁,可能导致方法事务还没有提交,但是锁已经释放的问题(锁在方法结束时释放,但事务可能还未提交。其他线程可能读取到未提交的数据(脏读),或者覆盖未提交的修改。)
  • 通过加锁可以解决在单机情况下的一人一单安全问题,但是在集群模式(分布式)下还会有超卖问题(用户连多次点击被负载均衡到不同的服务上)
  • 解决:换用分布式锁,在判断完库存充足之后,执行逻辑前先创建锁key,这里以userId作为key(保证该用户的多次请求对应一个分布式锁)。加锁后通过代理对象执行接下来的方法(一人一单判断+扣减库存+创建订单),因为该方法加了@Transactional注解,一个非事务方法调用事务方法,事务不会生效。
  • 问题:若持有锁的线程在执行逻辑时阻塞了,导致锁超时提前释放,这时候其他线程(该用户的相同请求)就会持有锁执行后面逻辑,可能造成超卖问题。(也会出现误删问题,但不是本质问题,重点还是逻辑被执行了多次)
  • 解决:(锁误删解决,属于辅助方案),在获取锁时UUID+ThreadID作为value,在unlock()的时候判断value值是否为自己的锁。问题:unlock的逻辑不是原子的,极端情况下还是会出现误删情况,使用Lua脚本保证逻辑的原子性。(注意:解决误删问题并不能解决超卖问题,这个方案解决的是次要问题-误删锁,属于辅助手段,要想解决这里的超时释放问题得用watchdog机制)
  • 当下分布式锁:需要给锁续期解决超时释放问题,锁不可重入,主从一致性
  • 解决:Redisson中的RedLock
    • 可重入原理:底层Hash结构+Lua脚本实现,大key标识锁是否存在,小key标识锁被那个线程持有
    • 重试原理:抢锁过程中,通过tryAcquire进行抢锁,先判锁是否存在,再判断是否属于当前线程
    • watchdog原理:在获取锁后开启一个后台线程监控锁的ttl,超过三分之一后重置TTL
      8.2.4 秒杀优化
  • 问题:当前逻辑全是串行执行
  • 解决:将部分逻辑单独提出来,异步执行,在判断用户可以下单后直接返回给用户成功,由后台完成剩下的下单操作,将判断逻辑放入redis中,库存是否足够、是否为一人一单,相应的信息存入redis中,判断后开启异步 queue
    • 难点1:如何在reids中判断,将商品库存信息以及用户下单信息(set集合)提前存入,有库存以及set集合中没有该用户则说明可以下单。基于Lua脚本实现资格判断保证原子性,将订单id返回给前端
    • 难点2:如何知道最后下单是否成,将优惠券id和用户id封装后存入阻塞队列 开启独立线程不断从阻塞队列中获取信息实现异步下单逻辑
  • 问题:阻塞队列在JVM内存中,容易OOM;JVM挂了数据订单数据全没了
  • 解决:MQ
    • 基于List的MQ:只支持单消费者,无法避免信息丢失(内存占用多时内存淘汰机制可能淘汰List中的数据,持久化没法保证数据100%持久),使用LPOP/RPOP命令消费消息后,消息立即从队列移除
    • 基于Stream的MQ:增加消费者组,生产可用
      8.2.5 探店点赞
  • 对于其他用户发的博客可以进行点赞,开始逻辑为 直接数据库+1
  • 问题:用户可以无限点赞,应当为点赞/取消且点赞按钮高亮显示
  • 解决:增加isLike属性,标志是否被当前用户点赞;使用redis set集合判断是否点赞过,key为Blog,value为userId
  • 问题:检查Redis后到执行数据库更新之间存在时间窗口,可能导致多个请求同时通过检查,造成重复更新。
  • 点赞排行榜,显示出最早点赞的几名用户(如TOP5),有唯一性又具备有序性的 zset集合 以时间戳为score存入用户信息
    8.2.6 好友关注
  • 一张tb_follow表标示关注信息,根据前端传来的id直接更新数据库保存关系信息
  • 增加共同关注功能需要求交集,利用set集合,存储用户的关注列表,userId作为key,然后用set集合的api求共同关注的用户id,关注则先存入数据库再更新redis,取关则先删除数据库再删除redis
  • 发动态时提醒粉丝,使用 Feed流 完成推送功能,采用TimeLine模式
  • 拉模式:查看时拉去所有Blog然后排序展示
  • 推模式:博主发送Blog时将信息推送给所有粉丝,就是我们在保存完探店笔记后,获得到当前博主的粉丝,然后把数据推送到粉丝的 redis 中去
  • 推拉结合:推送给活跃用户,普通用户拉取
  • 问题:因为数据是不断变化的,传统分页会导致展示重复的数据
  • 解决:Feed流的滚动分页
    8.2.7 附近商户
  • redis使用GEO结构存储商家的经纬度以及店铺id,以店铺的typeId为key,将对应的商铺信息存入value
    8.2.8 用户签到
  • 直接用数据表记录数据量太大
  • 解决:使用bitmap中的0,1来记录用户的签到情况
  • 吧年和月作为bitMap的key,每次签到把当天对应bitmap位置上的下标从0变为1
  • 获取某月的bitmap数据(十进制展示),与1进行与运算看看此位是否为1,从而进行签到统计(签到总数、连续签到)

相关文章:

黑马点评大总结

8.2.1 短信登录 首先是用户提交手机号,后端将生成的验证码以及用户信息存入session中,用户登录时进行拦截并从session中拿出来信息校验,并把用户信息存入ThreadLocal中session共享问题:每个tomcat有自己的一份session&#xff0c…...

LeetCode:返回倒数第k个结点

1、题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k 2 输出: 4 说明: 给定的 k 保证是有效的。 2、…...

zotero pdf中英翻译插件使用

最近发现一个pdf中英翻译的神器zotero-pdf2zh,按照官方安装教程走一遍的时候,发现一些流程不清楚的问题, 此文就是整理一些安装需要的文件以及遇到的问题: 相关文件下载地址 Zotero 是一款免费的、开源的文献管理工具&#xff0…...

Java后端程序员学习前端之CSS

什么是css Cascading Style Sheet 层叠级联样式表 表现 (美化网页) 字体,颜色,边距,高度,宽度,背景图片,网页定位,网页浮动.. 发展史 CSS1.0 CSS2.0 DIV(块)CSS,HTML与CSS结构分离…...

MySQL——数据库基础操作

学习MySQL之前,要先配置好相关环境与软件下载,怎么就不展开了:找找网上对应环境下的教程即可 目录 数据库与MySQL 案例使用 MySQL架构 SQL指令分类 储存引擎 库操作 创建数据库 编码集与校验规则 校验规则的影响 删除数据库 数…...

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

随着低代码平台和大语言模型工具的不断发展,将企业数据与智能交互能力融合,成为提高办公效率与自动化水平的关键一步。明道云作为一款成熟的低代码平台,Dify 则是一个支持自定义工作流的开源 LLM 应用框架。两者结合,可以实现灵活、高效的智能化业务处理。 本文将详解明道…...

湖北理元理律师事务所:规模化债事服务的探索与实践

在个人债务问题日益普遍化的当下,如何通过合法、系统化的服务帮助债务人化解危机,成为法律服务业的重要课题。湖北理元理律师事务所作为经国家司法局批准设立的债事服务机构,其构建的“法律技术金融”服务模式,为债务优化领域提供…...

MySQL JOIN详解:掌握数据关联的核心技能

一、为什么需要JOIN? 在关系型数据库中,数据通常被拆分到不同的表中以提高存储效率。当我们需要从多个表中组合数据时,JOIN操作就成为了最关键的技能。通过本文,您将全面掌握MySQL中7种JOIN操作,并学会如何在实际场景中…...

深入浅出数据库规范化的三大范式

数据库的“成长之路”:从1NF到3NF的规范化进化 在数据库的世界里,关系模式就像一个“孩子”,需要一步步学习“规矩”,才能健康成长。今天,我们就来聊聊数据库的规范化历程——从第一范式(1NF)出…...

精益数据分析(39/126):SaaS与移动应用商业模式的关键要点剖析

精益数据分析(39/126):SaaS与移动应用商业模式的关键要点剖析 在创业和数据分析的探索之旅中,每一次深入研究不同的商业模式都是一次宝贵的学习机会。今天,依旧怀揣着与大家共同进步的期望,深入解读《精益…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.3 数据脱敏与安全(模糊处理/掩码技术)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据脱敏实战:从模糊处理到动态掩码的全流程解析4.3 数据脱敏与安全:模糊处理与掩码技术深度实践4.3.1 数据脱敏的核心技术体系4.3.1.1 技…...

nginx面试题

nginx 返回状态码413 Nginx 状态码 413 表示“请求实体过大”(Request Entity Too Large),意味着客户端发送的请求体大小超过了服务器允许的限制。 解决方法 修改 Nginx 配置文件: 找到 Nginx 配置文件,通常位于 /etc…...

flink rocksdb状态说明

文章目录 1.默认情况2.flink中的状态3.RocksDB4.对比情况5.使用6.RocksDB架构7.参考文章8.总结提示:以下主要考虑flink 状态永久存储 rocksdb情况,做一些简单说明 1.默认情况 当flink使用rocksdb存储状态时。无论是永久存储还是临时存储都可能会落盘写文件(如果没有配置存储…...

Linux | WEB服务器的部署及优化

一. web服务的常用知识 1.1 www www(World Wide Web):即为万维网,常被称为“全球信息广播”。它是一种基于超文本和HTTP协议,能够将文字、图形、影像以及声音等多媒体信息,通过超链接的方式组织在一起&…...

Nginx正反向代理与正则表达式

目录 一:正向代理 1.编译安装nginx 2.配置正向代理 二:反向代理 1.配置nginx七层代理 2.配置nginx四层代理 三:nginx 缓存 1.缓存功能的核心原理和缓存类型 2.代理缓存功能设置 四:nginx rewrite 和正则表达式 1.Nginx…...

字节:LLM自动化证明工程基准

📖标题:APE-Bench I: Towards File-level Automated Proof Engineering of Formal Math Libraries 🌐来源:arXiv, 2504.19110 🌟摘要 🔸大型语言模型(LLM)的最新进展在形式定理证明…...

豆包多轮对话优化策略:上下文理解与记忆,意图识别,对话管理

豆包多轮对话优化策略:上下文理解与记忆,意图识别,对话管理 上下文理解与记忆:我会分析每一轮用户输入的文本内容,理解其中的语义、意图和关键信息,并将这些信息与之前轮次的对话内容相结合,形成对整个对话上下文的理解和记忆。例如,在一个关于旅游规划的对话中,用户先…...

ADK 第四篇 Runner 执行器

智能体执行器 Runner,负责完成一次用户需求的响应,是ADK中真正让Agent运行起来的引擎,其核心功能和Agents SDK中的Runner类似,具体作用如下: 会话管理:自动读取/写入 SessionService,维护历史信…...

yolo 用roboflow标注的数据集本地训练 kaggle训练 comet使用 训练笔记5

本地训练 8gb内存,机械硬盘用了4分钟训练完了 ........... model torch.hub.load(path/to/yolov5, custom, path./runs/train/exp10/weights/best.pt, sourcelocal) 连不上github kaggel训练 传kaggle了 # Train YOLOv5s on COCO128 for 3 epochs !python train…...

chili3d笔记11 连接yolo python http.server 跨域请求 flask

from ultralytics import YOLO from flask import Flask, request, jsonify from flask_cors import CORS import base64 from io import BytesIO from PIL import Image import json# 加载模型 model YOLO(./yolo_detect/best.pt)app Flask(__name__) CORS(app) # 启用跨域…...

安全为上,在系统威胁建模中使用量化分析

*注:Open FAIR™ 知识体系是一种开放和独立的信息风险分析方法。它为理解、分析和度量信息风险提供了分类和方法。Open FAIR作为领先的风险分析方法论,已得到越来越多的大型组织认可。 在数字化风险与日俱增的今天,企业安全决策正面临双重挑战…...

STA中的multi_cycle 和false_path详细讨论

特殊路径:跨时钟域下的exception_path:分为多种情况优先 1、不同clk_domain ,但频率相同 create_clock -name CLKM -period 10 -waveform {0 5} [get_ports CLKM] create_clock -name CLKP -period 10 -waveform {0 5} [get_ports CLKP] set_multicycl…...

Vite 的工作流程

Vite 的工作流程基于其创新的 “预构建 按需加载” 机制,通过利用现代浏览器对原生 ES 模块的支持,显著提升了开发效率和构建速度。以下是其核心工作流程的详细分析: 一、开发环境工作流程 1. 启动开发服务器 冷启动:通过 npm …...

NGINX 的 ngx_http_auth_jwt_module模块

一、模块概述 ngx_http_auth_jwt_module 模块用于通过验证请求中提供的 JWT 来进行客户端授权。此模块支持 JSON Web 签名(JWS)、JSON Web 加密(JWE)以及嵌套 JWT(Nested JWT),使其成为一种灵活…...

【Game】Powerful——Transformation Card(10)

文章目录 1 级卡片2 级卡片3 级卡片4 级卡片5 级卡片6 级卡片7 级卡片8 级卡片8.1、神兽8.2、珍兽 9、其他9.1、5 级变身卡9.2、8 级变身卡 10、PK 汇总物理 11、卡片合成 1 级卡片 千变万化等级要求:1 级 金钱龟,防御30⬆ 大耳兔,速度15⬆…...

【算法学习】递归、搜索与回溯算法(一)

算法学习: https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言: 这个专题与前面的相比是比较有难度的,但是在平时刷题时出现的概率还是非常高的,下面还是按照之前的逻辑来理清一下这几道…...

发行基础:上传版本注意事项

1、steam的规则是上传,提审,随时可更新。 2、基本流程:根据app id以及depot id,上传本地游戏文件到服务器,把分支版本设置为默认,发布。 试玩版与正式版的app id与depot id是相互独立的。 3、理论上开发者…...

智算中心建设方案和前景分析

智算中心建设方案和前景分析 一、智算中心的概念与重要性 1.1 定义与内涵 智算中心,即智能计算中心,是基于最新人工智能理论,采用领先的人工智能计算架构,专门为人工智能应用提供所需的算力服务、数据服务和算法服务的新型基础…...

亚马逊卖家复刻案例:用社群分层策略实现海外用户月均消费3.2次

近年来,随着跨境电商市场的快速发展,全球消费模式经历深刻变革。尤其是在美国、欧洲等成熟市场,中小卖家面对高度市场集中和运营成本上升的双重压力,纷纷寻求以更精细化的用户运营来提高客户复购率,增加单用户价值。20…...

小刚说C语言刷题—1038编程求解数学中的分段函数

1.题目描述 编程求解数学中的分段函数。 …………x1 (当 x>0 )。 yf(x)…0 (当 x0 )。 ………x−1 (当 x<0 )。 上面描述的意思是&#xff1a; 当x>0 时 yx1 ; 当 x0 时 y0 ; 当 x<0 时 yx−1 。 输入 输入一行&#xff0c;只有一个整数x(−30000≤x≤30…...

kotlin 03flow-stateFlow和sharedFlow企业中使用

一 stateFlow和sharedFlow企业中使用 在企业级 Kotlin 项目中&#xff0c;StateFlow 和 SharedFlow 是 状态管理 与 事件分发 的核心工具&#xff0c;尤其在 MVVM 架构中扮演着极为关键的角色。 ✅ 企业中如何使用 StateFlow 和 SharedFlow 场景工具示例UI 状态同步&#xff…...

【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码)

【机器学习|学习笔记】决策树Decision Tree&#xff08;DT&#xff09;的起源、原理、发展、改进和应用&#xff08;附代码&#xff09; 【机器学习|学习笔记】决策树Decision Tree&#xff08;DT&#xff09;的起源、原理、发展、改进和应用&#xff08;附代码&#xff09; 文…...

Kotlin-空值和空类型

变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象 在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题 Kotlin中所有的类型默认都是…...

Java 企业级开发设计模式全解析

Java 企业级开发设计模式全解析 在 Java 企业级开发的复杂领域中&#xff0c;设计模式如同精湛的工匠工具&#xff0c;能够帮助开发者构建高效、可维护、灵活且健壮的软件系统。它们是无数开发者在长期实践中总结出的解决常见问题的最佳方案&#xff0c;掌握这些模式对于提升开…...

高并发内存池

文章目录 前言一、项目介绍二、内存池介绍1.池化技术2.内存池3.malloc视角下内存的管理 三、定长内存池3.1 设计思路3.2 数据结构 四、高并发内存池整体框架设计4.1 thread cachethreadcache哈希桶映射对齐规则threadcache TLS无锁访问 4.2 central cachecentral cache结构设计…...

常用对称加密算法的Python实现及详解

文章目录 **常用对称加密算法的Python实现及详解****1. 对称加密概述****1.1 对称加密的基本原理****1.2 对称加密的分类****1.3 对称加密的应用** **2. DES&#xff08;Data Encryption Standard&#xff09;****2.1 算法原理****2.2 Python实现****2.3 安全性分析** **3. 3DE…...

ByteArrayInputStream 类详解

ByteArrayInputStream 类详解 ByteArrayInputStream 是 Java 中用于从字节数组读取数据的输入流&#xff0c;位于 java.io 包。它允许将内存中的字节数组当作输入流来读取&#xff0c;是处理内存数据的常用工具。 1. 核心特性 内存数据源&#xff1a;从字节数组&#xff08;b…...

MySQL C API高效编程:C语言实现数据库操作的深入解析

知识点【MySQL C API】 1、头文件及MYSQL * 句柄 //头文件 #include <mysql/mysql.h>1、MYSQL MYSQL是一个结构体&#xff0c;封装了与数据库连接相关的所有状态&#xff0c;配置和数据。 2、MYSQL *的本质 类似于 FILE*&#xff0c;代表一个与数据库连接的通道&…...

字符串,数组,指针之间的关系

在C语言中&#xff0c;字符串、指针和数组之间有着紧密且复杂的关系&#xff0c;它们在内存存储、操作方式等方面相互关联&#xff0c;以下为你详细介绍&#xff1a; 字符串 定义&#xff1a;字符串是由字符组成的序列&#xff0c;以空字符&#xff08;\0&#xff09;作为结束…...

2025流感疫苗指南+卫健委诊疗方案|高危人群防护+并发症处理 慢性肾脏病饮食指南2025卫健委版|低盐低磷食谱+中医调理+PDF 网盘下载 pdf下载

2025 年卫健委发布的《成人肥胖食养指南&#xff08;2024 年版&#xff09;》为减肥提供了科学的饮食指导。 &#x1f4e2;提示&#xff1a;文章排版原因&#xff0c;资源链接地址放在文章结尾&#x1f447;&#x1f447;&#xff0c;往下翻就行 &#x1f4e2;提示&#xff1…...

学习路线(机器人软件架构)

机器人软件系统架构从入门到专家学习路线 一、基础阶段&#xff08;6-12个月&#xff09;基础知识储备机器人基础概念&#xff1a;编程技能必备语言&#xff1a;工具链&#xff1a; 入门框架推荐资源&#xff1a; 中级阶段&#xff08;1-2年&#xff09;系统架构基础ROS进阶架构…...

Stellaris 群星 [DLC 解锁] CT 表 [Steam] [Windows SteamOS macOS]

Stellaris 群星 [DLC 解锁] & CT 表 [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章&#xff0c;具体最新版本见下载文件说明&#xff1b; DLC 解锁列表&#xff08;仅供参考&#xff09; 《群星》 - Symbols of Domina…...

题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置

题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置 时间限制: 2s 内存限制: 192MB 提交: 673 解决: 130 题目描述 画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作&#xff0c;其艺术价 值分别为 A1, A2, . . . , AN。他们需要从这 N 幅画中挑选 M 幅&#xff0c;并…...

Excel 查询之 iNDEX与MATCH组合

在Excel日常工作中&#xff0c;数据查询是最常见的操作之一。虽然VLOOKUP函数广为人知&#xff0c;但它有一个明显的局限性——要求查询值必须位于返回值的左侧。今天我要介绍一个更灵活、更强大的组合&#xff1a;INDEX和MATCH函数。 为什么选择INDEXMATCH&#xff1f; VLOO…...

【Leetcode 每日一题 - 补卡】1128. 等价多米诺骨牌对的数量

问题背景 给你一组多米诺骨牌 d o m i n o e s dominoes dominoes。 形式上&#xff0c; d o m i n o e s [ i ] [ a , b ] dominoes[i] [a, b] dominoes[i][a,b] 与 d o m i n o e s [ j ] [ c , d ] dominoes[j] [c, d] dominoes[j][c,d] 等价 当且仅当 ( a c a c …...

【Elasticsearch入门到落地】12、索引库删除判断以及文档增删改查

接上篇《11、RestClient初始化索引库》 上一篇我们完成了使用RestHighLevelClient创建索引库的代码实现&#xff0c;本篇将讲解如何判断索引库是否存在并删除它&#xff0c;以及如何对索引库中的文档进行增删改查操作。 一、索引库判断与删除 在操作索引库时&#xff0c;有时…...

36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法

在C#中&#xff0c;params、ref 和 out 是方法声明中用于修饰参数的关键字&#xff0c;它们各自有不同的用途和语义。以下是它们的详细说明和用法&#xff1a; 1、 params 关键字 意义 params 允许方法接受可变数量的参数&#xff0c;这些参数会被编译为一个数组。适用于参数…...

DEX平台引领风尚 XBIT让数字资产回归简单与透明

近日&#xff0c;全球加密货币市场持续升温&#xff0c;Dex 交易平台成为众多投资者关注焦点&#xff0c;其中XBIT去中心化交易所平台凭借独特优势脱颖而出。 图片来源&#xff1a;币界网 在当今加密货币领域&#xff0c;交易平台的安全性与便捷性至关重要。XBIT去中心化交易所…...

基于Python+MongoDB猫眼电影 Top100 数据爬取与存储

前言&#xff1a;从猫眼电影排行榜页面&#xff08;TOP100榜 - 猫眼电影 - 一网打尽好电影 &#xff09;爬取 Top100 电影的电影名称、图片地址、主演、上映时间和评分等关键信息&#xff0c;并将这些信息存储到本地 MongoDB 数据库中&#xff0c;&#x1f517; 相关链接Xpath&…...

Linux文件复制命令精要指南:cp与scp详解

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; Linux文件复制命令精要指南&#xff1a;cp与scp详解 一、cp命令&#xff08;本地文件复制&#xff09; 核心功能 复制文件/目录到目标路径&#xff0c;支持重命名及批量操作。 关键参数 …...