LLM 学习小记
大模型API的理解新旧API对比
老版API:text/completions
新版API:chat/completions
chat/completions的核心概念completions(补全)文本转换成模型可理解的符号(tokenization:文本 -> token -> token IDs),再对符号进行补全
role类型
System - 系统角色(人设)
User - 用户
Assistant - 对用户的回应
Tool - 工具:用以调用插件和函数
token特点
token 不等于单词或文字
不同语言token效率不同
不同模型分 ...
大文件分片上传
大文件分片上传
获取文件并进行分片,使用file.slice分为多个blob片段
Blob 分片转为 ArrayBuffer ,再使用 webWorker 多线程通过spark-md5算出分片 Hash
使用 Merkle 算法通过分片 Hash 计算出文件 Hash
向后端发送请求(fileHash 文件的hash值),询问文件上传状态
文件已经完整上传过了:上传完成(秒传)
文件存在但分片不完整:计算未上传分片序列并上传对应分片(断点续传)
文件不存在:将所有分片上传
将所有分片上传后,发送请求通知后端合并文件分片
0. 获取文件1234567const uploadHan ...
File、Blob、ArrayBuffer、Base64、DataURL
File、Blob、ArrayBuffer、Base64、DataURL0. 简单概念
二进制数据容器
Blob:表示不可变的原始二进制数据(如文件片段、流数据),是浏览器处理二进制的基础类型
File:继承自 Blob,扩展了文件名、类型等元信息,代表用户系统中的文件(如 <input type="file"> 上传的文件)
底层数据操作
ArrayBuffer:表示原始二进制缓冲区,需通过 TypedArray(如 Uint8Array)或 DataView 进行读写,用于直接操作内存中的二进制数据(如解析文件内容)
编码与传输格式
Base64:将 ...
优化 JavaScript 的乐趣与好处
摘抄一篇看到的性能优化博文,作者功底深厚,读完受益良多原文链接:https://romgrk.com/posts/optimizing-javascript原文作者:romgrk
我经常觉得一般的 javascript 代码运行起来比原来慢得多,原因很简单,就是没有进行适当的优化。以下是我发现的常用优化技术的总结。需要注意的是,性能与可读性之间的权衡往往是可读性,因此何时选择性能,何时选择可读性,这个问题留给读者自己去解决。我还想说的是,谈论优化必然需要谈论基准测试。如果一个函数一开始的运行时间只占实际总运行时间的一小部分,那么对该函数进行数小时的微优化以使其运行速度提高 100 倍是毫无 ...
Promise 手写实现
实现步骤
状态
成功回调
失败回调
执行器
then
在同步代码之后再执行:setTimeout 0
pending状态时不直接执行回调,而是压入回调数组,触发resolve或reject时执行
then 的链式调用
JS版本123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979 ...
移动端调试
安卓:Chrome
移动端在开发者选项中打开 USB 调试权限
使用数据线连接移动端和 PC 端
移动端 Chrome 浏览器中打开要调试的页面
PC 端打开 Chrome 浏览器,地址栏输入chrome://inspect
点击对应页面 inspect 进行调试 (PC 端需梯子)
ios:mac + Safari
打开 iPhone: 设置 > Safari > 高级 > Web 检查器
打开 Mac: Safari浏览器 > 偏好设置 > 高级 > 在菜单栏中显示“开发”菜单
用数据线连接你的 Mac 电脑和苹果手机,并选择信任设备
然后在手机的 S ...
Vue生命周期
Vue生命周期Vue实例需要经过创建、初始化数据、编译模板、挂载DOM、渲染、更新、渲染、卸载等一系列过程,这个过程就是Vue的生命周期,在Vue的整个生命周期中提供很多钩子函数在生命周期的不同时刻调用,Vue中提供的钩子函数有beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed。
示例在实例化Vue过程中,会直接触发的生命周期有beforeCreate、created、beforeMount、mounted,在数据更新的过程中触发的生命周期有beforeUpdate、upda ...
Vue父子组件生命周期
Vue父子组件生命周期Vue实例需要经过创建、初始化数据、编译模板、挂载DOM、渲染、更新、渲染、卸载等一系列过程,这个过程就是Vue的生命周期,Vue中提供的钩子函数有beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed,父子组件嵌套时,父组件和子组件各拥有各自独立的钩子函数。
描述创建过程创建过程主要涉及beforeCreate、created、beforeMount、mounted四个钩子函数。
1Parent beforeCreate -> Parent Crea ...
TCP与UDP异同
TCP与UDP异同TCP/IP模型的运输层有两个不同的协议:UDP用户数据报协议与TCP传输控制协议。
相同点
TCP与UDP都是运行在运输层的协议。
TCP与UDP的通信都需要开放端口。
不同点TCP
TCP是面向连接的协议,提供全双工通信,需要建立链接之后再传输数据,数据传输负载相对较大。
TCP提供可靠交付的服务,使用流量控制和拥塞控制等服务保证可靠通信。
TCP首部最小20字节,最大60字节,包括源端口、目的端口、序号、确认号、数据偏移、控制标志、窗口、校验和、紧急指针、选项等信息。
TCP只能是一对一通信。
TCP面向字节流通信。
TCP保证数据传输的顺序,通过给TCP连接中传送数 ...
Event对象
Event对象Event对象表示在DOM中出现的事件,在DOM中有许多不同类型的事件,其主要使用基于Event对象作为主接口的二次接口,Event对象本身包含适用于所有事件的属性和方法。
描述事件有很多类型,一些事件是由用户触发的,例如鼠标或键盘事件,而其他事件常由API生成,例如指示动画已经完成运行的事件,视频已被暂停等等,事件也可以通过脚本代码触发,例如对元素调用HTMLElement.click()方法,或者定义一些自定义事件,再使用EventTarget.dispatchEvent()方法将自定义事件派发往指定的目标target。一个元素可以绑定多个事件处理函数,甚至是同一种类型的事件 ...