202503
INFO
不知道能不能等到 2025 年新年到来 最终运气还是比较好的,等来了新年,等来了宝贝闺女的降临
在公司的第 78+36 = 44 个月 超过以往任何一家公司,太稳定了
0309
- 1369
- 量化算法
0312
- 1372
- Tecvan 文杰:我在新加坡当”数字难民”:生活成本暴涨 5 倍后的真实生存状态
- 声明式 UI 与命令式 UI 相对。命令式 UI 需要手动操作 DOM 或视图元素,而声明式 UI 则是通过描述 UI 应该呈现的状态,由框架负责更新。在 ArkTS 中,声明式 UI 是一种通过描述界面应该呈现的 最终状态(而非逐步操作)来构建用户界面的编程范式。其核心思想是 "数据驱动视图",开发者只需声明 UI 的组成结构和数据绑定关系,框架会自动处理视图的更新和渲染。
INFO
- 与命令式 UI 的本质区别 维度 声明式 UI (ArkTS) 传统命令式 UI (如 Android Java) 编程逻辑 描述"界面应该是什么样" 逐步指导"如何操作界面元素" 状态管理 自动跟踪数据变化并更新视图 手动维护状态与视图同步 代码结构 组件化结构,高内聚低耦合 常伴随大量 DOM 操作或视图引用更新代码 典型代码模式 if/else 控制组件显隐 findViewById().setVisibility()
0313
- 1373
- 半年评选绩效改成一个季度评选一次,对我来说,第一季度啥也没做成。有一种不安的感觉,会不会被干掉呢,哈哈哈
- 好不容易在这边站稳脚跟,现在又被安排到其他岗位去,晴天霹雳,只能被动安排。能不能坚持到明年,真的不好说。现在要做好被干掉的打算,老妈那个养老钱先暂停。
0314
- 1374
- 明天开始换组,重新做其他业务方向的项目,希望不要被干掉,目标是苟 1 年,苟到年底就算胜利。
- 是否是空对象?
function isEmptyObject(obj) {
return obj
? Object.keys(obj).length === 0 && obj.constructor === Object
: false
}
isEmptyObject({})
isEmptyObject(null)
- 根据图片比例展示固定宽高比还是左右横滑?
useEffect(() => {
const img = new Image()
img.src = 'url'
img.onload = () => {
const { width, height } = img
// 如果图片比例为 3.75 则固定宽高 不能横向滑动
if (width / height === 3.75) {
setFixed(true)
} else {
setFixed(false)
}
setUrl(url)
}
img.onerror = () => {
setFixed(false)
}
}
}, [url])
0316
- 1376
- 总结在上组的经验,本周务必完成,后续面试需要用到
0317
- 1377
- 熬过了恍恍惚惚的周末,迎来新的一周,这周要开始新的迭代需求开发,首先先站稳脚跟再说吧,加油加油加油
- 大数据列表使用虚拟列表无限滚动,如何实现,用代码举例
- 七行代码搞定无限滚动,JavaScript 性能优化大揭秘
- MCP 简介:从浏览器截图的自动化说起
INFO
什么是 MCP?Model Context Protocol,模型上下文协议 (MCP) 是由 Anthropic 公司推出的一个开放协议,它标准化了应用程序如何向大型语言模型 (LLM) 提供上下文和工具的方式。我们可以将 MCP 理解为 AI 应用的"USB-C 接口"——就像 USB-C 为各种设备提供了标准化的连接方式,MCP 为 AI 模型提供了与不同数据源和工具连接的标准化方式。简单来说,MCP 可以做到以下事情:
- 读取和写入本地文件
- 查询数据库
- 执行命令行操作
- 控制浏览器
- 与第三方 API 交互。
MCP 的架构相对简单,主要包含两个核心组件:
- 「MCP 服务器 (Server)」:提供工具和资源的服务端,可以使用任何编程语言实现,只要能够通过 stdout/stdin 或 HTTP 通信。
- 「MCP 客户端 (Client)」:使用 MCP 服务器提供的工具和资源的 AI 应用,如 Claude Desktop、Cursor 编辑器等。
MCP 服务器向客户端提供两种主要能力:
- 「工具 (Tools)」:可执行的函数,允许 AI 执行特定操作
- 「资源 (Resources)」:提供给 AI 的上下文信息,如文件内容、数据库结构等
0318
- 1378
- AI agent 是什么?AI Agent 中的 "Agent" 强调 自主智能体的行为特性,AI Agent ≈ 具备独立思考能力的数字员工
INFO
AI agent 是一种基于 AI 技术的智能体,它能够自主地执行任务,并根据环境的变化调整自己的行为。AI agent 通常由多个组件组成,包括感知模块、决策模块和执行模块。感知模块负责收集环境信息,决策模块根据环境信息做出决策,执行模块负责执行决策。
0319
- 1379
- 新版 cursor 如何调用 chat Tab 快捷键? 按下 Ctrl/⌘ + L(Windows/Mac 通用)即可立即唤出右侧 AI 窗格中的 Chat Tab。该功能继承自 0.47 版本对 UI 交互的优化,支持在编辑器任何界面快速切换焦点。Ctrl/⌘ + I 直接使用 Agent 模式
0320
- 1380,即将年满 1460,还剩不到 3 个月
- MCP (Model Context Protocol),一篇就够了。
- MCP/Ai Agent/Function Calling 三者区别?
INFO
Function Calling Function Calling 指的是 AI 模型根据上下文自动执行函数的机制。 Function Calling 充当了 AI 模型与外部系统之间的桥梁,不同的模型有不同的 Function Calling 实现,代码集成的方式也不一样。由不同的 AI 模型平台来定义和实现。
MCP MCP 是一个标准协议,如同电子设备的 Type C 协议(可以充电也可以传输数据),使 AI 模型能够与不同的 API 和数据源无缝交互。 MCP 旨在替换碎片化的 Agent 代码集成,从而使 AI 系统更可靠,更有效。通过建立通用标准,服务商可以基于协议来推出它们自己服务的 AI 能力,从而支持开发者更快地构建更强大的 AI 应用。开发者也不需要重复造轮子,通过开源项目可以建立强大的 AI Agent 生态。 MCP 可以在不同的应用/服务之间保持上下文,从而增强整体自主执行任务的能力
Agent AI Agent 是一个智能系统,它可以自主运行以实现特定目标。传统的 AI 聊天仅提供建议或者需要手动执行任务,AI Agent 则可以分析具体情况,做出决策,并自行采取行动。 AI Agent 可以利用 MCP 提供的功能描述来理解更多的上下文,并在各种平台/服务自动执行任务。
总结
MCP 将不同服务和平台的能力列表告诉 AI Agent,AI Agent 根据上下文和模型的推理,判断出是否需要调用某个服务,接着使用 Function Calling 执行函数,这个函数是通过 MCP 来告诉 Function Calling 的,最后通过 MCP 协议提供的具体代码来完成整个过程
0324
- 1384
- whistle 能抓包的核心点是什么?
INFO
浏览器的根证书校验,CA 机构不可能随便给一个中间人签发不属于它的域名证书,也就不在客户端的操作系统上了,因此只能把中间人的根证书,导入到客户端的操作系统了,以此完成建立加密通信时对中间人证书的验证.
如果黑客把自己的根证书安装在了你的计算机上,那么它就可以签发任意域名的虚假证书了,因此,遇到一些不可信的文件还是不要乱安装的好,保证根证书的安全。
- 手写简化版的 Promise
class MyPromise {
constructor(execute) {
this.value = undefined
this.cbs = []
const resolve = (val) => {
setTimeout(() => {
this.value = val
this.cbs.forEach((fn) => fn.call(this, val))
})
}
execute(resolve)
}
then(onFulfilled) {
return new MyPromise((resolve) => {
this.cbs.push(() => {
let val = onFulfilled(this.value)
if (val instanceof MyPromise) {
val.then(resolve)
} else {
resolve(val)
}
})
})
}
}
0325
- 1385
- 解释下代码输出
js代码
let [x = 1, y = 2] = [undefined, null]
console.log(x, y)
Details
这段代码的输出结果是 1 null。原因如下: 数组解构的默认值规则 在解构赋值中,默认值生效的条件是:当右侧数组中对应位置的值为 undefined 时,才会使用左侧的默认值。如果右侧的值是 null 或其他非 undefined 的值,则直接赋值,不会触发默认值。
具体分析
x=1:右侧数组的第一个元素是 undefined,满足默认值触发条件,因此 x 使用默认值 1。
y=2:右侧数组的第二个元素是 null,而 null 在 JavaScript 中被视为有效值(与 undefined 不严格相等),因此不会触发默认值,y 直接被赋值为回答超时,请稍后重试
0327
- 1387
- 每一天都很煎熬,在这里呆久了,同质化严重,没有任何欲望,人心麻木。
- 重拾前端信心,还不能服老。手写前端代码真的操蛋,全都忘记了
const sum1 = sum(1)
sum1(2) == 3 // true
sum1(3) == 4 // true
sum(1)(2)(3) == 6 // true
sum(5)(-1)(2) == 6 // true
function sum(num) {
return function temp(...rest) {
if (rest.length) {
return rest.reduce((a, b) => a + b, num)
} else {
return (...arg) => temp(...arg, ...rest)
}
// if (rest.length) {
// console.log(rest, "rest")
// return rest.reduce((a, b) => a + b, num)
// } else {
// return (...arg) => temp(...arg, ...rest)
// }
}
}
console.log(sum1(1)(2)(3))
0331
- 1391
- 整个世界就是个草台班子,我做的只需要做好手头上的事,得过且过,保重身体即可。争取早日还完贷款!!!