<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>w2solo - 独立开发者社区</title>
    <link>https://w2solo.com/</link>
    <description>w2solo - 独立开发者社区社区最新发帖.</description>
    <language>en-us</language>
    <item>
      <title>2026 年 6 款小红书图片视频无水印下载工具推荐</title>
      <description>&lt;h2 id="0.小红书去水印视频下载器"&gt;0.小红书去水印视频下载器&lt;/h2&gt;
&lt;p&gt;网址: &lt;a href="https://rednotevideodownload.org/zh" rel="nofollow" target="_blank"&gt;https://rednotevideodownload.org/zh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点：免费&lt;/p&gt;
&lt;h2 id="1.RedNote(Xiaohongshu) Video Downloader Without Watermark"&gt;1.RedNote(Xiaohongshu) Video Downloader Without Watermark&lt;/h2&gt;
&lt;p&gt;网址: &lt;a href="https://rednote-downloader.online/" rel="nofollow" target="_blank"&gt;https://rednote-downloader.online/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点：免费&lt;/p&gt;

&lt;p&gt;&lt;img src="https://share-text.org/api/imgUrl?text=kVQdJGMb/466332503-9d8f575d-ce12-4eb0-9d77-2b43f8254adf.png" title="" alt="466332503-9d8f575d-ce12-4eb0-9d77-2b43f8254adf.png"&gt;&lt;/p&gt;
&lt;h2 id="2.小红书去水印图片视频下载"&gt;2.小红书去水印图片视频下载&lt;/h2&gt;
&lt;p&gt;网站地址: &lt;a href="https://www.xhs-download.online/" rel="nofollow" target="_blank"&gt;https://www.xhs-download.online/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点: 小红书去水印图片视频下载指的是从小红书平台上下载图片和视频，并去除其中的水印，使得下载内容更加清晰和美观。这对于那些需要保存干净素材的用户来说非常重要。&lt;/p&gt;

&lt;p&gt;&lt;img width="1697" alt="image" src="https://github.com/user-attachments/assets/c7703297-145f-43bd-9790-4b80194fd706"&gt;&lt;/p&gt;
&lt;h2 id="3.小红书去水印工具 - 免费下载无水印小红书视频和图片"&gt;3.小红书去水印工具 - 免费下载无水印小红书视频和图片&lt;/h2&gt;
&lt;p&gt;网站地址: &lt;a href="https://www.xhs-download.org/" rel="nofollow" target="_blank"&gt;https://www.xhs-download.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img width="2866" height="1646" alt="image" src="https://github.com/user-attachments/assets/7396edf6-2c61-4c59-a98d-c1627c28bb07"&gt;&lt;/p&gt;
&lt;h2 id="3.kutool-小红书去水印"&gt;3.kutool-小红书去水印&lt;/h2&gt;
&lt;p&gt;网站地址：&lt;a href="https://dy.kukutool.com/" rel="nofollow" target="_blank"&gt;https://dy.kukutool.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点：无水印下载 130 多个平台视频和图片&lt;/p&gt;

&lt;p&gt;&lt;img width="1322" alt="image" src="https://github.com/user-attachments/assets/51a3e870-05f0-48bd-9e0f-0e505f43b3a4"&gt;&lt;/p&gt;
&lt;h2 id="4.RedNote 视频下载器 - 下载无水印的视频"&gt;4.RedNote 视频下载器 - 下载无水印的视频&lt;/h2&gt;
&lt;p&gt;网站地址：&lt;a href="https://www.rednote-downloader.com/zh" rel="nofollow" target="_blank"&gt;https://www.rednote-downloader.com/zh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点：RedNote Downloader 是一款免费的在线工具，可帮助您以原始质量下载 RedNote（也称为小红书）视频和图片。将您喜爱的 RedNote 内容以 MP4 格式直接保存到您的设备，以获得视频和高分辨率图片。无水印、无质量损失，无需安装应用程序。&lt;/p&gt;

&lt;p&gt;&lt;img width="1163" alt="image" src="https://github.com/user-attachments/assets/355626c2-3898-426f-86c3-356b0c75f214"&gt;&lt;/p&gt;
&lt;h2 id="5.小红刷"&gt;5.小红刷&lt;/h2&gt;
&lt;p&gt;网站地址: &lt;a href="https://www.xiaohongshua.com/" rel="nofollow" target="_blank"&gt;https://www.xiaohongshua.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点: 简洁易用的小红书图片视频去水印工具，支持根据小红书分享链接下载无水印图片及视频。&lt;/p&gt;

&lt;p&gt;&lt;img width="823" alt="image" src="https://github.com/user-attachments/assets/9e47fdb1-959f-4b84-8c32-79cd26b1492e"&gt;&lt;/p&gt;
&lt;h2 id="6.小石榴薯子助手——小红书视频下载"&gt;6.小石榴薯子助手——小红书视频下载&lt;/h2&gt;
&lt;p&gt;网站地址: &lt;a href="https://www.data123.cc/" rel="nofollow" target="_blank"&gt;https://www.data123.cc/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点: 小红书图片批量下载工具，支持爆款笔记管理，对标账号管理。&lt;/p&gt;

&lt;p&gt;&lt;img width="797" alt="image" src="https://github.com/user-attachments/assets/eab4fd2a-8fdd-4505-945e-debe782ad27c"&gt;&lt;/p&gt;

&lt;p&gt;这 6 个工具都是完全免费的，可以快速帮你完成小红书图片/视频素材下载以及去水印。在使用这些工具时，请确保遵守相关法律法规和小红书的使用条款，尊重原创内容的版权。&lt;/p&gt;</description>
      <author>zhugezifang</author>
      <pubDate>Tue, 02 Jun 2026 21:57:39 +0800</pubDate>
      <link>https://w2solo.com/topics/7482</link>
      <guid>https://w2solo.com/topics/7482</guid>
    </item>
    <item>
      <title>GWP LAW GROUP Financial Fraud Attorney Assistance for Financial Disputes</title>
      <description>&lt;p&gt;GWP LAW GROUP: Your Trusted Partner in Financial Fraud Attorney Assistance for Financial Disputes
In today's complex financial landscape, individuals and businesses alike face an ever-growing risk of financial fraud and disputes. Whether it's securities fraud, Ponzi schemes, embezzlement, or complex commercial litigation, the consequences can be devastating. When facing such challenges, having experienced legal counsel is not just an advantage—it's a necessity. This is where &lt;a href="https://www.gwpllp.com/" rel="nofollow" target="_blank" title=""&gt;GWP LAW GROUP&lt;/a&gt; stands out as a premier provider of financial fraud attorney assistance for financial disputes.
 Understanding Financial Fraud and Disputes
Financial fraud encompasses a wide range of illegal activities designed to deceive for monetary gain. From sophisticated investment scams to corporate accounting fraud, these schemes can result in significant financial losses, damaged reputations, and legal complications. Financial disputes, while sometimes less malicious in intent, can be equally complex, involving contract disagreements, partnership conflicts, regulatory violations, or professional negligence.
What makes these cases particularly challenging is their technical nature, often requiring attorneys who understand not just the law, but also finance, accounting, and industry-specific regulations. This intersection of legal and financial expertise is precisely where GWP LAW GROUP excels.
 The GWP LAW GROUP Advantage
Specialized Expertise: Unlike general practice firms, GWP LAW GROUP focuses specifically on financial fraud and disputes. Our attorneys bring deep knowledge of financial regulations, securities laws, and fraud investigation techniques. Many of our lawyers have backgrounds in finance, accounting, or regulatory agencies, giving them unique insight into both the technical and legal aspects of financial cases.
Comprehensive Case Assessment: We begin every engagement with a thorough evaluation of your situation. Our team examines documentation, financial records, and transaction histories to build a complete picture of what occurred. This meticulous approach allows us to identify not just obvious violations, but also subtle patterns that might indicate more extensive fraud or liability.
Proactive Investigation: Financial fraud cases often require aggressive investigation. GWP LAW GROUP employs a multi-faceted approach that includes forensic accounting analysis, electronic discovery, witness interviews, and collaboration with financial experts. We understand how to follow the money trail and uncover evidence that others might miss.
Strategic Resolution Planning: Every financial dispute presents multiple potential paths to resolution. Our attorneys work closely with clients to develop strategies aligned with their specific goals—whether that means aggressive litigation to recover losses, negotiation for settlement, or mediation to preserve business relationships. We provide clear assessments of the strengths and weaknesses of each approach, empowering clients to make informed decisions.
Regulatory Navigation: Financial disputes often involve regulatory bodies such as the SEC, FINRA, or state regulatory agencies. GWP LAW GROUP has extensive experience interacting with these organizations, whether defending clients in enforcement actions, filing complaints on behalf of victims, or navigating compliance requirements.
 Our Service Spectrum
GWP LAW GROUP provides assistance across the full spectrum of financial fraud and dispute scenarios:
Investment Fraud: We represent investors who have suffered losses due to broker misconduct, unsuitable investment recommendations, unauthorized trading, or failure to diversify. Our attorneys are well-versed in FINRA arbitration procedures and securities litigation.
Corporate Fraud: For businesses facing internal fraud such as embezzlement, kickback schemes, or financial statement manipulation, we provide comprehensive legal response including internal investigations, recovery actions, and coordination with law enforcement when necessary.
Commercial Financial Disputes: Contract disputes, partnership dissolutions, shareholder oppression claims, and lender liability issues require nuanced understanding of both law and business. Our attorneys bring this dual perspective to effectively advocate for our clients' interests.
Whistleblower Representation: Individuals reporting financial fraud within organizations face unique risks and challenges. GWP LAW GROUP provides confidential, experienced representation for whistleblowers, including guidance on SEC whistleblower programs that may provide financial rewards for reporting securities violations.
Defense Against Fraud Allegations: When individuals or entities are accused of financial misconduct, we provide vigorous defense grounded in thorough understanding of both the facts and the applicable laws. Our approach focuses on early case assessment to identify the most effective defense strategy.
 Client-Centered Approach
At GWP LAW GROUP, we recognize that financial disputes are more than just legal problems—they're personal and business crises that affect livelihoods, reputations, and futures. That's why we prioritize clear communication, ensuring clients understand their options at every stage. We provide regular updates on case developments and explain complex financial and legal concepts in accessible terms.
Our commitment extends beyond individual cases. We consider the broader implications for our clients, whether that means protecting their professional licenses, preserving business operations during litigation, or safeguarding their public reputation.
 Why Choose GWP LAW GROUP?
The landscape of financial fraud and disputes is constantly evolving, with new schemes and regulatory developments emerging regularly. GWP LAW GROUP stays at the forefront of these changes through continuous education, monitoring of regulatory updates, and analysis of emerging case law. This proactive approach ensures our clients benefit from the most current legal strategies and interpretations.
Our track record speaks for itself. We have successfully recovered millions for fraud victims, defended numerous clients against unwarranted allegations, and negotiated favorable settlements in complex financial disputes. But beyond these outcomes, what truly distinguishes us is our dedication to client service and our holistic approach to resolving financial legal challenges.
 Taking the Next Step
If you're facing a financial fraud situation or dispute, time is often critical. Evidence can disappear, statutes of limitations may expire, and financial losses can compound. Early intervention by experienced counsel can make a decisive difference in the outcome.
GWP LAW GROUP offers confidential consultations to assess your situation and outline potential approaches. During this initial meeting, we'll provide honest feedback about your case's strengths and challenges, and discuss how our financial fraud attorney assistance can help achieve your objectives.
Don't navigate the complex terrain of financial disputes alone. With GWP LAW GROUP as your legal partner, you gain advocates who combine legal expertise with financial acumen, strategic thinkers who can see both the details and the big picture, and dedicated professionals committed to protecting your interests in even the most challenging financial circumstances.
Contact GWP LAW GROUP today to schedule a consultation and take the first step toward resolving your financial dispute with confidence and clarity.&lt;/p&gt;</description>
      <author>mobei2025</author>
      <pubDate>Tue, 02 Jun 2026 20:23:47 +0800</pubDate>
      <link>https://w2solo.com/topics/7481</link>
      <guid>https://w2solo.com/topics/7481</guid>
    </item>
    <item>
      <title>大厂面试新规：不会用 AI 编程，直接挂</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;面试官笑呵呵地抛出第一题：“你们谁用过 Copilot 或者 Cursor？说说怎么用 AI 生成一个带状态管理的 React 组件？” 七个人，六个低下了头。剩下那个举手说 “我用过 ChatGPT 写代码”，面试官追问 “那你有没有自己封装过 LLM 的 API 调用？有没有做过流式输出的性能优化？”——举手的人也沉默了。全场死寂。连键盘声都没了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="2026年的前端面试，变了"&gt;2026 年的前端面试，变了&lt;/h2&gt;
&lt;p&gt;这不是段子。这是 2026 年春招，某二线大厂前端群面的真实场景。&lt;/p&gt;

&lt;p&gt;曾几何时，我们以为背熟 ES6、刷透 LeetCode、手写 Promise、精通 Vue 和 React 的源码，就能稳拿 offer。现在呢？面试官开口闭口就是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“你如何在浏览器端调用大模型 API？token 消耗怎么优化？”&lt;/li&gt;
&lt;li&gt;“前端怎么实现 RAG 的文档检索？向量数据库你用过哪个？”&lt;/li&gt;
&lt;li&gt;“有没有用 Web Worker 跑过轻量级模型？ONNX Runtime 了解吗？”&lt;/li&gt;
&lt;li&gt;“AI 辅助编程工具用得多吗？你怎么保证生成代码的质量和安全？”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;每一个问题，都像一把刀，精准地扎在普通前端的知识盲区上。&lt;/p&gt;

&lt;p&gt;更狠的是，面试官自己也承认：“其实这些题，我们内部也没几个人能完全答上来。但老板说了，今年招人必须要有 AI 素养——不会用 AI 写代码、不懂 AI 产品落地的，一律不要。”&lt;/p&gt;
&lt;h2 id="我身边真实的“AI面试惨案”"&gt;我身边真实的 “AI 面试惨案”&lt;/h2&gt;
&lt;p&gt;我认识一个 28 岁的帅小伙，三年前端经验，项目写得漂漂亮亮。今年跳槽，面了 7 家公司，5 家挂在 AI 题上。有一家技术负责人很直接：“你业务能力没问题，但我们希望前端能主动用 AI 提效，甚至参与到 AI 产品的落地里。你不懂这些，来了也是拖后腿。”&lt;/p&gt;

&lt;p&gt;拖后腿。这三个字，像一记耳光。&lt;/p&gt;

&lt;p&gt;他还算年轻的。那些 35+、拖家带口、学新东西明显吃力的老前端呢？他们连面试机会都拿不到——简历上没写 “AI 相关经验”，HR 那一关就直接筛掉了。&lt;/p&gt;

&lt;p&gt;群面七人沉默的那个场景，我反复想了很多遍。如果我是那七个中的一个，我会不会也低下头？&lt;/p&gt;
&lt;h2 id="面试官到底在考什么？"&gt;面试官到底在考什么？&lt;/h2&gt;
&lt;p&gt;2026 年的前端面试逻辑已经完全变了。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;以前考你 “能不能写”&lt;/strong&gt;——手撕算法、手写框架、默写八股文。现在&lt;strong&gt;考你 “会不会管”&lt;/strong&gt;——拆解需求、指挥 AI、审查产出、做技术决策。&lt;/p&gt;

&lt;p&gt;阿里 2026 暑期 AI 实习岗明确要求 “AI 编程工具（如 Cursor、Claude Code）的极致依赖”，以及 “工程化落地能力” 在招聘中的核心地位。警示纯理论研究者及传统编码者的风险——简历里若缺乏可展示的项目级 AI 实践经验，“在简历筛选阶段极易被直接淘汰”。&lt;/p&gt;

&lt;p&gt;字节 2026 年春招的 “测试开发工程师 - 开发者 AI” 岗位，直接硬性要求对 AI Agent 有深入理解和实践经验。阿里 “通义实验室 - 技术专家 - 测试开发” 也明确要求 “熟练掌握机器学习算法原理”。&lt;/p&gt;

&lt;p&gt;不只是在 JD 上喊口号，面试里已经在真刀真枪地考了。2026 年大厂面试题汇总里，“AI 辅助编程” 已经作为独立的面试新趋势被列出来。&lt;/p&gt;
&lt;h2 id="但AI面试官自己也很“虚”"&gt;但 AI 面试官自己也很 “虚”&lt;/h2&gt;
&lt;p&gt;讽刺的是，AI 面试官自己也在被吐槽。有面试官坦言：“其实这些 AI 题，我们内部也没几个人能完全答上来。但老板说了，今年招人必须要有 AI 素养——不会用 AI 写代码、不懂 AI 产品落地的，一律不要。”&lt;/p&gt;

&lt;p&gt;技术圈对这种新规也争议很大。一部分人认为这是与时俱进——84% 的全球开发者已经使用或计划使用 AI 编程工具，企业招人当然要优先考虑会用 AI 的人。另一部分人则批判这是 “跟风式焦虑”——面试官自己都没搞明白，凭什么要求候选人懂？&lt;/p&gt;

&lt;p&gt;一位资深面试官在反思文章里写：“当一个人的 ‘知识库’ 和 ‘经验’ 都可以被 AI 低成本伪造时，我们曾经引以为傲的面试体系，正在面临系统性失效的风险。AI 时代，工程师最稀缺的能力，恰恰是那些非技术的东西。”&lt;/p&gt;
&lt;h2 id="话说回来，AI不是来取代你的"&gt;话说回来，AI 不是来取代你的&lt;/h2&gt;
&lt;p&gt;现在很多人对 “懂 AI” 的理解极其肤浅。以为在项目里接个 OpenAI 或者 Claude 的接口，搞个对话框，把输入框的字传过去，把返回的字用 Markdown 渲染出来，就叫 AI 前端工程师了。那不叫 AI 开发，那叫表单提交。&lt;/p&gt;

&lt;p&gt;大模型时代，前端真正的难点根本不是发送请求，而是应对大模型带来的复杂性——不可控的输出、流式传输的残缺 JSON、工具调用的中间状态、安全风险的审查。&lt;/p&gt;

&lt;p&gt;我身边有一个靠 AI 面试成功的人。他拿到的 offer，面试题不是手写代码，而是 “带着电脑，现场用 Cursor 完成一个功能”。他不仅生成了代码，还在面试官面前改了需求、调优了性能、排查了 AI 生成的 bug。面试官当场说：“这就是我们要的人。”&lt;/p&gt;
&lt;h2 id="如果你现在还在找工作，几点不成熟的建议"&gt;如果你现在还在找工作，几点不成熟的建议&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;至少准备 2-3 个 “AI+ 前端” 的实战故事&lt;/strong&gt;——不能只说 “我用过 Cursor”，要说清楚在什么场景下、怎么拆解需求、怎么给 AI 指令、AI 犯了什么错、你怎么纠正的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;练代码审查比练写代码更重要&lt;/strong&gt;——AI 能写出 80% 对的代码，但那 20% 的错误往往是最致命的。你的价值不在于写得比 AI 快，而在于能发现 AI 发现不了的问题。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;别只会调用 API&lt;/strong&gt;——真实的高阶 AI 前端工程，每天面对的是流式渲染、复杂状态机、AST 解析、沙盒隔离。把这些底子打好，比背一百个 Prompt 模板有用。&lt;/p&gt;
&lt;h2 id="写在最后"&gt;写在最后&lt;/h2&gt;
&lt;p&gt;2026 年的前端面试，AI 早已不是 “加分项”，而是像 HTML、CSS 一样的基础 “必考项”。这背后折射出的，是整个行业环境的剧变——AI 已经渗透到了业务的每一个角落。&lt;/p&gt;

&lt;p&gt;你以为面试官在考 AI，其实他们在考你——在工具越来越强的时代，你还有多少不可替代的东西。&lt;/p&gt;</description>
      <author>193577746</author>
      <pubDate>Tue, 02 Jun 2026 18:40:40 +0800</pubDate>
      <link>https://w2solo.com/topics/7480</link>
      <guid>https://w2solo.com/topics/7480</guid>
    </item>
    <item>
      <title>Lando: 用一段话生成你的 Landing Page</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;不是"又一个建站工具"，而是&lt;strong&gt;"想法验证加速器"&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;
&lt;h2 id="一句话介绍"&gt;一句话介绍&lt;/h2&gt;
&lt;p&gt;Lando 是一个 AI 驱动的 Landing Page 生成器。你只需用一段话描述你的项目，AI 就会自动生成一个设计精美、响应式、可收集用户意向的完整落地页，一键发布上线。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;不需要写代码，不需要设计，不需要部署。&lt;/strong&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="为什么做这个产品？"&gt;为什么做这个产品？&lt;/h2&gt;
&lt;p&gt;作为独立开发者，我见过无数次这样的场景：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;产品写好了，想发 Product Hunt，发现&lt;strong&gt;没有官网&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;想验证一个想法，&lt;strong&gt;不想花 3 天搭个丑页面&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;好不容易做了落地页，&lt;strong&gt;不知道怎么收集用户意向&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lando 就是解决这些问题的：&lt;strong&gt;让独立开发者把精力花在产品上，而不是折腾建站。&lt;/strong&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="它能做什么？"&gt;它能做什么？&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📝 &lt;strong&gt;AI 生成&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;输入项目描述，自动生成完整页面（Hero、功能、关于、联系方式）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡ &lt;strong&gt;5 分钟内上线&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;流式生成，所见即所得，一键发布获得公开链接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📬 &lt;strong&gt;意向收集&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;内置表单，获取访客联系方式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📱 &lt;strong&gt;响应式&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;桌面、平板、手机自动适配&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用场景"&gt;使用场景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🚀 &lt;strong&gt;产品发布前&lt;/strong&gt;：快速做个官网，验证市场需求&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;MVP 验证&lt;/strong&gt;：有个想法，先做个页面看看有没有人感兴趣&lt;/li&gt;
&lt;li&gt;👤 &lt;strong&gt;个人品牌&lt;/strong&gt;：独立开发者需要展示项目和联系方式&lt;/li&gt;
&lt;li&gt;📢 &lt;strong&gt;活动/众筹&lt;/strong&gt;：临时需要一个收集意向的页面&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 id="定价"&gt;定价&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;14 天免费试用&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;基础版 ¥9/月（1 个网站，10 次生成/月）&lt;/li&gt;
&lt;li&gt;专业版 ¥99/月（10 个网站，300 次生成/月）&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;是的，这是拍脑袋定的&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;
&lt;h2 id="现在就想试试？"&gt;现在就想试试？&lt;/h2&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://lando.lianggejia.cn/" rel="nofollow" target="_blank" title=""&gt;Lando&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;注册即送 14 天免费试用。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="我需要你的反馈"&gt;我需要你的反馈&lt;/h2&gt;
&lt;p&gt;这是 Lando 的第一个公开版本，还有很多不完善的地方：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自定义域名&lt;/li&gt;
&lt;li&gt;对话微调&lt;/li&gt;
&lt;li&gt;生成记录&lt;/li&gt;
&lt;li&gt;访问统计&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;如果你试用后有任何建议、bug 反馈，或者觉得某个功能特别需要，欢迎直接留言或私信我。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;作为独立开发者，我很清楚社区的力量。如果 Lando 对你有用，希望能得到你的一个 ⭐ 或转发；如果没用，也请告诉我为什么——这对我比付费更重要。&lt;/p&gt;</description>
      <author>laocaixw</author>
      <pubDate>Tue, 02 Jun 2026 16:36:37 +0800</pubDate>
      <link>https://w2solo.com/topics/7479</link>
      <guid>https://w2solo.com/topics/7479</guid>
    </item>
    <item>
      <title>分享一个整理 AI 工具入口的小产品：Omni AI Pro</title>
      <description>&lt;p&gt;大家好，最近在整理自己常用的 AI 工具时，发现一个问题：现在 AI 产品越来越多，图片、视频、文案、效率类工具分散在不同平台里，每次临时找工具都要翻收藏夹或者搜索，很容易浪费时间。&lt;/p&gt;

&lt;p&gt;所以我做了一个小站，想把一些常见的 AI 工具入口和使用场景整理得更清楚一点，方便自己平时查找，也希望对其他独立开发者、内容创作者或者经常测试 AI 工具的人有点帮助。&lt;/p&gt;

&lt;p&gt;目前这个项目还在持续调整中，主要想解决几个小问题：&lt;/p&gt;

&lt;p&gt;让用户更快找到合适的 AI 工具
页面尽量简单，不做太复杂的功能
后面慢慢补充更多真实使用场景和说明
尽量让新用户不用花太多时间理解怎么用&lt;/p&gt;

&lt;p&gt;项目地址：&lt;a href="https://omniaipro.app/" rel="nofollow" target="_blank"&gt;https://omniaipro.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;也欢迎大家提一些建议，比如页面结构、工具分类、内容呈现方式，或者独立开发产品早期应该优先优化哪些地方。现在还比较早期，希望慢慢把它打磨得更实用一点。&lt;/p&gt;</description>
      <author>ylee26386</author>
      <pubDate>Tue, 02 Jun 2026 12:02:49 +0800</pubDate>
      <link>https://w2solo.com/topics/7474</link>
      <guid>https://w2solo.com/topics/7474</guid>
    </item>
    <item>
      <title>AI 生成代码快如闪电，但我修了三个小时——它到底帮了谁？</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;上周，老板丢过来一个内部后台页面的需求，说 “不急，明天给就行”。我打开 v0，输入 “帮我生成一个用户管理后台，包含表格、筛选、分页、编辑弹窗”。一分钟，页面出来了。表格、按钮、弹窗、样式，一应俱全。我复制代码到项目里，跑起来，看起来没问题。然后接下来三个小时，我都在改它的代码。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="一、“神速”生成，然后呢？"&gt;一、“神速” 生成，然后呢？&lt;/h2&gt;
&lt;p&gt;v0 生成的速度确实快。但当我开始真正 “使用” 这份代码时，问题一个接一个冒出来：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;变量名随心所欲&lt;/strong&gt;：&lt;code&gt;data&lt;/code&gt;、&lt;code&gt;items&lt;/code&gt;、&lt;code&gt;itemData&lt;/code&gt;、&lt;code&gt;filteredData&lt;/code&gt;……一个表格数据，四五个名字来回用。改一个地方，全局搜索半天。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;样式写死&lt;/strong&gt;：按钮宽度固定 &lt;code&gt;120px&lt;/code&gt;，手机上看溢出；表格列宽固定，屏幕一缩就横向滚动。没有响应式，没有移动端适配。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;状态管理混乱&lt;/strong&gt;：筛选条件、分页、弹窗开关全部挤在同一个 &lt;code&gt;useState&lt;/code&gt; 里，改一个导致别的组件无辜重渲染。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;没有错误处理&lt;/strong&gt;：接口返回 &lt;code&gt;null&lt;/code&gt;，页面直接白屏。没有 loading，没有空状态。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这些不是 bug，是 “能用但没法维护”。&lt;/p&gt;
&lt;h2 id="二、修了三个小时，改了啥？"&gt;二、修了三个小时，改了啥？&lt;/h2&gt;
&lt;p&gt;我花时间做的事，恰恰是 AI 最不擅长的事：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;重命名所有变量，让代码能读。&lt;/li&gt;
&lt;li&gt;把固定宽度改成 flex + 百分比，加媒体查询。&lt;/li&gt;
&lt;li&gt;拆分状态，用 &lt;code&gt;useReducer&lt;/code&gt; 管理筛选和分页。&lt;/li&gt;
&lt;li&gt;补上 loading、错误提示、空数据占位。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;说实话，到最后我有点怀疑：如果我自己从头写，可能也就三个半小时。AI 帮我省了半小时，但我额外付出了 “读懂它逻辑” 的成本。这笔账，算不过来。&lt;/p&gt;
&lt;h2 id="三、AI 到底帮了谁？"&gt;三、AI 到底帮了谁？&lt;/h2&gt;
&lt;p&gt;我知道，会有人说 “你不会写 prompt”“你不会调教”。也许更精确的 prompt 能生成更好的代码。但问题是，&lt;strong&gt;AI 生成的代码像一辆组装好的车，看起来能跑，但一上路就发现螺丝没拧紧，轮胎是歪的&lt;/strong&gt;。它不是不能开，而是你需要先花时间检查所有零件。&lt;/p&gt;

&lt;p&gt;对于不熟悉项目上下文、不知道团队规范、不了解业务细节的 AI 来说，生成 “能跑” 的代码已经是极限。而 “可维护” 的代码，恰恰需要这些信息。&lt;/p&gt;

&lt;p&gt;所以，AI 到底帮了谁？帮我省了半小时打字时间？还是帮老板更快地看到 “可视的进度”？对于开发者自己，短期 “快” 的背后，是长期的 “改”。&lt;/p&gt;
&lt;h2 id="四、我现在怎么用 AI？"&gt;四、我现在怎么用 AI？&lt;/h2&gt;
&lt;p&gt;我没有放弃 AI，而是调整了用法：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;不用 AI 写核心业务逻辑&lt;/strong&gt;：自己设计状态和接口，用 AI 生成工具函数或数据 mock。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;用 AI 写文档和注释&lt;/strong&gt;：生成 JSDoc、README、测试用例，这些不会坑人。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI 生成代码后，强制做一轮重构&lt;/strong&gt;：重命名、拆分、补异常，把 “能跑” 变成 “能维护”。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这样一来，AI 节省的时间，不会在改代码时加倍吐回去。&lt;/p&gt;
&lt;h2 id="五、最后"&gt;五、最后&lt;/h2&gt;
&lt;p&gt;AI 写代码快，但不是免费的。你省下的打字时间，很可能变成修代码的时间。这笔账，建议每个团队都算清楚。&lt;/p&gt;</description>
      <author>193577746</author>
      <pubDate>Mon, 01 Jun 2026 18:59:38 +0800</pubDate>
      <link>https://w2solo.com/topics/7473</link>
      <guid>https://w2solo.com/topics/7473</guid>
    </item>
    <item>
      <title>OpenAI 终于下场做机器人，ChatGPT 的下一站不是聊天，而是现实世界</title>
      <description>&lt;p&gt;事情是这样的。&lt;/p&gt;

&lt;p&gt;今天我刷到 Sam Altman 发了一条很短的动态。&lt;/p&gt;

&lt;p&gt;OpenAI Robotics is hiring。&lt;/p&gt;

&lt;p&gt;OpenAI 的机器人团队开始招人了。&lt;/p&gt;

&lt;p&gt;就这么一句话。&lt;/p&gt;

&lt;p&gt;但是我看到的时候，脑子里还是咯噔了一下。&lt;/p&gt;

&lt;p&gt;因为这句话如果单独看，好像只是 OpenAI 又开了一个招聘岗位，招几个硬件工程师，招几个机器学习工程师，正常。&lt;/p&gt;

&lt;p&gt;但是如果你把今天 AI 圈发生的几件事放在一起看，这个味道就完全不一样了。&lt;/p&gt;

&lt;p&gt;NVIDIA 今天在讲 AI 工厂。&lt;/p&gt;

&lt;p&gt;Runway 今天在讲世界模型。&lt;/p&gt;

&lt;p&gt;NVIDIA Cosmos 3 在讲物理 AI。&lt;/p&gt;

&lt;p&gt;上海的规划里也写到了多模态智能体和具身智能。&lt;/p&gt;

&lt;p&gt;MWC 上海甚至要办人形机器人点球大战。&lt;/p&gt;

&lt;p&gt;然后 OpenAI 在这个时间点说，我也要做机器人了。&lt;/p&gt;

&lt;p&gt;朋友们，这事儿就不是一个招聘启事那么简单了。&lt;/p&gt;

&lt;p&gt;我自己的感受是，AI 行业正在从一个阶段切到另一个阶段。&lt;/p&gt;

&lt;p&gt;过去几年，我们一直在看 AI 怎么说话，怎么写文章，怎么画图，怎么写代码。&lt;/p&gt;

&lt;p&gt;但接下来，它可能真的要开始动手了。&lt;/p&gt;

&lt;p&gt;不是比喻意义上的动手。&lt;/p&gt;

&lt;p&gt;是真的，有一个身体，能走到你面前，能拿起东西，能修设备，能进工厂，能进仓库，能进入现实世界。&lt;/p&gt;

&lt;p&gt;这一下就有点吓人，也有点让人兴奋。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/01-scene-ai-grows-body.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="OpenAI 为什么现在要做机器人"&gt;OpenAI 为什么现在要做机器人&lt;/h3&gt;
&lt;p&gt;很多朋友可能会觉得奇怪。&lt;/p&gt;

&lt;p&gt;OpenAI 不是做 ChatGPT 的吗？&lt;/p&gt;

&lt;p&gt;不是做大模型的吗？&lt;/p&gt;

&lt;p&gt;怎么突然又开始做机器人了？&lt;/p&gt;

&lt;p&gt;其实吧，这件事一点都不突然。&lt;/p&gt;

&lt;p&gt;你可以把 ChatGPT 理解成一个很聪明的大脑。&lt;/p&gt;

&lt;p&gt;它会聊天，会写代码，会总结文档，会分析问题，会帮你规划任务。&lt;/p&gt;

&lt;p&gt;但是它一直有一个很尴尬的问题。&lt;/p&gt;

&lt;p&gt;它没有身体。&lt;/p&gt;

&lt;p&gt;你让它帮你写一份方案，可以。&lt;/p&gt;

&lt;p&gt;你让它帮你分析一段代码，可以。&lt;/p&gt;

&lt;p&gt;你让它帮你做一个 PPT，可以。&lt;/p&gt;

&lt;p&gt;但是你让它帮你把桌上的杯子拿过来。&lt;/p&gt;

&lt;p&gt;不行。&lt;/p&gt;

&lt;p&gt;它只能告诉你，理论上应该先伸手，再握住杯子，然后保持平衡，再移动到目标位置。&lt;/p&gt;

&lt;p&gt;听着挺聪明。&lt;/p&gt;

&lt;p&gt;但杯子还在那儿。&lt;/p&gt;

&lt;p&gt;这就是今天 AI 最大的边界之一。&lt;/p&gt;

&lt;p&gt;它能在屏幕里完成很多事情，但一旦离开屏幕，进入真实世界，事情就变得非常麻烦。&lt;/p&gt;

&lt;p&gt;真实世界不是一段干净的文本。&lt;/p&gt;

&lt;p&gt;真实世界有摩擦，有重量，有光线变化，有人突然从旁边走过，有桌子边缘，有地面打滑，有杯子里的水会晃。&lt;/p&gt;

&lt;p&gt;你在电脑里复制一段文字，永远不会因为手抖复制到一半。&lt;/p&gt;

&lt;p&gt;但机器人拿杯子，真的会手抖。&lt;/p&gt;

&lt;p&gt;这就是为什么机器人很难。&lt;/p&gt;

&lt;p&gt;也是为什么 OpenAI 迟早会碰这件事。&lt;/p&gt;

&lt;p&gt;因为如果一个 AI 公司真的相信自己在做通用智能，那它最后一定会问一个问题。&lt;/p&gt;

&lt;p&gt;这个智能，只能待在聊天框里吗？&lt;/p&gt;

&lt;p&gt;如果只能待在聊天框里，那它再聪明，也还是一个屏幕里的东西。&lt;/p&gt;

&lt;p&gt;但如果它能进入现实世界，那性质就变了。&lt;/p&gt;

&lt;p&gt;ChatGPT 是一个会说话的大脑。&lt;/p&gt;

&lt;p&gt;机器人，是给这个大脑装上身体。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/02-scene-chatgpt-needs-body.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="这次 OpenAI 的信号，不只是招聘"&gt;这次 OpenAI 的信号，不只是招聘&lt;/h3&gt;
&lt;p&gt;Sam Altman 这条动态里提到，他们在找全栈硬件、系统、运维和机器学习工程师。&lt;/p&gt;

&lt;p&gt;这个组合其实很有意思。&lt;/p&gt;

&lt;p&gt;如果只是做一个软件产品，你不会这么招人。&lt;/p&gt;

&lt;p&gt;硬件，系统，运维，机器学习，全都要。&lt;/p&gt;

&lt;p&gt;这更像是在搭一条完整的机器人研发链路。&lt;/p&gt;

&lt;p&gt;而且他还提到，这个项目由 Aditya Ramesh 领导。&lt;/p&gt;

&lt;p&gt;这个名字很多人可能不熟，但他之前和 DALL-E 有很深关系，也参与过世界模拟相关研究。&lt;/p&gt;

&lt;p&gt;这块就很关键。&lt;/p&gt;

&lt;p&gt;因为机器人不是简单地把大模型塞进一个铁壳子里。&lt;/p&gt;

&lt;p&gt;不是说，你给一个机械臂接上 GPT，它就会帮你做饭。&lt;/p&gt;

&lt;p&gt;没这么简单。&lt;/p&gt;

&lt;p&gt;机器人需要理解世界。&lt;/p&gt;

&lt;p&gt;它要知道一个杯子不是一张图片里的像素块，而是一个有重量、有形状、会被碰倒的物体。&lt;/p&gt;

&lt;p&gt;它要知道门把手可以转，抽屉可以拉，玻璃杯容易碎，热水会烫。&lt;/p&gt;

&lt;p&gt;这些东西对人来说太自然了。&lt;/p&gt;

&lt;p&gt;自然到我们根本不觉得这是知识。&lt;/p&gt;

&lt;p&gt;但对 AI 来说，这些都是要学的。&lt;/p&gt;

&lt;p&gt;有时候我觉得，人类小孩真的太牛逼了。&lt;/p&gt;

&lt;p&gt;一个两三岁的小孩，可能还说不清什么叫摩擦力，什么叫重心，什么叫物体恒存。&lt;/p&gt;

&lt;p&gt;但是他知道杯子推到桌子边缘会掉下去。&lt;/p&gt;

&lt;p&gt;他知道球滚到沙发底下不是消失了。&lt;/p&gt;

&lt;p&gt;他知道妈妈把玩具藏到背后，玩具还在。&lt;/p&gt;

&lt;p&gt;这些听着很幼稚的常识，恰恰是机器人进入现实世界最难补的课。&lt;/p&gt;

&lt;p&gt;OpenAI 现在下场做机器人，我觉得很大一部分原因，就是大模型已经开始撞到这个边界了。&lt;/p&gt;

&lt;p&gt;语言能力再强，如果没有对物理世界的理解，它就很难真正干活。&lt;/p&gt;
&lt;h3 id="今天最关键的词，其实是世界模型"&gt;今天最关键的词，其实是世界模型&lt;/h3&gt;
&lt;p&gt;说到这里，就得把 Runway 和 NVIDIA 今天的动作放进来了。&lt;/p&gt;

&lt;p&gt;Runway 宣布加入 Cosmos Coalition，和 NVIDIA 以及其他 AI 实验室一起做面向物理 AI 的开放世界模型。&lt;/p&gt;

&lt;p&gt;NVIDIA 也在推 Cosmos 3，强调物理推理、世界理解和行动生成。&lt;/p&gt;

&lt;p&gt;这些词听起来有点硬。&lt;/p&gt;

&lt;p&gt;我用大白话讲。&lt;/p&gt;

&lt;p&gt;世界模型，就是让 AI 在脑子里先模拟一下现实世界会怎么变化。&lt;/p&gt;

&lt;p&gt;你要拿一个杯子。&lt;/p&gt;

&lt;p&gt;手伸过去，碰到杯子，杯子会不会滑？&lt;/p&gt;

&lt;p&gt;你用多大力，杯子会不会碎？&lt;/p&gt;

&lt;p&gt;你拿起来之后，里面的水会不会洒？&lt;/p&gt;

&lt;p&gt;你往左走一步，会不会撞到桌角？&lt;/p&gt;

&lt;p&gt;人类做这些事的时候，脑子里其实一直在做预测。&lt;/p&gt;

&lt;p&gt;只是我们太习惯了，所以没感觉。&lt;/p&gt;

&lt;p&gt;机器人要进入现实世界，也必须有这种能力。&lt;/p&gt;

&lt;p&gt;它不能每一步都靠试错。&lt;/p&gt;

&lt;p&gt;因为在真实世界里，试错是有成本的。&lt;/p&gt;

&lt;p&gt;自动驾驶试错，可能撞车。&lt;/p&gt;

&lt;p&gt;工厂机器人试错，可能损坏设备。&lt;/p&gt;

&lt;p&gt;家庭机器人试错，可能把你的猫吓飞。&lt;/p&gt;

&lt;p&gt;所以它需要先在自己的「脑子」里模拟。&lt;/p&gt;

&lt;p&gt;这也是为什么视频生成公司 Runway 会突然和世界模型挂上关系。&lt;/p&gt;

&lt;p&gt;表面上看，视频生成是在生成一段好看的画面。&lt;/p&gt;

&lt;p&gt;但再往深一层看，视频其实是时间里的世界变化。&lt;/p&gt;

&lt;p&gt;一个人走路，衣服会摆动。&lt;/p&gt;

&lt;p&gt;一个球落地，会反弹。&lt;/p&gt;

&lt;p&gt;一辆车转弯，轮胎和地面会产生摩擦。&lt;/p&gt;

&lt;p&gt;如果一个模型真的能生成符合物理规律的视频，那它某种程度上就在学习世界怎么运转。&lt;/p&gt;

&lt;p&gt;这就从「生成视频」变成了「模拟世界」。&lt;/p&gt;

&lt;p&gt;这一步很重要。&lt;/p&gt;

&lt;p&gt;我甚至觉得，未来回头看，大家可能会发现，视频生成不是终点，而是世界模型的训练场。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/03-scene-world-model.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="NVIDIA 也在把 AI 往现实世界里推"&gt;NVIDIA 也在把 AI 往现实世界里推&lt;/h3&gt;
&lt;p&gt;今天 NVIDIA 的动作也非常密集。&lt;/p&gt;

&lt;p&gt;FOX 工厂运营蓝图，DSX OS，Vera CPU，RTX Spark，本地 AI Agent。&lt;/p&gt;

&lt;p&gt;名字很多，听着也复杂。&lt;/p&gt;

&lt;p&gt;但它们其实都在讲一件事。&lt;/p&gt;

&lt;p&gt;AI 不能只待在网页里，它要进入真实的生产系统。&lt;/p&gt;

&lt;p&gt;工厂就是一个非常典型的场景。&lt;/p&gt;

&lt;p&gt;一条产线每天有大量机器信号，有质量数据，有传感器报警，有人员调度，有维修计划。&lt;/p&gt;

&lt;p&gt;过去这些东西要靠人看屏幕，靠老师傅经验判断，靠工程师排查。&lt;/p&gt;

&lt;p&gt;但是如果有一个工厂里的 AI 大脑，它能实时看所有数据，发现异常，调度不同的智能体去分析原因，再给出处理方案。&lt;/p&gt;

&lt;p&gt;这就不是聊天机器人了。&lt;/p&gt;

&lt;p&gt;这是一个数字工厂主管。&lt;/p&gt;

&lt;p&gt;有点科幻。&lt;/p&gt;

&lt;p&gt;但你看 NVIDIA 的表述，他们已经在往这个方向包装了。&lt;/p&gt;

&lt;p&gt;富士康用 FOX 和 NemoClaw 做多智能体系统，目标是把根因分析时间缩短 80%，劳动生产率提高 15%。&lt;/p&gt;

&lt;p&gt;这个数字到底最后能不能完全跑出来，我不知道。&lt;/p&gt;

&lt;p&gt;说实话我们还得看真实落地。&lt;/p&gt;

&lt;p&gt;但是这个方向本身已经非常清楚了。&lt;/p&gt;

&lt;p&gt;过去 AI Agent 讨论最多的是写代码。&lt;/p&gt;

&lt;p&gt;Claude Code，Codex，Cursor，大家都在说一个 AI 程序员能干多少活。&lt;/p&gt;

&lt;p&gt;但 NVIDIA 今天给的暗示是，AI Agent 不只会写代码。&lt;/p&gt;

&lt;p&gt;它也可以进工厂。&lt;/p&gt;

&lt;p&gt;它可以看机器。&lt;/p&gt;

&lt;p&gt;它可以排故障。&lt;/p&gt;

&lt;p&gt;它可以调度真实世界里的流程。&lt;/p&gt;

&lt;p&gt;这尼玛就很有意思了。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/04-scene-ai-factory-agent.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;因为一旦 AI Agent 从办公室软件进入工业系统，它的价值计算方式就完全变了。&lt;/p&gt;

&lt;p&gt;它不再是帮你省一个小时写文档。&lt;/p&gt;

&lt;p&gt;它可能是帮一条产线少停机十分钟。&lt;/p&gt;

&lt;p&gt;而在工业场景里，十分钟有时候就是钱。&lt;/p&gt;

&lt;p&gt;很多钱。&lt;/p&gt;
&lt;h3 id="机器人为什么会成为下一个大叙事"&gt;机器人为什么会成为下一个大叙事&lt;/h3&gt;
&lt;p&gt;你如果顺着这个逻辑往下想，就会发现机器人几乎是不可避免的。&lt;/p&gt;

&lt;p&gt;因为 AI 要进入现实世界，最终一定需要某种执行器。&lt;/p&gt;

&lt;p&gt;在软件里，执行器是 API。&lt;/p&gt;

&lt;p&gt;你让 Agent 调接口，发邮件，查数据库，改代码。&lt;/p&gt;

&lt;p&gt;在现实世界里，执行器是什么？&lt;/p&gt;

&lt;p&gt;就是机器人。&lt;/p&gt;

&lt;p&gt;可以是机械臂。&lt;/p&gt;

&lt;p&gt;可以是自动驾驶车。&lt;/p&gt;

&lt;p&gt;可以是仓储机器人。&lt;/p&gt;

&lt;p&gt;可以是人形机器人。&lt;/p&gt;

&lt;p&gt;也可以是一堆不那么像人的专用设备。&lt;/p&gt;

&lt;p&gt;我知道很多人一听机器人，就会想到科幻电影里那种人形机器人，走进你家，端茶倒水，陪你聊天。&lt;/p&gt;

&lt;p&gt;那个画面当然很有传播性。&lt;/p&gt;

&lt;p&gt;但我觉得，第一波真正有价值的机器人，不一定长得像人。&lt;/p&gt;

&lt;p&gt;它可能长得很丑。&lt;/p&gt;

&lt;p&gt;可能就是仓库里一个会搬货的盒子。&lt;/p&gt;

&lt;p&gt;可能就是工厂里一条会自我调整的机械臂。&lt;/p&gt;

&lt;p&gt;可能就是医院里一个专门送药的移动平台。&lt;/p&gt;

&lt;p&gt;可能就是农田里一个会识别杂草和病虫害的机器。&lt;/p&gt;

&lt;p&gt;它不需要像人。&lt;/p&gt;

&lt;p&gt;它只需要真的能干活。&lt;/p&gt;

&lt;p&gt;这块我觉得很多人会有一个误区。&lt;/p&gt;

&lt;p&gt;大家总想象机器人是一个「通用人类替代品」。&lt;/p&gt;

&lt;p&gt;但现实里更可能先出现的是大量「窄场景机器人」。&lt;/p&gt;

&lt;p&gt;它只会干一件事。&lt;/p&gt;

&lt;p&gt;但这件事干得非常稳定，非常便宜，非常不知疲倦。&lt;/p&gt;

&lt;p&gt;这就够了。&lt;/p&gt;

&lt;p&gt;你想想看，工厂老板真的需要一个会聊天的机器人吗？&lt;/p&gt;

&lt;p&gt;不需要。&lt;/p&gt;

&lt;p&gt;他需要的是设备坏了能提前报警，物料缺了能自动调度，产线异常能快速定位。&lt;/p&gt;

&lt;p&gt;养老院真的一开始就需要一个像真人一样的机器人吗？&lt;/p&gt;

&lt;p&gt;也不一定。&lt;/p&gt;

&lt;p&gt;可能先需要的是一个能安全送药、能提醒老人、能发现跌倒的系统。&lt;/p&gt;

&lt;p&gt;所以我觉得 OpenAI 做机器人这件事，大家不要只盯着「人形机器人」四个字。&lt;/p&gt;

&lt;p&gt;更大的问题是，AI 终于要开始从「理解任务」走向「执行任务」。&lt;/p&gt;

&lt;p&gt;这才是关键。&lt;/p&gt;
&lt;h3 id="苹果、上海、MWC 上海，也都在同一条线上"&gt;苹果、上海、MWC 上海，也都在同一条线上&lt;/h3&gt;
&lt;p&gt;比较骚的事是，今天不只是 OpenAI 和 NVIDIA 在讲这个方向。&lt;/p&gt;

&lt;p&gt;苹果那边也有消息，说 WWDC 可能会展示设备端 AI 升级，用从 Gemini 蒸馏的小模型在 iPhone 本地跑，复杂任务再路由到 Google Cloud。&lt;/p&gt;

&lt;p&gt;这个消息如果是真的，其实说明另一个趋势。&lt;/p&gt;

&lt;p&gt;AI 会越来越多地从云端走向设备端。&lt;/p&gt;

&lt;p&gt;手机，电脑，机器人，车，工厂设备。&lt;/p&gt;

&lt;p&gt;它们都需要在本地做一部分判断。&lt;/p&gt;

&lt;p&gt;因为现实世界等不了太久。&lt;/p&gt;

&lt;p&gt;你让一个聊天机器人慢两秒回答，最多是体验差一点。&lt;/p&gt;

&lt;p&gt;但你让一个机器人慢两秒判断，可能就撞上了。&lt;/p&gt;

&lt;p&gt;所以本地 AI 和物理 AI 是绑在一起的。&lt;/p&gt;

&lt;p&gt;NVIDIA 推 RTX Spark，也是在讲这个方向。&lt;/p&gt;

&lt;p&gt;1 petaflops AI 算力，128GB 统一内存，听起来像参数堆料。&lt;/p&gt;

&lt;p&gt;但它真正想卖的不是参数。&lt;/p&gt;

&lt;p&gt;它想卖的是，本地也能跑智能体。&lt;/p&gt;

&lt;p&gt;你的电脑不再只是一个等待你点击的机器。&lt;/p&gt;

&lt;p&gt;它可以自己观察，自己规划，自己执行。&lt;/p&gt;

&lt;p&gt;再看国内。&lt;/p&gt;

&lt;p&gt;上海的服务业规划里，已经明确写到了多模态智能体、智能驾驶、MaaS、具身智能、家庭养老文旅场景。&lt;/p&gt;

&lt;p&gt;这种东西一旦进入地方产业规划，就说明它不再只是实验室里的漂亮 demo。&lt;/p&gt;

&lt;p&gt;它开始变成产业政策、园区招商、资本布局和企业项目了。&lt;/p&gt;

&lt;p&gt;还有 MWC 上海的人形机器人点球大战。&lt;/p&gt;

&lt;p&gt;说真的，这个形式很妙。&lt;/p&gt;

&lt;p&gt;因为机器人技术很多时候太抽象了。&lt;/p&gt;

&lt;p&gt;你跟普通人讲动态平衡、自主决策、精准控制，大家听完就忘。&lt;/p&gt;

&lt;p&gt;但是你让 8 支人形机器人队伍去踢点球。&lt;/p&gt;

&lt;p&gt;大家一下就懂了。&lt;/p&gt;

&lt;p&gt;它会不会摔？&lt;/p&gt;

&lt;p&gt;它能不能判断球的位置？&lt;/p&gt;

&lt;p&gt;它能不能踢准？&lt;/p&gt;

&lt;p&gt;它能不能在没有人遥控的情况下完成动作？&lt;/p&gt;

&lt;p&gt;这就是技术传播最好的方式。&lt;/p&gt;

&lt;p&gt;把复杂技术变成一个普通人能看懂的比赛。&lt;/p&gt;

&lt;p&gt;所以你看，OpenAI 机器人，NVIDIA 物理 AI，苹果本地模型，上海具身智能，MWC 机器人比赛。&lt;/p&gt;

&lt;p&gt;它们表面上是几条新闻。&lt;/p&gt;

&lt;p&gt;但背后其实是同一个方向。&lt;/p&gt;

&lt;p&gt;AI 正在长出手脚。&lt;/p&gt;
&lt;h3 id="当然，别太快进入科幻片"&gt;当然，别太快进入科幻片&lt;/h3&gt;
&lt;p&gt;讲到这里，可能有人会开始兴奋。&lt;/p&gt;

&lt;p&gt;是不是明年家里就有机器人了？&lt;/p&gt;

&lt;p&gt;是不是马上就有一个 ChatGPT 机器人给我洗衣做饭带娃了？&lt;/p&gt;

&lt;p&gt;我觉得别急。&lt;/p&gt;

&lt;p&gt;真的别急。&lt;/p&gt;

&lt;p&gt;机器人这事儿，历史上已经热过很多轮了。&lt;/p&gt;

&lt;p&gt;每一轮都说马上进入家庭。&lt;/p&gt;

&lt;p&gt;然后每一轮都被现实教育。&lt;/p&gt;

&lt;p&gt;原因很简单。&lt;/p&gt;

&lt;p&gt;家庭是一个极其混乱的环境。&lt;/p&gt;

&lt;p&gt;每家的家具不一样，光线不一样，地面不一样，人的习惯不一样，孩子和宠物还会随机捣乱。&lt;/p&gt;

&lt;p&gt;工厂虽然看起来复杂，但它至少是可控环境。&lt;/p&gt;

&lt;p&gt;家庭反而是地狱难度。&lt;/p&gt;

&lt;p&gt;所以我不觉得 OpenAI 一做机器人，我们明年就能买到一个通用家务机器人。&lt;/p&gt;

&lt;p&gt;没那么快。&lt;/p&gt;

&lt;p&gt;而且机器人还牵涉硬件成本、供应链、安全标准、售后维护、责任归属。&lt;/p&gt;

&lt;p&gt;这些都不是发一个模型 API 能解决的。&lt;/p&gt;

&lt;p&gt;大模型迭代可以很快。&lt;/p&gt;

&lt;p&gt;机器人迭代没那么快。&lt;/p&gt;

&lt;p&gt;一个软件 bug，最多重启。&lt;/p&gt;

&lt;p&gt;一个机器人 bug，可能真的砸到脚。&lt;/p&gt;

&lt;p&gt;这就是现实世界的残酷。&lt;/p&gt;

&lt;p&gt;但是，慢不代表不重要。&lt;/p&gt;

&lt;p&gt;相反，正因为难，所以谁先把这条路跑通，谁的壁垒就会非常厚。&lt;/p&gt;

&lt;p&gt;软件产品可以被复制。&lt;/p&gt;

&lt;p&gt;一个机器人系统如果真的能在工厂、仓库、医院、养老院稳定跑起来，那里面积累的是数据、硬件、流程、场景、运维、客户信任。&lt;/p&gt;

&lt;p&gt;这东西不是一个周末 vibe coding 出来的。&lt;/p&gt;

&lt;p&gt;这也是为什么我觉得 OpenAI 现在开始做机器人是合理的。&lt;/p&gt;

&lt;p&gt;不是因为它已经准备好了一个终极机器人。&lt;/p&gt;

&lt;p&gt;而是因为如果它再不开始积累现实世界数据和硬件经验，未来可能会发现自己只有大脑，没有身体。&lt;/p&gt;
&lt;h3 id="对普通人来说，这事儿跟我有什么关系"&gt;对普通人来说，这事儿跟我有什么关系&lt;/h3&gt;
&lt;p&gt;可能有朋友看到这里会想。&lt;/p&gt;

&lt;p&gt;这些都是 OpenAI、NVIDIA、Runway、上海、富士康的事。&lt;/p&gt;

&lt;p&gt;跟我有什么关系？&lt;/p&gt;

&lt;p&gt;我非常理解这种感觉。&lt;/p&gt;

&lt;p&gt;你不是机器人公司老板。&lt;/p&gt;

&lt;p&gt;你不是硬件工程师。&lt;/p&gt;

&lt;p&gt;你也不在工厂里做自动化改造。&lt;/p&gt;

&lt;p&gt;你就是一个普通的内容创作者、设计师、开发者、运营、创业者，或者只是一个每天被 AI 新闻轰炸到麻木的普通人。&lt;/p&gt;

&lt;p&gt;那你要看什么？&lt;/p&gt;

&lt;p&gt;我觉得看三件事就够了。&lt;/p&gt;

&lt;p&gt;第一，看 AI 的能力边界正在从信息处理扩展到任务执行。&lt;/p&gt;

&lt;p&gt;以前 AI 的核心价值是帮你处理信息。&lt;/p&gt;

&lt;p&gt;写文章，做总结，查资料，生成图片，写代码。&lt;/p&gt;

&lt;p&gt;未来它会越来越多地参与执行。&lt;/p&gt;

&lt;p&gt;帮你操作电脑，帮你管理流程，帮你调度设备，甚至帮你控制机器人。&lt;/p&gt;

&lt;p&gt;这会改变很多工作的定义。&lt;/p&gt;

&lt;p&gt;第二，看本地 AI 会越来越重要。&lt;/p&gt;

&lt;p&gt;只要 AI 进入现实世界，就不能所有事都等云端回复。&lt;/p&gt;

&lt;p&gt;低延迟，隐私，安全，离线能力，都会变得重要。&lt;/p&gt;

&lt;p&gt;所以 AI PC、本地 Agent、小模型、边缘计算这些词，未来会反复出现。&lt;/p&gt;

&lt;p&gt;第三，看世界模型和具身智能会变成新的内容富矿。&lt;/p&gt;

&lt;p&gt;过去讲 AI，大家讲 Prompt，讲大模型，讲 Agent。&lt;/p&gt;

&lt;p&gt;接下来讲 AI，可能要讲机器人、自动驾驶、工厂、智能空间、家庭设备。&lt;/p&gt;

&lt;p&gt;这对内容创作者来说，其实是机会。&lt;/p&gt;

&lt;p&gt;因为大众对这块非常陌生。&lt;/p&gt;

&lt;p&gt;他们需要有人把这些硬词翻译成人话。&lt;/p&gt;

&lt;p&gt;什么叫世界模型？&lt;/p&gt;

&lt;p&gt;什么叫物理 AI？&lt;/p&gt;

&lt;p&gt;什么叫具身智能？&lt;/p&gt;

&lt;p&gt;为什么机器人比聊天机器人难这么多？&lt;/p&gt;

&lt;p&gt;为什么 NVIDIA 要讲 AI 工厂？&lt;/p&gt;

&lt;p&gt;这些问题如果讲清楚，都是很好的内容。&lt;/p&gt;

&lt;p&gt;而且它们不只是新闻。&lt;/p&gt;

&lt;p&gt;它们是未来几年 AI 叙事的底层变化。&lt;/p&gt;
&lt;h3 id="我真正兴奋的地方"&gt;我真正兴奋的地方&lt;/h3&gt;
&lt;p&gt;说实话，我真正兴奋的不是 OpenAI 做机器人这件事本身。&lt;/p&gt;

&lt;p&gt;大公司做机器人，不新鲜。&lt;/p&gt;

&lt;p&gt;Google 做过，Tesla 在做，Figure 在做，宇树在做，波士顿动力更是做了好多年。&lt;/p&gt;

&lt;p&gt;OpenAI 进来，只是让这件事的关注度一下子被拉高。&lt;/p&gt;

&lt;p&gt;我真正兴奋的是，这些线终于开始接上了。&lt;/p&gt;

&lt;p&gt;大模型给了 AI 一个大脑。&lt;/p&gt;

&lt;p&gt;世界模型让它理解现实。&lt;/p&gt;

&lt;p&gt;本地算力让它能快速反应。&lt;/p&gt;

&lt;p&gt;机器人给它一个身体。&lt;/p&gt;

&lt;p&gt;工厂、仓库、汽车、家庭，给它真实的任务场景。&lt;/p&gt;

&lt;p&gt;这些东西如果单独看，都有点散。&lt;/p&gt;

&lt;p&gt;但今天放在一起看，突然就像拼图一样，咔哒一下对上了。&lt;/p&gt;

&lt;p&gt;那种感觉挺奇妙的。&lt;/p&gt;

&lt;p&gt;就像过去几年我们一直在看一个孩子学说话。&lt;/p&gt;

&lt;p&gt;它会背诗，会写作文，会解题，会跟你聊天。&lt;/p&gt;

&lt;p&gt;我们已经觉得很厉害了。&lt;/p&gt;

&lt;p&gt;但是现在，它开始学走路了。&lt;/p&gt;

&lt;p&gt;走得肯定很笨。&lt;/p&gt;

&lt;p&gt;会摔。&lt;/p&gt;

&lt;p&gt;会撞墙。&lt;/p&gt;

&lt;p&gt;会把杯子打翻。&lt;/p&gt;

&lt;p&gt;甚至很长一段时间里，它看起来都不如一个两岁小孩。&lt;/p&gt;

&lt;p&gt;但是只要它开始学走路，这件事的性质就不一样了。&lt;/p&gt;

&lt;p&gt;因为一个会说话的 AI，是工具。&lt;/p&gt;

&lt;p&gt;一个会行动的 AI，可能就是新物种的雏形。&lt;/p&gt;

&lt;p&gt;我说新物种不是为了吓人。&lt;/p&gt;

&lt;p&gt;只是怎么说呢，当智能开始从屏幕里溢出来，进入桌面、工厂、街道、车间和家里，我们对 AI 的想象就会被迫更新。&lt;/p&gt;

&lt;p&gt;它不再只是一个窗口。&lt;/p&gt;

&lt;p&gt;它会变成环境的一部分。&lt;/p&gt;
&lt;h3 id="最后"&gt;最后&lt;/h3&gt;
&lt;p&gt;我不知道 OpenAI 的机器人项目会做到什么程度。&lt;/p&gt;

&lt;p&gt;也不知道第一代产品会不会翻车。&lt;/p&gt;

&lt;p&gt;甚至说实话，我觉得翻车概率不低。&lt;/p&gt;

&lt;p&gt;机器人太难了。&lt;/p&gt;

&lt;p&gt;硬件太难了。&lt;/p&gt;

&lt;p&gt;现实世界太难了。&lt;/p&gt;

&lt;p&gt;但是我依然觉得这条新闻值得认真看。&lt;/p&gt;

&lt;p&gt;因为它不是在告诉我们，明天就会有一个 ChatGPT 机器人走进家门。&lt;/p&gt;

&lt;p&gt;它是在告诉我们，AI 行业的想象力正在换地方。&lt;/p&gt;

&lt;p&gt;从聊天框，换到现实世界。&lt;/p&gt;

&lt;p&gt;从写一段话，换到做一件事。&lt;/p&gt;

&lt;p&gt;从回答问题，换到真正执行。&lt;/p&gt;

&lt;p&gt;大时代啊，朋友们。&lt;/p&gt;

&lt;p&gt;永远对世界保持好奇。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&amp;gt;&amp;gt;&amp;gt;&lt;strong&gt;相关资料&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI Robotics 招聘动态
&lt;a href="https://x.com/sama/status/2061117302528188712" rel="nofollow" target="_blank"&gt;https://x.com/sama/status/2061117302528188712&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVIDIA Cosmos 3
&lt;a href="https://developer.nvidia.com/blog/develop-physical-ai-reasoning-world-and-action-models-with-nvidia-cosmos-3" rel="nofollow" target="_blank"&gt;https://developer.nvidia.com/blog/develop-physical-ai-reasoning-world-and-action-models-with-nvidia-cosmos-3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Runway Cosmos Coalition
&lt;a href="https://runwayml.com/news/introducing-cosmos-coalition" rel="nofollow" target="_blank"&gt;https://runwayml.com/news/introducing-cosmos-coalition&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NVIDIA FOX 工厂运营蓝图
&lt;a href="https://blogs.nvidia.com/blog/factory-operations-fox-blueprint-ai-brain" rel="nofollow" target="_blank"&gt;https://blogs.nvidia.com/blog/factory-operations-fox-blueprint-ai-brain&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;上海服务业十五五规划相关报道
&lt;a href="https://www.ithome.com/0/957/985.htm" rel="nofollow" target="_blank"&gt;https://www.ithome.com/0/957/985.htm&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;p&gt;以上，既然看到这里了，如果觉得不错，随手&lt;strong&gt;点个赞、在看、转发&lt;/strong&gt;三连吧！想第一时间收到推送，可以给我个星标⭐️～&lt;/p&gt;

&lt;p&gt;谢谢你看我的文章，我们，下次再见。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/%E6%9C%AA%E5%91%BD%E5%90%8D%E7%9A%84%E8%AE%BE%E8%AE%A1.webp" title="" alt=""&gt;
&lt;em&gt;&amp;gt;/ 作者：大强同学&lt;/em&gt;
&lt;em&gt;&amp;gt;/ 更多干货，请访问：&lt;a href="https://www.dqtx.cc/" rel="nofollow" target="_blank" title=""&gt;dqtx.cc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
      <author>sphinx30</author>
      <pubDate>Mon, 01 Jun 2026 17:45:34 +0800</pubDate>
      <link>https://w2solo.com/topics/7472</link>
      <guid>https://w2solo.com/topics/7472</guid>
    </item>
    <item>
      <title>微软用 Go 重写 TypeScript 编译器，速度提升 10 倍，网友：这是 “背叛” 还是 “救赎”？</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;4 月 22 日，微软宣布 TypeScript 7.0 Beta 正式发布。这一次，TypeScript 团队干了一件让整个 JS 社区炸锅的事——他们把编译器和工具栈，&lt;strong&gt;从 TypeScript/JavaScript 底层完全移植到了 Go&lt;/strong&gt;。速度通常比 6.0 快约 10 倍。编译 VS Code 代码库从 78 秒缩到 7.5 秒。消息一出，有人叫好，有人愤怒，更多人在问：TypeScript 这是 “背叛” JavaScript 了吗？&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/193577746/c0b4ddf1-14e0-4129-80b4-f7a19e560bef.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="一、发生了什么？"&gt;一、发生了什么？&lt;/h2&gt;
&lt;p&gt;年初，微软官宣了一个叫 &lt;strong&gt;“Project Corsa”&lt;/strong&gt; 的计划：用 Go 语言，重写整个 TypeScript 编译器。不是 TypeScript，不是 Rust，是 Go。重写之后，编译速度预计提升&lt;strong&gt;10 倍&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;4 月 22 日，微软正式发布 TypeScript 7.0 Beta。在过去的近一年中，微软开发者将现有的 TypeScript 代码库从 TypeScript（作为编译成 JavaScript 的引导代码库）移植到了 Go。通过结合原生代码速度和共享内存并行性，TypeScript 7.0 的速度通常比 TypeScript 6.0 快约 10 倍。&lt;/p&gt;
&lt;h2 id="二、为什么有人“吵翻了”？"&gt;二、为什么有人 “吵翻了”？&lt;/h2&gt;
&lt;p&gt;消息一出，社区立刻分裂。&lt;strong&gt;支持派&lt;/strong&gt;说：“终于！大型项目编译几分钟的时代，终于要结束了。”&lt;strong&gt;反对派&lt;/strong&gt;说：“TypeScript 自己都是用 TypeScript 写的，这是灵魂。用 Go 重写？这是 ‘背叛’。”&lt;/p&gt;

&lt;p&gt;最大的争议点：&lt;strong&gt;为什么选 Go，而不是 Rust？&lt;/strong&gt; 这是问得最多的问题。微软给出的解释包括：Go 的编程风格与现有 TypeScript 代码库高度相似，移植更容易；&lt;code&gt;goroutine&lt;/code&gt;原生支持并行类型检查；垃圾回收针对这种超大量小对象的编译器场景优化得很好；TypeScript 团队已有 Go 经验。&lt;/p&gt;
&lt;h2 id="三、一个细节：为啥TypeScript 6.0比7.0更早发布？"&gt;三、一个细节：为啥 TypeScript 6.0 比 7.0 更早发布？&lt;/h2&gt;
&lt;p&gt;微软实际上是在 TypeScript 6.0 发布前就启动了 Go 重写计划。他们把 6.0 定位为 “基于 JS 编译器的最后一个版本”，所以 7.0 才是真正的 Go 重写版。&lt;/p&gt;
&lt;h2 id="四、实际体验：真的能快10倍吗？"&gt;四、实际体验：真的能快 10 倍吗？&lt;/h2&gt;
&lt;p&gt;微软自家的 VS Code 代码库约 150 万行 TypeScript，旧编译器编译约 78 秒，新&lt;code&gt;tsgo&lt;/code&gt;只用了 7.5 秒，&lt;strong&gt;快 10.4 倍&lt;/strong&gt;。Playwright 和 TypeORM 等项目也报告了约 10-13 倍的性能提升。&lt;/p&gt;

&lt;p&gt;在编辑器方面，导入补全、快速跳转、查找所有引用的响应时间也大幅缩短，内存使用量约为旧版的一半。&lt;/p&gt;
&lt;h2 id="五、兼容性：需要改代码吗？"&gt;五、兼容性：需要改代码吗？&lt;/h2&gt;
&lt;p&gt;官方强调新的 Go 代码库是从现有实现中系统性移植而来，类型检查逻辑与 TypeScript 6.0 完全一致，不需要为新编译器重构代码。新&lt;code&gt;tsgo&lt;/code&gt;命令行工具与旧&lt;code&gt;tsc&lt;/code&gt;参数行为完全兼容。&lt;/p&gt;
&lt;h2 id="六、试用：今天就能用"&gt;六、试用：今天就能用&lt;/h2&gt;
&lt;p&gt;目前通过&lt;code&gt;@typescript/native-preview&lt;/code&gt;包名安装，命令行入口是&lt;code&gt;tsgo&lt;/code&gt;。官方表示稳定的程序化 API 预计要到 7.1 版本。&lt;/p&gt;
&lt;h2 id="七、最后"&gt;七、最后&lt;/h2&gt;
&lt;p&gt;TypeScript 团队用 Go 重写编译器，让大型项目编译从 “喝杯咖啡” 变成 “眨个眼”。有人解读为 “背叛”，但也许更像一次务实的 “脱胎换骨”。&lt;/p&gt;

&lt;p&gt;你愿意现在就装个 Beta 版试试吗？10 倍速，值得一试。&lt;/p&gt;
&lt;h2 id="八、代码块：立刻体验"&gt;八、代码块：立刻体验&lt;/h2&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 在现有项目中安装 TS 7.0 Beta&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @typescript/native-preview@beta

&lt;span class="c"&gt;# 使用新编译器检查类型（体验10倍速度）&lt;/span&gt;
npx tsgo &lt;span class="nt"&gt;--noEmit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你会为了 10 倍速尝鲜 Beta 版吗？评论区聊聊你的选择。&lt;strong&gt;点个赞让我看到有多少人已经换上了&lt;/strong&gt;。&lt;/p&gt;</description>
      <author>193577746</author>
      <pubDate>Sun, 31 May 2026 23:10:01 +0800</pubDate>
      <link>https://w2solo.com/topics/7466</link>
      <guid>https://w2solo.com/topics/7466</guid>
    </item>
    <item>
      <title>我用 Deskflow 后，终于把第二套键鼠扔进抽屉了</title>
      <description>&lt;p&gt;多台电脑同时干活，桌上摆几套键鼠又占地方又割裂。最近找到一款&lt;strong&gt;Deskflow&lt;/strong&gt;软件，支持 Windows 和 macOS，一套键鼠就能控制多台设备，局域网即连即用。&lt;/p&gt;

&lt;p&gt;鼠标移动到屏幕边缘自动滑到另一台电脑，就像多显示器一样自然。同时支持&lt;strong&gt;剪贴板共享&lt;/strong&gt;，在一台设备复制文字、图片，另一台直接粘贴。&lt;/p&gt;

&lt;p&gt;开源地址
&lt;a href="https://github.com/deskflow/deskflow/releases" rel="nofollow" target="_blank"&gt;https://github.com/deskflow/deskflow/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/cover-deskflow-keyboard-sharing-20260529-202419.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="配置步骤"&gt;配置步骤&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;前置条件&lt;/strong&gt;：所有设备连在同一个局域网。&lt;/p&gt;

&lt;p&gt;一、在&lt;strong&gt;常用键鼠的那台电脑&lt;/strong&gt;上，选择 默认项目，点启动。记下界面显示的 IP 地址。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/1780123005581_d.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;二、在&lt;strong&gt;被控制的电脑&lt;/strong&gt;上，选择 第个项目 模式，输入刚才的 IP，点连接。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/2026-05-30-14-39.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;三、连接成功后，鼠标就能在两台设备间自由移动了，剪贴板也自动共享。&lt;/p&gt;

&lt;p&gt;注意  被控右边出 主控左边进
如果你想上下移动，只需在主控配置服务器，将计算机显示器拖动到所需位置来配置布局。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/1780123261423_d.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tips&lt;/em&gt;：若遇网络问题，可通过公众号：&lt;strong&gt;大强同学&lt;/strong&gt; 后台回复 &lt;strong&gt;Deskflow&lt;/strong&gt;，领取最新安装包下载地址。&lt;/p&gt;
&lt;h3 id="常见问题"&gt;常见问题&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;连不上？&lt;/strong&gt; 两个检查点：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;确保两个计算机名字不要唯一&lt;/li&gt;
&lt;li&gt;关闭防火墙试试&lt;/li&gt;
&lt;li&gt;在编译 → 首选项里关闭 TLS 加密&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;工具自带简体中文，在编辑 - 首选项 - 高级 - 语言，唯一的短板是不支持文件拖拽传输，但这属于锦上添花，日常操作已经够用了。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&amp;gt;&amp;gt;&amp;gt;&lt;strong&gt;延伸阅读&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/Pb6wnycAxgDxZmvj4cfx9Q" rel="nofollow" target="_blank" title=""&gt;1 套键盘鼠标控制 2 台电脑&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="- MFCMouseEffect鼠标映射"&gt;- &lt;a href="https://mp.weixin.qq.com/s/YuyO7YIVx4XkCgxjaBJ22Q" rel="nofollow" target="_blank" title=""&gt;MFCMouseEffect 鼠标映射&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;以上，既然看到这里了，如果觉得不错，随手&lt;strong&gt;点个赞、在看、转发&lt;/strong&gt;三连吧！想第一时间收到推送，可以给我个星标⭐️～&lt;/p&gt;

&lt;p&gt;谢谢你看我的文章，我们，下次再见。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/%E6%9C%AA%E5%91%BD%E5%90%8D%E7%9A%84%E8%AE%BE%E8%AE%A1.webp" title="" alt=""&gt;
&lt;em&gt;&amp;gt;/ 作者：大强同学&lt;/em&gt;
&lt;em&gt;&amp;gt;/ 更多干货，请访问：&lt;a href="https://www.dqtx.cc/" rel="nofollow" target="_blank" title=""&gt;dqtx.cc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
      <author>sphinx30</author>
      <pubDate>Sun, 31 May 2026 15:21:27 +0800</pubDate>
      <link>https://w2solo.com/topics/7464</link>
      <guid>https://w2solo.com/topics/7464</guid>
    </item>
    <item>
      <title>面试 8 家前端岗位后，我发现了一个残酷的事实：AI 不是加分项，是门槛</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;上个月，我集中面试了 8 家公司的前端岗位，有大厂、有中厂、也有创业公司。投简历、刷题、背八股、跑现场……一套流程走下来，最让我意外的不是算法题的难度，而是——&lt;strong&gt;每一家都问了同一个问题：“你平时用 AI 编程工具吗？”&lt;/strong&gt; 不是随口一问，是认真地问：用的什么？怎么用的？有没有具体的提效案例？有一家甚至让我现场打开 Cursor，写一个组件。我突然意识到：AI 已经不是加分项了，它正在变成门槛。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="一、面试官的“新标配问题”"&gt;一、面试官的 “新标配问题”&lt;/h2&gt;
&lt;p&gt;8 场面试，所有面试官都问了 AI 工具相关的问题。我把它们分成三类：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一类：基础使用题&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“你平时用 Copilot 还是 Cursor？”&lt;/li&gt;
&lt;li&gt;“大概用多久了？感觉怎么样？”
这种问题比较温和，像在确认你 “跟上了时代”。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;第二类：场景应用题&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“你用 AI 做过 Code Review 吗？效果如何？”&lt;/li&gt;
&lt;li&gt;“有没有遇到 AI 生成的代码有坑的情况？”
这类问题已经开始考察你的实际经验和判断力。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;第三类：现场实操题&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“打开你的编辑器，用 AI 写一个带防抖的搜索组件。”&lt;/li&gt;
&lt;li&gt;“这段 AI 生成的代码有明显 bug，你能找出来吗？”
这类问题最狠。面试官不是在考你背不背得出代码，而是考你会不会审查和优化 AI 写的代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="二、一位面试官的原话"&gt;二、一位面试官的原话&lt;/h2&gt;
&lt;p&gt;有一场面试，面试官看了我的简历后说：“我们团队现在重度依赖 Cursor，写代码的效率确实高。但我们也发现，AI 写的代码容易出边界问题、性能隐患。我们要的不是只会敲回车的人，而是能看懂 AI 代码、能发现问题的人。”&lt;/p&gt;

&lt;p&gt;他说：“你面试通过后，入职第一周的任务就是熟悉我们的 AI 辅助开发规范——哪些场景可以用 AI，哪些必须手写，怎么 review AI 生成的 PR。”&lt;/p&gt;
&lt;h2 id="三、我的感受：不是恐慌，是压力"&gt;三、我的感受：不是恐慌，是压力&lt;/h2&gt;
&lt;p&gt;说实话，我并不恐慌。我会用 AI，也知道怎么用好它。但压力是真实的：这意味着我要额外花时间研究 AI 编程工具的最佳实践、学习如何引导 AI 生成高质量代码、培养自己 review AI 代码的能力。以前面试只要会算法、会框架、会系统设计。现在还要再加一门课：&lt;strong&gt;AI 辅助开发实战&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;而且这个领域变化很快。去年还在问 “你听说过 Copilot 吗”，今年已经问 “你用 AI 重构过屎山吗”。明年会问什么？我不敢想。&lt;/p&gt;
&lt;h2 id="四、给同行的建议（也是给自己的）"&gt;四、给同行的建议（也是给自己的）&lt;/h2&gt;
&lt;p&gt;如果你还没有系统性地使用 AI 编程工具，建议尽快补上。可以从这几方面入手：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;选择一个主力工具&lt;/strong&gt;：Cursor 或 Copilot，至少用熟一个。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;学习写 Prompt&lt;/strong&gt;：不要只让 AI 生成 “一个函数”，要给出清晰的输入输出、边界条件、性能要求。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;重视 review 能力&lt;/strong&gt;：遇到 AI 生成的代码，多问自己 “这段代码哪里可能出问题”。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;积累失败案例&lt;/strong&gt;：面试时讲一个 “AI 生成的 bug 被你发现并修复” 的故事，比单纯说我用了 AI 更有说服力。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="五、最后"&gt;五、最后&lt;/h2&gt;
&lt;p&gt;这不是贩卖焦虑，而是描述事实：2026 年的前端面试，AI 工具使用能力已经成为一道必答题。&lt;/p&gt;</description>
      <author>193577746</author>
      <pubDate>Sat, 30 May 2026 15:01:41 +0800</pubDate>
      <link>https://w2solo.com/topics/7454</link>
      <guid>https://w2solo.com/topics/7454</guid>
    </item>
    <item>
      <title>把 NotebookLM 塞进 Obsidian，一句话生成 PPT、播客和报告</title>
      <description>&lt;p&gt;NotebookLM 的 AI 能力对 Obsidian 是极好的补充——Deep Research、Audio Overview、PPT 生成，每一样都实用。但问题是每次都要开网页、手动传文件，笔记一多简直是灾难。&lt;/p&gt;

&lt;p&gt;今天教你用 Claude Code 把 NotebookLM 的全部功能塞进 Obsidian。不用打开浏览器，不用花一分钱 API Token，在笔记库里一句话就能跑 Deep Research、自动生成 PPT 和播客音频。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/cover-obsidian-notebooklm-20260530-132958.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="notebooklm可以做什么"&gt;notebooklm 可以做什么&lt;/h3&gt;
&lt;p&gt;我开始之前，我们现回顾一下，notebooklm 到底可以做什么？首先，它的定位是一个 AI 研究助理。&lt;strong&gt;只在你上传的资料里做问答、总结、分析、生成播客 / 脑图 / 报告，全程可溯源、幻觉极低&lt;/strong&gt;。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;音频概览 --- 播客&lt;/li&gt;
&lt;li&gt;演示文稿---PPT&lt;/li&gt;
&lt;li&gt;视频概览 --- 讲解视频&lt;/li&gt;
&lt;li&gt;思维导图 --- 结构化脑图&lt;/li&gt;
&lt;li&gt;报告 --- 完整分析报告&lt;/li&gt;
&lt;li&gt;闪卡 --- 记忆卡片&lt;/li&gt;
&lt;li&gt;测验 --- 自测题/试卷&lt;/li&gt;
&lt;li&gt;信息图 --- 可视化图表方案&lt;/li&gt;
&lt;li&gt;数据表格 --- 结构化数据表&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/20260529150213345.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="环境准备"&gt;环境准备&lt;/h3&gt;
&lt;p&gt;开始之前，确保你的环境有以下东西：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://claude.com/product/claude-code" rel="nofollow" target="_blank" title=""&gt;Claude Code&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/teng-lin/notebooklm-py" rel="nofollow" target="_blank" title=""&gt;NotebookLM-py&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://obsidian.md/zh/" rel="nofollow" target="_blank" title=""&gt;Obsidian&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;装上之后，你只需要在 Claude Code 中用自然语言描述需求，剩下的全自动——创建笔记本、导入资料、生成内容、导出文件，全在 Obsidian 内部完成。下面用三个案例，从简单到复杂，展示这套工作流的实际威力。&lt;/p&gt;
&lt;h3 id="场景案例"&gt;场景案例&lt;/h3&gt;&lt;h4 id="01：Deep Research + 自动生成 PPT"&gt;01：Deep Research + 自动生成 PPT&lt;/h4&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;使用 notebooklm skill，对 'Claude code vs Hermes Agent' 进行Web深度研究（Deep Research）。将搜集到的相关信源自动建立 NotebookLM，把所有被引用文献的全文（Markdown 格式）导出并存放到 01-输入/Notebooklm/Claude code vs Hermes Agent目录，最后生成一份中文演示文稿（Slide Deck），存入我桌面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Claude code 开始执行，最后的产出清单&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;01-输入/Notebooklm/下面单文件夹，10 个 mrkdown 文献全网&lt;/li&gt;
&lt;li&gt;桌面一份中文的演示 PPT
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/20260528030245156.webp" title="" alt=""&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;跑通后，我想到这样的事情，以后我会经常干，于是我马上让他创建了一个工作流，就是 skill，以后我主要给他主题，就可以了。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;帮我创建一个技能，名字叫Notebooklm-DeepResearch-ppt 让我给你一个研究主题，你需要调用notebooklm skill 对给出的主题进行Web深度研究（Deep Research）。将搜集到的相关信源自动建立 NotebookLM，把所有被引用文献的全文（Markdown 格式）导出并存放到 01-输入/Notebooklm/ 单独文件文件夹（创建一个主题名字） 最后使用提示词Xenia/3D风格PPT风格"生成一份中文演示文稿（Slide Deck），存入我桌面
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="02：零基础 AI 学习——从规划到落地页全自动"&gt;02：零基础 AI 学习——从规划到落地页全自动&lt;/h4&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;我是一个完全零基础的AI小白，希望从几个不同维度学习AI，既能赶上时代潮流，也能在未来从事相关工作。结合2026年AI发展的趋势，请为我推荐3到4个必须彻底掌握的具体领域，以及1到2个未来需要进阶的潜在领域。请给出这5个不同方向的主题，并分别做出简要解释。

同时请使用notebooklm py在NotebookLM上分别创建5个涵盖不同领域的独立笔记本。针对每个主题，都要使用其“源文件”（Sources）功能，并确保每个笔记本都包含内容丰富、来源多样的资料。同时，请务必注意信息的时效性与可靠性。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/20260529150910343.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;帮我将你搜集到的内容全部自动导入到各自的笔记本里面，并且针对每一个笔记本都帮我制作一张中文信息图，下载到我桌面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/wezterm-gui_QLGAdQbH2z.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;另外，请根据我nbookLM里面的内容，帮我在01-输入/Learning制定一个一个月的学习计划，包含我一定需要看到的youtube链接，并且我需要你帮我筛选一下视频的质量。我需要发布时间在6个月以内播放量在1万以上的视频。同时请直接在左侧的项目中帮我创建这份计划书。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/20260529162354004.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;根据我从NotebookLM中提取的内容，这份学习计划，帮我创建一个可以交互的落地页，我需要简单的功能是可以进学习进度的追踪，自由标记我的学习进度，页UI要好看，内部链接点击可以直接跳转。搞完直接使用内部的浏览器帮我打开我要测试一下功能
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/20260529162705398.webp" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="03：本地笔记 → 测验 + 播客 + 信息图"&gt;03：本地笔记 → 测验 + 播客 + 信息图&lt;/h4&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;读取我本地 01-输入 文件夹下的所有有关 claude code 的笔记。使用 notebooklm skill，利用这些笔记在 NotebookLM 中创建一个笔记本，并生成一套困难难度的 Quiz 测验，一部辩论格式的音频（Audio Overview），和一份资讯图表（Infographic），将生成的测验以 Markdown 格式保存到项目根目录中，将生成的音频和资讯图表下载到项目根目录中。注意：测验、音频和资讯图表都要使用中文。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个留给你作为作业，自己去体验。&lt;/p&gt;
&lt;h3 id="写在最后"&gt;写在最后&lt;/h3&gt;
&lt;p&gt;三个案例，从简单到复杂，核心就一句话：&lt;strong&gt;把「手动操作网页」变成「一句话指令」&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;以前用 NotebookLM：打开浏览器 → 登录 → 创建笔记本 → 一个一个上传文件 → 手动点生成 → 手动点导出。笔记多了以后，光管理笔记本就能把你耗死。&lt;/p&gt;

&lt;p&gt;现在你只需要在 Obsidian 里敲一行自然语言，Claude Code 帮你跑完所有步骤。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/a40746dd7c4aef1a757eedac61ca79e9.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&amp;gt;&amp;gt;&amp;gt;&lt;strong&gt;延伸阅读&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/x4sm7GXpoUoIepKmtooKAw" rel="nofollow" target="_blank" title=""&gt;Obsidian CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/kN-_KSwWkOlpZDXAURgcEA" rel="nofollow" target="_blank" title=""&gt;飞书 lark-cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/SzknpTNdxzXLYvfw_VjW9w" rel="nofollow" target="_blank" title=""&gt;滴答清单 Mcp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="- Agent-Reach最佳实践"&gt;- &lt;a href="https://mp.weixin.qq.com/s/XT5r6yFaXHa63T3Qg_Oi7w" rel="nofollow" target="_blank" title=""&gt;Agent-Reach 最佳实践&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;以上，既然看到这里了，如果觉得不错，随手&lt;strong&gt;点个赞、在看、转发&lt;/strong&gt;三连吧！想第一时间收到推送，可以给我个星标⭐️～&lt;/p&gt;

&lt;p&gt;谢谢你看我的文章，我们，下次再见。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/%E6%9C%AA%E5%91%BD%E5%90%8D%E7%9A%84%E8%AE%BE%E8%AE%A1.webp" title="" alt=""&gt;
&lt;em&gt;&amp;gt;/ 作者：大强同学&lt;/em&gt;
&lt;em&gt;&amp;gt;/ 更多干货，请访问：&lt;a href="https://www.dqtx.cc/" rel="nofollow" target="_blank" title=""&gt;dqtx.cc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
      <author>sphinx30</author>
      <pubDate>Sat, 30 May 2026 13:51:51 +0800</pubDate>
      <link>https://w2solo.com/topics/7453</link>
      <guid>https://w2solo.com/topics/7453</guid>
    </item>
    <item>
      <title>我做了一个可以假装正在 vibe coding 的 web 程序</title>
      <description>&lt;p&gt;网站：&lt;a href="https://fakevibecode.com/" rel="nofollow" target="_blank" title=""&gt;https://fakevibecode.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FakeVibeCode 是一个 “假装在写代码” 的 AI 编程终端模拟器。&lt;/p&gt;

&lt;p&gt;它可以在浏览器里播放一段看起来非常真实的 Claude Code 或 Codex CLI 编程过程：分析项目、读取文件、制定计划、修改代码、展示 diff、运行测试、输出总结。整个过程看起来像真的 AI coding agent 正在忙碌工作，但实际上它不会运行任何命令，也不会修改任何文件。&lt;/p&gt;

&lt;p&gt;你可以把它用于直播背景、产品演示、截图、短视频、开发者玩笑，或者在屏幕共享时让自己的终端看起来很忙。&lt;/p&gt;

&lt;p&gt;打开页面，选择 Fake Claude 或 Fake Codex，进入全屏，然后让终端自己表演。&lt;/p&gt;

&lt;p&gt;它不生产代码，但很会生产 “我正在认真工作” 的氛围。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/kphcdr/62691b17-6918-4d20-958a-570cffbe417c.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/kphcdr/bee4c919-09e3-49f9-bce7-e43ea27e5602.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/kphcdr/d4234b63-ee93-42be-a32c-865c85f0a696.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>kphcdr</author>
      <pubDate>Fri, 29 May 2026 18:33:50 +0800</pubDate>
      <link>https://w2solo.com/topics/7452</link>
      <guid>https://w2solo.com/topics/7452</guid>
    </item>
    <item>
      <title>液晶段码 LCD 驱动低功耗液晶屏驱动 LCD 芯片 VKL128</title>
      <description>&lt;p&gt;一，概述 VKL128 是一个点阵式存储映射的 LCD 驱动器,可支持最大 128 点（32SEGx4COM）的 LCD 屏。单片机可通过 I2C 接口配置显 示参数和读写显示数据，可配置 4 种功耗模式，也可通过关显 示进入省电模式。其高抗干扰,超低功耗的特性适用于水电气 表以及工控仪表类产品。Z113+300&lt;/p&gt;

&lt;p&gt;二特点
• 工作电压 2.5-5.5V&lt;/p&gt;

&lt;p&gt;• 内置 32 kHz RC 振荡器&lt;/p&gt;

&lt;p&gt;• 偏置电压（BIAS）可配置为 1/2、1/3 &lt;/p&gt;

&lt;p&gt;• COM 周期（DUTY）为 1/4&lt;/p&gt;

&lt;p&gt;• 内置显示 RAM 为 32x4 位&lt;/p&gt;

&lt;p&gt;• 帧频 80Hz/71Hz/64Hz/53Hz 可调 &lt;/p&gt;

&lt;p&gt;• 省电模式（通过关显示进入）&lt;/p&gt;

&lt;p&gt;• 可配置 4 种功耗模式&lt;/p&gt;

&lt;p&gt;• I2C 通信接口&lt;/p&gt;

&lt;p&gt;• 显示模式 32x4 &lt;/p&gt;

&lt;p&gt;• 3 种显示整体闪烁频率&lt;/p&gt;

&lt;p&gt;• 软件配置 LCD 显示参数&lt;/p&gt;

&lt;p&gt;• 读写显示数据地址自动加 1 &lt;/p&gt;

&lt;p&gt;• VLCD 脚提供 LCD 驱动电压（≤VDD）&lt;/p&gt;

&lt;p&gt;• 内置上电复位电路 (POR)&lt;/p&gt;

&lt;p&gt;• 超低功耗、高抗干扰&lt;/p&gt;

&lt;p&gt;• 封装 LQFP44(10.0mm x 10.0mm PP=0.8mm).&lt;/p&gt;

&lt;p&gt;三应用领域&lt;/p&gt;

&lt;p&gt;• 面板手表 • 医疗仪器&lt;/p&gt;

&lt;p&gt;LCD 驱动、液晶显示 IC、LCD 显示、液晶显示、显示 LCD、段码液晶屏驱动、LCD 液晶显示、段码屏 LCD 驱动、LCD 显示驱动芯片、LCD 显示驱动 IC、液晶驱动原厂、LCD 屏驱动、液晶屏驱动、驱动 LCD、驱动液晶、LCD 驱动控制器、液晶显示驱动原厂、段码 LCD 驱动、液晶段码屏驱动、液晶显示驱动芯片、点阵式液晶显示驱动、点阵式液晶显示 IC、液晶驱动 IC、液晶驱动芯片、LCD 芯片、液晶芯片、液晶驱动控制器、液晶 IC、段码驱动显示 IC、笔段式液晶驱动、LCD 液晶显示驱动、液晶 LCD 显示驱动、段码屏驱动厂家、段码驱动 IC、段码驱动芯片、段码屏显 IC、&lt;/p&gt;

&lt;p&gt;高抗干扰 LCD 液晶控制器及驱动系列:
VK1C21A  2.4～5.2V  32seg*4com       偏置电压 1/2 1/3  3 线/4 线通讯接口   SSOP48；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK1C21B  2.4～5.2V  32seg*4com       偏置电压 1/2 1/3  3 线/4 线通讯接口   LQFP48；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK1C21C  2.4～5.2V  32seg*4com       偏置电压 1/2 1/3  3 线通讯接口        LQFP44；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK1C21D  2.4～5.2V  18seg*4com       偏置电压 1/2 1/3  3 线通讯接口    SOP28  高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK1C21DA  2.4～5.2V  18seg*4com       偏置电压 1/2 1/3  3 线通讯接口    SSOP28 高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK1C21E   2.4～5.2V  14seg*4com       偏置电压 1/2 1/3  3 线通讯接口    SOP24  高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK1C21EA   2.4～5.2V  14seg*4com       偏置电压 1/2 1/3  3 线通讯接口    SSOP24 高抗干扰/抗噪/低功耗
———————————————————————————————————————————————————
VK2C21A  2.4～5.5V  20seg*4com  16*8  偏置电压 1/3 1/4  I2C 通讯接口   SOP28；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C21AA  2.4～5.5V  20seg*4com  16*8  偏置电压 1/3 1/4  I2C 通讯接口   SSOP28；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C21B  2.4～5.5V  16seg*4com  12*8  偏置电压 1/3 1/4  I2C 通讯接口  SOP24；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C21BA  2.4～5.5V  16seg*4com  12*8  偏置电压 1/3 1/4  I2C 通讯接口  SSOP24；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C21C  2.4～5.5V  12seg*4com  8*8   偏置电压 1/3 1/4  I2C 通讯接口  SOP20；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C21D  2.4～5.5V  8seg*4com  4*8  偏置电压 1/3 1/4  I2C 通讯接口  NSOP16；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C22A  2.4～5.5V    44seg*4com      偏置电压 1/2 1/3  I2C 通讯接口  LQFP52；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C22B  2.4～5.5V  40seg*4com      偏置电压 1/2 1/3  I2C 通讯接口  LQFP48；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C23A  2.4～5.5V  56seg*4com   52*8 偏置电压 1/3 1/4  I2C 通讯接口  LQFP64；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C23B  2.4～5.5V  36seg*8com      偏置电压 1/3 1/4   I2C 通讯接口  LQFP48；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗&lt;/p&gt;

&lt;p&gt;VK2C24A  2.4～5.5V  72seg*4com  68*8 60*16  偏置电压 1/3 1/4 1/5  I2C 通讯接口  LQFP80；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗
VK2C24B  2.4～5.5V  56seg*4com  52*8 44*16  偏置电压 1/3 1/4 1/5  I2C 通讯接口  LQFP64；DICE/DIE 裸片 (绑定 COB)；COG(绑定玻璃)     高抗干扰/抗噪/低功耗
——————————————————————————————————————————————————
超低功耗 LCD 液晶控制器及驱动系列:
VKL060   2.5～5.5V 15seg*4com  偏置电压 1/2 1/3  I2C 通讯接口 SSOP24  超低功耗/抗干扰&lt;/p&gt;

&lt;p&gt;VKL076   2.5～5.5V 19seg*4com  偏置电压 1/2 1/3  I2C 通讯接口 SSOP28  超低功耗/抗干扰&lt;/p&gt;

&lt;p&gt;VKL128   2.5～5.5V 32seg*4com  偏置电压 1/2 1/3  I2C 通讯接口 LQFP44  超低功耗/抗干扰&lt;/p&gt;

&lt;p&gt;VKL144A  2.5～5.5V 36seg*4com  偏置电压 1/2 1/3  I2C 通讯接口 TSSOP48 超低功耗/抗干扰&lt;/p&gt;

&lt;p&gt;VKL144B  2.5～5.5V  36seg*4com  偏置电压 1/2 1/3  I2C 通讯接口 QFN48(6*6 超小体积) 超低功耗/抗干扰
——————————————————————————————————————————————————&lt;/p&gt;

&lt;p&gt;LCD 显示 IC、笔段式 LCD 驱动、LCD 显示芯片、段码屏显示 IC、段码屏显示芯片、LCD 段码液晶驱动、段码 LCD 液晶驱动、段码驱动原厂、液晶显示芯片、段式液晶驱动、段码显示 IC、LCD 液晶屏驱动、笔段 LCD 驱动、LCD 段码屏驱动、液晶屏驱动 IC、液晶屏驱动芯片、液晶段码 LCD 驱动、液晶 LCD 段码驱动、LCD 驱动器、液晶驱动电路、LCD 驱动 IC、断码 LCD 驱动、段码屏驱动原厂、LCD 驱动厂家、LCD 屏驱动 IC、点阵式 LCD 驱动、LCD 屏驱动芯片、点阵段码屏驱动、点阵液晶屏驱动、段码液晶驱动芯片、段码屏驱动、LCD 驱动原厂、LCD 驱动芯片、LCD 段码驱动、LCD 液晶驱动、液晶驱动 IC 原厂、液晶显示驱动 IC、点阵 LCD 驱动、段式 LCD 驱动、LCD 显示驱动、液晶显示驱动、段码液晶驱动
&lt;img src="https://img.way2solo.com/photo/18124687938/76f5f8e2-1c88-425f-96c5-845a1f5419ea.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/18124687938/cb1990fe-bee3-456b-946a-fc1536c0eb26.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/18124687938/6a826906-c103-4a7a-ac95-9da559894f12.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/18124687938/d4ad9571-3d4f-46d0-acc5-5c8fd983e418.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/18124687938/13018547-bb65-40ec-8b21-f270ed8c423d.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;
&lt;img src="https://img.way2solo.com/photo/18124687938/8a3b31c2-c5a6-4cad-965f-b0a113eea1a0.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>18124687938</author>
      <pubDate>Fri, 29 May 2026 14:44:07 +0800</pubDate>
      <link>https://w2solo.com/topics/7451</link>
      <guid>https://w2solo.com/topics/7451</guid>
    </item>
    <item>
      <title>在 Claude code 把想法写入滴答清单</title>
      <description>&lt;p&gt;今天发生了一件事，让我觉得必须写下来。&lt;/p&gt;

&lt;p&gt;一个朋友问我，他是个 AI 小白，想学 AI，让我帮他规划一下学习路径。&lt;/p&gt;

&lt;p&gt;我就根据 2026 年的趋势，给他推荐了几个方向。推荐完之后，我突然想到，光说没用啊，得让他能执行才行。&lt;/p&gt;

&lt;p&gt;于是我说，要不我帮你写进滴答清单吧。&lt;/p&gt;

&lt;p&gt;他说好啊。&lt;/p&gt;

&lt;p&gt;然后我就在终端里敲了几句话，Claude Code 自动调用滴答清单的 API，帮他创建了一个项目，6 个任务，带优先级，带标签，带具体的落地步骤。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/64dcc692ed675c02cdbead093fb090bc.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;全自动。&lt;/p&gt;

&lt;p&gt;他去手机上打开滴答清单，项目在，任务在，直接就能开始执行。&lt;/p&gt;

&lt;p&gt;整个过程，我从头到尾没打开过滴答清单的 APP、网页。&lt;/p&gt;
&lt;h3 id="这事的核心是什么"&gt;这事的核心是什么&lt;/h3&gt;
&lt;p&gt;你想想看，我们平时有一个想法，想把它记下来，要经历什么？&lt;/p&gt;

&lt;p&gt;打开手机，找到滴答清单，点新建，选项目，填标题，写内容，设优先级，打标签。一个简单的学习计划，可能要花十分钟才能录完。&lt;/p&gt;

&lt;p&gt;但如果你正在跟 Claude Code 聊天，突然想到一个事，你可以直接说，帮我写进滴答清单。&lt;/p&gt;

&lt;p&gt;它就帮你写进去了。&lt;/p&gt;

&lt;p&gt;你甚至不需要切换应用，不需要打开滴答清单，不需要手动输入任何东西。你只需要专注于「我到底想干什么」，具体怎么执行，AI 帮你搞定。&lt;/p&gt;

&lt;p&gt;然后你拿起手机，打开滴答清单，该做的事情都在那里了。&lt;/p&gt;

&lt;p&gt;这种感觉怎么说呢，就像你脑子里的想法，直接「传送」到了你的任务清单里。&lt;/p&gt;
&lt;h3 id="怎么做到的"&gt;怎么做到的&lt;/h3&gt;
&lt;p&gt;配置过程其实没那么复杂，大概十分钟。&lt;/p&gt;

&lt;p&gt;你需要先装好 Claude Code，然后在终端里运行这个命令：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude mcp add --transport http dida365 https://mcp.dida365.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行之后，Claude Code 会弹出一个 OAuth 授权窗口，你点一下同意就行。&lt;/p&gt;

&lt;p&gt;授权完成后，Claude Code 就具备了操作你滴答清单的能力。&lt;/p&gt;

&lt;p&gt;如果你有自己的 Bearer Token，也可以用这种方式配置：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude mcp add --transport http dida365 https://mcp.dida365.com --header "Authorization: Bearer YOUR_TOKEN_HERE"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置完之后，你可以在 Claude Code 里输入&lt;code&gt;/mcp&lt;/code&gt;，看看滴答清单的连接状态是不是显示成功。如果成功了，就可以开始用了。&lt;/p&gt;

&lt;p&gt;整个过程真的十分钟，不需要你懂代码，照着来就行。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/20260529140417850.webp" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;详细的滴答清单 MCP 官方文档&lt;/strong&gt;
&lt;a href="https://help.dida365.com/articles/7438132116019216384" rel="nofollow" target="_blank"&gt;https://help.dida365.com/articles/7438132116019216384&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="刚才那个案例是怎么回事"&gt;刚才那个案例是怎么回事&lt;/h3&gt;
&lt;p&gt;回到我朋友那个事。&lt;/p&gt;

&lt;p&gt;他问我学 AI 怎么入门，我给他推荐了 6 个方向，每个方向都写了具体的落地任务。&lt;/p&gt;

&lt;p&gt;然后我直接在 Claude Code 里说，帮我写进滴答清单，项目名叫「AI 学习计划 - 零基础入门」。
&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/1071706eb3d1d924fc5529c7e9608de5.webp" title="" alt=""&gt;
Claude Code 就开始工作了。它先调用滴答清单的 API，创建了一个新项目。然后批量创建了 6 个任务，每个任务都有标题、内容、优先级、标签。&lt;/p&gt;

&lt;p&gt;内容写得还挺详细的，每个任务都包含「为什么必须学」和「落地任务」两个部分。比如第一个任务是「AI 提示工程基础」，落地任务是「注册 ChatGPT/Claude 账号，完成 10 次基础对话练习」「学习提示词模板：角色扮演、分步指令、输出格式控制」「完成一个实际项目：用 AI 写一份工作汇报」「建立个人提示词库，收集 10 个常用模板」。&lt;/p&gt;

&lt;p&gt;这种任务，你拿到手就能直接执行，不需要再花时间想「我该从哪里开始」。&lt;/p&gt;

&lt;p&gt;朋友去手机上打开滴答清单，项目在，任务在，他直接开始做第一个任务就行了。&lt;/p&gt;
&lt;h3 id="为什么我觉得这事挺重要的"&gt;为什么我觉得这事挺重要的&lt;/h3&gt;
&lt;p&gt;你知道吗，我们每天有很多想法，但真正被记录下来的，可能不到十分之一。&lt;/p&gt;

&lt;p&gt;不是因为懒，是因为记录的成本太高了。你要打开应用，要组织语言，要选分类，要设提醒。很多想法就在这个过程中被放弃了。&lt;/p&gt;

&lt;p&gt;但如果你在终端里跟 Claude Code 聊天，随时想到什么，直接说一句「帮我写进滴答清单」，这个成本就几乎为零了。&lt;/p&gt;

&lt;p&gt;你想想看，这意味着什么。&lt;/p&gt;

&lt;p&gt;你在写代码的时候，突然想到明天要买个什么东西，直接说一句，它就帮你记下来了。你在分析数据的时候，突然想到一个学习计划，直接说一句，它就帮你安排好了。你在处理工作的时候，突然想到一个创意，直接说一句，它就帮你存起来了。&lt;/p&gt;

&lt;p&gt;你的注意力可以完全集中在「思考」上，而不是「记录」上。&lt;/p&gt;

&lt;p&gt;这才是 AI 助手应该做的事情，不是陪你聊天，而是帮你把想法变成行动。&lt;/p&gt;
&lt;h3 id="目前的局限"&gt;目前的局限&lt;/h3&gt;
&lt;p&gt;当然，这玩意现在还不完美。&lt;/p&gt;

&lt;p&gt;我今天就遇到了一个问题，API 返回的项目列表报错了，因为我朋友旧项目有个字段有问题。这种情况下，AI 也搞不定，还是得他自己去检查修复。&lt;/p&gt;

&lt;p&gt;另外，配置过程对纯小白来说可能还是有点门槛，虽然我说了「十分钟搞定」，但前提是你要知道怎么打开命令行，怎么运行命令。如果你连终端都没打开过，那可能得先补一下基础知识。&lt;/p&gt;

&lt;p&gt;还有就是，AI 生成的内容不一定完全符合你的预期。比如我今天创建的任务，优先级是我根据经验设的，但也许你觉得那个方向对你来说更重要或者更不重要，这时候你还是得手动调整。&lt;/p&gt;

&lt;p&gt;但总体来说，瑕不掩瑜。&lt;/p&gt;
&lt;h3 id="这只是开始"&gt;这只是开始&lt;/h3&gt;
&lt;p&gt;我有时候觉得，我们现在正处在一个特别有意思的阶段。&lt;/p&gt;

&lt;p&gt;AI 已经不只是一个聊天窗口了，它正在变成一个能真正帮你干活的助手。你有一个想法，它帮你记录；你有一个任务，它帮你安排；你有一个目标，它帮你规划。&lt;/p&gt;

&lt;p&gt;今天是滴答清单，明天可能是你的日历、邮箱、笔记软件、项目管理工具。当这些都连起来之后，你可以想象一下，你只需要跟 AI 说一句「帮我安排一下明天的工作」，它就能自动查你的日历、看你的任务列表、发邮件确认会议、在笔记里记录要点。&lt;/p&gt;

&lt;p&gt;这不是科幻，这是正在发生的事情。&lt;/p&gt;

&lt;p&gt;我只是觉得，这种变化来得比我们想象的要快。&lt;/p&gt;

&lt;p&gt;屏幕前的你，如果还没试过 Claude Code 加上 MCP，我真的建议你花十分钟配一下。不是为了赶时髦，是为了让你自己体验一下，当 AI 不只是陪你聊天，而是真的能帮你把想法变成行动的时候，那种感觉是什么样的。&lt;/p&gt;

&lt;p&gt;你会惊讶的。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&amp;gt;&amp;gt;&amp;gt;&lt;strong&gt;延伸阅读&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/x4sm7GXpoUoIepKmtooKAw" rel="nofollow" target="_blank" title=""&gt;Obsidian CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/kN-_KSwWkOlpZDXAURgcEA" rel="nofollow" target="_blank" title=""&gt;飞书 lark-cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/XT5r6yFaXHa63T3Qg_Oi7w" rel="nofollow" target="_blank" title=""&gt;Agent-Reach 最佳实践&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="- gsearch-cli最佳实践"&gt;- &lt;a href="https://mp.weixin.qq.com/s/KuUW39zVqqq_xcxPiT7_jA" rel="nofollow" target="_blank" title=""&gt;gsearch-cli 最佳实践&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;以上，既然看到这里了，如果觉得不错，随手&lt;strong&gt;点个赞、在看、转发&lt;/strong&gt;三连吧！想第一时间收到推送，可以给我个星标⭐️～&lt;/p&gt;

&lt;p&gt;谢谢你看我的文章，我们，下次再见。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://gitee.com/da-qiang-classmate/typora/raw/master/image/%E6%9C%AA%E5%91%BD%E5%90%8D%E7%9A%84%E8%AE%BE%E8%AE%A1.webp" title="" alt=""&gt;
&lt;em&gt;&amp;gt;/ 作者：大强同学&lt;/em&gt;
&lt;em&gt;&amp;gt;/ 更多干货，请访问：&lt;a href="https://www.dqtx.cc/" rel="nofollow" target="_blank" title=""&gt;dqtx.cc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
      <author>sphinx30</author>
      <pubDate>Fri, 29 May 2026 14:16:19 +0800</pubDate>
      <link>https://w2solo.com/topics/7450</link>
      <guid>https://w2solo.com/topics/7450</guid>
    </item>
    <item>
      <title>一个解决细分痛点的轻量级网页版计算器</title>
      <description>&lt;p&gt;最近在看教育类出海产品时，发现了一个思路很直接的轻量级工具。核心功能就是一个纯网页端运行的 &lt;a href="https://ti84.io/" rel="nofollow" target="_blank" title=""&gt;TI 84 Calculator online&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;相比于传统的桌面端模拟器需要繁琐的安装和环境配置，这种形态主打一个 “开箱即用” 和 “用完即走”，对海外的细分用户群体非常友好。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;这个产品有几个不错的点：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;全端免安装：&lt;/strong&gt; 砍掉了所有多余流程，无需下载客户端或注册登录，在浏览器里就能直接处理代数、统计和画图。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;零学习成本：&lt;/strong&gt; 前端界面 1:1 完美复刻了实体的 &lt;a href="https://ti84.io/" rel="nofollow" target="_blank" title=""&gt;TI 84 Calculator&lt;/a&gt;，只要用户摸过实体机，上手完全没有违和感。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;极简克制：&lt;/strong&gt; UI 没有任何多余的视觉干扰，排版非常干净，手机端和 PC 端的自适应也做得很好。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;对于做工具类出海的来说，这种抓住单一长尾痛点（比如手边临时没有实体的 &lt;a href="https://ti84.io/" rel="nofollow" target="_blank" title=""&gt;TI 84 Calculator&lt;/a&gt;）并把体验做平滑的思路，挺值得参考的。大家平时如果有绘图或者复杂计算的需求，也可以直接把它存个书签当备用工具。&lt;/p&gt;</description>
      <author>yanyuzzz</author>
      <pubDate>Fri, 29 May 2026 13:33:26 +0800</pubDate>
      <link>https://w2solo.com/topics/7449</link>
      <guid>https://w2solo.com/topics/7449</guid>
    </item>
    <item>
      <title>14MB VS 15KB：前 React 核心成员用 AI 写了个排版库，让 Safari 快了一千倍</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;前 React 核心成员 Cheng Lou 在推特上甩了一个链接：“我写了一个 15KB 的排版引擎，叫 Pretext。” 配图是一段文字绕着不规则形状流动的视频。评论区炸了：“这效果以前只能用 canvas 画，性能还稀烂。”“怎么做到的？” 第二天，项目 GitHub 星数破万。第三天，破两万八。一周内，Hacker News、Reddit、Twitter 全在讨论。一个 15KB 的库，怎么就让整个前端圈沸腾了？&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/193577746/2ebcd3b8-9228-4e4f-8fb5-e6e05ff8ded7.jpg?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="一、故事的起点：前React核心成员的“业余项目”"&gt;一、故事的起点：前 React 核心成员的 “业余项目”&lt;/h2&gt;
&lt;p&gt;Cheng Lou，这个名字在 React 早期社区很响亮。他贡献过核心代码，也做过著名的 “时间旅行” 演讲。后来他淡出了主流视野。大家都以为他在享受生活。结果他憋出一个大招：一个 15KB 的排版引擎。&lt;/p&gt;

&lt;p&gt;为什么这件事让社区这么兴奋？因为排版——文字如何换行、环绕、对齐——是浏览器三十年来的 “硬骨头”。你滚动页面、调整窗口大小、打开一个复杂布局的网页，背后都在进行昂贵的排版计算。浏览器用的方法是 “回流”：把文字放进 DOM 里，问浏览器 “你的宽度是多少？”，浏览器只好重新计算一遍布局，整个过程同步、阻塞、性能差。&lt;/p&gt;
&lt;h2 id="二、传统排版为什么慢？"&gt;二、传统排版为什么慢？&lt;/h2&gt;
&lt;p&gt;简单说，浏览器排版是一个 “黑盒”。你给它文字和宽度，它给你一个 “换行位置”。但这个计算过程是同步的，涉及到字形度量、上下文、连字等复杂因素。而且，每次你改变文字内容或容器大小，浏览器都要重新算一遍。这就是为什么复杂排版会卡。&lt;/p&gt;
&lt;h2 id="三、Pretext的思路：绕过DOM，用数学计算"&gt;三、Pretext 的思路：绕过 DOM，用数学计算&lt;/h2&gt;
&lt;p&gt;Pretext 的核心思想很简单：&lt;strong&gt;不在 DOM 里排版，在 Canvas 里算&lt;/strong&gt;。它利用 Canvas API 直接测量文字宽度（&lt;code&gt;measureText&lt;/code&gt;），然后用算法自己决定在哪里换行、在哪里对齐。这个过程不触发回流，不阻塞主线程。而且，它把计算结果缓存起来，相同的文字和容器宽度直接复用。&lt;/p&gt;

&lt;p&gt;最惊人的是性能对比。Cheng Lou 在发布会上演示：同样的复杂排版，传统方法在 Safari 下耗时约 150ms，Pretext 只要 0.12ms，&lt;strong&gt;快了一千两百多倍&lt;/strong&gt;。其他浏览器也快了数十到上百倍。&lt;/p&gt;
&lt;h2 id="四、AI的角色：不是写代码，是“调参”"&gt;四、AI 的角色：不是写代码，是 “调参”&lt;/h2&gt;
&lt;p&gt;Pretext 的代码量不大，大部分逻辑是 Cheng Lou 自己写的。但他用 AI 做了一件更有趣的事：浏览器兼容性调试。不同操作系统、不同浏览器、不同字体下，&lt;code&gt;measureText&lt;/code&gt;的返回值有微小差异。Cheng Lou 写了一个脚本，让 AI 自动在 Chrome、Safari、Firefox、Edge 的 Windows、macOS、Linux 版本上运行测试，收集了 7680 组数据，然后让 AI 分析差异并生成修正系数。他说：“如果没有 AI，这个项目可能要再花半年时间调参数。”&lt;/p&gt;
&lt;h2 id="五、社区反应：从“这能干啥”到“我也可以”"&gt;五、社区反应：从 “这能干啥” 到 “我也可以”&lt;/h2&gt;
&lt;p&gt;Pretext 发布后，社区很快分成了两派。质疑派说：“这只是个 demo，不能用在实际项目。” 支持派则开始疯狂创作：有人用它实现文字围绕任意形状（手绘的曲线、SVG 路径）；有人做了多栏杂志布局，滚动丝滑；还有人把 Pretext 嵌入到实时聊天室，每一条新消息都能动态重排，不掉帧。&lt;/p&gt;

&lt;p&gt;最有趣的是一个开发者用它实现了一个 “流动的诗歌” 页面：文字像溪水一样沿着屏幕上的波浪线流动，鼠标拖动改变形状，文字实时重新排版。这在以前几乎不可想象。&lt;/p&gt;
&lt;h2 id="六、对前端的意义：创新不只AI"&gt;六、对前端的意义：创新不只 AI&lt;/h2&gt;
&lt;p&gt;Pretext 的爆火，折射出 2026 年前端圈的一种情绪：大家有点腻了框架大战、AI 生成代码、效率工具。当 Cheng Lou 拿出一个 15KB、无依赖、硬核性能优化的库时，大家发现：前端还能这么玩。它不依赖 React、Vue、Svelte，不依赖 AI 生成页面，就是对底层能力的一次极致挖掘。&lt;/p&gt;

&lt;p&gt;这也提醒我们：在 AI 能写出 80 分代码的时代，人类工程师的竞争力在哪里？可能是定义问题、设计算法、解决那些 AI 搞不定的极端情况。Cheng Lou 没被 AI 取代，反而用 AI 加速了自己独特想法的实现。&lt;/p&gt;
&lt;h2 id="七、最后：你会用它吗？"&gt;七、最后：你会用它吗？&lt;/h2&gt;
&lt;p&gt;Pretext 目前还不是生产级的方案，缺少滚动虚拟化、无障碍支持等。但它的思路已经启发了一批开发者。有人开始尝试把它集成到 Next.js 里，有人写了一个基于 Pretext 的 Markdown 渲染器。Cheng Lou 本人也表示，会持续维护，目标是成为一个真正可用的排版引擎。&lt;/p&gt;

&lt;p&gt;至少，它让我们看到：浏览器还没被挖透，前端还有创造的空间。&lt;/p&gt;</description>
      <author>193577746</author>
      <pubDate>Fri, 29 May 2026 12:14:19 +0800</pubDate>
      <link>https://w2solo.com/topics/7447</link>
      <guid>https://w2solo.com/topics/7447</guid>
    </item>
    <item>
      <title>【工具推荐】出海人一站式获取全球 200 多个国家的法定假期</title>
      <description>&lt;p&gt;产品名称：World Holidays&lt;/p&gt;

&lt;p&gt;产品地址：&lt;a href="https://worldholidays.me/" rel="nofollow" target="_blank" title=""&gt;https://worldholidays.me/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;一句话介绍：让出海团队、远程工作团队快速了解客户和团队的工作时间和假期。&lt;/p&gt;

&lt;p&gt;产品特性：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;免登录、完全免费&lt;/li&gt;
&lt;li&gt;可聚合查看全球 200 多个国家的法定假期&lt;/li&gt;
&lt;li&gt;支持多选国家对比假日，并生成分享链接，方便发给客户或同事&lt;/li&gt;
&lt;li&gt;额外提供了"今日全球放假概览"和世界时钟功能&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/ChengPu/fcee314b-b860-40a5-8d53-d8aa8dc3ef0f.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/ChengPu/3f259b2c-3717-48cc-84f0-e16f89e7510e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/ChengPu/79431cce-7d2d-496a-af27-383327dde837.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/ChengPu/a1f1aa37-0c2f-407b-9abc-5876ea5d7a04.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>ChengPu</author>
      <pubDate>Fri, 29 May 2026 10:45:15 +0800</pubDate>
      <link>https://w2solo.com/topics/7443</link>
      <guid>https://w2solo.com/topics/7443</guid>
    </item>
    <item>
      <title>手写虚拟 DOM 后，我反问面试官：key 为什么不能用 index？</title>
      <description>&lt;p&gt;&lt;img src="https://img.way2solo.com/photo/193577746/0bfd06d4-0dca-443f-ab97-3bdff21b9d3e.png?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;虚拟 DOM 和 diff 算法是 React 面试的 “进阶题”，一般不会让手写完整实现，但一旦遇到，就是区分 “会用 React” 和 “懂 React” 的分水岭。大部分前端能说出虚拟 DOM 的好处，但真要写一个 mini 版，很多人会卡在 diff 的 key 逻辑上。&lt;/p&gt;

&lt;p&gt;今天我就还原那次面试：AI 生成的虚拟 DOM 核心代码、我是如何解释 diff 的、以及为什么 “key 不能用 index” 这个问题能让我反客为主。最后附完整代码，你可以直接拿去跑，也可以用来准备面试。&lt;/p&gt;
&lt;h2 id="一、AI生成的虚拟DOM核心代码"&gt;一、AI 生成的虚拟 DOM 核心代码&lt;/h2&gt;
&lt;p&gt;我在 Cursor 里输入：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;用原生 JavaScript 实现一个简易虚拟 DOM 库，包含：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;h(type, props, ...children)&lt;/code&gt; 创建虚拟节点&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;render(vnode)&lt;/code&gt; 将虚拟节点转为真实 DOM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;patch(oldVnode, newVnode)&lt;/code&gt; 对比并更新真实 DOM，支持 key 属性，实现最小化更新&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI 输出的核心结构如下（精简后）：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 创建虚拟节点&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 渲染虚拟DOM到真实DOM&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;vnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createTextNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 简易diff（带key优化）&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// 如果是文本节点&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replaceChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// 不同类型，直接替换&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replaceChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// 相同类型，更新属性（省略细节）&lt;/span&gt;
  &lt;span class="c1"&gt;// 然后递归处理children，这里重点演示key的作用&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oldChildren&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newChildren&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;keyedOld&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// 将旧节点按key建立索引&lt;/span&gt;
  &lt;span class="nx"&gt;oldChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;keyedOld&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;idx&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="c1"&gt;// 遍历新节点，复用key相同的节点&lt;/span&gt;
  &lt;span class="nx"&gt;newChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;newChild&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newIdx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newChild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;newChild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;keyedOld&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newChild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;matched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// 复用该DOM节点，递归更新子内容&lt;/span&gt;
        &lt;span class="nx"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;matched&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newChild&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// 移动位置（这里省略，示意核心）&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// 没有匹配，插入新节点&lt;/span&gt;
    &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newChild&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="二、我反问了面试官一个问题"&gt;二、我反问了面试官一个问题&lt;/h2&gt;
&lt;p&gt;等代码展示完，面试官还没开口，我说：“这个 diff 算法里用 key 来匹配节点。很多前端都用过 key，但有一个经典误区——&lt;strong&gt;把数组索引当 key 用&lt;/strong&gt;。您知道为什么这样会有问题吗？”&lt;/p&gt;

&lt;p&gt;他来了兴趣：“你说说看。”&lt;/p&gt;

&lt;p&gt;我解释：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;diff 算法通过 key 判断节点是否 “相同”。如果用索引，比如列表顺序变了，索引 0 可能原来对应 A，现在对应 B，但 key 相同（都是 0），React 会认为这两个节点相同，不重新创建，只是更新内容。这样本应销毁 A、创建 B 的场景，变成了复用 A 并修改内容。如果组件有复杂状态（比如动画、输入框焦点），就会出现状态错乱。&lt;/li&gt;
&lt;li&gt;更严重的是，在列表头部插入一个元素，所有后续节点的索引都变了，每个节点都会被 “原地修改”，性能反而比不用 key 还差。&lt;/li&gt;
&lt;li&gt;正确做法是用数据中唯一稳定的标识（如 id）作为 key。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;他点头：“这才是我想听到的答案。”&lt;/p&gt;
&lt;h2 id="三、为什么面试官认可这种“反客为主”？"&gt;三、为什么面试官认可这种 “反客为主”？&lt;/h2&gt;
&lt;p&gt;他后来告诉我：“你能自己生成正确的 diff 逻辑，还能主动抛出常见的误区，说明你不仅会写，还真的思考过生产中的坑。这种深度，比背代码有价值。”&lt;/p&gt;

&lt;p&gt;所以这道题的关键不是完美写出所有 diff 逻辑，而是&lt;strong&gt;理解 key 的真实作用&lt;/strong&gt;。AI 帮你搭了骨架，你用自己的理解填充了灵魂。&lt;/p&gt;
&lt;h2 id="四、完整可运行的迷你虚拟DOM代码"&gt;四、完整可运行的迷你虚拟 DOM 代码&lt;/h2&gt;
&lt;p&gt;我把面试中使用的完整代码放在这里，你可以在浏览器控制台运行测试：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 完整示例（带简版diff和key复用）&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;vnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createTextNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="nx"&gt;vnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// 文本节点&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replaceChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replaceChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// 更新属性（略）&lt;/span&gt;
  &lt;span class="c1"&gt;// 处理children（简易版：只演示替换，不移动）&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oldChildren&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;oldVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newChildren&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newVnode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;maxLen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;maxLen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;oldChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;newChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldChildren&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;newChildren&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;newChildren&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newChildren&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你可以用这段代码测试列表渲染，尝试改变顺序或插入头节点，观察不用 key vs 用 index vs 用 id 的区别。&lt;/p&gt;
&lt;h2 id="五、写在最后"&gt;五、写在最后&lt;/h2&gt;
&lt;p&gt;虚拟 DOM 和 diff 是 React 的根基，手写一遍能让你对性能优化有更深的体感。AI 能帮你快速生成模板，但真正拉开差距的，是对 “为什么 key 不能用 index” 这种问题的思考深度。&lt;/p&gt;</description>
      <author>193577746</author>
      <pubDate>Thu, 28 May 2026 18:16:46 +0800</pubDate>
      <link>https://w2solo.com/topics/7437</link>
      <guid>https://w2solo.com/topics/7437</guid>
    </item>
    <item>
      <title>独立开发者做产品出海，需要注意什么?(第一章)</title>
      <description>&lt;p&gt;今天用过来人的一些经验，跟大家聊一聊独立产品出海这件事。
其实很多人一开始都想复杂了，以为做出海产品首先要厉害的技术，其次就是产品要完美。但其实做过的小伙伴会发现，出海的关键从来不是 “做出一个完美产品”，而是 “让别人持续看到你”。
如果你是一个独立开发者，本质上对你来说，最重要的三件事是：做产品、做曝光、做信任。最重要的三件事是：做产品、做曝光、做信任。最重要的三件事是：做产品、做曝光、做信任。三者缺一不可。
一、先别急着做产品，先把 “身份” 搭起来
很多人一上来就搭框架，写代码，这是最常见的误区。正确顺序反而是：先让别人知道你是谁。
首先你至少要准备这些 “基础设施”：
1、一个官网（哪怕很简单）
2、一个长期更新的社交账号
3、一些能证明你在持续做事的平台账号
因为在海外用户眼里，一个 “看起来像长期项目” 的开发者，比一个 “突然上线的产品” 可信得多。
二、必须提前注册的几个平台（非常重要）
如果你要做出海，这些平台基本是绕不开的：
1）Reddit
访问地址：&lt;a href="https://www.reddit.com/" rel="nofollow" target="_blank"&gt;https://www.reddit.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这是海外最大的社区之一，类似 “国际版知乎”。
很多产品的第一批用户都来自这里，但注意：不要一上来就发广告，要先养号、参与讨论。
2）X（原 Twitter）
访问地址：&lt;a href="https://twitter.com/" rel="nofollow" target="_blank"&gt;https://twitter.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;相当于海外微博。
适合记录开发过程、发布产品更新，它的特点是：你发得越真实，越容易被推流。
3）Facebook
访问地址：&lt;a href="https://facebook.com/" rel="nofollow" target="_blank"&gt;https://facebook.com/&lt;/a&gt;
虽然年轻人不一定用，但在一些地区依然是流量入口，尤其是社群传播。
4）Indie Hackers
访问地址：&lt;a href="https://www.indiehackers.com/" rel="nofollow" target="_blank"&gt;https://www.indiehackers.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;一个开发者创业社区，用户质量很高，基本都是在做产品的人。
适合分享你的产品过程，而不是单纯推广。
5）Product Hunt
访问地址：&lt;a href="https://www.producthunt.com/" rel="nofollow" target="_blank"&gt;https://www.producthunt.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这是新产品发布平台。
如果你的产品准备上线，这里是必须要冲一次的地方。
6）Hacker News
访问地址：&lt;a href="https://news.ycombinator.com/" rel="nofollow" target="_blank"&gt;https://news.ycombinator.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;YC 旗下社区，极客浓度非常高。
技术产品、AI 工具、SaaS 类产品在这里非常容易获得早期反馈。
三、很多人忽略的一点：流量入口不止一个
很多独立开发者会陷入一个误区：只做一个产品，然后等用户来。
但现实是，你需要 “多入口曝光”。
比如除了社交平台，还可以做：
1、SEO 关键词网站
2、工具集合页
3、产品导航站
比如像 FreeAI.run(
&lt;a href="https://www.freeai.run/" rel="nofollow" target="_blank"&gt;https://www.freeai.run/&lt;/a&gt;
) 这样的 AI 工具导航站，本质上就是一个 “流量收集器”：
1、帮用户筛选工具
2、帮产品获得曝光
3、同时承接搜索流量&lt;/p&gt;

&lt;p&gt;对于独立开发者来说，这类站点的意义很简单：
你不只是做一个产品，而是在做一个 “产品分发系统”。
四、出海最重要的不是技术，而是策略
很多人会过度纠结技术选型，但在出海这件事上，真正影响结果的是这些：
1、不要等产品完美，能用就上线
2、不要单打独斗，尽量找人合作（开发 + 运营 + 产品）
3、一个关键词跑通后，可以复制多个网站吃流量
4、能赚钱的产品，尽早尝试付费流量
5、永远准备 Plan B，不要把自己押在一个点上
五、一个很关键的认知转变
很多新手会问：“我是不是要想清楚再开始？”
但真实情况是反过来的：
你不是想清楚才开始，而是开始之后才逐渐想清楚。
做产品这件事，本质就是一个不断试错的过程。
你做得越多，理解越快。
六、最后一句话很重要
如果你现在还在犹豫做不做产品，不如先做一个最小版本上线。
因为互联网最大的特点就是：
只要产品能跑起来，它就可能自己带来用户。
而你真正要做的，是让它 “跑起来”。&lt;/p&gt;</description>
      <author>my126sw</author>
      <pubDate>Wed, 27 May 2026 23:48:23 +0800</pubDate>
      <link>https://w2solo.com/topics/7431</link>
      <guid>https://w2solo.com/topics/7431</guid>
    </item>
    <item>
      <title>修图小程序</title>
      <description>&lt;p&gt;做了一个修图的微信小程序，轻量简单&lt;img src="https://img.way2solo.com/photo/2321544362/49091abf-5afc-4289-9b76-61a307afa66d.jpg?imageView2/2/w/1920/q/100" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>2321544362</author>
      <pubDate>Wed, 27 May 2026 19:38:08 +0800</pubDate>
      <link>https://w2solo.com/topics/7430</link>
      <guid>https://w2solo.com/topics/7430</guid>
    </item>
  </channel>
</rss>
