家居购项目 (上)

news2024/10/1 19:31:13

文章目录

  • 🐀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控制器
在这里插入图片描述

🐇开发环境搭建

详情请参考👉

  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. 引入kaptcha-2.3.2.jar包, 在web.xml中配置KaptchaServlet
    在这里插入图片描述在这里插入图片描述

🐀🐂🐅🐇🐉🐍🐎🐏

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

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

相关文章

ISO21434 组织网络安全管理

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 网络安全治理 4.2 网络安全文化 4.3 信息共享 4.4 管理系统 4.5 工具管理 4.6 信息安全管理 4.7 组织网络安全审计 五、输出 一、概述 为了实现网络安全工程&#xff0c;该…

Rotary Position Embedding (RoPE, 旋转式位置编码) | 原理讲解+torch代码实现

&#x1f525; RoPE为苏剑林大佬之作&#xff0c;最早应用于他自研的RoFormer (Rotary Transformer)&#xff0c;属于相对位置编码。效果优于绝对位置编码和经典式相对位置编码。出自论文&#xff1a;《RoFormer: Enhanced Transformer with Rotary Position Embedding》 &…

轻松高效!三种方法教你音频转文字!

我们在日常生活中&#xff0c;总会遇到许多需要音频转文字的情况。这个时候大部分小伙伴会选择一边播放音频一边记录的方式来整理音频的内容&#xff0c;这样既麻烦又费时&#xff0c;整理的效率也不高。其实我们只需要使用软件来协助我们将音频转换成文字&#xff0c;就可以很…

2023年03月六级真题全3套【可复制可划线查词】共11页PDF

2023年03月六级真题全3套【可复制可划线查词】共11页PDF 2023年03月六级真题全3套【可复制可划线查词】共11页PDF 2023年03月六级真题全3套【可复制可划线查词】共11页PDF

html基础知识总结

&#xff08;一&#xff09;html 1、html html&#xff1a;超文本标签语言&#xff0c;专门用来制作网页的一门语言。超文本&#xff1a;就是它不仅可以放文本内容&#xff0c;还可以是图片&#xff0c;声音&#xff0c;视频&#xff0c;多媒体等等内容 2、 html标签的分类 …

ASEMI双向可控硅BT137性能特点, BT137应用及购买指南

编辑-Z 本文将详细介绍可控硅BT137的性能特点、应用领域以及购买时需要注意的事项&#xff0c;帮助您更好地了解和选择BT137可控硅。 一、BT137可控硅简介 可控硅&#xff08;Silicon Controlled Rectifier&#xff0c;简称SCR&#xff09;是一种四层三端半导体器件&#xff…

sql 优化----》1)分析与定位策略

https://www.cnblogs.com/cshaptx4869/p/10482500.html 1&#xff1a;通过 show status 了解各种的SQL的执行频率 2&#xff1a;定位执行频率低的SQL语句: 1):通过慢日志定位 慢日志&#xff1a;可以通过两个方式配置 方式一&#xff1a;配置文件&#xff0c;my.cnf show_query…

25 # eventloop 执行流程

浏览器事件环 1、浏览器的进程 进程是计算机调度的基本单位&#xff0c;进程中包含着线程&#xff0c;浏览器是多进程进程&#xff0c;大致有下面几种 每一个页卡都是进程&#xff08;互不影响&#xff09;浏览器也有一个主进程&#xff08;用户界面&#xff09;每一个页卡里…

聊一聊行业的前景、就业方向和薪资待遇

软件测试行业是和软件开发相辅相成得一个行业&#xff0c;但目前大家对于软件测试行业的了解并不多&#xff0c;甚至很多学了软件测试的朋友也不是很了解。今天&#xff0c;就来给大家说一说&#xff0c;软件测试行业的前景、就业方向和薪资待遇。 岗位前景 很多小伙伴都曾听…

【PHPWord】PHPWord 根据word模板生成的内容动态生成目录以及页码

文章目录 一、需求分析二、PHPWord 中模板页码的设置三、模板内生成目录四、总结一、需求分析 在实际业务中,我们可能需要根据一些比较复杂的业务模板,生成对应的Word 文件。 本文将掌握: 使用模板配置页码使用模板插入目录二、PHPWord 中模板页码的设置 1.配置页码 注意…

dex2jar 报错 com.googlecode.d2j.DexException: not support version

​ 目录 ​ 一.问题发现 二.调查原因&#xff1a; 三. 根本原因调查&#xff1a; 四.解决问题 一.问题发现 使用dex2jar工具反编的时候&#xff0c;一输入指令&#xff0c;结果报com.googlecode.d2j.DexException: not support version错误(如下图) 异常情况.png 二.调查…

Autosar之自签名证书与CA证书

文章目录 一、安全传输1.框架2.如何实现传输安全&#xff1f;3. 对称加密和非对称加密的区别&#xff1f;4.伪随机数和真随机数5.数字签名 —— 验证完整性 & 认证数据来源6.为什么使用摘要算法的数字签名可以验证完整性&#xff1f;7.为什么数字签名可以认证数据来源&…

南开大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 南开大学&#xff08;B&#xff09;考研难度&#xff08;☆☆☆☆☆☆&#xff09; 南开大学计算机学科的研究工作始于1958年&#xff0c;是在实力雄厚的数学学科和物理学科的基础上发展起来的&#xff0c;是我国最早…

关于Gitee上传代码以后主页没有显示贡献度(没有显示小绿块)

事情起因&#xff1a;在一个闲暇的下午&#xff0c;吃着火锅唱着歌&#xff0c;突然&#xff01;我发现我的Gitee有一片白 起初&#xff0c;没有人在意这场灾难 当我首次发现这个问题的时候&#xff0c;我毫无波澜的认为是Gitee出现了BUG。因为我的这些空白天数里都是有提交的…

Linux fork—进程控制

程序和进程 程序&#xff1a;是指编译好的二进制文件&#xff0c;在磁盘上&#xff0c;不占用系统资源(cpu、内存、打开的文件、设备、锁…)。进程&#xff1a;是一个抽象的概念&#xff0c;与操作系统原理联系紧密&#xff0c;进程是活跃的程序&#xff0c;占用系统资源&…

【备战秋招】每日一题:4月1日美团春招(二批)第二题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

大数据分析案例-基于Adaboost算法构建糖尿病预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

华为OD机试之打印机队列(Java源码)

打印机队列 题目描述 有5台打印机打印文件&#xff0c;每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分&#xff0c;所以队列中的文件有1~10不同的代先级&#xff0c;其中 数字越大优先级越高 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如…

5月29号软件资讯更新合集......

Paozhu C Admin 管理后台 1.4.0 版本发布 Paozhu C web 框架 1.4.0 版本发布。 提供一个完整的 admin 管理后台&#xff0c;支持图片管理&#xff0c;文件上传&#xff0c;修改百度开源编辑器 ueditor 上传管理程序为 c 框架自带 C ORM 框架&#xff0c;支持 HTTP/1 HTTP/2 …

InsCode AI 创作助手使用方法

CSDN最近推出了InsCode&#xff0c;可实现对话式AI辅助编程&#xff0c;能够帮助我们高效地创作文章&#xff0c;成倍提高生产力&#xff01;让我们一起来看看如何使用吧&#xff01; 首先&#xff0c;点击进入【发布】页面 右上角显示【创作助手】&#xff0c;可直接点击进入…