探索腾讯云AI代码助手:智能编程的新时代

news2024/12/23 4:01:34

在这里插入图片描述

智能编程的新时代

  • 前言
  • 开发环境介绍
  • 腾讯云 AI 代码助手使用实例
    • 生成文档
    • 解释代码
    • 生成测试
    • 修复代码
    • 人工智能技术对话
  • 智能编程获得的帮助与提升
  • 对腾讯云AI代码助手的建议
  • 结语

前言

在这里插入图片描述
  hello,大家好我是恒川,今天我来给大家安利一款非常好用的AI 代码助手,它是由腾讯云自研的一款开发编程提效辅助工具,开发者可以通过插件的方式将 AI 代码助手安装到编辑器中辅助编程工作(VS Code 或者 JetBrians 系列 IDE);而 AI 代码助手插件将提供:自动补全代码、根据注释生成代码、代码解释、生成测试代码、转换代码语言、技术对话等能力。通过腾讯云 AI 代码助手,开发者可以更高效地解决实际编程问题,提高编程效率和代码质量。

开发环境介绍

  进入腾讯云AI代码助手官网,点击免费使用。
在这里插入图片描述
  此时会弹出来两款插件供大家选择。在这里插入图片描述
  首先是Visual Studio Code,从 Visual Studio Code 插件市场直接安装 腾讯云 AI 代码助手插件,安装后重启IDE,即可开始智能编码之旅。
在这里插入图片描述

  然后就是JetBrains IDEs,打开 JetBrains IDEs 浏览器插件市场,选择对应的插件版本进行下载安装,安装成功重启后即可开启智能编码之旅。
在这里插入图片描述
  还有一个在线体验,在不下载任何插件的情况下,就可以轻松体验。
在这里插入图片描述
在这里插入图片描述

腾讯云 AI 代码助手使用实例

  就比如我要设计一个算法来实现二叉树的序列化与反序列化。这里不限定序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构,来看看 AI 代码助手能帮助我做些什么。

下面开始代码展示(我以Java为例):

public class Codec {
    public String serialize(TreeNode root) {
        return rserialize(root, "");
    }
  
    public TreeNode deserialize(String data) {
        String[] dataArray = data.split(",");
        List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
        return rdeserialize(dataList);
    }

    public String rserialize(TreeNode root, String str) {
        if (root == null) {
            str += "None,";
        } else {
            str += str.valueOf(root.val) + ",";
            str = rserialize(root.left, str);
            str = rserialize(root.right, str);
        }
        return str;
    }
  
    public TreeNode rdeserialize(List<String> dataList) {
        if (dataList.get(0).equals("None")) {
            dataList.remove(0);
            return null;
        }
  
        TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0)));
        dataList.remove(0);
        root.left = rdeserialize(dataList);
        root.right = rdeserialize(dataList);
    
        return root;
    }
}

在这里插入图片描述
  从图片上可以看到,界面展示了四种功能,让我们去看看AI代码助手会带来怎样的精彩效果。

生成文档

在这里插入图片描述

// 定义一个名为Codec的类,用于实现二叉树的序列化和反序列化
public class Codec {
    // 序列化方法,将二叉树转换为字符串形式
    public String serialize(TreeNode root) {
        // 调用递归序列化方法,并传入根节点和空字符串作为起始参数
        return rserialize(root, "");
    }
  
    // 反序列化方法,将字符串形式的二叉树转换回二叉树结构
    public TreeNode deserialize(String data) {
        // 将输入的字符串按逗号分割成字符串数组
        String[] dataArray = data.split(",");
        // 将字符串数组转换为链表,便于操作
        List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
        // 调用递归反序列化方法,并传入链表作为参数
        return rdeserialize(dataList);
    }

    // 递归序列化方法,用于将二叉树转换为字符串形式
    public String rserialize(TreeNode root, String str) {
        // 如果当前节点为空,则在字符串后添加"None,"表示空节点
        if (root == null) {
            str += "None,";
        } else {
            // 否则,将当前节点的值转换为字符串并添加到str中,然后递归序列化左右子树
            str += str.valueOf(root.val) + ",";
            str = rserialize(root.left, str);
            str = rserialize(root.right, str);
        }
        // 返回序列化后的字符串
        return str;
    }
  
    // 递归反序列化方法,用于将字符串形式的二叉树转换回二叉树结构
    public TreeNode rdeserialize(List<String> dataList) {
        // 如果链表的第一个元素为"None",表示当前节点为空,移除该元素并返回null
        if (dataList.get(0).equals("None")) {
            dataList.remove(0);
            return null;
        }
  
        // 否则,创建一个新的TreeNode对象,其值为链表的第一个元素,然后移除该元素
        TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0)));
        dataList.remove(0);
        // 递归反序列化左右子树,并将结果分别赋给当前节点的左右子节点
        root.left = rdeserialize(dataList);
        root.right = rdeserialize(dataList);
    
        // 返回反序列化后的二叉树根节点
        return root;
    }
}

  我们可以看出腾讯云AI代码助手文档总结的非常详细,它将每段代码都进行了说明,在日常的开发中,它绝对是我工作的好伙伴。

解释代码

在这里插入图片描述

上述代码是一个用于序列化和反序列化二叉树的Java类,名为`Codec`。这个类提供了两个主要方法:`serialize`和`deserialize`,分别用于将二叉树转换成字符串和将字符串转换回二叉树。

`serialize`方法接收一个二叉树的根节点`root`作为参数,并调用辅助方法`rserialize`来递归地将树转换成字符串。如果遇到空节点,它会在字符串中添加"None,"来表示空节点。否则,它会添加当前节点的值和逗号,然后继续序列化左子树和右子树。

`deserialize`方法接收一个字符串`data`,首先将这个字符串按逗号分割成字符串数组,然后将数组转换为`LinkedList`,以便可以方便地从列表中移除元素。接着调用辅助方法`rdeserialize`来递归地构建二叉树。如果列表中的第一个元素是"None",则移除该元素并返回`null`作为当前节点。否则,创建一个新的`TreeNode`,其值为列表中的第一个元素,然后移除该元素,并递归地构建左子树和右子树。

这个序列化和反序列化的过程是可逆的,意味着序列化后再反序列化可以得到原始的二叉树结构。这种机制对于数据的存储和传输非常有用,尤其是在网络通信中,可以将二叉树的状态以字符串的形式发送,然后在另一端重新构建二叉树。

  这个AI代码助手居然解释的这么清晰,这使我很震惊,让我不禁回想起之前理解代码所浪费的时间了,当我们需要处理别人的代码或者在既有代码中进行延展开发时,可以通过 AI 代码助手快速理解和解释初始代码,降低理解成本,提高工作效率。真希望早点出现这么强大的工具!

生成测试

  为了编写单元测试,我们可以使用JUnit框架。首先,需要确保项目中已经包含了JUnit依赖。然后,在/workspace/Playground/2 - java目录下创建一个名为CodecTest.java的文件,用于编写测试用例。以下是测试类的伪代码:

导入必要的包和类
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CodecTest {
    // 创建Codec实例
    private final Codec codec = new Codec();

    // 测试序列化和反序列化空树
    @Test
    void testEmptyTree() {
        TreeNode root = null;
        String serialized = codec.serialize(root);
        assertEquals("None,", serialized);
        TreeNode deserialized = codec.deserialize(serialized);
        assertNull(deserialized);
    }

    // 测试序列化和反序列化单节点树
    @Test
    void testSingleNodeTree() {
        TreeNode root = new TreeNode(1);
        String serialized = codec.serialize(root);
        assertEquals("1,", serialized);
        TreeNode deserialized = codec.deserialize(serialized);
        assertEquals(1, deserialized.val);
        assertNull(deserialized.left);
        assertNull(deserialized.right);
    }

    // 测试序列化和反序列化完全二叉树
    @Test
    void testCompleteBinaryTree() {
        // 构建一个完全二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);
        root.right.left = new TreeNode(6);
        root.right.right = new TreeNode(7);

        // 序列化并反序列化,然后验证结果
        String serialized = codec.serialize(root);
        TreeNode deserialized = codec.deserialize(serialized);
        assertEquals(root.val, deserialized.val);
        assertEquals(root.left.val, deserialized.left.val);
        assertEquals(root.right.val, deserialized.right.val);
        // ...继续验证所有节点的值
    }

    // 测试序列化和反序列化不平衡二叉树
    @Test
    void testUnbalancedBinaryTree() {
        // 构建一个不平衡二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);
        // 不添加右子树的右节点

        // 序列化并反序列化,然后验证结果
        String serialized = codec.serialize(root);
        TreeNode deserialized = codec.deserialize(serialized);
        assertEquals(root.val, deserialized.val);
        assertEquals(root.left.val, deserialized.left.val);
        assertEquals(root.right.val, deserialized.right.val);
        // ...继续验证所有节点的值
    }
}

将上述伪代码转换为实际的Java代码:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CodecTest {
    private final Codec codec = new Codec();

    @Test
    void testEmptyTree() {
        TreeNode root = null;
        String serialized = codec.serialize(root);
        assertEquals("None,", serialized);
        TreeNode deserialized = codec.deserialize(serialized);
        assertNull(deserialized);
    }

    @Test
    void testSingleNodeTree() {
        TreeNode root = new TreeNode(1);
        String serialized = codec.serialize(root);
        assertEquals("1,", serialized);
        TreeNode deserialized = codec.deserialize(serialized);
        assertEquals(1, deserialized.val);
        assertNull(deserialized.left);
        assertNull(deserialized.right);
    }

    @Test
    void testCompleteBinaryTree() {
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);
        root.right.left = new TreeNode(6);
        root.right.right = new TreeNode(7);

        String serialized = codec.serialize(root);
        TreeNode deserialized = codec.deserialize(serialized);
        assertEquals(root.val, deserialized.val);
        assertEquals(root.left.val, deserialized.left.val);
        assertEquals(root.right.val, deserialized.right.val);
        // ...继续验证所有节点的值
    }

    @Test
    void testUnbalancedBinaryTree() {
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);

        String serialized = codec.serialize(root);
        TreeNode deserialized = codec.deserialize(serialized);
        assertEquals(root.val, deserialized.val);
        assertEquals(root.left.val, deserialized.left.val);
        assertEquals(root.right.val, deserialized.right.val);
        // ...继续验证所有节点的值
    }
}

  从官方上查了一下AI 代码助手这个功能,它会根据函数、方法、内容逻辑生成相关的测试代码,并根据开发者的代码习惯,自动推荐单元测试的编写,提高单元测试的覆盖率,设计的真的很牛。

修复代码

  “在您的代码中,rserialize 方法在序列化树节点时,对于非空节点的值,您尝试使用 str.valueOf(root.val) 来转换节点值为字符串。这里应该直接使用 String.valueOf(root.val)Integer.toString(root.val)。以下是修复后的代码:”

public class Codec {
    public String serialize(TreeNode root) {
        return rserialize(root, "");
    }
  
    public TreeNode deserialize(String data) {
        String[] dataArray = data.split(",");
        List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
        return rdeserialize(dataList);
    }

    public String rserialize(TreeNode root, String str) {
        if (root == null) {
            str += "None,";
        } else {
            str += String.valueOf(root.val) + ","; // 修复点:使用 String.valueOf 来转换节点值为字符串
            str = rserialize(root.left, str);
            str = rserialize(root.right, str);
        }
        return str;
    }
  
    public TreeNode rdeserialize(List<String> dataList) {
        if (dataList.get(0).equals("None")) {
            dataList.remove(0);
            return null;
        }
  
        TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0)));
        dataList.remove(0);
        root.left = rdeserialize(dataList);
        root.right = rdeserialize(dataList);
    
        return root;
    }
}

请确保您的 TreeNode 类已经正确定义,且包含 valleftright 属性。

  这个功能真的很用心,为我们在日常的开发中,减少了许多失误,AI代码助手细节问题优化的真好,就比如这块:
在这里插入图片描述

人工智能技术对话

  对于人工智能这个话题,人们早已耳熟能详了,AI 代码助手将 chat 功能与 IDE 进行了集成打通;开发者可以随时随地,以各种方式向 AI 代码助手进行技术对话咨询,所获取的代码内容可以一键插入编辑器当中。让我来试试他的能力如何?
我想基于 Spring Boot 实现一个框架。

在这里插入图片描述

再来看看它所写的代码。
在这里插入图片描述

// Spring Boot 项目的基础结构示例

// 1. 创建Spring Boot项目
// 使用Spring Initializr生成项目,选择需要的依赖项,例如Spring Web, Spring Data JPA, Spring Security等

// 2. 创建实体类(例如 User.java)
public class User {
    private Long id;
    private String name;
    // ...其他属性和getter/setter方法
}

// 3. 创建仓库接口(例如 UserRepository.java),继承JpaRepository
public interface UserRepository extends JpaRepository<User, Long> {
    // 可以根据需要添加自定义查询方法
}

// 4. 创建服务类(例如 UserService.java)
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    
    // ...其他业务逻辑方法
}

// 5. 创建控制器类(例如 UserController.java)
@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
    
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = userService.saveUser(user);
        return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
    }
    
    // ...其他HTTP请求处理方法
}

// 6. 配置Spring Boot应用程序(例如 Application.java 或在主类中使用@SpringBootApplication注解)
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

// 7. 编写单元测试(例如 UserServiceTest.java)
@RunWith(SpringRunner.class)
public class UserServiceTest {
    @Autowired
    private UserService userService;
    
    @MockBean
    private UserRepository userRepository;
    
    @Test
    public void testSaveUser() {
        User user = new User();
        user.setName("Test User");
        
        when(userRepository.save(user)).thenReturn(user);
        
        User savedUser = userService.saveUser(user);
        
        assertEquals(user, savedUser);
    }
    
    // ...其他测试方法
}

  就这样,一个简单的框架就写好了,大大节省了开发者的编码时间,用着真的很舒服,五星推荐给大家。

  官网给出了不同环境下如何使用生成文档、解释代码、修复代码等功能的操作指南,大家不了解的可以去官方文档看看。
在这里插入图片描述

智能编程获得的帮助与提升

在这里插入图片描述

  腾讯云AI代码助手基于上下文理解和预测分析,提供准确的代码建议和自动补全功能,节省开发者编码时间,当开发者需要处理别人的代码,或者在既有代码中进行延展开发时,可以通过 AI 代码助手快速理解和解释初始代码,降低理解成本。
  它还能识别代码中潜在的错误和缺陷,并提供相关的修复建议,帮助开发者减少调试时间。分析代码性能瓶颈,并提供优化方案,以改进程序的运行效率和响应速度。

对腾讯云AI代码助手的建议

  虽然腾讯云AI代码助手已经支持了多种主流编程语言和框架,但随着技术的发展,持续扩展语言和框架的支持是非常重要的,其中包括新兴的语言、跨平台框架以及开源项目的支持,可以帮助更多开发者受益于该工具的智能化和效率提升。还有就是作为云端服务,腾讯云AI代码助手的性能和稳定性对于开发者来说至关重要。持续优化系统的响应速度、减少延迟,并确保高可用性和数据安全是关键。此外,确保平台在高负荷和大规模项目下的表现也是必要的。

结语

在这里插入图片描述

  通过这段时间对腾讯云AI代码助手的使用,我的体验效果是非常爽的。腾讯云AI代码助手代表了人工智能在软件开发领域的巨大进步,它不只是一种工具,更是开发者们的得力助手,能够加速编程过程,提高代码质量,并为创新提供无限可能。它的优势不仅在于其强大的技术支持,还在于其灵活的部署和集成能力,满足了日益复杂和多样化的开发需求。
  最后不得不提一嘴,每当我使用AI代码助手时,真的都会感慨一下,现如今科技水平发展的真快呀,曾经费尽周折的找一些框架,现在居然对着AI说一两句指令就能完事,不管是对于工作还是大学的功课作业都大大提升了效率,欢迎大家去腾讯云官方体验一下。

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

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

相关文章

JVM(面试用)

目录 一、JVM运行时数据区 二、JVM类加载 类加载过程 1、加载&#xff08;loading&#xff09; 2、验证&#xff08;Verification&#xff09; 3、准备&#xff08;Perparation&#xff09; 4、解析&#xff08;Resolution&#xff09; 5、初始化&#xff08;Initializ…

Linux 驱动开发究竟在开发什么?

文章目录 1 Linux 驱动开发架构图2 更具体的例子&#xff1a;LED 驱动程序2.1 硬件层&#xff08;Hardware Layer&#xff09;2.2 固件层&#xff08;Firmware Layer&#xff09;2.3 驱动程序层&#xff08;Driver Layer&#xff09;2.4 操作系统内核&#xff08;Kernel Layer&…

【全国大学生电子设计竞赛】2021年A题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

2024年睿抗机器人开发者大赛(RAICOM)国赛题解

目录 RC-u1 大家一起查作弊 分数 15 RC-u2 谁进线下了&#xff1f;II 分数 20 RC-u3 势均力敌 分数 25 RC-u4 City 不 City 分数 30 RC-u5 贪心消消乐 分数 30 RC-u1 大家一起查作弊 分数 15 简单模拟题&#xff0c;对于多行读入使用while(getline(cin…

切割 Nginx 日志

目录 方式一&#xff1a;自定义脚本 方式二&#xff1a;logrotate crontab 讲解 centos 容器安装 crontab centos 容器 systemctl 命令执行异常 切割理由&#xff1a;假设一个网站访问量特别大&#xff0c;每天 access_log 文件有 2 个 G&#xff0c;如果想从文件中查找…

基于QCustomPlot实现色条(ColorBar)

一、简介 通过QCustomPlot实现ColorBar&#xff0c;直观显示各个位置的异常情况。实现效果如下&#xff0c; 二、源码 CPColorBar.hpp // CPColorBar.hpp #pragma once #include "qcustomplot.h"#include <QHash>class QCP_LIB_DECL CPColorBarData { pub…

使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Brain Connectivity Networks Constructed Using MRI for Predicting Patterns of Atrophy Progression in Parkinson Disease 使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式 Background 背景 Whether connectome mapping of structural and across …

全志T527-TP9930-Camera

一、简介 1、TP9930 TP9930 驱动模块主要实现将 4 路的 Camera 的数据转换为 BT656/BT1120 数据&#xff0c;从而实现在 T527 端来对数据进行处理和送显。 2、BT656/BT1120简介 BT656主要是针对PAL/NTSC等标清视频。随着高清视频的发展需要&#xff0c;又推出了BT1120标准&…

AI + Coding:可以有多少种玩法?

在当今快速发展的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;和编程已经成为不可分割的两大领域。AI赋予了计算机更多的智能&#xff0c;使其能够处理复杂的数据、执行高级任务&#xff0c;而编程是实现这一切的基础。当AI与编程结合在一起时&#xff0c;会带来无…

图片懒加载与预加载(原生)

1、懒加载。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…

【开端】JAVA Mono<Void>向前端返回没有登陆或登录超时 暂无权限访问信息组装

一、绪论 JAVA接口返回信息ServerHttpResponse response 等登录接口token过期时需要给前端返回相关状态码和状态信息 二、Mono<Void>向前端返回没有登陆或登录超时 暂无权限访问信息组装 返回Mono对象 public abstract class Mono<T> implements CorePublisher…

2024最新Mysql事务原理与优化最佳实践

概述 我们的数据库一般都会并发执行多个事务&#xff0c;多个事务可能会并发的对相同的一批数据进行增删改查操作&#xff0c;可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题&#xff0c;为了解决多事务并发问题&…

在java中通过subString方法来截取字符串中的文本

1、subString&#xff08;&#xff09;常规用法可以通过下标来进行获取&#xff0c;在java中是从0开始&#xff0c;前包括后不包括。 String str “Hello Java World!”; 用法一: substring(int beginIndex) 返回从起始位置&#xff08;beginIndex&#xff09;至字符串末尾…

供应链库存管理面临什么问题?全面解析安全库存和周转库存!

在当今这个快速变化的商业世界中&#xff0c;供应链管理已成为企业获取竞争优势的核心领域。库存管理&#xff0c;作为供应链中的关键环节&#xff0c;直接关系到企业的成本控制、客户服务水平以及市场响应速度。然而&#xff0c;面对市场竞争的加剧和客户需求的多变&#xff0…

事务性邮件调用接口如何配置灵活调用策略?

事务性邮件调用接口性能怎么优化&#xff1f;如何使用接口调用&#xff1f; 如何配置灵活调用策略&#xff0c;不仅可以提升邮件发送的效率和可靠性&#xff0c;还能增强用户体验。AokSend将详细介绍事务性邮件调用接口的配置方法和策略&#xff0c;以便企业在实际应用中取得最…

深度学习读书笔记(1)--机器学习、人工智能、深度学习的关系

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 阅读的书籍主要为《UnderstandingDeepLearning》《动手学深度学习》 1956 年提出 AI 概念&#xff0c;短短3年后&…

【初阶数据结构题目】14.随机链表的复制

随机链表的复制 点击链接做题 思路&#xff1a; 浅拷贝&#xff1a;拷贝值 深拷贝&#xff1a;拷贝空间 在原链表的基础上继续复制链表置random指针复制链表和原链表断开 代码&#xff1a; /*** Definition for a Node.* struct Node {* int val;* struct Node *next…

【开发踩坑】windows查看jvm gc信息

windows查看jvm gc信息 EZ 找出java进程PID 控制面板----搜索任务管理器---- 任务管理器----搜索 java----详细信息 这里PID是4856 cmd jstat gc面板 reference&#xff1a; jstat命令

【Redis】缓存三大问题与缓存一致性问题

缓存三大问题 缓存穿透 缓存穿透是指用户查询的数据在缓存和数据库中都不存在&#xff0c;导致每次请求都会直接落到数据库上&#xff0c;增加数据库负载。 解决方案 1&#xff09;参数校验 一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库 id 不能小于…

【letcod-c++】128.最长连续序列

一、题目 二、分析 第一想法是像“242字母异位词”那样用哈希数组&#xff0c;但是这个数组元素的范围比较广&#xff0c;元素又比较分散&#xff0c;用数组太浪费空间&#xff0c;不合适。 于是考虑用哈希set(unordered_set),这个时候忽然想到前几天学习到set它能自动排序且自…