跳转到内容

博客

标签「博客」下的 6 篇文章

第一次迁移生产服务器

好消息,服务器迁移完成了。

坏消息,迁移服务器花了近四小时。这要是生产停机迁移,这不事不得凌晨干。

但我没有,这是一次停机的迁移…

这还是我第一次遇到服务商要跑路。有一说一,机器很稳,也会提前30天发公告,如此的一家服务商就这样没了,挺可惜的,我倒是希望你活下去。

以前总觉得服务器迁移这种事离我挺远,直到通知的时候,才发现:哦,倒霉事落到我身上了。

这次主要迁移的是一些 Web 服务、数据卷。

大部分都跑在 Docker 里,包括:

  • cpa
  • new-api
  • 博客
  • PostgreSQL
  • Redis
  • Nginx
  • SSL 证书

需要备份data volume,重新部署 Docker Compose,重新配置 Nginx,重新申请 SSL 证书。

每一层看起来都不复杂,但它们连在一起,就开始有点会折磨人了。

这次耗时比较长,主要还是因为没什么服务器迁移经验。

平时部署一个服务还好,看文档,用docker-compose。

但迁移不一样。

迁移是你要先把旧环境拆开,再在新环境里重新拼起来。

比如 Docker volume 看起来恢复了,但数据库不一定真的恢复对了。

Nginx 配置看起来写了,但请求不一定真的进了你想要的 server block。

SSL 证书看起来签了,但域名不一定都覆盖到了。

这几个“不一定”,加起来就是一个下午。

整个过程中最让我头大的还是 Nginx。

主域名访问时,一直出现 nginx welcome page。

二级域名访问却没问题。

这个页面真的很神奇。

就是这个熟悉的家伙:

/etc/nginx/sites-enabled/default

删掉默认站点,再 reload Nginx,主域名才终于正常。

这件事给我的感觉就是:有时候不是你没配置,而是有默认配置。

这次迁移过程中,我也一直在让 GPT 帮我看问题。

它确实很有用。

尤其是排查方向、解释报错、整理命令的时候,可以节省不少时间。

但它也会帮倒忙。

比如有些时候,它会默认你的服务器结构是标准的。

但实际情况是:你的服务器可能有 conf.d,也可能有 sites-enabled,还可能有 certbot 自动生成的配置。

它说得很有道理。

但是服务器情况不一定是gpt说的那样。

所以最后还是要自己去看:

Terminal window
nginx -T

真实配置永远比想象中的配置重要。

折腾了几个小时后,服务终于都恢复了。

博客可以访问,new-api 正常,cpa的数据没丢,统计服务也能起来,主域名和二级域名都能用,SSL 证书也处理好了。

那一刻没有什么特别激动的感觉。

更多是松了一口气。

这次最大的感受是:

时间的流逝,非常快。折腾一会,几个小时没了。

需要树立工程意识,迁移服务的环节流程需要熟悉,才能避免踩坑。要有自己的判断,不能轻易全部的交给 GPT。

服务器迁移不是单纯的搬数据,更是一个重新搭建环境的过程。 每个单独的docker容器挂在的数据卷。 在备份项目和数据卷的时候注意有没有嵌套的卷。 运维也不容易…

六一这天,云服务商给我开了个玩笑

六一这天,云服务商给我开了个天大的玩笑。

AI爆发,硬件暴涨,云服务商的成本也在暴涨,撑不住的已经倒下。这股风也吹到了我这里。

怎么说呢。

儿童节,成年人收到的是服务器搬家通知。

服务商还是比较良心,提前30天发布了公告。

接下来这段时间,我会把博客迁移到新的服务器上。

迁移后域名仍然保持不变:

blog.veyliss.top

所以已经添加友链的伙伴,不需要修改链接。

如果中途出现短暂无法访问、解析异常、证书刷新、服务重启之类的问题,也不要惊慌。

不是我跑路了。

是我的服务器先跑路了。

这次也算给我提了个醒:个人博客看起来只是一个小站,但只要还在持续更新,它就不是随手放在那里的页面。

域名、服务器、证书、备份,这些平时不太显眼的东西,也在支撑它继续跑下去。

总之,友链伙伴如果发现本站偶尔打不开,不用紧张。

我还在。

只是服务器在搬家。

大规模无状态爬虫系统设计

这篇文章记录的是一套大规模无状态爬虫系统的设计。

先说明一下参与边界:这套系统不是我一个人独立设计完成的。我主要负责爬虫端的核心设计和实现,另一位同事是项目主要负责人,他有十余年的架构设计经验,整体系统设计、调度中心以及很多关键取舍都由他主导。我在这个系统里更多是站在爬虫端视角,参与了一套大规模无状态爬虫体系的落地。

也正因为那时自己还是初入职场,所以这套设计对我的意义不只是“写了一个爬虫”,而是第一次比较完整地看到:爬虫在工程系统里不应该只是脚本,它可以是一个被调度、被扩容、被监控、可替换的采集节点。

本文只讨论在授权和合规范围内的数据采集系统设计,不涉及绕过站点安全机制或采集敏感数据。

在做这个项目之前,Scrapy 是很自然会被想到的方案。

它有成熟的爬虫生命周期、调度器、下载器、中间件、管道、去重、状态管理等能力。对于中小规模、结构清晰、业务变化不频繁的采集任务来说,Scrapy 确实是一套完整方案。

但这套系统面对的问题不太一样。

我们更关注的是大规模任务下的采集吞吐、任务调度、账号分配、异常处理和快速扩容。Scrapy 自带的体系虽然完整,但学习成本较高,入手较慢,架构也相对复杂。尤其当系统需要把任务状态、账号状态、异常流转、代理分配、补偿处理这些能力统一放到一个调度中心管理时,爬虫本身再保留太多状态,反而会让边界变得不清楚。

所以最后的方向是:不沿用 Scrapy 的架构模式,而是结合现有高并发框架,设计一套更轻、更快、更容易水平扩展的无状态爬虫系统。

爬虫核心只负责一件事:拿到任务后尽快完成数据抓取,包括必要的增量更新,然后把结果交给后续链路。

按当时的架构草图抽象后,整体链路大概是这样:

大规模无状态爬虫系统架构图
任务、账号、代理由调度中心统一下发;爬虫节点保持无状态,采集结果进入 Kafka、Flink、ES 数据链路。

在这个体系里,Java 服务承担调度中心的角色。它负责任务协调、账号分配、账号状态管理、异常状态流转、代理下发等能力。

爬虫端则被刻意设计得很薄。

爬虫启动后向调度中心领取任务。调度中心在下发任务时,会同时给出这次采集所需的账号和代理。爬虫拿到这些一次性上下文后开始采集,采集完成后把数据写入 Kafka,并向调度中心汇报任务结果和心跳状态。

这里的“一次性”不是指账号用一次就丢弃,而是指一次采集任务内绑定一次任务、账号和代理。任务结束后,账号会根据结果重新回到有效账号池,或者进入异常账号池,等待专门的登录模块重新处理。

我觉得这套系统里最关键的设计,就是把爬虫做成无状态。

传统爬虫经常会在自己内部维护很多信息:当前任务跑到哪一步、账号是否可用、代理是否失效、失败后要不要重试、异常应该怎么处理、下次从哪里继续等。

这些能力当然有价值,但如果所有爬虫节点都各自维护状态,系统规模一大,就会出现几个问题:

  • 单个爬虫节点变重,扩容和迁移成本变高。
  • 账号、代理、任务状态分散在各处,难以统一判断。
  • 某个节点异常退出后,恢复逻辑复杂。
  • 错误处理混在采集逻辑里,爬虫代码越来越难维护。

无状态的思路是反过来的:爬虫只负责执行当前任务,不负责长期持有状态。

它不决定一个账号后续应该怎么处理,也不决定一个异常任务最终怎么补偿。它只把采集过程中的结果、错误和心跳上报给调度中心,由调度中心再调度给对应的处理模块。

这样做以后,爬虫端会变得非常轻。

如果某个爬虫节点挂了,系统只需要感知它心跳消失,再把未完成任务重新调度出去。爬虫本身不需要承担复杂恢复逻辑。对于我当时负责的爬虫端来说,这个设计最大的好处就是:代码目标非常明确,采集就是采集,错误就是上报。

这套系统里,爬虫单次采集任务大约 15 秒左右就可以完成。

它能快起来,原因不只是“并发写得高”,更重要的是系统边界清楚。

调度中心已经提前准备好了任务、账号和代理,爬虫不需要在执行过程中再做大量决策。拿到任务后,爬虫可以直接进入采集流程。它只处理当前任务所需的请求、解析、增量判断和结果投递。

采集结果进入 Kafka 后,后面的清洗、聚合、存储交给 Flink 和 ES 链路。爬虫不在本地做过多处理,也不会把数据链路和采集链路耦合在一起。

从工程上看,这其实是在减少爬虫节点的职责。

节点职责越少,单次任务越短,失败成本也越低。即使某个任务失败,也可以快速上报并进入调度中心的异常处理流程,而不是让爬虫自己在本地反复纠缠。

爬虫选择 Docker 部署,是因为这个系统天然需要横向扩容。

如果爬虫直接跑在固定机器上,扩容会比较麻烦。新机器环境要配置,依赖要安装,版本要对齐,启动方式也容易不一致。Docker 把运行环境打包后,爬虫就可以在任意一台机器上快速启动。

这带来了两个非常直接的好处。

第一,可以一键扩容。

当采集任务变多,或者需要在短时间内提高吞吐时,只需要增加爬虫容器数量。因为爬虫是无状态的,新启动的容器不需要同步复杂上下文,只要能连上调度中心,就可以开始领取任务。

第二,可以按数据采集情况动态调整数量。

任务高峰期增加爬虫节点,任务低谷期减少节点。爬虫节点本身不保存长期状态,所以扩容和缩容都比较自然。

这也是无状态设计和容器化部署非常契合的地方:一个节点随时可以来,也随时可以走,系统的长期状态不依赖它。

从图上看,可能会有一个疑问:代理池去哪了?

实际设计里,代理也由调度中心负责。

爬虫在领取任务时,调度中心会把任务、账号、代理一起下发。对于爬虫来说,它不需要自己去代理池里挑选代理,也不需要判断某个代理是否还应该继续使用。它只需要使用调度中心给出的代理完成当前任务,并把结果反馈回去。

这样设计的好处是统一。

任务、账号、代理在一次采集里是绑定关系。如果采集失败,调度中心可以结合错误类型判断问题出在哪里:可能是任务本身异常,可能是账号失效,也可能是代理不可用。爬虫端只提供事实,不做最终裁判。

这让异常处理有了更清晰的入口。

账号管理是这个系统里非常重要的一部分。

有效账号池保存当前可用账号。调度中心给爬虫下发任务时,会从有效账号池里分配账号。任务完成后,如果账号表现正常,就重新回到有效账号池,等待后续继续使用。

如果采集过程中发现账号异常,爬虫不会自己尝试修复账号,而是把异常上报给调度中心。调度中心再把账号放入异常账号池,由账号登录模块或专门处理模块去恢复。

恢复成功后,账号重新进入有效账号池;恢复失败,则继续留在异常状态,等待后续处理或下线。

这套流转看起来绕了一步,但它让职责非常清楚:

  • 爬虫负责发现和上报异常。
  • 调度中心负责状态流转和资源分配。
  • 账号登录模块负责账号恢复。
  • 有效账号池只保留可用于任务分配的账号。

当系统规模变大时,这种职责拆分会比“爬虫自己判断一切”更稳。

爬虫采集到的数据不会直接写入最终存储,而是先进入 Kafka。

Kafka 在这里承担缓冲和解耦作用。爬虫只需要稳定地把采集结果投递出去,不需要关心后续清洗、转换和索引写入的具体细节。

Flink 负责消费 Kafka 中的数据,做实时清洗、转换、去重或补充处理。处理后的数据再写入 ES,供后续检索和查询使用。

这条链路的好处是采集和处理分离。

爬虫节点只追求采集效率,数据处理链路则可以按自己的节奏扩展。如果后续清洗逻辑变复杂,也不会直接拖慢爬虫侧的执行。

这套设计对我最大的影响,是让我第一次真正理解“少做一点”有时候是更好的工程设计。

刚开始做爬虫时,很容易觉得爬虫应该什么都管:任务、状态、账号、代理、重试、异常、存储,最好都封装在一个完整框架里。但在大规模系统里,爬虫越重,越容易变成难以扩展的节点。

这套系统反而让我看到另一种思路:

爬虫不需要成为系统中心。它可以只是一个高性能、可替换、可扩容的执行单元。真正的状态和调度逻辑,应该放到更适合统一管理的位置。

对当时初入职场的我来说,这个认知很重要。

我开始意识到,架构设计不是把所有能力都堆进一个模块里,而是决定每个模块应该知道什么、不应该知道什么。一个模块越清楚自己不负责什么,边界往往越稳定。

回头看,这套无状态爬虫体系最让我印象深刻的地方,就是它把复杂性从爬虫端拿走了。

爬虫只领取任务、执行采集、上报结果;调度中心统一管理任务、账号、代理和异常;数据进入 Kafka、Flink、ES 组成的后续链路。每一层都有自己的职责,每一层也都可以独立扩展。

这比单纯写一个“能跑的爬虫”要更接近真正的工程系统。

接触 Vibe Coding 八个多月后的感受

接触 Vibe Coding 已经八个多月了。

回头看,这段时间给我带来的变化非常大。它不只是让我多认识了一些 AI 工具,也不只是让我写代码的速度变快了。更重要的是,它改变了我看待开发这件事的方式。

以前我更关注技术本身。

我会想这个功能应该怎么实现,代码怎么写,框架怎么选,接口怎么设计,数据库结构怎么拆。很多时候,注意力会自然落在“如何把代码写出来”这件事上。

而现在,我越来越多地开始关注产品本身。

这个功能为什么要做?用户会怎么使用?流程是不是顺?页面是不是清楚?这个需求背后真正要解决的业务问题是什么?这些问题慢慢变得比“代码怎么写”更靠前。

这就是 Vibe Coding 对我最大的影响。

在更早的时候,我使用 AI 的方式其实很简单。

去年的上半年,AI 对我来说更多还是一个开发辅助工具。它主要停留在 Web 式的 Chat 形态里,我会问它一些问题,让它帮我解释概念、检索资料、分析报错、生成一些代码片段。

那个阶段的 AI 很像一个随时在线的助手。

它能帮我查东西,也能帮我补充思路,但大多数时候,真正的开发过程还是由我自己主导。我要自己拆任务、自己打开项目、自己修改文件、自己调试和验证。

AI 参与了过程,但没有真正进入开发工作流的中心。

那时候我对它的理解也很朴素:它可以提高效率,可以减少搜索成本,可以帮我更快理解一些不熟悉的知识。

但我还没有意识到,它会在后面改变整个开发方式。

后来,Agent 的概念越来越火。

我开始看到各种 CLI 工具出现,也开始频繁听到 token、上下文、模型网关、提示词、工具调用、代码代理这些词。AI 不再只是一个聊天窗口,它开始进入终端、进入编辑器、进入项目目录,甚至可以直接阅读代码、修改文件、运行命令、检查结果。

这和以前完全不一样。

以前是我把问题复制给 AI,然后把答案再搬回项目里。现在则更像是 AI 直接坐进了项目现场,和我一起看代码、改代码、验证代码。

这时我也开始加入 Vibe Coding 的行列。

刚开始的时候,我其实并不知道这些工具应该怎么用。面对各种模型、API、CLI、代理配置,我会有点茫然。它们看起来都很强,但真正落到自己的项目里,还是需要一段适应过程。

我需要理解它们的边界。

哪些事情可以交给它?哪些事情必须自己判断?什么时候应该让它改代码?什么时候只是让它分析?上下文应该怎么给?任务应该怎么拆?

这些并不是看一篇教程就能立刻掌握的。

后来我逐渐知道了 New API 这类整合型网关,也开始理解它们在 AI 工作流中的意义。

模型越来越多,不同模型有不同能力、价格和使用限制。如果每一个工具都单独配置,就会很分散。整合型网关的意义在于,它能把不同模型入口统一起来,让工具调用变得更稳定,也更容易管理。

再后来,我接触到了 Claude Code 这类工具。

它让我真正感受到“AI 参与编码”这件事和普通问答的区别。

普通问答更像是你问一句,它答一句。CLI 编码工具则更像是你把它放进项目里,它可以沿着任务往前走:阅读文件、理解结构、修改代码、运行检查、再根据结果继续调整。

这时候,AI 就不只是回答问题,而是在参与完成工作。

当然,这并不意味着我可以完全放手。

相反,我越来越感觉到,使用这类工具时,人要承担更高层次的判断。你要知道目标是什么,知道验收标准是什么,知道哪里不能乱动,知道生成的代码是否符合项目长期维护的方向。

AI 可以很快,但方向仍然要由人来定。

过去我做一个东西,第一反应常常是技术问题。

页面怎么写?接口怎么接?状态怎么管理?样式怎么调?

现在我会先想产品问题。

这个页面存在的目的是什么?用户第一眼应该看到什么?如果他想继续阅读,路径是不是顺?如果他在移动端打开,会不会困惑?如果内容越来越多,列表是否还能承载?如果未来要部署、维护、持续写文章,流程是不是足够轻?

这种变化很明显。

因为当 AI 可以承担大量具体编码工作后,我的注意力就被释放出来了。我不再需要把所有精力都压在每一行代码上,而是可以站得稍微高一点,看整个产品的结构和体验。

这并不是说技术不重要。

技术仍然重要,而且越到后面越重要。只是技术不再是唯一中心。它更像是实现产品目标的手段,而不是最终目的。

以前我可能会因为某个技术点很有意思就想做点东西。现在我会先问:这个东西解决了什么问题?它对用户、对内容、对长期维护有什么价值?

Vibe Coding 也让我更关注业务流程。

一个功能不是孤立存在的。它前面有入口,后面有结果,中间有状态变化和用户决策。只把某个页面写出来,并不代表功能真的完成。

比如一个博客站,不只是能展示文章就够了。

还要考虑:

  • 新文章怎么创建。
  • 分类和标签怎么维护。
  • 首页如何呈现内容价值。
  • 列表页如何让读者快速判断是否要点进去。
  • 文章页如何让阅读体验稳定。
  • 部署后如何只专注维护内容。

这些都不是单纯的代码问题,而是产品流程问题。

当 AI 能帮我更快完成具体实现后,我反而会花更多时间思考这些流程是否合理。

我会更在意一个功能放在系统里是不是自然,一个页面是不是为后续内容增长留好了空间,一个交互是不是符合读者直觉。

这其实是更接近产品视角的思考。

这八个多月里,我最大的感受是:AI 把很多“执行层面的阻力”变小了。

以前想到一个功能,可能要先考虑技术栈、查文档、写样板代码、调样式、修报错。很多时候,还没真正验证想法,就已经被实现细节消耗掉了。

现在不同了。

我可以更快把想法变成可运行的东西,再通过实际效果判断它是否值得继续优化。

这会让开发节奏发生变化。

以前更像是先想很久,再动手实现。现在更像是先做出一个版本,然后不断观察、调整、迭代。

AI 给我的不是简单的偷懒,而是更短的反馈周期。

当反馈周期变短,人就更容易围绕结果做判断,而不是长时间停留在假设里。

使用 Vibe Coding 越久,我越觉得人并没有变得不重要。

相反,人变得更重要。

因为 AI 可以生成代码,但它不一定知道什么是适合你的。它可以给出方案,但它不知道你真正想要的产品气质。它可以完成任务,但它不会天然理解你的长期规划。

所以,人需要做这些事情:

  • 定义目标。
  • 拆解任务。
  • 判断取舍。
  • 控制范围。
  • 验收结果。
  • 维护产品方向。

如果没有这些判断,AI 很容易把事情做得很快,但不一定做得正确。

这也是我慢慢学到的一点:Vibe Coding 不是随便让 AI 写代码,而是学会用清晰的目标和上下文引导它,把人的判断和 AI 的执行力结合起来。

这段经历让我发生了几个明显变化。

第一,我更愿意从产品角度看问题。

我不再只问“这个功能怎么写”,而是会先问“这个功能为什么存在”。

第二,我更重视流程。

页面、内容、工具、部署、维护,它们应该连成一条顺畅的链路,而不是一个个孤立的点。

第三,我对学习 AI 相关知识更有动力。

从模型到上下文,从 CLI 工具到网关,从提示词到任务拆解,这些内容不再只是概念,而是会真实影响我每天的开发方式。

第四,我开始更相信个人项目的可能性。

以前一个人做完整产品会觉得很重。现在虽然仍然不轻松,但至少很多原本消耗人的细节可以被 AI 分担。一个人的上限,正在被工具重新拉高。

接触 Vibe Coding 的这八个多月,对我来说像是一次开发方式的迁移。

我从把 AI 当作问答工具,慢慢转向把它当作开发协作者。也从更关注技术实现,逐渐转向关注产品本身、业务流程和最终结果。

这种变化不是一夜之间发生的。

它是在一次次尝试工具、配置模型、修改项目、验证结果的过程中慢慢形成的。

现在的我依然还在学习 AI,也还在摸索更适合自己的工作流。但有一点已经很明确:未来的开发不会再回到过去那种完全依赖手工推进的状态。

AI 会继续进入开发流程,而我需要做的,是学会站在更高的位置使用它。

把注意力从代码细节里适当抽出来,更多地放到产品、体验、流程和价值上。

这可能就是 Vibe Coding 最吸引我的地方。

它不是让我不再关心技术,而是让我终于有更多精力去关心技术背后真正要完成的事情。

梦开始的地方

这是我创建项目的第一篇博客文章。

在这个博客里,我将分享我的技术学习历程、项目经验以及一些随笔思考。希望通过这个平台,能够记录下我的成长轨迹,也能与志同道合的朋友们交流和分享。

我的名字叫做 veyliss,这是我“梦开始的地方”。我希望在这里能够记录下我的梦想和努力的过程,也希望能够激励自己不断前行。无论是技术上的突破,还是生活中的点滴,我都希望能够在这里留下足迹。

在许多年前我就曾想着自己搭建真正属于自己的博客网站,记录自己的学习和成长。如今这个想法终于实现了,我感到非常兴奋和满足。这个博客不仅是一个记录工具,更是一个激励自己不断前进的动力源泉。

我相信,通过这个博客,我能够更好地总结和反思自己的学习过程,也能够与更多的人分享我的经验和见解。无论是技术上的问题,还是生活中的思考,我都希望能够在这里找到共鸣和支持。

最后,感谢每一个来到这个博客的朋友们,希望你们能够在这里找到有价值的内容,也希望我们能够在这里一起成长和进步。让我们一起在这个梦开始的地方,书写属于我们的故事吧!

回顾 2025

回望 2025 年,时间像被按下了快进键。

这一年走得很快,也走得并不轻松。很多事情在开始时都带着热情,真正走到最后却发现,能完整收尾的并不算多。想做的项目、想沉淀的知识、想持续推进的计划,有些还停留在半成品阶段,有些甚至只是短暂地闪过念头。

这并不是一个让人完全满意的年份。

但它也不是毫无意义的一年。

这一年里,有一段连续而紧张的工作经历。

那几个月很充实,也很消耗人。每天都在处理新的任务,面对新的问题,试着把一些看起来并不容易的事情往前推进。工作中,我尽力认真对待每一项安排,也不断尝试挑战自己原本觉得困难的部分。

这段经历让我收获了不少东西。

我积累了更真实的工作经验,也接触到了很多优秀的同事和前辈。从他们身上,我看到了更成熟的处理方式、更稳定的职业节奏,以及面对复杂问题时更清晰的判断。

这些东西不是单靠看教程、写练习就能得到的。它们来自具体的工作现场,来自一次次沟通、交付、修改和复盘。

不过遗憾也很明显。

个人能力确实在提升,但还没有达到自己期待中的飞跃。和行业里真正优秀的人相比,差距依然存在,而且并不小。意识到这一点的时候,会有一点失落,但也会更清楚自己接下来应该往哪里用力。

下班后的疲惫,是这一年很真实的一部分。

这种疲惫不只是身体上的,更是精神上的。忙碌一天之后,大脑长时间处在紧绷状态。回到住处,整个人像被抽空了能量,明明知道还有很多东西值得学习,却很难再把自己重新拉回专注状态。

我曾经计划利用业余时间继续学习新知识,补足能力短板,也想持续推进一些个人项目。可是很多时候,打开资料、看到待办列表,就会先感到一阵无力。

于是一些计划被推迟,一些想法被搁置,一些原本应该继续打磨的东西,也慢慢停在了半路。

这并不值得美化。

它只是提醒我:人的精力是有限的,自我提升也不能只靠一时热情。真正能走得远的,应该是更稳定、更可持续的节奏。

这一年,我也多次想过要构建自己的知识体系。

我越来越能感受到,零散学习带来的问题很明显。今天看一点后端,明天补一点前端,后天又去了解新的工具和概念,短期内似乎学了很多,但如果没有整理和连接,这些知识很容易散落在各处。

我希望能把这些零散的知识点串联起来。

不是为了把自己包装得很厉害,而是希望在未来遇到问题时,能更快找到方向,知道某个知识点在整个技术体系里处于什么位置,也能把过去踩过的坑、做过的项目、解决过的问题留下来。

这也是我后来越来越想认真维护博客和知识库的原因。

文字不是为了证明什么,而是为了给自己留下路径。现在的记录,也许会成为未来某个阶段重新出发时的坐标。

2025 年,我结识了很多圈内朋友。

他们来自不同领域,有交易所、Web3、外卖行业、传统行业、SaaS 领域,也有来自大厂的朋友。还有一些自由职业者,他们的工作方式和生活状态让我产生过很多羡慕与向往。

和这些人交流,会明显感觉到世界比自己日常接触到的范围更大。

不同的人在不同赛道里寻找机会,也在用各自的方式处理工作、生活和成长之间的关系。有的人很专注,有的人很灵活,有的人已经找到了相对自由的节奏,也有人还在变化里持续摸索。

这些交流让我意识到,职业发展不是只有一条路。

稳定工作是一种选择,持续深耕是一种选择,做项目、做产品、做自由职业,也都是不同的选择。重要的是,自己要逐渐知道想过怎样的生活,并为之积累足够的能力。

2025 年也是 AI 快速爆发的一年。

越来越多行业开始投入 AI 相关研发,尝试用 AI 提升效率、优化流程、创造新的业务价值。无论是技术研发、内容生产,还是产品设计、数据分析,AI 都在逐渐进入日常工作。

这不是一个遥远的趋势,而是正在发生的变化。

我能明显感觉到,未来互联网生态会和 AI 更紧密地连接在一起。很多岗位的工作方式会被改变,很多工具会被重做,很多原本依赖人工经验的流程,也会被新的方式重新组织。

这对个人来说既是压力,也是机会。

压力在于,原本掌握的技能可能很快变得不够用。机会在于,如果能更早理解这些变化,并把 AI 当成能力放大器,就有可能在新的阶段找到更好的位置。

2025 年并不是一个完成度很高的年份。

它有遗憾,有拖延,有没有收尾的项目,也有很多没有真正落实的计划。但它同样留下了工作经验、人际连接、行业观察和对自我节奏的重新认识。

我不想把这一年写得过于漂亮。

因为真实的成长并不总是热血的。很多时候,它只是一次次发现自己的不足,然后在疲惫里慢慢调整方向。

如果要给 2025 年一个总结,我想它更像是一个提醒:

不要只依赖热情,也不要害怕缓慢。

真正重要的,是在每一次停顿之后,还能重新开始。