ByteDance_FrontEnd

約面了,放輕松,好好面


盲點

基礎知識

Function 和 Object 都是函數,而函數也是對象。
Object.prototype 是幾乎所有對象的原型鏈終點(其 proto 是 null)。
Function.prototype 是所有函數的原型(包括 Object 和 Function 自身)。
Object.proto === Function.prototype (因為 Object 是個構造函數,是函數)
Function.proto === Function.prototype (Function 自身也是函數)
Function.prototype 本身也是一個對象,它的 proto 指向 Object.prototype。
Function.prototype.proto === Object.prototype
在這里插入圖片描述

CSS

在這里插入圖片描述
在這里插入圖片描述

計算機網絡

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

框架

react版本

react 18

React 18 的并發渲染通過可中斷的任務調度和優先級控制,大幅提升了復雜應用的響應流暢度。新 Hook(如 useTransition、useDeferredValue)為開發者提供了優化工具。??自動批處理??減少了渲染次數,??流式 SSR?? 和 ??選擇性 Hydration?? 改善了首屏性能。升級時注意使用 createRoot 并充分測試嚴格模式下的警告。
在這里插入圖片描述
并發:渲染任務可中斷/恢復,根據優先級調度(如用戶交互 > 數據加載),避免界面卡頓。
在這里插入圖片描述

與防抖/節流的區別:防抖和節流是通過延遲執行來減少操作頻率。過渡更新是立即執行更新邏輯,但延遲其渲染的優先級和提交,并且這個過程是可中斷的。過渡更新通常能提供更流暢的體驗。
要使用 startTransition,必須使用 ReactDOM.createRoot 來啟用并發模式,而不是舊的 ReactDOM.render

??理解并善用 StrictMode??開發環境下,<React.StrictMode>會故意雙重調用某些方法(包括 useEffect)以幫助發現副作用中的錯誤。確保你的 useEffect邏輯具有??冪等性??(多次執行結果相同)或清理函數能正確取消副作用。如果僅為調試,可暫時注釋 StrictMode,但生產環境不應受影響

rEACTnATIVE

Git

項目

手撕

循環引用

function hasCircularReference(obj, visited = new WeakSet()) {//Set VS WeakSet:// 1.解除不必要的引用:在不需要時,手動解除對象之間的引用可以幫助垃圾回收器更快地回收內存。//// 2.使用弱引用:在ES6中,引入了WeakMap和WeakSet,它們允許創建對對象的弱引用。這些引用不會阻止垃圾回收器回收對象。//// 3.內存分析工具:使用Chrome開發者工具中的內存分析工具可以幫助你檢測內存泄漏和不必要的循環引用。// 如果對象是null或undefined,或者已經訪問過,則返回falseif (!obj || visited.has(obj)) {return false;}// 將當前對象標記為已訪問!!visited.add(obj);// 遍歷對象的所有可枚舉屬性for (let key in obj) {if (obj.hasOwnProperty(key)) {let value = obj[key];// 如果屬性值是對象,則遞歸檢查if (typeof value === 'object' && value !== null) {// 如果在已訪問的對象中找到了當前屬性值,則說明存在循環引用if (visited.has(value)) {return true;}// 遞歸檢查屬性值!!!if (hasCircularReference(value, visited)) {return true;}}}}// 如果沒有找到循環引用,則返回falsereturn false;}

大數相加(含小數)

function addLargeNumbers(num1, num2) {// 分離整數與小數部分let parts1 = num1.toString().trim().split('.');let parts2 = num2.toString().trim().split('.');let int1 = parts1[0] || '0';let int2 = parts2[0] || '0';let dec1 = parts1[1] || '0';let dec2 = parts2[1] || '0';// 對齊小數部分:在較短的小數后補0let maxDecLength = Math.max(dec1.length, dec2.length);dec1 = dec1.padEnd(maxDecLength, '0');dec2 = dec2.padEnd(maxDecLength, '0');// 處理小數部分相加let decResult = addIntegerParts(dec1, dec2);let decimalCarry = 0;// 如果小數部分相加后長度超過最大長度,說明有向整數位的進位if (decResult.length > maxDecLength) {decimalCarry = parseInt(decResult[0]); // 提取進位值decResult = decResult.substring(1);    // 保留剩余小數部分}// 處理整數部分相加(加上小數部分的進位)let intResult = addIntegerParts(int1, int2, decimalCarry);// 組合結果if (decResult === '0') {return intResult; // 沒有小數部分時直接返回整數} else {return intResult + '.' + decResult;}
}// 輔助函數:處理整數部分相加(可處理額外進位)
function addIntegerParts(str1, str2, extraCarry = 0) {let arr1 = str1.split('').map(Number);let arr2 = str2.split('').map(Number);let i = arr1.length - 1;let j = arr2.length - 1;let result = [];let carry = extraCarry; // 初始化進位(可能來自小數部分)while (i >= 0 || j >= 0 || carry > 0) {const val1 = i >= 0 ? arr1[i] : 0;const val2 = j >= 0 ? arr2[j] : 0;const sum = val1 + val2 + carry;result.push(sum % 10); // 將當前位添加到數組末尾carry = Math.floor(sum / 10);i--;j--;}// 反轉數組并轉換為字符串(避免使用 unshift 提升性能)return result.reverse().join('');
}// 測試示例
console.log(addLargeNumbers("123.45", "67.8"));   // 輸出 "191.25"
console.log(addLargeNumbers("0.999", "0.002"));   // 輸出 "1.001"
console.log(addLargeNumbers("100.00", "200.00")); // 輸出 "300"(自動去除多余小數位)
class EventEmitter {constructor() {this.events = new Map(); // 使用Map存儲事件和對應的監聽器列表}// 訂閱事件on(eventName, listener) {if (!this.events.has(eventName)) {this.events.set(eventName, []);}this.events.get(eventName).push(listener);return this; // 支持鏈式調用}// 發布事件emit(eventName, ...args) {const listeners = this.events.get(eventName);if (listeners) {// 復制一份數組,防止在回調函數中取消監聽導致迭代異常listeners.slice().forEach(listener => {listener.apply(this, args);});}return this;}// 取消訂閱off(eventName, listenerToRemove) {const listeners = this.events.get(eventName);if (listeners) {// 過濾掉要移除的監聽器this.events.set(eventName, listeners.filter(listener => listener !== listenerToRemove));}return this;}
}// 使用示例
const emitter = new EventEmitter();
const callback = (data) => console.log('Event received:', data);
emitter.on('myEvent', callback);
emitter.emit('myEvent', { message: 'Hello!' }); // 輸出: Event received: { message: 'Hello!' }
emitter.off('myEvent', callback);
emitter.emit('myEvent', 'This will not be logged'); // 無輸出

真題

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

go語言,彩色驗證碼生成,加減法驗證,

代碼結構相關代碼 captcha/internal/captcha/generator.go package captchaimport (_ "embed" // &#x1f448; 啟用 embed"image""image/color""image/draw""image/png""io""math/rand""golang.…

PuTTY軟件訪問ZYNQ板卡的Linux系統

PuTTY 是一款非常經典、輕量級、免費的 SSH、Telnet 和串行端口連接客戶端&#xff0c;主要運行于 Windows 平臺。它是在開源許可下開發的&#xff0c;因其小巧、簡單、可靠而成為系統管理員、網絡工程師和開發人員的必備工具。網上有非常多的下載資源。 我們使用PuTTY軟件對ZY…

做一個RBAC權限

在分布式應用場景下&#xff0c;我們可以利用網關對請求進行集中處理&#xff0c;實現了低耦合&#xff0c;高內聚的特性。 登陸權限驗證和鑒權的功能都可以在網關層面進行處理&#xff1a; 用戶登錄后簽署的jwt保存在header中&#xff0c;用戶信息則保存在redis中網關應該對不…

【算法】day1 雙指針

1、移動零&#xff08;同向分3區域&#xff09; 283. 移動零 - 力扣&#xff08;LeetCode&#xff09; 題目&#xff1a; 思路&#xff1a;注意原地操作。快排也是這個方法&#xff1a;左邊小于等于 tmp&#xff0c;右邊大于 tmp&#xff0c;最后 tmp 放到 dest。 代碼&#…

Linux 日志分析:用 ELK 搭建個人運維監控平臺

Linux 日志分析&#xff1a;用 ELK 搭建個人運維監控平臺 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是我放飛…

Linux網絡:socket編程UDP

文章目錄前言一&#xff0c;socket二&#xff0c;服務端socket3-1 創建socket3-2 綁定地址和端口3-3 接收數據3-4 回復數據3-5關閉socket3-6 完整代碼三&#xff0c;客戶端socket3-1 為什么客戶端通常不需要手動定義 IP 和端口前言 學習 socket 編程的意義在于&#xff1a;它讓…

【從零到公網】本地電腦部署服務并實現公網訪問(IPv4/IPv6/DDNS 全攻略)

從零到公網&#xff1a;本地電腦部署服務并實現公網訪問&#xff08;IPv4/IPv6/DDNS 全攻略&#xff09; 適用場景&#xff1a;本地 API 服務、大模型推理服務、NAS、遠程桌面等需要公網訪問的場景 關鍵詞&#xff1a;公網 IP、端口映射、內網穿透、IPv6、Cloudflare DDNS 一、…

模塊二 落地微服務

11 | 服務發布和引用的實踐 服務發布和引用常見的三種方式&#xff1a;Restful API、XML配置以及IDL文件。今天我將以XML配置方式為例&#xff0c;給你講解服務發布和引用的具體實踐以及可能會遇到的問題。 XML配置方式的服務發布和引用流程 1. 服務提供者定義接口 服務提供者發…

C++程序員速通C#:從Hello World到數據類型

C程序員光速入門C#&#xff08;一&#xff09;&#xff1a;總覽、數據類型、運算符 一.Hello world&#xff01; 隨著.NET的深入人心,作為一個程序員&#xff0c;當然不能在新技術面前停而止步&#xff0c;面對著c在.net中的失敗,雖然有一絲遺憾&#xff0c;但是我們應該認識到…

Linux相關概念和易錯知識點(44)(IP地址、子網和公網、NAPT、代理)

目錄1.IP地址&#xff08;1&#xff09;局域網和公網①局域網a.網關地址b.局域網通信②運營商子網③公網&#xff08;2&#xff09;NAPT①NAPT過程②理解NAPT③理解源IP和目的IPa.目的IPb.源IP③最長前綴匹配④NAT技術缺陷2.代理服務&#xff08;1&#xff09;正向代理&#xf…

工業智能終端賦能自動化生產線建設數字化管理

在當今數字化浪潮的推動下&#xff0c;自動化生產線正逐漸成為各行各業提升效率和降低成本的重要選擇。隨著智能制造的深入發展&#xff0c;工業智能終端的引入不僅為生產線帶來了技術革新&#xff0c;也賦予了數字化管理新的動力。一、工業智能終端&#xff1a;一體化設計&…

【Vue2手錄06】計算屬性Computed

一、表單元素的v-model綁定&#xff08;核心場景&#xff09; v-model 是Vue實現“表單元素與數據雙向同步”的語法糖&#xff0c;不同表單元素的綁定規則存在差異&#xff0c;需根據元素類型選擇正確的綁定方式。 1.1 四大表單元素的綁定規則對比表單元素類型綁定數據類型核心…

FPGA入門-數碼管靜態顯示

19. 數碼管的靜態顯示 在許多項目設計中&#xff0c;我們通常需要一些顯示設備來顯示我們需要的信息&#xff0c;可以選擇的顯示設備有很多&#xff0c;而數碼管是使用最多&#xff0c;最簡單的顯示設備之一。數碼管是一種半導體發光器件&#xff0c;具有響應時間短、體積小、…

深入理解大語言模型(5)-關于token

到目前為止對 LLM 的描述中&#xff0c;我們將其描述為一次預測一個單詞&#xff0c;但實際上還有一個更重要的技術細 節。即 LLM 實際上并不是重復預測下一個單詞&#xff0c;而是重復預測下一個 token 。對于一個句子&#xff0c;語言模型會 先使用分詞器將其拆分為一個個 to…

視覺智能的「破壁者」——Transformer如何重塑計算機視覺范式?三大CV算法論文介紹 ViTMAESwin Transformer

當自然語言處理領域因Transformer而煥發新生時&#xff0c;計算機視覺卻長期困于卷積神經網絡的架構桎梏。直到ViT&#xff08;Vision Transformer&#xff09;的橫空出世&#xff0c;才真正打破了視覺與語言之間的壁壘。它不僅是技術的革新&#xff0c;更是范式革命的開始&…

Java 并發容器源碼解析:ConcurrentSkipListSet 行級深度剖析

Java 并發容器源碼解析&#xff1a;ConcurrentSkipListSet 行級深度剖析 本文將深入解析 Java 并發容器 ConcurrentSkipListSet 的核心源碼&#xff0c;結合流程圖、代碼注釋、設計思想、優缺點分析、業務場景、調試與優化、集成方案、高階應用等&#xff0c;幫助你系統掌握這款…

答題卡自動識別案例

目錄 1.答題卡自動批閱整體實現思路 2.關鍵技術步驟與原理 答題卡區域提取 ①輪廓檢測并排序 ②執行透視變換 ③找到每一個圓圈輪廓 ④先對所有圓圈輪廓從上到下排序 ⑤再通過循環每次只提取出五個輪廓再進行從左到右的排序 3.完整代碼 1.答題卡自動批閱整體實現思路 …

C#實現通過POST實現讀取數據

C# POST請求與MySQL數據存儲實現下面是一個完整的C#解決方案&#xff0c;用于發送POST請求、接收響應數據&#xff0c;并將數據保存到MySQL數據庫中。完整代碼實現 using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.J…

Java 字符編碼問題,怎么優雅地解決?

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

STL之string類(C++)

1.string類核心定位std::string 本質是對 “字符序列” 的封裝&#xff0c;內部通過動態數組存儲字符&#xff0c;并自動管理內存&#xff08;分配、擴容、釋放&#xff09;&#xff0c;對外提供了簡潔的接口用于字符串的創建、修改、拼接、查找等操作。1.1 使用前提頭文件包含…