数学
一、逻辑与命题基础 命题(Proposition) 能判断真假的语句 例:所有学生都及格 → 真或假 量词(Quantifiers) 全称量词 ∀:表示“所有元素满足某条件” 存在量词 ∃:表示“至少有一个元素满足” 组合量词:多层嵌套 ∀、∃ ∀学生 ∃课程 学生及格 → 每个学生至少有一个及格课程 ∃课程 ∀学生 学生及格 → 存在一个课程,所有学生都及格 命题证明思路 全称命题:任意取一个元素,证明成立 存在命题:构造具体例子或找反例 二、集合与函数 集合表示关系 用集合表示元素及其关系 例:学生集合 S、课程集合 C 函数表示结构 函数 f: S×C → 分数,表示学生课程及格情况 函数本质是输入→输出规则 三、整数与数论基础 奇偶性(整数分类) 偶数:n = 2k 能被 2 整除 偶+偶=偶,偶×整数=偶 奇数:n = 2k+1 不能被 2 整除 奇+奇=偶,奇×奇=奇 平方性质:偶²=偶,奇²=奇 互质(Coprime) 两个...
OpenClaw 的一些内容拆解
整体的架构是什么OpenClaw 是一个 智能体网关,内置了一个 基于 pi-mono 的智能体框架。它作为一个服务器,提供了多平台消息渠道的支持(例如飞书、WhatsApp 等),用户可以通过不同的客户端,通过这些消息渠道来访问和交互 OpenClaw 服务。 节点(Node)和代理(Agent) 节点(Node) 是一些 声明自己具备特定功能 的客户端。例如,一个客户端可以声明自己具备发送 WhatsApp 消息的能力,或者控制摄像头、获取位置信息等。这些客户端被称为“节点”。 代理(Agent) 是一个中介工具,用来执行任务。代理通过与 OpenClaw 网关通信, 调度节点 完成特定操作。比如,当用户通过飞书发送“给 WhatsApp 发送消息”的请求时,OpenClaw 网关会启动一个代理,通过节点来实现这个操作(即通过已声明具备发送 WhatsApp 消息能力的节点来发送消息)。 代理的作用就是 协调和管理 节点的任务,确保正确执行用户的请求,能够把消息从飞书传送到 WhatsApp 等平台。 pi-mono 智能体框架pi-mono 是一个 智能体管理框架,它...
Work中操作dom的办法之 partytown
Partytown 的实现原理非常“硬核”,它解决了一个前端开发的经典难题:Web Worker 无法访问 DOM。 简单来说,Partytown 就像是在主线程(Main Thread)和后台线程(Web Worker)之间架设了一座同步通信桥梁。 1. 核心矛盾:Worker 的隔离在浏览器中,所有的 DOM(按钮、图片、Window 对象)都只存在于主线程。第三方脚本(如 GTM)需要读写 DOM 才能工作。但 Web Worker 为了性能,被设计为无法直接接触 DOM。 2. Partytown 的三层架构第一步:拦截 (Proxy)Partytown 在 Worker 线程中创建了一套 JavaScript Proxy(代理对象)。当第三方脚本尝试在 Worker 里运行 document.title = "Hello" 时,它访问的其实不是真正的 document,而是一个 Partytown 模拟出来的代理对象。 第二步:同步阻塞通信 (Synchronous Communication)这是 Partytown 最神奇的地方。通常 Work...
webpack
1. 名词解释1.1 entry入口文件,webpack 打包的起始文件,可以是单个文件,也可以是多个文件 1.2 output告诉webpack输出文件的位置,以及怎么命名 1.3 loaderwebpack只能处理js 或者json,通过loader webpack可以处理其他的文件。比如css这种写在module.rules中 test属性描述处理类型的文件,use属性描述使用的loader,从右到左执行 1.4 plugin应该是添加插件的实例对象,放在plugins数组中 1.5 modemode用于设置webpack的运行模式,可以是development或者production或者none 1.6 补充 webpack打包出来的文件默认是es5的,但是你如果用了promise等es6的语法,那么就需要添加polyfill(补丁),但是webpack 并没有提供转换代码的能力,是需要你手动提供plugin或者loader来实现 Webpack 能打包,但不会帮你补 Promise;你用了动态 import,就必须自己给老浏览器补 Promise,否则会直接炸 2. ...
UI/UX 设计核心原则与规范笔记
一、 核心设计心理学(灵魂)设计原则决定了产品是否“好用”且“符合直觉”。 尼尔森十大启发式原则 (Nielsen’s Heuristics): 核心:状态可见性、系统与现实匹配、用户控制权、防错原则、一致性。 希克定律 (Hick’s Law): 内容:面临的选择越多,决策时间越长。 应用:简化导航,减少非必要选项。 菲茨定律 (Fitts’s Law): 内容:目标越大、距离越近,操作越容易。 应用:关键操作按钮(如“确认”)要足够大且易于触达。 格式塔原理 (Gestalt Principles): 内容:大脑倾向于将接近、相似的元素视为一组。 二、 布局物理标准(骨架)这是保证界面“工整”和“可适配”的硬性数学规则。 1. 8px 原则 (Vertical Rhythm) 规则:所有间距 (Margin/Padding)、组件高度、图标大小均应为 8 的倍数(如 8, 16, 24, 32, 48)。 原因: 适配性:绝大多数屏幕分辨率都能整除 8。 节奏感:建立统一的垂直律动,消除视觉混乱。 开发友好:程序员可直接使用步长变量进行...
Web Streams 笔记
一、 顶层架构:浏览器作为“大管家”在 Web Streams 的世界里,浏览器引擎(如 Chrome 的 V8/Blink)是最高统治者。你写的代码只是向浏览器注册了三个插件(Hooks)。 控制权反向:你从不主动调用 pull 或 write,是浏览器根据水位线和下游需求来回拨动这些开关。 节奏大师:浏览器通过控制 Promise 的 pending 和 resolved 状态,精细地掐住了每一片数据的流动速度。 二、 三大 API:标准化插件接口1. ReadableStream (生产插件) 本质:定义“数据从哪来”以及“怎么拿”。 API 核心: 12345678910const reader = new ReadableStream( { // 【钩子】:当浏览器发现内部队列空了,且下游张嘴要货时,主动调你 async pull(controller) { const data = await getRawData(); controller.enqueue(data); // 把货交给浏览器的“...
发布订阅模式
1. 核心定义 本质:一种消息通信范式,通过引入一个“中间人”角色,使发布者 (Publisher) 和 订阅者 (Subscriber) 彻底解耦。 口诀:发布者只管发,订阅者只管听,中间人管名单和分发。 2. 三大核心角色 发布者 (a方法):触发事件的角色。它不需要知道谁订阅了它,只需向中间人“呼喊”一声。 订阅者 (b, c方法):接收消息的角色。它向中间人注册一个回调函数,静候通知。 中间人 (Broker/Event Bus):最关键的角色。 职责一:提供 subscribe 接口,维护一个**“主题 -> 回调数组”**的档案柜。 职责二:提供 publish 接口,当事件发生时,翻阅档案,依次执行对应的回调列表。 3. 为什么需要它?(模式的目的) 空间解耦:A 和 B 互不认识,修改 A 不影响 B。 时间解耦:在高级实现中,发布者发完就走,订阅者可以异步处理(不用死等)。 逻辑清晰:把“业务逻辑”和“善后逻辑”拆分。比如:订票逻辑(主) vs 发短信、扣积分(副)。 4. 实现的技术细节(底层原理) 存储机制:通常在中间人内部维护一个 M...
服务器程序处理请求的底层原理与并发模型
一、 服务器启动时,操作系统在做什么?服务器程序启动,监听一个端口(如 3000),操作系统在内核中为该端口分配一个 socket 缓冲区(接收队列 + 发送队列)。这个缓冲区由内核维护,程序无法直接操作,只能通过系统调用(read/write)与它交互。 类比:socket 缓冲区像一个“信箱”。发件人(客户端)把信放进去,收件人(服务器程序)从里面取信。信箱由邮局(操作系统)管理,收件人不能直接碰信箱内部,只能通过“取信窗口”(系统调用)拿信。 二、 请求到达后,操作系统与程序如何协作?完整流程(以 Node.js 事件循环为例): 步骤 谁在做 具体动作 ① 数据到达 网卡 + 操作系统 TCP 数据包到达网卡,内核协议栈校验、重组,将数据拷贝到该 socket 的接收缓冲区。 ② 标记可读 操作系统内核 内核将对应的 socket 文件描述符(fd)标记为“可读(readable)”。 ③ 通知/唤醒 操作系统 → 用户程序 程序通过 epoll_wait(事件循环) 主动询问内核:“哪些 fd 可读了?” 内核返回可读的 fd 列表,程...
生产者消费者模式
《生产者-消费者模式》终极完全版笔记(含背压、超时与生产级防护)一、 一句话穿透本质生产者只负责“受理业务”(丢进筐),不负责“办理业务”(不等结果);消费者只负责“办理业务”(从筐里拿),不关心是谁丢的。两者通过“队列(缓冲区)”和“任务ID(漂流瓶)”进行彻底解耦,实现异步削峰填谷。 二、 底层运行原理(阻塞与唤醒机制)这是整个模式能跑起来的“物理定律”。绝对不能靠“死循环”去轮询(那会把CPU烧干),必须依靠操作系统的**“等待-通知”机制**。 场景 Java(多线程)的底层做法 Node.js(单线程异步)的底层做法 本质共性 ① 队列为空时(消费者没活干) 线程调用 wait(),操作系统挂起线程(移出CPU队列),CPU占用为0。 执行 await 一个 pending 的 Promise,主线程交还给事件循环,去处理其他HTTP请求。 都让出了CPU,绝不空转消耗资源。 ② 有任务到达时(生产者派活) 调用 notify(),操作系统唤醒消费者线程。 执行存好的 resolve() 函数,Promise 状态变更,消费者被唤醒。 精准唤醒,没有浪...