c++
-
JS如何实现注解?装饰器的元数据
JavaScript通过装饰器和Reflect Metadata实现类似“注解”的功能,可在不修改原代码的情况下为类、方法等添加元数据并增强行为。装饰器是接收目标并返回修改结果的函数,结合Reflect.defineMetadata和Reflect.getMetadata等API,能实现日志、权限控…
-
事件循环中的“并行”和“并发”有什么区别?
并发指单线程下任务交替执行,通过事件循环实现非阻塞调度;2. 并行指多核下任务真正同时执行,需web workers等机制脱离主线程;3. i/o密集型任务用并发(如promise),cpu密集型任务用并行(如web workers)以优化性能,避免主线程阻塞。 事件循环中的“并行”和“并发”是两个…
-
javascript闭包怎样隔离全局命名空间
闭包通过创建私有作用域实现命名空间隔离,其核心在于函数能“记忆”并访问定义时所在词法环境的变量,即使在外部执行也不会丢失对该环境的引用。1. 当一个函数返回其内部函数时,内部函数仍可访问外部函数的局部变量,这些变量因被引用而未被垃圾回收,形成闭包;2. 外部无法直接访问闭包内的变量,只能通过返回的特…
-
JS如何实现并发模式?并发的渲染
JavaScript通过事件循环实现异步并发,利用Web Workers进行多线程计算,避免主线程阻塞,结合rAF、Intersection Observer、requestIdleCallback等技术优化渲染性能,提升页面响应性。 JavaScript本身是单线程的,它通过事件循环(Event …
-
JS如何实现无锁队列?CAS操作原理
javascript中实现无锁队列仅在web workers与sharedarraybuffer的多线程共享内存场景下有意义,其核心依赖atomics.compareexchange()提供的cas原子操作来避免传统锁的使用;在单线程主线程或node.js事件循环中,由于执行是顺序的,无需无锁结构;…
-
什么是并行的数据结构?多线程下的处理
并行数据结构是为多线程环境设计的数据容器,旨在保证并发访问时的数据正确性与高性能。传统数据结构如ArrayList或HashMap在多线程下易出现竞态条件、数据不一致和死锁等问题,因其未考虑并发操作的原子性与可见性。解决方案主要包括:使用内置并发集合类(如Java的ConcurrentHashMap…
-
js如何检测原型链上的私有属性
javascript中“私有属性”包含三种实现方式:es2022的#私有字段(真正私有、实例专属、不可检测)、下划线_前缀(约定私有、可检测)、闭包封装(作用域私有、非属性、不可检测);2. 无法检测原型链上的私有属性,因为#私有字段不在原型链上且外部不可见,闭包私有数据不是对象属性,而_前缀属性虽…
-
什么是主席树?主席树的可持久化
主席树通过共享节点实现可持久化,支持查询历史版本,空间复杂度O(N log N),常用于静态区间第K大问题,其核心是在修改时仅新建必要节点,其余指向旧版本,从而高效保存多版本线段树。 主席树,又称可持久化线段树,本质上是一种可以查询历史版本线段树的数据结构。它通过共享线段树的节点,大幅降低了空间复杂…
-
JS如何实现依赖注入?DI容器的实现
答案:JavaScript实现依赖注入的核心是通过DI容器解耦组件与其依赖,提升可测试性、可维护性和模块独立性。容器通过register注册依赖,resolve递归解析并注入依赖,支持构造函数注入等模式,适用于中大型项目以集中管理复杂依赖,但需权衡学习成本与实际需求,避免过度设计。 JavaScri…
-
JS如何实现内存管理?垃圾回收机制
JavaScript通过自动内存管理和垃圾回收机制避免内存泄漏,核心是标记-清除算法与分代回收策略,结合Chrome DevTools的堆快照和时间线分析可有效诊断内存问题。 JavaScript的内存管理和垃圾回收机制,说白了,就是浏览器引擎(比如V8)在幕后默默地帮我们处理内存的分配与释放,这样…