DeepSeek Harness 发布那几天,我的技术群基本没法聊别的,全是截图和转发。刷屏归刷屏,真到自己上手,还是得老老实实搭环境。装起来倒不难,几条命令的事。跑通官方 demo 的那一刻,说实话有点上头——它自己规划、自己调工具、自己收尾,跑得比我想象的顺。 但 demo 永远是 demo。等我把需求换成自己项目里的活儿,问题就一个个冒出来了。 模型不背这个锅 我让它做一件很具体的事:读几个目录、汇总信息、然后写一份报告。结果它卡在一个地方反复横跳——调同一个工具,参数换来换去,就是拿不到正确结果。第一反应很自然:这模型是不是不行? 后来我把日志翻出来一条条看,发现问题根本不在模型。是我给工具写的 description 太含…
阅读全文学习 Python 有些年头了,我一直觉得自己"挺懂"。直到有次 review 朋友的代码,看到一个函数用 lst=[] 当默认参数,我说这是坑,他反问我"为什么是坑?"。我张了张嘴,发现自己其实也讲不太清。 那之后我认真捋了一遍。所谓 Python 的"高级",从来不是语法写得多花,而是开始看懂它背后的对象模型、协议、执行机制和设计哲学。下面这八个点,是我真正入门之后才想明白的东西。 迭代器与生成器:惰性是灵魂 生成器最大的特点就一个字:懒。它不急着算,你 next 一次它算一次。所以它省内存——一个 range(10**9) 不会真的开一亿个格子。 坑在于,生成器只能走一遍。 gen = (x * x for x in rang…
阅读全文这是我常用的git命令,其实对于git来说非常简单,但是不简单的是命令比较多,如果你用的少了,会忘记用法就会觉得特别难。我想写我常用的命令大全,顺便复习温故一下。但是不可否认的是,我对很多命令都做了最佳的取舍,并不想一股脑全部都展示出来,这样我还不如去git网站,菜鸟网站去找那种git教程、或者是命令大全。 所以我打算将git命令+我的笔记结合一下,我觉得这些命令是必须会的,如果你想学git命令的话。当然你也可以把它作为一个速查手册。后面我还会附上简易流程和一些基础必会的命令。 git常用命令 查看状态 查看工作区状态 git status, git status -sb 当前在哪个分支; 哪些文件被修改; 哪些文件已经暂存; 是否…
阅读全文事情是这样的——我有个 side project 需要加验证码。一开始的想法很简单:找个滑块方案,引入,完事。 然后我就打开了 GitHub。 三个小时之后,我发现自己陷进去了。字符验证码、滑块、旋转、点选、PoW 工作量证明、对抗 AI Agent……一个我以为半天能搞定的活,变成了整个周末的深坑。不过踩完回头看,验证码这个领域确实比大多数人以为的要有意思。 所以这篇就来聊聊我这一个周末到底看了些什么。 验证码是怎么一步步走到今天的 CAPTCHA 的全称巨长——“Completely Automated Public Turing test to tell Computers and Humans Apart”。说人话就是:用机…
阅读全文出发前的纠结与抵达后的震撼 和女友早上出门前还在纠结累不累,毕竟逛博物馆是个体力活。大早晨打出租去博物馆,进湖北省博物馆的大门等待。前天晚上订了一个导游,带我们去逛博物馆。 我觉得有讲解这样不会导致漏掉一些“精品文物” 曾侯乙盘 "> 导游带我们去了,直奔曾侯乙尊盘。隔着玻璃,那层层叠叠的“龙须”透空附饰像活的一样在眼前舒展。我盯着看了不到2分钟,就要赶往下一个地点,有点强行去拍照打卡的意味了。 这又有点像我们日常的生活,总是匆匆忙忙,来不及欣赏就要奔赴下一个地点。 编钟区的仪式感 编钟区是绝了。红地毯铺地,玻璃罩护体,仪式感直接拉满。虽然没赶上现场演奏,但光看着那排排悬挂的铜钟,脑子里已经自动播放起《编钟乐舞》的BGM了。…
阅读全文
06事情要从一个让我抓狂的下午说起。 我按惯例写完一篇随笔,敲下 hexo s 想预览一下,然后端起杯子去倒水。等水倒好、喝了两口回来,终端还在那儿吭哧吭哧编译。一篇 markdown 而已啊大哥,至于吗? 这已经不是第一次了。每次改一个字,就要等它把整个站重新跑一遍。文章一多起来,那个编译时间真的够我看完一个短视频。头发又少了几根的根本原因,可能不是写代码,是等编译等掉的。 忍了一阵子,终于在一个深夜破防了——干脆迁了吧,听说 Hugo 编译快得离谱,而且也是 Go 写的,我栈里好歹有点 Go,亲切。 然后就开始了半夜两点的折腾。 为什么是 Hugo 其实选 Hugo 没什么纠结的。原因就两条: 快:用过的都说秒级编译,这点最致命,我…
阅读全文Spring Boot 4 正式版出来有一阵子了,前段时间把一个练手的微服务项目从 3.x 迁了上去,跑了两周,整体感受就是:步子迈得比 2 到 3 那一次还大,但方向上是对的。 这篇文章不是什么官方升级指南,就是我把项目实际跑起来之后的一些体验和坑,给想动手的哥们一个参考。 Java 21 深度集成:不再是"兼容",而是"依赖" Spring Boot 3.x 最低要求 Java 17,但说白了只是把 baseline 提了一下,很多新特性是可选的——你不用 record、不用 pattern matching,代码照跑。 Spring Boot 4 不一样。Java 21 是硬性要求,而且框架内部大量用到了 21 的特性: Re…
阅读全文
08用了三年 Nacos,今天聊聊它为什么能成为国内 Java 生态里配置中心的事实标准。 回想一下最想上配置中心的那一刻,大概是前年接一个老项目的时候。配置文件散落在七八个地方——有写死在 application.yml 里的,有藏在启动脚本的环境变量里的,还有几个地方直接硬编码在代码里。改个数据库连接串要翻三个仓库,发一次版提心吊胆。那之后只要新项目超过三个微服务,我第一件事就是把 Nacos 挂上去,没得商量。 Nacos 到底干了什么事 先说大白话。Nacos 核心就干两件事,但这两件事刚好是微服务架构里最头疼的: 服务发现和配置管理。 啥叫服务发现?微服务一多,每个服务都得知道其他服务在哪儿。以前要么写死 IP,要么搞个 Ng…
阅读全文
09我使用 Cursor 和 GitHub Copilot 一段时间后,最大的变化不是代码补全更快,而是查代码、改代码和验证结果的流程发生了变化。 这两类工具都能读取当前代码上下文,也都支持对话和修改文件。实际效果主要取决于提供的上下文、项目规则和任务大小。把整个需求一次性交给工具,通常会增加 review 成本。 开始前整理项目 AI 编程工具对结构清楚的项目更有效。开始使用前,我会确保仓库至少具备: 可运行的构建和测试命令 明确的目录结构 稳定的格式化和静态检查配置 示例环境变量文件 不包含密钥和生产数据 如果项目本身无法稳定构建,工具生成的代码也缺少可靠的验证基线。 Cursor 的项目规则 Cursor 当前推荐把项目规则放在…
阅读全文之前做 AI 问答接口时,我先用了普通 JSON 响应。模型生成十几秒后,页面一次性显示完整答案。接口没有报错,但等待期间没有任何输出,使用体验很差。 Spring AI 的 ChatClient 支持返回 Flux,配合 WebFlux 可以把模型增量内容通过 SSE 发送到浏览器。基础实现不长,部署时还要处理代理缓冲、连接断开和错误格式。 引入依赖 项目需要 Spring WebFlux 和对应模型供应商的 Spring AI Starter。模型名称、地址和密钥放在配置或环境变量中,不写进代码仓库。 org.springframework.boot spring-boot-starter-webflux 不同模型供应商的 St…
阅读全文