前端面試手撕題目全解析

以下是前端面試中常遭遇的“手撕”基礎題目匯總,涵蓋 HTML→JS→Vue→React,每題附經典實現/原理解析,可現場答題或后端總結。


HTML 基礎題 📝

  1. 語義化卡片(Semantic Card + ARIA)

    <article class="card" aria-label="Product Card"><header><h2 class="card-title">超輕量可折疊水杯</h2></header><section class="card-body"><p class="description">不占空間,隨時隨地喝水</p><button aria-label="Add to cart">🛒</button></section>
    </article>
    

    ? 掌握 <main>, <article>, <section>, <header> 等 HTML5 語義標簽;為無障礙輔助技術提供兼容(通過 aria-label);

  2. Sticky Footer 實現(Flex 布局 + min-height: 100vh

    <body class="page"><main class="content">…多內容…</main><footer class="footer">? 2025 Demo 公司</footer>
    </body>
    
    html, body { margin:0; padding:0; }
    .page { min-height:100vh; display:flex; flex-direction:column; }
    .content { flex:1; }
    .footer { height:60px; background:#f3f3f3; }
    
  3. 自定義元素 + Native Form 驗證示例

    <label for="age">年齡<label><input id="age" type="number" min="1" max="120" required>
    <button onclick="form.reportValidity()">提交</button>
    

    ? 演示如何結合自定義 typerequired 以及 reportValidity() 顯示原生錯誤提示。


JavaScript 常考題 💡

手寫防抖 & 節流

function debounce(fn, ms = 300) {let timer;return function(...args) {clearTimeout(timer);timer = setTimeout(() => fn.apply(this, args), ms);};
}function throttle(fn, ms = 300) {let last = 0, timer = null;return function(...args) {const now = Date.now();if (now - last < ms) {clearTimeout(timer);timer = setTimeout(() => {last = Date.now();fn.apply(this, args);}, ms - (now - last));} else {last = now;fn.apply(this, args);}};
}

? 面試時經典考察滾動、輸入頻率控制函數,應理解 clearTimeout 的作用與首次觸發/尾觸發的區別。文中提到防抖 vs 節流面試解析非常常見 (掘金)。


Promise.all() 簡易版

Promise.myAll = function(iterable) {return new Promise((resolve, reject) => {const arr = Array.from(iterable);if (arr.length === 0) return resolve([]);const res = new Array(arr.length);let count = 0;arr.forEach((p, i) => {Promise.resolve(p).then(val => {res[i] = val;count += 1;if (count === arr.length) resolve(res);}).catch(reject);});});
};

? 面試中對實現并發控制、失敗短路、位置保持非常常見 (大廠面試每日一題, 思否)。


深拷貝(DeepClone)示例

function deepClone(obj, map = new WeakMap()) {if (obj === null || typeof obj !== 'object') return obj;if (map.has(obj)) return map.get(obj);const clone = obj instanceof Date ? new Date(obj): obj instanceof RegExp ? new RegExp(obj): Array.isArray(obj) ? []: {};map.set(obj, clone);Reflect.ownKeys(obj).forEach(key => {clone[key] = deepClone(obj[key], map);});return clone;
}

? 要處理循環引用、特殊對象、保持原型鏈與不可枚舉屬性等深度拷貝復雜性 (ExplainThis)。


事件循環 + 宏任務/微任務機制解析(經典題)

題目示例:

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');

輸出結果: A D C B

解析: 瀏覽器事件循環會先執行同步代碼(A, D),然后將 .then 放入微任務隊列(優先級高),立即執行(C),最后執行宏任務隊列中的 setTimeout 回調(B) (CSDN博客)。

? 面試常見用以檢測對 JS 單線程、事件循環模型與 async/await背后原理的掌握。


Vue 基礎題目 🧪

  1. 生命周期順序與場景適用:

    beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeUnmount/ destroyed
    

    ? 可用于初始化數據、手動注冊訂閱、第三方插件掛載、子組件交互等場景 (ExplainThis)。

  2. 手寫簡化 v-model 指令支持 <input> 雙向綁定:

    app.directive('model', {beforeMount(el, binding, vnode) {el.value = binding.value;el.addEventListener('input', e => {vnode.context[binding.expression] = e.target.value;});},updated(el, binding) {if (el.value !== binding.value) el.value = binding.value;}
    });
    

    ? 考察 listener + props sync,理解 update hook 中避免老值 stale problem。

  3. Vue 的響應式原理(簡版偽代碼):

    • 使用 Object.defineProperty 攔截 getter/setter,收集依賴;
    • 每個組件對應一個 Watcher,監聽屬性變化后發起重新渲染;
    • Dep.notify() 通知所有 watcher 更新視圖;
    • Vue 的更新機制是“push + diff”(比 React 更精細);如果再觸發展現 Virtual DOM diff,減少不必要操作 (cnblogs.com)。
  4. nextTick() 原理:

    • Vue 會維護一個更新隊列,當數據變化時,使用 Promise.resolve().then() 把回調排入微任務;
    • 在本輪更新完成之后且 DOM patch 結束前,執行所有 queued callbacks —— 就是 Vue.nextTick(fn) 的實現基礎 (cnblogs.com)。

React 實戰題 🎯

setState 是同步還是異步?

? React 16 以前

  • 在 React 合成事件或生命周期內多個 setState 會批量異步執行;
  • 在原生事件/setTimeout 中則立即同步執行(無批量);
  • isBatchingUpdates 控制邏輯狀態,決定是馬上更新還是放入隊列延遲執行 (interview.poetries.top, interview.poetries.top)。

? React 18+(帶automatic batching)

  • 默認所有 setState 都批量異步執行,跨同步邊界也可合并。

手寫精簡版 useSetState Hook 用法:

function useSetState(initial) {const [state, setState] = React.useState(initial);const setMerge = React.useCallback(partial => {setState(prev => typeof partial === 'function' ? { ...prev, ...partial(prev) } : { ...prev, ...partial });}, []);return [state, setMerge];
}

? 常用于類組件遷移或處理中間復雜狀態對象。

自定義 Hook —— “usePrevious” 用來獲取上一次的 props / state 值:

function usePrevious(value) {const ref = React.useRef();React.useEffect(() => {ref.current = value;});return ref.current;
}

推薦答題思路 vs ?? 筆試技巧

  • 🎯 原理結合代碼實現:例如講 Promise.all 的狀態控制步驟時,要同時寫出 .then/.catch 邏輯;
  • 🎯 邊界處理:空輸入、循環引用、取消節流/防抖、 finally 支持;
  • 🎯 防坑措施:寫內容前先聲明假設,如 arguments, this 包含性、map.has()
  • 🎯 真實業務場景中的演練:例如:“如果輸入框提交 API 想要防抖 + 防止重復提交,你會怎么做?”

最后一擊:答題包裝建議

步驟做法
? 場景定位“這個題是考異步模型 / 響應式設計 / 事件綁定機制。”
? 核心原理簡練說明背后機制,宏/微任務、依賴追蹤、渲染批次等。
?? 關鍵限制條件討論 edge-case、API 兼容性、性能影響等。
💬 輸出可交付物寫出剛才例子代碼時,模擬如何現場寫白板步驟,用注釋提升可讀性(why)

掌握以上這四大模塊的題型(HTML 布局+JavaScript 常見算法+Vue 響應式系統+React 狀態更新策略),你在面試現場就可以胸有成竹地寫出代碼、講清原理、回答補充問題。祝你面試拿 offer,寫題不打烊!


前端面試中的場景題旨在考察候選人對實際開發問題的理解與解決能力。以下是一些高頻場景題及其解析,供您參考:


以下是前端面試中HTML、JS、Vue、React的常考基礎題目詳解及代碼解析,結合高頻考點和實戰需求整理:

一、HTML 核心考點

  1. 語義化標簽
    ? 作用:提升代碼可讀性、SEO優化(如

    替代

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

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

相關文章

道格拉斯-普克算法 - 把一堆復雜的線條變得簡單,同時盡量保持原來的樣子

道格拉斯-普克算法 - 把一堆復雜的線條變得簡單&#xff0c;同時盡量保持原來的樣子 flyfish 道格拉斯-普克算法&#xff08;Douglas-Peucker Algorithm解決的問題其實很日常&#xff1a;把一堆復雜的線條&#xff08;比如地圖上的道路、河流&#xff0c;或者GPS記錄的軌跡&…

團購商城 app 系統架構分析

一、引言 團購商城 APP 作為一種融合了電子商務與團購模式的應用程序&#xff0c;近年來在市場上取得了顯著的發展。它為用戶提供了便捷的購物體驗&#xff0c;同時也為商家創造了更多的銷售機會。一個完善且高效的系統架構是保障團購商城 APP 穩定運行、提供優質服務的基礎。本…

【AI平臺】n8n入門7:本地n8n更新

?0、前言 目標&#xff1a;本地n8n部署后&#xff0c;有新版本&#xff0c;然后進行更新。官方文檔&#xff1a;Docker | n8n Docs特別說明&#xff1a; n8n鏡像更新后&#xff0c;容器重建&#xff0c;所以之前在n8n配置的東西&#xff0c;就莫有了&#xff0c;工作流提前導…

還在使用Milvus向量庫?2025-AI智能體選型架構防坑指南

前言說明&#xff1a;數據來源&#xff1a;主要基于 Milvus&#xff08;v2.3&#xff09;和 Qdrant&#xff08;v1.8&#xff09;的最新穩定版&#xff0c;參考官方文檔、GitHub Issues、CNCF報告、以及第三方評測&#xff08;如DB-Engines、TechEmpower&#xff09;。評估原則…

3-verilog的使用-1

verilog的使用-1 1.判斷上升沿 reg s_d0; reg s_d1; wire signal_up ; //判斷信號的上升沿 assign signal_up (~touch_key_d1) & touch_key_d0; always (posedge clk or negedge rst_n) beginif(rst_n 1b0) begins_d0< 1b0;s_d1< 1b0;endelse begins_d0&…

ESXI虛擬交換機 + H3C S5120交換機 + GR5200路由器組網筆記

文章目錄一、組網拓撲與核心邏輯1. 拓撲結構2. 核心邏輯二、詳細規劃方案1. VLAN 與 IP 地址規劃2. 設備連接規劃三、配置步驟1. H3C S5120 交換機配置&#xff08;VLAN 與端口&#xff09;2. H3C GR5200 路由器配置&#xff08;路由、網關、NAT&#xff09;3. ESXi 虛擬交換機…

python的駕校培訓預約管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 該系統通…

webrtc弱網-QualityScaler 源碼分析與算法原理

一. 核心功能QualityScaler 是 WebRTC 中用于動態調整視頻編碼質量的模塊&#xff0c;主要功能包括&#xff1a;QP 監控&#xff1a;持續監測編碼器輸出的量化參數&#xff08;QP&#xff09;丟幀率分析&#xff1a;跟蹤媒體優化和編碼器導致的丟幀情況自適應決策&#xff1a;根…

Maven 快照(SNAPSHOT)

Maven 快照(SNAPSHOT) 引言 Maven 快照(SNAPSHOT)是 Maven 中的一個重要概念,主要用于版本管理。它允許開發者在構建過程中使用尚未發布的版本。本文將詳細介紹 Maven 快照的原理、用途以及如何在項目中配置和使用快照。 Maven 快照原理 Maven 快照是版本號的一部分,…

2025-0803學習記錄20——畢業論文快速整理成小論文

本科畢業論文寫好啦&#xff0c;但是C導要我整理成一篇約8000字的小論文&#xff0c;準備投稿。畢業論文到投稿的小論文&#xff0c;這其實是從“全景展示”到“聚焦精煉”的過程。目前我已經有完整的大論文&#xff08;約6萬字&#xff09;&#xff0c;材料是充足的&#xff0…

VUE2 學習筆記16 插槽、Vuex

插槽在編寫組件時&#xff0c;可能存在這種情況&#xff0c;頁面需要顯示不同的內容&#xff0c;但是頁面結構是類似的&#xff0c;在這種情況下&#xff0c;雖然也可以使用傳參來進行&#xff0c;但傳參時&#xff0c;還需要編寫props等邏輯&#xff0c;略顯重復&#xff0c;而…

IntelliJ IDEA開發編輯器摸魚看股票數據

在IDEA的插件市場中心搜索stock&#xff0c;檢索結果里面的插件&#xff0c;點擊安裝即可安裝后的效果

Linux Deepin深度操作系統應用商店加載失敗,安裝星火應用商店

Linux Deepin國產操作系統優點 Deepin&#xff08;原名Linux Deepin&#xff09;是一款由中國團隊開發的Linux發行版&#xff0c;基于Debian stable分支&#xff0c;以美觀易用的界面和本土化體驗著稱。以下是其核心優點總結&#xff1a; 1. 極致美觀的界面設計 Deepin Deskt…

postgresql創建只讀用戶并授權

postgresql創建只讀用戶并授權 CREATE USER yk WITH ENCRYPTED PASSWORD <your_password>;GRANT USAGE ON SCHEMA public to yk; GRANT SELECT ON ALL TABLES IN SCHEMA public TO yk;根據以上創建的用戶&#xff0c;出現一個問題&#xff0c;對新建的表沒有查詢權限&am…

pytest vs unittest: 區別與優缺點比較

主要區別特性pytestunittest起源第三方庫Python標準庫語法風格更簡潔的Pythonic語法基于Java風格的JUnit測試發現自動發現測試需要繼承TestCase類斷言方式使用Python原生assert使用各種assert方法(assertEqual等)夾具系統強大的fixture系統簡單的setUp/tearDown方法參數化測試內…

Boost.Asio學習(5):c++的協程

協程是什么&#xff1f;協程就是可以“暫停”和“繼續”的函數&#xff0c;像在函數里打個斷點&#xff0c;然后以后可以從斷點繼續運行&#xff0c;而不是重新開始。線程 vs 協程&#xff1a;類比想象你在寫小說&#xff1a;線程&#xff1a;你開了 3 個作者&#xff08;線程&…

Linux 中,命令查看系統版本和內核信息

在 Linux 中&#xff0c;可以通過以下命令查看系統版本和內核信息&#xff1a;1. 查看內核版本uname -a或精簡顯示&#xff1a;uname -r # 只顯示內核版本示例輸出&#xff1a;Linux ubuntu 5.4.0-135-generic #152-Ubuntu SMP Tue Nov 15 08:12:21 UTC 2022 x86_64 x86_64 x8…

數據結構總綱以及單向鏈表詳解:

以下是基于筆記更詳細的知識梳理&#xff0c;從概念到細節逐層拆解&#xff0c;幫你吃透數據結構核心要點&#xff1a; 數據結構部分的重點內容&#xff1a;一、數據結構基礎框架 &#xff08;一&#xff09;邏輯結構&#xff08;關注元素間“邏輯關系”&#xff09; 筆記里提到…

模型學習系列之參數

背景 “GLM-4.5擁有 3550 億總參數量&#xff0c;其中 320 億活躍參數&#xff1b;GLM-4.5-Air 采用更緊湊的設計&#xff0c;擁有 1060 億總參數量&#xff0c;其中 120 億活躍參數。” 定義與關系 總參數量&#xff1a;模型中所有可訓練參數的總和&#xff08;包括嵌入層、注…

[創業之路-535]:軟件需要原型驗證、產品需要原型驗證、商業模式也需要原型驗證

原型驗證在軟件、產品開發以及商業模式探索中均扮演著至關重要的角色&#xff0c;它通過低成本、快速迭代的方式&#xff0c;幫助團隊驗證核心假設、降低風險并優化方案。以下是針對這三個領域的具體分析&#xff1a;一、軟件原型驗證&#xff1a;從概念到可交互的模型核心目的…