做一个网站得多少钱/营销软文范例500

做一个网站得多少钱,营销软文范例500,昆明网站推广公司,同城招聘网站自助建站架构设计之自定义延迟双删缓存注解(上) 小薛博客官方架构设计之自定义延迟双删缓存注解(上)地址 1、业务场景问题 在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后&#…

架构设计之自定义延迟双删缓存注解(上)

小薛博客官方架构设计之自定义延迟双删缓存注解(上)地址

1、业务场景问题

在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。

  • 请求一:A修改数据库数据 B修改Redis数据
  • 请求二:C修改数据库数据 D修改Redis数据
  • 正常情况:A —> B—>C —> D

并发情况下就会存在A —> C —> D —> B的情况,问题在哪里?

要理解线程并发执行多组原子操作执行顺序是可能存在交叉现象的

A修改数据库的数据最终保存到了Redis中,但是在A没有修改完成是不会同步进mysql的,

C在AB操作之间来查询,缓存redis数据没有删除,那A已经修改新数据了但是没有同步进B步骤进redis

导致C查看的还是老数据,此时出现了Redis中数据和数据库数据不一致的情况,从而出现查询到的数据并不是数据库中的真实数据的严重问题。

2、解决方案

在使用Redis时,需要保持Redis和数据库数据的一致性,最流行的解决方案之一就是延时双删策略。

**注意:**经常修改的数据表不适合使用Redis,因为双删策略执行的结果是把Redis中保存的那条数据删除了,以后的查询短时间内就都会去查询数据库,导致mysql侧压力瞬间增大,所以Redis使用的是读远远大于改的数据缓存。

  • 删除缓存
  • 更新数据库
  • 延时500毫秒 (根据具体业务设置延时执行的时间,保证数据库更新或者删除业务操作完成即可,看你自己实际情况)
  • 删除缓存

3、为何要两次删除缓存?

如果我们没有第二次删除操作,此时有请求访问数据,有可能是访问的之前未做修改的Redis数据,删除操作执行后,Redis为空,有请求进来时,便会去访问数据库,此时数据库中的数据已是更新后的数据,保证了数据的一致性。

因为mysql做了update操作,

导致数据不一致

查都是先查redis,一旦redis和mysql数据不一致,我返回的是redis里面的老数据,导致了这个生产bug

那一不做二不休,直接删掉redis,没有redis了,只有唯一的一个底单数据源mysql,数据源现在在唯一了

大家都来自mysql

更新动作完成之前,redis没有值,都从mysql一个数据源来

4、新建xx-delay-double-del

1、SQL

USE
`xx_db2025`;DROP TABLE IF EXISTS `user_db`;CREATE TABLE `user_db`
(`id`       int                                                    NOT NULL AUTO_INCREMENT,`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;insert into `user_db`(`id`, `username`)
values (1, 'Version1');

2、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version><relativePath/></parent><artifactId>xx-delay-double-del</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- spring boot的web开发所需要的起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!-- mybatis-plus-boot3-starter --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency><!-- mybatis-plus-extension --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.5.7</version></dependency><!--pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>2.1.0</version></dependency><!--SpringBoot集成druid连接池druid-spring-boot-starter --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.21</version></dependency><!-- mysql-connector-j --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency><!--boot-redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- aop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>com.xx</groupId><artifactId>xx-common-core</artifactId><version>1.6.1</version></dependency><!-- md5 加密包 --><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><!-- commons --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3、application.yml

server:port: 8001spring:data:redis:database: 0host: 127.0.0.1password: 123456port: 6379datasource:driver-class-name: com.mysql.cj.jdbc.Driver#    url: jdbc:mysql://127.0.0.1:3306/xx_db2023?connectTimeout=6000&socketTimeout=6000&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiurl: jdbc:mysql://127.0.0.1:3306/xx_db2025?connectTimeout=6000&socketTimeout=6000&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=trueusername: rootpassword: mac_root# mybatis-plus相关配置
mybatis-plus:#  global-config:#    db-config:#      id-type: auto# xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)mapper-locations: classpath:mapper/*Mapper.xml# type-enums-package: com.xx.enumsconfiguration:# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射map-underscore-to-camel-case: true# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段call-setters-on-nulls: true# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImplcache-enabled: truedb-config:logic-delete-field: del_flag  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)---
spring:sql:init:mode: always  # 总是初始化数据库schema-locations: classpath:db/init.sql  # 初始化SQL文件位置#Mybatis输出sql日志
logging:level:com.xx.mapper: info

4、启动类

package com.xx;import com.xx.utils.LocalIpUtil;
import com.xx.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.util.StopWatch;import java.net.UnknownHostException;/*** @Author: xueqimiao* @Date: 2025/3/17 14:22*/
@SpringBootApplication
@MapperScan("com.xx.mapper")
@Slf4j
public class DelayDoubleDelApplication {public static void main(String[] args) throws UnknownHostException {StopWatch stopWatch = new StopWatch();stopWatch.start();ConfigurableApplicationContext application = SpringApplication.run(DelayDoubleDelApplication.class, args);stopWatch.stop();Environment env = application.getEnvironment();String ip = LocalIpUtil.getLocalIp();String port = env.getProperty("server.port");String path = env.getProperty("server.servlet.context-path");path = ValidationUtil.isEmpty(path) ? "" : path;log.info("\n--------------------------------------------------------\n\t" +"Application Manager is running! Access URLs:\n\t" +"Local: \t\thttp://127.0.0.1:" + port + path + "/\n\t" +"External: \thttp://" + ip + ":" + port + path + "/\n\t" +"Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n\t" +"服务启动完成,耗时: \t" + stopWatch.getTotalTimeSeconds() + "S\n" +"----------------------------------------------------------");}}

5、RedisUtils

package com.xx.utils;import jakarta.annotation.Resource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;import java.util.Set;
import java.util.concurrent.TimeUnit;/*** @Author: xueqimiao* @Date: 2025/3/17 14:19*/
@Service
public class RedisUtils {@Resourceprivate RedisTemplate<String, String> redisTemplate;/*** RedisAutoConfiguration* 写入缓存+过期时间** @param key* @param value* @param expireTime* @param timeUnit* @return*/public boolean set(String key, String value, Long expireTime, TimeUnit timeUnit) {ValueOperations<String, String> operations = redisTemplate.opsForValue();operations.set(key, value);redisTemplate.expire(key, expireTime, timeUnit);return true;}/*** 通过key获取value** @param key* @return*/public String get(String key) {ValueOperations<String, String> operations = redisTemplate.opsForValue();return operations.get(key);}/*** 批量删除 k-v** @param keys* @return*/public boolean del(final String... keys) {for (String key : keys) {if (redisTemplate.hasKey(key)) { //key存在就删除redisTemplate.delete(key);}}return true;}public boolean del(final Set<String> keys) {for (String key : keys) {if (redisTemplate.hasKey(key)) { //key存在就删除redisTemplate.delete(key);}}return true;}/*** 获取key集合* @param key* @return*/public Set<String> keys(final String key) {Set<String> keys = redisTemplate.keys(key);return keys;}
}

6、RedisConfig

package com.xx.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** @Author: xueqimiao* @Date: 2025/3/17 14:19*/
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Integer,Integer> redisTemplate(RedisConnectionFactory factory){RedisTemplate<Integer,Integer> redisTemplate = new RedisTemplate<>();// 设置连接工厂类redisTemplate.setConnectionFactory(factory);// 设置k-v的序列化方式// Jackson2JsonRedisSerializer 实现了 RedisSerializer接口Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

7、User

package com.xx.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** @Author: xueqimiao* @Date: 2025/3/17 14:13*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user_db")
public class User implements Serializable {@TableId(type = IdType.AUTO)private Integer id;private String username;}

8、UserMapper

package com.xx.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xx.entity.User;/*** @Author: xueqimiao* @Date: 2025/3/17 14:14*/
public interface UserMapper extends BaseMapper<User> {
}

9、UserService

package com.xx.service;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xx.common.Result;
import com.xx.entity.User;
import com.xx.mapper.UserMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;/*** @Author: xueqimiao* @Date: 2025/3/17 14:17*/
@Service
public class UserService {@Resourceprivate UserMapper userMapper;public Result update(User user) {int i = userMapper.updateById(user);if (i > 0) {return Result.ok(i);}return Result.error(500, "操作数据库失败");}public Result get(Integer id) {LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();wrapper.eq(User::getId, id);User user = userMapper.selectOne(wrapper);return Result.ok(user);}
}

5、自定义缓存注解@Cache

package com.xx.cache;import java.lang.annotation.*;/*** @Author: xueqimiao* @Date: 2025/3/17 14:24*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Cache {/*** 过期时间,默认60s* @return*/long expire() default 5 * 60 * 1000;/*** 缓存标识name* @return*/String name() default "";}

6、CacheAspect

package com.xx.cache;import com.alibaba.fastjson.JSON;
import com.xx.common.Result;
import com.xx.utils.RedisUtils;
import com.xx.utils.ValidationUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit;/*** @Author: xueqimiao* @Date: 2025/3/17 14:25*/
@Component
@Aspect
@Slf4j
public class CacheAspect {@Resourceprivate RedisUtils redisUtils;/*** aop切点* 拦截被指定注解修饰的方法*/@Pointcut("@annotation(com.xx.cache.Cache)")public void cache() {}/*** 缓存操作** @param pjp* @return*/@Around("cache()")public Object toCache(ProceedingJoinPoint pjp) {try {// 思路: 设置存储的格式,获取即可Signature signature = pjp.getSignature();// 类名String className = pjp.getTarget().getClass().getSimpleName();// 方法名String methodName = signature.getName();// 参数处理Object[] args = pjp.getArgs();Class[] parameterTypes = new Class[args.length];String params = "";for (int i = 0; i < args.length; i++) {if (args[i] != null) {parameterTypes[i] = args[i].getClass();params += JSON.toJSONString(args[i]);}}if (!ValidationUtil.isEmpty(params)) {//加密 以防出现key过长以及字符转义获取不到的情况params = DigestUtils.md5Hex(params);}// 获取controller中对应的方法Method method = signature.getDeclaringType().getMethod(methodName, parameterTypes);// 获取Cache注解Cache annotation = method.getAnnotation(Cache.class);long expire = annotation.expire();String name = annotation.name();// 访问redis(先尝试获取,没有则访问数据库)String redisKey = name + "::" + className + "::" + methodName + "::" + params;String redisValue = redisUtils.get(redisKey);if (!ValidationUtil.isEmpty(redisValue)) {// 不为空返回数据Result result = JSON.parseObject(redisValue, Result.class);log.info("数据从redis缓存中获取,key: {}", redisKey);return result; // 跳出方法}Object proceed = pjp.proceed();// 放行redisUtils.set(redisKey, JSON.toJSONString(proceed), expire, TimeUnit.MILLISECONDS);log.info("数据存入redis缓存,key: {}", redisKey);return proceed;} catch (Throwable throwable) {return Result.error(500, "系统错误");}}}

7、自定义延迟双删注解@ClearAndReloadCache

package com.xx.cache;import java.lang.annotation.*;/*** @Author: xueqimiao* @Date: 2025/3/17 14:26*/
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public @interface ClearAndReloadCache {String name() default "";
}

8、ClearAndReloadCacheAspect

package com.xx.cache;import com.xx.utils.RedisUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;import java.lang.reflect.Method;
import java.util.Set;/*** @Author: xueqimiao* @Date: 2025/3/17 14:26*/
@Aspect
@Component
@Slf4j
public class ClearAndReloadCacheAspect {@Resourceprivate RedisUtils redisUtils;/*** 切入点* 切入点,基于注解实现的切入点  加上该注解的都是Aop切面的切入点*/@Pointcut("@annotation(com.xx.cache.ClearAndReloadCache)")public void pointCut() {}/*** 环绕通知第一个参数必须是org.aspectj.lang.ProceedingJoinPoint类型** @param proceedingJoinPoint*/@Around("pointCut()")public Object aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {log.info("----------- 环绕通知 -----------");log.info("环绕通知的目标方法名:" + proceedingJoinPoint.getSignature().getName());Signature signature = proceedingJoinPoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;Method targetMethod = methodSignature.getMethod();//方法对象ClearAndReloadCache annotation = targetMethod.getAnnotation(ClearAndReloadCache.class);//反射得到自定义注解的方法对象String name = annotation.name();//获取自定义注解的方法对象的参数即nameSet<String> keys = redisUtils.keys("*" + name + "*");//模糊定义keyredisUtils.del(keys);//模糊删除redis的key值//执行加入双删注解的改动数据库的业务 即controller中的方法业务Object proceed = null;try {proceed = proceedingJoinPoint.proceed();//放行} catch (Throwable throwable) {throwable.printStackTrace();}//新开开一个线程延迟0.5秒(时间可以改成自己的业务需求),等着mysql那边业务操作完成//在线程中延迟删除  同时将业务代码的结果返回 这样不影响业务代码的执行new Thread(() -> {try {Thread.sleep(500);Set<String> keys1 = redisUtils.keys("*" + name + "*");//模糊删除redisUtils.del(keys1);log.info("-----------0.5秒后,在线程中延迟删除完毕 -----------");} catch (InterruptedException e) {e.printStackTrace();}}).start();return proceed;//返回业务代码的值}}

9、UserController

可以在 redisUtils.del(keys)的时候打断点调试

package com.xx.controller;import com.xx.cache.Cache;
import com.xx.cache.ClearAndReloadCache;
import com.xx.common.Result;
import com.xx.entity.User;
import com.xx.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;/*** @Author: xueqimiao* @Date: 2025/3/17 14:27*/
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;@PostMapping("/updateData")@ClearAndReloadCache(name = "get_user")public Result updateData(@RequestBody User user) {return userService.update(user);}@GetMapping("/get")@Cache(name = "get_user")public Result get(@RequestParam Integer id) {return userService.get(id);}
}

写在最后

Java是一种强大的语言,它赋予了我们创造无限可能的力量。无论你是在开发企业级应用、移动应用还是大数据处理系统,Java都在背后默默支持着你。在这个瞬息万变的技术时代,保持学习的热情和对新技术的敏感度是至关重要的。每一个新的Java版本发布,都带来了新的特性和改进,这是我们提升自己的绝佳机会。让我们一起在Java的道路上勇往直前,用代码构建更加美好的数字世界,因为你手中的代码,有可能成为下一个改变世界的伟大发明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows桌面采集技术

在进入具体的方式讨论前&#xff0c;我们先看看 Windows 桌面图形界面的简化架构&#xff0c;如下图&#xff1a; 在 Windows Vista 之前&#xff0c;Windows 界面的复合画面经由 Graphics Device Interface&#xff08;以下简称 GDI&#xff09;技术直接渲染到桌面上。 在 Wi…

ElementPlus 快速入门

目录 前言 为什么要学习 ElementPlus&#xff1f; 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装&#xff0c;选择包管理器 3 运行该命令 demo(案例1 &#xff09; 步骤 …

[蓝桥杯 2023 省 A] 异或和之和

题目来自洛谷网站&#xff1a; 暴力思路&#xff1a; 先进性预处理&#xff0c;找到每个点位置的前缀异或和&#xff0c;在枚举区间。 暴力代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N 1e520;int n; int arr[N…

python学习笔记--实现简单的爬虫(二)

任务&#xff1a;爬取B站上最爱欢迎的编程课程 网址&#xff1a;编程-哔哩哔哩_bilibili 打开网页的代码模块&#xff0c;如下图&#xff1a; 标题均位于class_"bili-video-card__info--tit"的h3标签中&#xff0c;下面通过代码来实现&#xff0c;需要说明的是URL中…

windows清除电脑开机密码,可保留原本的系统和资料,不重装系统

前言 很久的一台电脑没有使用了&#xff0c;开机密码忘了&#xff0c;进不去系统 方法 1.将一个闲置u盘设置成pe盘&#xff08;注意&#xff0c;这个操作会清空原来u盘的数据&#xff0c;需要在配置前将重要数据转移走&#xff0c;数据无价&#xff0c;别因为配置这个丢了重…

5.4 位运算专题:LeetCode 137. 只出现一次的数字 II

1. 题目链接 LeetCode 137. 只出现一次的数字 II 2. 题目描述 给定一个整数数组 nums&#xff0c;其中每个元素均出现 三次&#xff0c;除了一个元素只出现 一次。请找出这个只出现一次的元素。 要求&#xff1a; 时间复杂度为 O(n)&#xff0c;空间复杂度为 O(1)。 示例&a…

C语言:扫雷

在编程的世界里&#xff0c;扫雷游戏是一个经典的实践项目。它不仅能帮助我们巩固编程知识&#xff0c;还能锻炼逻辑思维和解决问题的能力。今天&#xff0c;就让我们一起用 C 语言来实现这个有趣的游戏&#xff0c;并且通过图文并茂的方式&#xff0c;让每一步都清晰易懂 1. 游…

【论文#目标检测】YOLO9000: Better, Faster, Stronger

目录 摘要1.引言2.更好&#xff08;Better&#xff09;3.更快&#xff08;Faster&#xff09;4.更健壮&#xff08;Stronger&#xff09;使用 WordTree 组合数据集联合分类和检测评估 YOLO9000 5.结论 Author: Joseph Redmon; Ali Farhadi Published in: 2017 IEEE Conference …

大数据运维实战之YARN任务内存泄露排查实战:从节点掉线到精准定位的完整指南

1.问题背景&#xff1a;集群内存风暴引发的危机 最近某大数据集群频繁出现节点掉线事故&#xff0c;物理内存监控持续爆红。运维人员发现当节点内存使用率达到95%以上时&#xff0c;机器会进入不可响应状态&#xff0c;最终导致服务中断。这种"内存雪崩"现象往往由单…

AI+金融 应用 使用DeepSeek、Qwen等大模型输入自然语言,得到通达信等行情软件公式代码,导入后使用

AI金融 应用 使用DeepSeek、Qwen等大模型输入自然语言&#xff0c;得到通达信等行情软件公式代码&#xff0c;导入后使用。不会编程&#xff0c;也能行情软件中实现个性化条件选股&#xff0c;个性化技术指标。 AIbxm低估值趋势选股策略&#xff0c;参考提示词&#xff1a; 编…

多语言语料库万卷·丝路2.0开源,数据模态全面升级,搭建文化交流互鉴AI桥梁

3月22日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;联合新华社新闻信息中心、上海外国语大学、外研在线等&#xff0c;发布全新升级的“万卷丝路2.0”多语言语料库&#xff0c;通过构建多语言开源数据底座&#xff0c;以人工智能赋能“一带一路”高质…

多语言生成语言模型的少样本学习

摘要 大规模生成语言模型&#xff0c;如GPT-3&#xff0c;是极具竞争力的少样本学习模型。尽管这些模型能够共同表示多种语言&#xff0c;但其训练数据以英语为主&#xff0c;这可能限制了它们的跨语言泛化能力。在本研究中&#xff0c;我们在一个涵盖多种语言的语料库上训练了…

Linux运维篇-系统io调优

目录 磁盘文件系统虚拟文件系统 文件系统的工作原理文件系统 I/OI/O 的分类缓冲与非缓冲 I/O直接与非直接 I/O阻塞与非阻塞 I/O同步与异步 I/O 查看文件系统容量目录项和索引节点缓存 通用块层I/O 栈磁盘性能指标磁盘 I/O 观测进程 I/O 观测I/O瓶颈的排查思路思路一思路二 I/O优…

C语言笔记(鹏哥)上课板书+课件汇总(动态内存管理)--数据结构常用

动态内存管理 引言&#xff1a;将内存升起一段空间存放数据有几种手段 创建变量&#xff1a;存放一个值创建数组&#xff1a;存放多个连续的一组值 以上开辟的内存空间是固定的&#xff0c;创建大了&#xff0c;空间浪费&#xff0c;创建小了&#xff0c;空间不够。并且一旦…

本地安装deepseek大模型,并使用 python 调用

首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步&#xff0c;就可以 点击搜索 Models &#xff1a; https://ollama.com/search然后点击下载&#xff1a; 选择后复制: ollama run deepseek-r1:32b例如&#xff1a; 让它安装完成后&#xff1…

Linux wifi driver 注册和设备探测流程

基础流程 wifi驱动加载&#xff08;insmod或者modprobe&#xff09; 设备驱动匹配探测&#xff08;我们常见的probe函数&#xff09; 整体流程 驱动加载 → 注册支持设备 → 设备插入 → 匹配驱动 → 初始化硬件 → 创建网络接口 明确两点 两个流程 驱动加载&#xf…

【机器人】复现 GrainGrasp 精细指导的灵巧手抓取

GrainGrasp为每个手指提供细粒度的接触指导&#xff0c;为灵巧手生成精细的抓取策略。 通过单独调整每个手指的接触来实现更稳定的抓取&#xff0c;从而提供了更接近人类能力的抓取指导。 论文地址&#xff1a;GrainGrasp: Dexterous Grasp Generation with Fine-grained Con…

快速部署Samba共享服务器作为k8s后端存储

由于Ceph Squid&#xff08;v19.2.1&#xff09;‌不原生支持直接导出 SMB 服务器‌&#xff0c;需通过手动集成 Samba 或其他第三方工具实现‌ 所以直接部署最简单的 安装软件包 apt install samba编辑配置文件 vim /etc/samba/smb.conf在最末尾添加以下 # cp /etc/samba/sm…

【MYSQL】索引和事务

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容讲解 MySQL 中的索引和事务&#xff0c;在学习的过程中&#xff0c;我们需要经常问自己为什么 文章目录 1. 索…

计划管理工具应该具备的能(甘特图)

在当今快节奏的项目管理环境中&#xff0c;高效地规划和跟踪项目进度是至关重要的。甘特图&#xff0c;作为项目管理领域的经典工具&#xff0c;以其直观的时间轴和任务分配方式&#xff0c;深受项目管理者的青睐。 随着数字化时代的到来&#xff0c;甘特图线上编辑器应运而生&…