1.计算机基础_编译原理
理解代码到底是什么,计算机如何将代码转换为可以运行的目标程序
代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。
计算机不能直接理解高级语言,只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序,翻译的方式有两种,一种是解释型语言,一种是编译性语言。
编译过程的五个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
正则表达式的匹配原理和性能优化
正则表达式原理和优化 - 神话小小哥 - 博客园 (cnblogs.com)
如何将JavaScript代码解析成抽象语法树(AST)
AST,抽象语法树,是源代码的抽象语法结构的树状表现形式。
JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧 - Fundebug - 博客园 (cnblogs.com)
首先,词法分析即分词,目的是把一行行代码分割成一个个token;语法分析即把生成的token数据转化成AST。生成AST后,之后解释器/编译器的工作即依赖于AST,而不是源代码。之后,通过解释器把AST转换成字节码,字节码是介于AST和机器码之间的一种代码,因为直接把AST转换成机器码会占用大量的内存,所以先把AST转成字节码,然后由解释器逐行执行,这样就能减少内存的压力。最后,在执行字节码的过程中,如果发现重复的代码,V8会把这部分代码标为热点代码,然后将这部分代码编译成机器码保存起来,所以在这样的机制下,代码执行的时间越长,执行效率越高,因为会有更多的字节码被标记为热点代码,当再次遇到这些代码的时候,可以直接执行保存起来的机器码,而不用再次转换成机器码。
V8执行一段js代码的整个过程,分为三步:
- 首先通过词法分析和语法分析生成AST
- 将AST转换成字节码
- 由解释器逐行执行字节码,遇到热点代码启动编译器进行编译,生成对应的机器码, 以优化执行效率
base64的编码原理
传输过程中全英文当然没问题,但是一旦涉及到中文就会乱码,另外其他的二进制文件,图片等,都会出现问题。而BASE64的出现就是为了解决此问题,
它是基于64个可打印的字符来表示二进制的数据的一种方法。
Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一,大多数编码都是由字符串转化成二进制,而Base64的编码则是从二进制转换为字符串。
Base64就是用6位(2的6次幂就是64)表示字符,因此称为Base64。
Base64的原理比较简单,每当我们使用Base64时都会先定义一个类似这样的数组:
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
上面就是Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。在日常使用中我们还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现。 具体转换步骤:
第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
第二步,将上面的24个二进制位每6个一组,共分为4组。
第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
第四步,根据Base64编码对照表获得对应的值。
Base64编码并不是真正的加密方式,它只是从二进制到字符的转换过程,说Base64编码是加密方法,只是因为经过Base64编码之后,让人一眼看上去不知道什么内容而已。
几种进制的相互转换计算方法,在JavaScript中如何表示和转换
parseInt(str,radix)
第一个参数是需要解析的字符串;其他进制不加前缀。
第二个参数是一个进制基数,表示转换时按什么进制来理解这个字符串,默认值10,表示转十进制。
第二个参数如果非数字,则自动转数字,如无法转称数字则忽略该参数;是数字时,必须是 2-36 的整数,超出该范围,返回 NaN
parseInt('1111', 2) // 15
parseInt('1234', 8) // 668
parseInt('18af', 16) // 6319
parseInt('1111') // 1111
parseInt('0x21') // 33
parseInt('0o21') // 0
parseInt('0b11') // 0
parseInt('111', 'add') // 111
parseInt('111', '787') // NaN
Number()
可以把字符串转为数字,支持其他进制的字符串,默认转成十进制数字。
字符串中如果存在无效的进制字符时,返回 NaN。
记住,需要使用进制前缀,0b,0o,0x。
Number.prototype.toString(radix)

浙公网安备 33010602011771号