【SpringBoot】电脑商城-09-默认收获地址和删除收货地址

news2024/11/15 23:26:52

默认收货地址

1 默认收货地址-持久层

1.1 规划需要执行的SQL语句

1.将某用户的所有收货地址设置为非默认地址(是否默认:0-不默认,1-默认)。

update t_address set is_default=0 where uid=?

2.将某用户指定的收货地址设置为默认地址。

update t_address set is_default=1, modified_user=?, modified_time=? where aid=?

3.检查该收货地址是否存在,并检查数据归属是否正确。可根据收货地址aid值,查询收货地址详情数据。

select * from t_address where aid=?
1.2 接口与抽象方法

在AddressMapper接口中声明三个抽象方法。

/**
 * 将某用户的所有收货地址设置为非默认地址
 * @param uid 收货地址归属的用户id
 * @return 受影响的行数
 */
Integer updateNonDefaultByUid(Integer uid);

/**
 * 将指定的收货地址设置为默认地址
 * @param aid 收货地址id
 * @param modifiedUser 修改执行人
 * @param modifiedTime 修改时间
 * @return 受影响的行数
 */
Integer updateDefaultByAid(
        @Param("aid") Integer aid,
        @Param("modifiedUser") String modifiedUser,
        @Param("modifiedTime") Date modifiedTime);

/**
 * 根据收货地址aid值,查询收货地址详情
 * @param aid 收货地址id
 * @return 匹配的收货地址详情,如果没有匹配的数据,则返回null
 */
Address findByAid(Integer aid);
1.3 配置SQL映射

1.在AddressMapper.xml映射文件,配置以上三个抽象方法的映射。

<!-- 将某用户的所有收货地址设置为非默认地址:Integer updateNonDefaultByUid(Integer uid) -->
<update id="updateNonDefaultByUid">
    UPDATE
    	t_address
    SET
    	is_default=0
    WHERE
    	uid=#{uid}
</update>

<!-- 将指定的收货地址设置为默认地址:
         Integer updateDefaultByAid(
            @Param("aid") Integer aid,
            @Param("modifiedUser") String modifiedUser,
            @Param("modifiedTime") Date modifiedTime) -->
<update id="updateDefaultByAid">
    UPDATE
    	t_address
    SET
        is_default=1,
        modified_user=#{modifiedUser},
        modified_time=#{modifiedTime}
    WHERE
    	aid=#{aid}
</update>

<!-- 根据收货地址aid值,查询收货地址详情:Address findByAid(Integer aid) -->
<select id="findByAid" resultMap="AddressEntityMap">
    SELECT
    	*
    FROM
    	t_address
    WHERE
    	aid=#{aid}
</select>

2.在AddressMapperTests类中编写并执行以上三个抽象方法的测试。

@Test
public void updateNonDefaultByUid() {
    Integer uid = 26;
    Integer rows = addressMapper.updateNonDefaultByUid(uid);
    System.out.println("rows=" + rows);
}

@Test
public void updateDefaultByAid() {
    Integer aid = 11;
    String modifiedUser = "管理员";
    Date modifiedTime = new Date();
    Integer rows = addressMapper.updateDefaultByAid(aid, modifiedUser, modifiedTime);
    System.out.println("rows=" + rows);
}

@Test
public void findByAid() {
    Integer aid = 11;
    Address result = addressMapper.findByAid(aid);
    System.out.println(result);
}

2 默认收货地址-业务层

2.1 规划异常

1.在执行设置默认收货地址之前,需要先检查该收货地址数据是否存在,如果不存在则抛出AddressNotFoundException异常。

2.然后还需要检查数据归属是否正确,也就是不可以操作他人的数据,如果该数据中记录的uid与当前登录的用户的uid不一致,则抛出AccessDeniedException异常。

3.检查通过后先全部设置为非默认,然后将指定的收货地址设置为默认;这两种操作都是更新数据的操作,则可能抛出UpdateException异常。

4.在com.cy.store.service.ex包下创建AddressNotFoundException和AccessDeniedException异常类。

package com.cy.store.service.ex;

/** 收货地址数据不存在的异常 */
public class AddressNotFoundException extends ServiceException {
    // Override Methods...
}
package com.cy.store.service.ex;

/** 非法访问的异常 */
public class AccessDeniedException extends ServiceException {
    // Override Methods...
}
2.2 接口与抽象方法

在IAddressService接口中添加setDefault(Integer aid, Integer uid, String username)抽象方法。

/**
 * 设置默认收货地址
 * @param aid 收货地址id
 * @param uid 归属的用户id
 * @param username 当前登录的用户名
 */
void setDefault(Integer aid, Integer uid, String username);
2.3 实现抽象方法

1.在AddressServiceImpl类中重写setDefault(Integer aid, Integer uid, String username)方法。该方法需要添加@Transactional注解。

事务:基于Spring JDBC的事务(Transaction)处理,使用事务可以保证一系列的增删改操作,要么全部执行成功,要么全部执行失败。@Transactional注解可以用来修饰类也可以用来修饰方法。如果添加在业务类之前,则该业务类中的方法均以事务的机制运行,但是一般并不推荐这样处理。

@Transactional
@Override
public void setDefault(Integer aid, Integer uid, String username) {
	// 根据参数aid,调用addressMapper中的findByAid()查询收货地址数据
	// 判断查询结果是否为null
	// 是:抛出AddressNotFoundException

	// 判断查询结果中的uid与参数uid是否不一致(使用equals()判断)
	// 是:抛出AccessDeniedException:非法访问

	// 调用addressMapepr的updateNonDefaultByUid()将该用户的所有收货地址全部设置为非默认,并获取返回的受影响的行数
	// 判断受影响的行数是否小于1(不大于0)
	// 是:抛出UpdateException

	// 调用addressMapepr的updateDefaultByAid()将指定aid的收货地址设置为默认,并获取返回的受影响的行数
	// 判断受影响的行数是否不为1
	// 是:抛出UpdateException
}

2.setDefault(Integer aid, Integer uid, String username)方法的具体代码实现。

@Transactional
@Override
public void setDefault(Integer aid, Integer uid, String username) {
    // 根据参数aid,调用addressMapper中的findByAid()查询收货地址数据
    Address result = addressMapper.findByAid(aid);
    // 判断查询结果是否为null
    if (result == null) {
        // 是:抛出AddressNotFoundException
        throw new AddressNotFoundException("尝试访问的收货地址数据不存在");
    }

    // 判断查询结果中的uid与参数uid是否不一致(使用equals()判断)
    if (!result.getUid().equals(uid)) {
        // 是:抛出AccessDeniedException
        throw new AccessDeniedException("非法访问的异常");
    }

    // 调用addressMapper的updateNonDefaultByUid()将该用户的所有收货地址全部设置为非默认,并获取返回受影响的行数
    Integer rows = addressMapper.updateNonDefaultByUid(uid);
    // 判断受影响的行数是否小于1(不大于0)
    if (rows < 1) {
        // 是:抛出UpdateException
        throw new UpdateException("设置默认收货地址时出现未知错误[1]");
    }

    // 调用addressMapper的updateDefaultByAid()将指定aid的收货地址设置为默认,并获取返回的受影响的行数
    rows = addressMapper.updateDefaultByAid(aid, username, new Date());
    // 判断受影响的行数是否不为1
    if (rows != 1) {
        // 是:抛出UpdateException
        throw new UpdateException("设置默认收货地址时出现未知错误[2]");
    }
}

3.在AddressServiceTests测试类,编写并执行单元测试。

@Test
public void setDefault() {
    try {
        Integer aid = 13;
        Integer uid = 27;
        String username = "系统管理员";
        addressService.setDefault(aid, uid, username);
        System.out.println("OK.");
    } catch (ServiceException e) {
        System.out.println(e.getClass().getSimpleName());
        System.out.println(e.getMessage());
    }
}

3 默认收货地址-控制器

3.1 处理异常

在BaseController类中添加处理AddressNotFoundException和AccessDeniedException的异常。

// ...
else if (e instanceof AddressNotFoundException) {
    result.setState(4004);
} else if (e instanceof AccessDeniedException) {
    result.setState(4005);
}
// ...
3.2 设计请求

设计用户提交的请求,并设计响应的方式。

请求路径:/addresses/{aid}/set_default
请求参数:@PathVaraible("aid") Integer aid, HttpSession sesion
请求类型:POST
响应结果:JsonResult<Void>

REST即表述性状态传递(Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

3.3 处理请求

1.在AddressController类中添加处理请求的setDefault(@PathVariable(“aid”) Integer aid, HttpSession session)方法。

@RequestMapping("{aid}/set_default")
public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid, HttpSession session) {
    Integer uid = getUidFromSession(session);
    String username = getUsernameFromSession(session);
    addressService.setDefault(aid, uid, username);
    return new JsonResult<Void>(OK);
}

2.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/addresses/13/set_default进行测试。
在这里插入图片描述

4 默认收货地址-前端页面

1.在address.html页面中body标签内部的script标签内,添加设置用户默认收货地址的代码。

function setDefault(aid) {
    $.ajax({
        url: "/addresses/" + aid + "/set_default",
        type: "POST",
        dataType: "JSON",
        success: function(json) {
            if (json.state == 200) {
                showAddressList();
            } else {
                alert("设置默认收货地址失败!" + json.message);
            }
        },
        error: function(xhr) {
            alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);
            location.href = "login.html";
        }
    });
}

2.给showAddressList()方法中的“设为默认”超链接按钮添加设置默认收货地址的点击事件。

<td><a onclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">设为默认</a></td>

3.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/web/address.html页面,点击“设为默认”超链接按钮进行功能测试。

删除收货地址

1 删除收货地址-持久层

1.1 规划需要执行的SQL语句

1.在删除之前,需检查数据是否存在,数据归属是否正确。此功能已完成,无需再次开发。

2.删除指定的收货地址的SQL语句大致是。

delete from t_address where aid=?

3.如果删除的这条数据是默认收货地址,则应该将剩余的收货地址中的某一条设置为默认收货地址,可以设定规则“将最近修改的设置为默认收货地址”,要实现此功能就必须要知道“最近修改的收货地址的id是多少”。则通过以下查询语句完成。

select * from t_address where uid=? order by modified_time desc limit 0,1

4.在执行以上操作之前,还需检查该用户的收货地址数据的数量,如果删除的收货地址是最后一条收货地址,则删除成功后无需再执行其他操作。统计收货地址数量的功能此前已经完成,无需再次开发。

1.2 接口与抽象方法

在AddressMapper接口中添加抽象方法。

/**
 * 根据收货地址id删除数据
 * @param aid 收货地址id
 * @return 受影响的行数
 */
Integer deleteByAid(Integer aid);

/**
 * 查询某用户最后修改的收货地址
 * @param uid 归属的用户id
 * @return 该用户最后修改的收货地址,如果该用户没有收货地址数据则返回null
 */
Address findLastModified(Integer uid);
1.3 配置SQL映射

1.在AddressMapper.xml文件中添加以上两个抽象方法的映射。

<!-- 根据收货地址id删除数据:Integer deleteByAid(Integer aid) -->
<delete id="deleteByAid">
    DELETE FROM
        t_address
    WHERE
        aid=#{aid}
</delete>

<!-- 查询某用户最后修改的收货地址:Address findLastModified(Integer uid) -->
<select id="findLastModified" resultMap="AddressEntityMap">
    SELECT
        *
    FROM
        t_address
    WHERE
        uid=#{uid}
    ORDER BY
        modified_time DESC
        LIMIT 0,1
</select>

2.在AddressMapperTests测试类中添加单元测试方法。

@Test
public void deleteByAid() {
    Integer aid = 4;
    Integer rows = addressMapper.deleteByAid(aid);
    System.out.println("rows=" + rows);
}

@Test
public void findLastModified() {
    Integer uid = 30;
    Address result = addressMapper.findLastModified(uid);
    System.out.println(result);
}

2 删除收货地址-业务层

2.1 规划异常

在执行删除操作时,可能会删除数据失败,此时抛出DeleteException异常。在创建com.cy.store.service.ex.DeleteException异常类,并继承自ServiceException类。

package com.cy.store.service.ex;

/** 删除数据失败的异常 */
public class DeleteException extends ServiceException {
    // Override Methods...
}
2.2 接口与抽象方法

在IAddressService接口中添加删除收货地址的抽象方法。

/**
 * 删除收货地址
 * @param aid 收货地址id
 * @param uid 归属的用户id
 * @param username 当前登录的用户名
 */
void delete(Integer aid, Integer uid, String username);
2.3 实现抽象方法

1.在AddressServiceImpl实现类中实现以上两个抽象方法。

@Transactional
@Override
public void delete(Integer aid, Integer uid, String username) {
    // 根据参数aid,调用findByAid()查询收货地址数据
    Address result = addressMapper.findByAid(aid);
    // 判断查询结果是否为null
    if (result == null) {
        // 是:抛出AddressNotFoundException
        throw new AddressNotFoundException("尝试访问的收货地址数据不存在");
    }

    // 判断查询结果中的uid与参数uid是否不一致(使用equals()判断)
    if (!result.getUid().equals(uid)) {
        // 是:抛出AccessDeniedException:非法访问
        throw new AccessDeniedException("非常访问");
    }

    // 根据参数aid,调用deleteByAid()执行删除
    Integer rows1 = addressMapper.deleteByAid(aid);
    if (rows1 != 1) {
        throw new DeleteException("删除收货地址数据时出现未知错误,请联系系统管理员");
    }

    // 判断查询结果中的isDefault是否为0
    if (result.getIsDefault() == 0) {
        return;
    }

    // 调用持久层的countByUid()统计目前还有多少收货地址
    Integer count = addressMapper.countByUid(uid);
    // 判断目前的收货地址的数量是否为0
    if (count == 0) {
        return;
    }

    // 调用findLastModified()找出用户最近修改的收货地址数据
    Address lastModified = addressMapper.findLastModified(uid);
    // 从以上查询结果中找出aid属性值
    Integer lastModifiedAid = lastModified.getAid();
    // 调用持久层的updateDefaultByAid()方法执行设置默认收货地址,并获取返回的受影响的行数
    Integer rows2 = addressMapper.updateDefaultByAid(lastModifiedAid, username, new Date());
    // 判断受影响的行数是否不为1
    if (rows2 != 1) {
        // 是:抛出UpdateException
        throw new UpdateException("更新收货地址数据时出现未知错误,请联系系统管理员");
    }
}

2.在AddressServiceTests测试类中添加单元测试方法。

@Test
public void delete() {
    try {
        Integer aid = 18;
        Integer uid = 30;
        String username = "明明";
        addressService.delete(aid, uid, username);
        System.out.println("OK.");
    } catch (ServiceException e) {
        System.out.println(e.getClass().getSimpleName());
        System.out.println(e.getMessage());
    }
}

3 删除收货地址-控制器

3.1 处理异常

在BaseController类中添加DeleteException异常的处理。

// ...
else if (e instanceof DeleteException) {
    result.setState(5002);
}
// ...
3.2 设计请求

设计用户提交的请求,并设计响应的方式。

请求路径:/addresses/{aid}/delete
请求参数:@PathVariable("aid") Integer aid, HttpSession session
请求类型:POST
响应结果:JsonResult<Void>
3.3 处理请求

1.在AddressController类中添加处理请求的delete()方法。

@RequestMapping("{aid}/delete")
public JsonResult<Void> delete(@PathVariable("aid") Integer aid, HttpSession session) {
    Integer uid = getUidFromSession(session);
    String username = getUsernameFromSession(session);
    addressService.delete(aid, uid, username);
    return new JsonResult<Void>(OK);
}

2.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/addresses/26/delete进行测试。

4 删除收货地址-前端页面

1.在address.html页面中body标签内部的script标签内,添加设置用户删除收货地址的代码。

function deleteByAid(aid) {
    $.ajax({
        url: "/addresses/" + aid + "/delete",
        type: "POST",
        dataType: "JSON",
        success: function(json) {
            if (json.state == 200) {
                showAddressList();
            } else {
                alert("删除收货地址失败!" + json.message);
            }
        },
        error: function(json) {
            alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + json.status);
            location.href = "login.html";
        }
    });
}

2.给showAddressList()方法中的“设为默认”超链接按钮添加设置默认收货地址的点击事件。

<td>
	<a onclick="deleteByAid(#{aid})" class="btn btn-xs add-del btn-info">
		<span class="fa fa-trash-o"></span> 删除
	</a>
</td>

3.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/web/address.html页面,点击“删除”超链接按钮进行功能测试。
在这里插入图片描述

本期到这就结束了,点一下关注再走吧!!关注一波不迷路!!

分享不易,耗时耗力,麻烦给个不要钱的关注和赞吧
承接毕设指导,技术答疑,学习路上缺少导师的同学可以私信我
更多学习资料,公众号:墨轩学习网,B站:墨轩大楼
在这里插入图片描述

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

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

相关文章

108页PPT分享:华为流程体系及实施方法最佳实践

PPT下载链接见文末~ 华为的流程体系、流程框架及实施方法是一个复杂而精细的系统&#xff0c;旨在确保公司运作的高效性和竞争力。以下是对这些方面的详细描述&#xff1a; 一、华为的流程体系 华为的流程体系是一套全面的管理体系&#xff0c;它涵盖了企业所有的活动&#…

玩转云服务:Oracle Cloud甲骨文永久免费云主机配置指南(续)

前段时间&#xff0c;和大家分享了白嫖Oracle Cloud的云服务器&#xff1a; 玩转云服务&#xff1a;Oracle Cloud甲骨文永久免费云服务器注册及配置指南。 新注册的小伙伴&#xff0c;可以在 30 天内&#xff0c;利用 300 美元免费储值&#xff0c;任性使用所有 Oracle Cloud …

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器

最终效果 前言 使用CharacterController实现3d角色控制器&#xff0c;之前已经做过很多了&#xff1a; 【unity小技巧】unity最完美的CharacterController 3d角色控制器&#xff0c;实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果&#xff0c;复制粘贴即用 【unity实战】C…

InternLM2.5 部署到安卓手机上

环境准备 1.1 安装rust export RUSTUP_DIST_SERVERhttps://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOThttps://mirrors.ustc.edu.cn/rust-static/rustup curl --proto https --tlsv1.2 -sSf https://mirrors.ustc.edu.cn/misc/rustup-install.sh | sh1.2 安…

PostgreSQL 服务启动不了问题

如图&#xff0c;遇到这个问题&#xff0c;需要给文件夹打开权限即可。 先给主文件夹postgreSQL打开所有权限,点击属性->安全那里&#xff0c;所有修改啥的权限都打开。再给里面的data文件夹打开权限。

开源搜索引擎之Solr

Apache Solr 是一个开源的企业级搜索平台&#xff0c;构建在 Apache Lucene 之上&#xff0c;提供了强大的全文搜索、实时索引和分布式搜索能力。Solr 被广泛用于构建高性能的搜索应用程序&#xff0c;支持从简单的搜索引擎到复杂的数据分析平台等多种场景。以下是对 Apache So…

1panle搭建的maxkb增加本地向量模型

首先下载模型&#xff0c;比如m3e-large&#xff0c;并上传到/opt/maxkb/model/local_embedding/ 目录&#xff0c;没有就创建 目录如下&#xff1a; 然后修改1panel的容器信息&#xff0c;点击右边的编辑&#xff1a; 在下方的挂在目录处点击添加&#xff1a; 在两个框都输入…

ISIS路由渗透

/ 实验介绍: / 原理概述 在IS-IS网络中&#xff0c;所有的Level-2和Level-1-2路由器构成了一个连续的骨干区域。Level-1区域必须且只能与骨干区域相连&#xff0c;不同的Level-1区域之间不能直接相连。Level-1区域内的路由信息会通过Level-1-2路由器通报给Level-2区域&#x…

EmguCV学习笔记 C# 8.3 Grabcut法

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

爬取央视热榜并存储到MongoDB

1. 环境准备 在开始之前&#xff0c;确保你已经安装了以下Python库&#xff1a; pip install requests pymongo2. 爬取网页内容 首先&#xff0c;我们需要爬取央视热榜的网页内容。通过requests.get()方法&#xff0c;我们可以获取网页的HTML内容&#xff0c;并通过re.finda…

KEYSIGHT是德 Infiniium EXR系列 示波器

Infiniium EXR系列 示波器 苏州新利通 引言 概述 Infiniium EXR系列 出色的信号完整性让信号纤毫毕现 该系列的所有型号都集成了一个 10 位 ADC&#xff0c;并且在所有通道上同时提供 16 GSa/s 的采样率。高分辨率 ADC 的效用取决于示波器的前端底噪是否足够低以提供与之匹…

Nvidia主导AI推理竞赛,但新兴对手纷纷崭露头角

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

健康早知道小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;健康信息管理&#xff0c;健康评估管理&#xff0c;在线留言&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;医学知识&#xff0…

【网络】数据链路层协议——以太网,ARP协议

1.局域网转发 &#xff08;1&#xff09;IP提供了将数据包跨网络发送的能力&#xff0c;这种能力实际上是通过子网划分目的ip查询节点的路由表来实现的&#xff0c;但实际上数据包要先能够在局域网内部进行转发到目的主机&#xff0c;只有有了这个能力之后&#xff0c;数据包才…

【问题分析】放大镜影响权限弹窗接收事件【Android14】

1 问题描述 如图&#xff0c;打开google的放大镜功能&#xff0c;然后将该放大镜和权限弹窗部分重合&#xff0c;会发现权限弹窗的按钮如“Allow”&#xff0c;点击无响应。 顺便一提&#xff0c;如果放大镜和权限弹窗完全重合或者完全不重合&#xff0c;是没问题的。 2 问题…

create-react-app 移除 ESLint 语法检查

ESLint 的作用&#xff1a; ESLint 是一个流行的 JavaScript 代码静态检查工具&#xff0c;旨在帮助开发者识别和修复代码中的问题。以下是关于 ESLint 的一些关键信息&#xff1a; 主要功能&#xff1a; 1.代码风格检查&#xff1a;ESLint 可以检查代码是否符合特定的编码风…

基于STM32开发的智能农业监测与控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理自动灌溉与环境控制数据融合与决策算法OLED显示与状态提示Wi-Fi通信与远程监控应用场景 温室环境的智能监控与自动化控制农田土壤与作物生长的实时监测常见问题…

2017年系统架构师案例分析试题四

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(9 分) 【问题 3】(7 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于数据库设计的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某制造企业为拓展网上销售业…

强化学习,第 6 部分:n 步 Bootstrapping

一、介绍 1.1 概述 R强化学习是机器学习中的一个领域&#xff0c;它引入了智能体在复杂环境中学习最佳策略的概念。代理从其操作中学习&#xff0c;从而根据环境的状态获得奖励。强化学习是一个具有挑战性的话题&#xff0c;与机器学习的其他领域有很大不同。 强化学习的显着…

Linux--实现U盘,SD卡的自动挂载

1. 编辑/etc/init.d/rsC或S10mdev文件 在/etc/init.d/rsC或S10mdev中加入以下语句&#xff1a; echo /sbin/mdev > /proc/sys/kernel/hotplug 当有热插拔事件产生时&#xff0c;内核会调用/proc/sys/kernel/hotplug文件里指定的应用程序来处理热插拔事件。把/sbin/mdev写…