[免費]SpringBoot+Vue共享單車信息系統【論文+源碼+SQL腳本】

大家好,我是java1234_小鋒老師,看到一個不錯的SpringBoot+Vue共享單車信息系統【論文+源碼+SQL腳本】,分享下哈。

項目視頻演示

【免費】SpringBoot+Vue共享單車信息系統 Java畢業設計_嗶哩嗶哩_bilibili

項目介紹

快速發展的社會中,人們的生活水平都在提高,生活節奏也在逐漸加快。為了節省時間和提高工作效率,越來越多的人選擇利用互聯網進行線上打理各種事務然后線上管理系統也就相繼涌現。他們不僅希望頁面簡單大方,還希望操作方便,可以快速鎖定他們需要的線上管理方式。基于這種情況,我們需要這樣一個界面簡單大方、功能齊全的系統來解決用戶問題,滿足用戶需求。

課題主要分為大模塊:即管理員模塊和用戶模塊,主要功能包括:用戶、區域、共享單車、單車租賃、租賃歸還、報修信息、檢修信息等;

系統展示

部分代碼

package com.controller;import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.YonghuEntity;
import com.entity.view.YonghuView;import com.service.YonghuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;/*** 用戶* 后端接口* @author * @email * @date 2023-03-24 22:41:10*/
@RestController
@RequestMapping("/yonghu")
public class YonghuController {@Autowiredprivate YonghuService yonghuService;@Autowiredprivate TokenService tokenService;/*** 登錄*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", username));if(u==null || !u.getMima().equals(password)) {return R.error("賬號或密碼不正確");}String token = tokenService.generateToken(u.getId(), username,"yonghu",  "用戶" );return R.ok().put("token", token);}/*** 注冊*/@IgnoreAuth@RequestMapping("/register")public R register(@RequestBody YonghuEntity yonghu){//ValidatorUtils.validateEntity(yonghu);YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));if(u!=null) {return R.error("注冊用戶已存在");}Long uId = new Date().getTime();yonghu.setId(uId);yonghuService.insert(yonghu);return R.ok();}/*** 退出*/@RequestMapping("/logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 獲取用戶的session用戶信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");YonghuEntity u = yonghuService.selectById(id);return R.ok().put("data", u);}/*** 密碼重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", username));if(u==null) {return R.error("賬號不存在");}u.setMima("123456");yonghuService.updateById(u);return R.ok("密碼已重置為:123456");}/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,YonghuEntity yonghu,HttpServletRequest request){EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,YonghuEntity yonghu, HttpServletRequest request){EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( YonghuEntity yonghu){EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu")); return R.ok().put("data", yonghuService.selectListView(ew));}/*** 查詢*/@RequestMapping("/query")public R query(YonghuEntity yonghu){EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu")); YonghuView yonghuView =  yonghuService.selectView(ew);return R.ok("查詢用戶成功").put("data", yonghuView);}/*** 后端詳情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){YonghuEntity yonghu = yonghuService.selectById(id);return R.ok().put("data", yonghu);}/*** 前端詳情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){YonghuEntity yonghu = yonghuService.selectById(id);return R.ok().put("data", yonghu);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yonghu);YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));if(u!=null) {return R.error("用戶已存在");}yonghu.setId(new Date().getTime());yonghuService.insert(yonghu);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yonghu);YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));if(u!=null) {return R.error("用戶已存在");}yonghu.setId(new Date().getTime());yonghuService.insert(yonghu);return R.ok();}/*** 修改*/@RequestMapping("/update")@Transactionalpublic R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){//ValidatorUtils.validateEntity(yonghu);yonghuService.updateById(yonghu);//全部更新return R.ok();}/*** 刪除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){yonghuService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<YonghuEntity> wrapper = new EntityWrapper<YonghuEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = yonghuService.selectCount(wrapper);return R.ok().put("count", count);}}
<template><div><div class="container" :style='{"minHeight":"100vh","backgroundAttachment":"fixed","alignItems":"flex-end","background":"#A5DDDD","display":"flex","width":"100%","backgroundSize":"cover","backgroundPosition":"center center","backgroundRepeat":"no-repeat","justifyContent":"flex-end"}'><el-form :style='{"padding":"0 0px 20px","boxShadow":"0px 0px 0px 50px rgba(255,255,255,0.3000)","margin":"0","borderColor":"rgba(221,242,242,1)","borderRadius":"30px 0 0 0","background":"#fff","borderWidth":"30px 0 0 30px","width":"60%","borderStyle":"solid","height":"700px"}'><div v-if="true" :style='{"padding":"40px 0","margin":"0 0 50px 0","color":"#000","borderRadius":"0 0 30px 30px","textAlign":"center","background":"#A5DDDD","width":"100%","lineHeight":"1","fontSize":"24px","fontWeight":"bold"}' class="title-container">基于Spring Boot共享單車信息系統的設計與實現登錄</div><div v-if="loginType==1" class="list-item" :style='{"width":"40%","margin":"0 auto 10px","alignItems":"center","flexWrap":"wrap","display":"flex"}'><div v-if="false" class="lable" :style='{"width":"64px","lineHeight":"44px","fontSize":"14px","color":"rgba(64, 158, 255, 1)"}'>用戶名</div><input :style='{"border":"1px solid #A7A7A7","padding":"0 10px","boxShadow":"0 0 0px rgba(64, 158, 255, .5)","color":"#000","borderRadius":"30px","width":"100%","fontSize":"14px","height":"44px"}' placeholder="請輸入用戶名" name="username" type="text" v-model="rulesForm.username"></div><div v-if="loginType==1" class="list-item" :style='{"width":"40%","margin":"0 auto 10px","alignItems":"center","flexWrap":"wrap","display":"flex"}'><div v-if="false" class="lable" :style='{"width":"64px","lineHeight":"44px","fontSize":"14px","color":"rgba(64, 158, 255, 1)"}'>密碼:</div><input :style='{"border":"1px solid #A7A7A7","padding":"0 10px","boxShadow":"0 0 0px rgba(64, 158, 255, .5)","color":"#000","borderRadius":"30px","width":"100%","fontSize":"14px","height":"44px"}' placeholder="請輸入密碼" name="password" type="password" v-model="rulesForm.password"></div><div :style='{"width":"40%","margin":"20px auto"}' v-if="roles.length>1" prop="loginInRole" class="list-type"><el-radio v-for="item in roles" v-bind:key="item.roleName" v-model="rulesForm.role" :label="item.roleName">{{item.roleName}}</el-radio></div><div :style='{"width":"40%","margin":"40px auto 0","alignItems":"center","flexDirection":"column","justifyContent":"center","display":"flex"}'><el-button v-if="loginType==1" :style='{"border":"0","cursor":"pointer","padding":"0 24px","margin":"0 10px","outline":"none","color":"#fff","borderRadius":"5px","background":"#A5DDDD","width":"100%","fontSize":"18px","height":"44px"}' type="primary" @click="login()" class="loginInBt">登錄</el-button><br></div></el-form></div></div>
</template>
<script>import menu from "@/utils/menu";
export default {data() {return {baseUrl:this.$base.url,loginType: 1,rulesForm: {username: "",password: "",role: "",code: '',},menus: [],roles: [],tableName: "",codes: [{num: 1,color: '#000',rotate: '10deg',size: '16px'},{num: 2,color: '#000',rotate: '10deg',size: '16px'},{num: 3,color: '#000',rotate: '10deg',size: '16px'},{num: 4,color: '#000',rotate: '10deg',size: '16px'}],};},mounted() {let menus = menu.list();this.menus = menus;for (let i = 0; i < this.menus.length; i++) {if (this.menus[i].hasBackLogin=='是') {this.roles.push(this.menus[i])}}},created() {this.getRandCode()},destroyed() {},methods: {//注冊register(tableName){this.$storage.set("loginTable", tableName);this.$storage.set("pageFlag", "register");this.$router.push({path:'/register'})},// 登陸login() {if (!this.rulesForm.username) {this.$message.error("請輸入用戶名");return;}if (!this.rulesForm.password) {this.$message.error("請輸入密碼");return;}if(this.roles.length>1) {if (!this.rulesForm.role) {this.$message.error("請選擇角色");return;}let menus = this.menus;for (let i = 0; i < menus.length; i++) {if (menus[i].roleName == this.rulesForm.role) {this.tableName = menus[i].tableName;}}} else {this.tableName = this.roles[0].tableName;this.rulesForm.role = this.roles[0].roleName;}this.$http({url: `${this.tableName}/login?username=${this.rulesForm.username}&password=${this.rulesForm.password}`,method: "post"}).then(({ data }) => {if (data && data.code === 0) {this.$storage.set("Token", data.token);this.$storage.set("role", this.rulesForm.role);this.$storage.set("sessionTable", this.tableName);this.$storage.set("adminName", this.rulesForm.username);this.$router.replace({ path: "/index/" });} else {this.$message.error(data.msg);}});},getRandCode(len = 4){this.randomString(len)},randomString(len = 4) {let chars = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k","l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v","w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G","H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R","S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2","3", "4", "5", "6", "7", "8", "9"]let colors = ["0", "1", "2","3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]let sizes = ['14', '15', '16', '17', '18']let output = [];for (let i = 0; i < len; i++) {// 隨機驗證碼let key = Math.floor(Math.random()*chars.length)this.codes[i].num = chars[key]// 隨機驗證碼顏色let code = '#'for (let j = 0; j < 6; j++) {let key = Math.floor(Math.random()*colors.length)code += colors[key]}this.codes[i].color = code// 隨機驗證碼方向let rotate = Math.floor(Math.random()*60)let plus = Math.floor(Math.random()*2)if(plus == 1) rotate = '-'+rotatethis.codes[i].rotate = 'rotate('+rotate+'deg)'// 隨機驗證碼字體大小let size = Math.floor(Math.random()*sizes.length)this.codes[i].size = sizes[size]+'px'}},}
};
</script><style lang="scss" scoped>
.container {min-height: 100vh;position: relative;background-repeat: no-repeat;background-position: center center;background-size: cover;background: #A5DDDD;.list-item /deep/ .el-input .el-input__inner {border: 1px solid #A7A7A7;border-radius: 30px;padding: 0 10px;box-shadow: 0 0 0px rgba(64, 158, 255, .5);color: #000;width: 100%;font-size: 14px;height: 44px;}.list-code /deep/ .el-input .el-input__inner {border: 1px solid #A7A7A7;border-radius: 30px;padding: 0 10px;outline: none;color: #000;width: calc(100% - 20px);font-size: 14px;height: 44px;}.list-type /deep/ .el-radio__input .el-radio__inner {background: rgba(53, 53, 53, 0);border-color: #666666;}.list-type /deep/ .el-radio__input.is-checked .el-radio__inner {background: #000;border-color: #000;}.list-type /deep/ .el-radio__label {color: #666666;font-size: 14px;}.list-type /deep/ .el-radio__input.is-checked+.el-radio__label {color: #000;font-size: 14px;}
}
</style>

源碼下載

鏈接:https://pan.baidu.com/s/1QlVUSov9MsnjghqnCqQ-Fg
提取碼:1234

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88172.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88172.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88172.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內網提權-DC-3靶場實驗(Ubantu16.04)

靶場地址 https://download.vulnhub.com/dc/DC-3-2.zip 打開DC-3 使用kali掃描獲取靶場ip 目錄掃描獲取后臺地址 弱口令admin/snoopy進入后臺 此處可寫入一句話木馬 創建文件寫入一句話木馬 哥斯拉上線 使用lsb_release -a命令查看內核版本 方法一 使用ubuntu漏洞庫發現該…

Nginx:互斥鎖 accept_mutex配置

如何配置 Nginx 的互斥鎖 accept_mutex 1. 理解 accept_mutex 的作用 accept_mutex 是 Nginx 用于控制多工作進程&#xff08;worker processes&#xff09;接收新連接時避免「驚群問題&#xff08;Thundering Herd&#xff09;」的機制。 啟用時&#xff08;accept_mutex o…

aws(學習筆記第四十六課) codepipeline-build-deploy

文章目錄 aws(學習筆記第四十六課) codepipeline-build-deploy學習內容:1. 代碼鏈接及整體架構1.1 代碼鏈接1.2 整體架構1.2.1 初始化階段的`codecommit repo`以及`codebuild project`設定1.2.2 創建`vpc`,`public alb`,`alb listener`以及`fargate service`等1.2.3 創建`so…

Vue 項目中的組件職責劃分評審與組件設計規范制定

在現代前端系統中&#xff0c;Vue&#xff08;無論是 2.x 還是 3.x&#xff09;提供了良好的組件化機制&#xff0c;為構建復雜交互系統打下了基礎。然而&#xff0c;隨著項目規模增長&#xff0c;組件職責不清、代碼重疊、維護困難等問題頻發&#xff0c;嚴重影響開發效率與可…

react 的過渡動畫

一、React的過渡動畫 1、react-transition-group 在開發中&#xff0c;我們想要給一個組件的顯示和消失&#xff0c;添加某種過渡動畫&#xff0c;可以很好的增加用戶體驗&#xff0c; React社區為我們提供了react-transition-group用來完成過渡動畫&#xff0c; React曾為…

深度學習:PyTorch人工神經網絡優化方法分享(1)

本文目錄&#xff1a; 一、從梯度角度入手&#xff08;一&#xff09;梯度下降算法回顧&#xff08;二&#xff09;常用優化算法1.SGD&#xff08;Stochastic Gradient Descent&#xff09;- 隨機梯度下降2.BGD (Batch Gradient Descent) - 批量梯度下降3.MBGD (Mini-Batch Gra…

(三)yolov5——模型訓練

一、準備數據 先準備一個MP4的視頻 1.測試一幀 使用opencv來提取每一個視頻的幀 先使用以下代碼查看一幀的內容&#xff0c;是否符合預期 import cv2 import matplotlib.pyplot as plt# 打開視頻文件 video cv2.VideoCapture("111.mp4") # 讀取一幀 ret, frame…

008 Linux 開發工具(下) —— make、Makefile、git和gdb

&#x1f984; 個人主頁: 小米里的大麥-CSDN博客 &#x1f38f; 所屬專欄: Linux_小米里的大麥的博客-CSDN博客 &#x1f381; GitHub主頁: 小米里的大麥的 GitHub ?? 操作環境: Visual Studio 2022 文章目錄 Linux 開發工具&#xff08;下&#xff09;Linux 項目自動化構建工…

前綴和題目:連續的子數組和

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 解法思路和算法代碼復雜度分析 題目 標題和出處 標題&#xff1a;連續的子數組和 出處&#xff1a;523. 連續的子數組和 難度 5 級 題目描述 要求 給定一個整數數組 nums \texttt{nums} nums 和一個整數 k \tex…

隊的簡單介紹

隊列&#xff1a;只允許在一端進行插入數據操作&#xff0c;在另一端進行刪除數據操作的特殊線性表&#xff0c;隊列具有先進先出 FIFO(First In First Out)的特點。 入隊列&#xff1a;進行插入操作的一端稱為隊尾。 出隊列&#xff1a;進行刪除操作的一端稱為隊頭。 入隊列…

AI-Sphere-Butler之如何將豆包桌面版對接到AI全能管家~新玩法(一)

環境&#xff1a; AI-Sphere-Butler VBCABLE2.1.58 Win10專業版 豆包桌面版1.47.4 ubuntu22.04 英偉達4070ti 12G python3.10 問題描述&#xff1a; AI-Sphere-Butler之如何將豆包桌面版對接到AI全能管家~新玩法&#xff08;一&#xff09; 聊天視頻&#xff1a; AI真…

【STM32】啟動流程

1、.s啟動文件解析 STM32的啟動文件&#xff08;一般是.s匯編文件&#xff0c;如startup_stm32f407xx.s&#xff09;是STM32上電后執行的第一段代碼&#xff0c;承擔著“系統初始化化引導員”的角色。 它的主要作用是設置初始化棧指針&#xff08;SP&#xff09;、程序計數器&…

【vim】通過vim編輯器打開、修改、退出配置文件

通過vim編輯器打開任一配置文件 vim /etc/profile 英文輸入下&#xff0c;按i鍵進入INSERT模式&#xff0c;修改配置文件 完成修改后&#xff0c;按esc鍵退出INSERT模式 英文輸入下&#xff0c;輸入":wq!"&#xff0c;即可保存并退出 :q #不保存并退出 :q! …

Effective Modern C++ 條款6:當 auto 推導類型不符合預期時,使用顯式類型初始化慣用法

在C開發中&#xff0c;auto關鍵字以其簡潔性和高效性被廣泛使用。然而&#xff0c;“自動推導”并非萬能&#xff0c;尤其在某些特殊場景下&#xff0c;auto的推導結果可能與開發者預期不符&#xff0c;甚至導致未定義行為。今天&#xff0c;我們以《Effective Modern C》條款6…

學習Linux進程凍結技術

原文&#xff1a;蝸窩科技Linux進程凍結技術 功耗中經常需要用到&#xff0c;但是linux這塊了解甚少&#xff0c;看到這個文章還蠻適合我閱讀的 1 什么是進程凍結 進程凍結技術&#xff08;freezing of tasks&#xff09;是指在系統hibernate或者suspend的時候&#xff0c;將…

GitHub 趨勢日報 (2025年06月22日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 624 LLMs-from-scratch 523 ai-engineering-hub 501 n8n 320 data-engineer-handb…

kotlin中為什么新增擴展函數功能?

在 Kotlin 中&#xff0c;擴展函數的本質是「不修改原有類代碼&#xff0c;為其新增功能」&#xff0c;這源自編程中「開閉原則」&#xff08;對擴展開放&#xff0c;對修改關閉&#xff09;的第一性原理。 核心需求&#xff1a;當需要給第三方庫的類&#xff08;如 Android 的…

excel 數據透視表介紹

Excel 數據透視表(PivotTable)就是你的數據分析神器!它能幫你快速匯總、分類、比較和分析 大量數據&#xff0c;從看似雜亂無章的表格中一鍵提取關鍵信息 &#xff0c;生成交互式的匯總報告。無需復雜公式&#xff0c;只需拖拽幾下&#xff0c;就能讓數據“開口說話”&#xff…

半導體行業中的專用標準產品ASSP是什么?

半導體行業中的專用標準產品ASSP是什么&#xff1f; “專用標準產品”&#xff08;ASSP - Application Specific Standard Product&#xff09;是半導體集成電路中的一個重要分類。 你可以把它理解為介于通用標準產品和全定制ASIC之間的一種芯片。以下是它的核心定義和特點&a…

秋招Day14 - MySQL - 鎖

MySQL中有幾種類型的鎖&#xff1f; 鎖粒度來分&#xff0c;有表鎖、頁鎖和行鎖。 加鎖機制劃分&#xff0c;有樂觀鎖和悲觀鎖。 按兼容性劃分&#xff0c;有共享鎖和排他鎖。 按鎖模式劃分&#xff0c;有記錄鎖&#xff0c;間隙鎖&#xff0c;next-key鎖&#xff0c;意向鎖…