约面了,放轻松,好好面


盲点

基础知识

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 使用前提头文件包含…