AI 相关问题
1️⃣ 日常是怎么使用 AI 的? 结论: 日常使用 AI 更多是把它当成辅助工具,而不是直接替我完成开发。 举例: 比如看不熟悉的库时,我会让它先帮我梳理接口使用方式; 写代码前,也会让它给一个大致思路或伪代码,然后我自己再结合项目约束重写。 如果是 C++ 代码,我会特别注意 生命周期、边界条件、线程安全、异常路径 这些问题,因为 AI 生成的代码经常在这些地方比较粗糙。 所以我更倾向于用 AI 提高检索和理解效率,但最终代码还是要自己 review、编译、测试和压测。 1️⃣ 你认为 AI 目前有什么问题? 结论: AI 最大的问题是它经常给出 “看起来很合理” 的答案,但不一定真的正确。 举例: 尤其是 C++、操作系统、网络编程这类问题,如果涉及内存模型、并发、系统调用,它可能会忽略很多细节。 另外 AI 对上下文依赖比较强,如果需求描述不清楚,它可能会补全出一个错误假设,然后沿着错误假设继续生成。 还有一个问题是它不理解真实线上环境,比如性能瓶颈、历史包袱、团队规范、异常数据和兼容性,这些都需要开发者自己判断。 1️⃣ 你会如何解决 AI...
AI 八股
Agent 面试篇1️⃣ 什么是 Agent?与传统大模型的区别?传统大模型 : 本质上是个 「问答机器」,你给它一个输入,它给你一个输出,然后就结束了。就算是多轮对话,它也只是在当前上下文里被动响应你,它不会主动去做任何事,也不知道自己上一步做了什么、下一步该做什么。 缺点: 知识冻结: 模型的训练数据有截止日期,它没有任何途径去获取实时信息; 不能行动: 传统大模型本质上是文本输出其,所有输出都是一段文字,无法帮用户去调用工具; 对话失忆: 传统大模型没有持续性状态,每次调用之间它是完全失忆的 Agent : 本质上是个 「运作闭环」:感知 -> 规划 -> 行动 -> 再感知。 感知: 获取当前环境、用户输入、工具返回结果、系统状态等信息。 规划: 基于目标和当前状态,判断下一步该做什么。 行动: 执行操作,比如调用工具、写代码、发请求、修改文件、回复用户。 再感知: 观察行动后的结果,再决定是否继续、修正或结束。 关键特性: 工具调用 记忆机制 自我纠错 2️⃣ Agent...
ucontext 底层实现原理
1️⃣ 概述:从”上下文切换“ 到 ”用户态线程“ 最近在开发服务器相关项目时,接触到了 协程(Coroutine) 这个概念。协程在高并发服务器、网络框架、异步编程中都很常见,而在 Linux 平台上,很多早期的用户态协程实现都与 ucontext 这组 API 有关。 虽然在项目里经常使用 ucontext,但一直没有系统地理解过: 到底解决了什么问题? 它和线程有什么区别? 它又是如何在底层完成 “切换执行流” 的? 所以就想借这个机会,对 ucontext 的原理做一次梳理。这篇文章不会从业务层面讨论 “协程框架怎么设计”,而是聚焦于一个更底层的问题: ucontext 到底是如何实现用户态上下文切换的? 在进入正式主题之前,先不急着看 API 或源码,因为如果一开始就直接面对 getcontext、makecontext、swapcontext 这些接口,很容易只记住 “怎么用”,却不明白...
Linux 代理问题
Linux 下排查与修复 Mihomo 网络代理环境问题背景在 Linux 服务器上,mihomo 服务已经启动,但访问部分外网服务时出现超时,日志中有类似报错: 1[TCP] dial PROXY ... --> chat.openai.com:443 error: connect failed: ... i/o timeout 同时也出现过对元数据地址的超时: 1169.254.169.254:80 error: connect failed: ... i/o timeout 解决办法第一步:确认 Mihomo 服务本身是否正常 先检查服务状态: 1systemctl status mihomo -l --no-pager 结论: mihomo 服务状态为 active (running); 说明服务本身没有挂掉; 问题更可能出在 规则配置 或 代理节点 选择; 第二步:定位第一类问题元数据地址 169.254.169.254 被错误走代理 日志里出现: 1[TCP] dial PROXY ... --> 169.254.169.254:80...
服务器故障排查
服务器故障排查1️⃣ 负载检查(uptime) 定义: CPU 负载(cpu load)指的是单位时间内进程对系统产生的压力(单位时间内运行队列中的平均进程数) 如果一个进程满足以下条件则其就会位于运行队列中: 可运行状态 R: 正在执行或者已经就绪的进程; 不可中断睡眠状态 D: 等待磁盘 IO、网络设备 IO 的进程; 下列进程不满足条件: 可中断睡眠 S : 比如在 sleep(),或者阻塞等普通事件; 僵尸进程 Z: 当前进程已经结束,但是父进程没有等待子进程; 暂停进程 T: 当前进程被暂停了,比如接收到了 Ctrl + C 或者 GDB 命令: uptime 123$ uptime// 1m 5m 15m20:15:03 up 10 days, 3:42, 2 users, load average: 0.15, 0.20, 0.18 load average :在单位时间内,有多少个进程在占用或者等待系统资源; 2️⃣ 内核日志检查(dmesg) 定义: 查看 Linux...
内存泄漏
内存泄露1️⃣ 什么是内存泄漏? 在 C++ 中,内存泄漏 指的是程序通过 new、malloc 等方式向 堆区 申请了内存,却在不再需要时 没有及时释放,或者由于 指针丢失、异常中断、所有权管理混乱 等原因,导致这块内存再也无法被程序有效访问和回收。 2️⃣ 内存泄漏的危害 性能退化: 泄漏内存会持续占用物理内存,当物理内存不足时,系统会启用 swap 分区,磁盘 IO 速度远低于内存,导致程序响应变慢、CPU 等待时间增加。 程序崩溃: 泄漏内存耗尽系统可用内存(包括 swap)时,操作系统会触发 “内存溢出(OOM)”,强制终止占用内存最多的进程。 资源耗尽: 对于长期运行的服务(如服务器程序),泄漏会持续累积,可能导致服务在运行一段时间后突然宕机,且难以复现根因。 3️⃣ 内存泄漏的分类 对于 Valgrind 来说,其主要将 内存泄漏 分为四类: Definitely Lost: 定义: 没有指针 p 可以指向一块已经分配的堆内存,100% 确定为泄漏; Indirectly Lost: 定义:...
服务器性能提升
1️⃣ 如何提升服务器的性能 QPS造成性能缺失的模块? 日志模块 锁竞争 内存分配 日志模块目前存在的问题: 每个请求 INFO 一次,都会导致每次日志都直接 落盘; 多线程会频繁抢一个 logger 锁; 日志里频繁拼接大字符串、格式化时间; 优化思路: worker 线程启动时先将 日志器 注册到 异步日志线程 中; worker 再将日志写入自己的 环形缓冲区 队列中; 异步日志线程将缓冲区的内容进行 批量刷盘; 锁竞争目前存在的问题: 使用的是 全局队列,每个线程都会去 抢任务,导致 锁竞争; schedule 一个任务,要抢锁; 全局队列 取一个任务,要抢锁; 多线程一起调度,更抢锁; 优化思路: 执行思路: 每个工作线程优先执行自己的本地 ready queue; 本地队列 空了,再去 全局队列 拿; 全局队列 也空了,再去偷别的线程的任务; 调度思路: 当前线程产生且没有强制绑定的任务,优先放到当前线程 local queue; 强制指定对应线程执行的任务,放到对应线程的 local queue; 没有归属或外部线程丢任务,放到...
服务器压力测试
服务器压力测试测试机(云服务器) 配置:CPU(4 核 )、内存(8GB) 安全组:允许所有 ip,连接服务器固定端口 port CPU 利用率: 总利用率:200% 单 CPU 利用率:50% 发家机(本地主机) 测试工具:Jmeter 配置:CPU(6 核)、内存(16GB) 测试选项 ThreadGroup 线程数:表示启动多少个用户; Ramp-Up:启动所有线程的时间; 循环次数:每个用户执行多少次配置的请求; 调度器:所有线程都到达后,持续的时间; HTTP 属性: 方法:Get 地址:8.137.169.217:8081 URL:/sylar/xx 和 / 连接超时:3s 响应超时:10s 阶段测试 协程服务器 打开日志 1000 线程 2000 线程 5000 线程 10000 线程 关日志 1000 线程 2000 线程 muduo 网络库 1000 线程 思路解析针对 开日志 的情况下: 1000 线程的吞吐量大概是 2700/sec,平均响应时间是 301 ms,错误率是...
csig_腾讯云(一面)
面经C++ 八股 继承和多态这种面向对象的设计?(把共同点抽出来复用,把不同点留给子类自己实现) 多态解决了什么问题,C++ 为什么要使用多态? 多态:主要用于对同一个接口,进行不同的实现; C++ 使用多态主要是解决代码复用; 不用继承,多态的这种设计应该怎么做呢? 静态多态:模板、函数重载、工厂函数 多态的虚函数可以是内联函数嘛? 虚函数可以是内联函数,类内定义的成员函数默认就有 inline 属性,在语法上完全没问题; “能声明成 inline” 和 “调用时真的被内联展开” 不是一回事。 inline 本质上只是给编译器一个建议 虚函数在通过 父类指针/引用调用时,是 运行时动态绑定,编译器在 编译阶段 通常不知道最终会调用哪个版本,所以一般不能直接内联; 纯虚函数是干嘛的? 这个行为必须有,但父类没法给出通用实现; 纯虚函数不可以被实例化; 强制子类实现接口,子类没有实现父类的纯虚函数,那子类自己也还是抽象类。 STL 了解吧,一起讲 map 和 unordered_map map 底层使用 红黑树; 按 key...
