继0730,我们对项目做最后的升级

一、删除功能

1、新增复选框辅助删除条目的选择

修改我们的list.jsp和list.js在列表的第一列增加一列选择框


  2、给复选框添加全选与行点击选择功能

在行选择功能中,因为此时的选择框还未生成,所以我们将事件委托给他的父类“#tab”

    //全选与取消全选$("#checkAll").click(function (){let checked = $(this).prop("checked");$("#tab>tbody>tr>td:first-child>:checkbox").prop("checked",checked);});//点击行选中  事件委托$("#tab").on("click","tr>td:not(:first-child)",function (){let $tr = $(this).parent();const $chk = $tr.children().first().children()const check = $chk.prop("checked");$chk.prop("checked",!check);})

 3、给删除按钮添加事件

let $checked = $("#tab tr>td:first-child>:checked")获取当前全部被选择的选择框的状态,如果存在选中,使用layer.confirm创建一个带有“确定”和“取消”按钮的确认对话框

通过.each将$checked中的每个data-id值都存到ids中,将ids传给函数delectById.

//删除按钮事件$("#del").click(function (){let $checked = $("#tab tr>td:first-child>:checked")//console.log($checked);if($checked.length === 0){layer.msg("请选择要删除的学生");}else{layer.confirm("你确定你要删除选中的行吗", function (handler){//删除所有选中的行let ids = [];$checked.each(function (idx,item){console.log(idx,item);ids.push(parseInt($(item).attr("data-id")));});console.log(ids);deleteByIds(ids, function (count){if(count>0){layer.msg("成功删除"+count+"行数据");findAll(currentPage,limits);}else{layer.msg("删除失败");}});layer.close(handler)});}})

 4、创建函数delectById将ids值传到后端

以post形式传到delete地址下,通过后端删除后返回给回调函数rows值,再将rows传回给按钮。

//参数为id数组
function deleteByIds(ids, cb=$.noop) {//请求、响应模型$.ajax({url: ctx + "/student/delete",method: "post",//添加此属性,表示可以向后台传递数组参数traditional: true,data: {ids},success: function (resp){cb(resp.rows);}})
}

5、select接收请求向下调用

list.js->select->service->dao  --->selcet->list.js->list.jsp

    private void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求参数中的idsString[] strIds = req.getParameterValues("ids");//将ids转换为List<Integer>List<Integer> ids = new ArrayList<>();for(int i=0;i<strIds.length;i++) ids.add(Integer.parseInt(strIds[i]));//调用studentService的deleteByIds方法删除数据,返回删除的行数int rows = studentService.deleteByIds(ids);//将删除的行数封装到map中Map<String, Object> map = Map.of("rows", rows);ServletUtil.renderJson(resp,map);}

 在dao中编写sql语句访问数据库

public int deleteByIds(List<Integer> ids) {//sparing提供的模板工具类JdbcTemplate jdbcTemplate = Global.getTemplate();//判断ids是否为空if(ids == null || ids.isEmpty()) return -1;//创建StringBuilder对象StringBuilder sb = new StringBuilder();//使用repeat方法重复添加"?,"sb.append("?,".repeat(ids.size()));//截取最后一个","String ph = sb.substring(0, sb.length()-1);//拼接删除语句String delsql = "delete from t_student where id in ("+ph+")";//执行删除语句int rows = jdbcTemplate.update(delsql, ids.toArray());return rows;}

 成功获取删除条数,将rows编写成json语句返回前端,这里我们新建一个工具类ServletUtil用于返回json

package com.situ.util;import com.alibaba.fastjson2.JSON;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;public class ServletUtil {//将对象转换为json字符串并写入响应流public static void renderJson(HttpServletResponse resp, Object obj) throws IOException {//设置响应的内容类型为jsonresp.setContentType("application/json;charset=UTF-8");//获取响应的输出流PrintWriter out = resp.getWriter();//将map转换为json字符串并写入响应流out.write(JSON.toJSONString(obj));//刷新响应流out.flush();}
}

二、新增功能

1.为新增按钮添加事件

按钮打开一个悬浮窗,窗内显示add页面,

  • 参数说明:
    • handler: 当前弹窗的索引(index),用于关闭弹窗。
    • $jq: 表示弹窗的 jQuery 对象(包含整个 layer DOM 结构)。
  • 在弹窗中查找 iframe 元素。
  • 获取其原生 DOM 元素([0])。
  • 然后通过 .contentWindow 获取 iframe 内部页面的 window 对象
  • 这样就可以调用 iframe 内部的 JavaScript 函数了。
  • 调用 iframe 内部页面的 submit() 函数。
  • submit 函数接收一个回调函数作为参数,用于接收提交结果(success 是布尔值)。
  • 如果 success 为 true
    • 显示“新增成功”提示。
    • 调用 findAll(...) 刷新当前学生列表。
    • 关闭弹窗(layer.close(handler))。
  • 如果 success 为 false
    • 提示用户“新增失败”,并检查数据。
$("#add").click(function (){layer.open({title: "新增学生",type: 2,area: ["800px","600px"],btn: ["确定","取消"],content: ctx + "/student/add",yes: function (handler, $jq){const win= $jq.find("iframe")[0].contentWindow;win.submit(function (success){if(success){layer.msg("新增成功");findAll(currentPage,limits);layer.close(handler);}else {layer.msg("新增失败,请修改不合格数据");}});}})});

 2、新建add功能的jsp、css、js

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="jakarta.tags.core"%><c:set var="cxt" value="${pageContext.request.contextPath}"/>
<html>
<head><base href="${cxt}/"><title>新增学生数据</title><link rel="stylesheet" href="assets/modules/student/css/add.css"><link rel="stylesheet" href="assets/lib/layui/css/layui.css"><script src="assets/lib/jquery/jquery-3.7.1.min.js"></script><script src="assets/modules/student/js/add.js"></script><script src="assets/lib/layui/layui.js"></script><script>const ctx = "${cxt}";</script>
</head>
<body><form id="student-form" action=""><div><label for="stuId">学号:</label><input type="text" name="stuId" id="stuId" autocomplete="off" placeholder="请输入学号"></div><div><label for="name">姓名:</label><input type="text" name="name" id="name" autocomplete="off" placeholder="请输入姓名"></div><div><label for="pinyin">拼音:</label><input type="text" name="pinyin" id="pinyin" autocomplete="off" placeholder="请输入拼音"></div><div><label for="sex">性别:</label><input type="radio" name="sex" id="male" value="男" checked><label for="male">男</label><input type="radio" name="sex" id="female" value="女"><label for="female">女</label></div><div><label for="birthday">出生日期:</label><input type="text" name="birthday" id="birthday" autocomplete="off" placeholder="请输入出生日期" readonly></div><div><label for="phone">手机号:</label><input type="text" name="phone" id="phone" autocomplete="off" placeholder="请输入手机号"></div><div><label for="email">邮箱:</label><input type="text" name="email" id="email" autocomplete="off" placeholder="请输入邮箱"></div></form>
</body>
</html>
body{padding: 10px;
}#student-form>div{margin: 20px 0;height: 50px;
}#student-form>div>label:first-child{display: inline-block;width: 100px;text-align: right;
}#student-form>div>input:not(#male,#female){outline: none;width: 300px;height: 30px;margin-left: 10px;border: 1px solid #ccc;border-radius: 5px;padding-left: 10px;
}#student-form>div>label{display: inline-block;font-size: 20px;font-weight: bold;text-align: center;
}
$(()=>{//渲染出生日期layui.use(function () {const laydate = layui.laydate;laydate.render({elem: "#birthday",type: "date"});});
});function submit(cb = $.noop){let stuId = $("#stuId").val();let name = $("#name").val();let pinyin = $("#pinyin").val();let birthday = $("#birthday").val();let phone = $("#phone").val();let email = $("#email").val();let sex = $(":input[name=sex]:checked").val();// console.log(sex);//前端校验:js校验if (stuId.trim() === "") {layer.msg("学号不可为空");return;}if (name.trim() === "") {layer.msg("姓名不可为空");return;}let pat = /^\d{4}-\d{2}-\d{2}$/;if (!pat.test(birthday)) {layer.msg("出生日期格式不正确");return;}pat = /^\d{11}$/;if (!pat.test(phone)) {layer.msg("手机号格式不正确");return;}$.ajax({url: "student/add",type: "post",data: {stuId,name,pinyin,birthday,phone,email,sex},success: function (resp){cb(resp.success)}})
}

 3、submit函数实现将“增加”内容发送到后端进行写入

servlet将传入的信息保存到Student对象中,并向下传递调用

    private void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");String stuId = req.getParameter("stuId");String name = req.getParameter("name");String pinyin = req.getParameter("pinyin");String sex = req.getParameter("sex");String birthday = req.getParameter("birthday");String phone = req.getParameter("phone");String email = req.getParameter("email");//后端校验if (!StringUtils.hasText(stuId)){ServletUtil.renderJson(resp, Map.of("error", "学号不可为空"));return;}if(!StringUtils.hasText(name)){ServletUtil.renderJson(resp, Map.of("error", "姓名不可为空"));return;}if(!phone.matches("^\\d{11}$")){ServletUtil.renderJson(resp, Map.of("error", "手机号格式不正确"));return;}Student student = new Student();student.setStuId(stuId);student.setName(name);student.setPinyin(pinyin);if(!sex.equals("男") && !sex.equals("女")){ServletUtil.renderJson(resp, Map.of("error", "性别只能是男或女"));}student.setSex(sex);try {LocalDate ld = LocalDate.parse(birthday, DateTimeFormatter.ofPattern("yyyy-MM-dd"));student.setBirthday(ld);} catch (Exception e) {ServletUtil.renderJson(resp, Map.of("error", "出生日期不正确"));}student.setPhone(phone);student.setEmail(email);boolean success = studentService.save(student);ServletUtil.renderJson(resp, Map.of("success", success));}

 Dao

    public int save(Student student) {JdbcTemplate jdbcTemplate = Global.getTemplate();String sql = "insert into t_student (stu_id, name, pinyin, sex, birthday, phone, email) values(?,?,?,?,?,?,?)";int rows = jdbcTemplate.update(sql, student.getStuId(), student.getName(), student.getPinyin(), student.getSex(), student.getBirthday(), student.getPhone(), student.getEmail());return rows;}

三、修改功能

修改功能类似于增加功能,也需要新建jsp、css、js,在list.js中实现按钮功能

这里的url将id值传给了servlet中的doGet,get转发到jsp,jsp设为全局常量,js就可以获取id值

    $("#edit").click(function (){let $checked = $("#tab tr>td:first-child>:checked");if($checked.length === 0) layer.msg("请选择要编辑的学生");else if($checked.length > 1) layer.msg("一次只能编辑一个学生");else{let $id = $checked.attr("data-id");layer.open({title: "修改学生",type: 2,area: ["800px","600px"],btn: ["确定","取消"],content: ctx + "/student/edit?id="+ $id,yes: function (handler, $jq){const win= $jq.find("iframe")[0].contentWindow;win.submit(function (success){if(success){layer.msg("修改成功");findAll(currentPage,limits);layer.close(handler);}else {layer.msg("修改失败,请修改不合格数据");}});}})}});

在js中设置findId函数用于向后端请求寻找目标id的数据,回调函数用于后端返回对应值

$(()=>{findById(id)//渲染出生日期layui.use(function () {const laydate = layui.laydate;laydate.render({elem: "#birthday",type: "date"});});
});//查询指定id学生的信息
function findById(id){$.ajax({url: "student/id",method:"get",data:{id},success: function (resp){const stu = resp.student;$("#stuId").val(stu.stuId);$("#name").val(stu.name);$("#pinyin").val(stu.pinyin);$("#birthday").val(stu.birthday);$("#phone").val(stu.phone);$("#email").val(stu.email);$(":radio[name=sex][value="+stu.sex+"]").prop("checked",true);}})
}//修改数据提交
function submit(cb = $.noop){let stuId = $("#stuId").val();let name = $("#name").val();let pinyin = $("#pinyin").val();let birthday = $("#birthday").val();let phone = $("#phone").val();let email = $("#email").val();let sex = $(":input[name=sex]:checked").val();// console.log(sex);//前端校验:js校验if (stuId.trim() === "") {layer.msg("学号不可为空");return;}if (name.trim() === "") {layer.msg("姓名不可为空");return;}let pat = /^\d{4}-\d{2}-\d{2}$/;if (!pat.test(birthday)) {layer.msg("出生日期格式不正确");return;}pat = /^\d{11}$/;if (!pat.test(phone)) {layer.msg("手机号格式不正确");return;}$.ajax({url: "student/edit",type: "post",data: {id,stuId,name,pinyin,birthday,phone,email,sex},success: function (resp){cb(resp.success)}})
}

servlet中的doGet方法,调用findById方法

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String action = req.getPathInfo();if("/list".equals(action)){//List<Student> students = studentService.findAll();//req.setAttribute("students", students);//String page = req.getParameter("page");//String limit = req.getParameter("limit");req.getRequestDispatcher("/WEB-INF/jsp/student/list.jsp").forward(req,resp);} else if("/add".equals(action)){req.getRequestDispatcher("/WEB-INF/jsp/student/add.jsp").forward(req,resp);} else if("/edit".equals(action)) {//编辑String id = req.getParameter("id");req.setAttribute("id", id);req.getRequestDispatcher("/WEB-INF/jsp/student/edit.jsp").forward(req, resp);} else if("/id".equals(action)) {//根据id查询String id = req.getParameter("id");Student stu = studentService.findById(Integer.parseInt(id));ServletUtil.renderJson(resp, Map.of("student", stu));}}
    public Student findById(Integer id) {JdbcTemplate jdbcTemplate = Global.getTemplate();String sql = "select id, stu_id, name, sex, birthday, pinyin, phone, email, qq, wechat from t_student where id = ?";Student student = jdbcTemplate.queryForObject(sql, rowMapper, id);return student;}

将对应id的目标数据显示在浮窗中

信息修改后点击确定按钮,调用submit函数,在后端进行修改sql语句

    private void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");String id = req.getParameter("id");String stuId = req.getParameter("stuId");String name = req.getParameter("name");String pinyin = req.getParameter("pinyin");String sex = req.getParameter("sex");String birthday = req.getParameter("birthday");String phone = req.getParameter("phone");String email = req.getParameter("email");//后端校验if (!StringUtils.hasText(stuId)){ServletUtil.renderJson(resp, Map.of("error", "学号不可为空"));return;}if(!StringUtils.hasText(name)){ServletUtil.renderJson(resp, Map.of("error", "姓名不可为空"));return;}if(!phone.matches("^\\d{11}$")){ServletUtil.renderJson(resp, Map.of("error", "手机号格式不正确"));return;}if(!sex.equals("男") && !sex.equals("女")){ServletUtil.renderJson(resp, Map.of("error", "性别只能是男或女"));}Student student = new Student();student.setId(Integer.parseInt(id));student.setStuId(stuId);student.setName(name);student.setPinyin(pinyin);student.setSex(sex);try {LocalDate ld = LocalDate.parse(birthday, DateTimeFormatter.ofPattern("yyyy-MM-dd"));student.setBirthday(ld);} catch (Exception e) {ServletUtil.renderJson(resp, Map.of("error", "出生日期不正确"));}student.setPhone(phone);student.setEmail(email);boolean success = studentService.edit(student);ServletUtil.renderJson(resp, Map.of("success", success));}
    public int edit(Student student) {JdbcTemplate jdbcTemplate = Global.getTemplate();String sql = "update t_student set stu_id = ?, name = ?, pinyin = ?, sex = ?, birthday = ?, phone = ?, email = ? where id = ?";int rows = jdbcTemplate.update(sql, student.getStuId(), student.getName(), student.getPinyin(), student.getSex(), student.getBirthday(), student.getPhone(), student.getEmail(), student.getId());return rows;}

四、结果展示

删除

新增

修改 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某讯视频风控参数逆向分析

文章目录1. 写在前面2. 接口分析3. 加密分析4. 扣JS代码【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力…

[Broken IOS] 配置CLI | 终端用户界面TUI

链接&#xff1a;https://palera.in/ docs&#xff1a;palera1n palera1n 是一款专为 Jailbroken苹果设备 设计的强大工具&#xff0c;支持运行 iOS/iPadOS/tvOS 15.0 及更新系统 的 iPhone、iPad 和 Apple TV。 该工具通过 DFU 模式 下的底层 USB 通信引导设备&#xff0c;…

论文阅读|ArxiV 2024|Mamba进一步研究|VSSD

论文地址&#xff1a;pdf 代码地址&#xff1a;code 文章目录1.研究背景与动机2. 核心方法2.1 预备知识:mamba-ssm2.2 非因果状态空间对偶性2.3 视觉状态空间对偶性模型3. 实验结果3.1 图像分类任务3.2 目标检测任务3.3 语义分割任务3.4 消融实验4.局限性与结论4.1 局限性4.2 结…

Flutter中 Provider 的基础用法超详细讲解(二)之ChangeNotifierProvider

目录 前言 一、什么是ChangeNotifierProvider? 二、ChangeNotifier的简单用法 1.定义状态类 2.使用ChangeNotifierProvider提供状态 3.获取状态并监听更新 1.Consumer 2.通过API方式获取 1.Provider.of (context) 2.context.watch () 3.context.read () 4.各种获…

2025电商CPS分销与推客系统小程序开发:趋势、架构与实战解析

一、行业趋势&#xff1a;CPS模式与社交电商的深度融合1.1 电商行业新趋势根据《2025年电子商务行业发展趋势预测报告》&#xff0c;社交电商与内容营销已成为核心增长点。消费者行为呈现三大特征&#xff1a;消费习惯转变&#xff1a;线上购物占比超70%&#xff0c;Z世代用户更…

Conda环境下配置的基本命令

功能命令创建环境conda create -n myenv python3.11激活环境conda activate myenv删除环境conda env remove -n myenv复制环境conda create -n newenv --clone myenv列出所有环境conda env list列出环境所有包conda list彻底清除某个 Conda 环境中的所有已安装包&#xff08;但…

Ps2025

快捷键CShs保存CSw存储为S选取叠加选取,A选取减去选区C回车保存路径内容识别 SF5 ADel填充前景色CDel填充背景色A上下 上下行间距A左右 左右字间距C左键丝滑放大缩小CASE盖印图层C}上移一格CG新建组sF6羽化像素钢笔工具打上抹点&#xff0c;按住shift水平拉调增弧度左右两个手柄…

ceph sc 设置文件系统格式化参数

前言 默认的 sc 文件系统 inode 太少,对于小文件场景,往往会出现容量没满,inode 已经用尽的情况,本文说明如何设置 inode。 说明 本文使用的是 rook-ceph 部署的 ceph 作为存储后端。 xfs 文件系统 sc 创建带格式化参数的 xfs 文件系统的 sc allowVolumeExpansion: t…

【LY88】ubuntu下的常用操作

vscode 下载安装包 在安装包所处文件夹空白区域右键调出终端 输入下行命令安装 c后接tab自动补全安装包名称&#xff08;前提是该文件夹中仅这一个c开头文件&#xff0c;否则得再输点字母&#xff0c;保证其可唯一索引到&#xff09; sudo dpkg -i ctab安装完毕后输入code&…

web应用从服务器主动推动数据到客户端的方式

html5 websocket 全双工交互 全双工通信&#xff1a;建立持久连接&#xff0c;服务端和客户端可随时互相发送消息 低延迟&#xff1a;适合实时应用&#xff08;聊天、游戏、股票行情等&#xff09; socket协议是与HTTP协议平级的&#xff0c;websocket协议是建立在TCP协议之上的…

基于Spring Boot实现中医医学处方管理实践

基于Spring Boot实现中医医学处方管理 以下是基于Spring Boot实现中医医学处方管理的相关示例和资源整理,涵盖基础架构、功能模块及实际应用案例: 基础项目结构 Spring Boot中医处方系统通常采用MVC分层设计: 实体类:定义处方、药材、患者等JPA实体 @Entity public clas…

从“人工核验”到“智能鉴防”:护照鉴伪设备的科技革命

“一本伪造护照的查获成本从72小时降至3秒&#xff0c;背后是光学传感、量子加密与多模态AI的十年协同进化。”2025年全球边检口岸查获伪假护照近500份&#xff0c;其中芯片伪造占比首超40%。当造假技术逼近分子级仿制&#xff0c;传统肉眼鉴别彻底失效&#xff0c;多光谱成像、…

无人机飞控系统3D (C++)实践

大疆无人机飞控系统3D模型开发 大疆无人机飞控系统3D模型开发(C++) 核心架构设计 大疆无人机的飞控系统通常采用分层架构,分为硬件抽象层(HAL)、中间件层和应用层。HAL负责与传感器/执行器直接交互,中间件处理数据融合和通信协议,应用层实现核心控制算法。 典型代码结…

ES6中import与export的用法详解

目录 一、ES6模块化的核心概念 1. 模块化的基本规则 二、export的用法 1. 命名导出&#xff08;Named Export&#xff09; 示例&#xff1a; 2. 默认导出&#xff08;Default Export&#xff09; 示例&#xff1a; 默认导出函数或类&#xff1a; 3. 导出语句的统一声明…

硬核技术协同:x86 生态、机密计算与云原生等技术如何为产业数字化转型筑底赋能

在产业数字化转型的浪潮中&#xff0c;x86 生态构建、机密计算与 AI 融合、高性能网卡突破、云原生 OS 实践、国产数据库优化等技术领域的突破&#xff0c;正成为支撑数字化基础设施升级与业务创新的核心引擎。以下从技术深度与产业实践角度&#xff0c;系统性解析各领域的最新…

Java项目:基于SSM框架实现的网络财务管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网络财务管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

1.5.Vue v-for 和 指令修饰符

vue v-for当你使用 v-for 指令来渲染列表时&#xff0c;为每个元素提供一个唯一的 key 属性是非常重要的。key 是用来给 Vue 一个提示&#xff0c;以便它能够追踪每个节点的身份&#xff0c;从而更高效地更新虚拟 DOM。key 的作用唯一标识&#xff1a;key 应该是每项数据的唯一…

(RedmiBook)上禁用触摸板或自带键盘

在红米笔记本&#xff08;RedmiBook&#xff09;上禁用触摸板或自带键盘&#xff0c;可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;通过设备管理器禁用&#xff08;Windows 系统&#xff09; 禁用触摸板 打开设备管理器 按 Win X → 选择 “设备管理器”或 Win …

15 - 多模态大语言模型 — 图文 “牵线” 系统 “成长记”:借 CLIP 练本领,从图像与文字里精准 “搭鹊桥” 的全过程 (呆瓜版 - 2 号)

目录 1、基础&#xff1a;它到底是个啥&#xff1f; 1. 1、一句话理解核心 1.2、 为啥厉害&#xff1f; 1.3、怎么发展来的&#xff1f; 2、架构&#xff1a;它的 “身体构造” 是啥样的&#xff1f; 2.1、视觉语言模型架构&#xff1a;让 AI “看懂” 世界的核心系统 2…

Day 4-1: 机器学习算法全面总结

Day 4-1: 机器学习算法全面总结 📚 学习目标 通过前三天的学习,我们已经掌握了机器学习的基础知识和经典算法。今天我们来做一个全面总结,为进入深度学习阶段做好准备。 🎯 已掌握的核心算法总结 1. 监督学习算法 1.1 回归算法 算法 核心思想 适用场景 优缺点 线性回…