【藍橋杯】第十五屆省賽大學真題組真題解析

【藍橋杯】第十五屆省賽大學真題組真題解析

一、智能停車系統

1、知識點

(1)flex-wrap

控制子元素的換行方式
屬性值有:

  1. no-wrap不換行
  2. wrap伸縮容器不夠則自動往下換行
  3. wrap-reverse伸縮容器不夠則自動往上換行
(2)align-content調整多行側軸對齊方式

align-items調整單行側軸對齊方式
控制子元素在交叉軸上的對齊方式
屬性值有:

  1. flex-start側軸的起始位置對齊
  2. flex-end側軸的終止位置對齊
  3. center側軸的中間位置對齊
  4. space-around伸縮項目之間的距離相等是距離邊緣間距的2倍
  5. space-between伸縮項目之間的距離相等,距離邊緣間距為0
  6. space-evenly伸縮項目之間的距離相等是距離邊緣間距的1倍
(3)justify-content調整主軸對齊方式

控制子元素在主軸上的對齊方式
屬性值有:

  1. flex-start側軸的起始位置對齊
  2. flex-end側軸的終止位置對齊
  3. center側軸的中間位置對齊
  4. space-around伸縮項目之間的距離相等是距離邊緣間距的2倍
  5. space-between伸縮項目之間的距離相等,距離邊緣間距為0
  6. space-evenly伸縮項目之間的距離相等是距離邊緣間距的1倍

2、題解

flex-wrap: wrap; 
align-content: space-between;
justify-content: space-between;

二、布局切換

1、知識點

(1)classList
  1. add添加類
  2. remove移除類
  3. toggle切換類:如果元素已有該類名則移除,沒有則添加

2、題解

layoutOptions.forEach(function (option) {// 經典模式,瀏覽模式,工具模式點擊事件option.addEventListener('click', function () {// TODO:待補充代碼document.querySelector('.active').classList.remove('active');option.classList.toggle('active')// TODO:END //  以下代碼無需修改// 根據不同選項進行布局處理if (this === layoutOptions[0]) {// Classic modetool.style.display = "none"; // 隱藏工具layoutContainer.classList.add('two-column-layout'); // 添加兩列布局類layoutContainer.classList.remove('three-column-layout'); // 移除三列布局類} else if (this === layoutOptions[1]) {// Browse modetool.style.display = "none"; // 隱藏工具layoutContainer.classList.add('three-column-layout'); // 添加三列布局類layoutContainer.classList.remove('two-column-layout'); // 移除兩列布局類} else if (this === layoutOptions[2]) {// Tool modetool.style.display = 'flex'; // 顯示工具}mode.style.display = 'none'; // 隱藏布局容器});
});

三、產品360度展示

1、知識點

(1)Promise對象

Promise對象是一個構造函數,用來封裝異步操作并且返回成功或者失敗的結果
回調函數:函數A作為參數引入函數B,則稱函數A為回調函數
可以防止“回調地獄”現象產生
回調地獄:多個異步代碼需要按順序執行產生多層嵌套現象,可讀性極差

  • 存在一個異步任務
//封裝一個異步操作
const p = new Promise((resolve,reject) => {//調用一下兩個參數可相應改變promise狀態的值resolve('獲取成功')//或reject('獲取失敗')
})
p.then((data)=>{//then內部接受一個回調函數(resolve()),回調函數的參數設置為dataconsole.log(data)
})
.catch((err)=>{console.log(err)
})
  • 存在兩個異步任務
//封裝一個異步操作
const p = new Promise((resolve,reject) => {//調用兩個參數可改變promise狀態的值resolve('獲取成功')//或reject('獲取失敗')
})
p.then((data)=>{console.log(data)//分配第二個異步任務的功能,作為p.then的返回值return p1 = new Promise((resolve,reject) => {//調用兩個參數可改變promise狀態的值resolve('獲取成功')//或reject('獲取失敗')})
})
//用于處理上一個then返回的promise對象
.then((data)=>{console.log(data)
})
.catch((err)=>{console.log(err)
})
(2)async、await語法糖

在promise的基礎上簡化了異步代碼的編寫。
async可以定義異步函數,使該函數返回一個promise對象。如果異步函數返回一個值則會被promise.resolve包裝 如果異步函數返回異常則會被promise.reject包裝。
await被用于被async定義的異步函數中,用于等待一個promise對象完成,并返回一個promise值。如果await后面不是一個promise對象,那么他會被轉換成一個已解決的promise對象。

function one(){return 'one'
}
function two(){return new Promise((resolve,reject)=>{setTimeout(()=>{resolve('two')},2000)})
}
function three(){return 'three'
}
async function run(){console.log(one())console.log(await two())//可以等待two的異步函數執行完再往下繼續執行console.log(three())
}
(3)Promise.resolve方法

可以將一個普通值轉換為狀態為fulfilled的promise對象

(4)reduce方法

reduce方法是js數組對象中的一個高階方法,他對數組中的每個元素執行一個自定義的回調函數,并將結果匯總為單個值

語法:數組名.reduce(callback(accumulator,currentValue,currentIndex(可選),array()可選),initialValue(可選))
  1. 參數
  • callback是一個自定義的回調函數,參數可以設置accumulator,currentValue,currentIndex,array
    • accumulator:累加器,可保存上一次回調函數的返回值;在第一次調用回調函數時如果設置了initialValue,則accumulator初始值為initialValue,如果沒有設置initialValue,則accumulator的初始值為數組中的第一個元素(必選)
    • currentValue:當前正在處理的數組元素(必選)
    • currentIndex:當前正在處理的數組元素的所以(可選)
    • array:調用reduce()方法的數組(可選)
  • initialValue:第一次調用callback函數時,accumulator的初始值(可選)
  1. 返回值
    reduce()方法最后一次回調函數的返回值

2、題解

簡單的promise鏈式調用

const pipeline = (initialValue, sequence) => {// TODO: 待補充代碼return sequence.reduce((promise,currentFn)=>{return promise.then((result)=>{return currentFn(result)})},Promise.resolve(initialValue))
};

在第一次調用時,promise對象為Promise.resolve(initialValue),其解決值為initialValue。
在后續調用中,promise對象為then方法中返回的新promise對象,其解決值為上一個函數調用后的值。

async await語法糖

const pipeline = async (initialValue, sequence) => {// TODO: 待補充代碼let result = initialValuefor (const fn of sequence){result = await fn(result)}return result
};

如果await后面不是一個promise對象,那么他會被轉換成一個已解決的promise對象。

3、思路

pipeline函數的設計目標是按順序依次執行sequence數組中的所有函數,并且每個函數的輸入是上一函數的輸出。

  1. 通過reduce方法遍歷sequence數組,并且將返回值設置為初始值的已解決promise對象形式

在 pipeline 函數中,sequence 數組里的函數既可以是同步函數,也可以是返回 Promise 的異步函數。通過將初始值 initialValue 包裝成一個已解決狀態的 Promise(使用 Promise.resolve(initialValue)),可以確保后續處理的一致性。

  1. promise.then會在promise狀態變為fulfilled時執行內部的回調函數(第一次循環時,initalValue已經是一個已解決的promise對象所以會立即執行回調函數)
  2. 在回調函數內部,currentFn(result)會調用當前函數,并傳入上一個promise的結果作為參數result。

當currentFn是同步函數時,會立刻執行并且返回一個值,由于then的特性(then方法期望得到一個promise對象),返回的值會被包裝成一個已解決的promise對象(Promise.resolve(返回值))。
當currentFn是異步函數時,會等待promise狀態由pending轉變為resolved,然后返回一個已解決的promise對象。

  1. 返回的已解決的promise對象會重新傳入管道函數的參數promise累加器,進行下一輪的遍歷

四、多表單檢驗

1、知識點

(1)Element-plus

ElementPlus 是一個基于 Vue 3 構建的開源 UI 組件庫,它為開發者提供了一系列豐富、高質量且易于使用的組件,能夠幫助開發者快速搭建美觀、功能強大的 Web 應用程序。

(2)創建表單數據和校驗規則

使用reactive來創建表單數據對象,同時定義校驗規則。

  1. 創建表單數據
const form = reactive({name: '',sex: '',age: '',isCompetition: '',isEntrepreneurship: '',footnote: ''
})
  1. 創建校驗規則
    通常使用rules對象定義每個表單字段的校驗規則,每個規則的字段是一個數組,內部可以包含多個校驗規則,常見的規則屬性包括:
  • required表示該字段是否為必填項
  • message校驗不通過時的錯誤提示信息
  • trigger制定驗證邏輯的觸發方式
    • blur失去焦點時觸發
    • change值改變時觸發
  • minmax用于限制字符串或數組的長度
  1. 自定義校驗規則
    如果內置的校驗規則無法滿足需求時可以使用自定義校驗函數,如:
const validatePassword = (rule, value, callback) => {if (value === "") {callback(new Error("請輸入密碼"));} else if (value !== ruleForm.pass) {callback(new Error("密碼輸入不一致"));} else {callback();}
};

在這個示例中,validatePassword 是一個自定義的校驗函數,它接收三個參數:rule(當前校驗規則)、value(當前字段的值)和 callback(回調函數)。在校驗過程中,根據不同的情況調用 callback 函數,若校驗通過則直接調用 callback(),若校驗不通過則調用 callback(new Error(‘錯誤信息’)) 拋出錯誤。

(3)正則表達式檢驗

test 方法:test 是正則表達式對象的一個方法,它接受一個字符串作為參數,用于檢測該字符串是否包含符合正則表達式規則的部分。如果找到匹配項,test 方法返回 true;否則返回 false。

(4)reactive函數
  • reactive是Vue3提供的一個函數,他的作用是將一個普通的JavaScript對象轉換為一個響應式對象。當對象屬性發生變化時,與之相關的視圖會自動更新
  • reactive函數期望接受一個合法的對象字面量作為參數。對象字面量是由花括號包裹,包含一系列鍵對值的結構,鍵是屬性名值可以是各種數據類型reactive函數內不能聲明函數與變量,只能包含對象字面量

2、題解

// TODO:待補充代碼
const rules = reactive({name:[{validator:validateName = (rule,value,callback) => {if(value === ''){callback(new Error('請輸入姓名'))}else if (/[^\u4e00-\u9fa5]/g.test(value)){callback(new Error('只能輸入漢字'))}else{callback()}},trigger:'blur'}],sex:[{required:true,message:'請選擇性別',trigger:'blur'}],age:[{required:true,message:'請輸入年齡',trigger:'blur'}],isCompetition:[{required:true,message:'請選擇是否參加過編程比賽',trigger:'blur'}],isEntrepreneurship:[{required:true,message:'請選擇是否有過創業經歷',trigger:'blur'}]
})

五、找回連接的奇幻之旅

1、知識點

(1)arguments

基本概念:arguments對象包含了函數調用時傳入的所有參數,其索引從0開始,可以通過索引來訪問每個參數。不過argument并不是真正的數組,他沒有數組的方法(如map、filter),但是具備length屬性,用于表示傳入參數的數量。
雖然arguments并不是真正的數組,但是我們可以通過方法將其轉化為真正的數組

  • Array.from()方法
  • 擴展運算符...:可以將多余的參數(傳遞的參數在函數內部未被使用)收集到一個真正的數組中。

2、題解

function resetableOnce(fn) {// TODO: 待補充代碼let done = falselet resultfunction runOnce() {if(!done){result = fn(...arguments)done=!done}return result}function reset() {done = false}  // TODO: ENDreturn { runOnce, reset};
}

六、tree命令助手

1、知識點

(1)map方法

map()是數組的一個高階函數,它用于對數組中的每個元素執行一個給定的函數,并返回一個新的數組,新數組中的元素是原數組元素經過函數處理后的結果。
map方法的特點:

  • 不改變原數組:map()方法不會改變原始數組,而是返回一個新的數組。
  • 按順序執行:map()方法按照數組元素的順序依次調用回調函數,并且新數組中的元素順序與原數組一致。
  • 對稀疏數組的處理:map()方法會跳過數組中缺少的元素(即稀疏數組中的空位),不會為這些空位調用回調函數。

2、題解

// 生成文件樹
function generateTree(dirPath) {// TODO:待補充代碼const items = fs.readdirSync(dirPath)return items.map((item)=>{console.log('dirPath是:',dirPath);console.log('item是:',item);const itemPath =path.join(dirPath,item)console.log('itemPath是:',itemPath);if(fs.statSync(itemPath).isDirectory()){return {name:item,children:generateTree(itemPath)}}else{return {name:item}}})
}

七、Github明星項目統計

1、知識點

(1)filter方法

filter()方法是數組的一個常用高階函數,用于創建一個新數組,其中包含通過特定條件篩選出來的原數組中的元素。
filter方法的特點:

  • 不改變原數組:filter()方法不會改變原始數組,而是返回一個新的數組,新數組中的元素是根據條件篩選出來的原數組中的部分元素。
  • 按順序執行:filter()方法按照數組元素的順序依次調用回調函數,并且新數組中的元素順序與原數組中滿足條件的元素順序一致。
  • 對稀疏數組的處理:filter()方法會跳過稀疏數組中的空位,不會為這些空位調用回調函數,也不會將其包含在新數組中。
(2)slice方法

slice()方法是數組和字符串都具有的方法,用于提取原數組或字符串的一部分,并返回一個新的數組或字符串,而不改變原始數組或字符串

語法:array.slice(begin,end) 遵循左閉右開原則

(3)箭頭函數

在箭頭函數中如果使用花括號包裹函數體則需要return返回,不適用花括號包裹函數體則不需要return返回

(4)Vue.ref()
  • ref用于創建一個包含響應式數據的引用對象,當引用對象的值改變時vue會自動追蹤值的變化并更新與之綁定的dom元素。
  • 訪問和修改ref的值需要使用.value屬性,在 Vue 3 的 <script setup> 語法糖中,在模板里使用 ref 對象時可以直接引用,無需添加 .value,Vue 會自動處理。但在 JavaScript 代碼里,仍然需要使用 .value 來訪問和修改值。

2、題解

//任務1
<div>篩選語言<!-- TODO: 待補充代碼 --><select name="language" id="language" @change="changeHandle" v-model="language"><option v-for='lang in languages' :value="lang">{{lang}}</option></select>
</div>//任務2
// 語言篩選改變時或頁面數字輸入框數字改變時的處理函數
const changeHandle = () => {// TODO:待補充代碼let newData = chartData.value.filter((item)=>item.language === language.value)//響應式數據對象需要.value才能獲取到具體數值if(language.value === 'All'){newData = chartData.value}newData = newData.slice(pageStart.value-1,pageEnd.value)xData.value = newData.map((item)=>item.name)yData.value = newData.map((item)=>item.stars)initChart();
};

八、小藍驛站

1、知識點

(1)push方法

push方法是 JavaScript 中數組的一個常用方法,用于在數組的末尾添加一個或多個元素,并返回新數組的長度。

2、題解

//任務1
<!-- 聯系人列表 -->
<ul class="contacts-list"><!-- TODO:待補充代碼 目標 1  --><!--A 為例 start --><li class="contacts-group" v-for='(item,index) in contacts'>   <!-- 字母分組渲染 DOM 結構--><div class="contacts-group-title">{{item.letter}}</div>  <!-- 分組的 字母名稱 --><ul><li class="contact-item" v-for='i in item.contacts'> <!-- contact-item 人名渲染 dom 結構--><span class="contact-name">{{i.name}}</span><button class="del-contact-button">刪除</button></li></ul></li>
</ul>//任務2
// 定義添加聯系人的方法
const addContact = () => {// TODO:待補充代碼 目標 2 let inp = document.querySelector('.add-contact-input')let inpFirst = inp.value[0].toUpperCase()let index = contacts.value.map((item)=>item.letter).indexOf(inpFirst)if(index>=0){return contacts.value[index].contacts.push({"name":inp.value})}else{return contacts.value.push({"letter":inpFirst,"contacts":[{"name":inp.value}]})}// TODO:END// 添加完成清空聯系人輸入框newContact.value = "";
};

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

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

相關文章

flink operator v1.10對接華為云對象存儲OBS

1 概述 flink operator及其flink集群&#xff0c;默認不直接支持華為云OBS&#xff0c;需要在這些java程序的插件目錄放一個jar包&#xff0c;以及修改flink配置后&#xff0c;才能支持集成華為云OBS。 相關鏈接參考&#xff1a; https://support.huaweicloud.com/bestpracti…

免費PDF工具

Smallpdf.com - A Free Solution to all your PDF Problems Smallpdf - the platform that makes it super easy to convert and edit all your PDF files. Solving all your PDF problems in one place - and yes, free. https://smallpdf.com/#rappSmallpdf.com-解決您所有PD…

去中心化技術P2P框架

中心化網絡與去中心化網絡 1. 中心化網絡 在傳統的中心化網絡中&#xff0c;所有客戶端都通過一個中心服務器進行通信。這種網絡拓撲結構通常是一個星型結構&#xff0c;其中服務器作為中心節點&#xff0c;每個客戶端只能與服務器通信。如果客戶端之間需要通信&#xff0c;必須…

muduo源碼閱讀:linux timefd定時器

?timerfd timerfd 是Linux一個定時器接口&#xff0c;它基于文件描述符工作&#xff0c;并通過該文件描述符的可讀事件進行超時通知。可以方便地與select、poll和epoll等I/O多路復用機制集成&#xff0c;從而在沒有處理事件時阻塞程序執行&#xff0c;實現高效的零輪詢編程模…

Pinia 3.0 正式發布:全面擁抱 Vue 3 生態,升級指南與實戰教程

一、重大版本更新解析 2024年2月11日&#xff0c;Vue 官方推薦的狀態管理庫 Pinia 迎來 3.0 正式版發布&#xff0c;本次更新標志著其全面轉向 Vue 3 技術生態。以下是開發者需要重點關注的升級要點&#xff1a; 1.1 核心變更說明 特性3.0 版本要求兼容性說明Vue 支持Vue 3.…

【圖像處理 --- Sobel 邊緣檢測的詳解】

Sobel 邊緣檢測的詳解 目錄 Sobel 邊緣檢測的詳解1. 梯度計算2. 梯度大小3. 梯度方向4. 非極大值抑制5. 雙閾值處理6. 在 MATLAB 中實現 Sobel 邊緣檢測7.運行結果展示8.關鍵參數解釋9.實驗與驗證 Sobel 邊緣檢測是一種經典的圖像處理算法&#xff0c;用于檢測圖像中的邊緣。它…

LeetCode 熱題100 15. 三數之和

LeetCode 熱題100 | 15. 三數之和 大家好&#xff0c;今天我們來解決一道經典的算法題——三數之和。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求我們從一個整數數組中找到所有不重復的三元組&#xff0c;使得三元組的和為 0。下面我將詳細講解解題思路&#xff0c…

基因組組裝中的術語1——from HGP

Initial sequencing and analysis of the human genome | Nature 1&#xff0c;分層鳥槍法測序hierarchical shotgun sequencing

安全開發-環境選擇

文章目錄 個人心得虛擬機選擇ubuntu 22.04python環境選擇conda下載使用&#xff1a; 個人心得 在做開發時配置一個專門的環境可以使我們在開發中的效率顯著提升&#xff0c;可以避免掉很多環境沖突的報錯。尤其是python各種版本沖突&#xff0c;還有做滲透工具不要選擇windows…

數字體驗驅動用戶參與增效路徑

內容概要 在數字化轉型深化的當下&#xff0c;數字內容體驗已成為企業與用戶建立深度連接的核心切入點。通過個性化推薦引擎與智能數據分析系統的協同運作&#xff0c;企業能夠實時捕捉用戶行為軌跡&#xff0c;構建精準的用戶行為深度洞察模型。這一模型不僅支撐內容分發的動…

Python 字符串(str)全方位剖析:從基礎入門、方法詳解到跨語言對比與知識拓展

Python 字符串&#xff08;str&#xff09;全方位剖析&#xff1a;從基礎入門、方法詳解到跨語言對比與知識拓展 本文將深入探討 Python 中字符串&#xff08;str&#xff09;的相關知識&#xff0c;涵蓋字符串的定義、創建、基本操作、格式化等內容。同時&#xff0c;會將 Py…

使用C++實現簡單的TCP服務器和客戶端

使用C實現簡單的TCP服務器和客戶端 介紹準備工作1. TCP服務器實現代碼結構解釋 2. TCP客戶端實現代碼結構解釋 3. 測試1.編譯&#xff1a;2.運行 結語 介紹 本文將通過一個簡單的例子&#xff0c;介紹如何使用C實現一個基本的TCP服務器和客戶端。這個例子展示了如何創建服務器…

Java Web開發實戰與項目——Spring Boot與Spring Cloud微服務項目實戰

企業級應用中&#xff0c;微服務架構已經成為一種常見的開發模式。Spring Boot與Spring Cloud提供了豐富的工具和組件&#xff0c;幫助開發者快速構建、管理和擴展微服務應用。本文將通過一個實際的微服務項目&#xff0c;展示如何使用Spring Boot與Spring Cloud構建微服務架構…

VMware建立linux虛擬機

本文適用于初學者&#xff0c;幫助初學者學習如何創建虛擬機&#xff0c;了解在創建過程中各個選項的含義。 環境如下&#xff1a; CentOS版本&#xff1a; CentOS 7.9&#xff08;2009&#xff09; 軟件&#xff1a; VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…

Linux8-互斥鎖、信號量

一、前情回顧 void perror(const char *s);功能&#xff1a;參數&#xff1a; 二、資源競爭 1.多線程訪問臨界資源時存在資源競爭&#xff08;存在資源競爭、造成數據錯亂&#xff09; 臨界資源&#xff1a;多個線程可以同時操作的資源空間&#xff08;全局變量、共享內存&a…

LD_PRELOAD 繞過 disable_function 學習

借助這位師傅的文章來學習通過LD_PRELOAD來繞過disable_function的原理 【PHP繞過】LD_PRELOAD bypass disable_functions_phpid繞過-CSDN博客 感謝這位師傅的貢獻 介紹 靜態鏈接&#xff1a; &#xff08;1&#xff09;舉個情景來幫助理解&#xff1a; 假設你要搬家&#x…

【無人集群系列---無人機集群編隊算法】

【無人集群系列---無人機集群編隊算法】 一、核心目標二、主流編隊控制方法1. 領航-跟隨法&#xff08;Leader-Follower&#xff09;2. 虛擬結構法&#xff08;Virtual Structure&#xff09;3. 行為法&#xff08;Behavior-Based&#xff09;4. 人工勢場法&#xff08;Artific…

Oracle Fusion Middleware更改weblogic密碼

前言 當用戶忘記weblogic密碼時&#xff0c;且無法登錄到web界面中&#xff0c;需要使用服務器命令更改密碼 更改方式 1、備份 首先進入 weblogic 安裝目錄&#xff0c;備份三個文件&#xff1a;boot.properties&#xff0c;DefaultAuthenticatorInit.ldift&#xff0c;Def…

MongoDB 復制(副本集)

MongoDB 復制(副本集) 引言 MongoDB是一個高性能、可擴展、易于使用的文檔存儲系統。它以JSON-like的文檔存儲結構&#xff0c;支持靈活的數據模型。在分布式系統中&#xff0c;為了提高數據可用性和系統穩定性&#xff0c;常常需要實現數據的備份和冗余。MongoDB提供了副本集…

【Erdas實驗教程】009:非監督分類及分類后評價

文章目錄 一、分類過程二、分類評價ERDAS 的 ISODATA 算法是基于最小光譜距離來進行的非監督分類,聚類過程始于任意聚類平均值或一個已有分類模板的平均值;聚類每重復一次,聚類的平均值就更新一次,新聚類的均值再用于下次聚類循環。這個過程不斷重復,直到最大的循環次數已…