前端面試準備-4

1.React Router的history模式中,push和replace有什么區別

都是用于頁面導航,但是他們對瀏覽器歷史記錄的處理不一樣。

①:push是在瀏覽歷史棧里加入一條新的瀏覽歷史,點擊返回鍵會返回上一個頁面

②;replace是替換當前歷史記錄,點擊回退鍵,會回到替換前頁面

// 使用 push 方法導航
navigate('/home');  
history.push('/home');// 使用 replace 方法導航
navigate('/home', { replace: true });
history.replace('/home');

2.React中,除了在構造函數中綁定this,其它綁定的方法有哪些

①:使用箭頭函數定義類方法

②:在render方法中使用箭頭函數

③:使用bind方法在render中綁定

3.為什么在React中遍歷時不建議使用索引作為唯一的key

因為當數組順序發生變化,或發生增加、刪除等,會導致不必要的重新渲染。

3.ReactRouter中的router組件有幾種類型

①:BrowserRouter

②:HashRouter,使用url的hash部分(#)來實現路由

③:MemoryRouter,將歷史記錄保存在內存中

4.在React的render函數中是否可以直接寫if-else判斷

不能。因為render函數返回的時JSX,本質上時JavaScript表達式,在表達式內部不能直接寫于語句。

可以使用三元運算符或邏輯與運算符。

//三元運算符
render() {return (<div>{this.state.isLoggedIn ? '歡迎回來' : '請登錄'}</div>)
}//邏輯運算
render() {return (<div>{this.state.isLoggedIn && '歡迎回來'}</div>)
}

5.如何在React項目中導入圖片,那種效果更好

①:import導入,適用于項目文件內的靜態圖片資源

import logo from './images/logo.png'function Header() {return <img src={logo} alt="logo" />
}

②:request方法,適用于動態導入圖片

function Avatar() {const avatar = require('./images/avatar.png')return <img src={avatar} alt="avatar" />
}

③:public文件夾,適用于不需要經過打包處理的靜態圖片資源

function Banner() {return <img src="/images/banner.png" alt="banner" />
}

6.在React的JSX中,屬性是否可以被覆蓋,覆蓋原則是什么

①:從左到右覆蓋,后面的同名屬性會覆蓋前面的同名屬性

②:展開運算符的覆蓋規則。使用展開運算符(...)傳遞props時,展開運算符后面的屬性會覆蓋展開運算符里面的同名屬性

③:顯示屬性優先。顯示聲明的屬性會覆蓋展開運算符中的屬性

// 默認樣式
const defaultProps = {className: 'btn',type: 'button'
};// 使用時覆蓋默認值
<button {...defaultProps} className="btn-primary" />
// 最終 className 為 "btn-primary"

7.什么是React中的受控組件,它的應用場景是什么

受控組件是指表單元素的值受React state控制的組件。在受控組件中,表單數據由React組件處理,而不是由DOM本身處理。

實現關鍵點:

①:將表單元素的值與state綁定

const [value, setValue] = useState('');
<input value={value} onChange={e => setValue(e.target.value)} />

②:提供onchange事件處理函數

③:表單元素的值始終等于state中的值

import { useState } from 'react';function MyInput() {const [value, setValue] = useState('');const handleChange = (e) => {setValue(e.target.value);};return (<input type="text" value={value} onChange={handleChange} />);
}

8.為什么React使用虛擬DOM來提高性能

直接操作真實dom的開銷大,相對昂貴和耗時。虛擬DOM是一種輕量級副本,允許React在內存中進行計算和差異檢測,然后將最小的、最高效的變化應用到真實dom上。這樣可以減少不必要的真實DOM跟新,提高性能。

9.Node.js中同步和異步代碼的區別

主要在于代碼的執行順序和阻塞行為。

①:同步代碼。執行后會阻塞后續代碼的執行,直到當前操作完成。

②:異步代碼。不會阻塞后續代碼的執行。異步操作會在完成時,通過回調函數、Promise以及async/await等機制通知相關的代碼片段去處理。

// 同步代碼
const fs = require('fs');
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data); // 此時,代碼會等待文件讀取完成再執行后面的代碼
console.log('Done'); // 這行代碼會在文件讀取完成后執行// 異步代碼
fs.readFile('file.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data); // 文件讀取完成時,這個回調函數才會被執行
});
console.log('Done'); // 這行代碼會被立即執行,不會等待文件讀取完成

10.Node.js中的Buffer對象是什么,作用是什么?

Buffer對象是Node.js中的全局類,用來在處理二進制數據時,提供對內存緩沖區的操作。可以非常有效的處理非字符串類型的數據,如從文件中讀取的二進制數據或者網絡協議傳輸的數據。

作用:

  • 處理二進制數據:例如視頻、文件、圖片的讀取
  • 與流結合:與Node.js的流操作結合,通常用于文件處理和網絡傳輸
  • 轉換編碼格式:utf8,base64等轉碼

具體使用

①:創建buffer

// 分配 10 個字節的 Buffer
const buf1 = Buffer.alloc(10);// 通過字符串創建,默認編碼為 'utf8'
const buf2 = Buffer.from('Hello, World!');

②:讀寫操作

const buf = Buffer.alloc(10);
buf.write('Hello');// 輸出部分寫入后的結果
console.log(buf.toString('utf8', 0, 5));  // Hello

③:與流結合

const fs = require('fs');
const readStream = fs.createReadStream('example.txt');
readStream.on('data', (chunk) => {console.log(`Received ${chunk.length} bytes of data.`);
});

④:編碼轉換

const buf = Buffer.from('Hello, World!');
console.log(buf.toString('base64'));  // 輸出 base64 編碼的字符串

11.Node.js中的process對象是什么,常用的屬性有哪些

Node.js 中,process 是一個 全局對象,提供了當前 Node.js 進程的信息與控制方式,不需要require引入。它是 Node.js 與操作系統交互的橋梁,允許你訪問環境變量、參數、內存使用情況、退出程序等。

名稱作用
process.argv獲取命令行參數
process.env獲取環境變量
process.exit([code])退出程序
process.cwd()當前工作目錄
process.pid當前進程 ID
process.platform當前操作系統平臺
process.memoryUsage()獲取內存使用信息
process.nextTick()注冊微任務(在事件循環前執行)

12.Node.js中的require和import有什么區別

①:require

requireCommonJS 的模塊引入方式,Node.js 從一開始就使用它;

語法形式為:const? module? =? require( 'module_name' )

require通常用于需要立即同步加載模塊的情況,因為他是同步的

②:import

importES6 模塊系統(ESM) 的語法,是瀏覽器和現代 JavaScript 的標準模塊系統。

語法為 import module from 'module_name'

import更適合現代前端項目和需要異步加載模塊的場景,因為他是異步加載的,不會阻塞主線程。

13.Node.js的回調、Promise和async/await有什么區別

皆為Node.js處理異步操作的三種方式

①:回調

這種方法需要將函數作為參數傳遞給另一個函數,并在異步操作完成后調用這個回調函數。

(當一個函數作為參數傳入另一個參數中,并且它不會立即執行,只有當滿足一定條件后該函數才可以執行,這種函數就稱為回調函數。我們熟悉的定時器和Ajax中就存在有回調函數)

容易造成“回調地獄”

//想要打印1 2 3,就得如下的代碼:setTimeout(function () {  //第一層console.log('1');setTimeout(function () {  //第二程console.log('2');setTimeout(function () {   //第三層console.log('3');}, 1000)}, 2000)}, 3000)//這種回調函數里面嵌套回調函數就叫回調地獄

②:Promise

對回調的一種改進,更現代化的異步處理方式。它表示一個未來將完成的異步操作或一個錯誤操作。其中,Promise可以鏈式調用,解決了回調地獄的問題

const promise = new Promise((resolve, reject) => {setTimeout(() => {resolve('Success!');}, 1000);
});
promise.then(result => console.log(result)).catch(error => console.error(error));

③:async/await

async/await是基于Promise的語法糖,讓異步代碼看起來更像是同步代碼。可以使用try/catch處理錯誤。

async function fetchData() {try {const data = await fs.promises.readFile('example.txt', 'utf8');console.log(data);} catch (err) {console.error(err);}
}
fetchData();

14.Node.js中的定時器函數setImmediate()和setTimeout()函數有什么區別

都是用來調度異步任務的定時器函數

①:setImmediate()允許在當前事件循環結束后立即執行函數,而setTimeout()則是在指定時間后執行回調函數

②:在I/O操作完成后,setImmediate()的回調函數通常會比setTimeout()的回調函數優先執行。

③:setImmediate()主要是用于希望在I/O執行完后立即執行,而setTimeout()則是延時執行。

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

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

相關文章

【機器學習基礎】機器學習入門核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)

機器學習入門核心&#xff1a;Jaccard相似度 &#xff08;Jaccard Index&#xff09; 和 Pearson相似度 &#xff08;Pearson Correlation&#xff09; 一、算法邏輯Jaccard相似度 (Jaccard Index)**Pearson相似度 (Pearson Correlation)** 二、算法原理與數學推導1. Jaccard相…

Unity3D仿星露谷物語開發57之保存庫存信息到文件

1、目標 保存下面庫存欄中信息到文件中。 2、修改SceneSave.cs腳本 添加2行代碼&#xff1a; 3、修改InventoryManager對象 添加Generate GUID組件。 4、修改InventoryManager.cs腳本 添加繼承自ISaveable 添加屬性信息&#xff1a; private string _iSaveableUniqueID;pub…

測量3D翼片的距離與角度

1&#xff0c;目的。 測量3D翼片的距離與角度。說明&#xff1a; 標注A 紅色框選的區域即為翼片&#xff0c;本示例的3D 對象共有3個翼片待測。L1與L2的距離、L1與L2的角度即為所求的翼片距離與角度。 2&#xff0c;原理。 使用線結構光模型&#xff08;標定模式&#xff0…

深入理解 SQL 的 JOIN 查詢:從基礎到高級的第一步

在處理數據庫時&#xff0c;我們常常需要從多個表中提取數據。比如想知道一個城市的天氣情況&#xff0c;同時又想知道這個城市的具體位置。這就需要將 weather 表和 cities 表結合起來查詢。這種操作在 SQL 中被稱為 JOIN 查詢。 現在看下兩種表的情況 1.weather 表&#xff…

上傳頭像upload的簡易方法,轉base64調接口的

1.首頁使用el-image顯示數據&#xff0c;用的是轉base64后端返給的 <el-table-column prop"avatar" align"center" label"頭像"><template #default"scope"><el-image style"height: 40px;width: 40px;" :sr…

[AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT

QA QA攻擊者可以濫用 vssadmin 實用程式來建立卷影快照&#xff0c;然後提取 NTDS.dit 等敏感檔案來繞過安全機制。確定卷影複製服務進入運作狀態的時間。2024-05-14 03:42:16建立卷影快照時&#xff0c;磁碟區複製服務會使用機器帳戶驗證權限並列舉使用者群組。找到卷影複製過…

rtpmixsound:實現音頻混音攻擊!全參數詳細教程!Kali Linux教程!

簡介 一種將預先錄制的音頻與指定目標音頻流中的音頻&#xff08;即 RTP&#xff09;實時混合的工具。 一款用于將預先錄制的音頻與指定目標音頻流中的音頻&#xff08;即 RTP&#xff09;實時混合的工具。該工具創建于 2006 年 8 月至 9 月之間。該工具名為 rtpmixsound。它…

GitHub 趨勢日報 (2025年05月28日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 2379 agenticSeek 1521 computer-science 841 n8n 577 langflow 351 qlib 282 skt…

threejsPBR材質與紋理貼圖

1. PBR材質簡介 本節課沒有具體的代碼&#xff0c;就是給大家科普一下PBR材質&#xff0c;所謂PBR就是&#xff0c;基于物理的渲染(physically-based rendering)。 Three.js提供了兩個PBR材質相關的APIMeshStandardMaterial和MeshPhysicalMaterial,MeshPhysicalMaterial是Mes…

Android 12系統源碼_多屏幕(四)自由窗口模式

一、小窗模式 1.1 小窗功能的開啟方式 開發者模式下開啟小窗功能 adb 手動開啟 adb shell settings put global enable_freeform_support 1 adb shell settings put global force_resizable_activities 11.2 源碼配置 copy file # add for freedom PRODUCT_COPY_FILES …

C# 將HTML文檔、HTML字符串轉換為圖片

在.NET開發中&#xff0c;將HTML內容轉換為圖片的需求廣泛存在于報告生成、郵件內容存檔、網頁快照等場景。Free Spire.Doc for .NET作為一款免費的專業文檔處理庫&#xff0c;無需Microsoft Word依賴&#xff0c;即可輕松實現這一功能。本文將深入解析HTML文檔和字符串轉圖片兩…

【HTML-15.2】HTML表單按鈕全面指南:從基礎到高級實踐

表單按鈕是網頁交互的核心元素&#xff0c;作為用戶提交數據、觸發操作的主要途徑&#xff0c;其重要性不言而喻。本文將系統性地介紹HTML表單按鈕的各種類型、使用場景、最佳實踐以及高級技巧&#xff0c;幫助開發者構建更高效、更易用的表單交互體驗。 1. 基礎按鈕類型 1.1…

吳恩達MCP課程(4):connect_server_mcp_chatbot

目錄 完整代碼代碼解釋1. 導入和初始化2. 類型定義3. MCP_ChatBot 類初始化4. 查詢處理 (process_query)5. 服務器連接管理6. 核心特性總結 示例 完整代碼 原課程代碼是用Anthropic寫的&#xff0c;下面代碼是用OpenAI改寫的&#xff0c;模型則用阿里巴巴的模型做測試 .env 文…

C++內存學習

引入 在實例化對象時&#xff0c;不管是編譯器還是我們自己&#xff0c;會使用構造函數給成員變量一個合適的初始值。 但是經過構造函數之后&#xff0c;我們還不能將其稱為成員變量的初始化&#xff1a; 構造函數中的語句只能稱為賦初值&#xff0c;而不能稱作初始化 因為初…

MySQL 大戰 PostgreSQL

一、底層架構對比 ??維度????MySQL????PostgreSQL????存儲引擎??多引擎支持&#xff08;InnoDB、MyISAM等&#xff09;單一存儲引擎&#xff08;支持擴展如Zheap、Zedstore&#xff09;??事務實現??基于UNDO日志的MVCC基于堆表(Heap)的MVCC??鎖機制??…

基于FPGA的二叉決策樹cart算法verilog實現,訓練環節采用MATLAB仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) MATLAB訓練結果 上述決策樹判決條件&#xff1a; 分類的決策樹1 if x21<17191.5 then node 2 elseif x21>17191…

【RAG】RAG綜述|一文了解RAG|從零開始(下)

文章目錄 5. RAG的架構5.1 Naive RAG5.2 Advanced RAG5.2.1 檢索前處理和數據索引技術5.2.2 知識分片技術5.2.3 分層索引5.2.4 檢索技術5.2.4.1 優化用戶查詢5.2.4.2 通過假想文檔嵌入修復查詢和文檔不對稱5.2.4.3 Routing5.2.4.5 自查詢檢索5.2.4.6 混合搜索5.2.4.7 圖檢索5.2…

山東大學軟件學院項目實訓-基于大模型的模擬面試系統-面試官和面試記錄的分享功能(2)

本文記錄在發布文章時&#xff0c;可以添加自己創建的面試官和面試記錄到文章中這一功能的實現。 前端 首先是在原本的界面的底部添加了兩個多選框&#xff08;后期需要美化調整&#xff09; 實現的代碼&#xff1a; <el-col style"margin-top: 1rem;"><e…

FPGA純verilog實現MIPI-DSI視頻編碼輸出,提供工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目我這里已有的 MIPI 編解碼方案 3、設計思路框架工程設計原理框圖FPGA內部彩條RGB數據位寬轉換RGB數據緩存MIPI-DSI協議層編碼MIPI-DPHY物理層串化MIPI-LVDS顯示屏工程…

LXQt修改開始菜單高亮

開始菜單紅色高亮很難看 mkdir -p ~/.local/share/lxqt/palettes/ mkdir -p ~/.local/share/lxqt/themes/ cp /usr/share/lxqt/palettes/Dark ~/.local/share/lxqt/palettes/Darker cp -p /usr/share/lxqt/themes/dark ~/.local/share/lxqt/themes/darker lxqt-panel.qss L…