2026-02-06
后端技术
00

二叉搜索树删除节点实现

二叉搜索树(左子树比根节点小,右子树比根节点大) 里面查找并删除一个值和节点, 删除后保持搜索树结构,返回树的跟节点,假定树节点的值不重复

golang实现

js
type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func deleteNode(root *TreeNode, key int) *TreeNode { if root == nil { return nil } if key < root.Val { root.Left = deleteNode(root.Left, key) } else if key > root.Val { root.Right = deleteNode(root.Right, key) } else { // 找到要删除的节点 if root.Left == nil { return root.Right } if root.Right == nil { return root.Left } // 左右子树都存在:找右子树最小节点 minNode := root.Right for minNode.Left != nil { minNode = minNode.Left } root.Val = minNode.Val root.Right = deleteNode(root.Right, minNode.Val) } return root }
2026-01-28
后端技术
00

每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0] 示例 2:

输入: temperatures = [30,40,50,60] 输出: [1,1,1,0] 示例 3:

输入: temperatures = [30,60,90] 输出: [1,1,0]

js
func dailyTemperatures(temperatures []int) []int { n := len(temperatures) res := make([]int, n) stack := []int{} // 存下标 for i := 0; i < n; i++ { for len(stack) > 0 && temperatures[i] > temperatures[stack[len(stack)-1]] { prev := stack[len(stack)-1] stack = stack[:len(stack)-1] res[prev] = i - prev } stack = append(stack, i) } return res }
2026-01-23
ai 学习
00

ai概念学习

对于程序员来说,掌握ai相关的知识是现在以及未来必须具备的能力,所以先要掌握ai的相关概念

总览

LLM 是大脑,Prompt 是说明书,Context / Memory 是它记住的事

Agent 是会自己干活的 AI,Skill 是工具

Workflow / LangChain / MCP 是把这些东西组织起来的“系统”。

RAG (发音为软安哥)

  • 概念:Retrieval-Augmented Generation(检索增强生成)
  • 什么是RAG:
    • 一种结合 检索(Retrieval) 和 生成(Generation) 的自然语言处理技术。
    • 先从知识库或文档库中检索相关信息,再基于这些信息生成回答或文本。
    • 解决纯生成模型可能“凭空编造”(hallucination)问题,提高回答准确度。
  • 解决什么问题
    • 用来解决:模型不知道 / 不准 / 不能瞎编

MCP 模型上下文协议(Model Context Protocol)

  • 概念:一个统一的通用协议,给 AI 接工具的“统一插头”
    • 工具怎么描述
    • 参数怎么传
    • 返回结果怎么给模型
  • MCP 是标准,Skill 是具体工具

Function Calling

  • 概念: AI 调用程序函数的能力
  • AI 不自己算,而是叫程序来算

skill

  • 对于小白来说,可以先理解为skill是大模型可以动态调用的工作流(区别n8n:n8n是一开始就定义好的workflow)
2026-01-23
后端技术
00

相关信息

算法题实现

题目一

  • 给定一个旋转的有序数组,比如{7,8,9,10,1,2,3} // 是{1,2,3,7,8,9,10}旋转之后得到的, // 在数组中查找是否存在元素key。假定数组中不存在重复元素。 golang进行实现
2026-01-15
网络协议
00

相关信息

本章节主要学习长连接、短连接、web_socket的区别

  • 短连接
    • 模式:建立连接 -> 发送数据 -> 关闭连接。
    • 背景:早期的 HTTP/1.0。每请求一个网页上的图片或 CSS,都要经历一次 TCP 三次握手和四次挥手。
    • 缺点:开销极大。频繁地创建和销毁连接非常耗费 CPU 和内存资源。
  • 长连接
    • 模式:建立连接 -> 发送数据 -> 保持连接 -> 发送数据 -> ... -> 关闭连接。
    • 背景:HTTP/1.1 默认开启。在 HTTP Header 中加入 Connection: keep-alive。
    • 特点:
      • 复用:同一个 TCP 连接可以发送多个 HTTP 请求。
      • 半双工:虽然连接没断,但依然是“请求-响应”模式。必须客户端先问,服务端才能答。
      • 阻塞:前面的请求没处理完,后面的请求就得排队(Head-of-line blocking)
  • WebSocket (全双工长连接)
    • 模式:HTTP 握手升级 -> 建立持久 TCP 连接 -> 双向实时传输。
    • 背景:为了解决“服务端主动推送到客户端”的问题(如聊天、实时股票)。
    • 特点:
      • 全双工:客户端和服务器可以同时给对方发消息,不需要等对方回应。
      • 协议升级:它开始时借用 HTTP 的 80/443 端口进行握手,握手成功后就“脱离” HTTP,转为 WebSocket 协议。
      • 轻量:数据头非常小,适合频繁发送短消息。