Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...

Vue2&3

  • 基礎性
    • 1. 關於Vue2和Vue3生命週期的差別
    • 2. Vue2&3組件之間傳參不同點
      • Vue2 傳遞與接收
      • Vue3 傳遞與接收 (使用script setup語法糖)
      • Vue3 傳遞與接收 (不使用script setup語法糖)
    • 3. Vue2&3 keep-alive 組件
      • Vue2 keep-alive
      • Vue3 keep-alive
  • 進階性
    • 爲什麼POST請求有時會重複調用兩次
      • 網路問題
      • 跨域請求與預檢請求
    • JS原型、原型鏈
      • 原型
      • 原型鏈
      • 繼承 有哪些繼承 優點是什麼
      • new 操作符具體干了什么
      • js 有哪些方法改變 this 指向
      • 對一個函數鏈式調用 bind,this 指向的是誰?為什么?

Alt

整個內容一般都是講Vue2&3的不同點 并無單個版本説明
博客為 >> 星光菌子 整理

基礎性

1. 關於Vue2和Vue3生命週期的差別

  • 相似的生命周期階段
    Vue 2Vue 3 都包含以下幾個核心的生命周期階段,且對應的鉤子函數功能類似

  • 創建階段:在實例初始化時觸發,主要用于初始化數據和事件
    Vue 2beforeCreatecreated
    Vue 3beforeCreatecreated
    不過在 Vue 3 的組合式 API 里,beforeCreate 和 created 可以省略因為 setup 函數在這個階段之前執行,能完成相同的初始化工作

  • 掛載階段:在實例掛載到 DOM 之前和之后觸發
    Vue 2beforeMountmounted
    Vue 3beforeMountmounted
    功能與 Vue 2 一致

  • 更新階段:當響應式數據發生變化,DOM 重新渲染前后觸發
    Vue 2beforeUpdateupdated
    Vue 3beforeUpdateupdated
    功能與 Vue 2 一致

  • 銷毀階段:在實例銷毀前后觸發,用于清理一些資源
    Vue 2beforeDestroy(Vue 2.2.0 起也叫 beforeUnmount)destroyed(Vue 2.2.0 起也叫 unmounted)
    Vue 3beforeUnmountunmounted
    beforeUnmount 替代了 Vue 2 的 beforeDestroy,unmounted 替代了 destroyed

2. Vue2&3組件之間傳參不同點

Vue 2Vue 3 中,組件之間傳參主要有兩個明顯不同點

  • 聲明方式

    • Vue 2 在組件選項中使用 props 選項以對象或數組形式聲明接收的屬性;
    • Vue 3script setup 中使用 defineProps 宏函數來聲明,在普通 script 中使用和 Vue 2 類似的 props 選項
  • 事件監聽

    • Vue 2 使用 $emit 觸發自定義事件,父組件使用 v-on@ 監聽;
    • Vue 3script setup 中使用 defineEmits 宏函數聲明可觸發的事件,觸發方式和 Vue 2 類似,但語法更簡潔

Vue2 傳遞與接收

# 父組件 Parent.vue<template><div><!-- 引入子組件并傳遞數據,同時監聽子組件觸發的事件 --><ChildComponent :message="parentMessage" @childEvent="handleChildEvent" /></div>
</template><script>
// 引入子組件
import ChildComponent from './Child.vue';export default {components: {ChildComponent},data() {return {// 父組件的數據,用于傳遞給子組件parentMessage: '來自 Vue 2 父組件的數據'};},methods: {// 處理子組件觸發的事件的方法handleChildEvent(data) {console.log('在 Vue 2 中收到來自子組件的數據:', data);}}
};
</script>
# 子組件 Child.vue<template><div><!-- 顯示從父組件接收到的數據 --><p>{{ message }}</p><!-- 點擊按鈕觸發向父組件發送事件 --><button @click="sendEventToParent">向父組件發送事件</button></div>
</template><script>
export default {// 聲明接收父組件傳遞的 propsprops: ['message'],methods: {// 觸發向父組件發送事件的方法sendEventToParent() {// 觸發自定義事件并傳遞數據給父組件this.$emit('childEvent', '來自 Vue 2 子組件的數據');}}
};
</script>

Vue3 傳遞與接收 (使用script setup語法糖)

# 父組件 Parent.vue<template><div><!-- 引入子組件并傳遞數據,同時監聽子組件觸發的事件 --><ChildComponent :message="parentMessage" @child-event="handleChildEvent" /></div>
</template><script setup>
import { ref } from 'vue';
// 引入子組件
import ChildComponent from './Child.vue';// 使用 ref 創建響應式數據,作為要傳遞給子組件的數據
const parentMessage = ref('來自 Vue 3 父組件的數據');// 處理子組件觸發的事件的方法
const handleChildEvent = (data) => {console.log('在 Vue 3 中收到來自子組件的數據:', data);
};
</script>
# 子組件 Child.vue<template><div><!-- 顯示從父組件接收到的數據 --><p>{{ message }}</p><!-- 點擊按鈕觸發向父組件發送事件 --><button @click="sendEventToParent">向父組件發送事件</button></div>
</template><script setup>
import { defineProps, defineEmits } from 'vue';// 聲明接收父組件傳遞的 props
const props = defineProps({message: String
});// 聲明可觸發的自定義事件
const emits = defineEmits(['child-event']);// 觸發向父組件發送事件的方法
const sendEventToParent = () => {// 觸發自定義事件并傳遞數據給父組件emits('child-event', '來自 Vue 3 子組件的數據');
};
</script>

Vue3 傳遞與接收 (不使用script setup語法糖)

# 父組件 Parent.vue<template><div><!-- 引入子組件,傳遞數據并監聽子組件觸發的事件 --><ChildComponent :message="parentMessage" @child-event="handleChildEvent" /></div>
</template><script>
import { ref } from 'vue';
// 引入子組件
import ChildComponent from './Child.vue';export default {components: {ChildComponent},setup() {// 使用 ref 創建響應式數據const parentMessage = ref('來自 Vue 3 父組件的數據');// 處理子組件觸發的事件的方法const handleChildEvent = (data) => {console.log('在 Vue 3 中收到來自子組件的數據:', data);};// 返回需要在模板中使用的數據和方法return {parentMessage,handleChildEvent};}
};
</script>
# 子組件 Child.vue<template><div><!-- 顯示從父組件接收到的數據 --><p>{{ message }}</p><!-- 點擊按鈕觸發向父組件發送事件 --><button @click="sendEventToParent">向父組件發送事件</button></div>
</template><script>
import { defineComponent } from 'vue';export default defineComponent({// 聲明接收父組件傳遞的 propsprops: {message: {type: String,required: true}},// 聲明可觸發的自定義事件emits: ['child-event'],setup(props, { emit }) {// 觸發向父組件發送事件的方法const sendEventToParent = () => {// 觸發自定義事件并傳遞數據給父組件emit('child-event', '來自 Vue 3 子組件的數據');};// 返回需要在模板中使用的方法return {sendEventToParent};}
});
</script>

3. Vue2&3 keep-alive 組件

keep-alive 是 Vue 提供的一個內置組件,用于緩存動態組件或路由組件,避免組件在切換時重復創建和銷毀,從而提高組件的性能和響應速度。下面分別介紹 Vue 2 和 Vue 3 中 keep-alive 的使用方法


activateddeactivated 是比較特殊的兩個鉤子,需要keep-live配合使用
當引入 keep-alive 的時候,頁面第一次進入,鉤子的觸發順序 created => mounted => activated退出時觸發 deactivated 當再次進入(前進或後退)時,只觸發activated

Vue2 keep-alive

Vue3 keep-alive

進階性

爲什麼POST請求有時會重複調用兩次

網路問題

有時瀏覽器為了確保請求的可靠性,會在網路不穩定的情況下自動重試請求
如果第一次 POST 請求因網路問題而沒有成功,瀏覽器可能會自動再發一次請求
這種情況下,我們會看到兩次 POST 請求

跨域請求與預檢請求

當我們進行跨網域請求時,尤其是使用 CORS(跨網域資源共用) 時,瀏覽器會在正式發送POST請求之前發送OPTIONS請求,這就是所謂的預檢請求
這是為了確定伺服器是否允許跨網域請求

fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': 'Bearer token'},body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));# 在開發者工具中,我們可以看到先發了一個OPTIONS請求,接著才是實際的POST請求

JS原型、原型鏈

原型

  • ① 所有引用類型都有一個 __proto__ (隱式原型) 屬性,屬性值是一個普通的對象
  • ② 所有函數都有一個 prototype(原型) 屬性,屬性值是一個普通的對象
  • ③ 所有引用類型的 __proto__ 屬性指向它構造函數的 prototype

原型鏈

當訪問一個對象的某個屬性時,會先在這個對象本身屬性上查找,如果沒有找到,則會去它的 __proto__ 隱式原型上查找,即它的構造函數的 prototype,如果還沒有找到就會再在構造函數的 prototype__proto__ 中查找,這樣一層一層向上查找就會形成一個鏈式結構,我們稱為原型鏈

原型鏈判斷

Object.prototype.__proto__; //null
Function.prototype.__proto__; //Object.prototype
Object.__proto__; //Function.prototype
Object instanceof Function; //true
Function instanceof Object; //true
Function.prototype === Function.__proto__; //true

繼承 有哪些繼承 優點是什麼

繼承(inheritance)是面向對象軟件技術當中的一個概念。如果一個類別 B“繼承自”另一個類別 A,就把這個 B 稱為“A 的子類”,而把 A 稱為“B 的父類別”也可以稱“AB 的超類”.

組合繼承: 原型鏈繼承和借用構造函數方法組合就是組合繼承。用原型鏈實現對原型屬性和方法的繼承,用借用構造函數技術來實現實例屬性的繼承.

寄生組合式繼承: 結合借用構造函數傳遞參數和寄生模式實現繼承。這是最成熟的方法,也是現在庫實現的方法

優點:繼承可以使得子類具有父類別的各種屬性和方法,在子類別繼承父類別的同時,可以重新定義某些屬性,并重寫某些方法,即覆蓋父類別的原有屬性和方法,使其獲得與父類別不同的功能


new 操作符具體干了什么

  • 新建一個空對象 obj
  • obj 的隱式原型和構造函數通過原型鏈連接起來
  • 將構造函數的 this 指向 obj
  • 如果該函數沒有返回對象,則返回 this
// 定義一個構造函數 Person,用于創建表示人的對象
// 構造函數通常首字母大寫,這是一種約定俗成的寫法,用于區分普通函數
// 參數 name 表示人的姓名,參數 age 表示人的年齡
function Person(name, age) {// 將傳入的 name 參數賦值給新對象的 name 屬性this.name = name;// 將傳入的 age 參數賦值給新對象的 age 屬性this.age = age;
}// 自定義的函數 myNew,用于模擬 new 操作符的功能
// 參數 constructor 是一個構造函數,也就是我們想要用來創建對象的函數
// 使用剩余參數語法 ...args 接收傳遞給構造函數的所有參數,這些參數會在構造函數執行時使用
function myNew(constructor, ...args) {// 步驟 1: 創建一個新對象// Object.create(constructor.prototype) 方法用于創建一個新對象,// 并將這個新對象的原型設置為構造函數的原型。// 這樣新對象就可以繼承構造函數原型上定義的所有屬性和方法const newObj = Object.create(constructor.prototype);// 步驟 2: 將新對象的 this 指向構造函數,并執行構造函數// constructor.apply(newObj, args) 方法調用構造函數,// 并將構造函數內部的 this 指向新創建的對象 newObj,// 同時將之前收集的參數 args 傳遞給構造函數,讓構造函數可以根據這些參數初始化新對象的屬性const result = constructor.apply(newObj, args);// 步驟 3: 判斷構造函數的返回值// 如果構造函數返回的是一個對象(通過 typeof result === 'object' 判斷類型為對象,// 并且 result!== null 排除返回值為 null 的情況,因為 typeof null 也會返回 'object'),// 就返回構造函數的返回值;// 否則,返回我們在步驟 1 中創建的新對象 newObjreturn typeof result === 'object' && result!== null? result : newObj;
}// 使用自定義的 myNew 函數創建對象
// 這里將 Person 構造函數作為第一個參數傳遞給 myNew,
// 并將 'John' 和 30 作為后續參數傳遞,這些參數會在 Person 構造函數執行時使用
const person = myNew(Person, 'John', 30);// 打印創建的對象
// 此時打印出的對象應該包含 name 和 age 屬性,值分別為 'John' 和 30
console.log(person); 
  • Object.create(constructor.prototype):這行代碼創建了一個新對象 newObj,并將其原型指向構造函數的原型,這樣,新對象就可以繼承構造函數原型上的屬性和方法
  • constructor.apply(newObj, args)使用 apply 方法將構造函數的 this 指向新對象 newObj,并執行構造函數,將參數 args 傳遞給構造函數
  • 返回值判斷:如果構造函數返回一個對象,則返回該對象;否則,返回新創建的對象 newObj

js 有哪些方法改變 this 指向

callapplybind
三者的第一個參數都是 this 需要指向的對象,但在后續的參數上只有 apply 是接收一個數組callbind 用逗號分開callapply 直接調用,返回的是一個值,而 bind 不直接調用,返回的是一個函數形式,執行:foo.bind(obj)()

# call()
# call() 方法允許你調用一個函數,同時指定該函數內部 this 的值,并且可以依次傳遞參數給函數
// 定義一個對象,后續將作為 this 的指向
const person = {name: 'Alice'
};
// 定義一個函數,函數內部使用 this 來訪問屬性
function introduce(hobby) {// 打印出根據 this 指向的對象屬性生成的介紹語句console.log(`大家好,我叫 ${this.name},我喜歡 ${hobby}`);
}
// 使用 call 方法調用 introduce 函數,并將 person 對象作為 this 的指向
// 同時傳遞 '畫畫' 作為 introduce 函數的參數
introduce.call(person, '畫畫'); # -------------------------------分割線-------------------------------------# apply()
# apply() 方法和 call() 方法類似,同樣用于調用函數并指定 this 的值,不同之處在于它接受一個數組作為函數的參數
// 定義一個對象,作為 this 的指向
const anotherPerson = {name: 'Bob'
};
// 定義一個函數,內部使用 this 訪問屬性
function introduceFood(food1, food2) {// 打印出根據 this 指向的對象屬性生成的喜歡食物的語句console.log(`我叫 ${this.name},我喜歡吃 ${food1}${food2}`);
}
// 使用 apply 方法調用 introduceFood 函數
// 將 anotherPerson 對象作為 this 的指向
// 并以數組形式傳遞 '披薩' 和 '漢堡' 作為函數參數
introduceFood.apply(anotherPerson, ['披薩', '漢堡']); # -------------------------------分割線-------------------------------------# bind()
# bind() 方法會創建一個新的函數,在調用時會將 this 的值設置為你提供的值,并且可以預先傳入部分參數
// 定義一個對象,作為 this 的指向
const student = {name: 'Charlie'
};
// 定義一個函數,內部使用 this 訪問屬性
function study(subject) {// 打印出根據 this 指向的對象屬性生成的學習語句console.log(`${this.name} 正在學習 ${subject}`);
}
// 使用 bind 方法創建一個新的函數 newStudy
// 將 student 對象作為新函數內部 this 的指向
// 并預先傳入 '數學' 作為參數
const newStudy = study.bind(student, '數學');
// 調用新函數
newStudy(); 

對一個函數鏈式調用 bind,this 指向的是誰?為什么?

JavaScript 中,對一個函數鏈式調用 bind 時,this 最終指向的是第一次調用 bind 時所指定的對象

  • 原因
    bind 方法會創建一個新的函數,在調用時這個新函數的 this 值會被鎖定為 bind 方法調用時第一個參數所指定的對象
    當對一個函數多次鏈式調用 bind 時,后續的 bind 調用并不會改變第一次 bind 所確定的 this 指向因為后續的 bind 是基于前一次 bind 所創建的新函數來操作的,而前一次 bind 已經固定了 this 的指向
// 定義一個簡單的函數,函數內部打印 this 的值
function printThis() {console.log(this);
}
// 創建一個對象,后續會將其作為 this 指向
const obj1 = { name: 'obj1' };
const obj2 = { name: 'obj2' };
// 第一次調用 bind,將 this 指向 obj1
const bound1 = printThis.bind(obj1);
// 對 bound1 再次調用 bind,嘗試將 this 指向 obj2
const bound2 = bound1.bind(obj2);
// 調用最終綁定后的函數
bound2(); 

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

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

相關文章

基于SpringBoot實現旅游酒店平臺功能一

一、前言介紹&#xff1a; 1.1 項目摘要 隨著社會的快速發展和人民生活水平的不斷提高&#xff0c;旅游已經成為人們休閑娛樂的重要方式之一。人們越來越注重生活的品質和精神文化的追求&#xff0c;旅游需求呈現出爆發式增長。這種增長不僅體現在旅游人數的增加上&#xff0…

【程序自動分析——并查集,離散化】

題目 代碼&#xff08;注意不是把p修改為unordered_map&#xff0c;而是增加一個get&#xff09; #include <bits/stdc.h> using namespace std;const int N 2e510; //n個數據&#xff0c;可能引入2*n個離散點int p[N]; bool cannot; unordered_map<int, int> mp…

審批流AntV框架螞蟻數據可視化X6餅圖(附注釋)

大家好&#xff0c;這次使用的是AntV的螞蟻數據可視化X6框架&#xff0c;類似于審批流的場景等&#xff0c;代碼如下&#xff1a; X6框架參考網址&#xff1a;https://x6.antv.vision/zh/examples/showcase/practices#bpmn 可以進入該網址&#xff0c;直接復制下方代碼進行調試…

linux取代ls的命令行工具:eza

官方倉庫 https://github.com/eza-community/eza 安裝 cargo install eza驗證 eza --version用法 替換ls 別名 安裝文檔 官方提供的安裝文檔是這個 https://github.com/eza-community/eza/blob/main/INSTALL.md 可以通過cargo命令安裝&#xff0c;debian還可以通過apt安裝…

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目錄 人人都該學習的DeepSeekDeepSeek不同版本功能差異DeepSeek與硬件直接的關系DeepSeek系統兼容性部署方式選擇部署步驟&#xff08;Ollama方式&#xff09;1.選定適合的deepseek版本2.環境準備3.安裝Ollama4.部署deepseek5.測試使用 人人都該學習的DeepSeek DeepSeek 作…

redis熱key

在 Redis 中&#xff0c;熱 Key&#xff08;Hot Key&#xff09; 是指被頻繁訪問的 Key&#xff0c;可能會導致以下問題&#xff1a; 性能瓶頸&#xff1a;單個 Redis 實例的 CPU 或網絡帶寬被耗盡。 數據傾斜&#xff1a;在 Redis 集群中&#xff0c;熱 Key 可能導致某個節點…

宇樹科技嵌入式面試題及參考答案(春晚機器人的公司)

目錄 設計一個帶看門狗(Watchdog)的嵌入式系統,描述故障恢復流程 在資源受限的 MCU 上實現 OTA 升級功能,描述關鍵設計點 如何實現 OTA(空中升級)功能?描述固件校驗和回滾機制的設計要點 推挽輸出與開漏輸出的區別?舉例說明其在 GPIO 控制中的應用 UART、SPI、I2C …

Axure常用變量及使用方法詳解

點擊下載《Axure常用變量及使用方法詳解.pdf》 摘要 Axure RP 作為一款領先的前端原型設計工具&#xff0c;提供了全面的 變量 和 函數 系統&#xff0c;以支持復雜的交互設計和動態內容展示。本文將從專業角度詳細解析 Axure 中的 全局變量、中繼器數據集變量/函數、元件變量…

SpringBoot - 用責任鏈模式實現業務編排

文章目錄 前因責任鏈&#xff1a;像工作臺一樣組織代碼CodeSEQ3.1 定義處理器規范3.2 實現具體處理器3.3 共享上下文3.4 組裝責任鏈 適用場景優勢 前因 2000多行的業務邏輯里&#xff0c;各種校驗規則、促銷計算、庫存操作像意大利面條一樣纏繞在一起。最要命的是這樣的代碼結…

upload-labs詳解(13-20)文件上傳分析

目錄 upload-labs-env upload-labs-env第十三關 文件包含漏洞 代碼 測試 上傳一個.jpg圖片 上傳一個.png文件 上傳一個.gif圖片 upload-labs-env第十四關 代碼 思路 upload-labs-env第十五關 代碼 思路 upload-labs-env第十六關 代碼 思路 測試 上傳gif格式…

網絡安全通信架構圖

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取網絡安全全套資料&#xff0c;資料在手&#xff0c;漲薪更快 在安全通信里面我經常聽到的2個東西就是SSL和TLS&#xff0c;這2個有什么區別呢&#xff1f;以及HTTPS是怎么通信的&#xff1f;包括對稱加密、非對稱加密、摘要、…

Java中的String類

目錄 1. String類的重要性 2. 常用方法 2.1 字符串構造 2.2 String對象的比較 2.3 字符串查找 2.4 轉化 2.5 字符串替換 2.6 字符串拆分 2.7 字符串截取 2.8 其他操作方法 2.9 字符串的不可變性 2.10 字符串修改 3. StringBuilder和StringBuffer 3.1 StringBuilde…

深度分頁介紹及優化建議

深度分頁介紹 查詢偏移量過大的場景我們稱為深度分頁&#xff0c;這會導致查詢性能較低&#xff0c;例如&#xff1a; # MySQL 在無法利用索引的情況下跳過1000000條記錄后&#xff0c;再獲取10條記錄 SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10 深度分頁問題的原…

live555推流服務器異常

1.后端異常信息&#xff1a; MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (100176). 48899 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least m…

每日OJ_牛客_宵暗的妖怪_DP_C++_Java

目錄 牛客_宵暗的妖怪_DP 題目解析 C代碼 Java代碼 牛客_宵暗的妖怪_DP 宵暗的妖怪 描述&#xff1a; 露米婭作為宵暗的妖怪&#xff0c;非常喜歡吞噬黑暗。這天&#xff0c;她來到了一條路上&#xff0c;準備吞噬這條路上的黑暗。這條道路一共被分為n 部分&…

20250306-筆記-精讀class CVRPEnv:step(self, selected)

文章目錄 前言一、if self.time_step<4:控制時間步的遞增判斷是否在配送中心特定時間步的操作更新更新當前節點和已選擇節點列表更新需求和負載更新訪問標記更新負無窮掩碼更新步驟狀態&#xff0c;將更新后的狀態同步到 self.step_state 二、使用步驟總結 前言 class CVRP…

Flowable 基本入門

flowable.7z官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤 1、Flowable介紹 Flowable是BPMN的一個基于java的軟件實現&#xff0c;不過Flowable不僅僅包括BPMN&#xff0c;還有DMN決策表和CMMN Case管理引擎&#xff0c;并且有自己的用戶管理、微服務API等一系列功能&a…

完全背包-一維數組

52. 攜帶研究材料&#xff08;第七期模擬筆試&#xff09; 題目描述 小明是一位科學家&#xff0c;他需要參加一場重要的國際科學大會&#xff0c;以展示自己的最新研究成果。他需要帶一些研究材料&#xff0c;但是他的行李箱空間有限。這些研究材料包括實驗設備、文獻資料和…

景聯文科技:以專業標注賦能AI未來,驅動智能時代的精準躍遷

在人工智能技術重塑全球產業格局的今天&#xff0c;高質量訓練數據已成為驅動算法進化的核心燃料。作為數據智能服務領域的領軍者&#xff0c;景聯文科技深耕數據標注行業多年&#xff0c;以全棧式數據解決方案為核心&#xff0c;構建起覆蓋數據采集、清洗、標注、質檢及算法調…

洛谷B2074 計算星期幾

B2074 計算星期幾 - 洛谷 代碼區&#xff1a; #include<algorithm> #include<iostream> #include<unordered_map> #include<string> using namespace std; int main() {unordered_map<int, string> m { { 1,"Monday" },{2,"Tue…