操作系统
-
js如何实现随机数生成
javascript中实现随机数生成的核心方法是使用math.random()函数,它返回一个[0, 1)区间内的伪随机浮点数。1. 生成[0, 1)范围内的浮点数:直接调用math.random()即可;2. 生成指定范围内的浮点数:使用公式math.random() (max – m…
-
使用 Node.js 创建的服务器无法从其他设备访问?解决方法详解
本文旨在解决 Node.js 服务器仅能在本地访问,而无法从局域网或互联网其他设备访问的问题。通过详细分析原因,并介绍使用 ngrok 工具进行端口映射,使服务器能够被外部设备访问,从而帮助开发者快速解决此类问题。 当你使用 Node.js 创建了一个简单的 HTTP 服务器,并且在本地计算机上可以…
-
如何将本地Node.js服务器暴露到公网
本文旨在解决Node.js服务器在本地运行但无法从外部设备访问的问题。核心原因在于服务器默认绑定本地地址且网络环境限制。我们将详细介绍如何利用ngrok工具快速、安全地将本地Node.js服务映射到公共互联网,从而实现远程访问,并提供详细的操作步骤及相关注意事项,帮助开发者轻松实现本地服务的外部调试…
-
什么是抽象工厂?抽象工厂的实现
抽象工厂是一种创建型设计模式,提供接口以创建一系列相关或依赖对象而不指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等角色,实现产品家族的一致性、客户端与具体实现的解耦,并支持新增产品家族的扩展。典型应用于跨平台UI库等需保持对象组合一致性的场景。其核心优势在于隔离创建逻辑,提升可维护性,但…
-
js 如何检测键盘按键
javascript键盘事件主要有三种:1. keydown事件在任意键按下时触发,支持重复触发,适用于监听功能键和组合键;2. keyup事件在按键释放时触发,仅触发一次,适合处理按键结束操作;3. keypress事件仅在产生字符的键按下时触发,已废弃,推荐使用input事件替代。识别按键应优先…
-
JS如何实现生成器协程?协程的调度
JavaScript通过生成器函数function*和yield实现协程,调用生成器函数返回生成器对象,执行时遇到yield暂停并返回值,通过next()方法恢复执行且可传参,实现双向通信;生成器保持内部状态,支持惰性求值和分步执行,常用于异步流程控制;为调度生成器协程,需编写执行器函数run,其递…
-
事件循环中的“并行”和“并发”有什么区别?



并发指单线程下任务交替执行,通过事件循环实现非阻塞调度;2. 并行指多核下任务真正同时执行,需web workers等机制脱离主线程;3. i/o密集型任务用并发(如promise),cpu密集型任务用并行(如web workers)以优化性能,避免主线程阻塞。 事件循环中的“并行”和“并发”是两个…
-
JS如何实现无锁队列?CAS操作原理
javascript中实现无锁队列仅在web workers与sharedarraybuffer的多线程共享内存场景下有意义,其核心依赖atomics.compareexchange()提供的cas原子操作来避免传统锁的使用;在单线程主线程或node.js事件循环中,由于执行是顺序的,无需无锁结构;…
-
什么是二叉堆?二叉堆的插入和删除
二叉堆是一种用数组实现的完全二叉树,满足堆属性,分为最小堆和最大堆,能高效插入、删除并获取最值,时间复杂度为O(log N);其核心操作为插入时的“上浮”和删除堆顶时的“下沉”;常见应用包括优先队列、堆排序、Dijkstra与Prim算法及Top K问题。 二叉堆本质上是一种特殊的完全二叉树,它满足…
-
js 怎样处理鼠标滚轮事件
最推荐的方式是监听wheel事件。它提供deltaY、deltaX和deltaMode属性,能精确获取滚动方向与幅度,通过preventDefault()阻止默认行为并结合{passive: false}实现自定义滚动,现代浏览器支持良好,优于旧的mousewheel和DOMMouseScroll事…