- 博客(59)
- 收藏
- 关注
原创 如何判断关系是有损分解还是无损分解,怎么判断是否保持函数依赖
特性无损分解保持函数依赖关注点数据完整性依赖完整性判断方法Chase算法/交集超码法闭包覆盖验证相互关系可单独成立,两者无必然联系可单独成立,需分别验证。
2025-02-28 17:46:07
1090
原创 页式存储中的逻辑地址转物理地址
在学习过程中避免不了考试,在计算机基础中,总会出现这一类题,今天就来讲解一下这种题的操作步骤,小耳朵们听好咯。逻辑地址由和:通常为 2^n 字节(如 4KB = 2^12,则偏移量占页号 = 逻辑地址高位部分偏移量 = 逻辑地址低位部分(位数由页面大小决定)假设逻辑地址为,页面大小为页号占(16−12=4)偏移量占页面大小为2的几次方就是几位偏移量逻辑地址=0001(页号)0011 1000 0101(偏移量)【大家数一数,4位页号+12位偏移量就是16位逻辑地址】
2025-02-25 20:03:15
1188
原创 十进制和二进制之间的转换
从左到右(小数点后第1位开始),每一位的值乘以2的负幂次。通过上述方法,可以快速完成整数和小数的十进制与二进制转换。从右到左(最低位到最高位),每一位的值乘以2的幂次。将小数部分不断乘以2,取整数部分作为二进制位。依次减去这些幂次值,标记对应二进制位为1。找到小于等于目标数的最大2的幂次。将十进制数不断除以2,记录余数。直到小数部分为0或达到所需精度。直到商为0时停止,将余数。(高位到低位依次填充)。
2025-02-25 15:55:56
552
原创 前端监控与埋点
意义:当HTML文档被完全加载和解析之后,DOMContentLoaded事件被触发,无需等待样式表、图像的完成加载。意义:DOM树和页面加载完成时间,会触发domContentLoaded时间。dom:DOM解析耗时,domInteractive - responseEnd。首包时间耗时:responseStart - domainLookupStart。意义:读取缓存的时间。意义:建立连接的耗时。4、分析数据:对收集到的数据进行分析和挖掘,找出用户行为规律和需求,为产品的改进和优化提供数据。
2025-02-25 14:20:38
363
原创 从前端角度分析,当用户量比较大的情况下,怎么做一个直播福袋抽奖功能,要求说出具体思路。
核心挑战:实时性、高并发、稳定性。关键技术:WebSocket分片、请求合并、虚拟渲染、服务端时间同步。效果预期:支持10万级用户同时参与,中奖推送延迟<1秒,页面FPS稳定在50+。通过前后端协同优化(前端减轻请求压力,后端保障计算能力),可在高并发场景下实现流畅的直播抽奖体验。核心创新点分层过滤体系:在客户端完成多层校验,将无效请求消灭在萌芽状态分片化通道设计:通过哈希分片将亿级连接分散到多个集群边缘计算赋能:利用Web Worker分担服务端计算压力时间对抗机制:通过可信时间协议防止客户端篡改。
2025-02-24 09:41:31
924
原创 HTTP 和 HTTPS 的区别
对比项HTTPHTTPS安全性不安全,明文传输。安全,加密传输。性能较快,资源消耗低。较慢,资源消耗高。SEO不利于 SEO。有利于 SEO。使用场景非敏感信息传输。敏感信息传输(如支付、登录)。HTTPS 是现代网站的标配,尤其是涉及用户隐私和数据安全的场景。虽然 HTTPS 的性能开销稍高,但通过硬件加速和优化(如 HTTP/2),这种差距已经大大缩小。
2025-02-20 09:44:50
622
原创 事件循环是什么
事件循环是 JavaScript 处理异步操作的核心机制。任务队列分为宏任务队列和微任务队列。执行顺序:同步代码 -> 微任务 -> 宏任务 -> 微任务 -> ...理解事件循环有助于编写高效且可预测的异步代码。事件循环机制使得 JavaScript 能够在单线程环境中高效地处理多个任务,是现代 JavaScript 开发中的重要概念。
2025-02-20 09:28:06
436
原创 介绍一下Promise
Promise是处理异步操作的对象,具有三种状态:Pending、Fulfilled 和 Rejected。使用thencatch和finally方法来处理 Promise 的结果。支持链式调用,使得多个异步操作可以顺序执行。提供静态方法如和来处理多个 Promise。Promise 提供了一种更优雅和可读性更高的方式来处理异步操作,是现代 JavaScript 开发中的重要工具。
2025-02-20 09:19:53
418
原创 介绍一下闭包,闭包能被垃圾回收机制回收吗
闭包(Closure)是指一个函数与其词法环境的组合。简单来说,闭包允许函数访问其定义时的作用域中的变量,即使函数在其定义的作用域外执行。闭包是函数与其词法环境的组合。垃圾回收会在闭包不再被引用时回收其内存。如果闭包仍被引用,它不会被回收,可能导致内存泄漏。理解闭包和垃圾回收机制有助于编写高效且内存安全的代码。
2025-02-20 09:08:45
254
原创 var、let、const区别
在 JavaScript 中,varlet和const是用于声明变量的关键字,但它们的作用域、提升行为以及可变性等方面有显著区别。
2025-02-19 19:24:02
765
原创 TS中Any和Unknown有什么区别
在 TypeScript 中,any和unknown都是顶级类型(top types),表示可以是任何类型的值。但它们在使用和行为上有显著区别,主要体现在类型安全性和使用方式上。
2025-02-19 18:52:25
714
原创 vH和vW、em和rem的作用,怎么使用和区分
使用vh和vw创建响应式布局。使用em进行局部尺寸调整。使用rem实现全局一致的尺寸控制。根据具体需求选择合适的单位,能有效提升布局的灵活性和一致性。
2025-02-19 18:44:34
249
原创 css主题色修改后会多出一个css吗?css怎么定义变量?
通过结合 CSS 变量和 JavaScript,可以轻松实现动态主题色的切换,而不会生成额外的 CSS 文件。Sass 和 Less 等 CSS 预处理器也支持变量,但它们的变量是静态的,编译后会被替换为具体的值。:在编译时会生成静态的 CSS 文件,无法动态修改。CSS 变量是现代 CSS 提供的一种功能,允许在样式表中定义可复用的值,并在需要时动态修改。在 CSS 中修改主题色时,通常不会直接生成一个新的 CSS 文件,而是通过。是实现动态主题色的首选方案,适合需要运行时修改样式的场景。
2025-02-19 18:33:29
542
原创 nextTick有什么作用
Vue 的 DOM 更新是异步的,数据变化后,Vue 会将 DOM 更新操作推入一个队列,并在下一个事件循环中批量执行。它的主要作用是确保在 DOM 更新完成后执行某些操作,从而避免因 DOM 未更新而导致的错误或不一致。是 Vue.js 中非常重要的工具方法,能够帮助我们更好地处理 DOM 更新后的逻辑,确保代码的正确性和可靠性。:Vue 的 DOM 更新是异步的,直接操作 DOM 可能获取到的是旧值。:在复杂的逻辑中,确保某些操作在 DOM 更新后执行。可以确保操作的是更新后的 DOM。
2025-02-19 18:23:22
322
原创 Vue2和Vue3的Hooks有什么区别
Vue3 引入了组合式 API,提供了类似 React Hooks 的功能,使得逻辑复用更加灵活和清晰。通过组合式 API 和自定义 Hook 实现逻辑复用,代码更清晰、灵活,且支持 TypeScript。通过自定义 Hook,可以将逻辑提取到单独的函数中,避免 Mixins 的命名冲突和来源不清晰问题。,提供了类似 React Hooks 的功能,使得逻辑复用和组织更加灵活。通过 Mixins 实现逻辑复用,但存在命名冲突和来源不清晰的问题。相关逻辑可以组织在一起,而不是分散在多个选项中,代码更易维护。
2025-02-19 17:49:43
1076
原创 选项式和组合式有什么区别
Vue2 主要使用选项式 API,而 Vue3 引入了组合式 API,提供了更灵活的逻辑组织和复用方式。是 Vue3 的新特性,适合复杂场景,提供更好的逻辑复用和 TypeScript 支持。两者可以共存,Vue3 支持在同一个项目中混合使用选项式 API 和组合式 API。通过自定义 Hook,可以将逻辑提取到单独的函数中,方便复用。相关逻辑可以组织在一起,而不是分散在多个选项中,代码更易维护。:对于大型组件或需要逻辑复用的场景,组合式 API 更灵活。:相关逻辑可以组织在一起,而不是分散在多个选项中。
2025-02-19 17:18:18
703
原创 图片懒加载
图片懒加载(Lazy Loading)是一种优化技术,用于延迟加载页面中的图片,直到它们进入用户的可视区域(viewport)时才加载。这样可以减少页面初始加载时间,提升性能。,结合占位符和加载动画提升用户体验。是浏览器提供的原生 API,用于监听元素是否进入可视区域。为了提升用户体验,可以在图片加载前显示占位符或加载动画。监听页面滚动事件,检查图片是否进入可视区域。功能丰富,支持响应式图片、背景图懒加载等。不支持自定义加载占位符或加载动画。,可以通过监听滚动事件实现懒加载。属性,可以直接实现图片懒加载。
2025-02-19 12:52:17
813
原创 null和undefined的区别
是 JavaScript 中两个特殊的值,它们都表示“无”或“空”,但在语义和使用场景上有明显区别。表示变量已声明但未赋值,或函数没有返回值时的默认返回值。表示一个空对象指针,通常用于显式表示“无”或“空”。在 JSON 序列化时会被忽略(不会出现在结果中)。是 JavaScript 引擎默认赋予的初始值。(这是 JavaScript 的历史遗留问题)。用于初始化变量,表示该变量未来会被赋值为对象。用于表示变量未初始化或函数无返回值。用于显式表示空值或无效值。访问对象不存在的属性时。是开发者主动赋值的值。
2025-02-19 12:44:23
358
原创 ?.、!.、??、|| 和 &&区别
告诉 TypeScript 或 JavaScript,某个值一定不是。是常用的操作符,用于处理不同的逻辑场景。:判断左侧值是否为真值,如果是则返回右侧值,否则返回左侧值。:在 TypeScript 中明确告诉编译器某个值不为空。:访问深层嵌套对象时,避免因中间属性不存在而报错。:安全访问嵌套对象的属性或方法,避免因。),如果是则返回右侧值,否则返回左侧值。,如果是则返回右侧值,否则返回左侧值。:提供默认值,且可以接受假值被覆盖。:判断左侧值是否为假值(:提供默认值,且不希望。,避免类型检查报错。
2025-02-19 12:38:12
305
原创 Vue2/Vue3自定义指令
两者的实现方式类似,但在 Vue3 中,指令的生命周期钩子有所调整。自定义指令适合处理 DOM 操作(如聚焦、点击外部、拖拽等),但应避免过度使用,优先考虑组件化设计。Vue2 和 Vue3 的自定义指令功能类似,但 Vue3 的生命周期钩子更细粒度。以下是一个常见的自定义指令示例:点击元素外部时触发回调。:指令绑定到元素时调用(元素还未插入 DOM)。:组件更新时调用(可能发生在子组件更新之前)。:指令第一次绑定到元素时调用(只调用一次)。:组件及其子组件全部更新后调用。:组件及其子组件更新后调用。
2025-02-19 11:09:10
394
原创 简述Vue2和Vue3的区别
Vue3 在性能、逻辑复用(Composition API)、TS 支持、新特性(Fragment/Teleport)等方面提升显著。Vue3 通过编译时标记静态节点,优化 Diff 算法(静态提升、补丁标记等),减少渲染开销。:Vue 3 支持 Tree-shaking,未使用的代码会被移除,减少了打包体积。等函数),允许按逻辑功能组织代码,支持更灵活的逻辑复用(自定义 Hook)。等分块编写),逻辑分散,复用需借助 Mixins(可能导致命名冲突)。组件),未使用的功能不会打包到最终产物。
2025-02-18 16:27:53
757
原创 diff算法简析
的高效算法,探讨的是虚拟DOM树发生变化后,生成DOM树更新补丁的方式。对比新旧两株虚拟DOM树的差异,将更新补丁作用于真实DOM,在更新视图时,这两个函数会根据新旧节点的差异来决定是否需要添加或移除节点。diff算法的核心目的是用最少的步骤找出新旧节点的差异,从而更新视图。而patchVnode函数则用于处理虚拟节点之间的差异。React的diff算法与Vue有所不同。它根据新旧节点的差异来更新子节点,确保视图的一致性。给真实的DOM打补丁,更新相应的视图。处理子节点更新的关键函数。
2025-02-12 12:32:38
326
原创 提升LCP(Largest Contentful Paint)
LCP(Large Contentful Paint)是Core Web Vitals一个关键的Web性能指标,用于衡量网页的加载性能。具体来说,LCP是指从用户请求页面开始到页面主体内容(如大图像、视频或大块文本)完全加载并显示在视口所需的时间。LCP越短,用户感受到的页面加载速度就越快,这对提升用户体验和页面留存率至关重要。为了获得良好的用户体验。Google建议LCP时间在2.5秒以内。如果LCP超过4秒,则需要进行优化。三个关键指标中其它两个指标是。
2025-02-11 22:26:01
691
原创 Big.js应用
big.js是一个小巧、快速且易于使用的 JavaScript 库,专门用于任意精度的十进制算术运算。它非常适合处理需要的场景,例如金融计算、科学计算等。big.js的设计目标是提供一个简单且高效的 API,使得开发者可以轻松地进行高精度数值计算。
2025-02-07 18:12:26
1088
原创 JS版本号
在项目开发和运行中,某个功能组件需要版本更高的依赖库、数据项需要兼容等问题。通常升级涉及到三个点:向下兼容、协议升级、拒绝服务。那么如何比较两个版本号的大小呢?此类问题需要使用版本号解决。
2025-02-07 14:41:33
202
原创 正则表达式
本文将对正则表达式做一个详细的介绍。模式在JavaScript中,正则表达式也是对象【引用数据类型中RegExp类型】。这些模式被用于RegExp的exec和test方法,以及String中的match、matchAll、replace、search和split方法。特点:(1)灵活性、逻辑性和功能性非常强。(2)可以迅速地用极简单的方式达到字符串的复杂控制。
2025-02-06 19:34:15
1095
原创 堆和栈解析
离开作用域的值会被自动标记为可回收,然后再垃圾回收期间被删除。主流的垃圾回收算法是标记清理,即先给当前不使用的值加上标记,再回来回收它们的内存。引用计数是另一种垃圾回收策略,需要记录值被引用了多少次。引用计数在代码中存在循环引用时会出现问题。解除变量的引用不仅可以消除循环引用,而且对垃圾回收也有帮助。为促进内存回收,全局对象、全局对象的属性、循环引用都应该在不需要时解除引用。
2025-02-05 19:33:42
919
原创 JS中异步处理执行顺序
本文对JS执行做一个扩展。JavaScript是单线程语言,同一时间只能做一件事,只有当前一个任务结束,才会执行下一个任务。假如前一个任务执行时间较长,下一个任务还得等待前一个任务执行完成。在JS中有同步任务和异步任务,他们之间的执行有一定的顺序。
2025-01-23 17:04:16
989
原创 作用域 & 变量/函数提升
关于作用域的问题,做一个详细的介绍。在之前的文章中,提到作用域是可以静态分析出来的,因此作用域在定义时,就已经确定了。
2025-01-22 12:40:53
553
原创 原型与原型链
原型链在结构上很像链表,每个对象中都保存着一个地址,指向当前对象的原型,可以层层向上查找,起到继承的效果。原型链是JS实现继承的一种机制。
2025-01-15 20:50:53
1398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人