前端面試準備-1

1.NodeJS的優缺點

優點:
 · 高并發(最重要的優點)
 · 適合I/O密集型應用

缺點:
 · 不適合CPU密集型應用;CPU密集型應用給Node帶來的挑戰主要是:由于JavaScript單線程的原因,如果有長時間運行的計算(比如大循環),將會導致CPU時間片不能釋放,使得后續I/O無法發起;
   解決方案:分解大型運算任務為多個小任務,使得運算能夠適時釋放,不阻塞I/O調用的發起;
 · 只支持單核CPU,不能充分利用CPU
 · 可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰
   原因:單進程,單線程
   解決方案:(1)Nnigx反向代理,負載均衡,開多個進程,綁定多個端口;
        (2)開多個進程監聽同一個端口,使用cluster模塊;
 · 開源組件庫質量參差不齊,更新快,向下不兼容
 · Debug不方便,錯誤沒有stack trace

2.文件上傳的優化

  • 文件壓縮。對圖片、視頻等資源,使用前端壓縮(如使用 compressorjs)減少上傳體積。
  • 分片上傳(大文件)。將大文件拆分成多個小塊分片上傳。
  • 并發上傳控制。控制并發數(如最多同時上傳 3 個文件)防止資源占用過高;使用 Promise.allSettled、任務隊列或限制上傳并發工具(如 p-limit)。

3.切片上傳的要點

核心思想是:將大文件拆成若干小片段分批上傳,最終由后端合并還原成完整文件。

  • 切片策略:切片大小設置,然后使用 File.slice() API 切割
  • 文件唯一標識(fileId):為了正確合并和續傳,需要為文件生成唯一標識(通常基于文件名 + 文件大小 + hash)
  • 上傳控制邏輯:順序或并發上傳切片,通常采用 并發上傳(5~10 并發) 提高性能;同時攜帶元信息,每個切片應攜帶fileId、當前分片索引(chunkIndex)、分片總數(totalChunks)、是否為最后一塊、可選的 MD5 校驗值
  • 后端配合

4.ES6 特性

①:let和const

  • let: 塊級作用域,允許變量重新賦值

  • const: 塊級作用域,不允許重新賦值(但對象內容可變)

②:symbol

Symbol是ES6中引入的一種新的基本數據類型,用于表示一個獨一無二的值,不能與其他數據類型進行運算。它是JavaScript中的第七種數據類型,與undefined、null、Number(數值)、String(字符串)、Boolean(布爾值)、Object(對象)并列。

③:模板字符串

  • 在ES6之前,處理模板字符串:通過“\”和“+”來構建模板
  • 對ES6來說:用${}來界定;反引號(``)直接搞定;
<script>url="x"// es6之前let html="<div>"+" <a>"+url+"</a>"+"</div>";//es6let eshtml=`<div><a>${url}</a></div>`
</script>

④:解構表達式

解構賦值是對賦值運算符的擴展。它是一種針對數組或者對象進行模式匹配,然后對其中的變量進行賦值。字符串、以及ES6新增的Map和Set?都可以使用解構表達式

//數組解構let [a,b,c] = [1,2,3];
console.log(a,b,c);    //1,2,3let [a,b,c] = [1,,3];
console.log(a,b,c);    //1,undefined,3let [a,,b] = [1,2,3];
console.log(a,b);//1,3let [a,..b] = [1,2,3];  //...是剩余運算符,表示賦值運算符右邊除第一個值外剩余的都賦值給b
console.log(a,b);//1,[2,3]//對象解構
let obj = { name: "山里", age: 18, sex: "m" 
};let { name, age, sex } = obj;
console.log(name, age, sex); //'山里' 18 'm'let { name: myName, age: myAge, sex: mySex } = obj; //自定義變量名
console.log(myName, myAge, mySex); //'山里' 18 'm'

⑤:Map和Set屬于es6新增加的對象

  • Map對象用于保存鍵值對,任何值JavaScript支持的值都可以作為一個鍵(key)或者一個值(value)。
  • Set對象和Map對象類似,但它存儲不是鍵值對。類似數組,但它的每個元素都是唯一的
const set = new Set([1, 2, 2, 3]); // 去重
const map = new Map([['a', 1], ['b', 2]]);

⑥:函數增強

  • 默認參數
//默認參數
function greet(name = '游客') {console.log(`你好,${name}`);
}
  • 箭頭函數。箭頭函數實現了一種更加簡潔的書寫方式。箭頭函數內部沒有arguments,也沒有prototype屬性,所以不能用new關鍵字調用箭頭函數。
    箭頭函數和普通函數最大的區別在于其內部this永遠指向其父級對象的this。(重點)
let add = (a,b) => {return a+b;
}
let print = () => {console.log('hi');
}
let fn = a => a * a;
//當只有一個參數時,括號可以省略,函數體只有單行return語句時,大括號也可以省略。

⑦:類(Class)

class?作為對象的模板被引入ES6,你可以通過?class?關鍵字定義類。class?的本質依然是一個函數。

//類的定義和繼承
class Person {constructor(name) {this.name = name;}sayHi() {console.log(`Hi, I'm ${this.name}`);}
}class Student extends Person {constructor(name, grade) {super(name);this.grade = grade;}
}

⑧:模塊化(Module)

優點:1.防止命名沖突;2.復用性強

// a.js
export const PI = 3.14;
export default function add(a, b) { return a + b; }// b.js
import add, { PI } from './a.js';

⑨:Promise 異步處理

const p = new Promise((resolve, reject) => {setTimeout(() => resolve('成功'), 1000);
});
p.then(result => console.log(result));

5. async-await 和 Promise的關系

async/awaitPromise 是 JavaScript 中處理異步操作的兩種方式。其中,async/await 是建立在 Promise 之上的語法糖

特性Promiseasync/await
語法形式.then() / .catch()async 函數 + await
可讀性回調鏈(可能嵌套過多)更像同步代碼,結構清晰
錯誤處理.catch()try...catch
基礎依賴原生特性構建于 Promise 之上
// Promise 寫法
function getData() {return new Promise((resolve, reject) => {setTimeout(() => resolve('數據已獲取'), 1000);});
}getData().then(res => {console.log(res);}).catch(err => {console.error(err);});
// async/await 寫法
function getData() {return new Promise((resolve, reject) => {setTimeout(() => resolve('數據已獲取'), 1000);});
}async function fetchData() {try {const res = await getData(); // 等待 Promise 完成console.log(res);} catch (err) {console.error(err);}
}fetchData();//await 后面跟的是一個 Promise
//async/await 實際上是對 Promise 的封裝與優化

6.async-await原理

async/await?是基于?Promise?的語法糖,使得異步代碼看起來像同步代碼。async?函數返回一個?Promise?對象,await?表達式用于等待一個?Promise?完成。

async/await?的底層實現可以類比于生成器(Generator)函數和自動執行器。生成器函數可以在執行過程中暫停和恢復,這為實現異步流程控制提供了可能。

7.箭頭函數和普通函數

特性普通函數箭頭函數
this 指向動態綁定,由調用方式決定靜態綁定,取決于定義時所在作用域
arguments 對象arguments 對象沒有 arguments,可用 rest 參數代替
構造函數可作為構造函數(new Fn()? 不可作為構造函數,不能 new
原型 prototype.prototype 屬性沒有 .prototype 屬性
代碼簡潔性相對冗長更加簡潔,適合寫匿名函數或回調
能否綁定 this可使用 bind, call, apply 綁定無效,this 永遠固定(詞法作用域)

*this 指向:普通函數:調用時決定 this。箭頭函數:定義時決定 this(繼承外層作用域)

8.lodash的深拷貝怎么實現

在JavaScript中,我們經常需要復制對象。但是,JavaScript的對象復制通常只是淺復制,這意味著它只復制對象的最頂層屬性,而不復制嵌套對象或數組的內部元素。這就是為什么我們有時需要深拷貝的原因。深拷貝將復制對象的所有層級,包括嵌套的對象和數組。

在使用 Lodash 時,可以通過 _.cloneDeep 方法實現 深拷貝(deep copy),這是 Lodash 提供的內置方法,用于遞歸地克隆一個值,包括嵌套的對象、數組等復雜數據結構。

9.對象環引用的檢測

①:設置檢查標記。可以給每個對象設置一個標記;或者使用 WeakSet 代替顯式打標。

②:將對象引用地址存入數組,檢測是否已存在。可以改進用?Set 代替數組。

10.vue中的computed和watch

①:computed(計算屬性)

  • 作用:基于響應式依賴進行緩存的派生計算

  • 特點

    • 返回一個值

    • 僅在依賴變化時重新計算

    • 用于模板中展示或復雜邏輯封裝

  • <template><div>總價:{{ totalPrice }}</div>
    </template><script setup>
    import { ref, computed } from 'vue';const price = ref(100);
    const count = ref(2);//  自動依賴 price 和 count,且具備緩存
    const totalPrice = computed(() => price.value * count.value);
    </script>

②:watch(偵聽器)

  • 作用:在數據變化時執行副作用邏輯

  • 特點

    • 適合執行異步操作、手動處理邏輯

    • 可以偵聽多個源或深層屬性

  • <script setup>
    import { ref, watch } from 'vue';const searchText = ref('');// 監聽輸入內容變化,做防抖搜索等副作用處理
    watch(searchText, (newVal, oldVal) => {console.log(`搜索內容從 "${oldVal}" 變為 "${newVal}"`);// 可調用 API 等操作
    });
    </script>
    

11.reactive

在 Vue 3 中,reactive 是 Composition API 中用于創建響應式對象的核心方法。它可以將一個普通的 JavaScript 對象轉換為響應式對象,從而在數據發生變化時自動更新視圖。

ref 的區別:

特性reactiveref
用于對象、數組、嵌套結構原始值(字符串、數字等)或任意值
響應式訪問直接訪問屬性.value 獲取/設置
結構深度響應深層響應?深層對象需搭配 reactive
// reactive 示例
const obj = reactive({ count: 1 });
obj.count++; // 自動響應視圖更新// ref 示例
const num = ref(1);
num.value++; // 注意:需要 .value

12.vue2和vue3的區別

①:響應式系統的改變

Vue2 使用 Object.defineProperty 實現響應式,無法直接監聽數組下標變動或對象屬性的添加/刪除。而 Vue3 改為使用 Proxy,可以實現對對象任意屬性的監聽,性能更高、限制更少,也更易于維護。

②:組合式 API 的引入

Vue2 使用“選項式 API”,即通過 datamethodscomputedwatch 等分散定義組件邏輯,導致邏輯難以復用和維護。

Vue3 引入了“組合式 API”,通過 setup() 函數配合 refreactivecomputed 等函數來組織邏輯,更加靈活,便于邏輯復用和 TypeScript 支持。

③:性能優化

④:TypeScript 支持增強

⑤:新特性的引入

13.模板和JSX

  • JSX 是?JavaScript?XML 的縮寫,是 React 框架中的一種語法擴展。它允許開發者在 JavaScript 代碼中直接編寫類似 HTML 的語法,從而更直觀地構建用戶界面。
  • 模板 (Template) 通常是指在前端框架中使用的一種定義 UI 結構的方式。它們通常與特定的框架綁定,例如?Vue.js 中的模板語法,Angular 中的模板語法等。

①:JSX 的優點
更強的 JavaScript 集成:JSX 是 JavaScript 的一部分,可以在 JSX 代碼中編寫任意 JavaScript 表達式。這個特性使得組件邏輯和視圖可以緊密結合。

單文件組件:使用 JSX 時,組件的模板、邏輯和樣式通常在同一個文件中,這使得組件更加自包含,易于管理和重用。

React 生態系統:JSX 是 React 的核心部分,因此使用 JSX 可以更好地利用 React 提供的各種工具和庫。

②:JSX 的缺點
學習曲線:對于沒有 React 經驗的開發者來說,JSX 可能有一定的學習難度,尤其是在理解 JavaScript 和 JSX 之間的轉換時。

可讀性:雖然 JSX 使得 JavaScript 和模板代碼混合在一起,但對于習慣于分離視圖和邏輯的開發者來說,這種方式可能會降低代碼的可讀性。

③:模板的優點
分離關注點:模板語法通常將視圖和邏輯分開,保持代碼的清晰和可維護性。例如,在 Vue.js 中,模板負責定義視圖,而邏輯和數據綁定在組件腳本部分處理。

直觀的語法:模板語法通常類似于 HTML,這使得前端開發者尤其是設計師更容易上手和理解。

框架支持:模板語法通常與框架緊密集成,提供豐富的指令和綁定機制,簡化了常見的 UI 操作。

④:模板的缺點
靈活性較差:由于模板語法通常是框架特定的,它們在處理復雜邏輯時可能不如 JSX 靈活。

單文件組件限制:雖然模板語法也支持單文件組件,但在某些框架中,模板、邏輯和樣式分離在不同的部分,這可能會導致管理上的不便。
?

14.vite和Webpack

15.常用git命令

  • git init? ?初始化本地 Git 倉庫
  • git clone <url>? ? ??克隆遠程倉庫到本地
  • git status? ? ? ? ?查看當前工作區狀態
  • git add .? ? ? ??添加所有修改過的文件到暫存區
  • git commit -m "說明"???? ? ? ? ? 提交暫存區到本地倉庫????
  • ?git branch? ? ? ?查看本地分支
  • git branch <分支名>? ? ? ?創建新分支
  • ?git checkout <分支名>? ? ? ? ??切換分支
  • git push? ? ? ? ?推送本地改動到遠程
  • git log? ? ? ? ?查看提交歷史

16.Vue修改數據后能獲取最新的dom?

在 Vue 中,修改數據后不能立即獲取最新的 DOM,因為 Vue 的 DOM 更新是異步的。這意味著在你更改響應式數據后,Vue 會在下一個“tick”(事件循環的下一個微任務隊列中)統一執行 DOM 更新。

正確獲取最新 DOM 的方法:使用 nextTick

這是 Vue 提供的官方方式,等 DOM 更新后再執行回調。

import { nextTick } from 'vue'await nextTick()
// 或
nextTick(() => {// DOM 已更新
})

17.后端傳遞過來十條數據,前端需要制作一個垂直的無限循環滾動展示的效果。如何實現?

使用 CSS 動畫 + JavaScript DOM 克隆機制。將列表復制一份接在原始列表之后,形成“頭尾連接”。然后使用 CSS 動畫持續向上滾動整個容器,當滾動到底部(即一輪滾完),立即跳回頂部,繼續滾動。

<template><div class="news-wrapper"><ul class="news-list" ref="newsList"><li v-for="(news, index) in renderList" :key="index">{{ news }}</li></ul></div>
</template><script setup>
import { ref, onMounted } from 'vue'const news = ["新聞1", "新聞2", "新聞3", "新聞4", "新聞5","新聞6", "新聞7", "新聞8", "新聞9", "新聞10"
]const renderList = [...news, ...news] // 克隆一份實現無縫滾動
</script><style scoped>
.news-wrapper {height: 300px;overflow: hidden;
}
.news-list {animation: scrollUp 10s linear infinite;padding: 0;margin: 0;
}
.news-list li {height: 30px;line-height: 30px;border-bottom: 1px solid #eee;list-style: none;
}@keyframes scrollUp {0% { transform: translateY(0); }100% { transform: translateY(-50%); }
}
</style>

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

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

相關文章

GO并發過高導致程序崩潰如何解決

#作者&#xff1a;曹付江 文章目錄 1.并發過高導致程序崩潰2. 如何解決2.1 利用 channel 的緩存區2.2 利用第三方庫 3 調整系統資源的上限3.1 ulimit3.2 虛擬內存(virtual memory) 1.并發過高導致程序崩潰 看一個非常簡單的例子&#xff1a; func main() {var wg sync.WaitG…

Linux -- gdb/cgdb的認識和使用

預備知識 程序的發布?式有兩種&#xff0c; debug 模式和 release 模式&#xff0c; Linux gcc/g 出來的?進制程 序&#xff0c;默認是 release 模式。 要使?gdb調試&#xff0c;必須在源代碼?成?進制程序的時候, 加上 -g 選項&#xff0c;如果沒有添加&#x…

window 顯示驅動開發-Direct3D 呈現性能改進(四)

調用資源創建、映射和取消映射函數的行為更改 對于 WDDM 1.3 及更高版本驅動程序實現的這些函數&#xff0c;Direct3D 運行時為映射默認方案提供一組受限的輸入值。 這些受限值僅適用于支持功能級別 11.1 及更高版本的驅動程序。 CreateResource (D3D11) 函數— 這些輸入 D3…

3.python操作mysql數據庫

前言&#xff1a;在現代應用程序中&#xff0c;數據庫扮演者至關重要的角色。mysql是一個流行的關系型數據庫管理系統&#xff0c;廣泛應用于各種規模的應用中。在pytho中&#xff0c;我們可以通過連接庫與mysql數據庫進行交互&#xff0c;實現數據的增刪改查操作。與此同時&am…

day023-網絡基礎與OSI七層模型

文章目錄 1. 網絡基礎知識點1.1 網絡中的單位1.2 查看實時網速&#xff1a;iftop1.3 交換機、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追蹤命令 3. 通用網站網絡架構4. 局域網上網原理-NAT5. 虛擬機上網原理6. 虛擬機的網絡模式6.1 NAT模式6.2 橋接模式6.3 僅主機模式 7.…

DeepSeek智能對話助手項目

目錄&#xff1a; 1、效果圖2、實現代碼3、溫度和TopK的作用對比 1、效果圖 2、實現代碼 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…

視覺中國:鏡頭下的中國發展圖景

2025年5月下旬&#xff0c;從北國草原到江南水鄉&#xff0c;從文化遺產到科技創新&#xff0c;中國大地上演著一幕幕生機勃勃的圖景。河北張家口的沙狐幼崽與濕地生態和諧共生&#xff0c;湖北襄陽的茶園雕琢出詩意田園&#xff1b;北京殷商文創的活力、沈陽文物情景劇的創意&…

LabVIEW 中內存釋放相關問題

在LabVIEW 編程領域&#xff0c;內存管理是一個關鍵且復雜的議題。我們常常關注 LabVIEW 如何將內存釋放回操作系統&#xff08;OS&#xff09;&#xff0c;以及是否有方法確保在特定數據結構&#xff08;如隊列、變體屬性、動態數據引用 DVR 等&#xff09;銷毀、刪除或清空后…

基于正點原子阿波羅F429開發板的LWIP應用(4)——HTTP Server功能

說在開頭 正點原子F429開發板主芯片采用的是STM32F429IGT6&#xff0c;網絡PHY芯片采用的是LAN8720A(V1)和YT8512C(V2)&#xff0c;采用的是RMII連接&#xff0c;PHY_ADDR為0&#xff1b;在代碼中將會對不同的芯片做出適配。 CubeMX版本&#xff1a;6.6.1&#xff1b; F4芯片組…

設計模式-結構型模式(詳解)

適配器模式 將一個類的接口轉換成客戶端期望的另一個接口&#xff0c;解決接口不兼容問題。 適配器模式由四部分組成&#xff1a; 客戶端&#xff1a;即需要使用目標接口的類 目標接口 需要適配的類&#xff0c;也就是已經存在好的功能&#xff0c;但客戶端通過目標接口沒辦…

銀河麒麟操作系統下載

產品試用申請國產操作系統、麒麟操作系統——麒麟軟件官方網站 下載頁面鏈接如上&#xff0c;申請試用即可。 申請試用填寫后提交&#xff0c;界面就變成了這樣&#xff0c;可以挑選適合自己的版本。 海思麒麟9006C版&#xff0c;如下&#xff1a; 本地下載&#xff1a;Kylin…

[CARLA系列--03]如何打包生成CARLA 0.9.15的非編輯版(地圖的加載與卸載)

前兩篇文章介紹了如何去安裝可編輯版的CARLA 0.9.15&#xff0c;這個完整的工程文件實在是太大了&#xff0c;大概消耗了100個G的磁盤空間&#xff0c;當在進行一個CARLA項目的時候&#xff0c;不利于在每個開發電腦都去安裝部署一套CARLA 0.9.15的源碼&#xff0c;所以把自己這…

【機器學習基礎】機器學習入門核心算法:樸素貝葉斯(Naive Bayes)

機器學習入門核心算法&#xff1a;樸素貝葉斯&#xff08;Naive Bayes&#xff09;&#xff09; 一、算法邏輯1.1 基本概念1.2 基本流程 二、算法原理與數學推導2.1 貝葉斯定理2.2 樸素貝葉斯分類器2.3 不同分布假設下的概率計算2.3.1 高斯樸素貝葉斯&#xff08;連續特征&…

云服務器系統盤滿了,但是其他正常,是否可能是被攻擊了

目錄 問題背景分析解決系統盤滿的問題解決結果 問題背景 今天登錄我的云服務器看了眼&#xff0c;發現系統盤滿了&#xff0c;但是其他正常 分析 1、首先要確認是否是被攻擊&#xff1a; top / htop (安裝&#xff1a;yum install htop 或 apt install htop)&#xff1a;…

雙因子COX 交互 共線性 -spss

SPSS 簡要界面操作步驟(針對雙因子 COX 分析) 1. 數據準備 變量格式:確保數據已整理為以下格式(示例): 時間變量(如 Time_to_Recurrence)結局變量(如 Recurrence:1=復發,0=未復發)預測變量(CSPG4_HSCORE、FAM49B_Status 二分類變量)協變量(如 Lesion_Size、Pat…

【MySQL】第12節|MySQL 8.0 主從復制原理分析與實戰(二)

一、組復制&#xff08;MGR&#xff09;核心概念 1. 定義與定位 目標&#xff1a;解決傳統主從復制的單點故障、數據不一致問題&#xff0c;提供高可用、高擴展的分布式數據庫方案。基于 GTID&#xff1a;依賴全局事務標識符&#xff08;GTID&#xff09;實現事務一致性&…

React 泛型組件:用TS來打造靈活的組件。

文章目錄 前言一、什么是泛型組件&#xff1f;二、為什么需要泛型組件&#xff1f;三、如何在 React 中定義泛型組件&#xff1f;基礎泛型組件示例使用泛型組件 四、泛型組件的高級用法帶默認類型的泛型組件多個泛型參數 五、泛型組件的實際應用場景數據展示組件表單組件狀態管…

如何手搓一個查詢天氣的mcp server

環境配置煩請移步上一篇博客 這里直接步入主題&#xff0c;天氣查詢的api用的是openweather&#xff0c;免費注冊就可以使用了 每天1000次內使用時免費的&#xff0c;大概的api 如下 https://api.openweathermap.org/data/2.5/weather?qBeijing,cn&APPID注冊后可以拿到一個…

深入解析計算機網絡核心協議:ARP、DHCP、DNS與HTTP

文章目錄 一、ARP&#xff08;地址解析協議&#xff09;1.1 定義與功能1.2 工作原理1.3 應用場景1.4 安全風險與防御 二、DHCP&#xff08;動態主機配置協議&#xff09;2.1 定義與功能2.2 工作原理2.3 應用場景2.4 優缺點與安全建議 三、DNS&#xff08;域名系統&#xff09;3…

《Java 單例模式:從類加載機制到高并發設計的深度技術剖析》

【作者簡介】“琢磨先生”--資深系統架構師、985高校計算機碩士&#xff0c;長期從事大中型軟件開發和技術研究&#xff0c;每天分享Java硬核知識和主流工程技術&#xff0c;歡迎點贊收藏&#xff01; 一、單例模式的核心概念與設計目標 在軟件開發中&#xff0c;我們經常會遇…