2026年3月

大家好,我是良许。

在嵌入式开发领域,我们经常需要设计电路板,而 EDA(Electronic Design Automation,电子设计自动化)软件就是我们必不可少的工具。

从最初的原理图设计,到 PCB 布局布线,再到最终的生产文件输出,EDA 软件贯穿了整个硬件设计流程。

今天我就结合自己多年的嵌入式开发经验,跟大家聊聊 EDA 软件的使用。

1. EDA 软件概述

1.1 什么是 EDA 软件

EDA 软件是用于电子产品设计的计算机辅助设计工具,它可以帮助工程师完成电路原理图设计、PCB 布局布线、电路仿真、信号完整性分析等工作。

在我刚入行做单片机开发的时候,公司用的是 Altium Designer,后来到了外企,接触到了 Cadence 和 Mentor Graphics 这些更专业的工具。

目前市面上主流的 EDA 软件主要有以下几种:

  • Altium Designer:功能强大,界面友好,适合中小型项目,在国内使用非常广泛
  • Cadence Allegro:业界标准,适合高速 PCB 设计,大型企业常用
  • Mentor Graphics PADS:性价比高,学习曲线相对平缓
  • KiCad:开源免费,功能日益完善,适合个人开发者和小团队
  • Eagle:小巧灵活,被 Autodesk 收购后功能更加完善

1.2 为什么要学习 EDA 软件

作为嵌入式工程师,即使你主要做软件开发,了解硬件设计也是非常必要的。

我在做 STM32 项目的时候,经常需要查看原理图来理解硬件连接,有时候还需要自己设计一些简单的扩展板。

掌握 EDA 软件可以让你更好地理解硬件工作原理,在调试程序时能够快速定位是软件问题还是硬件问题。

2. EDA 软件的基本使用流程

2.1 创建项目和原理图设计

第一步是创建一个新项目。以 Altium Designer 为例,打开软件后选择"File → New → Project",选择 PCB 项目类型,给项目起一个有意义的名字。

我习惯用项目功能加日期来命名,比如"STM32\_MotorControl\_20250302"。

接下来创建原理图文件,在项目中右键选择"Add New to Project → Schematic"。

原理图设计是整个硬件设计的基础,需要根据功能需求选择合适的元器件,并正确连接它们。

在原理图设计阶段,我通常会这样做:

第一步,绘制电源部分。电源是整个电路的基础,必须首先设计好。

比如设计一个 STM32 最小系统,需要 3.3V 电源,我会选择一个 LDO 稳压芯片,比如 AMS1117-3.3,加上必要的输入输出电容。

原理图上要清楚标注电源网络名称,比如"+5V"、"+3.3V"、"GND"等。

第二步,绘制核心芯片部分。对于 STM32 项目,这部分包括 MCU 本身、晶振电路、复位电路、BOOT 配置等。

在放置 STM32 芯片时,要注意引脚的功能分配,哪些引脚用作 GPIO,哪些用作串口、SPI、I2C 等。

我的经验是,在原理图设计阶段就要考虑好 PCB 布局,把相关功能的引脚尽量分配在一起。

第三步,绘制外围电路。根据项目需求添加各种外围电路,比如 LED 指示灯、按键、传感器接口、通信接口等。

每个功能模块最好用虚线框框起来,并添加注释说明,这样后期维护时一目了然。

在绘制原理图时,有几个实用技巧:

  1. 使用总线(Bus)来简化复杂的连线,特别是数据总线和地址总线
  2. 善用网络标签(Net Label),避免画太多交叉的连线
  3. 给每个元器件添加合适的封装信息,这样在转 PCB 时就不会出错
  4. 定期进行电气规则检查(ERC),及时发现连接错误

2.2 元器件库的管理

元器件库是 EDA 软件的重要组成部分,包含了元器件的原理图符号和 PCB 封装。

刚开始使用 EDA 软件时,我经常遇到找不到合适元器件的情况。

后来我养成了自己建库的习惯,把常用的元器件都整理到自己的库中。

建立元器件库的步骤:

  1. 创建原理图库文件(.SchLib)和 PCB 库文件(.PcbLib)
  2. 在原理图库中绘制元器件的符号,定义引脚编号和名称
  3. 在 PCB 库中绘制元器件的封装,包括焊盘位置、丝印层、阻焊层等
  4. 将原理图符号和 PCB 封装关联起来

我的建议是,对于常用的芯片,比如 STM32 系列、电源芯片、运放等,可以从官方或者可靠的第三方网站下载现成的库文件。

但对于一些特殊的元器件,还是需要自己动手制作。

制作封装时一定要仔细核对数据手册,特别是引脚间距和焊盘尺寸,差一点都会导致 PCB 无法焊接。

2.3 PCB 布局设计

原理图设计完成并通过 ERC 检查后,就可以转到 PCB 设计了。

在 Altium Designer 中,选择"Design → Update PCB Document",软件会自动将原理图中的元器件和网络导入到 PCB 文件中。

PCB 布局是一门艺术,也是一门科学。好的布局可以提高电路性能,降低 EMI 干扰,方便后期调试和维护。

我在做汽车电子项目时,对 PCB 布局的要求非常严格,因为汽车环境复杂,电磁干扰强,必须确保电路稳定可靠。

布局的基本原则:

2.3.1 功能分区

将 PCB 按功能划分为不同的区域,比如电源区、数字电路区、模拟电路区、通信接口区等。

各个区域之间要有明确的界限,避免相互干扰。

在我设计的一个电机控制板中,我把 MCU 和数字电路放在板子的一侧,把功率驱动电路放在另一侧,中间用地平面隔开,效果很好。

2.3.2 电源优先

电源走线要粗,要短,要直接。

电源芯片周围的去耦电容要尽量靠近芯片的电源引脚,我一般控制在 5mm 以内。

对于大电流的电源线,要计算好走线宽度,确保不会过热。

有一次我设计的板子在测试时发现电源线发烫,后来发现是走线太细,只有 0.3mm,改成 1.0mm 后问题就解决了。

2.3.3 信号完整性

对于高速信号,比如 STM32 的 SPI、USB、以太网等,要特别注意走线长度和阻抗匹配。

差分信号要等长,要平行走线,间距要合适。

我在做 USB 接口时,会严格控制 D+ 和 D-的走线长度差在 5mil 以内,并且保持 90 欧姆的差分阻抗。

2.3.4 热管理

功率器件会产生大量热量,需要考虑散热问题。

在布局时要给这些器件留出足够的空间,必要时添加散热片或者铜皮散热。

我设计的电机驱动板上,MOSFET 下面铺了大面积的铜皮,并且打了很多过孔连接到底层地平面,形成散热通道。

2.4 PCB 布线设计

布局完成后就可以开始布线了。布线是 PCB 设计中最耗时的工作,也是最考验工程师经验的环节。

2.4.1 布线的基本规则

  1. 电源线和地线要粗,一般电源线宽度至少 0.5mm,大电流线路要更粗
  2. 信号线宽度一般 0.2-0.3mm,根据电流大小和阻抗要求调整
  3. 走线尽量走直线或 45 度折线,避免 90 度直角转弯
  4. 高速信号线要短,要粗,要远离干扰源
  5. 模拟信号和数字信号要分开走线,避免串扰

2.4.2 地平面的处理

在多层板设计中,通常会有一层或多层作为地平面。

地平面可以提供稳定的参考电位,降低信号回流阻抗,提高抗干扰能力。

我在设计四层板时,一般采用"信号-地-电源-信号"的叠层结构,这样可以保证每一层信号都有完整的地平面作为回流路径。

对于双层板,虽然不能做完整的地平面,但也要尽量在底层铺铜,并且多打地过孔,降低地阻抗。

有一次我设计的一个双层板,因为地过孔打得太少,导致信号质量不好,后来补打了很多过孔才解决问题。

2.4.3 自动布线和手动布线

EDA 软件都提供了自动布线功能,但我很少完全依赖自动布线。

自动布线对于简单的电路还可以,但对于复杂的、有特殊要求的电路,还是需要手动布线。

我的习惯是,先手动布关键信号,比如时钟线、复位线、高速信号等,然后用自动布线完成剩余的信号,最后再手动优化。

3. 实际案例:STM32 最小系统设计

下面我以一个 STM32F103C8T6 最小系统为例,演示完整的 EDA 设计流程。

3.1 原理图设计

这个最小系统包括以下几个部分:

  1. 电源电路:使用 AMS1117-3.3 将 5V 转换为 3.3V,输入端加 10uF 电容,输出端加 10uF 和 100nF 电容
  2. MCU 核心:STM32F103C8T6 芯片,VDDA 和 VDD 分别加 100nF 去耦电容
  3. 时钟电路:8MHz 无源晶振,两端各加 20pF 电容,还有一个 32.768KHz 的 RTC 晶振
  4. 复位电路:NRST 引脚通过 10K 电阻上拉到 3.3V,并联一个 100nF 电容和一个复位按键
  5. BOOT 配置:BOOT0 通过 10K 电阻下拉到地,BOOT1 也下拉
  6. 调试接口:引出 SWD 接口,包括 SWDIO、SWCLK、GND、3.3V 四个引脚
  7. LED 指示灯:PC13 引脚接一个 LED 和限流电阻

在 Altium Designer 中绘制好原理图后,要进行编译检查。

点击"Project → Compile PCB Project",如果有错误或警告,要逐一解决。

常见的问题包括:引脚未连接、网络名称冲突、元器件缺少封装等。

3.2 PCB 设计

将原理图导入 PCB 后,首先设置板子的尺寸和层数。

这个最小系统我选择双层板,尺寸设置为 50mm × 40mm。

布局阶段

  1. 先放置 STM32 芯片,位置大概在板子中央偏上的位置
  2. 电源芯片 AMS1117 放在板子左侧,靠近电源输入端
  3. 晶振放在 MCU 的旁边,尽量靠近 OSC\_IN 和 OSC\_OUT 引脚
  4. 去耦电容紧贴 MCU 的电源引脚
  5. SWD 接口放在板子边缘,方便调试器连接
  6. LED 放在板子的角落,不占用太多空间

布线阶段

  1. 先走电源线,从 AMS1117 的输出端到 MCU 的 VDD 引脚,走线宽度设置为 0.8mm
  2. 走地线,在底层铺铜作为地平面
  3. 走晶振信号,这是高频信号,要短、要粗、要远离其他信号
  4. 走 SWD 调试信号,SWDIO 和 SWCLK 要等长
  5. 最后走 LED 控制信号

完成布线后,要进行 DRC(Design Rule Check)检查。点击"Tools → Design Rule Check",设置好规则后运行检查。常见的 DRC 错误包括:走线间距不够、走线宽度不符合要求、焊盘间距太小等。

3.3 生成 Gerber 文件

PCB 设计完成后,需要生成 Gerber 文件用于 PCB 制造。

在 Altium Designer 中,选择"File → Fabrication Outputs → Gerber Files",按照 PCB 厂家的要求设置好各层的输出选项。

一般需要输出的文件包括:

  • 顶层铜箔(Top Layer)
  • 底层铜箔(Bottom Layer)
  • 顶层阻焊(Top Solder Mask)
  • 底层阻焊(Bottom Solder Mask)
  • 顶层丝印(Top Silkscreen)
  • 底层丝印(Bottom Silkscreen)
  • 钻孔文件(Drill Drawing)
  • 板框文件(Board Outline)

生成 Gerber 文件后,我习惯用 CAM350 或者 Gerbv 打开检查一遍,确保没有问题再发给 PCB 厂家。

4. EDA 软件使用的进阶技巧

4.1 使用脚本自动化

对于重复性的工作,可以使用脚本来自动化。

Altium Designer 支持 Delphi Script 和 VB Script,可以编写脚本来批量修改元器件属性、自动生成 BOM 表、批量调整走线宽度等。

我曾经写过一个脚本,用来批量修改所有电阻的封装,从 0603 改为 0805。手动修改要花半小时,用脚本只需要几秒钟。

4.2 使用仿真功能

很多 EDA 软件都集成了电路仿真功能,可以在 PCB 制作之前验证电路的正确性。

比如在 Altium Designer 中,可以使用 Mixed Sim 进行模拟仿真,验证电源电路的输出电压、纹波等参数。

虽然仿真不能完全替代实际测试,但可以提前发现一些明显的设计错误,节省时间和成本。

我在设计电源电路时,都会先仿真一下,确保输出电压和负载能力满足要求。

4.3 3D 可视化

现代 EDA 软件都支持 3D 可视化功能,可以在设计阶段就看到 PCB 的立体效果。

这对于检查元器件是否干涉、外壳是否匹配非常有用。

在 Altium Designer 中,按"3"键可以切换到 3D 视图。

如果元器件有 3D 模型,就可以看到真实的立体效果。

我在设计一个装在金属外壳里的板子时,就是通过 3D 视图发现某个电容太高,会顶到外壳,及时做了调整。

4.4 团队协作

在公司做项目时,经常需要多人协作。

EDA 软件提供了版本控制和协作功能,可以让多个工程师同时工作在一个项目上。

Altium Designer 支持 SVN 和 Git 版本控制,可以跟踪每次修改,避免冲突。

在我们团队中,原理图和 PCB 文件都放在 Git 仓库中,每次修改都要提交并写清楚修改内容,这样其他人可以清楚地知道项目的变化。

5. 常见问题和解决方法

5.1 元器件封装错误

这是最常见的问题之一。

有时候原理图中选择的封装和实际元器件不匹配,导致 PCB 焊接时发现焊盘对不上。

解决方法:在设计阶段就要仔细核对数据手册,确认封装的尺寸和引脚定义。

如果不确定,可以先用游标卡尺量一下实际元器件的尺寸。

我现在养成了习惯,每次使用新的元器件,都会先打印 1:1 的封装图纸,把实际元器件放上去对比一下。

5.2 走线宽度不够

有时候为了节省空间,把走线画得很细,结果通电后发现走线发热甚至烧断。

解决方法:根据电流大小计算走线宽度。

有一个经验公式:对于 1oz 铜厚,1A 电流需要约 15mil(0.38mm)的走线宽度,温升 10 度。

如果电流更大,要相应增加走线宽度,或者使用更厚的铜箔。

5.3 地回流路径不畅

这会导致信号质量差、EMI 问题严重。

特别是在双层板中,如果地过孔打得太少,地回流阻抗很大。

解决方法:在信号走线附近多打地过孔,特别是在信号换层的地方。

我的经验是,每隔 5-10mm 就打一个地过孔,形成低阻抗的地回流路径。

5.4 高速信号干扰

在设计 USB、以太网等高速接口时,如果走线不当,会导致信号质量差,通信不稳定。

解决方法:高速信号要控制阻抗,要等长,要远离干扰源。

差分信号要平行走线,间距要合适。必要时可以使用阻抗计算工具,确保走线阻抗符合要求。

我在设计 USB 接口时,会使用 Saturn PCB Toolkit 计算走线宽度和间距,确保 90 欧姆的差分阻抗。

6. 学习建议

对于刚接触 EDA 软件的朋友,我的建议是:

  1. 从简单项目开始。不要一上来就设计复杂的多层板,先从简单的双层板开始,比如 LED 闪烁电路、简单的单片机最小系统等。
  2. 多看官方教程。每个 EDA 软件都有详细的官方教程和文档,这是最权威的学习资料。
    Altium Designer 的官方 YouTube 频道有很多视频教程,讲得非常详细。
  3. 参考优秀的开源项目。GitHub 上有很多开源硬件项目,可以下载它们的原理图和 PCB 文件学习。
    看看别人是怎么设计的,学习他们的布局布线技巧。
  4. 实践出真知。光看教程是不够的,一定要自己动手设计。
  5. 可以先设计一些简单的板子,打样回来焊接测试,在实践中积累经验。
    我刚开始学 PCB 设计时,设计了一个 STM32 最小系统板,虽然很简单,但从设计到焊接调试的整个过程让我学到了很多。
  6. 加入社区交流。可以加入一些 EDA 软件的 QQ 群、微信群,或者论坛,遇到问题可以请教别人。
    我在立创 EDA 的论坛上学到了不少东西,那里有很多热心的工程师分享经验。
  7. 关注 PCB 制造工艺。了解 PCB 的制造工艺,知道什么样的设计容易制造,什么样的设计会增加成本。
    比如,走线间距太小会增加制造难度,过孔太多会增加成本等。

7. 总结

EDA 软件是嵌入式工程师的必备技能之一。

虽然学习曲线有点陡峭,但只要多练习,多思考,就能掌握。

从我自己的经验来看,从完全不会到能够独立设计复杂的四层板,大概需要半年到一年的时间。

在使用 EDA 软件的过程中,要养成良好的习惯:规范命名、及时备份、详细注释、严格检查。

这些习惯会让你的设计更加可靠,也会让后期维护更加轻松。

最后,我想说的是,硬件设计是一个需要不断学习的领域。

新的元器件、新的技术、新的设计方法层出不穷,我们要保持学习的热情,不断提升自己的技能。

在我的公众号里,我会持续分享嵌入式开发和硬件设计的经验,欢迎大家关注交流。

希望这篇文章能够帮助大家更好地理解和使用 EDA 软件。

如果你有任何问题或者想法,欢迎在评论区留言讨论。让我们一起进步,一起成长!

更多编程学习资源

愿元宵的甜蜜,能冲淡改 bug 的苦涩;愿团圆的温暖,能驱散加班的疲惫。元宵节快乐!

更新日志:

1、设置界面增加 WSL2 全局设置入口(~/.wslconfig)。
2、发行版配置 /etc/wsl.conf 。
3、优化已安装的发新版列表刷新策略(侧边栏选中首页,且非关闭至系统栏托盘,才会定时刷新)。
4、USB 设备管理(基于 usbipd-win 提供 Windows 系统插入的 USB 给 WSL 中的 Linux 使用;刷新策略与发新版列表一致)。
5、设置界面下拉菜单交互优化。
6、启动流程优化,去除冗余逻辑。

项目地址: https://github.com/owu/wsl-dashboard

若该项目对您有用,请帮我点一个星标; 若有任何建议,可以在帖子下方留言。

下一个版本初步计划 : 网络 或 Docker

image

image

公共平台:
补天: https://www.butian.net/

复制
乐信集团
叮咚买菜
锐捷网络
北京金山云网络技术有限公司
理想汽车
极兔速递有限公司
申通快递有限公司
货讯通科技
螃蟹游戏服务网
北京奇梦岛科技有限公司
shein
上海巨人网络科技有限公司
百年人寿保险股份有限公司
江苏方天电力技术有限公司
厦门航空
丁香园
北京九章云极科技有限公司
水滴公司
上海春芝堂生物制品有限公司
知乎
上海合合信息科技股份有限公司
美团安全应急响应中心
阳光保险集团
信也科技集团
翼支付
华住酒店
搜狐
51 信用卡
上海付费通信息服务有限公司
北京粉笔蓝天科技有限公司
环球时报在线(北京)文化传播有限公司
泓德基金管理有限公司
诺安基金管理有限公司
北京神州汽车租赁有限公司
同程旅行
广汽本田汽车有限公司
浙江省教育厅
石家庄哆吧网络科技有限公司
浙江旅游职业学院
台州市数据局
58 到家
嘀嗒出行
北京易车信息技术有限公司
深圳嘉立创科技集团股份有限公司
北京车欢欢信息技术有限公司
千寻位置网络有限公司
奇安信集团
同盾科技有限公司
北京北森云计算股份有限公司
上海贝锐信息科技股份有限公司
安徽省刀锋网络科技有限公司
上海泛微网络科技股份有限公司
通达 OA
帆软软件有限公司
广东堡塔安全技术有限公司
中国电信股份有限公司江西分公司
人民教育出版社
国海证券
安徽甜心互娱网络科技有限公司
上海五游网络科技有限公司
广州快猫科技有限公司
上海亘岩网络科技有限公司
杭州古北电子科技有限公司
杭州恒业网络信息有限公司
浙江物产信息技术有限公司
北京地平线信息技术有限公司
金蝶软件(中国)有限公司
浙江省三门县人民政府办公室

漏洞盒子: https://www.vulbox.com/

复制
联想集团安全应急响应中心
OPPO 安全应急响应中心
丁香园安全应急响应中心(DXYSRC)
vivo 安全应急响应中心
openGauss 安全应急响应中心
MindSpore 安全应急响应中心
联想集团安全应急响应中心
萤石安全应急响应中心
PayPal 中国安全应急响应中心
乐信集团安全应急响应中心
理想安全应急响应中心
Airbnb 爱彼迎安全应急响应中心
MindSpore 安全应急响应中心
openGauss 安全应急响应中心
嘉立创安全应急响应中心
T3 出行安全应急响应中心
华晨宝马安全应急响应中心
圆通安全应急响应中心
朴朴安全应急响应中心
vivo 安全应急响应中心
OPPO 安全应急响应中心
丁香园安全应急响应中心(DXYSRC)
汇通达安全应急响应中心
齐治科技安全应急响应中心
亿咖通安全应急响应中心
爱奇艺安全应急响应中心
度小满安全应急响应中心
千寻位置安全应急响应中心
嘀嗒出行安全应急响应中心
翼支付安全应急响应中心
轻松筹安全应急响应中心(QSSRC)
值得买安全应急响应中心
阶跃星辰安全应急响应中心
原力金智安全应急响应中心
天翼数字生活安全应急响应中心
知乎安全应急响应中心
金蝶安全应急响应中心(KDSRC)
vala 安全应急响应中心(valaSRC)
老虎国际安全应急响应中心(Tiger SRC)
中信保诚安全应急响应中心(ZXBCSRC)
旷视科技安全应急响应中心
声网安全应急响应中心
泛微安全应急响应中心(WEAVERSRC)
绽放美物应急响应中心
瓜子安全应急响应中心(GZSRC)
汽车之家安全应急响应中心
字节跳动安全应急响应中心
去哪儿安全应急响应中心
契约锁安全应急响应中心
星纪魅族安全应急响应中心
同盾安全应急响应中心

华安云: https://vti.huaun.com/index/
ALLSEC(众安): https://i.allsec.cn/#/
360: https://src.360.net/home
DayDayPoc(江远盛邦): https://ddpoc.com/
微步社区: https://x.threatbook.com/v5/vulReward
雷神众测: https://www.bountyteam.com/
火线: https://www.huoxian.cn/
edusrc(教育行业漏洞平台): https://src.sjtu.edu.cn/

企业自建:
开放原子开源基金会: https://ossvd.cn/
TSRC(腾讯): https://security.tencent.com/
MiSRC(小米): https://sec.xiaomi.com/#/
快手 SRC: https://security.kuaishou.com/
知乎: https://www.zhihu.com/term/info-sec
BSRC(百度): https://bsrc.baidu.com/views/main/index.html#home
蚂蚁 SRC: https://security.alipay.com/
ASRC(阿里巴巴): https://security.alibaba.com/
vivoSRC: https://security.vivo.com.cn/#/home
SSRC(深信服): https://security.sangfor.com.cn/dashboard
OSRC(贝锐): https://security.oray.com/
BILISRC(哔哩哔哩): https://security.bilibili.com/
JSRC(京东): https://security.jd.com/#/index
MUSRC(东方航空): https://src.ceair.com/
360SRC: https://security.360.cn/
SFSRC(顺丰): https://sfsrc.sf-express.com/home
PSRC(平安): https://security.pingan.com/homePage/index
好未来 SRC: https://src.100tal.com/
MTSRC(美团): https://security.meituan.com/#/home
金山 SRC: https://security.wps.cn/
DSRC(滴滴): https://sec.didichuxing.com/
DMSRC(多点): https://src.dmall.com/
XDFSRC(新东方): https://src.xdf.cn/
YZSRC(有赞): https://src.youzan.com/
USRC(银联): https://security.unionpay.com/
SSRC(新浪): https://sec.sina.com.cn/
DYSRC(斗鱼): https://security.douyu.com/#/welcome
XYSRC(小赢): https://security.xiaoying.com/
ISRC(合合信息): https://security.intsig.com/
ZPSRC(智联招聘): https://src.zhaopin.com/
KKSRC(快看漫画): https://security.kuaikanmanhua.com/
SoulSRC(Soul): https://security.soulapp.cn/
统信软件 SRC: https://src.uniontech.com/#/index
ByteSRC(字节跳动): https://src.bytedance.com/home
赛力斯 SRC: https://src.seres.cn/
71SRC(爱奇艺): https://security.iqiyi.com/
OSRC(OPPO): https://security.oppo.com/cn/
USRC(UCloud): https://src.ucloud.cn/
CSRC(携程): https://sec.ctrip.com/
中通 SRC: https://sec.zto.com/home
NSRC(网易): https://aq.163.com/
XPSRC(小鹏汽车): https://security.xiaopeng.com/
荣耀 SRC: https://security.honor.com/src/#/home
LYSRC(同程旅行): https://sec.ly.com/
小红书 SRC: https://security.xiaohongshu.com/
JJSRC(竞技世界): https://security.jj.cn/
TCLSRC(TCL): https://src.tcl.com/zh/index
BKSRC(贝壳): https://security.ke.com/
MFSRC(马蜂窝): https://security.mafengwo.cn/
MMSRC(陌陌): https://security.immomo.com/
QFSRC(奇富科技): https://security.360shuke.com/#/index
HSRC(海康威视): https://www.hikvision.com/cn/support/CybersecurityCenter/
DSRC(大疆): https://security.dji.com/zh
MCDSRC(麦当劳): https://security.mcd.cn/
理想 SRC(理想汽车): https://security.lixiang.com/index
XMSRC(喜马拉雅): https://security.ximalaya.com/
58SRC(58 同城): https://security.58.com/
FSRC(焦点): https://security.focuschina.com/
LFSRC(龙湖): https://security.longfor.com/#/home
LLSRC(货拉拉): https://llsrc.huolala.cn/#/home
ZASRC(众安): https://security.zhongan.com/#/
LPSRC(猎聘): https://security.liepin.com/
TOPSRC(天融信): https://src.topsec.com.cn/
NIOSRC(蔚来汽车): https://niosrc.bugbank.cn/
HSRC(哈啰): https://src.hellobike.com/index.php
安恒 SRC(安恒): https://security.dbappsecurity.com.cn/index
XLSRC(迅雷): https://security.xunlei.com/
YSRC(看云): https://security.kanyun.com/
CESRC(宜信): https://security.creditease.cn/
度小满 SRC(度小满): https://security.duxiaoman.com/index.html#/main
DHSRC(敦煌网): https://dhsrc.dhgate.com/
MZSRC(魅族): https://sec.meizu.com/
EMSRC(东方财富): https://security.eastmoney.com/
FSRC(法大大): https://sec.fadada.com/#/index
FSRC(富友): https://fsrc.fuiou.com/#/
HSRC(华住): https://sec.huazhu.com/
iflySRC(讯飞): https://security.iflysec.com/
KGSRC(酷狗): https://security.kugou.com/
美丽 SRC(美丽联合): https://security.mogu.com/#/
华为 PSIRT(华为): https://bugbounty.huawei.com/#/home
PWSRC(完美世界): https://security.wanmei.com/
RSRC(融 360): https://security.rong360.com/#/
SNSRC(苏宁): https://security.suning.com/
上上签 SRC(上上签): https://src.bestsign.cn/
T3SRC(T3 出行): https://security.t3go.cn/#/home
THSRC(途虎): https://security.tuhu.cn/
TNSRC(途牛): https://sec.tuniu.com/
VSRC(唯品会): https://sec.vip.com/
WiFiSRC(WiFi 万能钥匙): https://sec.wifi.com/
WSRC(微众银行): https://security.webank.com/
挖财 SRC(挖财): https://sec.wacai.com/
WSRC(微博): https://wsrc.weibo.com/
ZSRC(知识星球): https://security.zsxq.com/
ZRSRC(自如): https://zrsecurity.ziroom.com/
YSRC(萤石): https://ysrc.ys7.com/#/home
ZMSRC(掌门教育): https://security.zhangmen.com/#/
猪八戒 SRC(猪八戒): https://sec.zbj.com/

部分参考: https://wiki.bafangwy.com/doc/253/

原文地址: https://mp.weixin.qq.com/s/3h9xtScU9viqdfdBwvfGXg

即将毕业的计算机本科生,两年 PLA 经历,大二大三状态差导致学业进度慢,还挂了不少科(一方面精神状态不好,一方面从入学起就对成绩不是很重视,不过目前为止全部通过了)。自己平时喜欢捣鼓软路由、NAS ,也经常用服务器、Linux ,偶尔用 AI 给开源项目加点自己需要的功能,也提过几个小 PR 。近几年行业变化太快了,从 GPT-1 到现在各种 vibe coding 工具( Cursor 等),感觉基础编程工作 AI 基本能 cover 。以前要从语法、数据结构、算法学起,现在零基础靠对话就能出简单程序,bug 也能问 AI 修。这让我很困惑:

  • 那些面试八股文、底层原理(操作系统、网络、数据库原理等)还有必要全面掌握吗?工作中纯靠 AI + 查资料快速上手组件/框架/语言,是不是已经够用了?   ps. 工作能完成不就行了,面试问的这些东西上班遇到不能上网查么🥲
  • 普通 CS 学生出路在哪?前沿领域( AI 研究等)接触不到,重复性“缝合”工作即使是非科班也能靠 AI 短平快做,那我们优势到底剩什么?会不会以后码农会变得跟“外卖员”一样?
  • 未来 3-5 年 AI 编程再进化(少幻觉、人类只需要负责指挥、AI 自我迭代),程序员角色会彻底改变吗?

个人现状

  • 去年在一家初创实习半年多,300/天,但公司架构不清晰、什么都干、节奏快压力大、偶尔加班半小时一小时(加班不严重但是工作时间压力很大产出要求高),没上班还没感觉没概念,上了半年班发现下班之后完全没什么个人时间,下个班回到学校吃完饭都快八九点了,玩会手机就该洗洗睡了,感觉自己和机器没什么区别。
  • 最近刚收到个 offer:创新创意部门,hr 讲的倒是都蛮好的,公司前景氛围人才重视,也不知道实际咋样,转正 7k-14k ,实习 210/天,早九晚六。   半夜睡不着一查知乎,不查不知道一查发现公司有不少黑料(拖发少发年终奖/画饼/管理问题等),刚收到 offer 那几天还蛮兴奋的现在感觉是被破了盆凉水。

朋友建议春招两手抓(考编 + 找工作),但是感觉有心无力了,尤其不擅长应试备考,太折磨了(我觉得他说的很对,话糙理不糙「要挣钱就得吃💩啊」)。

上班前还觉得自己的路就是走就业,不考研也不考公,感觉考公薪资低,考研完了还是要就业不如早就业攒经验,上班了之后开始自我怀疑了,甚至动摇还要不要干互联网了,每天盯着电脑久坐伤眼又伤腰的。

迷茫,发现高中同学考了两年编还在考倒不是那么焦虑了,现阶段不知道毕业前这几个月还要不要找实习,还是做些其他什么?

求指点🥺

理性讨论,欢迎喷,但别人身攻击哈。谢谢!

题目描述

请从字符串中找出⼀个最⻓的不包含重复字符的⼦字符串,计算该最⻓⼦字符串的⻓度。

数据范围: ⻓度⼩于40000

示例1
输⼊:"abcabcbb"
返回值:3
说明:因为⽆重复字符的最⻓⼦串是"abc",所以其⻓度为 3。

示例2
输⼊:"bbbbb"
返回值:1
说明:因为⽆重复字符的最⻓⼦串是"b",所以其⻓度为 1

示例3
输⼊:"pwwkew"
返回值:3
说明:因为⽆重复字符的最⻓⼦串是 "wke",所以其⻓度为 3。

思路及解答

暴力枚举

双层循环枚举所有子串,检查是否包含重复字符

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) return 0;
        
        int n = s.length();
        int maxLen = 0;
        
        // 枚举所有可能的子串起始位置
        for (int i = 0; i < n; i++) {
            // 枚举所有可能的子串结束位置
            for (int j = i; j < n; j++) {
                // 检查子串s[i..j]是否无重复
                if (isUnique(s, i, j)) {
                    maxLen = Math.max(maxLen, j - i + 1);
                } else {
                    break; // 有重复,内层循环可提前结束
                }
            }
        }
        
        return maxLen;
    }
    
    // 检查子串s[left..right]是否无重复字符
    private boolean isUnique(String s, int left, int right) {
        Set<Character> set = new HashSet<>();
        for (int i = left; i <= right; i++) {
            char c = s.charAt(i);
            if (set.contains(c)) {
                return false;
            }
            set.add(c);
        }
        return true;
    }
}
  • 时间复杂度:O(n³),外层循环n次,内层循环最多n次,isUnique检查O(n)
  • 空间复杂度:O(min(n,128)),字符集大小有限

滑动窗口(基础版)

右指针扩展窗口,左指针收缩窗口以消除重复

窗口定义:

  • left:窗口左边界
  • right:窗口右边界
  • window:当前窗口内的字符集合

执行过程示例("abcabcbb"):

初始: left=0, right=0, window={}, maxLen=0
1. 添加'a': window={a}, right=1, maxLen=1
2. 添加'b': window={a,b}, right=2, maxLen=2
3. 添加'c': window={a,b,c}, right=3, maxLen=3
4. 添加'a'(重复): 移除s[0]='a', left=1
5. 添加'a': window={b,c,a}, right=4, maxLen=3
...
结果: 3
import java.util.HashSet;
import java.util.Set;

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) return 0;
        
        Set<Character> window = new HashSet<>();
        int left = 0, right = 0;
        int maxLen = 0;
        int n = s.length();
        
        while (right < n) {
            char c = s.charAt(right);
            
            // 如果当前字符不在窗口中,扩展窗口
            if (!window.contains(c)) {
                window.add(c);
                right++;
                maxLen = Math.max(maxLen, right - left);
            } 
            // 如果当前字符已在窗口中,收缩窗口
            else {
                window.remove(s.charAt(left));
                left++;
            }
        }
        
        return maxLen;
    }
}
  • 时间复杂度:O(2n) = O(n),每个字符最多被访问两次
  • 空间复杂度:O(min(n,128)),字符集大小固定

优化滑动窗口

遇到重复字符时,左指针直接跳转到重复字符的下一个位置

import java.util.HashMap;
import java.util.Map;

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) return 0;
        
        Map<Character, Integer> charIndex = new HashMap<>();
        int left = 0, maxLen = 0;
        
        for (int right = 0; right < s.length(); right++) {
            char c = s.charAt(right);
            
            // 如果字符已存在且在当前窗口内
            if (charIndex.containsKey(c) && charIndex.get(c) >= left) {
                // 左指针直接跳转到重复字符的下一个位置
                left = charIndex.get(c) + 1;
            }
            
            // 更新字符的最后出现位置
            charIndex.put(c, right);
            
            // 更新最大长度
            maxLen = Math.max(maxLen, right - left + 1);
        }
        
        return maxLen;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(min(n,128))

进一步优化:使用数组替代HashMap

ASCII字符只有128个,可使用固定数组,即使用int[128]记录字符最后出现的位置,-1表示未出现

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) return 0;
        
        int[] lastIndex = new int[128]; // ASCII字符集
        Arrays.fill(lastIndex, -1);    // 初始化为-1表示未出现
        
        int left = 0, maxLen = 0;
        
        for (int right = 0; right < s.length(); right++) {
            char c = s.charAt(right);
            
            // 如果字符在当前窗口内出现过
            if (lastIndex[c] >= left) {
                left = lastIndex[c] + 1; // 直接跳转
            }
            
            // 更新字符的最后出现位置
            lastIndex[c] = right;
            
            // 更新最大长度
            maxLen = Math.max(maxLen, right - left + 1);
        }
        
        return maxLen;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1) - 固定128大小

Apple 发布 iPhone 17e 与搭载 M4 芯片的 iPad Air

3 月 2 日,Apple 发布 iPhone 17e 与搭载 M4 芯片的新款 iPad Air 两款新品。

iPhone 17e 采用 6.1 英寸显示屏,配备超瓷晶面板 2,采用铝金属边框,搭载含 4 核图形处理器的 A19 芯片与 C1X 调制解调器,可使用 eSIM。C1X 与 iPhone 16e 上搭载的 C1 相比提速最高达 2 倍。机器支持 MagSafe,无线充电最高功率可达 15W,视频播放最长可达 26 小时。iPhone 17e 存储起步容量 256GB,有黑、白、粉三色可选,售价 4499 元起,3 月 11 日发售。来源

新款 iPad Air 搭载 M4 芯片(8 核 CPU 与 9 核 GPU),统一内存提升至 12GB,有 11 英寸与 13 英寸可选,提供深空灰、蓝、紫、星光色四色可选,容量起步 128 GB,售价 4799 元起,3 月 11 日发售。新款 iPad Air 采用了 N1 芯片与 C1X 调制解调器,支持 Wi-Fi 7、蓝牙 6 与 Thread 连接。来源


摩托罗拉新闻两则

摩托罗拉与 GrapheneOS 达成合作

摩托罗拉于 3 月 2 日在 MWC 2026 展会上宣布和 GrapheneOS 达成长期合作,将先进安全技术带给日常用户,双方将就此次合作共同加强智能手机安全,并就未来设备兼容 GrapheneOS 展开合作。摩托罗拉将在未来几个月与 GrapheneOS 在软件功能、安全性等方面合作,更多细节将随着合作深化逐步公布。目前摩托罗拉尚未公布哪些机型将会兼容或搭载 GrapheneOS,此前 GrapheneOS 只兼容谷歌 Pixel 系列手机。来源

摩托罗拉发布横向折叠屏手机 Razr Fold

摩托罗拉在 MWC 2026 现场发布了首款横向折叠屏手机 Razr Fold。该机型搭载骁龙 8 Gen 5 处理器,配合 16GB RAM 与 512GB ROM,部分市场将提供 1TB 存储款。采用 6.6 英寸 165Hz 的 21:9 pOLED 外屏,是首款采用康宁大猩猩玻璃 Ceramic 3 的手机。内屏采用 120Hz 8.1 英寸 LTPO 屏幕。机身展开厚度 4.6mm(不含相机模组),合上厚度 9.9mm,重 244g。电池容量 6000 mAh,支持 80W TurboPower 快充,50W 无线充电与 5W 反向无线充电。机身支持 IP48 与 IP49 防尘抗水,且支持 Moto Pen Ultra 触控笔。Razr Fold 将搭载 Android 16 系统,至少可获得七个大版本升级与七年安全补丁更新。Razr Fold 有 Pantone Blackened Blue 与 Pantone Lily White 两色可选,价格与具体上市时间未定,但会在 2026 年内正式发售。来源


联想在 MWC 发布多款新品

联想在 MWC 2026 发布多款新品与概念产品。

Yoga Book Pro 3D 概念笔记本以 3D 显示为亮点,期望达成无眼镜 3D 显示效果,在屏幕上自然显示深度、形状与空间关系。笔记本搭载上下两块联想 PureSight Pro Tandem OLED 屏幕,由联想自研 AI 软件可以将 2D 图像做 3D 转换显示在上屏,用户还可以经由 RGB 摄像头以空中手势完成缩放、旋转、互动等操作。下屏可配卡扣式键盘,提供调整光照、视角与色调的快捷方式。机器搭载 Intel Core Ultra 7 处理器与 RTX 5070 GPU。

Legion Go Fold 概念掌机搭载一块可从 7.7 英寸展至 11.6 英寸的 POLED 显示屏,手柄可拆卸。机器可以以四种形态工作:基础手持模式、竖直分屏模式、水平全屏模式、扩展桌面模式。

在扩展桌面模式下,右手柄可作为垂直鼠标使用。右手柄带有一块小屏幕,可作为触控板使用,还可以显示游戏设置、游戏表现数值,也能作为自定义热键使用。Legion Go Fold 搭载 Intel Core Ultra 7 258V 处理器,电池容量 48Whr,搭载 32GB RAM。

Yoga 9i 2-in-1 Aura Edition (14", 11) 笔记本维持 Yoga 系列经典的 360° 翻转形态,联想将这款笔记本定位为多功能绘画平板。机器采用 2.8K PureSight Pro OLED 触屏,峰值亮度 1100 尼特,覆盖 100% DCI-P3、Adobe RGB 与 sRGB 色域,适配 Yoga Pen Gen 2 手写笔,手写笔盒可与 A 面磁吸连接组成画布模式,为绘画提供更好的工学形态。

新机仍然支持 Yoga 系列此前的多形态使用方式。机器搭载 Intel Core Ultra Series 3 处理器,属 Copilot+ PC。机身带有两个 USB-C 雷电 4 接口,一个 USB-A 3.2 Gen 2 接口,一个 HDMI 2.1 FRL 接口,重 1.29kg。预计今年三月发售。

Yoga Pro 7a (15", 11) 采用 AMD Ryzen AI Max+ 系列处理器,适配统一内存架构,CPU 与 GPU 至高可采用 128GB RAM 运行。机器适配 Yoga Pen Gen 2,Force Pad 触控板由 Wacom 技术支持,可用于绘画,且使用手写笔时将自动屏蔽触摸手势。机器采用 Lenovo X Power 散热技术,配备升级的热管与双风扇,解热功率提升至 95W TDP,噪音可控制在 22dB。预计今年六月发售。

Idea Pad Pro Gen 2 平板采用骁龙 8s Gen 4 移动平台,内置联想 AI 解决方案,搭载 13 英寸 3.5K PureSight Pro 显示屏,支持 Dolby Vision。机身厚度 6.2mm,重量 600g 以下,电池容量 10200 mAh,支持 45W 快充,有月灰、云灰、薄荷色三色可选。

IdeaPad Slim 5i Ultra (14", 11) 笔记本搭载 WUXGA OLED/WQXGA IPS LCD 120Hz 显示屏,电池容量 65Wh,至高支持约 20 小时视频播放时间。机身最轻 1.15kg,机身最薄处 11.9mm,内置 FHD 红外摄像头,可用于面部识别,且自带物理隐私开关。

Legion Tab (8.8", 5) 平板,国内型号 Y700 五代,搭载 8.8 英寸 3K 显示屏,刷新率 165Hz,典型亮度达 600 尼特。平板搭载骁龙 8 Elite Gen 5 移动平台,最高配备 16GB RAM,电池容量 9000mAh,最高 512GB 储存。机身内置 Legion Coldfront Vapor 散热系统,与上代相比散热效率增加 32%。平板重 360g,有黑、白、荧光绿三色可选。

Legion 7a (15", 11) 游戏本搭载 AMD Ryzen AI Max+ 系列处理器,同样支持统一内存架构。机身采用铝合金,重 1.65kg,屏幕为 15.3 英寸 PureSight OLED。

AI 工作伴侣概念机形态类似桌面时钟,可以与用户产生有趣的互动,设备采用 AI 与用户的其他设备同步每日任务与时间,可一键生成合理平衡的一日计划。设备自带接口 Hub,可以用于桌面充电,机身上的自定义按钮可根据需求调整功能。

同时公布的还有 Yoga Slim 7i Aura Edition、IdeaPad Slim 3i、L16 桌面显示器等新机。来源


荣耀在 MWC 公布多款新品

荣耀在 MWC 2026 现场公布多款新品。折叠屏新品荣耀 Magic V6 先行公布赤兔红配色,国内将于 3 月 10 日正式发布。荣耀与阿莱(ARRI)宣布达成战略技术合作,将「为全球创作者带来电影级叙事表达体验」。

荣耀公布 Robot Phone 概念手机,作为新形态的 AI 终端,Robot Phone 机身摄像头自带电机驱动四关节可动云台,摄像头可通过动作完成 AI 互动、即时反馈、三轴图像增稳、智能物体追踪等功能,还可以完成随音乐节奏「舞蹈」等互动。目前荣耀开启 Robot Phone 用户许愿计划,可获取该机型进展动态并参与用户调研等。该机器预想于 2026 年内上市。来源

荣耀在 MWC 2026 还公布了首款人形机器人荣耀 ROBOT,现场参与舞蹈表演,展示太空步与后空翻。来源


高通发布全新 Snapdragon Wear Elite

高通于 3 月 2 日在 MWC 2026 上正式推出了全新骁龙可穿戴平台至尊版(Snapdragon Wear Elite),该平台的设计初衷是让 OEM 厂商和 AI 云服务提供商能够在这一全新的领域中进行开发并实现快速创新,并在多种产品形态的设备上部署 AI 智能体,包括智能手表、别针式设备、挂坠以及更多形态。平台首先针对内嵌式 NPU 进行了显著增强,可直接运行高达 20 亿参数规模的模型,并结合来自语音、视觉、位置,以及各类传感器的多模态输入,打造个性化的 AI 智能体,在工作、学习、健康以及日常生活的方方面面为用户提供支持。在性能上,该平台采用了全新的五核 CPU 架构,还集成了升级后的 CPU 和 GPU,带来了大幅的性能提升。与前代平台相比,CPU 性能提升最高可达 5 倍,GPU 性能提升最高可达 7 倍。而在能效方面,高通表示该平台可实现日常使用时长(DOU)提升 30%,同时可在仅 10 分钟之内充电约至 50%。连接上高通引入了对于可穿戴平台而言最为全面的连接组合,包括六项不同的连接技术:5G RedCap、超低功耗 Wi-Fi、蓝牙 6.0、UWB(超宽带)、全球导航卫星系统(GNSS),以及窄带非地面网络(NB-NTN)卫星通信。来源


掌阅发布 iReader Tango 2 Pro 墨水屏阅读器

掌阅于 3 月 2 日发布 iReader Tango 2 Pro 墨水屏阅读器,该阅读器采用类似手机的造型,可选黑白两色,搭配全新自研的超刷技术,动态刷新帧率至高可达 50 帧 / 秒,闪烁率趋近于 0。可插入 SIM 卡支持蜂窝网络通讯,可使用微信语音功能,后置 800 万像素摄像头可以用于扫码;屏幕采用 Carta 1300 墨水屏,色温亮度可自由调节;配有 6nm 工艺 8 核 CPU,以及 8+128GB 存储,标称续航约 101 小时。阅读器将于 3 月 10 日发售,首发价 1999 元。来源


阿里千问新闻三则

阿里巴巴大模型品牌统一为千问

阿里千问大模型于 3 月 2 日官宣,正式将阿里巴巴 AI 的总称和核心品牌统一为千问,千问大模型(Qwen)涵盖基础大模型与专业领域模型,千问 App 是阿里巴巴在 C 端的旗舰 AI 应用。统一名称之后,阿里巴巴大模型品牌中文为千问大模型,英文为 Qwen,「通义实验室」为阿里巴巴集团旗下 AI 机构的组织名称。来源

通义实验室发布两款支持自然语言指令的语音生成模型

阿里云通义实验室于 3 月 2 日宣布发布两款采用 FreeStyle 新范式的语音生成模型:Fun-CosyVoice3.5 与 Fun-AudioGen-VD,旨在推动语音生成技术进入自然语言精细控制的新阶段。Fun-CosyVoice3.5 专注于声音复刻与表达优化,核心突破在于支持通过自然语言指令直接控制生成效果,如「语气坚定一点」,而无需依赖预设标签。其支持多语种复刻,新增了对泰语、印尼语、葡萄牙语、越南语的生成能力,并在发音准确性、韵律听感及响应延迟上实现显著优化。Fun-AudioGen-VD 则专注于从零构建声音与听觉场景。它能够根据文字描述,直接生成指定的音色、情绪、角色乃至完整的背景环境与空间声学效果,实现了「人物+场景」的一体化声音创造。来源

千问 AI 眼镜 G1 开启全渠道预约

千问首款 AI 硬件「千问 AI 眼镜」于 3 月 2 日上线并开放预约,3 月 8 日在中国市场发售。首发推出 S1 与 G1 两大系列,均搭载最新一代千问大模型,具备行业领先的响应速度与交互流畅度,支持高精度多模态理解与实时交互,全面覆盖高清拍摄、AI 翻译、会议记录、识图识物等核心生活与办公场景。先行开售的 G1 系列配备双旗舰芯片双系统、五个麦克风阵列加骨传导、大振膜高性能喇叭声学硬件等,同时采取更轻量设计与可换电体验,整机重量仅约 40g,佩戴体验接近普通光学眼镜,配合天鹅颈可调节支架和 FDA 食品级硅胶鼻托,适合全天候舒适使用。G1 具备「手机级」影像技术,可实现 「0.6 秒极速抓拍、3K 视频录制」,并通过 AI 超分超帧技术输出 4K 视频;采用 Super RAW 暗光增强技术,显著提升暗光环境下的拍摄画质与稳定性。同时,其内置 64GB 存储空间,可显著延长连续拍摄时长。G1 系列定价 2899 元起,叠加国补到手价为 1997 元。来源


安克 eufyMake 立体纹理 UV 打印机 E1 国内上架

Anker 安克官方公众号于 3 月 2 日发文宣布 eufyMake E1 即日起在京东独家首发,并于 3 月 12 日启动全款预售。该打印机为创客、小型工作室设计,可在多种材质上印刷立体纹理。可实现在金属、玻璃、亚克力、木质表面印刷,可模拟油画笔触、皮革压纹等质感,印刷高度可达 5mm;同时该打印机随附的应用程序中还带有 AI 创作功能,可供用户生成纹理、浮雕等效果。工作模式包括平面印刷、圆柱印刷和 UV 转印贴,打印机内置 JetClean 自清洁系统,可自动维护喷头,降低堵塞风险。 来源


不妨一看的简讯

  • 徕卡在 MWC 2026 现场与小米一同发布了 Leica Leitzphone,国内将以小米 17 Ultra 徕卡版黑银色形式发售,定价 7999 元起。来源
  • 小米发布 Xiaomi Tag 定位追踪器,有 BLE 与 UWB 两个版本,定价分别为 69 元与 129 元。Xiaomi Tag 支持 IP67 防尘抗水,使用 CR2032 纽扣电池供电,适配 iOS 查找 app,UWB 版功能与 Xiaomi 17 Ultra、Xiaomi 17 Pro Max、Xiaomi 17 Pro 三款机型适配。BLE 版目前已开售。来源


少数派的近期动态

  • 少数派年度征文来了,古法手搓大战人工智能,你会是哪条赛道的大赢家?参与一下
  • 重磅新片《寻源南疆》上线,我们在雪山上拍了一部「公路电影」。看看精彩画面
  • 将设计装进耳朵:少数派×飞傲联名 CD 机盖板设计大赛已经开始啦。了解详情
  • 没什么用,但就是好玩:盘点或恶搞或无聊的「神经病」应用。看看都有啥
  • Sonos × 少数派 × 暖风家联合打造:声音与视觉的沉浸体验空间正式上线啦。了解详情
  • 我们正在优化并改进新的首页版式,如果你在使用过程中发现了任何问题或者有改进建议,请通过反馈表单告知我们。首页反馈收集

你可能错过的文章

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

    我平时经常需要远程到他人电脑上协助处理问题,但发现一个比较稳定的现象:只要在远程会话中操作微信客户端,基本都会触发“环境异常”,随后被强制下线,几乎是 100% 复现。

    从这个表现来看,微信客户端应该具备一定的运行环境识别能力。比如,它是否会检测当前系统的会话类型?是否会枚举系统进程,识别是否存在远程控制软件?又或者是通过分析操作环境特征,比如鼠标轨迹、点击节奏等行为数据进行综合判断?

    我自己也做过一些简单排查,但并没有发现异常或特殊接口调用,所以有些困惑它具体是通过什么方式实现这一判断的。

    明天演唱会中午开抢,代拍晚上就上我的猫眼账号,给了他验证码,他还要我美团支付密码……
    给我发了这样一段话~

    “12.30 日猫眼 app 更新后
    异地登录需要人脸识别
    麻烦去美团取消一下实名认证

    [猫眼 APP 属于美团旗下,如不注销美团实名信息。需要刷脸才能登录]

    不影响你的美团订单 抢完票你可以在绑定美团实名 不绑定也不影响美团的使用 h“

    美团支付密码我是肯定不会给他的,登陆个猫眼还要我美团支付密码,都不知道是他傻还是把我当傻的

    现在的学校只会做成绩排名,大家都知道好成绩高学历这种在现代社会对于找对象毫无用处,挣大钱略有加成的东西,其重要性日益衰败。现在更多的是颜值社会,好身材➕好容貌真的可以在社会横着走,更是跨越阶层最高效的方式,哪怕最差也可以在抖音混个几十万粉丝,也比你清北毕业后的收入高多了。大家学校学习就是为了找好工作再找好对象,不应该走卷成绩这种弯路,更应该卷身材 卷容貌,学校为学生的未来道路着想,更应该全校时时比拼谁最帅谁最美,月考期末考试比谁的腹肌发达,谁的身材更 S 型。没有马甲线的都要请家长来学校,下颌线能削水果的可以直接保送重点高中 or 名牌大学。这些人真正毕业后才是爱情事业双丰收,学校作为学生成长最重要的一环必须肩负起这样的责任。我的这个观点并不偏激,想想你在菜市场买菜用英文➕文言文讨价还价时会用三角函数重要,还是面试 or 相亲时一副好身材➕好容貌重要?

    🚨 故障现象

    • 设备在凌晨异常断电
    • 开机后蓝色电源灯闪烁,风扇转动几秒后自动关机
    • 路由器记录显示设备在凌晨断开连接


    🔍 排查步骤与过程

    1️⃣ 初步排查

    • 拔除所有 USB 设备、网线 → 问题依旧
    • 仅保留 1 号盘,拔掉其他硬盘 → 问题依旧
    • 更换 1 号盘为另一块已知正常的机械盘(非群晖阵列内)→ 问题依旧

    2️⃣ 关键测试:拔除所有硬盘

    • 拔掉全部硬盘后,设备可正常启动,并听到自检完成的“滴”声
    • 说明主板、内存等基础组件应无故障

    3️⃣ 尝试使用 2.5 英寸 SATA 固态硬盘

    • 将一块 2.5 英寸 SATA SSD 插入 1 号盘位 → 设备可正常启动
    • 可进入系统安装界面,局域网内可被发现
    • 说明 SATA 接口、背板、主板主要功能正常

    4️⃣ 进一步验证

    • 换回其他机械硬盘仍无法启动
    • 结合机械硬盘启动功耗较高、固态硬盘功耗较低的特点,推测为电源带载能力不足


    ✅ 故障结论

    电源损坏,导致无法在机械硬盘启动时提供足够功率,但在低功耗的 SSD 下可勉强工作。


    📌 排查逻辑总结

    1. 排除硬盘集体故障:RAID 5 阵列中多块硬盘同时损坏概率极低,且机械硬盘损坏通常有过程,非瞬间完全失效。
    2. 排除主板/背板故障:若主板、南桥或 SATA 背板损坏,即便使用 SSD 也应无法识别或启动。
    3. 指向电源问题:只有电源输出功率不足,才会出现“低功耗设备可启动,高功耗设备不可启动”的现象。


    💡 经验建议

    • 群晖电源模块损坏并不罕见,尤其是在常年不间断运行后
    • 若出现类似“蓝灯闪烁→风扇转→关机”现象,可优先尝试替换电源测试
    • 建议备一个兼容电源或使用 DC-ATX 电源模块作为应急替换方案


    🛠 最终处理

    更换为新电源后,设备恢复正常,所有硬盘可正常识别并启动。


    希望这份记录能帮到遇到类似问题的朋友。

    点赞 + 关注 + 收藏 = 学会了

    整理了一个n8n小专栏,有兴趣的工友可以关注一下 👉 《n8n修炼手册》

    可能有些工友看了旧版的教程,发现工作流顶部导航栏里有一个“活跃(Activate)”按钮。

    后台问我,为什么自己的却是这样的。

    “活跃(Activate)”按钮旷工了吗?

    那定时任务怎么办?n8n 还能不能用了?

    别方,新版的(本文使用的版本是 2.6.3)“活跃(Activate)”被取消掉了,如果你的工作流有定时任务,直接点击“Publish”按钮一样会定时定候自动工作。

    我搞个简单的定时任务证明一下。

    每10秒中生成一个名字和内容都是「年月日时分秒」的txt文件。

    这个工作流的 JSON 文件放在文末,有需要的工友可以拿去测试一下。

    点击工作流右上角的“Publish”按钮,它就会变成“Published”,并且左侧还有个小绿点。

    此时定时任务就已经开始工作了。

    打开 n8n 文件存储的文件夹可以看到每隔10秒就会生成要给 .txt 文件。

    就算你关掉 n8n 页面它也会继续运行。

    如果想关掉定时器,就要找到这个工作流,然后点击它的“Unpublish”按钮才能停下来。

    本文示例的工作流。

    {
      "name": "测试定时任务",
      "nodes": [
        {
          "parameters": {
            "operation": "toText",
            "sourceProperty": "title",
            "options": {}
          },
          "type": "n8n-nodes-base.convertToFile",
          "typeVersion": 1.1,
          "position": [
            512,
            0
          ],
          "id": "7292c851-10c2-4a44-a708-dd58bc3f0f89",
          "name": "Convert to File"
        },
        {
          "parameters": {
            "assignments": {
              "assignments": [
                {
                  "id": "876bfd58-b014-43d4-9990-2826d028e562",
                  "name": "title",
                  "value": "={{ $now.toFormat('yyyyMMddHHmmss') }}",
                  "type": "string"
                }
              ]
            },
            "options": {}
          },
          "type": "n8n-nodes-base.set",
          "typeVersion": 3.4,
          "position": [
            288,
            0
          ],
          "id": "90a6b894-6564-4c95-b49e-39b685be009c",
          "name": "Edit Fields"
        },
        {
          "parameters": {
            "operation": "write",
            "fileName": "={{ `/home/node/.n8n-files/${$now.toFormat('yyyyMMddHHmmss')}.txt` }}",
            "options": {}
          },
          "type": "n8n-nodes-base.readWriteFile",
          "typeVersion": 1.1,
          "position": [
            736,
            0
          ],
          "id": "282036a8-f1d6-4d51-8e88-61c238d94878",
          "name": "Read/Write Files from Disk1"
        },
        {
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "seconds",
                  "secondsInterval": 10
                }
              ]
            }
          },
          "type": "n8n-nodes-base.scheduleTrigger",
          "typeVersion": 1.3,
          "position": [
            64,
            0
          ],
          "id": "c3bb6706-1f39-4161-a2e5-7b3a8253a7b8",
          "name": "Schedule Trigger"
        }
      ],
      "pinData": {},
      "connections": {
        "Edit Fields": {
          "main": [
            [
              {
                "node": "Convert to File",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Convert to File": {
          "main": [
            [
              {
                "node": "Read/Write Files from Disk1",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule Trigger": {
          "main": [
            [
              {
                "node": "Edit Fields",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      },
      "active": false,
      "settings": {
        "executionOrder": "v1",
        "binaryMode": "separate",
        "availableInMCP": false
      },
      "versionId": "4f3e7f88-c69c-4a4d-a6c8-9eda94fea91d",
      "meta": {
        "instanceId": "8b30a8ba058f5126b4f4e9373018ce0596139a4d2028982510061e844b858b71"
      },
      "id": "POOpHifJ6XWEsOVdjYblV",
      "tags": []
    }

    以上就是本文的全部内容啦,想了解更多n8n玩法欢迎关注《n8n修炼手册》👏

    如果你有 NAS,我非常建议你在 NAS 上部署一套 n8n,搞搞副业也好,帮你完成工作任务也好 《『NAS』不止娱乐,NAS也是生产力,在绿联部署AI工作流工具-n8n》

    点赞 + 关注 + 收藏 = 学会了

    目前 V 币的链上打赏机制虽然去中心化,但每次操作的很麻烦(要连接钱包,输入密码,确认转账等等)在一定程度上限制了大家打赏的积极性。因此,期待 V2EX 能开发一个站内的钱包记账系统。

    具体的运行机制:
    1.统一资金池: 设立一个站内公共钱包地址,用户将链上 V 币充值到该地址。
    2.中心化记账: 充值后,用户的 V 币转化为站内数据库的记账余额。站内的所有打赏行为仅涉及数据库余额的增减,不再需要每次都上链。
    3.自由提现: 用户可以随时将站内余额申请提现,系统再从公共钱包将对应的 V 币打入用户的个人链上钱包。

    点赞 + 关注 + 收藏 = 学会了

    💡整理了一个 NAS 专属玩法专栏,感兴趣的工友可以戳这里关注 👉 《NAS邪修》

    在一个雷雨交加的夜晚,我打开绿联NAS用Docker装了个飞牛OS。同样是NAS系统为什么要这样套娃?这到底是绿联的沦丧还是飞牛的扭曲?背后究竟隐藏着哪些不为人知的玄机?

    错综复杂、真假难辨、蛛丝马迹。敬请收看本期在绿联NAS用Docker装飞牛OS。

    部署前准备

    • 设备:绿联 NAS(本文以 DXP4800 Plus 为例)
    • 硬盘空间:不小于 8G
    • 内存建议:3G 以上(推荐分配 4G)

    打开绿联的「文件管理」应用,在 docker 文件夹下新建 fnOS 文件夹。

    打开「Docker」应用,新增一个项目。

    • 项目名称:fnos
    • 存放路径:/docker/fnos

    粘贴以下 Compose 配置

    services:
      fnos:
        image: ghcr.io/qemus/qemu:latest
        container_name: fnos
        environment:
          BOOT: "https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-1.1.20-1596.iso?sign=b666841bf8e67f5666c2ed3e2a686882&t=1772379402"
          RAM_SIZE: "4G"
          CPU_CORES: "4"
          DISK_SIZE: "128G"
        devices:
          - /dev/kvm
          - /dev/net/tun
        cap_add:
          - NET_ADMIN
        ports:
          - 8006:8006
          - 5666:5666
        volumes:
          - ./dir1:/storage
        restart: unless-stopped
        stop_grace_period: 2m

    这里有几个参数需要说明一下。

    BOOT 填入飞牛系统(fnOS)的下载地址,这个地址可能会变,实际以你部署时飞牛官网给的地址为准。

    fnOS 的下载地址可以在飞牛官网找:https://www.fnnas.com/download

    x86/ARM 按自己 CPU 架构选择。

    我的 NAS 是绿联 DXP4800 Plus,所以我下载 x86 这个。

    点击“下载 fnOS(x86)”按钮,之后再点击“直接下载”按钮(不要选“迅雷下载”)。

    然后在浏览器的“下载记录”里就能看到 fnOS 的下载记录,点击它的链接按钮就能复制它的地址,填入 BOOT 这项里。

    environment 里还有几个参数要了解的:

    • RAM_SIZE: 分配给 fnOS 的内存(建议≥4G)
    • CPU_CORES: 分配 CPU 核心数,比如"4"
    • DISK_SIZE: 分配给 fnOS 的虚拟硬盘,比如"128G"

    ports 这里配置了2个端口,分别是 80065666,冒号左边的数字可以自定义,右边的数字不能改。

    • 8006:8006 是飞牛后台端口,装系统时要访问这个端口。
    • 5666:5666 是 WebUI 端口,装完系统后,我们要用图形界面就要访问这个端口。

    配置好 Compose 代码后,点击“立即部署”,等待项目构建成功后切换到“容器面板”,找到 fnos 这项,点击它旁边的箭头按钮,打开 8006 这项(或者在浏览器访问 NAS_IP:8006)。

    首次打开会看到它在下载飞牛系统(fnOS)。

    系统下载完成后,就进入安装系统环节。

    飞牛支持 Graphical 和 Rescuing 两种安装方式,首选 Graphical,如果安装失败再试试 Rescuing。

    我选了 Graphical 方式安装,然后就进入“选择安装位置”这步。由于我在 Compose 配置里只设置了1个硬盘(128G),所以当前可以选的就只有1个盘。

    选中它,点击“下一步”。

    系统分区建议大于8G,我给了64G。

    分配的内存也建议大于3G,我给了4G。

    分配完系统资源,点击“下一步”,等待它把系统装完。

    装完后,进度条就是100%,点击“下一步”。

    这里要给 fnOS 配置网络,但没什么可以选的了,所以直接默认,点击“保存”。

    装好系统后就可以开机了。

    选择“FNOS GNU/Linux”这项。

    然后就是等待开机的过程,界面会展示黑底白LOGO的牛头。

    开机成功后,在浏览器访问 NAS_IP:5666 ,这是 fnOS 图形化界面的入口。

    进入后会进入一个五彩斑斓的界面,点击“开始 NAS 之旅”。

    首次使用需要设置设备名字以及管理员账号,设置完成后点击“进入 fnOS”。

    登录后就能进入 fnOS 桌面了,长这样子。

    进入桌面后第一件事是把硬盘分配好(系统设置 - 存储空间管理 - 创建存储空间)。

    创建成功后,存储空间就会看到新增了一项。

    之后就可以正常使用 fnOS 的各项功能了。

    我试了一下开启“远程访问”,打开“远程访问 - FN Connect”,配置一个 FN ID。

    配置完成后,通过手机App也能远程访问到了。


    以上就是本文的全部内容啦,你有好玩的镜像推荐吗?欢迎在评论区留言讨论!

    想了解更多NAS玩法记得关注《NAS邪修》👏

    往期推荐:

    点赞 + 关注 + 收藏 = 学会了