code论坛系统测试

news2024/11/26 2:34:07

目录

  • 一 项目介绍
      • **项目名称**
      • **项目介绍**
      • **项目功能**
      • **项目展示**
  • 二 测试用例设计和功能测试
    • 1.测试用例设计
      • **①登录页面**
      • **②注册页面**
      • **③首页**
      • **④发布帖子页面**
      • **⑤修改个人信息页面**
    • 2.功能测试环境
    • 3.实际执行功能测试的部分操作
      • **①登录页面**
      • **②注册页面**
      • **③首页**
      • **④发布帖子页面**
      • **⑤修改个人信息页面**
  • 三 接口测试
    • 1.Junit单元测试
      • **①用户接口**
      • **②帖子接口**
    • 2.Swagger API测试
      • **①用户接口**
      • **②帖子接口**
      • **③回复接口**
      • **④版块接口**
      • **⑤站内信接口**
  • 四 自动化测试
    • 1.使用selenium进行自动化测试准备工作
      • 1.引入依赖
      • 2.创建公共类
      • 3.创建测试套件类
    • 2.对登录页面进行自动化测试
      • **①打开登陆网页**
      • **②对登陆页面上的文字进行判断**
      • **③测试窗口伸缩**
      • **④错误的登录测试**
      • **⑤正确的登录测试**
      • **⑥运行结果**
    • 3.对注册页面进行自动化测试
      • **①打开注册页面**
      • **②对注册页面上的文字进行判断**
      • **④错误的注册测试**
      • **⑤正确的注册测试**


一 项目介绍


项目名称

项目名称: code论坛

项目介绍

项目介绍: code论坛是一个基于Spring的前后端分离的在线论坛系统。使用了MySQL数据库来存储相关信息,项目完成后使用Xshell将其部署到云服务器上。

前端页面: 前端共由八个页面构成:注册页面,登录页面,首页,编辑帖子页面,帖子列表页面,个人中心页面,修改个人信息页面,帖子详情页面。

项目总结: 该项目可以实现通过发布帖子分享技术,并通过别人发布的帖子学习知识来进行技术交流,所以也可称之为技术交流社区。

项目功能

code论坛主要实现了以下功能
用户注册,用户登录,编辑帖子,删除帖子,查看帖子,点赞帖子,站内信,编辑个人信息等功能。

项目展示

项目展示链接: code论坛
项目源码链接: code论坛源码


二 测试用例设计和功能测试


1.测试用例设计

测试用例会从界面测试,功能测试,性能测试,易用性测试,安全性测试,兼容性测试六个方面进行设计。

①登录页面

在这里插入图片描述

②注册页面

在这里插入图片描述

③首页

在这里插入图片描述

④发布帖子页面

在这里插入图片描述

⑤修改个人信息页面

在这里插入图片描述

2.功能测试环境

测试环境: win11
项目运行: CentOS,maven,JDK1.8
浏览器: FireFox浏览器,Chrome浏览器

3.实际执行功能测试的部分操作

①登录页面

页面展示
在这里插入图片描述

给定一个正确的账号密码:
用户名:小纸
密码:111

操作

输入用户名输入密码操作预期结果实际结果
点击登录提示用户名不能为空,密码不能为空提示用户名不能为空,密码不能为空
张三(错误的用户名)点击登录提示用户名或密码错误提示用户名或密码错误
小纸(正确的用户名)点击登录提示密码不能为空提示密码不能为空
小纸(正确的用户名)123(错误的密码)点击登录提示用户名或密码错误提示用户名或密码错误
小纸(正确的用户名)111(正确的密码)点击登录登录成功成功登录

②注册页面

页面展示
在这里插入图片描述

操作

输入用户名输入昵称输入密码输入确认密码勾选同意条款点击注册预期结果实际结果
不勾选点击注册提示都不能为空每个输入框下面都提示不能为空
张三不勾选点击注册提示除用户名外都不能为空其余三个输入框下面提示不能为空
张三张三111123勾选点击注册提示密码和确认密码不相同提示请检查确认密码
张三张三111111不勾选点击注册提示请勾选勾选框标红,点击注册按钮无结果
张三张三111111勾选点击注册注册成功注册成功,跳转到登录页面,弹出是否要保存密码框

③首页

页面展示

在这里插入图片描述

操作

操作预期结果实际结果
点击Java跳转至Java版块跳转至Java版块
点击发布帖子跳转至发布帖子页面跳转至发布帖子页面
点击“计算机秋招经验”跳转至帖子详情页跳转至帖子详情页
点击月亮标志切换为夜晚模式切换为夜晚模式

④发布帖子页面

页面展示
在这里插入图片描述

操作

输入标题输入内容操作预期结果实际结果
点击发布提示请输入帖子标题提示请输入帖子标题
测试标题点击发布提示请输入帖子内容提示请输入帖子内容
测试标题测试内容点击发布发布成功发布成功,跳转至首页

⑤修改个人信息页面

页面展示
在这里插入图片描述

操作

操作预期结果实际结果
点击修改头像,上传头像头像变为刚刚上传的图片图片无变化(上传图片功能还未实现)
输入邮箱地址,点击修改修改成功修改成功
输入电话号码,点击修改修改成功修改成功
输入错误原密码,点击提交修改提示密码校验失败提示密码校验失败
输入正确原密码,点击提交修改修改成功修改成功

三 接口测试


接口测试使用了:

  1. Junit单元测试
  2. Springfox Swagger 生成 API,完成 API 单元测试

1.Junit单元测试

单元测试类:

在这里插入图片描述

这里只列举用户接口和帖子接口的单元测试,其余的欢迎参考我的gitee链接:

code论坛

①用户接口

这里列举了注册,登录和修改个人信息的测试代码。

注册方法测试:

    @Test
    @Transactional
    void createNormalUser() {
        // 构造User对象
        User user = new User();
        user.setUsername("boy1");
        user.setNickname("boy");

        // 定义一个原始的密码
        String password = "123456";
        // 生成盐
        String salt = UUIDUtil.UUID_32();
        // 生成密码的密文
        String ciphertext = MD5Util.md5Salt(password, salt);
        // 设置加密后的密码
        user.setPassword(ciphertext);
        // 设置盐
        user.setSalt(salt);
        // 调用Service层的方法
        userService.createNormalUser(user);
        // 打印结果
        System.out.println(user);
    }

修改个人信息测试:

    @Test
    @Transactional
    void modifyInfo() {
        User user = new User();
        user.setId(3l); // 用户Id
        user.setUsername("testUser"); // 登录名
        user.setNickname("testUser1"); // 昵称
        user.setGender(null); // 性别
        user.setEmail("qqq@qq.com");// 邮箱
        user.setPhoneNum("15366668888"); // 电话
        user.setRemark("测试"); // 个人简介
        // 调用Service
        userService.modifyInfo(user);
    }

登录测试:

    @Test
    void login() {
        User user = userService.login("bitboy", "123456");
        System.out.println(user);
    }

②帖子接口

这里列举了发布帖子,查询所有帖子列表,删除帖子,点赞帖子的测试代码。

发布帖子测试:

    @Test
    @Transactional
    void create() {
        Article article = new Article();
        article.setUserId(2L); // boy
        article.setBoardId(1L); // java版块
        article.setTitle("单元测试");
        article.setContent("测试内容");
        articleService.create(article);
        System.out.println("发贴成功");
    }

查询所有帖子列表:

    @Test
    void selectAll() throws JsonProcessingException {
        // 调用Service
        List<Article> articles = articleService.selectAll();
        // 转换成JSON字符串并且打印
        System.out.println(objectMapper.writeValueAsString(articles));
    }

点赞帖子和删除帖子方法测试:

    @Test
    @Transactional
    void thumbsUpById() {
        articleService.thumbsUpById(1L);
        System.out.println("点赞成功");
    }

    @Test
    @Transactional
    void deleteById() {
        articleService.deleteById(11l);
        System.out.println("删除成功");
    }

2.Swagger API测试

测试链接:code论坛系统API

接口测试版块总览

在这里插入图片描述

回复接口:

在这里插入图片描述

帖子接口:

在这里插入图片描述

版块接口:

在这里插入图片描述

用户接口:

在这里插入图片描述

站内信接口:

在这里插入图片描述

⭐⭐⭐这里每个接口展示一个功能的测试过程。

①用户接口

功能:用户登录

账号:小纸
密码:111

过程:

在这里插入图片描述

结果:登录成功

在这里插入图片描述

②帖子接口

功能:获取用户列子列表

输入用户id:1

过程:

在这里插入图片描述

结果:获取成功,用户id为1的用户共发布一篇文章

在这里插入图片描述

③回复接口

功能:发布回复

输入发布回复的帖子id:19
输入回复内容:支持好文!!!

过程:

在这里插入图片描述

结果:回复成功

在这里插入图片描述

④版块接口

功能:获取首页版块列表

过程:直接点击Execute

在这里插入图片描述

结果:操作成功

在这里插入图片描述

⑤站内信接口

功能:发送站内信

输入接收用户id:2
输入内容:你好

过程:

在这里插入图片描述

结果:操作成功

在这里插入图片描述


四 自动化测试


1.使用selenium进行自动化测试准备工作

1.引入依赖

创建一个maven项目,在pop.xml中引入以下依赖

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.创建公共类

因为对每一个页面进行测试都需要创建浏览器驱动,所以我们可以把他提取出来并设置成静态的,就可以让创建和销毁驱动的操作只实现一次,其他类都继承这个类即可。

在这里插入图片描述

package org.example.common;

import org.openqa.selenium.chrome.ChromeDriver;

import java.time.Duration;
import java.util.concurrent.TimeUnit;

public class AutoTestUtils {

    private static ChromeDriver driver;

    public static ChromeDriver createDrive() {
        if (driver == null) {
            driver = new ChromeDriver();
            // 隐式等待, 渲染页面, 防止找不到页面元素
            driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
        }
        return driver;
    }
}

3.创建测试套件类

创建一个类,通过@Suite注解识别该类为测试套件类,使用@SelectClasses来注解声明我们要运行哪些类。

在这里插入图片描述

package org.example.tests;

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

/**
 * 测试套件类
 */
@Suite
@SelectClasses({loginTest.class, IndexTest.class})
public class RunSuite {
}

2.对登录页面进行自动化测试

①打开登陆网页

②对登陆页面上的文字进行判断

  1. 页面上的用户名,密码,登录按钮是否都正常显示
  2. 点击注册按钮能否正常跳转页面

③测试窗口伸缩

测试窗口缩小至指定大小,放大到最大

④错误的登录测试

  1. 用户名为空,提示用户名不能为空
  2. 密码为空,提示密码不能为空
  3. 用户名密码不匹配,提示用户名或密码错误

⑤正确的登录测试

输入正确的用户名与密码,登陆成功,跳转至首页,判断跳转的url是否正确,以及跳转页面上的文字是否显示正确

⑥运行结果

测试全部通过
在这里插入图片描述

⭐⭐⭐这里给出一个页面的详细代码,其他页面只展示步骤

package org.example.tests;

import org.example.common.AutotestUtil;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

/**
 * wangcong
 * 2023/8/21
 * 登陆页面测试
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class loginTest extends AutotestUtil {
    // 获取浏览器驱动
    public static ChromeDriver driver = createDrive();

    /**
     * 打开网页
     */
    @Test
    @BeforeAll
    static void init() {
        // 跳转到登录页面
        driver.get("http://47.109.128.149:6060/sign-in.html");
        // 隐式等待页面加载完成
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    }

    /**
     * 对登陆页面的一些文字显示进行判断
     */
    @Test
    @Order(1)
    void loginPageTest() {
        // 检查系统名称
        String expect = "用户登录";
        String actual = driver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2")).getText();
        Assertions.assertEquals(expect, actual);
        // 判断登录窗口的内容
        String expect2 = driver.findElement(By.cssSelector("#signInForm > div.mb-3 > label")).getText();
        Assertions.assertEquals(expect2, "用户名");
        String expect3 = driver.findElement(By.cssSelector("#signInForm > div.mb-2 > label")).getText();
        Assertions.assertEquals(expect3, "密码");
        // 检查登陆按钮是否存在
        driver.findElement(By.cssSelector("#submit"));
        // 检查注册按钮是否存在
        driver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a"));
        // 点击注册按钮
        driver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a")).click();
        // 判断跳转页面是否正确
        String url = driver.getCurrentUrl();
        Assertions.assertEquals(url, "http://47.109.128.149:6060/sign-up.html");
    }

    /**
     * 测试窗口伸缩
     */
    @Test
    @Order(2)
    public void windowSize() {
        driver.manage().window().setSize(new Dimension(900, 900));
        driver.manage().window().setSize(new Dimension(300, 300));
        driver.manage().window().maximize();
    }

    /**
     * 错误登录测试1
     */
    @ParameterizedTest
    @Order(4)
    @CsvSource(value = {"锦鲤, 12345"})
    void loginAbnormal1(String username, String password) {
        // 清空用户名和密码
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 用户名为空
        driver.findElement(By.cssSelector("#username")).click();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        String expect = driver.findElement(By.cssSelector("#signInForm > div.mb-3 > div")).getText();
        // 断言
        Assertions.assertEquals(expect, "用户名不能为空");
        // 密码为空
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        String expectPass = driver.findElement(By.cssSelector("#signInForm > div.mb-2 > div > div")).getText();
        // 断言
        Assertions.assertEquals(expectPass, "密码不能为空");
        // 返回上一个页面
//        driver.navigate().back();// 这里不需要返回,并未跳转页面
    }
    /**
     * 错误登录测试2
     */
    @ParameterizedTest
    @Order(4)
    @CsvSource(value = {"锦鲤, 12345","锦鲤呀,123456"})
    void loginAbnormal2(String username, String password) {
        // 清空用户名和密码
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        // 点击登录
        driver.findElement(By.cssSelector("#submit")).click();
        // 等待弹窗内容
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 判断弹窗内容
        String expect = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
        // 断言
        Assertions.assertEquals(expect, "警告");
        // 返回上一个页面
//        driver.navigate().back();// 这里不需要返回,并未跳转页面
    }

    /**
     * 正确登录测试
     */
    @ParameterizedTest
    @Order(4)
    @CsvSource(value = {"小金, 123456","锦鲤, 123456"})
    void loginNormal(String username, String password) {
        // 清空用户名和密码
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        // 点击登录
        driver.findElement(By.cssSelector("#submit")).click();
        // 等待跳转页面
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 判断跳转页面url
        String url = driver.getCurrentUrl();
        // 断言url
        Assertions.assertEquals(url, "http://47.109.128.149:6060/sign-in.html");
        // 判断显示是否为首页
        String expect = driver.findElement(By.cssSelector("#article_list_board_title")).getText();
        // 断言
        Assertions.assertEquals(expect, "首页");
        // 返回上一个页面
        driver.navigate().back();// 这里不需要返回,并未跳转页面
    }


}

3.对注册页面进行自动化测试

①打开注册页面

在这里插入图片描述

②对注册页面上的文字进行判断

  1. 判断用户注册,用户名,昵称,密码,确认密码,同意文字是否存在
  2. 注册按钮是否存在
  3. 登陆的超链接是否存在

④错误的注册测试

  1. 用户名,昵称,密码,确认密码,同意隐私政策,其中有任何一个不填写,注册失败

⑤正确的注册测试

  1. 用户名,昵称,密码,确认密码,同意隐私政策,所有都正确填写,注册成功
  2. 注册成功后,跳转到登陆界面

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

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

相关文章

Apple Pay 内购项目价格异常相关

通过 Apple Pay 内购商品子项的实际支付价格与 App Store Connect 配置中的存在差异; 经过已经排查过后发现是参照转换汇率的基准方式导致; 在 App 内购买项目 > 价格时间表 > App 内购买项目定价 > 所在国家或地区 一栏中,官方默认配置是以美国(USD)换算为基准 解决办…

优思学院|车间管理的五大基本方法

车间管理对于任何制造型企业来说都是至关重要的一环。有效的车间管理可以帮助企业提高生产效率&#xff0c;降低成本&#xff0c;改善产品质量&#xff0c;以及增强员工士气。在这篇文章中&#xff0c;我们将探讨车间管理的五大基本方法&#xff0c;这些方法可以帮助企业更好地…

NOIP 2011 提高组复赛真题及题解(day1 day2) Pascal语言

题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺上一些矩形地毯。一共有n 张地毯&#xff0c;编号从1 到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设&#xff0c;后…

FreeCAD傻瓜式教程之约束设定、构建实体、开孔、调整颜色、透明度、参考距离、任意修改尺寸、保持开孔居中等

本内容基于官方教程中的绘制简单的零件中的体会&#xff0c;在初次绘制的时候&#xff0c;总是无法完成&#xff0c;几经尝试才发现其关键点所在&#xff0c;以此文记录&#xff0c;用以被查资料&#xff0c;同时也希望能够帮到纯白新手快速熟悉该软件的绘图方法。 一、. 打开…

GEEMAP 基本操作(二)如何对 Landsat 进行全色锐化

遥感全色锐化的目标是从图像中获得最高级别的视觉清晰度和细节&#xff0c;通过结合全色波段图像的高空间分辨率和多光谱&#xff08;Landsat 为 B8 全色&#xff09;图像的宽光谱范围&#xff0c;全色锐化能够生成质量更清晰的最终彩色图像。 全色锐化过程涉及应用数学算法&a…

IDC发布《亚太决策支持型分析数据平台评估》报告,亚马逊云科技位列“领导者”类别

日前&#xff0c;领先的IT市场研究和咨询公司IDC发布《2023年亚太地区&#xff08;不含日本&#xff09;决策支持型分析数据平台供应商评估》1报告&#xff0c;亚马逊云科技位列“领导者”类别。IDC认为&#xff0c;亚马逊云科技在解决方案的协同性、敏捷性、完整性、及时性、经…

Keras三种主流模型构建方式:序列模型、函数模型、子类模型开发实践,以真实烟雾识别场景数据为例

Keras和PyTorch是两个常用的深度学习框架&#xff0c;它们都提供了用于构建和训练神经网络的高级API。 Keras: Keras是一个高级神经网络API&#xff0c;可以在多个底层深度学习框架上运行&#xff0c;如TensorFlow和CNTK。以下是Keras的特点和优点&#xff1a; 优点&#xf…

keepalived+lvs+nginx高并发集群

keepalivedlvsnginx高并发集群 简介&#xff1a; keepalivedlvsnginx高并发集群&#xff0c;是通过LVS将请求流量均匀分发给nginx集群&#xff0c;而当单机nginx出现状态异常或宕机时&#xff0c;keepalived会主动切换并将不健康nginx下线&#xff0c;维持集群稳定高可用 1.L…

浏览器安装selenium驱动,以Microsoft Edge安装驱动为例

Selenium是一个用于Web应用程序测试的自动化工具。它可以直接在浏览器中运行&#xff0c;模拟真实用户对浏览器进行操作。利用selenium&#xff0c;可以驱动浏览器执行特定的动作&#xff0c;比如&#xff1a;点击、下拉等等&#xff0c;还可以获取浏览器当前呈现的页面的源代码…

【数据结构与算法】总结关于二叉树题型经典面试题

【数据结构与算法】二叉树题型经典面试题 1.根据二叉树创建字符串2.二叉树的层序遍历3.二叉树的最近公共祖先4.二叉搜索树与双向链表5.从前序与中序遍历序列构造二叉树6.从中序与后序遍历序列构造二叉树7.二叉树的前序遍历(非递归方法)8.二叉树的中序遍历(非递归方法)9.二叉树的…

SpringBoot接收参数的8种方式

文章目录 1. 直接把请求参数写在方法的形参中2. 封装一个bean直接来接收3. 原生的HttpServletRequest接收4. PathVariable获取rest风格路径参数5. RequestParam绑定请求参数到方法形参6. RequestBody绑定请求参数到方法形参7. RequestHeader8. CookieValue 1. 直接把请求参数写…

唯一受邀参会通信服务商!融云出席数字经济头部盛会「中数大会」并发言

8 月 16 日-18日&#xff0c;“2023 中国数字经济创新发展大会”&#xff08;下简称“中数大会”&#xff09;在广东省汕头市举办。关注【融云 RongCloud】&#xff0c;了解协同办公平台更多干货。 中数大会由工业和信息化部、广东省人民政府联合主办&#xff0c;以“聚数联侨…

C++ new运算符开辟空间

1 内存四区介绍 代码区&#xff1a;存放函数的二级制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值&#xff0c;局部变量等堆区&#xff1a; 由程序员分配和释放&…

点云平面拟合和球面拟合

一、介绍 In this tutorial we learn how to use a RandomSampleConsensus with a plane model to obtain the cloud fitting to this model. 二、代码 #include <iostream> #include <thread> #include <pcl/point_types.h> #include <pcl/common/io.…

kubesphere部署rocketmq5.x,并对外暴露端口

kubesphere是青云开源的k8s管理工具&#xff0c;用户可以方便的通过页面进行k8s部署的部署&#xff0c;rocketmq则是阿里开源的一款mq平台&#xff0c;现在版本为5.1.3版本&#xff0c;较比4.x版本的rocketmq有比较大的调整&#xff1a;比如客户端的轻量化&#xff08;统一通过…

MS1022高精度时间测量(TDC)电路,应用于超声波热量表、水表、激光测距

产品简述 MS1022 是一款高精度时间测量电路&#xff0c;内部集成了模拟比 较器、模拟开关、施密特触发器等器件&#xff0c;从而大大简化了外 围电路。同时内部增加了第一波检测功能&#xff0c;使抗干扰能力大 大提高。通过读取第一个回波脉冲的相对宽度&#xff0c;用户可…

Spring6.0官方文档示例:(27)配置文件中bean定义的继承关系

一、实体类 package cn.edu.tju.domain;public class DerivedTestBean {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {t…

几种常见的递归算法

阶乘 这个比较简单就不说了。 int factorial(int n) {if (n < 0){return 0;}else if (n 1){return 1;}else {return n * factorial(n - 1);} }fibonacci 如此简单的算法&#xff0c;复试的时候竟然写错了&#xff01;&#x1f633;囧&#xff01; int fibonacci(unsigne…

高忆管理:a股印花税调整利好股市吗?印花税下调利好股市吗?

在股票市场上&#xff0c;印花税并不是一成不变的&#xff0c;政府会依据实际情况进行调整&#xff0c;那么&#xff0c;a股印花税调整利好股市吗&#xff1f;印花税下调利好股市吗&#xff1f;下面高忆管理为大家预备了相关内容&#xff0c;以供参阅。 股票印花税一般是指投资…

Transformer是否真正理解了自然语言的语义信息,还是单纯的模式识别

论文引用 此篇阅读笔记与思考主要针对以下两篇论文&#xff1a; Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data Transformer Feed-Forward Layers Are Key-Value Memories 本文将讨论第一篇论文所引发的思考&#xff08;第一篇论文的详细解…