产品详情页中 品牌官网详情 对应后端的字段是 detail

文章目录

  • 1、在这个Vue代码中,品牌官网详情 对应后端的字段是 detail
  • 2、品牌官网详情 功能相关的代码片段
  • 3、export const productSave = (data: any) =>
  • 4、ProductController
  • 5、ProductDto 类
  • 6、ProductApiService

1、在这个Vue代码中,品牌官网详情 对应后端的字段是 detail

在这个Vue代码中,品牌官网详情 对应后端的字段是 detail

解释:

  1. <el-form-item label="品牌官网详情" prop="detail" label-width="130px">: 在模板中,您可以看到 “品牌官网详情” 这一项使用了 el-form-item 组件,并且 prop 属性被设置为 "detail"
  2. prop="detail" 的含义: 在Element UI的 el-form-item 中,prop 属性用于指定该表单项绑定的数据字段。 prop="detail" 意味着这个表单项(“品牌官网详情”)绑定的是 form 对象中的 detail 属性。
  3. v-model="form.detail" (虽然此处未使用 v-model,但逻辑是相同的): 在 operateType'edit' 时,富文本编辑器 div v-else id="detail" /> 会被初始化,并在 save() 方法中,通过 this.editor.txt.html() 获取富文本内容,并最终赋值给 form.detail (虽然代码中直接将 this.editor.txt.html() 放入 data 对象,但逻辑上是更新了 form.detail), 然后在 productSave API 调用中提交。 在 operateType'view' 时, v-html="form.detail" 直接将 form.detail 的内容渲染到页面上。
  4. getproductDetail() 方法: 在 getproductDetail() 方法中,后端返回的数据 (res.data) 被赋值给 form 对象。 关键的一行是 const form = res.data;this.editor.txt.html(form.detail || ''); 以及 this.form = { ...form }。 这表明从后端获取的数据中,有一个名为 detail 的字段,它被用来填充表单的 “品牌官网详情” 部分。

总结:

通过代码中的 prop="detail" 和数据流分析,可以确定 Vue 组件中 “品牌官网详情” 对应后端的字段就是 detail。 这与您提供的 SQL INSERT 语句中 detail 列用于存储 “品牌官网详情” HTML 内容也是一致的。


2、品牌官网详情 功能相关的代码片段

好的,我为您整理了 product-detail.vue 组件中与 品牌官网详情 功能相关的代码片段。

1. 模板 (Template) 部分:

          <el-row :gutter="20">
            <el-col :span="18">
              <el-form-item label="品牌官网详情" prop="detail" label-width="130px">
                <div slot="label">
                  <span>品牌官网详情
                    <el-tooltip class="item" effect="dark" content="富文本形式,此处建议使用图片形式" placement="right">
                      <i class="el-icon-warning-outline" />
                    </el-tooltip>
                  </span>
                </div>
                <!-- <el-input
                  v-model="form.introduction"
                  type="textarea"
                  :autosize="{minRows: 8, maxRows: 10}"
                /> -->
                <div v-if="operateType === 'view'"
                     style="padding: 5px 10px; width: 100%; height: 1200px; max-height: 1200px; overflow: auto; border: 1px solid #DCDFE6; border-radius: 4px;"
                     v-html="form.detail"
                />
                <div v-else id="detail" />
              </el-form-item>
            </el-col>
          </el-row>

代码解释:

  • <el-form-item label="品牌官网详情" prop="detail" ...>: 定义了表单项的标签为 “品牌官网详情”,并指定了 prop="detail",表示该表单项绑定 form 对象中的 detail 字段。
  • v-if="operateType === 'view'": 当 operateType 为 “view” (查看) 模式时,显示一个 div 容器,并使用 v-html="form.detail"form.detail 中的 HTML 内容渲染到页面上,用于展示品牌官网详情。
  • <div v-else id="detail" />: 当 operateType 不是 “view” (即为 “edit” 或 “add” 模式) 时,显示一个 div 元素,其 id"detail"。 这个 div 是富文本编辑器 wangeditor 将要挂载的目标元素。

2. 脚本 (Script) 部分:

a) form 对象的初始化 (在 data 中):

虽然在您提供的代码片段中,form 对象本身没有直接初始化 detail 字段,但通常 form 对象会在 data 中定义,可能包含初始值,或者在 mountedcreated 生命周期钩子中从后端获取数据后进行赋值。 以下是一个可能的 form 初始化结构示例 (如果 detail 需要初始为空字符串):

export default class extends Vue {
  // ... 其他代码
  public form: any = {
    // ... 其他表单字段
    detail: '', // 初始化 detail 字段为空字符串
    // ... 其他表单字段
  }
  // ... 其他代码
}

b) getproductDetail() 方法 (获取产品详情数据):

public async getproductDetail() {
  const res: any = await productDetail({ id: this.id })
  if (res.code === 0) {
    const form = res.data
    const res2 = await fieldsById({ categoryId: form.categoryId })
    const ss = res2.data.content
    if (form.fieldList.length > 0) {
      form.fieldList = form.fieldList.map(o => ({ ...ss.find(p => o.id === p.id), ...o, key: Math.random() + '' }))
    }
    if (this.operateType !== 'view') {
      this.editor.txt.html(form.detail || '') // 将后端返回的 detail 数据设置到编辑器中
      // ... 其他 editor 初始化代码
    }
    Object.assign(form, { stageImageIdListx: form.stageImageIdList[0] })
    this.form = { ...form }
    this.formSource = { ...form }
    console.log(this.form)
  }
}

代码解释:

  • this.editor.txt.html(form.detail || ''): 在 getproductDetail() 方法中,当 operateType 不是 “view” 模式时,会调用 this.editor.txt.html(form.detail || '')。 这行代码的作用是将从后端获取的 form.detail 数据 (品牌官网详情的 HTML 内容) 设置到富文本编辑器 this.editor 中。 如果 form.detail 为空,则设置为空字符串。

c) save() 方法 (保存产品信息):

public async save() {
  const fieldList = this.form.fieldList && this.form.fieldList.length > 0 ? this.form.fieldList.map(({ id, value }: any) => ({ id, value })) : []
  console.log(this.form.stageImageIdListx)
  const data: any = {
    ...this.form,
    fieldList,
    detail: this.editor.txt.html(), // 从编辑器中获取 HTML 内容并赋值给 data.detail
    stageImageIdList: [this.form.stageImageIdListx]
    // ... 其他需要保存的数据
  }
  console.log(data)
  const res: any = await productSave(data)
  if (res.code === 0) {
    this.$router.go(-1)
  }
}

代码解释:

  • detail: this.editor.txt.html(): 在 save() 方法中,创建要提交到后端的数据 data 对象时,使用了 detail: this.editor.txt.html()。 这行代码的作用是从富文本编辑器 this.editor 中获取当前的 HTML 内容,并将其赋值给 data.detail 字段。 这样,当调用 productSave(data) API 时,品牌官网详情的富文本内容就会被提交到后端进行保存。

d) initEditor() 方法 (初始化富文本编辑器):

private initEditor(element: any, i: any) {
  const oss = this.oss
  if (i === 0) i = ''
  this[`editor${i}`] = new E(`${element}`) // 初始化编辑器,挂载到指定的 DOM 元素 (例如 '#detail')
  this[`editor${i}`].customConfig = this[`editor${i}`].customConfig ? this[`editor${i}`].customConfig : this[`editor${i}`].config
  this[`editor${i}`].customConfig.uploadImgServer = this.api + `oss/product-detail` // 配置图片上传服务器地址
  this[`editor${i}`].config.withCredentials = false
  this[`editor${i}`].customConfig.uploadFileName = 'file'
  this[`editor${i}`].customConfig.uploadImgTimeout = 3 * 60 * 1000 // 设置超时时间
  this[`editor${i}`].customConfig.uploadImgMaxSize = 20 * 1024 * 1024 // 将图片大小限制为 3M
  this[`editor${i}`].customConfig.customUploadImg = async function(resultFiles: any, insertImgFn: any) {
    // ... 自定义图片上传逻辑
  }
  this[`editor${i}`].customConfig.uploadImgHeaders = {
    token: UserModule.token ? JSON.parse(UserModule.token).token : ''
  }
  this[`editor${i}`].customConfig.uploadImgHooks = {
    // ... 图片上传钩子函数
  }
  this[`editor${i}`].create() // 创建编辑器实例
}

private initAllEditor() {
  this.initEditor('#detail', 0) // 初始化 '品牌官网详情' 的编辑器,目标元素 id 为 '#detail'
}

mounted() {
  // ... 其他 mounted 代码
  if (this.operateType !== 'view') this.initAllEditor() // 在 mounted 生命周期中,如果不是查看模式,则初始化编辑器
  // ... 其他 mounted 代码
}

代码解释:

  • this.initEditor('#detail', 0)this.initAllEditor(): initAllEditor() 方法调用 initEditor('#detail', 0) 来初始化 “品牌官网详情” 的富文本编辑器。'#detail' 就是模板中 <div v-else id="detail" /> 定义的元素 ID,wangeditor 会将编辑器实例挂载到这个元素上。
  • this[editor i ‘ ] = n e w E ( ‘ {i}`] = new E(` i]=newE({element}): 创建 wangeditor 编辑器实例,并赋值给 this.editor (当 i 为 0 时)。
  • this[editor${i}].customConfig.uploadImgServer = this.api + oss/product-detail``: 配置 wangeditor 的图片上传服务器地址。 这部分代码非常重要,因为它指定了富文本编辑器中上传的图片将要提交到哪个后端 API 接口。 请注意,这里使用了 this.api + 'oss/product-detail',您需要确保 this.api 变量指向的是您新的域名 www.crossbiog.com 相关的 API 服务地址,以便图片上传到正确的服务器。

总结:

以上代码片段涵盖了 Vue 组件中与 品牌官网详情 功能相关的模板和脚本代码。 核心逻辑包括:

  • 使用 el-form-itemprop="detail" 在表单中展示和绑定 “品牌官网详情” 字段。
  • 使用 v-html="form.detail" 在查看模式下渲染富文本内容。
  • 使用 wangeditor 富文本编辑器在编辑/添加模式下编辑品牌官网详情,并挂载到 id="detail"div 元素上。
  • getproductDetail() 方法中,将后端返回的 detail 数据加载到编辑器中。
  • save() 方法中,从编辑器中获取 HTML 内容,并将其作为 detail 字段提交到后端。
  • 配置 wangeditor 的图片上传服务器地址 uploadImgServer请务必检查和更新 this.api 变量,确保其指向正确的域名。

通过这些代码片段,您可以更清晰地了解 “品牌官网详情” 功能在 Vue 组件中的实现方式,以及它与后端 detail 字段的关联。 如果您需要修改域名或进行其他调整,可以重点关注这些代码部分。

3、export const productSave = (data: any) =>

export const productSave = (data: any) =>
  request({
    url: 'product/admin/save',
    method: 'post',
    data
  })

4、ProductController

您提供的Java代码是 ProductController 的内容,它负责处理产品相关的后台API请求。要找到与 保存 操作相关的代码,特别是针对 品牌官网详情 的保存,我们需要关注带有 @PostMapping 注解的方法,并且方法名暗示了保存功能。

在您提供的代码中,以下方法是与保存操作相关的:

  • @PostMapping("admin/save") saveBasic 方法

我们来详细分析 saveBasic 方法,因为它看起来最像是处理产品信息保存的接口:

    @PostMapping("admin/save")
    @ApiOperation("保存")
    public BaseResult saveBasic(@Valid @RequestBody ProductDto dto,
                                @ApiIgnore @SessionAttribute(Constants.ADMIN_ID) Integer adminId) {
        adminId = adminCommonService.getVipIdByProduct(adminId);
        if (!subscribeService.isVIP(adminId)) {
            return BaseResult.failure("抱歉,您尚未订阅商品或所有订阅已到期,没有新建或修改商品权限");
        }
        productApiService.save(dto, adminId);
        return BaseResult.success();
    }

代码分析:

  1. @PostMapping("admin/save"): 这个注解表明 saveBasic 方法处理的是 POST 请求,并且请求路径是 /product/admin/save。 这通常用于执行数据的创建或更新操作。
  2. @ApiOperation("保存"): 这个注解提供了Swagger API文档的描述,明确指出这个接口是用于 “保存” 操作。
  3. @Valid @RequestBody ProductDto dto:
    • @RequestBody ProductDto dto: 这个注解表示方法接收的请求体数据会被绑定到 ProductDto 对象上。 这意味着前端发送的JSON数据会被反序列化成一个 ProductDto 对象,并作为 dto 参数传递给 saveBasic 方法。
    • @Valid: 这个注解表示需要对 ProductDto 对象进行数据校验。
  4. productApiService.save(dto, adminId);: 这是 saveBasic 方法的核心逻辑。它调用了 productApiServicesave 方法,并将 ProductDto 对象 dtoadminId 作为参数传递进去。 这表明实际的保存逻辑是在 productApiService.save 方法中实现的。

结论:

@PostMapping("admin/save") saveBasic 方法 是与保存操作直接相关的代码。

要确定 “品牌官网详情” 如何保存,以及对应的后端字段,您需要进一步查看以下内容:

  1. ProductDto 类: 您需要查看 ProductDto 类的定义,确认它是否包含一个字段用于存储 “品牌官网详情”。 根据前端Vue代码的分析,我们知道前端字段是 detail,因此,您应该在 ProductDto 类中查找名为 detail 的字段。
  2. ProductApiService 接口和实现类: 您需要找到 ProductApiService 接口的 save 方法的定义,以及它的具体实现类 (例如 ProductApiServiceImpl)。 在实现类中,您需要查看 save 方法的实现逻辑,了解它是如何处理 ProductDto 对象,并将数据保存到数据库中的。
  3. 数据库实体类 Product: 最终,数据会被保存到数据库的 product 表中。 您需要查看 Product 实体类的定义,确认它是否有一个名为 detail 的字段,并且这个字段的类型能够存储 “品牌官网详情” 的HTML内容(通常是 StringText 类型)。

总结一下查找步骤:

  1. 找到 ProductDto 类,查看是否包含 detail 字段。
  2. 找到 ProductApiService 接口的 save 方法定义。
  3. 找到 ProductApiService 的实现类,查看 save 方法的具体实现逻辑,特别是如何处理 dto.getDetail() 并将其保存到数据库。
  4. 找到 Product 实体类,确认是否存在 detail 字段,以及其数据类型。

通过这些步骤,您就能完整地了解后端是如何接收和保存 “品牌官网详情” 数据的,并确认后端对应的字段名称。 基本上可以确定后端接收和保存 “品牌官网详情” 的核心代码就在 ProductControllersaveBasic 方法以及它调用的 productApiService.save 方法中。

5、ProductDto 类

您提供的代码是 ProductDto 类,它是一个数据传输对象 (DTO),用于在不同层之间传递产品数据。

ProductDto 中与 “品牌官网详情” 相关的字段是 detail

    @ApiModelProperty("详情")
    private String detail;

分析:

  • @ApiModelProperty("详情"): 这个注解为Swagger API文档提供了字段描述,说明 detail 字段的含义是 “详情”。 结合前端代码和数据库表结构,可以明确 ProductDto 中的 detail 字段就是用于传输 品牌官网详情 数据的。
  • private String detail;: detail 字段的类型是 String,这与数据库中 product 表的 detail 列类型 (通常为 TEXTLONGTEXT) 是兼容的,可以存储HTML富文本内容。

其他与详情相关的字段 (但已标记为 @Deprecated):

您可能也注意到了 ProductDto 中还有 detail1detail9 这些被标记为 @Deprecated 的字段:

    @ApiModelProperty("图文详情1")
    @Deprecated
    private String detail1;
    @ApiModelProperty("图文详情2")
    @Deprecated
    private String detail2;
    // ... (detail3 到 detail9 类似)

@Deprecated 注解表明这些字段已被废弃,不应该再使用。 从字段名 “图文详情1”、“图文详情2” 等来看, 它们可能是早期版本中用于存储多段图文详情的,但现在已经被统一的 detail 字段 (以及 detailList 集合,虽然 detailList 从字段名看更像是另一种 “详情” ) 所取代。

结论:

ProductDto 类中,用于传输 “品牌官网详情” 数据的字段是 private String detail;

ProductControllersaveBasic 方法中,接收的 ProductDto 对象就包含了 detail 字段的数据。 productApiService.save(dto, adminId) 方法会接收这个 dto 对象,并从中提取 detail 字段的值,最终将其保存到数据库 product 表的 detail 列中。

如果您需要修改域名 oss.kxlist.comwww.crossbiog.com,并且品牌官网详情 (detail 字段) 中包含了图片URL,那么您需要确保在保存产品信息时,前端提交的 ProductDto 对象中的 detail 字段,其 URL 已经被替换为新的域名。 这通常需要在前端 Vue 组件的 save() 方法中,在获取富文本编辑器内容后,进行 URL 替换操作,然后再提交数据到后端。 或者,您也可以考虑在后端 productApiService.save() 方法的实现中,在保存 detail 数据之前,进行URL替换。 但更推荐在前端进行替换,因为前端更清楚哪些字段是URL,需要进行替换。

6、ProductApiService

您提供的Java代码片段是 ProductApiService 接口中 save 方法的实现。在这个方法中,直接负责将 “品牌官网详情” (也就是 detail 字段) 保存到数据库的代码是以下这行:

        BeanUtils.copyProperties(dto, product);

详细解释如下:

  1. BeanUtils.copyProperties(dto, product);: 这行代码使用了 Spring 框架提供的 BeanUtils.copyProperties 工具方法。它的作用是将 ProductDto 对象 dto 中的所有属性值复制到 Product 对象 product 中。

  2. ProductDto 包含 detail 属性: 我们已经确认了 ProductDto 类中定义了 private String detail; 字段,这个字段就是用来接收和传递 “品牌官网详情” 数据的。 当前端提交表单数据时,“品牌官网详情” 的内容会被填充到 ProductDto 对象的 detail 属性中。

  3. Product 对象映射数据库 product: Product 对象是 JPA 实体类,它代表了数据库中 product 表的一条记录。 假设 Product 实体类中也定义了 detail 属性 (通常会与数据库表中的 detail 列对应)。

工作原理:

BeanUtils.copyProperties(dto, product); 执行时,它会反射地遍历 ProductDto 对象 dto 的所有属性,并尝试在 Product 对象 product 中找到同名的属性,然后将 dto 属性的值复制到 product 对应的属性中。

关键点: 由于 ProductDto 中包含了 detail 属性,并且我们假设 Product 实体类中也有 detail 属性,因此,BeanUtils.copyProperties(dto, product); 这行代码会自动地将 dto.getDetail() 获取到的 “品牌官网详情” 内容,复制到 product.setDetail() 方法中,从而将 “品牌官网详情” 数据设置到了 Product 实体对象中。

后续的数据库保存操作:

虽然 BeanUtils.copyProperties 负责将数据复制到 Product 对象,但真正将 Product 对象保存到数据库的操作是后续的 productService.save(product); (以及在 if-else 分支中的 productService.save(product);product = productService.save(product);)。 productService.save(product) 方法会调用 JPA 或其他 ORM 框架的方法,将 Product 对象的状态持久化到数据库,包括 detail 属性的值。

总结:

直接负责把 ProductDto 中的 “品牌官网详情” 复制到 Product 实体对象中的代码是:

        BeanUtils.copyProperties(dto, product);

而真正将 Product 实体对象 (包含 “品牌官网详情”) 保存到数据库的代码是:

        productService.save(product); // (在 if 分支和 else 分支中都有调用)

因此,虽然没有显式地看到像 product.setDetail(dto.getDetail()); 这样的代码,但 BeanUtils.copyProperties 巧妙地完成了属性值的复制,使得 dto 中的 detail 数据最终被传递到 Product 对象,并最终通过 productService.save(product) 保存到数据库中。


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用C语言实现MySQL数据库的增删改查操作指南

使用C语言与MySQL数据库进行交互,通常涉及使用MySQL提供的C API库。这套API允许开发者在C/C++程序中执行SQL查询,从而实现数据库的增删改查操作。下面,我将详细介绍如何在C语言中实现这些基本操作。 准备工作 安装MySQL开发库:确保你的系统上安装了MySQL服务器以及MySQL开发…

【蓝桥杯嵌入式】2_LED

全部代码网盘自取 链接&#xff1a;https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码&#xff1a;3ii2 1、电路图 74HC573是八位锁存器&#xff0c;当控制端LE脚为高电平时&#xff0c;芯片“导通”&#xff0c;LE为低电平时芯片“截止”即将输出状态“锁存”…

计算机视觉常用数据集Cityscapes的介绍、下载、转为YOLO格式进行训练

我在寻找Cityscapes数据集的时候花了一番功夫&#xff0c;因为官网下载需要用公司或学校邮箱邮箱注册账号&#xff0c;等待审核通过后才能进行下载数据集。并且一开始我也并不了解Cityscapes的格式和内容是什么样的&#xff0c;现在我弄明白后写下这篇文章&#xff0c;用于记录…

MariaDB MaxScale实现mysql8主从同步读写分离

一、MaxScale基本介绍 MaxScale是maridb开发的一个mysql数据中间件&#xff0c;其配置简单&#xff0c;能够实现读写分离&#xff0c;并且可以根据主从状态实现写库的自动切换&#xff0c;对多个从服务器能实现负载均衡。 二、MaxScale实验环境 中间件192.168.121.51MaxScale…

Python设计模式 - 原型模式

定义 原型模式是一种创建型设计模式&#xff0c;它可以通过复制现有对象来创建新对象&#xff0c;而不是直接实例化新的对象。 结构 抽象原型&#xff08;Prototype&#xff09;&#xff1a;声明 clone() 方法&#xff0c;以便派生类实现克隆自身的能力。具体原型&#xff08…

GWO优化决策树回归预测matlab

灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;简称 GWO&#xff09;是一种群智能优化算法&#xff0c;由澳大利亚格里菲斯大学的 Mirjalii 等人于 2014 年提出。该算法的设计灵感源自灰狼群体的捕食行为&#xff0c;核心思想是模仿灰狼社会的结构与行为模式。 在本…

Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

Git(分布式版本控制系统)系统学习笔记【并利用腾讯云的CODING和Windows上的Git工具来实操】

Git的概要介绍 1️⃣ Git 是什么&#xff1f; Git 是一个 分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;用于跟踪代码的变更、协作开发和管理项目历史。 由 Linus Torvalds&#xff08;Linux 之父&#xff09;在 2005 年开发&#xff0c;主要用于 代码管理。…

yum报错 Could not resolve host: mirrorlist.centos.org

检查dns 使用ping www.baidu.com &#xff0c;如果ping不通&#xff0c;检查/etc/resolv.conf文件中是否有&#xff1a; nameserver 8.8.8.8 nameserver 8.8.4.4 替换yum源 1.备份原始的 YUM 源配置文件&#xff1a; sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r…

postgreSQL16.6源码安装

1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…

Machine Learning:Introduction

文章目录 Machine LearningTrainingStep 1.Contract Function with Unknown ParametersStep 2.Define Loss from Training DataStep 3.Optimization Linear ModelPiecewise Linear CurveBeyond Piecewise Liner?FunctionLossOptimization Model Deformation Machine Learning …

【Java】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock

文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…

使用redis实现 令牌桶算法 漏桶算法

流量控制算法&#xff0c;用于限制请求的速率。 可以应对缓存雪崩 令牌桶算法 核心思想是&#xff1a; 有一个固定容量的桶&#xff0c;里面存放着令牌&#xff08;token&#xff09;。每过一定时间&#xff08;如 1 秒&#xff09;&#xff0c;桶中会自动增加一定数量的令牌…

金媒婚恋交友系统V10.5的CRM操作提示:“您没有权限执行此操作”解决方法

大家都知道新年2.5日新版10.5已经升级了&#xff0c;这次升级相对以前更新内容相当重量级&#xff01;最突出的就是CRM系统的更新和UI改观吐槽的内容都改进了我愿意和大家分享代码和新得~关注我昵称就能知道我哦&#xff01;&#xff01; 出现原因&#xff1a;是这个红娘账号没…

ubuntu使用最佳流程2:ubuntu20.04安装cuda(多版本切换),cudnn,显卡驱动

cuda安装&#xff08;多版本cuda安装&#xff1a;可切换&#xff09; 查看系统硬件配置 查询Linux系统的版本号 lsb_release -a查询显卡型号 待更新下载 CUDA官方传送门 找到适合自己的命令行下载安装即可 安装 accept 第一个driver去掉&#xff08;点击enter&#xff…

Crowdin 在线本地化平台调用硅基流动AI预翻译

平台介绍 硅基流动&#xff08;AI服务平台&#xff09; 官网&#xff1a;https://siliconflow.cn/zh-cn/ 官方介绍 我主要使用&#xff1a;云服务平台 SilliconCloud 此平台已经将热门的开源大语言模型部署&#xff0c;花钱买额度&#xff0c;就能使用 API 最近有上线 Deep…

二、通义灵码插件保姆级教学-IDEA(使用篇)

一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细&#xff0c;感觉很强大有木有&#xff0c;关键还会生成流程图&#xff0c;对程序员理解业务非常有帮忙&#xff0c;基本能做到哪里不懂点哪里。…

游戏引擎学习第97天

回顾昨天并计划今天 在这期节目中&#xff0c;主要讲解了光照的概念&#xff0c;并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分&#xff1a; 光照的基础概述&#xff1a;讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…

python+unity落地方案实现AI 换脸融合

先上效果再说技术结论&#xff0c;使用的是自行搭建的AI人脸融合库&#xff0c;可以离线不受限制无限次生成&#xff0c;有需要的可以后台私信python ai换脸融合。 TODO 未来的方向&#xff1a;3D人脸融合和AI数据训练 这个技术使用的是openvcinsighface&#xff0c;openvc…

Python——批量图片转PDF(GUI版本)

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…