思途JSP學習 0731

繼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 回歸算法 算法 核心思想 適用場景 優缺點 線性回…