家居购项目 1.分页导航 2.购物车 3.订单生成

news2024/11/27 9:39:58

文章目录

  • 🐀Java后端经典三层架构
    • 🐇MVC模型
    • 🐇开发环境搭建
    • 🐇会员注册
      • 🌳前端验证用户注册信息
      • 🌳思路分析
        • 🍉创建表
        • 🍉创建实体类
        • 🍉DAO
          • 🍌MemberDAOImpl
        • 🍉Service
          • 🍌MemberServiceImpl
        • 🌳接通web层
    • 🐇会员登陆
      • 🌳登陆错误_信息回显
    • 🐇servlet合并
      • 🍎反射+模板设计模式+动态代理
      • 🌳显示家居
      • 🌳添加家居
          • 🍉解决重复添加
          • 🍉后端数据校验说明
          • 🍉BeanUtils自动封装Bean
      • 🌳删除家居
      • 🌳修改家具
      • 🍃后台分页
        • 🍒新建Page类
        • 🍒DAO
        • 🍒Service
        • 🍒web层获取page对象
        • 🍒前端页面
          • 🍅后台分页导航
          • 🍅修改后返回原页面
          • 🍅删除后返回原页面
          • 🍅添加后返回原页面
      • 🍃首页分页
          • 🍅首页搜索
          • 🍅两个奇怪的问题
      • 🌳会员显示登录名
          • 🍅注销登录
          • 🍅验证码
      • 🌳购物车

🐀Java后端经典三层架构

在这里插入图片描述

分层对应包说明
web层com.zzw.furns.web/servlet/controller/handler接受用户请求, 调用service
service层com.zzw.furns.serviceService接口包
com.zzw.furns.service.implService接口实现类
dao持久层com.zzw.furns.daoDao接口包
com.zzw.furns.dao.implDao接口实现类
实体bean对象com.zzw.furns.pojo/entity/domain/beanJavaBean类
工具类com.zzw.furns.utils工具类
测试包com.zzw.furns.test完成对dao/service测试

🐇MVC模型

MVC全称: Model模型, View试图, Controller控制器
MVC最早出现在JavaEE三层中的Web层, 它可以有效地指导WEB层代码如何有效地分离, 单独工作

  • View试图: 只负责数据和界面的显示, 不接受任何与显示数据无关的代码, 便于程序员和美工的分工与合作(Vue/Jsp/Thymeleaf/Html)
  • Controller控制器: 只负责接收请求, 调用业务层的代码处理请求, 然后派发给页面, 是一个"调度者"的角色
  • Model模型: 将与业务逻辑相关的数据封装为具体的JavaBean类, 其中不掺杂任何与数据处理相关的代码(JavaBean/Domain/Pojo)

在这里插入图片描述
在这里插入图片描述

解读

  1. model 最早期就是javabean, 就是早期的jsp+servlet+javabean
  2. 后面业务复杂度越来越高, model逐渐分层化/组件化(service+dao)
  3. 后面又出现了持久化技术(service+dao+持久化技术(hibernate / mybatis / mybatis-plus))
  4. MVC依然是原来的mvc, 只是变得更加强大

🐇开发环境搭建

详情请参考👉

  1. 新建Java项目, 导入web框架在这里插入图片描述
  2. 导入jar包
    在这里插入图片描述
  3. 项目的结构
    在这里插入图片描述
    在这里插入图片描述
  4. 拷贝到web路径下
    在这里插入图片描述
    在这里插入图片描述
  5. 配置Tomcat
    Rebuild project, 让项目识别到这些资源, 然后再启动Tomcat
    在这里插入图片描述
  6. 对于复杂的前端页面, 要学会打开当前页面的结构, 提高工作效率
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

🐇会员注册

🌳前端验证用户注册信息

    <script type="text/javascript" src="../../script/jquery-3.6.0.min.js"></script>
    <script type="text/javascript">
        $(function () {//页面加载完毕后执行 function
            $("#sub-btn").click(function () {
                //采用过关斩将法
                //正则表达式验证用户名
                var usernameValue = $("#username").val();
                var usernamePattern = /^\w{6,10}$/;
                if (!usernamePattern.test(usernameValue)) {
                    $("span[class='errorMsg']").text("用户名格式不对, 需要6-10个字符(大小写字母,数字,下划线)");
                    return false;
                }
                //验证密码
                var passwordValue = $("#password").val();
                var passwordPattern = /^\w{6,10}$/;
                if (!passwordPattern.test(passwordValue)) {
                    $("span.errorMsg").text("密码格式不对, 需要6-10个字符(大小写字母,数字,下划线)");
                    return false;
                }
                //两次密码要相同
                var rePwdValue = $("#repwd").val();
                if (passwordValue != rePwdValue) {
                    $("span.errorMsg").text("两次密码不相同");
                    return false;
                }
                //这里仍然采用过关斩将法
                //验证邮件
                var emailVal = $("#email").val();
                //在java中, 正则表达式的转义是\\; 在js中, 正则表达式转义是\
                var emailPattern = /^[\w-]+@([a-zA-Z]+\.)+[a-zA-Z]+$/;
                if (!emailPattern.test(emailVal)) {
                    $("span.errorMsg").text("电子邮件的格式不正确, 请重新输入");
                    return false;
                }
                //这里暂时不提交=>显示验证通过
                $("span.errorMsg").text("验证通过");
                return false;
            });
        })
    </script>

🌳思路分析

创建表->javabean->DAO->service
在这里插入图片描述

分层对应包说明
web层RegisterServlet.java接受浏览器发送数据; 调用相关的service;根据执行结果,返回页面数据
service层MemberService.javaService接口包
MemberServiceImpl.javaService接口实现类
dao持久层MemberDAO.javaDao接口包
MemberDAOImplDao接口实现类
实体bean对象Member.javaJavaBean类
工具类JdbcUtilsByDruid.java工具类

🍉创建表

在这里插入图片描述

🍉创建实体类

包括无参构造器和set方法. 如果添加有参构造器, 记得书写无参构造器

  1. 从满汉楼项目引入BasicDAO.java, JdbcUtilsByDruid.java, Druid.properties
  2. 修改Druid配置文件要连接的数据库名, 确保用户名密码正确. url后面是做批处理用的
    在这里插入图片描述
  3. 修改JdbcUtilsByDruid的路径
    在这里插入图片描述
    配置快捷键
    在这里插入图片描述
    在这里插入图片描述
  4. 测试
    在这里插入图片描述

🍉DAO

在这里插入图片描述

🍌MemberDAOImpl
public class MemberDAOImpl extends BasicDAO<Member> implements MemberDAO {
   /**
    * 通过用户名返回对应的Member
    * @param username 用户名
    * @return 对应的Member, 如果没有该Member返回null
    */
   @Override
   public Member queryMemberByUsername(String username) {
       //现在sqlyog测试, 然后再拿到程序中, 这样可以提高我们的开发效率, 减少不必要的bug
       String sql = "SELECT id, username, `password`, email FROM member WHERE username = ?";
       Member member = querySingle(sql, Member.class, username);
       return member;
   }

   /**
    * 保存一个会员
    * @param member 传入一个Member对象
    * @return 如果返回-1, 就是失败; 返回其它的数字, 就是受影响的行数
    */
   @Override
   public int saveMember(Member member) {
       //连同单引号一并换成 ? , 它会自动加上单引号
       String sql = "INSERT INTO member(id, username, `password`, email) " +
               "VALUES(NULL, ?, MD5(?), ?)";
       int updateRows = update(sql, member.getUsername(), member.getPassword(), member.getEmail());
       return updateRows;
   }
}

测试
在这里插入图片描述

🍉Service

在这里插入图片描述

🍌MemberServiceImpl
public class MemberServiceImpl implements MemberService {
   //定义MemberDAO属性
   private MemberDAO memberDAO = new MemberDAOImpl();

   /**
    * 判断用户名是否存在
    *
    * @param username 用户名
    * @return 如果存在返回true, 否则返回false
    */
   @Override
   public boolean isExistsByUsername(String username) {
       //小技巧: 如果看某个方法:
       // (1)ctrl+b 定位到memberDAO的编译类型中的方法
       // (2)如果使用ctrl+alt+b 会定位到实现类的方法
       //如果有多个类实现了该方法, 会让你选择
       return memberDAO.queryMemberByUsername(username) == null ? false : true;
   }

   @Override
   public boolean registerMember(Member member) {
       return memberDAO.saveMember(member) == 1 ? true : false;
   }
}

在这里插入图片描述
测试
在这里插入图片描述

🌳接通web层

在这里插入图片描述
将所有路径修改成相对路径
在这里插入图片描述
在这里插入图片描述
配置RegisterServlet, 请求RegisterServlet
在这里插入图片描述

🐇会员登陆

MemberDAO
在这里插入图片描述
在这里插入图片描述
MemberDAOImpl
在这里插入图片描述
测试(不要忘了测试)
在这里插入图片描述
快捷键
在这里插入图片描述
在这里插入图片描述

MemberService
在这里插入图片描述
在这里插入图片描述
测试(不要忘了测试)
在这里插入图片描述

web层

  1. 新建LoginServlet
    在这里插入图片描述
    login.html请求
    在这里插入图片描述
    login_ok.html
    在这里插入图片描述
    快捷键
    在这里插入图片描述
    效果
    在这里插入图片描述
    在这里插入图片描述

🌳登陆错误_信息回显

将login.html重命名为login.jsp, 修改base标签

LoginServlet
在这里插入图片描述
login.jsp
在这里插入图片描述
添加span标签
在这里插入图片描述

🐇servlet合并

方法一: 增加隐藏域
在这里插入图片描述
合并到MemberServlet
在这里插入图片描述

🍎反射+模板设计模式+动态代理

在这里插入图片描述
在这里插入图片描述

🌳显示家居

需求分析

  1. 给后台管理提供独立登陆页面 manage_login.jsp(已提供)
  2. 管理员(admin表)登陆成功后, 显示管理菜单页面
  3. 管理员点击家具管理, 显示所有家居信息

程序框架图
在这里插入图片描述

  1. 页面准备在这里插入图片描述在这里插入图片描述
  2. 新建admin表 👉 参考member表
    新建furn表
    在这里插入图片描述
  3. 新建Admin实体类
    新建Furn实体类
    在这里插入图片描述
  4. 书写AdminDAO, AdminDAOImpl, 并测试; 书写AdminService, AdminServiceImpl, 并测试 👉 参考Member
    书写FurnDAO, FurnDAOImpl 👉 并测试
    在这里插入图片描述
  5. 书写FurnService, FurnServiceImpl 👉 并测试
    在这里插入图片描述
  6. 接通web层
    配置web.xml, 书写AdminServlet
    在这里插入图片描述
    配置web.xml, 书写FurnServlet
    在这里插入图片描述
    在这里插入图片描述
    将doGet()方法移到BasicServlet中
    在这里插入图片描述
  7. 前端页面
    manage_login.jsp 登录验证, 请求AdminServlet
    在这里插入图片描述
    在这里插入图片描述
    manage_menu.jsp 请求FurnServlet
    在这里插入图片描述
    furn_manage.jsp 显示家居信息
    在这里插入图片描述

🌳添加家居

思路分析

  1. 请求添加家居, 请求FurnServlet的add方法, 将前端提交的数据封装到Furn对象
  2. 调用FurnService.add(Furn furn)方法
  3. 跳转到显示家居的页面
  1. FurnDAO
    在这里插入图片描述
  2. FurnService
    在这里插入图片描述
  3. web层
    FurnServlet
    在这里插入图片描述
    解决中文乱码问题
    在这里插入图片描述
  4. 前端: 添加furn_add.jsp
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
🍉解决重复添加

请求转发, 当用户刷新页面时, 会重新发出第一次的请求, 造成数据重复提交
在这里插入图片描述
解决方案: 使用重定向
在这里插入图片描述
在这里插入图片描述

🍉后端数据校验说明

后端方案一
在这里插入图片描述后端方案二
在这里插入图片描述
前端方案三
在这里插入图片描述

🍉BeanUtils自动封装Bean

引入: commons-logging-1.1.1.jar, commons-beanutils-1.8.0.jar

  1. 使用BeanUtils自动封装javabean
    在这里插入图片描述debug小技巧👉
    在这里插入图片描述
  2. 报错
    原因: 由于前端没有传imagePath的字段, 所有后端在构建的furn对象的时候, imagePath传了个null,
    解决方案👇
    在这里插入图片描述
  3. 将 把数据自动封装成JavaBean的功能封装到工具类
public class DataUtils {
   //将方法, 封装到静态方法, 方便使用
   public static <T> T copyParamToBean(Map value, T bean) {
       try {
           BeanUtils.populate(bean, value);
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
       return bean;
   }
}

调用
在这里插入图片描述

🌳删除家居

需求分析

  1. 管理员进入到家居管理页面
  2. 点击删除家居链接, 弹出确认窗口, 确认-删除, 取消-放弃

程序框架图
在这里插入图片描述

  1. FurnDAO
    在这里插入图片描述
  2. FurnService
    >
  3. web层
    FurnServlet
    在这里插入图片描述
  4. furn_add.jsp页面
    jQuery操作父元素, 兄弟元素, 子元素, 请移步👉
    js弹框请移步👉
    在这里插入图片描述
    在这里插入图片描述

🌳修改家具

思路分析

  1. 管理员进入家居管理页面furn_manage.jsp
  2. 点击修改家居链接, 回显该家居信息 [furn_update.jsp]
  3. 填写新的信息, 点击修改家居按钮
  4. 修改成功后, 显示刷新后的家居列表

程序框架图
在这里插入图片描述

  1. FurnDAO
    在这里插入图片描述
    在这里插入图片描述
  2. FurnService
    在这里插入图片描述
    在这里插入图片描述
  3. web层
    FurnServlet
    在这里插入图片描述
    在这里插入图片描述
  4. 前端
    furn_manage.jsp 点击修改,发出请求
    在这里插入图片描述
    furn_update.jsp 修改数据,点击提交
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

🍃后台分页

shortcuts: ctrl+alt+u👉在局部打开类图
程序框架图

🍒新建Page类

在这里插入图片描述

🍒DAO

思路
在这里插入图片描述
实现
在这里插入图片描述
在这里插入图片描述

🍒Service

在这里插入图片描述
在这里插入图片描述

🍒web层获取page对象

在这里插入图片描述

🍒前端页面

取缔list方法
在这里插入图片描述
在这里插入图片描述
furn_manage.jsp
在这里插入图片描述

🍅后台分页导航

程序框架图

<!--  Pagination Area Start -->
<div class="pro-pagination-style text-center mb-md-30px mb-lm-30px mt-6" data-aos="fade-up">
   <ul>
       <%--如果当前页 > 1, 就显示首页和上一页--%>
       <li><a style="pointer-events:${requestScope.page.pageNo == 1 ? "none" : "auto"};"
              href="manage/furnServlet?action=page&pageNo=1&pageSize=${requestScope.page.pageSize}">首页</a>
       </li>
       <li><a style="pointer-events: ${requestScope.page.pageNo == 1 ? "none" : "auto"}"
              href="manage/furnServlet?action=page&pageNo=${requestScope.page.pageNo - 1}&pageSize=${requestScope.page.pageSize}">上一页</a>
       </li>

       <%--显示所有的分页数 先确定开始的页数 begin 1; 再确定结束的页数 end=>pageTotal--%>
       <%--最多显示10, 这里涉及算法--%>
       <c:set scope="page" var="begin" value="1"></c:set>
       <c:set scope="page" var="end" value="${requestScope.page.pageTotal}"></c:set>
       <%--循环显示--%>
       <c:forEach begin="${pageScope.begin}" end="${pageScope.end}" var="i"><%--总的页数--%>
           <%--如果i是当前页, 就使用class="active"来修饰--%>
           <li><a class="${i eq requestScope.page.pageNo ? "active" : ""}"
                  href="manage/furnServlet?action=page&pageNo=${i}&pageSize=${requestScope.page.pageSize}">${i}</a>
           </li>
       </c:forEach>

       <%--如果当前页 < 总的页数, 就显示末页和下一页--%>
       <li>
           <a style="pointer-events:${requestScope.page.pageNo == requestScope.page.pageTotal ? "none" : "auto"};"
              href="manage/furnServlet?action=page&pageNo=${requestScope.page.pageNo + 1}&pageSize=${requestScope.page.pageSize}">下一页</a>
       </li>
       <li>
           <a style="pointer-events:${requestScope.page.pageNo == requestScope.page.pageTotal ? "none" : "auto"};"
              href="manage/furnServlet?action=page&pageNo=${requestScope.page.pageTotal}&pageSize=${requestScope.page.pageSize}">末页</a>
       </li>

       <li><a>共${requestScope.page.pageTotal}</a></li>
       <li><a>共${requestScope.page.totalRow}记录</a></li>
   </ul>
</div>
<!--  Pagination Area End -->
🍅修改后返回原页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍅删除后返回原页面

在这里插入图片描述
在这里插入图片描述

🍅添加后返回原页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍃首页分页

需求分析

  1. 顾客进入首页页面
  2. 分页显示家居
  3. 正确显示分页导航条, 即功能完善, 可以使用

程序框架图
在这里插入图片描述

实现>1. 新建CustomerFurnServlet
在这里插入图片描述
2. 前端页面
在这里插入图片描述
直接请求CustomerFurnServlet, 获取网站首页要显示的分页数据
类似我们网站的入口页面👉jsp请求转发标签
在这里插入图片描述
index.jsp
在这里插入图片描述
3. 显示数据

<c:forEach items="${requestScope.page.items}" var="furn">
   <div class="col-lg-3 col-md-6 col-sm-6 col-xs-6 mb-6" data-aos="fade-up"
        data-aos-delay="200">
       <!-- Single Product -->
       <div class="product">
           <div class="thumb">
               <a href="shop-left-sidebar.html" class="image">
                   <img src="${furn.imagePath}" alt="Product"/>
                   <img class="hover-image" src="assets/images/product-image/5.jpg"
                        alt="Product"/>
               </a>
               <span class="badges">
                   <span class="sale">-10%</span>
                   <span class="new">New</span>
               </span>
               <div class="actions">
                   <a href="#" class="action wishlist" data-link-action="quickview"
                      title="Quick view" data-bs-toggle="modal"
                      data-bs-target="#exampleModal"><i
                           class="icon-size-fullscreen"></i></a>
               </div>
               <button title="Add To Cart" class=" add-to-cart">Add
                   To Cart
               </button>
           </div>
           <div class="content">
               <h5 class="title">
                   <a href="shop-left-sidebar.html">Simple ${furn.name} </a></h5>
               <span class="price">
                   <span class="new">家居: ${furn.name}</span>
               </span>
               <span class="price">
                   <span class="new">厂商: ${furn.business}</span>
               </span>
               <span class="price">
                   <span class="new">价格: ${furn.price}</span>
               </span>
               <span class="price">
                   <span class="new">销量: ${furn.saleNum}</span>
               </span>
               <span class="price">
                   <span class="new">库存: ${furn.inventory}</span>
               </span>
           </div>
       </div>
   </div>
</c:forEach>

分页导航

<!--  Pagination Area Start -->
<div class="pro-pagination-style text-center mb-md-30px mb-lm-30px mt-6" data-aos="fade-up">
   <ul>
       <li><a style="pointer-events: ${requestScope.page.pageNo > 1 ? "auto" : "none"}"
              href="customerFurnServlet?action=page&pageNo=1&pageSize=${requestScope.page.pageSize}">首页</a>
       </li>
       <li><a style="pointer-events: ${requestScope.page.pageNo > 1 ? "auto" : "none"}"
              href="customerFurnServlet?action=page&pageNo=${requestScope.page.pageNo - 1}&pageSize=${requestScope.page.pageSize}">上一页</a>
       </li>

       <c:set scope="page" var="begin" value="1"></c:set>
       <c:set scope="page" var="end" value="${requestScope.page.pageTotal}"></c:set>
       <c:forEach begin="${begin}" end="${end}" var="i">
           <li><a class="${i == requestScope.page.pageNo ? "active" : ""}"
                  href="customerFurnServlet?action=page&pageNo=${i}&pageSize=${requestScope.page.pageSize}">${i}</a>
           </li>
       </c:forEach>

       <li><a style="pointer-events: ${requestScope.page.pageNo < requestScope.page.pageTotal ? "auto" : "none"}"
              href="customerFurnServlet?action=page&pageNo=${requestScope.page.pageNo + 1}&pageSize=${requestScope.page.pageSize}">下一页</a>
       </li>
       <li><a style="pointer-events: ${requestScope.page.pageNo < requestScope.page.pageTotal ? "auto" : "none"}"
              href="customerFurnServlet?action=page&pageNo=${requestScope.page.pageTotal}&pageSize=${requestScope.page.pageSize}">末页</a>
       </li>
       <li><a>共${requestScope.page.pageTotal}</a></li>
       <li><a>共${requestScope.page.totalRow}记录</a></li>
   </ul>
</div>
<!--  Pagination Area End -->
🍅首页搜索

需求分析

  1. 顾客进入首页页面
  2. 点击搜索按钮, 可以输入家居名
  3. 正确显示分页导航条, 并且要求在分页时, 保留上次搜索条件

程序框架图
在这里插入图片描述

  1. DAO
    模糊查询👉
    在这里插入图片描述
    在这里插入图片描述
  2. service
    在这里插入图片描述
    在这里插入图片描述
  3. web层 CustomerFurnServlet
    page方法就被抛弃了
    在这里插入图片描述
  4. 前端 index.jsp

    在这里插入图片描述
🍅两个奇怪的问题
  1. 点击家居管理, 发出两个请求
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    抓包
    在这里插入图片描述
    原因
    在这里插入图片描述
    请求首页面即进入到indx.jsp, index.jsp又请求转发到CustomerFurnServlet
    在这里插入图片描述
    问题解决
  2. 首页分页出现问题
    在这里插入图片描述
    在这里插入图片描述
    原因
    在这里插入图片描述

🌳会员显示登录名

需求分析

  1. 会员登陆成功, login_ok.jsp显示登录信息
  2. 如果登陆成功后返回首页面, 显示订单管理和安全退出
  3. 如果用户没有登陆过, 首页就显示登录和注册超链接

程序框架图
在这里插入图片描述

实现
重命名时, 会联动修改在这里插入图片描述在这里插入图片描述
将login_ok.jsp中的index.html改成index.jsp. 注意, 不要改成views/customer/index.jsp在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍅注销登录

思路分析

  1. 用户登录成功后
  2. login_ok.jsp, 点击安全退出, 注销登录
  3. 返回首页, 也可点击安全退出, 注销登录

程序框架图
在这里插入图片描述
实现
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

🍅验证码

程序框架图
在这里插入图片描述

  1. web层
    KaptchaServlet -> 引入kaptcha-2.3.2.jar包, 在web.xml中配置KaptchaServlet
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    MemberServlet
    在这里插入图片描述
    在这里插入图片描述
  2. 前端页面
    login.jsp
    在这里插入图片描述
    验证码不能为空
    在这里插入图片描述点击图片更换验证码
    在这里插入图片描述
    将register_ok.html, register_fail.html改造成jsp页面
    login.jsp页面总是默认停留在会员登录的div内, 修改
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述注册回显信息
    在这里插入图片描述在这里插入图片描述

🌳购物车

程序框架图
在这里插入图片描述

实现

  1. 创建CartServlet
    在这里插入图片描述

🐀🐂🐅🐇🐉🐍🐎🐏

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

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

相关文章

怎么编辑pdf里面的文字?好用工具分享

PDF文件是一种非常常见的电子文档格式&#xff0c;它具有通用性、易分享、易打印的特点&#xff0c;因此广泛应用于各个领域中。然而&#xff0c;PDF文件通常是只读的&#xff0c;如果需要修改其中的文字&#xff0c;就需要使用专业的PDF编辑软件或者在线编辑工具。 市场上有很…

cuda编程学习——原子函数(十)

前言 参考资料&#xff1a; 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 CUDA编程&#xff1a;基础与实践 樊哲勇 文章所有代码可在我的GitHub获得&#xff0c;后续会慢慢更新 文章、讲解视频同步更新公众《AI知识物语》&#xff0c;B站&#xff1a;出门吃三碗饭 …

文心一言 VS 讯飞星火 VS chatgpt (28)-- 算法导论5.1 3题

三、假设你希望以1/2的概率输出0与 1。你可以自由使用一个输出0或1的过程 BIASED-RANDOM。它以某概率 p 输出1&#xff0c;概率 1-p 输出0&#xff0c;其中 0<p<1 &#xff0c;但是 p 的值未知。请给出一个利用 BIASED-RANDOM 作为子程序的算法&#xff0c;返回一个无偏的…

pwm led

PWM Dimming (脉冲宽度调制) 调光——是一种利用简单的数字脉冲&#xff0c;反复开关灯光LED驱动器的调光技术。通过程序控制输出宽、窄不同的数字式脉冲&#xff0c;即可简单地实现改变输出电流&#xff08;电压&#xff09;&#xff0c;从而调节LED灯的亮度。 当PWM不是满占空…

真无线蓝牙耳机哪个牌子好用?六款真无线蓝牙耳机品牌推荐

无论我们是看视频还是在路上听音乐&#xff0c;真无线蓝牙耳机可以丰富我们的一天。然而&#xff0c;问题是有太多的选择&#xff0c;许多人不知道哪一款的性价比高音质好&#xff0c;下面小编特意整理了一期性价比高音质好的蓝牙耳机。 第一款&#xff1a;南卡小音舱lite2 蓝…

运维小白必学篇之基础篇第一集:Linux相关命令实验

Linux相关命令实验 实验者&#xff1a;胡 阳 命令提示符 【rootlocalhost ~】# 【当前登录系统的用户主机名 当前工作目录】提示符 &#xff08;# 表示 管理员&#xff09; &#xff08;&#xff04; 表示 普通用户&#xff09; 基本格式&#xff1a;命令 【选项】 【…

一文带你学习前端 - 自动化测试

theme: devui-blue 前端自动化测试 1. 自动化测试基本概念介绍 前言 一般我们实现功能&#xff0c;基本都是两部分写代码&#xff0c;调试/测试。写代码和测试的时间&#xff0c;基本都是55分。如果是测试逻辑&#xff0c;可能要打一下log&#xff0c;或者打断点去调试。测…

行业报告 | 工业机器视觉深度报告——兼具高成长和成熟技术的AI应用赛道

原创 | 文 BFT机器人 01 核心要点 核心观点: 工业机器视觉是高技术壁垒、商业模式成熟、国产替代迅速、行业快速发展的优秀赛道。行业端&#xff1a;3C电子是最主要的行业&#xff0c;新能源行业增速最快&#xff0c;受益于质量管控政策和行业高增速。技术端&#xff1a;大模型…

让工作效率提升10倍:十大AIGC工具评测

AI技术的普及已经在近年来不断增长。这种技术已经改变了我们与电脑的互动方式&#xff0c;让我们能够更高效、更自然地完成任务。本文将展示10个基于ChatGPT和GPT-3 AI模型构建的最强大的资源&#xff0c;使您更容易充分利用它们的潜力。因此&#xff0c;如果您想利用AI技术改进…

DiscoTOC - 自动内容表格

示例 桌面 移动终端 特性 toc table of contents&#xff08;内容列表&#xff09; 通过菜单上面的设置按钮&#xff0c;根据当前内容的状况一键生成 toc 列表Toc 将会一直在页面中尽显显示 —— 滚动内容与 topic 的链接是同步的当你滚动过当前页面中中的主题的时候&#…

Python numpy - 数组的创建与访问

目录 一 数组array的创建途径 1 列表list 2 函数array 3 函数arange 4 函数zeros 5 函数eyes 6 随机函数randn/ randint 二 数组array的访问 1 访问形状/元素个数/数据类型 2 访问一维数组的位置/范围 3 访问二维数组的位置/范围 4 用&#xff1a;访问二维数组的…

美国餐饮连锁集团【CAVA Group】申请纽交所IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;来自美国的餐饮连锁集团【CAVA Group】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纽交所IPO上市&#xff0c;股票代码为(CAVA) &#xff0c;CAVA Group…

基于SSM的疫情物资管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

公民开发者学习无代码编程,从CRUD开始

目录 1 创建数据表2 创建新增页面3 新增功能开发4 预览总结 自从Forrester2014年提出低代码的概念后&#xff0c;对于编程人员重新进行了划分。使用传统开发工具&#xff0c;使用代码进行编程的叫专业开发人员。使用低代码或者无代码开发工具&#xff0c;作为企业内部的人员&am…

基于深度学习的高精度老鼠检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度老鼠检测识别系统可用于日常生活中检测与定位老鼠目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的老鼠目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据…

如何确定bug是前端还是后端的错误?

前言&#xff1a;学会分析一个bug属于前端还是后端的错误&#xff0c;可方便开发快速定位问题&#xff0c;缩短与开发的沟通成本&#xff0c;也是测试人员的必备技能&#xff0c;笔者面试时就曾经被问到过&#xff0c;那就一起分析一波吧。 一、定义bug类型&#xff1a; 1、…

app渗透-抓包

app渗透-1 前言1.模拟器2.抓包工具-Fiddler2.1抓app包2.1.1设置模拟器2.1.2设置fiddler2.1.3使用 2.2抓小程序2.2.1抓包2.2.2解决抓不到https2.2.3解决抓不到包-12.2.4解决抓不到包-22.2.5解决抓不到包-3 前言 不要把app和小程序想的多困难&#xff0c;其实就是一个小的网站塞…

2023-06-01:讲一讲Redis常见数据结构以及使用场景。

2023-06-01&#xff1a;讲一讲Redis常见数据结构以及使用场景。 答案2023-06-01&#xff1a; 字符串&#xff08;String&#xff09; 适合场景 缓存功能 Redis 作为缓存层&#xff0c;MySQL 作为存储层&#xff0c;在大部分请求中&#xff0c;数据的读取通常是从 Redis 中…

Python笔记(更新ing)

目录 第一章 Python初识1、什么是编程语言2、第一个Python程序 第二章 基本语法1、 字面量2、 注释3、 变量4、 数据类型5、 数据类型转换6、 标识符7、 运算符8、 字符串扩展9、 字符串拼接10、 字符串格式化11、 字符串格式化的精度控制12、 字符串格式化的方式二13、 对表达…

deepin安装docker和pytorch

title: deepin安装docker和pytorch date: 2023-06-01 17:28:58 tags: [linux, torch,docker] deepin安装docker和pytorch 总体的流程图大致如下&#xff0c;首先是安装linux&#xff0c;这个直接跳过&#xff0c;接下来就是安装docker&#xff0c;之后&#xff0c;安装docker之…