文件存储解决方案-阿里云OSS

news2024/12/26 2:14:01

文章目录

    • 1.菜单分级显示问题
        • 1.问题引出
          • 1.苹果灯,放到节能灯下面也就是id大于127
          • 2.查看菜单,并没有出现苹果灯
          • 3.放到灯具下面id=42,就可以显示
        • 2.问题分析和解决
          • 1.判断可能出现问题的位置
          • 2.找到递归返回树形菜单数据的位置
          • 3.这里出现问题的原因是,使用等号来比较了包装类的数值,修改为equals即可
          • 4.关于Long类型的机制
            • 1.编写测试用例
            • 2.结果
            • 3.debug 分析
          • 5.测试
            • 1.此时将苹果灯的id设置成652
            • 2.成功显示
    • 2.文件存储解决方案
        • 1.文件存储方案分析
        • 2.OSS在微服务架构位置
        • 3.上传方式
          • 1.普通上传方式
          • 2.服务端签名后直传
        • 4.创建Bucket
          • 1.进入对象存储控制台
          • 2.创建Bucket
          • 3.填写配置信息
          • 4.查看Bucket
            • 1.文件列表查看文件
            • 2.如果想要访问文件就使用url
        • 5.使用原生SDK上传文件到Bucket
          • 1.找到OSS的SDK参考文档
          • 2.sunliving-commodity 导入依赖这里选择3.5.0版本
          • 3.编写一个TestConroller
          • 4.找到上传文件代码并粘贴到TestConroller,然后引包,抛出异常
          • 5.回到控制台找到指定信息
            • 1.Endpoint
            • 2.找到AccessKey管理
            • 3.选择开始使用子用户的AccessKey
            • 4.创建用户
            • 5.填写信息
            • 6.验证一下
            • 7.复制一份并保留,AccessKey Secret 以后不会再出现
            • 8.选择授权 -> 新增授权
            • 9.为刚才的子用户授予权限
            • 10.查看子用户信息
          • 6.将上一步找到的三个信息填到代码中并指定其余信息
            • 1.Endpoint(前面需要加https://)
            • 2.设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET
            • 3.bucketName
            • 4.填写两个文件路径
          • 7.测试
            • 1.启动 sunliving-commodity 模块
            • 2.浏览器访问 http://localhost:9091/test 发现500了,是环境变量未读取成功
            • 3.第一次配置需要重启电脑后再次访问
            • 4.查看阿里云,上传成功了!
          • 8.注意事项
        • 6.使用SpringCloudAlibabaOSS上传文件到Bucket
          • 1.进入官网
          • 2.选择OSS的demo
          • 3.引入依赖(跟官网不一样)
          • 4.application.yml 配置信息
          • 5.编写代码
          • 6.测试
            • 1.浏览器访问 http://localhost:9091/test2
            • 2.上传成功
        • 7.服务端签名后直传(正片开始)
          • 1.官方文档
          • 2.创建sunliving-service模块
            • 1.创建maven模块
            • 2.查看父子pom.xml
          • 3.参考sunliving-commodity来配置pom.xml
          • 4.配置application.yml 填写对象存储所需信息
          • 5.编写启动类com/sun/sunliving/service/OssServiceApplication.java 启动测试
          • 6.目前文件目录
          • 7.参考官方文档编写 com/sun/sunliving/service/controller/OssServiceController.java
            • 1.官方文档
            • 2.OssServiceController 签名直传服务,返回一个签名
            • 3.测试
        • 8.通过前端上传图片到OSS
          • 1.将上传文件工具类放到 src/components下
          • 2.policy.js 向签名直传服务发送请求,获取签名(部署的时候注意修改)
          • 3.singleUpload.vue 就是一个上传文件的组件,修改action
          • 4.启动前后端项目测试
          • 5.src/views/modules/commodity/brand-add-or-update.vue 整合上传文件的控件
            • 1.引入导出上传文件的控件
            • 2.使用控件
            • 3.查看效果
            • 4.上传出现跨域问题
          • 6.上传文件跨域解决
            • 1.上传文件之前**通过浏览器**向后端发送请求,获取签名
            • 2.从renren-fast模块找到io/renren/config/CorsConfig.java的配置文件,放到后端项目即可解决第一个跨域
            • 3.重启后端,再次测试,还是有跨域问题
            • 4.第二个跨域问题分析
            • 5.在阿里云OSS解决跨域
            • 6.再次测试,成功!
          • 7.使用前端工具类进行文件上传步骤梳理
            • 1.保证后端传递的签名json对象使用data命名
            • 2.修改 policy.js 的url为后端返回签名的接口
            • 3.修改 el-upload 标签的action为 http:// + bucket + endpoint
            • 4.两个跨域问题
        • 9.品牌管理列表显示logo图片
          • 1.目前插入数据,显示的是url
            • 1.示意图
            • 2.通过访问这个url可以下载图片
          • 2.使用插槽机制显示图片
          • 3.结果展示

1.菜单分级显示问题

1.问题引出
1.苹果灯,放到节能灯下面也就是id大于127

image-20240413125405130

2.查看菜单,并没有出现苹果灯

image-20240413125613174

3.放到灯具下面id=42,就可以显示

image-20240413125847868

2.问题分析和解决
1.判断可能出现问题的位置

由于前端是直接调用了树形控件,展示了一下数据,所以应该是后端返回的数据的问题,则出现问题的位置应该是递归返回树形菜单数据的时候

2.找到递归返回树形菜单数据的位置

image-20240413131218590

3.这里出现问题的原因是,使用等号来比较了包装类的数值,修改为equals即可

image-20240413131434396

4.关于Long类型的机制
1.编写测试用例
package io.renren;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/4/13 13:16
 * @Version 1.0
 */
public class T1 {
    public static void main(String[] args) {
        Long num1 = 128l;
        Long num2 = 128l;
        System.out.println(num2 == num1);
    }
}

2.结果

image-20240413131802993

3.debug 分析
  • 如果包装类的值在-128 到 127之间,直接返回int类型,但是如果不在这个范围内就会返回一个Long类型
  • 此时使用等号比较的就是两个引用的地址了,由于都是new的,所以肯定不同

image-20240413131853332

5.测试
1.此时将苹果灯的id设置成652

image-20240413132446091

2.成功显示

image-20240413132513908

2.文件存储解决方案

1.文件存储方案分析

image-20240413134000624

2.OSS在微服务架构位置

image-20240413134458528

3.上传方式
1.普通上传方式

image-20240413135958474

2.服务端签名后直传

image-20240413140253228

4.创建Bucket
1.进入对象存储控制台

https://oss.console.aliyun.com/overview

image-20240413141743449

2.创建Bucket

image-20240413142031291

3.填写配置信息

image-20240413142619872

4.查看Bucket
1.文件列表查看文件

image-20240413142836396

2.如果想要访问文件就使用url

image-20240413142929341

5.使用原生SDK上传文件到Bucket
1.找到OSS的SDK参考文档

https://help.aliyun.com/zh/oss/developer-reference/java/?spm=a2c4g.11186623.0.0.35d25b0fLIE7J7

image-20240413143638506

2.sunliving-commodity 导入依赖这里选择3.5.0版本
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.5.0</version>
        </dependency>

image-20240413143926785

3.编写一个TestConroller
package com.sun.sunliving.commodity.controller;

import com.sun.common.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/4/13 14:40
 * @Version 1.0
 */
@RestController
@Slf4j
public class TestConroller {
    // 测试 aliyun-sdk-oss的使用
    // 编写方法上传文件到bucket

    @RequestMapping("/test")
    public R test() {

        return null;
    }
}

4.找到上传文件代码并粘贴到TestConroller,然后引包,抛出异常

image-20240413151722312

image-20240413144750030

5.回到控制台找到指定信息
1.Endpoint

image-20240413145600239

2.找到AccessKey管理

image-20240413145733962

3.选择开始使用子用户的AccessKey

image-20240413145857890

4.创建用户

image-20240413150031036

5.填写信息

image-20240413150134355

6.验证一下

image-20240413150154620

7.复制一份并保留,AccessKey Secret 以后不会再出现

image-20240413150408127

8.选择授权 -> 新增授权

image-20240413150757775

9.为刚才的子用户授予权限

image-20240413151022624

10.查看子用户信息

https://ram.console.aliyun.com/permissions

image-20240413151135565

6.将上一步找到的三个信息填到代码中并指定其余信息
1.Endpoint(前面需要加https://)
https://oss-cn-beijing.aliyuncs.com

image-20240413152448342

2.设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET

image-20240413152118752

echo %OSS_ACCESS_KEY_ID%
echo %OSS_ACCESS_KEY_SECRET%
可以查看win环境变量是否生效
3.bucketName

image-20240413152342933

image-20240413152507887

4.填写两个文件路径

image-20240413153002835

7.测试
1.启动 sunliving-commodity 模块

image-20240413153149593

2.浏览器访问 http://localhost:9091/test 发现500了,是环境变量未读取成功

image-20240413153628294

image-20240413153647357

3.第一次配置需要重启电脑后再次访问

image-20240413155656859

4.查看阿里云,上传成功了!

image-20240413155800339

8.注意事项

文件名可能会重复,可以根据时间来生成目录和文件名,之前写过

6.使用SpringCloudAlibabaOSS上传文件到Bucket
1.进入官网

https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/README-zh.md

2.选择OSS的demo

image-20240413160504696

image-20240413160604366

3.引入依赖(跟官网不一样)
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
4.application.yml 配置信息

image-20240413161438839

5.编写代码
@RestController
@Slf4j
public class TestConroller {


    // 第二个测试
    @Resource
    private OSS ossClient;

    @RequestMapping("/test2")
    public R test2() {
        // 上传文件
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "sunliving";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "testdir/test2.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        String filePath= "C:\\Users\\86156\\Desktop\\images\\3.25.png";

        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
        ossClient.putObject(putObjectRequest);
        ossClient.shutdown();

        return R.ok();
    }
}
6.测试
1.浏览器访问 http://localhost:9091/test2

image-20240413162251054

2.上传成功

image-20240413162306041

7.服务端签名后直传(正片开始)
1.官方文档

https://help.aliyun.com/zh/oss/use-cases/obtain-signature-information-from-the-server-and-upload-data-to-oss?spm=a2c4g.11186623.0.0.518d5d03pHGK3i

https://help.aliyun.com/zh/oss/use-cases/java-1?spm=a2c4g.11186623.0.0.c14f5d03xW8RIq

image-20240413162845855

image-20240414102059697

2.创建sunliving-service模块
1.创建maven模块

image-20240413163820934

2.查看父子pom.xml

image-20240413163900598

image-20240413163925710

3.参考sunliving-commodity来配置pom.xml
    <!-- 添加描述信息 -->
    <description>sun(家居生活)-OSS服务</description>

    <!-- 导入SpringBoot父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- 当parent的groupId没有指向父工程时就需要加 -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <!-- SpringCloud版本 2020.0.5-->
        <spring-cloud.version>2020.0.5</spring-cloud.version>
        <!-- 解决java: -source 1.5 中不支持 diamond 运算符 问题 -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 阿里云对象存储依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!-- SpringBoot web模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- SpringBoot test模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块 -->
        <dependency>
            <groupId>com.sun.sunliving</groupId>
            <artifactId>sunliving-common</artifactId>
            <version>1.0-SNAPSHOT</version>
            <!-- 排除mybatis-plus-boot-starter, 因为不使用,就不会配置application.yml的mybatis-plus的部分,不排除会报错 -->
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <!-- maven打包常规配置 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
4.配置application.yml 填写对象存储所需信息
server:
  port: 7070
spring:
  cloud:
    alicloud:
      oss:
        endpoint: oss-cn-beijing.aliyuncs.com
        bucket: sunliving
      access-key: *******
      secret-key: *******

5.编写启动类com/sun/sunliving/service/OssServiceApplication.java 启动测试
package com.sun.sunliving.service;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/4/14 10:40
 * @Version 1.0
 */
@SpringBootApplication
public class OssServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OssServiceApplication.class, args);
    }
}

image-20240414104340796

6.目前文件目录

image-20240414104456226

7.参考官方文档编写 com/sun/sunliving/service/controller/OssServiceController.java
1.官方文档

image-20240414104754482

2.OssServiceController 签名直传服务,返回一个签名
package com.sun.sunliving.service.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.MatchMode;
import com.aliyun.oss.model.PolicyConditions;
import com.sun.common.utils.R;
import org.codehaus.jettison.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Description: 签名直传服务
 *
 * @Author sun
 * @Create 2024/4/14 10:45
 * @Version 1.0
 */
@RestController
public class OssServiceController {
    // 注入OSS对象
    @Resource
    private OSS ossClient;

    // 从配置文件中获取accessId
    @Value("${spring.cloud.alicloud.access-key}")
    private String accessId;

    // 从配置文件中获取endpoint
    @Value("${spring.cloud.alicloud.oss.endpoint}")
    private String endpoint;

    // 从配置文件中获取bucket
    @Value("${spring.cloud.alicloud.oss.bucket}")
    private String bucket;


    @RequestMapping("/oss/policy")
    public R policy() {
        try {
            // host的格式为 http:// + bucket + . + endpoint
            String host = "https://" + bucket + "." + endpoint;
            // 根据当前日期来存放文件
            String dir = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "/";

            long expireTime = 30; // 默认30秒过期
            long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
            Date expiration = new Date(expireEndTime);
            // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

            String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes("utf-8");
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            String postSignature = ossClient.calculatePostSignature(postPolicy);

            // 返回的信息
            Map<String, String> respMap = new LinkedHashMap<String, String>();
            respMap.put("accessid", accessId);
            respMap.put("policy", encodedPolicy);
            respMap.put("signature", postSignature); // 签名
            respMap.put("dir", dir);
            respMap.put("host", host);
            respMap.put("expire", String.valueOf(expireEndTime / 1000));

            JSONObject jasonCallback = new JSONObject();
            // jasonCallback.put("callbackUrl", callbackUrl);
            jasonCallback.put("callbackBody",
                    "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
            jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
            String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
            respMap.put("callback", base64CallbackBody);

            return R.ok().put("data", respMap);

        } catch (Exception e) {
            System.out.println(e.getMessage());
            return R.error();
        } finally {
            ossClient.shutdown();
        }
    }
}

3.测试

image-20240414112556827

8.通过前端上传图片到OSS
1.将上传文件工具类放到 src/components下

image-20240414113130659

2.policy.js 向签名直传服务发送请求,获取签名(部署的时候注意修改)

image-20240414113456945

3.singleUpload.vue 就是一个上传文件的组件,修改action

image-20240414113958137

4.启动前后端项目测试

image-20240414114456217

5.src/views/modules/commodity/brand-add-or-update.vue 整合上传文件的控件
1.引入导出上传文件的控件

image-20240414115513519

2.使用控件

image-20240414115839061

3.查看效果

image-20240414115859829

4.上传出现跨域问题

image-20240414120134558

6.上传文件跨域解决
1.上传文件之前通过浏览器向后端发送请求,获取签名
  • 首先调用beforeUpload方法

  • 然后调用policy方法,就是policy.js的方法

image-20240414133848724

  • policy.js的方法通过浏览器向后端发送请求获取签名,此时出现跨域

image-20240414134148637

2.从renren-fast模块找到io/renren/config/CorsConfig.java的配置文件,放到后端项目即可解决第一个跨域

image-20240414121549866

3.重启后端,再次测试,还是有跨域问题

image-20240414130555641

4.第二个跨域问题分析

从浏览器报错中可以看到这次是向oos发送请求,进行保存文件的,也是满足跨域条件

5.在阿里云OSS解决跨域

网址:https://oss.console.aliyun.com/bucket/oss-cn-beijing/sunliving/data-security/cors

image-20240414135739013

image-20240414135907502

6.再次测试,成功!

image-20240414135948647

image-20240414140246723

7.使用前端工具类进行文件上传步骤梳理
1.保证后端传递的签名json对象使用data命名

image-20240414141202639

2.修改 policy.js 的url为后端返回签名的接口

image-20240414141430133

3.修改 el-upload 标签的action为 http:// + bucket + endpoint

image-20240414141613112

4.两个跨域问题
  1. 前端向后端签名接口发送请求
  2. 前端向OSS发送请求存储图片
9.品牌管理列表显示logo图片
1.目前插入数据,显示的是url
1.示意图

image-20240414142356141

2.通过访问这个url可以下载图片

image-20240414142457068

2.使用插槽机制显示图片
        <!-- 使用插槽机制来显示图片 -->
        <template slot-scope="scope">
          <img
            :src="scope.row.logo"
            style="width: 80px;"
          >
        </template>

image-20240414144846826

3.结果展示

image-20240414144903146

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

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

相关文章

什么是最大路径?什么是极大路径?

最近学习中&#xff0c;在这两个概念上出现了混淆&#xff0c;导致了一些误解&#xff0c;在此厘清。 最大路径 在一个简单图G中&#xff0c;u、v之间的距离 d ( u , v ) min ⁡ { u 到 v 的最短路的长度 } d(u,v) \min \{ u到v的最短路的长度 \} d(u,v)min{u到v的最短路的…

音乐的力量

常听音乐的好处可以让人消除工作紧张、减轻生活压力、避免各类慢性疾病等等&#xff0c;其实这些都是有医学根据的。‍ 在医学研究中发现&#xff0c;经常的接触音乐节 奏、旋律会对人体的脑波、心跳、肠胃蠕动、神经感应等等&#xff0c;产生某些作用&#xff0c;进而促进身心…

Postman基础功能-接口返回值获取

大家好&#xff0c;之前给大家分享关于Postman的接口关联&#xff0c;我们平时在做接口测试时&#xff0c;请求接口返回的数据都是很复杂的 JSON 数据&#xff0c;有着多层嵌套&#xff0c;这样的数据层级在 Postman 中要怎么获取呢&#xff1f; 接下来给大家展示几个获取 JSO…

容联云零代码平台容犀desk:重新定义坐席工作台

在数智化浪潮的推动下&#xff0c;企业亟待灵活适应市场变化、快速响应客户需求&#xff0c;同时还要控制成本并提升效率&#xff0c;传统的软件开发模式因开发周期长、成本高、更新迭代慢等问题&#xff0c;逐渐难以满足企业灵活多变的业务需求。 容犀Desk&#xff0c;观察到…

(1)双指针算法介绍与练习:移动零

目录 双指针算法介绍 练习&#xff1a;移动零 双指针算法介绍 双指针算法常见于数组和双向链表的题型 在数组中&#xff0c;双指针中的指针代表数组元素的下标&#xff0c;而不是真正的指针类型变量 在双向链表中&#xff0c;双指针中的指针即为真正意义上的指针&#xff…

Windows安装Django

1、下载Python程序包 Python程序包官网下载地址Download Python | Python.org,若下载最新版本&#xff0c;有最新版本则下载"Windows installer (64-bit)" 若是下载其他版本,可在下图位置找到相应的版本,然后点击Download.如下图所示&#xff1a; 打开后查看注意事项…

开源连锁收银系统哪个好

针对开源连锁收银系统的选择&#xff0c;商淘云是一个备受关注的候选。商淘云以其功能丰富、易于定制和稳定性等优势&#xff0c;吸引了众多企业和开发者的关注。下面将从四个方面探讨商淘云开源连锁收银系统的优势&#xff1a; 首先&#xff0c;商淘云提供了丰富的功能模块。作…

Retrying,一个神奇优雅的 Python 库

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 一个简单的库&#xff0c;也许能够开启我们的智慧之门&#xff0c; 一个普通的方法&#xff0c;也许能在危急时刻挽救我们于水深火热&#xff0c; 一个新颖的思维方式&#xff0c;也许能…

Docker安装Mosquitto

在物联网项目中&#xff0c;我们经常用到MQTT协议&#xff0c;用MQTT协议做交互就需要部署一个MQTT服务&#xff0c;而mosquitto是一个常用的MQTT应用服务&#xff0c; Mosquitto是一个实现了消息推送协议MQTT v3.1的开源消息代理软件。MQTT&#xff08;Message Queuing Teleme…

AI大模型日报#0515:Google I/O大会、 Ilya官宣离职、腾讯混元文生图大模型开源

导读&#xff1a;欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-34B&#xff09;生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点&#xff1a;谷歌…

Java 自然排序和比较器排序区别?Comparable接口和Comparator比较器区别?

注&#xff1a;如果你对排序不理解&#xff0c;请您耐心看完&#xff0c;你一定会明白的。文章通俗易懂。建议用idea运行一下案例。 1&#xff09;自然排序和比较器排序的区别&#xff1f; 自然排序是对象本身定义的排序规则&#xff0c;由对象实现 Comparable 接口&#xff…

什么?你设计接口什么都不考虑?

如果让你设计一个接口&#xff0c;你会考虑哪些问题&#xff1f; 1.接口参数校验 接口的入参和返回值都需要进行校验。 入参是否不能为空&#xff0c;入参的长度限制是多少&#xff0c;入参的格式限制&#xff0c;如邮箱格式限制 返回值是否为空&#xff0c;如果为空的时候是…

代码随想录算法训练营第二十九天 | 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接/文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 解题思路 这里和组合不同的是元素可以重复选取…

2024 Google I/O大会:全方位解读最新AI技术和产品

引言&#xff1a; 2024年的Google I/O大会如期举行&#xff0c;作为技术圈的年度盛事之一&#xff0c;谷歌展示了其在人工智能领域的最新进展。本次大会尤其引人注目&#xff0c;因为它紧随着OpenAI昨天发布GPT-4o的脚步。让我们详细解析Google此次公布的各项新技术和产品&…

【C语言】6.C语言VS实用调试技巧(1)

文章目录 1.什么是 bug2.什么是调试&#xff08;debug&#xff09;&#xff1f;3.Debug 和 Release4.VS调试快捷键4.1 环境准备4.2 调试快捷键 5.监视和内存观察5.1 监视5.2 内存 1.什么是 bug bug现在一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题…

计算机系列之排序算法

20、排序算法 1、直接插入排序&#xff08;这里以从小到大排序为例&#xff09; ◆要注意的是&#xff0c;前提条件是前i-1个元素是有序的&#xff0c;第i个元素依次从第i-1个元素往前比较&#xff0c;直到找到一个比第i个元素值小的元素&#xff0c;而后插入&#xff0c;插入…

战网国际服怎么下载 暴雪战网一键下载安装图文教程

战网国际版&#xff0c;或称为Battle.net全球版&#xff0c;是暴雪娱乐构建的一项跨越国界的综合游戏交流平台&#xff0c;它无视地理限制&#xff0c;旨在服务全球每一个角落的游戏爱好者。不同于地区专属版本&#xff0c;国际版为玩家开启了一扇无门槛的大门&#xff0c;让每…

使用virtualbox和vagrant搭建centos环境报错问题解决

启动提示下面的异常&#xff1a; Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period.If you look above, you sh…

多区域OSPF路由配置

一、基础配置 1.搭建实验拓扑图 2.实验编址 具体如何配置可以看这一篇详细的博文&#xff1a;单区域OSPF实验-CSDN博客 3.分别检查六个路由器的配置&#xff1a; 使用命令display ip interface brief R1的配置 其他大家可以调出来&#xff0c;再与实验拓扑图进行比对&#…

广告小白必看|谷歌Google Ads被封禁原因是什么,如何防范?

跨境出海业务少不了需要做Google Ads推广业务&#xff1b;其中让投手们闻风丧胆的消息就是帐户被暂停。当 Google 检测到任何违反其政策且可能损害用户在线体验的行为时&#xff0c;就会发生这种情况。那么如何在做广告推广的同时&#xff0c;保证账号不被封禁呢&#xff1f;看…