首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS ----- 底层原理

什么JS JavaScript一种基于对象动态、弱类型脚本语言(简称JS),一种解释型语言,和其他编程语言不同,如java/C++等编译型语言,这些语言在代码执行前会进行通篇编译,先编译成字节码...而JS不是这样做JS不需要编译成中间码,而是可以直接在浏览器中运行,JS运行过程可分为两个阶段,编译和执行。...执行上下文可以理解为执行环境(执行上下文只能由JS解释器创建,也只能由JS解释器使用,用户不可以操作该"对象")。...JS 底层运行原理 每调用一个函数就会生成一个执行环境(俗称执行上下文),执行上下文环境数量没有限制 每调用一个函数就会生成一个执行环境(俗称执行上下文),执行上下文环境数量没有限制 单线程 同步执行...,只有栈顶上下文处于执行中,其他上下文需要等待 每次某个函数被调用,就会有个新执行上下文为其创建,即使调用自身函数,也是如此。

2K10
您找到你想要的搜索结果了吗?
是的
没有找到

Node.js 底层原理

前言:之前分享了 Node.js 底层原理,主要是简单介绍了 Node.js 一些基础原理和一些核心模块实现,本文从 Node.js 整体方面介绍 Node.js 底层原理。...C++ 代码主要分为三个部分,第一部分主要是封装 Libuv 和第三方库 C++ 代码,比如net 和 fs 这些模块都会对应一个 C++ 模块,它主要是对底层一些封装。...等到这事件触发时候,进程就会被唤醒,唤醒之后,它就遍历 epoll 返回了事件列表,并执行上层回调。 现在有一个底层能力,那么这个底层能力怎么暴露给上层 JS 去使用呢?...现在有了底层能力,有了这一层接口,但是我们怎么去加载后执行 JS 代码呢?这时候就需要模块加载器。 4 Node.js模块加载器 Node.js 中有五种模块加载器。 1....现在有了底层能力,也有了这一次层接口,也有了代码加载器。最后我们来看一下 Node.js 作为一个服务器时候,它架构怎么样

96540

Node.js底层原理

前言:本文根据最近做一次分享整理而成,希望能帮忙大家深入理解Node.js一些原理和实现。 大家好,我一名Node.js爱好者,今天我分享主题Node.js底层原理。...V8:实现JS解析和支持自定义功能,得益于V8支持自定义拓展,才有了Node.js。 Node.js代码架构 ? 上图Node.js代码架构,Node.js代码主要分为JSC++、C三种。...1 JS我们使用那些模块。 2 C++代码分为三个部分,第一部分封装了Libuv功能,第二部分则是不依赖于Libuv,比如Buffer模块。第三部分V8代码。...宏展开后就是一个个如上图黄色框内容,每个registerxxx函数作用就是往C++模块链表了插入一个节点,最后会形成一个链表。 那么Node.js如何访问这些C++模块呢?...3 另外Node.js还维护了一个map,mapkey相对超时时间,值就是对应二叉堆节点。 4 堆所有节点对应底层一个超时节点。

1.9K20

synchronized底层怎么实现

前言 面试时候有被问到,synchronized底层怎么实现,回答比较浅,面试官也不是太满意,所以觉得要好好总结一下,啃啃这个硬骨头。...synchronized原理 我们来看一下synchronized底层怎么实现吧。 例如: 下面一段代码,包含一个synchronized代码块和一个synchronized同步方法。...javap -p -v -c SynchronizedTest.class 反编译出来字节码文件内容有点多,我只截取了关键部分来分析。 ?...接着回到我们monitor对象,monitor对象源码C++写,在虚拟机ObjectMonitor.hpp文件中。 数据结构长这个样子。...这样在轻量级失败后,就会升级为自旋锁,如果自旋锁也失败了,那就只能升级到重量级锁了。 ? 参考资料:《深入理解Java虚拟机》、死磕synchronized底层实现

51610

JS底层运行机制

想要了解JS底层运行机制,首先要明白这几个概念: 为什么js能在浏览器中执行 众所周知,计算机有内存,计算机会在内存中开辟一块空间去供js执行,这个空间我们称之为执行栈 全局对象和全局变量对象是一样吗...执行上下文 为了进行区域划分,会形成不同执行上下文,全局环境会形成全局执行上下文,函数执行会形成函数执行上下文,通过作用域链scope chain形成链式关系 举个例子,var a = 12在底层如何执行...这里需要对栈内存和堆内存有个基本了解 引用类型存放在堆内存当中 基本数据类型,也就是值类型,这种值存放于栈内存当中 对于var a = 12,在计算机底层先看等号右边值,引用类型还是值类型...对于函数声明function fn(){} 底层会形成类似于fn = function (){},因为函数也是引用类型,故先创建堆内存,用来存放函数体内容,存放格式字符串形式       再次说明下对象值类型...scope chain       初始化this       初始化arguments       形参赋值       变量提升 3.函数体代码执行 4.出栈释放 ---- JS底层运行机制(

1.9K10

HashMap 底层怎么样

JDK1.8 之前 JDK1.8 前,HashMap 底层 数组+链表,也就是 链表散列。...,就判断该元素与要存入元素 hash 值以及 key 是否相同;如果相同,直接覆盖;如果不同,就通过 拉链法 解决冲突。...扰动函数:指的是 HashMap hash 方法,扰动函数是为了减少碰撞,防止一些实现比较差 hashCode() 方法 JDK1.8 hash() 方法 相比于 JDK1.7 hash(...拉链法: 将链表与数组相结合,也就是创建一个链表数组,数组每一格就是一个链表,若遇到哈希冲突,则将冲突值加到链表中。 ?...JDK1.8 之后 HashMap 底层数据结构 TreeMap、TreeSet 以及 JDK1.8 之后 HashMap 底层都用到了红黑树,就是为了解决二叉查找树在某些情况下,会退化成线性结构缺陷

1.7K20

Java IO底层如何工作

本博文主要讨论I/O在底层如何工作。本文服务读者,迫切希望了解Java I/O操作在机器层面如何进行映射,以及应用运行时硬件都做了什么。...假定你熟悉基本I/O操作,比如通过Java I/O API读写文件。这些内容不在本文讨论范围。 缓存处理和内核vs用户空间 缓冲与缓冲处理方式,所有I/O操作基础。...它们只是提供了一定数量可以保存数据插槽。从这方面来说,一个磁盘段与 内存分页类似。它们都有统一大小并且个可寻址大数组。 另一方面,文件系统更高层抽象。...磁盘上文件内容及元数据可能分布在多个文件系统页面上,这些页面可能不连续。 分配足够多内核空间内存页面来保存相同文件系统页面。 建立这些内存分页与磁盘上文件系统分页映射。...一旦pageins完成,文件系统分解原始数据来提取请求文件内容或属性信息。 需要注意,这个文件系统数据将像其它内存页一样被缓存起来。

78340

Java IO底层如何工作

本博文主要讨论I/O在底层如何工作。本文服务读者,迫切希望了解Java I/O操作在机器层面如何进行映射,以及应用运行时硬件都做了什么。...假定你熟悉基本I/O操作,比如通过Java I/O API读写文件。这些内容不在本文讨论范围。 缓存处理和内核vs用户空间 缓冲与缓冲处理方式,所有I/O操作基础。...它们只是提供了一定数量可以保存数据插槽。从这方面来说,一个磁盘段与内存分页类似。它们都有统一大小并且个可寻址大数组。 另一方面,文件系统更高层抽象。...磁盘上文件内容及元数据可能分布在多个文件系统页面上,这些页面可能不连续。 分配足够多内核空间内存页面来保存相同文件系统页面。 建立这些内存分页与磁盘上文件系统分页映射。...一旦pageins完成,文件系统分解原始数据来提取请求文件内容或属性信息。 需要注意,这个文件系统数据将像其它内存页一样被缓存起来。

1.1K80

Java IO底层如何工作

缓存处理和内核vs用户空间 缓冲与缓冲处理方式,所有I/O操作基础。术语“输入、输出”只对数据移入和移出缓存有意义。任何时候都要把它记在心中。...操作系统将其内存地址空间划分为页面,这是固定大小字节组。这些内存页总是磁盘块大小倍数和通常为2倍(简化寻址)。典型内存页面大小1024、2048和4096字节。...它们只是提供了一定数量可以保存数据插槽。从这方面来说,一个磁盘段与 内存分页类似。它们都有统一大小并且个可寻址大数组。 另一方面,文件系统更高层抽象。...磁盘上文件内容及元数据可能分布在多个文件系统页面上,这些页面可能不连续。 分配足够多内核空间内存页面来保存相同文件系统页面。 建立这些内存分页与磁盘上文件系统分页映射。...一旦pageins完成,文件系统分解原始数据来提取请求文件内容或属性信息。 需要注意,这个文件系统数据将像其它内存页一样被缓存起来。

64320

Python底层怎么实现字典

前言 上次我们分享了列表底层原理,今天我们继续分享另外一个常用Python数据结构,字典。...字典键值对,可以让我们可以很轻松完成数据查询、添加和删除,说到键值对,我又不经意想到了散列表(哈希表)。 今天可以明确告诉你,字典就是用到了哈希表思想,全剧终。开玩笑哈,那废话不多说,开整。...哈希表也是一样,但是数组索引0到n-1,但是哈希表键值对,所以,哈希函数来了。 我们把键通过哈希函数转换为哈希值(这样就可以是个整数),然后将对应值存在数组中这个哈希值索引位置上。...字典 不会吧,都2021年了,不会还有人说字典无序吧。...确实,在python3.6之前,字典无序,但是在python3.7开始,字典就有序了,这有序无序,恰恰就说明字典底层发生了变化,我们来一探究竟。

95710

TCPIP底层队列如何实现

自从上次学习了TCP/IP拥塞控制算法后,我越发想要更加深入了解TCP/IP一些底层原理,搜索了很多网络上资料,看到了陶辉大神关于高性能网络编程专栏,收益颇多。...我们今天只关注前半句,对这句话感兴趣同学可以看一下《蚂蚁通信框架实践》。 为什么不能阻塞读取网络信息IO线程呢?这里就要从经典网络C10K开始理解,服务器如何支持并发1万请求。...C10K根源在于网络IO模型。Linux 中网络处理都用同步阻塞方式,也就是每个请求都分配一个进程或者线程,那么要支持1万并发,难道就要使用1万个线程处理请求嘛?...这1万个线程调度、上下文切换乃至它们占用内存,都会成为瓶颈。解决C10K通用办法就是使用I/O 多路复用,Netty就是这样。 ?...receive队列真正接收队列,操作系统收到TCP数据包经过检查和处理后,就会保存到这个队列中。 backlog“备用队列”。

1.1K30

hashmap低层原理(js底层原理)

大家好,又见面了,我你们朋友全栈君。 数组:其实所谓数组指就是一组相关类型变量集合,并且这些变量彼此之间没有任何关联。...哈希表数组加链表组成。 HashMap结构及原理 HashMap基于哈希表Map接口非同步实现。实现HashMap对数据操作,允许有一个null键,多个null值。...HashMap底层就是一个数组结构,数组中每一项又是一个链表。数组+链表结构,新建一个HashMap时候,就会初始化一个数组。...Entry就是数组中元素,每个Entry其实就是一个key-value键值对,它持有一个指向下一个元素引用,这就构成了链表,HashMap底层将key-value当成一个整体来处理,这个整体就是一个...个键值对时候才会发生扩容现象,因为前16个值,每个值在底层数组中分别占据一个位置,并没有发生hash碰撞。

1.8K20

JavaScript如何工作: CSS 和 JS 动画底层原理及如何优化它们性能

和 Y 坐标,后两个数字第二个控制点 X 和 Y 坐标。...如果 CSS 动画只是改变 transforms 和 opacity,这时整个 CSS 动画得以在 合成线程 完成(而JS动画则会在 主线程 执行,然后触发合成线程进行下一步操作),在 JS 执行一些昂贵任务时...对于帧速表现不好低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外代码。...CSS3有兼容性问题,而JS大多时候没有兼容性问题。 总结 如果动画只是简单状态切换,不需要中间过程控制,在这种情况下,css 动画优选方案。...那么你应该使用 js 动画,这样你动画可以保持高效,并且你工作流也更可控。所以,在实现一些小交互动效时候,就多考虑考虑 CSS 动画。

3.4K20

揭秘 Node.js 底层架构

本身怎么实现呢?...在核心模块之下,有一层 C++ Bindings,将上层 JavaScript 代码与下层 C/C++类库桥接起来 底层模块为了更好性能,采用 C/C++实现,而上层 JavaScript 代码无法直接与...另一方面,通过 Bindings 也可以复用可靠老牌开源类库,而不必手搓所有底层模块 以文件 I/O 为例,读取当前 JS 文件内容并输出到标准输出: // readThisFile.js const...一个 C++调用,用来打开文件描述符,三个参数分别是文件路径,C++ fopen文件访问模式串(如r、w+),以及八进制格式文件读写权限(666表示每个人都有读写权限),和接收返回数据req回调...),到号顾客订单会被传给经理(libuv),经理将订单分配给咖啡师(worker 线程),咖啡师用不同原料和工具(底层依赖 C/C++模块)来制作订单要求各种咖啡,一般会有 4 个咖啡师值班,高峰时候可能会增加一些

2.2K10

C++】详解多态底层原理

上一篇文章我们学习了多态语法,想必大家都会有很多疑问,这篇文章,我们就来带大家看看多态如何实现,它底层原理怎样… 前言 需要声明,本文中代码及解释都是在vs2022下x86...它底层原理怎么样? 它怎么根据不同对象就能调到不同函数呢? 我们来分析一下: 其实了解了上面的内容,相信大家已经差不多能猜出来了。...这里如果我们直接打印虚函数地址去验证的话,可能会发现打印出来跟虚表里地址不一样,可以理解为虚函数表内地址虚函数实际地址一种间接表示形式,这可能与C++中多态性、动态绑定和继承机制所导致。...(我们当前环境4字节) 那如何拿到对象前4个字节内容? 大家回忆一下之前C语言文章里有讲过大小端问题,在那里我们要取出一个整数变量第一个字节内容,怎么做?...那现在这种情况,如果没有虚继承的话,BC里面都有一个继承A虚表,B重写会覆盖自己里面继承A虚表,C重写也会。 但是!!!

14210

OpenTSDB 底层 HBase Rowkey 如何设计

OpenTSDB 基于 HBase 可扩展、开源时间序列数据库(Time Series Database),可以用于存储监控数据、物联网传感器、金融K线等带有时间数据。...它特点能够提供最高毫秒级精度时间序列数据存储,能够长久保存原始数据并且不失精度。它拥有很强数据写入能力,支持大并发数据写入,并且拥有可无限水平扩展存储容量。...目前,阿里云 HBase 产品直接支持 OpenTSDB 组件。...熟悉 HBase 同学肯定知道,要看 HBase 表设计好不好,关键看其 Rowkey 设计好不好,HBase Rowkey 设计会考虑到实际查询场景。...如果想通过例子进一步了解 Rowkey 到底如何组织以及列名称是如何组成,可以进一步阅读 通过例子剖析 OpenTSDB Rowkey 及列名设计。

2K31

WPF 触摸底层 PenImc 如何工作

在 WPF 里面有其他软件完全比不上超快速触摸,这个触摸通过 PenImc 获取。...现在 WPF 开源了,本文就带大家来阅读触摸底层代码,阅读本文需要一点 C# 和 C++ 基础 现在 WPF 开源,所有源代码都可以在官方代码找到,本文只是让大家能够更快了解整个触摸代码和更快了解代码...等待 Wisp 服务收集,在收集完成之后会释放锁,进入 GetPenEventCore 方法 在 GetPenEventCore 使用很长判断逻辑,其中主要是判断当前获取数据才会进入到 WPF...pentypes.h 文件 #define WM_TABLET_DEFBASE 0x02C0 #define WM_TABLET_CONTEXTCREATE (WM_TABLET_DEFBASE...WM_TABLET_CURSORINRANGE (WM_TABLET_DEFBASE + 3) 也就是 707 对应在 WPF 定义 PenEventPenInRange 值 const int

45610
领券