前端常見面試題

我們前端常見面試題涉及多個方面,這篇文章就先簡單把每個方面都舉幾個列子,分別寫一下常見的主題和可能的問題。

一:HTML/CSS 基礎

問題:

1.解釋一下什么是語義化標簽?它的好處是什么?
2.CSS 選擇器的優先級是如何工作的?
3.CSS3 有哪些新特性?
4.CSS 中的盒模型是什么?
5.如何實現元素的垂直和水平居中?

回答示例:

語義化標簽:
語義化標簽是指使用HTML5提供的具有明確含義的標簽,如header, footer, article, section等。它們使代碼更容易理解和維護,也有助于搜索引擎優化(SEO)。
CSS選擇器優先級:
內聯樣式優先級最高,其次是ID選擇器,然后是類選擇器、屬性選擇器和偽類,最后是標簽選擇器和通配符。如果有多個樣式具有相同的優先級,則最后出現的樣式將生效。
CSS3新特性:
包括圓角(border-radius)、陰影(box-shadow)、漸變(gradients)、動畫(animations)和轉換(transforms)等。
盒模型:
CSS中的盒模型描述了元素如何在頁面上呈現,包括內容(content)、內邊距(padding)、邊框(border)和外邊距(margin)。
元素居中:
水平居中可以使用text-align: center;(對于文本和行內元素)或margin: auto;(對于塊級元素)。垂直居中可以使用flexbox或grid布局。

二:JavaScript 基礎

問題:

1.解釋一下 JavaScript 的變量提升(Hoisting)?
2.JavaScript 中的 == 和 === 有什么區別?
3.什么是閉包(Closure)?它有什么用途?
4.如何解決 JavaScript 中的回調地獄(Callback Hell)?
5.描述一下 JavaScript 的事件冒泡和捕獲。

回答示例:

變量提升:
在JavaScript中,變量的聲明會被提升到其所在作用域的頂部,但賦值不會。這意味著你可以在聲明之前的代碼中訪問變量,但只能訪問到其聲明,而不是其值。
== 和 ===:
== 是寬松相等運算符,會進行類型轉換以使值相等;=== 是嚴格相等運算符,不會進行類型轉換,所以類型和值都必須相等。
閉包:
閉包是指一個函數可以記住并訪問其詞法作用域,即使該函數在其詞法作用域之外執行。閉包常用于實現私有變量和方法。
回調地獄:
回調地獄是指嵌套過多的回調函數導致代碼難以閱讀和維護。可以使用Promise、async/await或事件庫(如Event Emitter)來避免回調地獄。
事件冒泡和捕獲:
事件冒泡是指事件從目標元素開始,然后逐級向上傳播到DOM樹的頂部;事件捕獲則相反,事件從DOM樹的頂部開始,然后逐級向下傳播到目標元素。可以通過設置addEventListener的第三個參數來選擇使用冒泡或捕獲。

三:框架和庫

問題:

1.React 和 Vue 之間的主要區別是什么?
2.如何在 React 中實現組件之間的通信?
3.Angular 的依賴注入是如何工作的?
4.你如何使用 jQuery 選擇和操作 DOM?

回答示例:

React和Vue的區別:
React使用虛擬DOM和props進行數據傳遞,更適合大型應用;Vue使用直觀的模板和數據綁定,更適合小型到中型應用。React的組件系統更強大,Vue的API更簡單。
React組件通信:
父子組件通信可以通過props和回調實現;兄弟組件通信可以通過共同的父組件作為中介;跨多級組件通信可以使用Redux、Context API或事件總線。
Angular依賴注入:
Angular的依賴注入系統負責創建和管理應用中的對象及其依賴關系。你可以通過服務(Service)和依賴注入器(Injector)來實現依賴注入。
jQuery選擇和操作DOM:
可以使用$函數選擇DOM元素,然后使用jQuery提供的方法(如.html(), .css(), .addClass(), .remove()等)來操作這些元素。

四:性能優化

問題:

1.解釋一下前端性能優化的常用策略。
2.如何減少頁面加載時間?
3.什么是代碼拆分(Code Splitting)?它如何幫助優化性能?
4.如何避免瀏覽器重繪和回流?

回答示例:

前端性能優化策略:
減少HTTP請求、使用CDN、啟用gzip壓縮、優化圖片和CSS、減少DOM操作、使用異步加載和懶加載、避免CSS表達式和不必要的動畫等。
減少頁面加載時間:
優化圖片、減少HTTP請求、使用CDN、啟用gzip壓縮、優化CSS和JavaScript等。
代碼拆分:
通過Webpack等構建工具將代碼拆分為多個小文件,然后異步加載這些文件。這可以減小初始加載時間并提高應用性能。
避免重繪和回流:
盡量減少對DOM的操作,避免頻繁觸發重繪和回流。可以使用requestAnimationFrame來批量更新DOM,或者使用transform屬性來觸發合成操作而不是回流。

五:響應式和移動端開發

問題:

1.什么是媒體查詢(Media Queries)?如何使用它們?
2.如何優化移動端頁面的性能?
3.解釋一下視口(Viewport)和視口單位(Viewport Units)。

回答示例:

媒體查詢:
使用CSS媒體查詢可以根據設備的屏幕寬度等特性應用不同的樣式。例如,你可以使用@media screen and (max-width: 600px)來針對小屏幕設備應用特定樣式。
優化移動端性能:
減少加載時間、使用觸摸友好的UI、優化輸入延遲、避免不必要的加載和重繪等。
視口和視口單位:
視口是用戶在屏幕上看到的區域。視口單位(如vw、vh、vmin、vmax)是相對于視口尺寸的單位,可以方便地實現響應式布局。

六:版本控制

問題:

1.你如何使用 Git?
2.描述一下 Git 的工作流程。
3.解釋一下 Git 的 rebase 和 merge 的區別。

回答示例:

使用Git:
我使用Git進行版本控制,通過git clone克隆倉庫,git add添加文件到暫存區,git commit提交更改,git push推送更改到遠程倉庫等。
Git工作流程:
安裝與配置:安裝Git并設置用戶名和電子郵件。
初始化:使用git init命令在項目目錄中初始化Git倉庫。
添加更改:使用git add命令將文件添加到暫存區。
提交:使用git commit命令將暫存區的更改提交到本地倉庫,并添加提交信息。
同步:使用git pull從遠程倉庫拉取最新更改,使用git push將本地更改推送到遠程倉庫。
分支與合并:使用git branch查看分支,git checkout切換分支,git merge合并分支。
解決沖突:在合并或拉取時出現沖突時,手動解決沖突并重新提交。
Git 的 rebase 和 merge 的區別:
Merge:Merge操作會將兩個分支的修改合并在一起,形成一個新的提交。這個新的提交包含了兩個分支的修改內容,它的父提交有兩個,一個是源分支的最新提交,另一個是目標分支的最新提交。Merge操作保留了每個分支的提交歷史記錄,可以清晰地看出哪些提交屬于哪個分支。
Rebase:Rebase操作則是將當前分支的提交“移動”到目標分支的最新提交之后,并創建一個新的提交歷史記錄。Rebase操作會保留當前分支的提交,但會改變它們的提交順序和父提交,使得提交歷史記錄看起來更線性。然而,這也可能導致分支之間的關系變得不太清晰

七:工具和技術

問題:

1.你使用過哪些前端開發工具?
2.如何使用 Webpack 進行項目構建和優化?
3.什么是 Babel,它解決了什么問題?
4.解釋一下 ES6 的主要新特性。

回答示例:

前端開發工具:
我使用過多種前端開發工具,如Visual Studio Code、Chrome DevTools、npm/yarn包管理器、Webpack構建工具等。這些工具幫助我提高開發效率、調試代碼以及管理項目依賴。
Webpack構建和優化:
Webpack是一個強大的模塊打包工具,它可以幫助我們將多個模塊打包成一個或多個文件,并進行代碼優化。我通常使用Webpack的插件和加載器來進行代碼拆分、壓縮、混淆以及優化圖片和字體等資源。
Babel:
Babel是一個JavaScript編譯器,它可以將ES6+的代碼轉換為向后兼容的JavaScript版本,以便在舊版本的瀏覽器中運行。我使用Babel來確保我的代碼能夠在不同的瀏覽器和環境中正常運行。
ES6新特性:
ES6引入了許多新特性,如箭頭函數、模板字符串、解構賦值、Promise、類(Class)等。這些特性使代碼更加簡潔、易讀和可維護。我積極學習和使用ES6的新特性,以提高代碼質量和開發效率。

八:軟技能和團隊協作

問題:

1.你如何管理前端開發中的復雜性和變化?
2.你在過去的項目中是如何與團隊成員協作的?
3.描述一次你解決了一個復雜問題的經歷。

回答示例:

管理復雜性和變化:
在前端開發中,我經常遇到復雜性和變化。為了應對這些挑戰,我采用分而治之的策略,將大問題分解為小問題,并逐一解決。同時,我也注重與團隊成員的溝通和協作,共同應對項目中的變化。
與團隊成員協作:
在過去的項目中,我積極與團隊成員協作,共同完成任務。我注重溝通和分享,經常與團隊成員討論問題并分享經驗。通過團隊協作,我們成功地完成了多個復雜的前端項目。
解決復雜問題的經歷:
在一次項目中,我遇到了一個復雜的布局問題。我首先分析了問題的原因,并嘗試了多種解決方案。最終,我通過結合CSS Flexbox和Grid布局成功地解決了這個問題。這次經歷讓我更加深入地理解了CSS布局的原理和技巧。

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

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

相關文章

2024華北醫院信息網絡大會第二輪更新通知

大會背景 近年來,我國醫療行業信息化取得了飛躍式的發展,醫療信息化對醫療行業有著重要的支撐作用。2021年國家衛健委、中醫藥管理局聯合印發《公立醫院高質量發展促進行動(2021-2025年)》,提出重點建設“三位一體”智…

【青龍】快速搭建青龍面板,部署屬于你自己的應用!

青龍面板是一個支持 Python3、JavaScript、Shell、Typescript 的定時任務管理平臺。 廢話不多說,直接開始。 這里使用一臺 雨云 的云服務器作為演示。雨云注冊地址:https://www.rainyun.com/ 優惠碼:lz932 使用優惠碼注冊后綁定微信可獲得8折…

【Chrono Engine學習總結】4-vehicle-4.3-兩個vehicle碰撞測試

由于Chrono的官方教程在一些細節方面解釋的并不清楚,自己做了一些嘗試,做學習總結。 今天突發奇想,想試一下,是否可以實現兩個vehicle的碰撞? 1、兩輛vehicle的仿真 官方提供了demo_VEH_TwoCars這個demo&#xff0c…

C++入門04 函數的參數傳遞、引用類型與重載

圖源:文心一言 聽課筆記簡單整理,供小伙伴們參考,包含以下內容“🐋3.11 引用類型、🐋3.14 內聯函數、🐋3.15 默認參數值、🐋3.16 函數重載、🐋3.17 C系統函數”~🥝&…

LabVIEW多通道壓力傳感器實時動態檢測

LabVIEW多通道壓力傳感器實時動態檢測 介紹了一種基于LabVIEW的多通道壓力傳感器實時動態檢測系統,解決壓阻式壓力傳感器溫度補償過程的復雜度,提高測量的準確性。通過自動輪詢檢測方法,結合硬件檢測模型和多通道檢測系統設計,本…

集合框架之List集合

目錄 ?編輯 一、什么是UML 二、集合框架 三、List集合 1.特點 2.遍歷方式 3.刪除 4.優化 四、迭代器原理 五、泛型 六、裝拆箱 七、ArrayList、LinkedList和Vector的區別 ArrayList和Vector的區別 LinkedList和Vector的區別 一、什么是UML UML(Unif…

基于ORB-SLAM2與YOLOv8剔除動態特征點(三種方法)

基于ORB-SLAM2與YOLOv8剔除動態特征點(三種方法) 寫上篇文章時測試過程比較亂,寫的時候有些地方有點失誤,所以重新寫了這篇 本文內容均在RGB-D環境下進行程序測試 本文涉及到的動態特征點剔除速度均是以https://cvg.cit.tum.de/data/datasets/rgbd-dat…

系統學習Python——裝飾器:類裝飾器-[單例類:編寫替代方案]

分類目錄:《系統學習Python》總目錄 有趣的是,這里如果能使用nonlocal語句(僅在Python3.X中可用)來改變外層作用域名稱,我們在這里可以編寫一個自包含程度更高的解決方案一一一下面的替代方案為每個類使用了一個外層作…

編寫程序,實現shell功能——項目訓練——day08

c c今天做了一個實戰項目訓練,編寫一個程序,實現shell功能,我們稱之為minishell。 主要是利用Linux中IO接口實現,實現的功能有: 1.ls ls -a ls -l cd cp mv pwd c…

軟件License授權原理

軟件License授權原理 你知道License是如何防止別人破解的嗎?本文將介紹License的生成原理,理解了License的授權原理你不但可以防止別人破解你的License,你甚至可以研究別人的License找到它們的漏洞。喜歡本文的朋友建議收藏關注,…

【Linux】進程狀態

進程狀態 進程狀態的簡要介紹運行狀態進程排隊 阻塞狀態掛起狀態Linux中的進程狀態 進程狀態的簡要介紹 進程狀態指的是一個操作系統中正在運行的進程當前所處的狀態。根據不同的操作系統,進程狀態可能會有一些細微的差別,但最主要的是以下三種狀態 運行…

Java——方法的使用

目錄 一.方法的概念及使用 1 什么是方法(method) 2.方法定義 3 方法調用的執行過程 4 實參和形參的關系(重要) 5.沒有返回值的方法 二.方法重載 1.為什么需要方法重載 2.方法重載概念 3.方法簽名 三.遞歸 1.遞歸的概念 2.遞歸執行過程分析 3. 遞歸練習 一.方法的…

貓頭虎分享已解決Bug || 容器編排問題:OrchestrationFailure, ContainerManagementError

博主貓頭虎的技術世界 🌟 歡迎來到貓頭虎的博客 — 探索技術的無限可能! 專欄鏈接: 🔗 精選專欄: 《面試題大全》 — 面試準備的寶典!《IDEA開發秘籍》 — 提升你的IDEA技能!《100天精通鴻蒙》 …

代碼隨想錄算法訓練營第四十二天|122. 買賣股票的最佳時機 II

674. 最長連續遞增序列 public static int findLengthOfLCIS(int[] nums) {int[] dp new int[nums.length];dp[0] 1;for (int i 1; i < nums.length; i) {dfs(nums, dp, i);}Arrays.sort(dp);return dp[dp.length - 1];}public static void dfs(int[] nums, int[] dp, i…

【Python】【VS Code】VS Code中python.json和setting.json文件配置說明

目錄 1. python.json配置 2. setting.json配置 3. 解決中文亂碼 4. 實現效果 1. python.json配置 python.json 獲取步驟&#xff1a;文件 -> 首選項 -> 配置用戶代碼片段 -> python 此為VS Code的頭文件設置&#xff0c;復制以下內容到 python.json {"HEADER…

個人做抖店如何能夠快速起店?掌握好技巧是關鍵!建議收藏!

大家好&#xff0c;我是電商小布。 相信我們每個朋友在店鋪開通后&#xff0c;最關心的事情就是小店成功起店了。 那么個人做抖店想要快速起店&#xff0c;該怎么來進行操作呢&#xff1f; 接下來&#xff0c;小布重點給大家說三點&#xff1a; 首先來說一下小店的主體類型…

git常用命令記錄

1、第一次初始化 git init git add . git commit -m ‘first commit’ git remote add origin gitgithub.com:帳號名/倉庫名.git git pull origin master git push origin master # -f 強推 git clone gitgithub.com:git帳號名/倉庫名.git 2、工作基本操作 git checkout master…

dell r740服務器黃燈閃爍維修現場解決

1&#xff1a;首先看一下這款DELL非常主力的PowerEdge R740服務器長啥樣&#xff0c;不得不說就外觀來說自從IBM拋棄System X系列服務器后&#xff0c;也就戴爾這個外觀看的比較順眼。 圖一&#xff1a;是DELL R740前視圖&#xff08;這款是8盤機型&#xff09; 圖二&#xff…

QT 數據庫的增加操作和畫圖 Win

第一步、先配置CMakeLists.txt 在CMakeLists.txt中添加 find_package(Qt6 REQUIRED COMPONENTS Sql) find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Sql) target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Charts)避…

springboot集成JWT實現token權限認證

vuespringboot登錄與注冊功能的實現 注&#xff1a;對于JWT的學習&#xff0c;首先要完成注冊和登錄的功能&#xff0c;本篇博客是基于上述博客的進階學習&#xff0c;代碼頁也是在原有的基礎上進行擴展 ①在pom.xml添加依賴 <!-- JWT --> <dependency><grou…