Golang 面试进阶指南:从 GMP 到 pprof,一份面向中高级岗位的系统复习手册

Golang 面试进阶指南:从 GMP 到 pprof,一份面向中高级岗位的系统复习手册如果你已经写过一两年 Go,会用 goroutine、channel,也能把一个 HTTP 服务跑起来,那么在准备中高级岗位面试时,大概率会发现:面试官问的已经不是“goroutine 怎么启动”,而是“一个阻塞的系统调用发生时,调度器会做什么”“nil 的 error 为什么不等于 nil”“线上 goroutine 数量一直涨,你怎么定位” 这类问题考察的不是背诵,而是你对运行时机制的理解,以及把机制翻译成工程判断的能力 这篇文章是一份按主题组织的复习手册 每个主题基本遵循同一个结构:典型面试题 → 参考回答思路 → 常见陷阱 → 简短的代码 内容覆盖调度器、goroutine 生命周期、channel、sync 原语、context、内存模型、GC 与逃逸分析、slice 与 map、interface、defer/panic/recover、泛型、错误处理、反射、并发模式、性能调优、工程实践,最后补充系统设计与行为面试的建议、速答表、学习路线和 FAQ
Golang 面试进阶指南:从 GMP 到 pprof,一份面向中高级岗位的系统复习手册2026-10-14鱼鱼

网络时延、异步IO、Pipeline

网络时延、异步IO、Pipeline通过使用多线程是能提高网络延迟带来的负面效应的,也就是在IO密集型的应用中(尤其是网络IO密集应用中),通过异步操作或能显著提高性能,本篇讨论相关问题 并不是异步(多线程)定能提高性能,有这种讨论也是发现经常有人会滥用多线程 通常会有一种说法:如果想要采用多线程的来执行一段任务,为了提高性能,假设服务器中有N个核心,推荐在CPU密集型的应用中启用N个线程,而在IO密集型的任务中启用2*N个线程 本人不是很认同此种说法,他只能代表一个大致的度量,在实际应用中几乎可以说完全不准确,一般来说,权衡系统资源与性能后,前者可能需要更少的线程数,而后者根据实际情况也许适宜分配更多的线程数 这个概念大家一般都不是很陌生,在此再次科普下:所谓IO密集型任务,即是任务的资源消耗多集中在系统IO上,这里的IO本来包括磁盘IO和网络IO等,但是磁盘IO涉及文件句柄操作等系统限制不在本篇讨论,所以此篇文章所提主要指网络IO,高网络IO也是绝大多数web应用的特性
网络时延、异步IO、Pipeline2021-04-21鱼鱼

浅谈代理-动态代理

浅谈代理-动态代理我们可以很轻松的实现一个简单的代理 实现静态代理是个很简单的事情,最基础的代理只需要定义一个接口(虽然不是必要,但这显然才是标准的设计)、一个被代理类和一个代理类,例如: 定义一个接口: 一个实现类: 和一个代理类: 实际使用时,我们是去调用HelloWorldProxy的方法,其将作为HelloWorld的代理实现 此种方式直接实现的代理太过于死板,因为每一种代理行为都要制定一个代理类,我们熟知的很多基于代理的实现(譬如AOP、事务)显然不可能用静态代理的方式针对每一处类切点都覆写一个代理类,这种时候就需要动态代理 我们所熟知的相当多的框架均基于动态代理开发,JDK本身基于反射(java.lang.reflect)提供了动态代理,我们只需定义代理的行为,而对于代理类的范围并不是固定值
浅谈代理-动态代理2020-10-13鱼鱼

改了一句系统提示词,Agent 就变了个样:我开始给提示词做版本管理

改了一句系统提示词,Agent 就变了个样:我开始给提示词做版本管理先说一次让我印象很深的翻车 我维护着一个内部用的小 Agent,帮同事查工单、查日志、整理排查结论 有段时间有人反馈它“太啰嗦”,每次回答都要铺垫好几段 我就去后台的配置里,在系统提示词末尾加了一句:“回答尽量简洁 ” 改完自己试了两个问题,回答确实短了,挺满意,就没再管 过了几天,陆续有同事说它“变笨了”:以前问它某个工单的状态,它会先调用查询工具,再基于查到的结果回答;现在它经常不查,直接根据对话里的只言片语给个结论 还有一个多步骤的排查任务,它以前会一步步来,现在倾向于一步跳到结论 我一开始完全没往那句“尽量简洁”上想,在日志里找了半天别的原因 更尴尬的是,我想看看“几天前的提示词长什么样”,发现做不到——提示词存在配置后台,直接在线改,改完就覆盖了,没有历史
改了一句系统提示词,Agent 就变了个样:我开始给提示词做版本管理2026-10-14鱼鱼

AI 时代的编程语言选型:Python、Go、TypeScript、Rust 与 Java 怎么选

AI 时代的编程语言选型:Python、Go、TypeScript、Rust 与 Java 怎么选“该学哪门语言”“新项目该用什么语言”,这类问题每隔几年就会被重新讨论一次,而大模型的出现让它又多了几个新变量:模型和推理框架主要活在哪个生态里?AI 写代码时哪种语言更省心?Agent 要同时调用几十个工具、开几百个连接,并发模型撑得住吗?本文不做“语言排行榜”,也不宣布谁是赢家,而是从 AI 时代的选型维度出发,深入比较 Python、Go、TypeScript、Rust 四门语言,兼顾这个 Java 爱好者博客的主角 Java,再简要看看 C++ 与 C#,给出同一小任务的代码对照、一张综合对比表、按场景的选型建议、多语言组合架构思路,以及常见坑与 FAQ AI 时代选型新增的七个考量点
AI 时代的编程语言选型:Python、Go、TypeScript、Rust 与 Java 怎么选2026-10-14鱼鱼

你好,这是一篇测试博客

你好,这是一篇测试博客这是一篇由助手代为撰写的测试博客 今天天气不错,适合写点东西 以后会在这里记录一些有趣的想法和学习笔记,欢迎大家多多交流
你好,这是一篇测试博客2026-09-30鱼鱼

长任务 Agent 的断点续跑:Checkpoint、幂等与人工审批怎么落地

长任务 Agent 的断点续跑:Checkpoint、幂等与人工审批怎么落地一个 Agent 跑到第 37 步,这时候部署系统滚动发布,Pod 被重启了 或者模型接口突然开始返回 429,重试几次之后放弃了 又或者它走到“给客户发邮件”这一步,按规定要等主管审批,而主管这会儿在开会,三个小时后才能看手机 这些时候你该怎么办?从头再跑一遍吗? 前 36 步花掉的 token 和时间先不说,更要命的是,前面那些步骤里,如果有“发了邮件”“建了工单”“扣了款”这种动作,从头再跑就意味着再发一次、再建一次、再扣一次 Demo 阶段的 Agent 很少考虑这些,因为 Demo 跑一次也就几十秒 但只要你的 Agent 开始处理真实的长任务,这个问题迟早会找上门 这篇文章想聊聊我对这个问题的理解,以及一个能落地的最小实现
长任务 Agent 的断点续跑:Checkpoint、幂等与人工审批怎么落地2026-10-14鱼鱼

用 AI 学新技术时,我怎么避免“看完就觉得自己会了”

用 AI 学新技术时,我怎么避免“看完就觉得自己会了”前阵子我想补一块还不熟的中间件知识 打开文档、丢给 AI 一句“帮我讲讲原理和常见坑”,它讲得很顺,例子也漂亮 读完我心里有种熟悉的错觉:好像已经懂了 第二天动手搭一个最小示例,卡在配置项和错误信息上 再回头看昨晚的“懂”,其实只是跟着叙述走了一遍,脑子里没有自己踩过的脚印 这种“看完就觉得自己会了”,是我用 AI 学习时最常踩的坑 这篇文章不是反 AI,而是记我现在怎么用它学新技术,又怎么强制自己露馅、再补洞 写的都是个人习惯,不保证适合每个人,但对我自己很管用 AI 很擅长把陌生概念讲成一条平滑的故事线 平滑本身没问题,危险在于:故事线会掩盖你还不知道自己不知道的地方
用 AI 学新技术时,我怎么避免“看完就觉得自己会了”2026-10-14鱼鱼

MySQL的数据锁 加在哪?

MySQL的数据锁 加在哪?此篇文章探讨MySQL数据库的锁,讨论MySQL各种语句将如何加锁,以及加锁的“效果”,主要针对默认的InnoDb引擎 基于MySQL5.6之后的版本 有心力的可以直接看MySQL官方文档,说的更为详细:14.7.3由InnoDB中的不同SQL语句设置的锁 按类型分,MySQL有锁: 行锁,最普通的锁,其实是加在索引上的锁 表锁,直接加在整张表的锁,一旦上锁整张表的操作都会比较锁 间隙锁,又称GAP锁,用于在涉及范围查询时给莫须有的位置加锁,防止并发插入等操作出现数据不一致(诸如幻读)的问题 间隙锁之间是不会冲突的 行锁与Gap锁合称Next-Key锁 间隙锁只能锁住间隙,即间隙锁不能指定具体的数据范围,将会锁上整个间隙
MySQL的数据锁 加在哪?2021-02-05鱼鱼

数据库的并发、锁机制与MVCC

数据库的并发、锁机制与MVCC在日常开发中,经常遇到数据库进行高并发操作的情况,但是我们处理并发一般都只在代码范畴而并不处理具体的数据库操作,这是因为数据库对基本的数据库操作做了锁处理,让我们可以忽略这一层的并发问题 详细可以参考Mysql的官方文档 注意:这一篇博客是针对MySQL数据库,且实用默认的 引擎InnoDb,使用其他数据库可能存在略微的差异 MySQL默认的数据库引擎InnoDB中Autocommit值为0(即自动提交事务)执行SQL语句的时候,每一条SQL语句都是一条单独的事务,所以并不存在并发的问题,数据库的锁机制已经做了很好的处理 但是当我们开启事务时,若不加处理,可能会产生一系列并发带来的问题
数据库的并发、锁机制与MVCC2021-01-24鱼鱼

Agent 的 Token 账单怎么省:Prompt Caching、上下文瘦身与模型分级

Agent 的 Token 账单怎么省:Prompt Caching、上下文瘦身与模型分级做 Agent 的人,大概都经历过这么一个时刻:功能调通了,效果也还行,兴冲冲地跑了一批真实任务,然后打开账单页面,沉默了 同样是调用大模型,Agent 为什么比普通聊天贵这么多?钱都花在哪了?能不能在不明显影响效果的前提下省下来?这篇文章想把这笔账算清楚,再聊几种我觉得性价比最高的省钱办法 先声明一下:各家模型的价格和缓存规则变得很快,文中涉及的具体规则,以我写作时(2026 年 10 月)看到的官方文档为准,你落地之前最好再核对一遍 思路是通用的,数字请以官方为准 图片来源:Negative Space / StockSnap(CC0 1.0) 普通聊天,一问一答,输入的就是你的问题加上一些历史
Agent 的 Token 账单怎么省:Prompt Caching、上下文瘦身与模型分级2026-10-14鱼鱼

MQTT 是什么:我把 pub/sub、QoS、遗嘱和 5.0 记一记

MQTT 是什么:我把 pub/sub、QoS、遗嘱和 5.0 记一记最近又有人问我「MQTT 到底干啥的」,我也发现自己讲的时候经常跳着说:一会儿 QoS,一会儿遗嘱,一会儿又冒出 5.0 的共享订阅 这篇就把常用概念按我自己理解串一遍 协议细节以 OASIS 规范为准,我没拿真机逐条抓包,标了「我推断」的地方别当标准条文 MQTT 全称历史上叫 Message Queuing Telemetry Transport 标准化过程里有人提过:名字里的 Message Queuing 容易让人联想到企业消息中间件,OASIS 后来更常直接叫它 MQTT,不再强调展开 事实是:它是一套 客户端—服务器 的 发布/订阅(publish/subscribe) 传输协议,设计目标就是报文小、实现简单,适合机器对机器(M2M)、物联网(IoT),以及带宽紧、延迟高、链路不稳的环境
MQTT 是什么:我把 pub/sub、QoS、遗嘱和 5.0 记一记2026-10-16鱼鱼
网站地图
1
首页 博客 {{screen}} 第 {{page}} 页
博客索引
{{blog.createDate}} ◔ {{blog.timeline}} 小头像 {{blog.author}} {{tag}}
{{blog.likeCount}}{{blog.commentCount}}
分类下暂时没有文章哦!
主题分类
{{taggroup.label}} 

{{tag.value}}