家居网购项目(三)

文章目录

    • 1.后台管理—添加家居
        • 1.需求分析
        • 2.程序框架图
        • 3.修改FurnDao
          • 添加方法add
        • 4.修改FurnDaoImpl
          • 添加方法add
        • 5.单元测试
          • FurnDaoTest.java
        • 6.修改FurnService
          • 添加方法add
        • 7.修改FurnServiceImpl
          • 添加方法add
        • 8.单元测试
          • FurnServiceTest.java
        • 9.修改furn_add.jsp
        • 10.修改FurnServlet
          • 添加add方法
        • 11.单元测试
          • 1.中文乱码问题
            • 修改BasicServlet
          • 2.表单重复提交问题
            • 使用重定向解决,修改FurnServlet
          • 3.用户输入格式错误
            • 1.前端添加js验证
            • 2.后端异常处理
    • 2.BeanUtils自动封装javabean
        • 1.基本介绍
        • 2.代码实例
          • 修改FurnServlet.java
        • 3.单元测试
          • 数据不能为null的异常
            • 在javabean中设置默认值,并进行判断
        • 4.使用DataUtils封装并处理异常
          • 1.DataUtils.java
          • 2.修改FurnServlet
    • 3.后台管理—删除家居
        • 1.需求分析
        • 2.程序框架图
        • 3.编写dao层
          • 1.修改FurnDao
            • 添加方法deleteFurnById
          • 2.修改FurnDaoImpl
            • 添加方法deleteFurnById
          • 3.单元测试
            • FurnDaoTest.java
        • 4.编写service层
          • 1.修改FurnService
            • 添加方法deleteFurnById
          • 2.修改FurnServiceImpl
            • 添加方法deleteFurnById
          • 3.单元测试
            • FurnServiceTest
        • 5.修改furn_manage.jsp
          • 1.前端删除提示
          • 2.超链接设置
        • 6.修改FurnServlet
          • 添加方法del
        • 7.结果展示
          • 1.点击删除
          • 2.删除之后重定向
    • 4.后台管理—修改家居
        • 1.需求分析
        • 2.程序框架图
        • 3.编写dao层
          • 1.修改FurnDao
            • 添加方法queryFurnById和updateFurn
          • 2.修改FurnDaoImpl
            • 添加方法queryFurnById和updateFurn
          • 3.单元测试
            • FurnDaoTest
        • 4.编写service层
          • 1.修改FurnService
            • 添加方法queryFurnById和updateFurn
          • 2.修改FurnServiceImpl
            • 添加方法queryFurnById和updateFurn
          • 3.单元测试
            • FurnServiceTest
        • 5.编写web层—使数据回显
          • 1.修改furn_update.jsp
          • 2.修改furn_manage.jsp
          • 3.修改FurnServlet
            • 添加方法showFurn
          • 4.结果展示
            • 1.点击铅笔修改
            • 2.数据回显
        • 6.编写web层—修改家居信息
          • 1.修改furn_update.jsp
          • 2.修改FurnServlet
            • 增加方法updateFurn
          • 3.结果展示
            • 1.初始修改界面
            • 2.准备修改
            • 3.修改成功

1.后台管理—添加家居

1.需求分析

image-20240206102802801

2.程序框架图

image-20240206103259071

image-20240206103341918

3.修改FurnDao
添加方法add
    //向数据库中添加家居
    public int add(Furn furn);
4.修改FurnDaoImpl
添加方法add
    /**
     * 添加家居
     * @return 成功返回1,失败返回-1
     */
    @Override
    public int add(Furn furn) {
        String sql = "insert into furn values(null, ?, ?, ?, ?, ?, ?)";
        //添加家居
        int update = update(sql, furn.getName(), furn.getMaker(),
                furn.getPrice(), furn.getSales(), furn.getStock(), furn.getImgPath());
        return update;
    }
5.单元测试
FurnDaoTest.java
    @Test
    public void add() {
        Furn furn = new Furn(null, "温馨风格盆景架", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
        if (furnDao.add(furn) == 1) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }

image-20240206105445500

6.修改FurnService
添加方法add
    //2.添加家居
    public boolean add(Furn furn);
7.修改FurnServiceImpl
添加方法add
    /**
     * 添加家居
     * @param furn
     * @return 成功返回true,失败返回false
     */
    @Override
    public boolean add(Furn furn) {
        return furnDao.add(furn) == 1 ? true : false;
    }
8.单元测试
FurnServiceTest.java
    @Test
    public void add() {
        Furn furn = new Furn(null, "温馨风格盆景架", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
        if (furnService.add(furn)) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }

image-20240206110120214

9.修改furn_add.jsp

image-20240206110837402

image-20240206110850688

10.修改FurnServlet
添加add方法
    /**
     * 添加家居并重新获取家居信息,请求转发到furn_manage.jsp
     * @param req
     * @param resp
     */
    public void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        //获取表单信息
        String name = req.getParameter("name");
        String maker = req.getParameter("maker");
        String price = req.getParameter("price");
        String sales = req.getParameter("sales");
        String stock = req.getParameter("stock");
        //封装到bean中
        Furn furn = new Furn(null, name, maker, new BigDecimal(price), Integer.parseInt(sales), Integer.parseInt(stock), "");
        //插入到数据库
        if (furnService.add(furn)) {
            //插入成功则重新获取家居信息并请求转发
            list(req, resp);
        } else {
            System.out.println("插入失败");
        }
    }
11.单元测试
1.中文乱码问题

image-20240206134719344

修改BasicServlet

image-20240206134940882

image-20240206135151080

2.表单重复提交问题

image-20240206141127028

使用重定向解决,修改FurnServlet

image-20240206141111373

3.用户输入格式错误

image-20240206141716172

1.前端添加js验证
<%--  引入jquery  --%>
    <script type="text/javascript" src="script/jquery-3.6.0.min.js"></script>
    <script>
        //验证表单输入信息
        $(function () {
            //给提交按钮绑定事件
            $("input[value='添加家居']").click(function () {
                //获取价格数据
                var price = $("input[name='price']").val();
                //正则验证
                var pricePattern = /^(0(\.\d+)?|[1-9]\d*(\.\d+)?)$/;
                if (!pricePattern.test(price)){
                    alert("价格格式不正确!")
                    return false; //取消提交表单
                }
                //获取销量数据
                var sales = $("input[name='sales']").val();
                //正则验证
                var salesPattern = /^(0|[1-9]\d*)$/;
                if (!salesPattern.test(sales)) {
                    alert("销量格式不正确!")
                    return false;
                }
                //获取库存数据
                var stock = $("input[name='stock']").val();
                //正则验证
                var stockPattern = /^(0|[1-9]\d*)$/;
                if (!stockPattern.test(stock)) {
                    alert("库存格式不正确!")
                    return false;
                }
                return true;
            })
        })
    </script>

结果展示

image-20240206150018600

image-20240206150044798

image-20240206150114835

2.后端异常处理

1.修改FurnServlet

image-20240206151600144

2.修改furn_add.jsp

image-20240206151653872

3.结果展示

image-20240206151620331

2.BeanUtils自动封装javabean

1.基本介绍

image-20240206152454648

2.代码实例
修改FurnServlet.java
    /**
     * 添加家居并重新获取家居信息,请求转发到furn_manage.jsp
     * @param req
     * @param resp
     */
    public void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException, InvocationTargetException, IllegalAccessException

        //使用BeanUtils工具类封装信息
        Furn furn = new Furn();
        //使用工具类获取表单的输入信息,并使用反射将其封装到bean中,注意,name必须与bean的属性对应
        BeanUtils.populate(furn, req.getParameterMap());
        System.out.println(furn);
        //插入到数据库
        if (furnService.add(furn)) {
            //插入成功则重定向到家居显示的servlet
            resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
        } else {
            System.out.println("插入失败");
        }
    }

image-20240206154453022

image-20240206154900771

3.单元测试
数据不能为null的异常

image-20240206155420626

image-20240206155613602

在javabean中设置默认值,并进行判断

image-20240206160935910

4.使用DataUtils封装并处理异常
1.DataUtils.java
package com.sxs.furns.utils;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class DataUtils {
    //封装bean的异常处理
    public static <T> T copyParamToBean(Map value, T bean){ //bean的类型不确定,所以使用泛型
        try {
            BeanUtils.populate(bean, value);
            //进行异常处理
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        }
        //没有异常再返回bean
        return bean; //由于返回的是bean,所以返回值也应该是bean类型T
    }
}

2.修改FurnServlet
    /**
     * 添加家居并重新获取家居信息,请求转发到furn_manage.jsp
     * @param req
     * @param resp
     */
    public void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException, InvocationTargetException, IllegalAccessException {
        //使用工具类封装并处理异常
        Furn furn = DataUtils.copyParamToBean(req.getParameterMap(), new Furn());

        //插入到数据库
        if (furnService.add(furn)) {
            //插入成功则重定向到家居显示的servlet
            resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
        } else {
            System.out.println("插入失败");
        }
    }

3.后台管理—删除家居

1.需求分析

image-20240206163026967

2.程序框架图

image-20240206163849099

image-20240206164721524

3.编写dao层
1.修改FurnDao
添加方法deleteFurnById
    //根据id删除家居
    public int deleteFurnById(Integer id);
2.修改FurnDaoImpl
添加方法deleteFurnById
    /**
     * 删除家居
     * @param id
     * @return 成功返回1,失败返回-1
     */
    @Override
    public int deleteFurnById(Integer id) {
        String sql = "delete from furn where id = ?";
        //删除家居
        return update(sql, id);
    }
3.单元测试
FurnDaoTest.java
    @Test
    public void deleteFurnById() {
        if (furnDao.deleteFurnById(13) == 1) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }
    }

image-20240206165939714

4.编写service层
1.修改FurnService
添加方法deleteFurnById
    //3.根据id删除家居
    public boolean deleteFurnById(Integer id);
2.修改FurnServiceImpl
添加方法deleteFurnById
    /**
     * 根据id删除家居
     * @param id
     * @return 成功返回true,失败返回false
     */
    @Override
    public boolean deleteFurnById(Integer id) {
        return furnDao.deleteFurnById(id) == 1 ? true : false;
    }
3.单元测试
FurnServiceTest
    @Test
    public void deleteFurnById(){
        if (furnService.deleteFurnById(16)) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }
    }

image-20240206171008317

5.修改furn_manage.jsp
1.前端删除提示
    <%--引入jquery--%>
    <script type="text/javascript" src="script/jquery-3.6.0.min.js"></script>
    <script type="text/javascript">
        $(function () { //页面加载完毕后执行function(){}

            //绑定点击事件
            $("a.deleteCss").click(function () {
                //获取到要删除的家居的名字
                var furnName = $(this).parent().parent().find("td:eq(1)").text();

                //1. confirm方法会弹出一个确认窗口
                //2. 点击确定,返回true
                //3. 点击取消,返回false
                return confirm("你确定要删除【" + furnName + "】?");
            })

        })
    </script>

image-20240206180730406

2.超链接设置

image-20240206180832821

6.修改FurnServlet
添加方法del
    /**
     * 根据获取的id删除家居,获取家居信息并重定向到furn_manage.jsp
     * @param req
     * @param resp
     */
    public void del(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取id
        String id = req.getParameter("id");
        //根据id删除
        if (furnService.deleteFurnById(Integer.parseInt(id))) {
            resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
        } else {
            System.out.println("删除失败");
        }
    }
7.结果展示
1.点击删除

image-20240206181013236

2.删除之后重定向

image-20240206181040807

4.后台管理—修改家居

1.需求分析

image-20240206181315700

image-20240206181327074

2.程序框架图

image-20240206184812744

image-20240206184835035

3.编写dao层
1.修改FurnDao
添加方法queryFurnById和updateFurn
    //根据id查询家居
    public Furn queryFurnById(Integer id);
    //根据Furn对象修改家居
    public int updateFurn(Furn furn);
2.修改FurnDaoImpl
添加方法queryFurnById和updateFurn
    /**
     * 根据id查询
     *
     * @param id
     * @return 成功返回Furn对象,失败返回null
     */
    @Override
    public Furn queryFurnById(Integer id) {
        String sql = "select * from furn where id = ?";
        return querySingle(sql, Furn.class, id);
    }

    /**
     * 根据furn的id来更新所有记录
     *
     * @param furn
     * @return 成功返回1,失败返回-1
     */
    @Override
    public int updateFurn(Furn furn) {
        String sql = "update furn set name = ?, maker = ?, price = ?, sales = ?, stock = ?, " +
                "img_path = ? WHERE id = ?";
        return update(sql, furn.getName(), furn.getMaker(), furn.getPrice(),
                furn.getSales(), furn.getSales(), furn.getImgPath(), furn.getId());
    }
3.单元测试
FurnDaoTest
    @Test
    public void queryFurnById() {
        Furn furn = furnDao.queryFurnById(1);
        if (furn != null) {
            System.out.println(furn);
        } else {
            System.out.println("查询失败");
        }
    }
    @Test
    public void updateFurn() {
        Furn furn = new Furn(20, "温馨风格盆景架", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
        if (furnDao.updateFurn(furn) == 1) {
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
        }
    }

image-20240206185202634

image-20240206185222237

4.编写service层
1.修改FurnService
添加方法queryFurnById和updateFurn
    //4.根据id查询家居
    public Furn queryFurnById(Integer id);
    //5.根据Furn对象修改家居
    public boolean updateFurn(Furn furn);
2.修改FurnServiceImpl
添加方法queryFurnById和updateFurn
    /**
     * 根据id查询家居
     * @param id
     * @return 成功返回Furn对象,失败返回null
     */
    @Override
    public Furn queryFurnById(Integer id) {
        return furnDao.queryFurnById(id);
    }

    /**
     * 根据furn对象的id来更新信息
     * @param furn
     * @return 成功返回true,失败返回false
     */
    @Override
    public boolean updateFurn(Furn furn) {
        return furnDao.updateFurn(furn) == 1 ? true : false;
    }
3.单元测试
FurnServiceTest
    @Test
    public void queryFurnById() {
        Furn furn = furnService.queryFurnById(1);
        if (furn != null) {
            System.out.println(furn);
        } else {
            System.out.println("查询失败");
        }
    }
    @Test
    public void updateFurn() {
        Furn furn = new Furn(20, "11111", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
        if (furnService.updateFurn(furn)) {
            System.out.println("更新成功");
        } else {
            System.out.println("更新失败");
        }
    }

image-20240206190043287

image-20240206190141578

5.编写web层—使数据回显
1.修改furn_update.jsp

image-20240206191944461

image-20240206192028903

2.修改furn_manage.jsp

image-20240206192509805

3.修改FurnServlet
添加方法showFurn
    /**
     * 根据id查询家居信息,将信息请求转发到前端
     *
     * @param req
     * @param resp
     */
    public void showFurn(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取id
        String id = req.getParameter("id");
        //根据id查询信息
        Furn furn = furnService.queryFurnById(Integer.parseInt(id));
        if (furn != null) {
            //将信息放到request中并请求转发到furn_update.jsp
            req.setAttribute("furn", furn);
            req.getRequestDispatcher("/views/manage/furn_update.jsp").forward(req, resp);
        } else {
            System.out.println("查询失败");
        }
    }
4.结果展示
1.点击铅笔修改

image-20240206192620571

2.数据回显

image-20240206192656271

6.编写web层—修改家居信息
1.修改furn_update.jsp

image-20240206195440079

2.修改FurnServlet
增加方法updateFurn
    /**
     * 读取表单信息,进行修改
     * @param req
     * @param resp
     */
    public void updateFurn(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //使用工具类将表单信息封装到bean中
        Furn furn = DataUtils.copyParamToBean(req.getParameterMap(), new Furn());
        //执行更新操作
        if (furnService.updateFurn(furn)) {
            //更新成功则重定向到展示页面
            resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
        }

    }
3.结果展示
1.初始修改界面

image-20240206195711627

2.准备修改

image-20240206195819973

3.修改成功

image-20240206195838867

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

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

相关文章

用于扩展Qt自身的插件(下)

扩展Qt自身的插件 引言必须满足项创建插件示例代码生成插件配置加载插件的环境创建使用插件的项目配置库和头文件依赖的步骤:应用程序代码运行结果总结引言 本文继上篇的扩展Qt自身的插件,接着记录Qt自身的插件,只不过本文提及的用于扩展Qt自身的插件是可以在QtCreator的设…

读《AI营销画布》客户关系维护的当代挑战(二)

前言 技术进步、用户连接与信息冗余这三股力量已经让人无法真正高质量的获取有用的信息&#xff0c;在对进步与高质量前面提出解决方案时&#xff0c;我们需要对挑战清楚的认识&#xff0c;所以&#xff0c;今天就这三个也解读一下。 1.信息泛滥与爆炸 如图还是19年的&#xf…

股票价格预测 | Python使用GAN预测股票价格

文章目录 效果一览文章概述代码设计效果一览 文章概述 生成对抗网络(GAN)是一种强大的机器学习模型,用于生成以假乱真的数据。然而,使用GAN来预测股票价格可能会面临以下挑战: 数据可用性:GAN需要大量的数据进行训练,以便生成准确的输出。对于股票价格预测,历史股票价…

基于单片机的智能居家火灾报警系统

摘要:采用STC15L2K32单片机设计了一种智能火灾报警系统,它是控制中心与多个不同功能的探测模块构成,实现了一个中心、多点辐射的火灾检测和报警功能。 关键词:智能居家,火灾报警系统,单片机,模块化设计。 0 引言 近些年电子技术、计算机技术为火灾报警系统和灭火系统在…

Python实现PDF页面的删除与添加

在处理PDF文档的过程中&#xff0c;我们时常会需要对PDF文档中的页面进行编辑操作的情况&#xff0c;如插入和删除页面。通过添加和删除PDF页面&#xff0c;我们可以增加内容或对不需要的内容进行删除&#xff0c;使文档内容更符合需求。而通过Python实现PDF文档中的插入和删除…

明明设置数字居中对齐,为什么excel的数字却不居中?

有时候在excel里&#xff0c;选中数据&#xff0c;设置对齐方式 左右居中&#xff0c;然而&#xff0c;数字却怎么都不居中&#xff0c;为什么呢&#xff1f; 1.按快捷键Ctrl1&#xff0c;打开单元格自定义格式对话框&#xff0c;看到是初始界面是在数字的会计专用&#xff0c;…

TDengine too many open files

too many open files 是比较常见的报错&#xff0c;尤其使用TDengine 3.0 集群时&#xff0c;大概率会遇到。这个报错很简单&#xff0c;但要想顺利解决&#xff0c;却涉及到很多知识点。 目录 知识点&#xff1a;fs.nr_open知识点&#xff1a;file-max & fs.file-nr知识点…

VSCode中 task.json 和 launch.json 的作用和参数解释以及配置教程

前言 由于 VS Code 并不是一个传统意义上的 IDE&#xff0c;所以初学者可能在使用过程中会有很多的疑惑&#xff0c;其中比较常见的一个问题就是 tasks.json和 launch.json两个文件分别有什么作用以及如何配置 tasks.json VSCode 官网提供的 tasks.json 配置教程 使用不同的…

探索HTTP协议的世界 | 从基础到高级应用,原理与实践相结合(请求篇)

从基础到高级应用&#xff0c;原理与实践相结合 什么是Http历代Http协议主要特点格式和URL协议内容请求行格式如下请求方法简单案例 消息报头报头域的格式HTTP消息报头类型普通报头优化方向报头&#xff08;缓存&#xff09;Cache-Control的选项其他相关的缓存报头 请求报头Acc…

CLIP大模型图文检索——原理解读及代码实现

一. 核心思想 通过自然语言处理获得的监督信号可用于训练迁移效果出色的视觉模型。本论文的作者团队构建了一个庞大的图像文本配对数据集&#xff0c;其中包含400 million个图片文本的配对。利用最大规模的ViT-large模型&#xff0c;他们提出了CLIP&#xff08;Contrastive La…

Day38 代码随想录(1刷)动态规划

目录 343. 整数拆分 96. 不同的二叉搜索树 343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1…

SQLite 在Android安装与定制方案(十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite超详细的编译时选项&#xff08;十六&#xff09; 下一篇&#xff1a;SQLite Android 绑定&#xff08;十八&#xff09; 安装 有三种方法可以将 SQLite Android 绑定添加到应用程序&#xff1a; 1、通过…

迭代器模式:统一访问集合元素的优雅方式

在面向对象的软件开发中&#xff0c;迭代器模式是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而又无需暴露该对象的内部表示。这种模式是集合处理特别是遍历集合的核心机制。本文将详细介绍迭代器模式的定义、实现、应用场…

《零基础入行IT:步步为营的转型攻略与实践策略》

在信息化社会&#xff0c;IT行业以其强劲的发展势头、广阔的就业前景和丰厚的薪酬待遇&#xff0c;吸引了无数希望转行或初入职场人士的目光。然而&#xff0c;对于毫无相关背景知识的人来说&#xff0c;如何成功叩开IT行业的大门&#xff0c;似乎是一项颇具挑战性的任务。本文…

element-ui的年份范围选择器,选择的年份需等于或小于当前年份,选择的年份范围必须在三年之内

写在前面 日期限制处理&#xff08;禁用&#xff09;&#xff0c;下面我以我这边的需求为例&#xff0c; 选择的年份需等于或小于当前年份 选择的年份范围必须在三年之内 1.限制起始日期小于截止日期 1&#xff09;根据用户选中的开始日期&#xff0c;置灰不可选的日期范围&…

[RK3399 Linux] 使用ubuntu 20.04.5制作rootfs

一、ubuntu base ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。 1.1 下载源码 下载ubuntu-base的方式有很多,可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。 也可以其它镜像地址下载,如清华源:https://mi…

【小技巧】机器学习中可视化高维向量的两种方法PCA和t-SNE,以及其原理介绍和代码示例(附代码)

使用情景&#xff1a;比如说现在我有一批numpy的多维向量&#xff0c;比如说都是256维度的&#xff0c;X.shape(n, 256), 已知它们都是经过训练能够在256dim的超球面上实现分类或聚类的&#xff0c;现在我想把它们可视化出来看看各个簇在超球面上的分布是怎样的&#xff1f; 1…

Ollama、FastGPT大模型RAG结合使用案例

参考: https://ollama.com/download/linux https://doc.fastai.site/docs/intro/ https://blog.csdn.net/m0_71142057/article/details/136738997 https://doc.fastgpt.run/docs/development/custom-models/m3e/ Ollama作为后端大模型加载运行 FastGPT作为前端页面聊天集成RA…

【TI毫米波雷达】I2C初始化配置和主机数据收发,用SDA来模拟UART数据输出,可直接连接IWR6843AOP开发板引脚

【TI毫米波雷达】I2C初始化配置和主机数据收发&#xff0c;用SDA来模拟UART数据输出&#xff0c;可直接连接IWR6843AOP开发板引脚 文章目录 导入库引脚复用初始化I2C配置数据发送用SDA来模拟UART数据输出附录&#xff1a;结构框架雷达基本原理叙述雷达天线排列位置芯片框架Demo…

代理服务器端口分配测试

上游服务器需要一个短暂或临时端口请求下游服务器&#xff0c;测试端口分配方式。 参考nginx 摘录-腾讯云开发者社区-腾讯云 框架为 <dependency><groupId>org.mitre.dsmiley.httpproxy</groupId> <artifactId>smiley-http-proxy-servlet</ar…