
做车载嵌入式或者汽车电子应用层/BSP的朋友多少都有这种经历面试自我介绍刚讲完面试官第一个问题大概率落在 CAN 上。不是问“你用过CAN吗”而是摸一摸你的底知道帧结构吗异常帧怎么定位接着顺藤摸瓜问 UDS0x10、0x27、0x28 这些服务到底在干嘛再往上拔一层就到 OTA刷写失败怎么办、有没有做回滚。你会发现UDS、OTA、CAN 原本就是一条完整链路上的三个环节只是很多人把它们拆开背了。这篇是“面试必问”系列第3篇。我这些年帮人做模拟面试有一个感受特别明显只背概念的人通常撑不过第三轮追问能把协议、代码、现场排查逻辑串起来的人反而容易被录用。下面我把常考的7大模块整体过一遍重心放在 UDS 诊断、OTA 升级、CAN 通信三块剩下4块网络管理、Bootloader、信息安全、XCP标定也会给出最短的切入路径。正在准备车载嵌入式岗位的同学可以直接对照复习。1. 先立骨架面试官反复问的东西无非这7大模块很多候选人喜欢按协议栈分层复习CAN驱动、诊断栈、传输层、应用层。但这种复习方式有一个致命问题就是知识是断开的。面试官追问“刷写失败之后你怎么定位”你脑子里需要同时调出CAN收发、UDS状态机、Flash驱动、看门狗策略那一刻才会发现分层背诵的短板。我建议换个思路把自己代入到一个完整的控制器开发场景里。无论是车身控制器、T-Box、域控制器还是电机控制器日常接触的核心模块基本逃不出下面这7块。面试官问的99%的问题都能落到这7块的某一处或者几块的交界处。1.1 先搞清楚面试官到底在考什么模块常考知识点高频追问CAN通信帧结构、位时序、仲裁、错误帧、Busoff采样点怎么算为什么终端电阻是120欧UDS诊断服务号、会话、安全访问、NRC0x28和0x85到底有什么不同OTA升级刷写流程、回滚、A/B分区、校验刷到一半断电怎么办网络管理NM状态机、休眠唤醒CAN报文为什么能唤醒ECUBootloader跳转、向量表、Flash驱动APP和Boot怎么联动信息安全安全启动、SecOC、防重放密钥放在哪怎么防刷写XCP标定A2L、DAQ、STIM标定和诊断的区别是什么可以很明显地看到多数问题都是“概念 实现 异常排查”三层结构。概念回答清楚只算及格能讲出异常现场怎么处理才算加分。这也是我建议不要把协议栈孤立去背的原因一条完整的刷写链路天然就把CAN、UDS、OTA、Bootloader、信息安全全部串起来了。1.2 把模块串成一条项目主线给一个非常常见的闭环场景云端下发升级包网关下载后走CAN总线通过UDS服务刷写目标ECU。这个链路把7大模块全部覆盖了云端到网关是网络层的事网关拿到OTA包后要校验签名这是信息安全网关和ECU之间走CAN涉及CAN驱动、收发器、总线仲裁这是CAN通信刷写动作本身由UDS服务承载比如0x10进会话、0x27解锁、0x34请求下载、0x36传数据这是UDS诊断整个过程中ECU要不断判断要不要跳BootloaderFlash怎么擦写启动标志怎么维护这是Bootloader和Flash管理刷写完成后ECU要恢复正常工作但整车不能一直跑着需要网络管理控制休眠唤醒这又是NM如果你想在实车上改标定参数就要用到XCP用A2L文件描述ECU内部地址。面试前如果能拿这个主线把自己的项目套进去面试官问你任何一个点你都能顺着主线往上挂。下面我一个个拆开讲。2. CAN通信帧结构、位时序、错误帧这些底层细节必须脱口而出CAN这部分最容易被低估。很多人觉得“我会用HAL库配置CAN能发能收就算会了”结果面试官一问“标准帧画一下”当场卡住。CAN作为车载最基础的骨干总线几乎是所有面试的第一道题这里答得好不好直接影响后面你对诊断和OTA问题的可信度。2.1 帧结构面试官会让你当场默画一帧标准数据帧CAN 2.0的帧结构面试官一般会让你画或者用一句话问“标准帧和扩展帧差在哪”。别小看这个基础题我统计下来能完整画对一帧的人不到一半。标准数据帧从SOF开始一个显性位表示总线开始被占用。随后是仲裁场11位ID加1位RTR。数据帧的RTR是显性0远程帧的RTR是隐性1。这里就埋了一个考点为什么数据帧优先级高因为RTR在仲裁时显性位会“赢”过隐性位数据帧比远程帧优先这是设计上为了防止远程帧占总线。然后是控制场IDE位、保留位r0、4位DLC。标准帧的IDE是0扩展帧变成1。接着数据场最多8个字节CRC场是15位CRC加1个隐性分隔符ACK场包含ACK槽和ACK分隔符最后7个隐性EOF。你要是能把每一段的位长说清楚面试官基本就知道你见过实物。扩展帧的区别在仲裁场29位ID前有一段用SRR位替代RTR的位置IDE位变成1真正的RTR被放到后面。CAN FD则在控制场多了FDF位、BRS位数据场可到64字节。如果面试官再追问“为什么CAN FD要用更长的CRC”你可以说因为数据场变长CRC碰撞概率会上升而且CAN FD的CRC多项式针对不同帧长做了优化还多了动态填充位计数错误检测能力明显比CAN 2.0强。2.2 波特率与采样点不是背公式要会算会配置500kbps不算本事面试官一般会追问“采样点你设了多少为什么”。计算逻辑不复杂但要能把每一步说清楚。CAN的每一位时间由若干个时间量子Tq组成典型结构是同步段1个Tq 传播段和相位缓冲段1合称BS1 相位缓冲段2BS2。波特率公式fBit fCAN / (Prescaler * (1 BS1 BS2))采样点 (1 BS1) / (1 BS1 BS2)举个例子STM32 bxCAN外设时钟36MHz目标是500kbps。取预分频6BS18BS23则每一位时间量子数 1 8 3 12波特率 36MHz / (6 * 12) 500kHz采样点 (1 8) / 12 75%。注意这里HAL库的Prescaler参数和寄存器里的BRP有一个“差值”关系实际配置时以HAL库为准但寄存器层面理解要清醒。为什么采样点一般放在75%到85%之间因为CAN总线没有时钟线接收方要靠采样点避开信号边沿附近的振铃和不稳定区域。总线短、波特率低采样点可以稍靠后比如85%总线长、干扰多、波特率高采样点可以回调到80%甚至75%。有很多人刷写时诊断通信偶发性超时最后定位就是采样点设置太靠前正好采到总线波形毛刺上。2.3 错误帧与Busoff现场排查的隐藏考点面试官问CAN最可能追到异常处理比如“你线上遇到Busoff怎么定位”。CAN的错误检测机制有5种位错误、填充错误、CRC错误、格式错误、ACK错误。任意节点发现错误就会主动发送错误帧让当前报文作废防止错误帧继续被当成有效数据。Busoff是比较严重的状态发送错误计数TEC超过255节点主动脱离总线不再参与通信。恢复条件是总线空闲状态下连续监听到128次11个隐性位。很多面试者知道这个结论但不知道现场怎么处理。实际排查时我会按这个顺序来先用示波器抓CAN_H和CAN_L差分波形看电平有没有明显畸变幅值是否达标再确认终端电阻。注意是两个节点各有一个120欧节点少的时候要检查是不是两个都在或者一个都没有然后用CAN盒或记录仪持续抓Error Frame统计错误帧的ID和频率如果某个节点频繁发错误帧基本就是它的位时序配置、时钟精度或者物理层出问题最后看TEC恢复时间如果Busoff反复出现检查是不是总线上同一时刻采样点设置差异太大导致互相误判。为什么终端电阻是120欧根本原因是CAN收发器输出阻抗和线缆特性阻抗匹配120欧是ISO 11898标准里典型双绞线特性阻抗的值。阻抗不匹配会造成反射波形边缘出现振铃严重时直接导致采样错误。面试时能说到“发射和反射叠加”这个层面就比单纯背一个数字强很多。3. UDS诊断别死背服务要理解会话、状态机和NRCUDS是ISO 14229定义的一套统一诊断服务但直接把ISO文档拿出来啃效率很低。面试不会考你每一个服务号的缩写真正高频的是和刷写、故障排查强相关的那几个0x10、0x11、0x27、0x3E、0x28、0x22、0x2E、0x31、0x19、0x14、0x85。只要把它们按功能分组你会发现记忆量小很多而且能讲清楚“为什么刷写前要做那一串服务”。3.1 服务号可以分组记会话、安全、读取、控制四类我把面试里出现频率最高的服务分成四组诊断会话与复位0x10 DiagnosticSessionControl0x11 ECUReset。0x10的子功能要熟0x01默认会话0x02编程会话0x03扩展会话。面试官很爱问“默认会话和扩展会话有什么区别”回答要点是默认会话下很多服务不可用比如0x27安全访问、0x2E写数据、0x31例程控制通常要求扩展或编程会话扩展会话一般用于诊断标定编程会话给Bootloader刷写用。安全访问0x27 SecurityAccess。这个服务牵扯到seed和key典型流程是诊断仪发0x27 01请求seedECU返回一组随机数诊断仪通过算法计算后发0x27 02给key。这里有几个隐藏考点第一key算法不应该在传输明文里可逆推出常见做法是用私有算法、AES或CRC变体配合随机种子第二ECU侧要有尝试次数限制和延时限制比如连续错3次锁10分钟防暴力破解。数据读取与控制0x22 ReadDataByIdentifier、0x2E WriteDataByIdentifier、0x2F InputOutputControlByIdentifier、0x31 RoutineControl、0x19 ReadDTCInformation、0x14 ClearDiagnosticInformation。0x22和0x2E是按DID读写数据比如VIN、软件版本、硬件版本0x2F用于控制IO比如强制某个输出口高电平0x31是例程控制擦Flash、校验内存这一类动作都走它。通信控制与维护0x3E TesterPresent、0x28 CommunicationControl、0x85 ControlDTCSetting。0x3E是保活报文必须在S3Server超时前周期性发送通常是几百毫秒一发否则会话自动跳回默认会话。0x28用来控制应用报文的收发0x85用来关闭/开启DTC记录。这两个服务在OTA刷写里几乎是必考的区分它们的关键是0x28管的是通信本身0x85管的是故障码记录两者目的不同但经常配合使用。3.2 ISO-TP为什么0x7E0发诊断报文超过8字节就要分段CAN单帧最多8个字节但诊断数据往往超过8个字节所以需要ISO-TPISO 15765-2做传输层分包。面试官一般会从一个现象切入“你发一条0x19读故障码的请求为什么底层能分成好几帧发出去”ISO-TP有四种帧。单帧SF最多承载7字节数据用于一帧放得下的短请求。首帧FF如果数据超过7字节第一帧只发1个字节的帧类型和12位总长度数据区只放前6字节。连续帧CF后续数据按最多7字节一帧继续发。流控帧FC接收方告诉发送方你一次能收多少块以及两帧之间的最小间隔。流控里的BlockSize和STmin是高频考点BlockSize表示连续发多少帧后等流控STmin表示每帧之间的最小间隔这两个参数直接影响刷写速度。典型物理诊断地址请求ID 0x7E0响应ID 0x7E8这是很多项目里ECU的默认物理寻址。还有功能寻址0x7DF一发出来总线上所有ECU都要响应所以功能寻址一般只用于短命令比如0x3E保活或者0x10会话切换。面试时如果能补充一句“功能寻址请求不要随便带长数据否则多个ECU同时响应会造成总线冲突”说明你真的在项目里处理过。3.3 NRC不是报错就完事几种高频NRC背后的设计意图UDS响应负码时格式是0x7F 请求SID NRC。面试官通常不会只问“0x22代表什么”而是给一个现象让你猜原因。下面几个是高频中的高频NRC含义常见场景0x11服务不支持ECU根本没有实现这个SID0x12子功能不支持SID支持但在当前会话下不支持这个子功能0x22条件不满足比如没解锁安全访问就尝试写DID0x24请求顺序错误没有先发0x34请求下载就发0x36传数据0x31请求超出范围地址、长度、DID越界或者数据不合法0x33安全访问被拒绝当前未解锁或者解锁等级不够0x35密钥无效seed/key验证失败0x36尝试次数超限连续失败次数超过ECU规定0x37延时未到上次失败后必须等一段时间才能再试0x7E当前会话不支持子功能默认会话里发了编程子功能0x7F当前会话不支持该服务默认会话里发了0x2E写数据面试时如果能举一个“遇到过0x24”的例子会很有优势。比如刷写时诊断仪直接发0x36传输数据ECU返回0x7F 0x36 0x24原因就是没有先发0x34请求下载ECU的状态机不认。很多调试工具在CANoe或者TSMaster里的日志会显示上行和下行报文看到0x24基本可以先检查服务顺序不用怀疑总线问题。4. OTA升级把“刷写流程闭环”讲明白远比背服务列表加分OTA是面试里最考验系统思维的模块。很多候选人知道UDS服务号但被问到“完整刷写流程怎么做”时说不全或者漏掉关键的安全动作。实际上一次合格的OTA项目会涉及云端、网关、ECU三级协同还要考虑掉电、失败回滚、防变砖。面试官想听的不是你能默写服务列表而是你有没有完整设计过这个闭环。4.1 一次完整OTA刷写分三个阶段把OTA刷写流程拆成预编程、编程、后编程三个阶段是最好记也最好讲的方式。预编程阶段的目标是让ECU进入适合刷写的状态同时不影响其他节点工作。典型动作是进入扩展会话0x10 0x03紧接着做安全访问解锁0x27然后关闭DTC记录0x85 0x02再关闭应用报文收发0x28 0x03/0x04。为什么要先关DTC因为刷写过程中会产生大量临时异常比如通信关断、内存操作延迟如果不关DTC记录ECU会把这些误存成故障码。为什么要关应用报文因为应用报文和诊断刷写报文争抢总线会让刷写传输不稳定。整个预编程阶段诊断仪要周期发0x3E保活防止会话超时回默认会话。编程阶段ECU一般先通过0x11 0x03复位进入Bootloader。Bootloader启动后诊断仪再发0x10 0x02进入编程会话0x27解锁0x2E写软件版本或刷写信息随后用0x31擦除Flash用0x34请求下载0x36分块传输数据0x37退出传输再用0x31做整体校验最后0x11复位跳回APP。这里面试官很爱问“为什么擦除和校验都用0x31”因为擦除和校验本质上是执行一段内存操作用RoutineControl最合适。后编程阶段要恢复ECU正常状态重新进入扩展会话0x28恢复应用报文收发0x85恢复DTC记录0x14清除刷写过程中产生的临时DTC。这个阶段虽然动作少但漏掉的人很多实际项目里如果后编程没把DTC清掉用户第二天开车就会发现故障灯亮属于非常典型的问题。4.2 断电和失败回滚面试官最想听的部分只要面试官问OTA几乎必问“刷到一半断电怎么办”。答案核心不是“重新刷一遍”而是防变砖机制。成熟项目里Bootloader必须是永远可用的至少不能被App刷写动作破坏。Bootloader固化在独立区域上电首先跑Boot再根据启动标志决定跳App还是留在Boot等刷写。更完整一点会做A/B分区或备份区。A/B分区就是同一份App维护两个Slot平时跑A区OTA时往B区写写完校验通过后修改启动标志指向B区。如果写B区失败启动标志还在A区车还能正常跑。如果A区自校验失败Bootloader可以自动切换到B区。还有一种常见方案是“三次启动失败回滚”App启动后通过应用层喂狗如果连续三次都在规定时间内没有喂成功Bootloader判定App异常切回备份区。这个机制在本地刷写里很实用但要注意等待时长、看门狗超时、启动计数的保存位置一般放在独立数据Flash或备份寄存器里这些问题稍微深入一问就能筛掉一批只会背概念的人。4.3 A/B分区、差分包、签名验签概念别被问倒OTA相关的名词在面试里出现频率很高至少要知道它们解决什么问题。全量包和差分包的差别全量包包含完整镜像安全但体积大升级时间取决于CAN或者以太网带宽差分包只包含新旧版本差异部分体积小但生成逻辑复杂而且要求当前版本必须是预期的旧版本。车载OTA很多会先做差分包失败后自动退回全量包。压缩算法常被问到LZ4、zstd刷写场景更看重解压速度和内存占用一般不会用特别重的算法。签名验签和安全启动核心是防非授权刷写。常见方案是升级包用非对称签名比如RSA或ECDSAECU侧用公钥验签。公钥在产线写入且不可改私钥留在云端。验签可以在Bootloader里做也可以在HSM里做。如果面试官问“你的公钥被破解怎么办”可以回答公钥本身不需要保密密钥安全的关键是私钥保护以及ECU侧要防调试接口读取Flash。5. 剩下4个模块一句话精准切入网络管理、Bootloader、信息安全、XCP有些面试岗位不会深挖到这里但它们会作为H2之外的高频延伸题出现。不需要花太多时间背文档但至少要能说清楚每个模块解决什么问题。5.1 网络管理从休眠唤醒角度讲CAN状态机网络管理的作用是协调各ECU的休眠和唤醒避免整车静置时某个节点一直偷偷醒着把蓄电池耗尽。CAN网络管理经历过OSEK NM到AUTOSAR CanNm是主流方向。核心是节点状态机Bus-Sleep Mode、Prepare Bus-Sleep Mode、Network Mode。没有唤醒事件时节点进入睡眠一旦出现本地唤醒事件比如门把手触发、诊断请求节点发NM报文并进入Network Mode。Network Mode下节点保持收发应用报文同时周期发NM报文告诉别人“我醒着”。面试官爱问“为什么用CAN报文做网络管理而不是直接靠应用报文”回答要点是NM报文只关心节点状态不管应用数据内容而且所有节点都能看到NM报文这样状态同步更可靠。还有一个常见的追问是总线局部唤醒有些节点不想被所有报文唤醒可以用CAN FD的完整报文接收过滤或者NM报文上特定的源节点ID来识别谁在呼唤自己。5.2 Bootloader跳转前要做的三件事提到OTA就绕不开Bootloader。面试官问“APP跳转要注意什么”核心是以下几点。第一跳转前关全局中断尤其关掉外设中断否则跳转过程中产生中断但中断向量表还没切过去直接就跑飞了。第二确认APP首地址存放的栈顶指针合法以及Reset Handler地址合法比如地址不能为0xFFFFFFFF否则不能跳。第三切换向量表。Cortex-M系列用SCB-VTOR指向APP区的起始地址这样中断才能路由到APP的中断服务函数。很多APP第一次能跑起来但一进中断就死就是因为VTOR没改。另外Bootloader和APP之间一般会约定一段握手逻辑Bootloader检查启动标志比如收到过OTA请求、App自校验通过、看门狗计数正常。这个启动标志通常放在独立备份区不能和App代码存在同一个Sector否则App被覆盖后标志也丢了。5.3 信息安全安全启动SecOC讲清楚“防谁”信息安全在面试里要么不问一问就喜欢往深里问。别被吓住核心就两个东西安全启动Secure Boot和SecOC。安全启动解决的是“这个App是不是被换过”的问题。从ROM开始一级一级验签Boot验证App签名App验证关键数据和配置。验签算法常见ECDSA密钥体系用Root Key派生而且会配合调试接口锁死防止有人用JTAG/SWD把Flash读出来改掉。面试时如果能说出“HSM硬件加解密模块把私钥操作隔离在安全核内”会很有亮点。SecOC解决的是“报文是不是被伪造或重放”的问题。它给关键PDU加了认证信息和新鲜度值Freshness接收方验证MAC和新鲜度窗口。新鲜度值的作用是对抗重放攻击防止攻击者把之前抓到的合法报文重新发一遍欺骗ECU。面试官如果问“新鲜度值窗口怎么设计”回答思路是窗口太大安全性低太小会导致延迟增大和同步失败常见做法是维护一个滚动计数器加时间戳接收方允许一定范围内的超前和滞后。5.4 XCP标定标定量和观测量怎么工作XCP是标定协议经常被拿来和UDS诊断对比。UDS主要用于诊断、刷写、法规相关的DTC操作XCP用于ECU开发阶段的内部变量标定和测量比如扭矩限制、温度补偿系数、PID参数。XCP on CAN的典型机制是通过A2L文件描述ECU内部变量的地址、类型和转换公式标定工具INCA、CANape基于A2L连接ECU用DAQ模式周期性上传观测变量用STIM模式直接下载标定数据。面试官常问“DAQ和STIM区别”一句话说清楚DAQ是ECU不断把数据发出来给上位机看STIM是上位机把参数写进去实时改。XCP和UDS最大的不同在于实时性和数据带宽XCP追求高速周期数据交互UDS更偏重诊断和刷写。6. 面试实战用一个真实刷写项目把7个模块串起来面试时最容易加分的地方其实不在单独回答某个协议点而在于你能把一个项目讲成一条完整链路。面试官问“请讲一个你印象最深的项目”就是给你机会把前面所有模块串起来。6.1 “请讲一个你印象最深的项目”怎么答我建议用下面这种“链路式”讲法我模拟一遍给你参考我之前做过一个T-Box远程OTA升级功能。整个链路是云端下发包网关下载完再通过CAN总线用UDS服务刷写目标ECU。收到刷写请求后网关先进入扩展会话关闭DTC记录和通信避免刷写过程中应用报文干扰然后做安全访问解锁。解锁之后发复位指令ECU跳进Bootloader。Bootloader起来后进入编程会话通过0x34请求下载、0x36分块传输数据每包都会做CRC校验。全部写完再用0x31做整体校验最后复位跳回APP。如果某一次校验失败或者APP连续三次启动失败Bootloader会把启动标志切到备份分区这样用户至少不会把车扔在路上。这段话其实不长但已经把CAN、UDS、OTA、Bootloader、信息安全、网络管理的影子全部带出来了。面试官如果追问“为什么先关DTC再关通信”你可以说DTC是为了避免刷写过程把临时异常存成故障码通信控制是为了让诊断刷写报文独占总线。如果他追问“采样点怎么调的”就正好接上前面CAN位时序的内容。注意讲项目不要一上来就贴代码或者贴时序图面试官没那么多耐心。先讲背景再讲你的职责然后讲一次异常排查或者一次关键设计决策最后说结果。这个结构比平铺直叙的效果好很多。6.2 追问与反问被问倒前的补救技巧面试遇到完全不会的问题是正常的关键是不要慌也不要编。我常用的回答套路是“这个点我之前的项目里没有直接踩过但如果让我定位我会先看XXX再用XXX工具验证。”这至少说明你有排查思路比硬说“我不会”强得多。另外面试是双向的。面试官问完你之后你也可以反问一句“咱们这边OTA刷写用的方案是A/B还是回滚区”这个问题一出口面试官就知道你有实际项目认知而不是只会背名词。我见过很多候选人技术答得一般但因为反问环节很专业反而被划到“可培养”类。7. 高频问题速查表与备战建议面试前时间紧不用把每行代码都过一遍先把高频问题背熟再配合项目故事讲出来。下面这张表是我在模拟面试里反复用的你可以直接当成背诵清单。7.1 CAN、UDS、OTA高频问题速查问题回答要点标准帧和扩展帧的区别仲裁场11位ID和29位IDIDE位、RTR位置不同DLC等控制位一致采样点怎么算采样点 (1 BS1) / (1 BS1 BS2)常用75%到85%为什么终端电阻是120欧匹配双绞线特性阻抗防止反射和振铃Busoff怎么恢复收发错误计数超过255连续128次11个隐性位后恢复UDS 0x28和0x85的区别0x28管通信控制0x85管DTC记录关闭的目的是减少干扰和误报0x3E作用保活防止S3Server超时回默认会话NRC 0x24什么时候出现请求顺序错误比如没发0x34就发0x36OTA刷写前为什么要做0x27安全访问验证防止非授权刷写刷写失败回滚策略备份区/AB分区启动标志切换看门狗检测启动失败ISO-TP单帧能传多少字节单帧最多7字节数据首帧带总长度后续用连续帧网络管理状态有哪几个Bus-Sleep、Prepare Bus-Sleep、Network Mode跳APP前要做什么关中断、检查栈顶和Reset Handler、切换向量表这些问题如果能在15秒内给出一个结构清晰的回答基本就已经超过大部分候选人了。7.2 最后的备战建议我在给候选人做模拟面试时最常说的一句话是别把UDS、OTA、CAN当成三个独立科目它们本来就是一条链上的事。你把手头项目的主干画出来从CAN报文出发讲到诊断服务再讲到刷写流程面试官对你的整体判断会完全不一样。如果时间允许面试前用周立功CAN盒或者TSMaster把自己的诊断刷写脚本实跑一遍哪怕只是手动发几帧0x10 0x03、0x27、0x28观察一下ECU的响应跑通一次你现场的底气都会不同。纸上谈兵的人很容易在追问环节露馅而真正抓过波形、看过NRC的人说出来的细节是骗不了人的。