20260612
有关扩容,假如在数据量到达阈值时直接开新的哈希表进行扩容,那不会导致那一次的 set 操作用时特别久吗?有什么方案能保证这次 set 不会超时吗?一次性全量迁移确实会造成单次 set 卡顿、超时,业界分「基础扩容」「渐进式扩容」「分片扩容」三类方案解决,以 Java HashMap、Go map、Redis 为例逐一说明。 一、先讲原生一次性扩容(问题根源)流程 元素数量达到负载因子阈值(容量 × 负载因子) 本次 put/set 触发扩容:新建2倍容量数组 一次性遍历原数组所有节点,重新计算哈希、迁移到新数组 本次操作结束 缺点 数据量越大,迁移耗时越长,单次请求阻塞,高并发/接口场景极易超时、毛刺严重。 线程不安全场景下还会引发并发死循环(Java JDK1.7 HashMap 经典问题)。 二、主流解决方案(按落地场景划分)方案1:渐进式扩容(增量迁移,最常用)核心思想:不把所有数据迁移压在一次操作里,拆分迁移工作量,分摊到后续每一次读写请求。代表实现:Java 8 HashMap、Go 内置 map、Redis 哈希结构。 执行流程 触发扩容:新建新数组,...
前端相关八股
特性 短轮询 长轮询 SSE WebSocket 通信方向 单向 (客户端拉) 单向 (客户端拉) 单向 (服务端推) 双向互发 底层协议 HTTP HTTP HTTP TCP(WS/WSS) 连接类型 短连接 挂起 HTTP HTTP 长连接 TCP 长连接 浏览器原生 API 无 (ajax/fetch) 无 (ajax) EventSource WebSocket 自动重连 需手动实现 需手动 内置自动重连 需手动 消息格式 任意 任意 固定 SSE 格式 任意 二进制数据 支持 支持 不友好 完美支持 适用场景 低频、简单拉取 准实时、简单通知 纯服务端推送 双向实时交互 借助 CSS resize 属性,浏览器原生支持右下角拖拽拉伸。通过鼠标按下状态结合 transform 可实现简易拖拽体验123456789101112131415161718192021222324252627282930313233<!DOCTYPE html><html lang="zh-CN"...
一些八股概念辨析
mcp与skill如果把mcp比作车子,那么skill就是如何骑车 Function Calling(函数调用) 是大模型的一项能力,指大语言模型根据用户提问,主动识别意图、选择并调用外部工具 / 预设函数,把自然语言指令转为结构化函数调用请求,执行后再整合结果返回给用户。Function Calling 是底层通信能力 / 协议,Skill 是上层封装的业务能力 / 功能集合,二者是「实现方式」和「业务载体」的关系。1. Function Calling(函数调用 / 工具调用)本质:技术协议、调用机制作用:让大模型按约定格式(JSON)输出函数名 + 参数,对接外部代码 / 接口,是通用底层能力。粒度:最小执行单元 = 单个函数 / 接口。范围:纯技术层,和业务无关,所有模型 / 框架通用。 2. Skill(技能)本质:面向用户的业务功能、能力包作用:给用户提供完整服务,是产品 / 业务层面的抽象。粒度:一个 Skill 可包含多个函数、多轮调用、逻辑编排。范围:业务层,平台 ...
Agent开发相关八股
RAG召回常见问题。 一、RAG召回最常遇到的6类问题1. 语义不匹配(最常见)用户提问是自然语言,库中文档是关键词/专业表述,字面不匹配、语义匹配,导致召回不到正确文档。例: 用户问:“电脑连不上网怎么办” 库中是:“以太网连接故障排查”→ 传统关键词检索完全搜不到。 2. 召回噪声大(无关内容多)召回了一堆不相关的片段,大模型被干扰,回答跑偏、 hallucination(幻觉)。 3. 召回不完整(漏关键信息)长文档被切分后,上下文断裂,只召回碎片,缺关键前提/结论。 4. 向量漂移/过时文档更新后向量没重算,旧向量和新内容不匹配;高频更新场景尤其严重。 5. 检索速度慢数据量大(10w+文档)时,暴力检索/全量相似度计算耗时高。 6. 多路召回融合差同时用关键词+向量+规则召回,结果权重混乱,最终质量不稳定。 二、Go 语言如何处理这些问题Go 适合做 RAG 召回层:高性能、并发强、内存占用低,非常适合企业级服务。 问题1:语义不匹配Go 解决方案:使用嵌入模型(Embedding)生成向量,用向量数据库做相似度检索。 ...
简历相关八股复习
异步链路同步链路用户请求 → 应用 → Redis (改) → MySQL (同步改,阻塞) → 返回异步链路用户请求 → 应用 → Redis (改) → MQ (发消息) → 立即返回 ↓ 消费服务 → MySQL (异步落库)本质削峰填谷 需注意的风险缓存与数据库短暂不一致:Redis 已更新,DB 还没消费完成,短时间查 DB 是旧数据(业务要容忍)消息队列丢消息 → 缓存和 DB 永久不一致(需做消息重试、死信队列、对账补偿)Redis 宕机 → 热点数据丢失(要开 RDB/AOF 持久化) NIST FF1 格式保留加密(FPE) 对趋势递增 ID 进行可逆混淆123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081package mainimport ( "...
go底层相关八股复习
特性 聚合 (Aggregation) 组合 (Composition) 菱形 空心 ◇ 实心 ◆ 强度 弱拥有 强拥有 生命周期 部分独立 部分与整体同生共死 共享性 部分可被多个整体共享 部分仅属于一个整体 典型例子 班级 - 学生、汽车 - 轮胎 人 - 心脏、订单 - 订单项、房子 - 房间 pk代表主键 fk代表外键 map 必须初始化才能用,零值是 nil,直接赋值会 panicvar m map[string]int // nil mapm[“a”] = 1 // panic: assignment to nil map m := make(map[string]int)m[“a”] = 1 // 正常 判断 key 是否存在,不能直接用值_, ok := m[“a”]if ok { // 存在} else { // 不存在} 123v := m["key"]if ...
计算机网络相关八股复习
采集插件需要增量采集,避免重复抓取、重复入库、浪费性能,你在 Go 里怎么做去重?Redis Bitmap/ 布隆过滤器 对比项 Redis Set Redis Bitmap 布隆过滤器 (本地 / RedisBloom) 准确性 100% 精准,无误判 100% 精准,无误判 概率型:不存在 = 一定不存在,存在 = 可能误判,误判率可控 (0.01%~1%) 存储数据 完整存原始字符串 (URL / 字符串) 只能存数字下标(偏移量),无法直接存字符串 不存原始数据,多次 hash 映射 bit 位,只存标记位 内存开销 极大,单条 URL≈40~60Byte;1000 万 URL≈500MB+ 稠密数据极省:1 亿 bit≈12MB;稀疏数据巨浪费(下标离散空出大量 bit) 极致节省:100 万数据、0.01% 误判≈2.3MB,单元素仅十几 bit,是 Set 的 1/200 左右 增删能力 支持新增、删除、随机剔除成员 支持 SETBIT/GETBIT/DEL,单个...
Go网页抓取,爬虫相关复习
获取网页内容1234567891011121314151617181920212223242526272829303132package mainimport ( "fmt" "io" "net/http")func main() { // 目标网址 url := "https://httpbin.org/get" // 发送 GET 请求 resp, err := http.Get(url) if err != nil { fmt.Println("请求失败:", err) return } // 必须关闭响应体,防止内存泄漏 defer resp.Body.Close() // 读取响应内容 body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println("读取内容失败:", err) return } // 输出网页内容 fmt.Prin...
Go底层八股笔记
Go 原生 map 不是并发安全的,多协程同时读写会panic: concurrent map read/write。 解决方法 互斥锁1234567891011121314151617181920212223242526package mainimport "sync"func main() { var mu sync.Mutex m := make(map[int]int) go func() { for i := 0; i < 10000; i++ { mu.Lock() // 加锁 m[i] = i mu.Unlock() // 解锁 } }() go func() { for i := 0; i < 10000; i++ { mu.Lock() _ = m[i] mu.Unlock() } }() select {}} 读写锁1234567891011var mu sync....
260515笔记
vue3项目依赖关系index.html ↓main.js(入口文件) ↓App.vue(根组件) ↓各种页面组件 / 子组件(Home.vue、About.vue 等) NAT家里 / 公司路由器就是NAT:内网设备(手机 / 电脑)用私网 IP,访问外网时,NAT 会给你分配一个公网 IP + 端口做映射,外网只能看到这个公网映射,看不到你内网真实 IP。 切片切片底层不是数组而是带数组的结构体type slice struct { array unsafe.Pointer // 指向底层数组的指针 len int // 长度:当前元素个数 cap int // 容量:底层数组总可存元素个数}扩容规则原容量 < 1024:容量翻倍原容量 ≥ 1024:每次增长 1/4









