Skip to content

202503

INFO

不知道能不能等到 2025 年新年到来 最终运气还是比较好的,等来了新年,等来了宝贝闺女的降临

在公司的第 78+36 = 44 个月 超过以往任何一家公司,太稳定了

0309

  • 1369
  • 量化算法

0312

  • 1372
  • Tecvan 文杰:我在新加坡当”数字难民”:生活成本暴涨 5 倍后的真实生存状态
  • 声明式 UI 与命令式 UI 相对。命令式 UI 需要手动操作 DOM 或视图元素,而声明式 UI 则是通过描述 UI 应该呈现的状态,由框架负责更新。在 ArkTS 中,声明式 UI 是一种通过描述界面应该呈现的 最终状态(而非逐步操作)来构建用户界面的编程范式。其核心思想是 "数据驱动视图",开发者只需声明 UI 的组成结构和数据绑定关系,框架会自动处理视图的更新和渲染。

INFO

  1. 与命令式 UI 的本质区别 维度 声明式 UI (ArkTS) 传统命令式 UI (如 Android Java) 编程逻辑 描述"界面应该是什么样" 逐步指导"如何操作界面元素" 状态管理 自动跟踪数据变化并更新视图 手动维护状态与视图同步 代码结构 组件化结构,高内聚低耦合 常伴随大量 DOM 操作或视图引用更新代码 典型代码模式 if/else 控制组件显隐 findViewById().setVisibility()

0313

  • 1373
  • 半年评选绩效改成一个季度评选一次,对我来说,第一季度啥也没做成。有一种不安的感觉,会不会被干掉呢,哈哈哈
  • 好不容易在这边站稳脚跟,现在又被安排到其他岗位去,晴天霹雳,只能被动安排。能不能坚持到明年,真的不好说。现在要做好被干掉的打算,老妈那个养老钱先暂停。

0314

  • 1374
  • 明天开始换组,重新做其他业务方向的项目,希望不要被干掉,目标是苟 1 年,苟到年底就算胜利。
  • 是否是空对象?
js
function isEmptyObject(obj) {
  return obj
    ? Object.keys(obj).length === 0 && obj.constructor === Object
    : false
}
isEmptyObject({})
isEmptyObject(null)
  • 根据图片比例展示固定宽高比还是左右横滑?
js
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

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

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
js
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
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
  • 每一天都很煎熬,在这里呆久了,同质化严重,没有任何欲望,人心麻木。
  • 重拾前端信心,还不能服老。手写前端代码真的操蛋,全都忘记了
js
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
  • 整个世界就是个草台班子,我做的只需要做好手头上的事,得过且过,保重身体即可。争取早日还完贷款!!!