字符编码
ASCII
每一位2进制有0、1两种状态,1字节 = 256种状态
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。
ASCII 码一共规定了128个字符的编码
但是英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的(特别是亚洲国家,我们汉字就更加难顶了)
Unicode
Unicode,统一码(Unicode),也叫万国码。就像它的名字都表示的,这是一种所有符号的编码。
它是一个很大的集合,现在的规模可以容纳100多万个符号
网络上流传比较广的说法是:
ASCII编码是1个字节,而Unicode编码通常是多个字节。
用Unicode编码比ASCII编码需要多很多的的存储空间
阮一峰老师:Unicode有两个问题
- 第一个问题是,如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?
- 第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是
0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。
UTF-8
UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式
其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用
UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
规则!!!
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxxUTF-8和Unicode
严的 Unicode码 是4E25,UTF-8 编码是E4B8A5
参考:https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html《阮一峰的网络日志》
ArrayBuffer
类型化数组ArrayBuffer
类型化数组的核心是一个名为ArrayBuffer的类型
每个ArrayBuffer对象表示的只是内存中指定的字节数;
但不会指定这些字节用于保存什么类型的数据;
通过ArrayBuffer能做的,就是为了将来使用而分配一定数量的字节.
// 创建一个8-byte的ArrayBuffer
var b = new ArrayBuffer(8);
// 创建一个b的引用,类型是Int32,起始位置在0,结束位置为缓冲区尾部
var v1 = new Int32Array(b);
// 创建一个b的引用,类型是Uint8,起始位置在2,结束位置为缓冲区尾部
var v2 = new Uint8Array(b, 2);
// 创建一个b的引用,类型是Int16,起始位置在2,总长度为2
var v3 = new Int16Array(b, 2, 2);
(比如threejs常使用的Float32Array)
Uint8
uint8是8位无符号整型,uint16是16位无符号整型
整型有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。在一些不可能取值为负数的时候,可以定义为unsigned\,在一些底层的嵌入式编程的数据一般都是无符号。

命令窗口
有时候我们执行一些命令失败,但是往上有人是成功的,可能是当前终端不支持
windows用户:powershell是微软用来替代cmd的,我们可以cmd和powershell轮流试一试命令的执行,搜索引擎上也有vscode中默认终端切换的方案;除此之外,coderwhy老师还推荐windows用户使用git bash敲命令,毕竟windows的终端没有linux、macos做得好,和操作系统的连接、内核好用
图形
Base64
Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法,它是一种编码方式的名称。
由于 log2 64 = 6 所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元
当需要对二进制数据进行编码时,通常会使用 Base64 编码方案,尤其是当数据需要通过旨在处理文本的媒体进行存储和传输时。这种编码有助于确保数据在传输过程中保持完整而不被修改。Base64 常用于许多应用程序,包括通过 MIME 发送电子邮件,以及以 XML 或 JSON 格式存储复杂数据。
Base64Url
在编写 HTML 网页时,对于一些简单图片,通常会选择将图片内容直接内嵌在网页中,从而减少不必要的网络请求,但是图片数据是二进制数据,该怎么嵌入呢?绝大多数现代浏览器都支持一种名为 Data URLs 的特性,允许使用 base64 对图片或其他文件的二进制数据进行编码,将其作为文本字符串嵌入网页中。
组成
前缀(data:)、指示数据类型的 MIME 类型、如果非文本则为可选的 base64 标记、数据本身:
data:[<mediatype>][;base64],<data>
mediatype 是个 MIME 类型的字符串,例如 “image/jpeg“ 表示 JPEG 图像文件。如果被省略,则默认值为 text/plain;charset=US-ASCII。如果数据是文本类型,你可以直接将文本嵌入(根据文档类型,使用合适的实体字符或转义字符)。如果是二进制数据,你可以将数据进行 base64 编码之后再进行嵌入。比如嵌入一张图片:
<img alt="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">
HTML中,img的src和css样式的background-image都可以接受base64字符串,从而在页面上渲染出对应的图片
再次我们先了解下base64的缺点
- 如果图片较大,图片的色彩层次比较丰富,则不适合使用这种方式,因为该图片经过 base64 编码后的字符串非常大,会明显增大 HTML 页面的大小,从而影响加载速度
- base64Url可能会被你的应用多次复用,本来浏览器可以直接从本地缓存取出的图片,换成base64Url,将造成应用中多个页面重复下载1.3倍大小的文本 约等于 流量消耗 * 13倍
- 低版本浏览器兼容问题
- 不利于开发者工具调试
优点呢?(减少了http请求)
- 在http2.0的加持下(二进制帧传输),保留了http1.1的长连接,请求和响应可以交错甚至可以复用,多个并行请求的开销已经大大降低,我已经不知道还有什么理由继续坚持base64Url的使用了。
JPG vs PNG
这和普通的HTML差不多,JPG有损压缩,PNG有无损压缩,所以PNG的下载速度一般比较慢。但是,PNG支持透明度。PNG可能也适合作为非图像数据(non-image data)的格式,比如法线图,以及其他种类的非图像图,我们后面会介绍。
请记住,在WebGL中JPG使用的内存并不比PNG少。参见上文。
BMP
BMP是英文全称为位图(Bitmap)的缩写,它是一种常见的图像文件格式。BMP格式是一种无损的图像文件格式,它以像素阵列的形式存储图像数据,每个像素都有自己的颜色信息。BMP文件可以包含彩色图像、灰度图像或黑白图像。
BMP格式的文件大小相对较大,现在常用的图片格式往往采用压缩算法,如JPEG、PNG等,以减小文件大小并保持较好的图像质量。然而,BMP格式仍然在某些特定的应用领域中得到广泛使用,比如在一些图像处理软件、打印机和某些老旧的操作系统中。
PAG
PAG(Portable Animated Graphics)是腾讯自主研发的一套完整的动画工作流解决方案,助力于将 AE 动画方便快捷的应用于各平台终端。
据官方的介绍,和lottie、SVGA等进行对比
文件更小
AE特性全面支持
矢量动画渲染性能更好一点,但是内存当然也会占用更多一点
还有(截止2023上半年)

缺点:SDK接入体积大,兼容性较差,需要wasm或asm.js的支持,在app端的SDK 部分主要分为两个版本,一个是社区版,免费,一个是企业版,要收费,差异性挺大的,社区版不支持音频播放等,具体可以看这里
演示pag-web的官方demo
数据格式
json5
json5是json文件的一种升级
他支持:
- 加注释
- key名不一定要使用双引号
- 支持使用转义字符
Linux一些常用命令
vi编辑命令:首先 vim 文件名 进入
- wq:表示保存退出
- wq!:表示强制保存退出
- q:表示退出
- q!:表示强制退出
问题记录
VIM编辑文件权限问题:”E45: ‘readonly’ option is set (add ! to override)”
使用 :w/:wq 保存的时候提示 “E45: ‘readonly’ option isset (add ! to override)”,而用 :w! 提示 “E212: Can’t open file forwriting”。
解决方案, :q! 强制关闭文件后,在命令行里输入:sudo !! 后回车再次vim打开文件编辑就正常了
方法来搜罗自网络,vi编辑正常,vim编辑遇到上面的问题,具体原因不详。
pwd:查看当前目录位置
ifconfig:查看网络信息
free -h:查看服务内存状况
df -lh:查看磁盘空间
mkdir 目录名:新建目录
which 包名:假如包安装在全局,通过这个命令可以查看包具体安装在哪个目录下
who:显示当前登录系统的用户
rm -f 文件名 删除⽂件
rmdir dir1 删除’dir1’⽬录
rm -rf dir1 删除’dir1’⽬录和其内容
cat 文件名 查看file1 内容
zip xxx.zip 文件名 把压缩成xxx.zip包
Mac一些命令
设置别名
open ~/.bash_profile
这里比如给chrome设置别名
alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
保存后执行
source ~/.bash_profile
什么是bash
bash是 the Bourne again shell 的缩写,而Bourne shell是一种最常见、UNIX最初使用的shell。shell是用户和Linux内核之间的接口程序
~/.bashrc是什么
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下)
~/.bash_profile是什么?
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
zshrc: mac默认的shell改了,现在是zsh了,装了oh-my-zsh之后,启动时会运行zshrc而不是上面两个文件。另外它和Login Shell与no-Login Shell都没有关系,不管什么shell都会运行。
Mac可以通过
echo $0
查看当前用的是zsh还是bash