当前位置: 首页 > news >正文

JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码

1. 生鲜后台管理系统-注册功能

1.1. 注册功能

  (1)创建注册RegisterServlet,接收form表单中的参数。
  (2)service创建一个userService处理业务逻辑。
  (3)RegisterServlet将参数传递给servie层。
  (4)Dao层创建一个userDao操作数据库。
  (5)userService调用dao层userDao将用户注册信息加入到数据库中。
  (6)注册成功后RegisterServlet调用请求转发到login、jsp界面。

1.2. 步骤

在这里插入图片描述

  (1)创建RegisterServlet

package com.zzs.szsd.web;
import com.zzs.szsd.bean.User;
import com.zzs.szsd.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "RegisterServlet",urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {String id = request.getParameter("id");String name = request.getParameter("name");String password = request.getParameter("password");String email = request.getParameter("email");User user=new User();user.setName(name);user.setPassword(password);user.setEmail(email);UserService userService=new UserService();boolean register = userService.register(user);if (register) {response.sendRedirect(request.getContextPath()+"/login.jsp");}else {response.setContentType("text/html;charset=utf-8");response.getWriter().write("注册失败");}}protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {}
}

  (2)创建UserService

package com.zzs.szsd.service;
import com.zzs.szsd.bean.User;
import com.zzs.szsd.dao.UserDao;
import java.sql.SQLException;
public class UserService {/*** @method:register 用户注册* @params:[name, password, email]* @return: boolean*///1. 判断注册用户是否存在public boolean register(User user) {boolean register=false;UserDao userDao = new UserDao();boolean checkUser = userDao.checkUser(user.getName());//2. 如果不存在就将用户信息添加到数据库if (checkUser) {register = userDao.register(user);}return register;}/*** @method:login 用户登录* @params:[name, password]* @return: void*/public User login(String name, String password) throws SQLException {UserDao userDao=new UserDao();User user = userDao.login(name, password);return  user;}
}

  (3)创建UserDao

package com.zzs.szsd.dao;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.zzs.szsd.bean.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.SQLException;
public class UserDao {/*** @method:checkUser 检查用户是否存在* @params:[name]* @return: boolean*/public boolean checkUser(String name){try {ComboPooledDataSource dataSource=new ComboPooledDataSource();QueryRunner queryRunner=new QueryRunner(dataSource);String sql="select name from user where name=?";User user = queryRunner.query(sql, new BeanHandler<User>(User.class),name);//如果没有查询到数据 说明这个用户名没有注册过if (user==null) {return  true;}else {return  false;}} catch (SQLException e) {e.printStackTrace();return  false;}}/*** @method:register 用户注册* @params:[name, password, email]* @return: boolean*/public boolean register(User user) {try {ComboPooledDataSource dataSource=new ComboPooledDataSource();QueryRunner queryRunner=new QueryRunner(dataSource);String sql="insert into user values(null,?,?,?)";int row = queryRunner.update(sql, user.getName(), user.getPassword(), user.getEmail());//行数大于零说明注册成功if (row>0) {return  true;}else {return  false;}} catch (SQLException e) {e.printStackTrace();return  false;}}/*** @method:login 查询数据库* @params:[name, password]* @return: void*/public User login(String name, String password) throws SQLException {ComboPooledDataSource dataSource=new ComboPooledDataSource();QueryRunner queryRunner=new QueryRunner(dataSource);String sql="select * from user where name=? and password=?";User user = queryRunner.query(sql, new BeanHandler<User>(User.class),name,password);return  user;}
}

  (4)创建User实体类

package com.zzs.szsd.bean;public class User {private int id;private String name;private String password;private String email;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

  (5)修改c3p0-config.xml
在这里插入图片描述

<?xml version="1.0" encoding="utf-8" ?>
<c3p0-config><!-- 默认配置,如果没有指定则使用这个配置 --><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/fresh?useSSL=false</property><property name="user">root</property><property name="password">admin123</property><!-- 初始化池大小 --><property name="initialPoolSize">10</property><!-- 最大空闲时间 --><property name="maxIdleTime">30</property><!-- 最多有多少个连接 --><property name="maxPoolSize">15</property><!-- 最少几个连接 --><property name="minPoolSize">5</property><!-- 每次最多可以执行多少个批处理语句 --><property name="maxStatements">50</property></default-config><!-- 命名的配置 --><named-config name="51zixue"><!--这里是设置配置文件的名字--><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/fresh?useSSL=false</property><property name="user">root</property><!--mysql的登陆名--><property name="password">admin123</property><!--如果没密码就可以设置成<property name="password"></property>--><property name="acquireIncrement">5</property><!-- 如果池中数据连接不够时一次增长多少个 --><property name="initialPoolSize">10</property><property name="minPoolSize">5</property><property name="maxPoolSize">15</property><property name="maxStatements">0</property><property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him --></named-config>
</c3p0-config>

  (6)login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head><meta charset="UTF-8"/><title>Document</title><script type="text/javascript" src="static/js/jquery-1.9.0.min.js"></script><script type="text/javascript" src="static/js/login.js"></script><link href="static/css/login2.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>生鲜管理系统<sup>V2017</sup>
</h1><div class="login" style="margin-top: 50px;"><div class="header"><div class="switch" id="switch"><a class="switch_btn_focus" id="switch_qlogin"href="javascript:void(0);" tabindex="7">快速登录</a> <aclass="switch_btn" id="switch_login" href="javascript:void(0);"tabindex="8">快速注册</a><div class="switch_bottom" id="switch_bottom"style="position: absolute; width: 64px; left: 0px;"></div></div></div><div class="web_qr_login" id="web_qr_login"style="display: block; height: 235px;"><!--登录--><div class="web_login" id="web_login"><div class="login-box"><div class="login_form"><form action="user"accept-charset="utf-8" id="login_form" class="loginForm"method="post"><input type="hidden" name="method" value="login"/><input type="hidden" name="did" value="0"/> <input type="hidden"name="to" value="log"/><div class="uinArea" id="uinArea"><label class="input-tips" for="u">帐号:</label><div class="inputOuter" id="uArea"><input type="text" id="u" name="name" value="${cookie.name.value}" class="inputstyle"/></div></div><div class="pwdArea" id="pwdArea"><label class="input-tips" for="p">密码:</label><div class="inputOuter" id="pArea"><input type="password" id="p" name="password" value="${cookie.password.value}" class="inputstyle"/></div></div><div style="margin-left: 45px;margin-top: 10px"><input style="vertical-align: middle;" type="checkbox" value="yes" name="remember">记住密码<br/></div><div style="padding-left: 50px; margin-top: 20px;"><input type="submit" value="登 录" style="width: 150px;"class="button_blue"/></div></form></div></div></div><!--登录end--></div><!--注册--><div class="qlogin" id="qlogin" style="display: none;"><div class="web_login"><form name="form2" id="regUser" accept-charset="utf-8"action="register" method="post"><input type="hidden" name="to" value="reg"/> <input type="hidden"name="did" value="0"/><ul class="reg_form" id="reg-ul"><div id="userCue" class="cue">快速注册请注意格式</div><li><label for="user" class="input-tips2">用户名:</label><div class="inputOuter2"><input type="text" id="user" name="name" maxlength="16"class="inputstyle2"/></div></li><li><label for="passwd" class="input-tips2">密码:</label><div class="inputOuter2"><input type="password" id="passwd" name="password" maxlength="16"class="inputstyle2"/></div></li><li><label for="passwd2" class="input-tips2">确认密码:</label><div class="inputOuter2"><input type="password" id="passwd2" name="password2" maxlength="16"class="inputstyle2"/></div></li><li><label for="email" class="input-tips2">邮箱:</label><div class="inputOuter2"><input type="email" id="email" name="email" class="inputstyle2"/></div></li><li><div class="inputArea"><input type="submit" id="reg"style="margin-top: 10px; margin-left: 85px;"class="button_blue" value="同意协议并注册"/> <a href="#" class="zcxy"target="_blank.">注册协议</a></div></li><div class="cl"></div></ul></form></div></div><!--注册end-->
</div>
</body>
</body>
</html>

1.3. 效果

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

在这里插入图片描述

2. 生鲜后台管理系统-登录功能

2.1. 登录功能

  (1)创建注册LoginServlet,接收form表单中的参数。
  (2)LoginServlet将参数传递给servie层。
  (3)userService调用dao层,userDao将用户注册信息加入到数据库中。
  (4)登录成功后跳转到分类界面。

2.2. 步骤

  (1)新建LoginServlet

package com.zzs.szsd.web;
import com.zzs.szsd.bean.User;
import com.zzs.szsd.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String password = request.getParameter("password");UserService userService=new UserService();User user=null;try {//调用service中登录方法user = userService.login(name, password);} catch (SQLException e) {e.printStackTrace();}System.out.println("wed=w="+user);if (user!=null){//登录成功跳转生鲜种类列表界面response.sendRedirect(request.getContextPath()+"/category-list.jsp");}else {//登录失败提示response.setContentType("text/html;charset=utf-8");response.getWriter().write("用户登录失败");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

  (2)新建login.jsp

在这里插入图片描述

// An highlighted block
var foo = 'bar';

  (3)新建category-list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>index</title><link rel="stylesheet" href="static/css/bootstrap.min.css"><style type="text/css">body{ font-family: 'Microsoft YaHei';}/*.panel-body{ padding: 0; }*/</style>
</head>
<body>
<div class="jumbotron"><div class="container"><h3>——生鲜管理系统</h3></div>
</div>
<div class="container"><div class="main"><div class="row"><!-- 左侧内容 --><div class="col-md-3"><div class="list-group"><a href="${pageContext.request.contextPath}/category-list.jsp" class="list-group-item text-center active">生鲜列表</a><a href="${pageContext.request.contextPath}/category-add.jsp" class="list-group-item text-center ">新增生鲜</a></div></div><!-- 右侧内容 --><div class="col-md-9"><!-- 成功提示框 --><div class="alert alert-success alert-dismissible" role="alert"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="false">&times;</span><span class="sr-only">Close</span></button><strong>成功!</strong> 操作成功提示</div><!-- 失败提示框 --><div style="display: none" class="alert alert-danger alert-dismissible" role="alert"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button><strong>失败!</strong> 操作失败提示</div><!-- 自定义内容 --><div class="panel panel-default"><div class="panel-heading">生鲜列表</div><div class="panel-body"><table class="table table-striped table-responsive table-hover"><thead><tr><th>编号</th><th>名称</th><th>添加时间</th><th>类别</th><th>产地</th><th width="120">操作</th></tr></thead><tbody><c:forEach items="${page.list}" var="category"><tr><th>${category.c_id}</th><td>${category.c_name}</td><td>${category.createtime}</td><c:if test="${category.type==0}" ><td>未知</td></c:if><c:if test="${category.type==1}" ><td>猪牛羊肉</td></c:if><c:if test="${category.type==2}" ><td>海鲜水产</td></c:if><td>${category.place}</td><td><%--<a href="">详情</a>--%><a href="${pageContext.request.contextPath}/category?method=deleteCategory&c_id=${category.c_id}">删除</a><a href="${pageContext.request.contextPath}/category-update.jsp?c_id=${category.c_id}&c_name=${category.c_name}&type=${category.type}&place=${category.place}">修改</a></td></tr></c:forEach></tbody></table></div></div><%--<nav>--%><%--<ul class="pagination pull-right">--%><%--<li  class="previous"><a href="#">&laquo;</a></li>--%><%--<c:forEach begin="1" end="${pageBean.totalPage}" var="page">--%><%--<li><a href="#">${page}</a></li>--%><%--<!-- 判断是否是当前页 -->--%><%--&lt;%&ndash;<c:if test="${page==pageBean.currentPage }">&ndash;%&gt;--%><%--&lt;%&ndash;<li class="active"><a href="javascript:void(0);">${page}</a></li>&ndash;%&gt;--%><%--&lt;%&ndash;</c:if>&ndash;%&gt;--%><%--&lt;%&ndash;<c:if test="${page!=pageBean.currentPage }">&ndash;%&gt;--%><%--&lt;%&ndash;<li><a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}&currentPage=${page }">${page }</a></li>&ndash;%&gt;--%><%--&lt;%&ndash;</c:if>&ndash;%&gt;--%><%--</c:forEach>--%><%--<li><a href="#">&raquo;</a></li>--%><%--</ul>--%><%--</nav>--%><!--分页 --><nav><ul class="pagination pull-right"><li  class="previous"><a href="#">&laquo;</a></li><c:forEach begin="1" end="${page.totalPage}" var="Page"><li><a href="${pageContext.request.contextPath}/category?method=getCategoryList&currentPage=${Page}&currentCount=10">${Page}</a></li></c:forEach><li><a href="#">&raquo;</a></li></ul></nav><!-- 分页结束 --><%--<ul class="pagination pull-right">--%><%--<li  class="previous"><a href="#">&laquo;</a></li>--%><%--<c:forEach begin="1" end="${pageBean.totalPage+1}" var="page">--%><%--<li><a href="${pageContext.request.contextPath}/category?method=getCategoryList&currentPage=${page}&currentCount=10">${page}</a></li>--%><%--</c:forEach>--%><%--<li><a href="#">&raquo;</a></li>--%><%--</ul>--%></div></div></div>
</div>
<!-- 尾部 -->
<div class="jumbotron" style=" margin-bottom:0;margin-top:105px;"><div class="container"><span>&copy; 2016 Saitmob</span></div>
</div><script src="static/js/jquery-3.1.0.min.js"></script><script src="static/js/bootstrap.min.js"></script>
</body>
</html>

2.3. 效果

在这里插入图片描述

在这里插入图片描述

3. 生鲜后台管理系统-记住密码功能

3.1. 记住密码

  (1)界面中添加checkbox控件。
  (2)如果用户登录成功,这时候就去获取控件是否被选中。
  (3)如果选中 那么我们需要将用户名和密码。
  (4)保存在cookie中保存到cookie中 同时需要对cookie做持久化,防止浏览器关闭的时候cookie被销毁
  (5)登录界面的jsp中 需要获取cookie中保存的信息,并将获取到的信息填入到form表单中。
  (6)这样就完成了记住密码的功能。

3.2. 步骤

  (1)新建LoginServlet

package com.zzs.szsd.web;
import com.zzs.szsd.bean.User;
import com.zzs.szsd.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");String password = request.getParameter("password");UserService userService=new UserService();User user=null;try {//调用service中登录方法user = userService.login(name, password);} catch (SQLException e) {e.printStackTrace();}if (user!=null){//登录成功后我们再获取是否保存密码的信息,如果失败了保存密码就没有意义了String remember = request.getParameter("remember");if (remember.equals("yes")){// 将用户名和密码加入到cookie中Cookie nameCookie = new Cookie("name", name);Cookie passwordCookie = new Cookie("password", password);//设置cookie的有效期 防止销毁nameCookie.setMaxAge(60*10);passwordCookie.setMaxAge(60*10);//将cookie发送给客户端保存response.addCookie(nameCookie);response.addCookie(passwordCookie);}//登录成功跳转生鲜种类列表界面response.sendRedirect(request.getContextPath()+"/category-list.jsp");}else {//登录失败提示response.setContentType("text/html;charset=utf-8");response.getWriter().write("用户登录失败");}}protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {}
}

  (2)新建login.jsp
在这里插入图片描述
在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head><meta charset="UTF-8"/><title>Document</title><script type="text/javascript" src="static/js/jquery-1.9.0.min.js"></script><script type="text/javascript" src="static/js/login.js"></script><link href="static/css/login2.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>生鲜管理系统<sup>V2017</sup>
</h1><div class="login" style="margin-top: 50px;"><div class="header"><div class="switch" id="switch"><a class="switch_btn_focus" id="switch_qlogin"href="javascript:void(0);" tabindex="7">快速登录</a> <aclass="switch_btn" id="switch_login" href="javascript:void(0);"tabindex="8">快速注册</a><div class="switch_bottom" id="switch_bottom"style="position: absolute; width: 64px; left: 0px;"></div></div></div><div class="web_qr_login" id="web_qr_login"style="display: block; height: 235px;"><!--登录--><div class="web_login" id="web_login"><div class="login-box"><div class="login_form"><form action="login"accept-charset="utf-8" id="login_form" class="loginForm"method="post"><input type="hidden" name="method" value="login"/><input type="hidden" name="did" value="0"/> <input type="hidden"name="to" value="log"/><div class="uinArea" id="uinArea"><label class="input-tips" for="u">帐号:</label><div class="inputOuter" id="uArea"><input type="text" id="u" name="name" value="${cookie.name.value}" class="inputstyle"/></div></div><div class="pwdArea" id="pwdArea"><label class="input-tips" for="p">密码:</label><div class="inputOuter" id="pArea"><input type="password" id="p" name="password" value="${cookie.password.value}" class="inputstyle"/></div></div><div style="margin-left: 45px;margin-top: 10px"><input style="vertical-align: middle;" type="checkbox" value="yes" name="remember">记住密码<br/></div><div style="padding-left: 50px; margin-top: 20px;"><input type="submit" value="登 录" style="width: 150px;"class="button_blue"/></div></form></div></div></div><!--登录end--></div><!--注册--><div class="qlogin" id="qlogin" style="display: none;"><div class="web_login"><form name="form2" id="regUser" accept-charset="utf-8"action="register" method="post"><input type="hidden" name="to" value="reg"/> <input type="hidden"name="did" value="0"/><ul class="reg_form" id="reg-ul"><div id="userCue" class="cue">快速注册请注意格式</div><li><label for="user" class="input-tips2">用户名:</label><div class="inputOuter2"><input type="text" id="user" name="name" maxlength="16"class="inputstyle2"/></div></li><li><label for="passwd" class="input-tips2">密码:</label><div class="inputOuter2"><input type="password" id="passwd" name="password" maxlength="16"class="inputstyle2"/></div></li><li><label for="passwd2" class="input-tips2">确认密码:</label><div class="inputOuter2"><input type="password" id="passwd2" name="password2" maxlength="16"class="inputstyle2"/></div></li><li><label for="email" class="input-tips2">邮箱:</label><div class="inputOuter2"><input type="email" id="email" name="email" class="inputstyle2"/></div></li><li><div class="inputArea"><input type="submit" id="reg"style="margin-top: 10px; margin-left: 85px;"class="button_blue" value="同意协议并注册"/> <a href="#" class="zcxy"target="_blank.">注册协议</a></div></li><div class="cl"></div></ul></form></div></div><!--注册end-->
</div>
</body>
</body>
</html>

3.3. 效果

在这里插入图片描述
  JavaWeb开发 实战-生鲜后台管理系统 注册、登录、记住密码示例下载

相关文章:

JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码

1. 生鲜后台管理系统-注册功能 1.1. 注册功能 &#xff08;1&#xff09;创建注册RegisterServlet&#xff0c;接收form表单中的参数。   &#xff08;2&#xff09;service创建一个userService处理业务逻辑。   &#xff08;3&#xff09;RegisterServlet将参数传递给ser…...

在stm32中C语言编写的程序中,一个整形数据是怎么存储的,高位在前还是低位在前

目录 举个例子 如何验证 小结 在 STM32&#xff08;基于 ARM Cortex-M 架构&#xff09;的系统中&#xff0c;默认是小端&#xff08;Little Endian&#xff09; 存储方式。也就是说&#xff0c;对于一个整型&#xff08;例如 32 位 int&#xff09;&#xff0c;它的最低有效…...

Redis系列之底层数据结构字典Dict

Redis系列之底层数据结构字典Dict Dict数据结构 Dict是Redis数据结构中使用最为频繁的复合型数据结构&#xff0c;本质上是一个哈希表 查看redis6.0版本的源码&#xff0c;链接&#xff1a;https://github.com/redis/redis/blob/6.0/src/dict.h 哈希表的结构定义&#xff1…...

CSS 溢出问题及解决方案:实用案例与技巧

在网页开发中&#xff0c;CSS 的布局和样式起着至关重要的作用&#xff0c;但经常会遇到一个棘手的问题——溢出问题。溢出是指元素内的内容超出了其设定的容器大小&#xff0c;这不仅会影响页面的美观&#xff0c;还可能干扰用户体验。本文将详细探讨 CSS 溢出问题的案例&…...

FastExcel 新一代的潮流 (EasyExcel)

目录 简介 FastExcel的特点 FastExcel使用方法详解 创建实体类和监听器 实现写入和读取功能 Excel转换为PDF 小结 FastExcel与EasyExcel的区别 结论 简介 FastExcel是由原EasyExcel作者在阿里巴巴宣布停止维护EasyExcel之后推出的升级版框架。它继承了EasyExcel的所有…...

使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】

文章目录 关于前情提要FFmpeg是什么使用脚本运行FFmpeg首先&#xff0c;下载ffmpeg.exe然后在视频相同位置写一个bat脚本运行压缩脚本 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&#x1f91d;。如果读者想和我交…...

cuda从零开始手搓PB神经网络

cuda实现PB神经网络 基于上一篇的矩阵点乘&#xff0c;实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下&#xff1a; #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…...

mac 安装mongodb

本文分享2种mac本地安装mongodb的方法&#xff0c;一种是通过homebrew安装&#xff0c;一种是通过tar包安装 homebrew安装 brew tap mongodb/brew brew upate brew install mongodb-community8.0tar包安装 安装mongodb 1.下载mongodb社区版的tar包 mongdb tar包下载地址 2…...

K8S-Pod资源清单的编写,资源的增删改查,镜像的下载策略

1. Pod资源清单的编写 1.1 Pod运行单个容器的资源清单 ##创建工作目录 mkdir -p /root/manifests/pods && cd /root/manifests/pods vim 01-nginx.yaml ##指定api版本 apiVersion: v1 ##指定资源类型 kind: Pod ##指定元数据 metadata:##指定名称name: myweb ##用户…...

【Maui】视图界面与数据模型绑定

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…...

JavaScript笔记基础篇02——运算符、语句、数组

黑马程序员视频地址&#xff1a;黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 目录 运算符 赋值运算符 ​编辑​编辑 一元运算符…...

心法利器[127] | 24年算法思考-特征工程和经典深度学习

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2023年新的文章合集已经发布&#xff0c;获取方式看这里&#xff1a;又添十万字-CS的陋室2023年文章合集来袭&#xff0c;更…...

ASP.NET Core 中的 JWT 鉴权实现

在当今的软件开发中&#xff0c;安全性和用户认证是至关重要的方面。JSON Web Token&#xff08;JWT&#xff09;作为一种流行的身份验证机制&#xff0c;因其简洁性和无状态特性而被广泛应用于各种应用中&#xff0c;尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.…...

PyTorch基本功能与实现代码

PyTorch是一个开源的深度学习框架&#xff0c;提供了丰富的函数和工具&#xff0c;以下为其主要功能的归纳&#xff1a; 核心数据结构&#xff1a; • 张量&#xff08;Tensor&#xff09;&#xff1a;类似于Numpy的ndarray&#xff0c;是PyTorch中基本的数据结构&#xff0c…...

SparkSQL数据模型综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建数据集2.2 创建数据模型对象2.2.1 创建常量2.2.2 创建加载数据方法2.2.3 创建过滤年龄方法2.2.4 创建平均薪水方法2.2.5 创建主方法2.2.6 查看完整代码 2.3 运行程序&#xff0c;查看结果 3. 实战小结 1. 实战概述 在本次实战中&#…...

3 查找重复的电子邮箱(having与where区别,distinct去重使用)

3 查找重复的电子邮箱&#xff08;having与where区别&#xff0c;distinct去重使用&#xff09; 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该…...

uniapp——App 监听下载文件状态,打开文件(三)

5 实现下载文件并打开 这里演示&#xff0c;导出Excel 表格 文章目录 5 实现下载文件并打开DEMO监听下载进度效果图为什么 totalSize 一直为0&#xff1f; 相关Api&#xff1a; downloader DEMO 提示&#xff1a; 请求方式支持&#xff1a;GET、POST&#xff1b;POST 方式需要…...

循环队列(C语言)

从今天开始我会开启一个专栏leetcode每日一题&#xff0c;大家互相交流代码经验&#xff0c;也当作我每天练习的自我回顾。第一天的内容是leetcode622.设计循环队列。 一、题目详细 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#…...

数据可视化:让数据讲故事的艺术

目录 1 前言2 数据可视化的基本概念2.1 可视化的核心目标2.2 传统可视化手段 3 数据可视化在知识图谱中的应用3.1 知识图谱的可视化需求3.2 知识图谱的可视化方法 4 数据可视化叙事&#xff1a;让数据讲故事4.1 叙事可视化的关键要素4.2 数据可视化叙事的实现方法 5 数据可视化…...

雷电9最新版安装Magisk+LSPosd(新手速通)

大家好啊&#xff01;我是NiJiMingCheng 我的博客&#xff1a;NiJiMingCheng 在安卓系统的定制与拓展过程中&#xff0c;获取 ROOT 权限以及安装各类框架是进阶玩家常用的操作&#xff0c;这可以帮助我们实现更多系统层面的个性化功能。今天&#xff0c;我将为大家详细介绍如何…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...