vinqi.com

区块链开发工程师面试题及答题要点

这个岗位通常2-4轮:技术面重点考智能合约安全、EVM原理和项目真实度,行为面偏少但会验证你对行业的理解是否长期。最容易挂的地方是项目深挖——说不清合约设计取舍和安全考虑的候选人,基本过不了二面。

专业基础

讲一下你对EVM的理解,智能合约从部署到执行的完整流程是什么?

考察点:考察是否理解底层机制,还是只会调库写代码。

答题要点:
  1. 按流程讲:源码编译成字节码、交易部署到链上获得合约地址、调用时EVM读取字节码逐条执行、状态变更写入存储。
  2. 点出关键概念:gas机制限制每步执行成本、存储槽(storage slot)决定状态变量的布局和读取成本。
  3. 可以补充一句你实际踩过的坑,比如某个操作gas超预期,说明不是背概念。
  4. 如果面的是非EVM链,主动说明你了解该链与EVM的差异点。

别踩:只背「EVM是以太坊虚拟机」这种定义,没有执行流程和gas细节,会被判定为只写过demo。

Solidity里msg.sender和tx.origin有什么区别?为什么不能用tx.origin做权限校验?

考察点:经典安全题,考察重入和钓鱼类攻击的基础认知。

答题要点:
  1. 先讲清定义:msg.sender是直接调用者,可能是用户也可能是中间合约;tx.origin是交易的最初发起人。
  2. 给出攻击场景:用户被诱导调用恶意合约,恶意合约再调用目标合约,目标合约若用tx.origin校验就会误以为是用户本人。
  3. 结论明确:权限校验一律用msg.sender,tx.origin几乎没有正当使用场景。
  4. 能延伸到「合约调用合约」的调用链模型会加分。

别踩:知道区别但讲不出具体攻击场景,或者含糊说「不安全」,暴露理解不深。

ERC20和ERC721在实现上的核心区别是什么?

考察点:考察代币标准的基本功,是否亲手实现过而非只会用OpenZeppelin。

答题要点:
  1. 核心区别:ERC20是同质化余额模型(一个mapping存地址到数量),ERC721是非同质化的tokenId模型。
  2. 讲清ERC721多出的关键功能:每个tokenId独立的所有权记录、approve按tokenId授权、transferFrom需要校验tokenId归属。
  3. 可以提ERC1155作为两者的泛化方案,说明你对标准演进有了解。
  4. 如果自己写过或审计过某个标准的实现,主动提一句细节。

别踩:只答「一个同质一个非同质」,说不出存储结构和授权逻辑的差异。

gas优化你一般怎么做?举几个你实际用过的手段。

考察点:考察实战经验和成本意识,链上成本直接关系产品可行性。

答题要点:
  1. 存储层面:减少storage写入、用calldata代替memory传参、合理排列状态变量类型减少存储槽占用。
  2. 逻辑层面:短路求值、循环里避免重复读取storage、用不可变量(immutable)和常量。
  3. 打包数据:比如把多个uint256打包进一个slot,或用位运算压缩存储。
  4. 强调验证方式:用工具对比优化前后的gas消耗,用数据说话。

别踩:罗列网上抄来的技巧但说不出原理,或没实际对比过gas数据。

智能合约安全

重入攻击的原理是什么?怎么防?

考察点:安全题必考第一名,考察攻击模型和防御思维。

答题要点:
  1. 原理讲清:合约在状态更新前对外转账,外部合约的fallback回调再次进入原函数,反复提取资金。
  2. 防御三板斧:先改状态再转账(checks-effects-interactions模式)、用可重入锁、尽量用transfer类不会触发回调的方式。
  3. 举真实案例说明后果,比如历史上著名的DAO事件导致链分叉。
  4. 补充一句你会用工具或审计流程验证这类问题,体现工程习惯。

别踩:只会说「加个锁」,讲不清为什么外部调用会触发回调、状态更新顺序为什么关键。

除了重入,你还知道哪些常见的智能合约漏洞?

考察点:考察安全知识的广度,是否有系统性认知。

答题要点:
  1. 挑3-4个你最有把握的讲透:整数溢出(老版本Solidity)、权限控制缺失、预言机价格操纵、前端跑偏(front-running)。
  2. 每个漏洞用一句话说清成因加一句话说清防御,不要展开成论文。
  3. 提一下依赖库版本和已知漏洞的关系,说明你关注安全公告。
  4. 如果做过审计或看过审计报告,举一个你发现的实际问题最有说服力。

别踩:一口气报十个漏洞名但每个都讲不深,反而暴露是背清单。

合约上线后发现漏洞,你会怎么处理?

考察点:考察应急思维和工程成熟度,没有标准答案但看思路。

答题要点:
  1. 先评估影响:漏洞是否可被利用、涉及多少资金、是否有紧急暂停机制可用。
  2. 分情况:有暂停功能先止损;无暂停则评估能否通过部署修复合约迁移资金。
  3. 强调流程:及时披露、通知用户、复盘根因,而不是掩盖问题。
  4. 落到预防:说明你平时如何设计升级机制和应急开关,把话题拉回工程实践。

别踩:只答「马上修复」,忽略链上代码不可篡改这个基本前提。

项目经历深挖

挑一个你做过的链上项目,讲讲合约架构是怎么设计的。

考察点:验证项目真实度和设计能力,这是二面挂人最多的题。

答题要点:
  1. 用两分钟讲清业务目标、合约拆分方式(哪些逻辑放链上、哪些放链下)和关键取舍。
  2. 重点讲「为什么这么设计」:比如为什么用代理合约模式、为什么某个数据放链下,说出备选方案和放弃原因。
  3. 给出具体数字:合约数量、大致代码量、gas成本、测试覆盖情况。
  4. 主动暴露一个当时的设计缺陷和后来的改进,真实项目一定有不完美。

别踩:只描述做了什么功能,讲不出设计取舍;或项目细节经不起追问,被识破是照教程做的。

你这个项目里最难的一个技术问题是什么,怎么解决的?

考察点:考察问题定位能力和深度,区分主力开发和参与者。

答题要点:
  1. 选真实且具体的问题:比如某个交易莫名revert、gas超限、链下数据与链上状态不一致。
  2. 讲清排查路径:怎么缩小范围、用了什么工具或日志、最终定位到哪一行。
  3. 给出解决方案和验证方式,最好有前后对比数据。
  4. 总结一条可迁移的经验,说明这个问题改变了你后来的做法。

别踩:编造一个「很难」的问题但排查过程空洞,或把别人的工作说成自己的,追问两句就露馅。

链上和链下数据你是怎么划分的?什么数据该上链?

考察点:考察架构判断力,区分只会写合约和懂系统设计的人。

答题要点:
  1. 给出判断标准:需要去中心化共识和防篡改的数据才上链,其余放链下。
  2. 举具体例子:资产所有权和资金结算上链,用户资料、订单明细、高频日志放链下。
  3. 讲链下数据如何与链上关联:比如哈希上链做存证、预言机喂价格。
  4. 提成本视角:存储和计算在链上贵几个数量级,产品要考虑用户gas负担。

别踩:回答「区块链就是去中心化所以都上链」,暴露没有成本和架构意识。

情景应变与开放题

让你从零设计一个质押挖矿的合约,你会怎么开始?

考察点:现场设计题,考察结构化思维和边界条件意识。

答题要点:
  1. 先问清需求再动手:质押什么资产、奖励怎么算、有没有锁定期、谁来管理参数。
  2. 给出模块划分:质押仓、奖励计算、权限管理、紧急控制,说明各模块职责。
  3. 主动提边界情况:奖励池耗尽、用户中途退出、精度问题导致的舍入误差。
  4. 说明测试和审计计划:先写测试用例再写实现,上线前做审计。

别踩:上来就写代码结构,不确认需求也不考虑边界条件,被追问就卡住。

用户反馈他的交易一直pending,你怎么排查?

考察点:考察链下问题的排查能力,实际工作中大量问题在前端和交易层。

答题要点:
  1. 先看交易本身:gas price是否低于当前市场水平、nonce是否卡住(前一笔交易未上链)。
  2. 再查链的状态:网络是否拥堵、合约地址和调用参数是否正确。
  3. 给用户侧方案:提高gas费重发、用相同nonce替换卡住的交易。
  4. 说明你会怎么和用户沟通确认信息,体现协作意识。

别踩:只从合约代码找问题,忽略gas和nonce这些最常见的链下原因。

你怎么看现在公链和Layer2的格局?做开发选哪条链重要吗?

考察点:考察行业认知和选型判断,看你是写代码的还是懂业务的。

答题要点:
  1. 给出你的判断框架:安全性、成本、生态成熟度、用户规模,而不是直接站队某条链。
  2. 讲一个具体选型例子:什么场景下你会选Layer2而不是主链,理由是什么。
  3. 承认不确定性:格局变化快,保持对多链的兼容能力比押注单链更稳。
  4. 落到自己:说明你当前最熟的链和迁移到其他链的成本估计。

别踩:变成喊单式吹捧某条链,或表现出对其他生态的明显偏见,显得不专业。

行为面试与反问环节

你为什么想进入区块链/Web3行业?打算长期做吗?

考察点:行业波动大,公司担心候选人把这里当跳板或投机心态。

答题要点:
  1. 给出具体触发点:某个让你决定投入的项目或技术问题,而不是「看好前景」。
  2. 展示持续性:学习路径、参与的开源项目或社区、持续输出的内容。
  3. 对行业风险有清醒认知,说明你想清楚了才来的。
  4. 和岗位挂钩:这份工作如何延续你的积累。

别踩:大谈行业风口和财富效应,或回答空洞的「热爱技术」,都显得动机不实。

和产品或运营对需求时有分歧,比如对方要的功能gas成本极高,你怎么办?

考察点:考察跨职能协作和沟通能力,技术人常挂在这类题。

答题要点:
  1. 先翻译问题:把gas成本换算成用户实际支付的费用,让对方理解代价。
  2. 给替代方案而不是直接说不行:调整功能形态、部分逻辑放链下、分阶段实现。
  3. 举一个真实例子说明你这么处理过并达成了共识。
  4. 保留升级路径:先上可行版本,后续优化。

别踩:表现成「技术说了算」或完全妥协,两个极端都减分。

你有什么想问我们的?

考察点:考察你关注什么,也给你收集判断信息的机会。

答题要点:
  1. 问技术:合约的测试和上线流程是怎样的、有没有审计习惯、代码review机制。
  2. 问业务:产品当前阶段、用户规模量级、主要技术挑战是什么。
  3. 问团队:区块链开发在团队里的占比、和链下系统的协作方式。
  4. 避免一上来只问薪资福利和加班,这些留给HR环节。

别踩:说「没什么想问的」,直接被解读为意愿低或没思考。

面试准备清单

什么时候要做什么
面试前 3 天把自己简历上的每个项目按「架构—取舍—难点—数据」四要素过一遍,每个项目准备一个能讲两分钟的版本,确保经得起三层追问。
面试前 3 天重刷安全基础:重入、权限、预言机操纵、front-running这几个高频漏洞,每个准备「原理+攻击场景+防御」三段式回答。
面试前 1 天查目标公司的产品和技术栈:他们部署在哪条链、合约开源的话读一遍核心合约,面试时能引用对方代码细节会明显加分。
面试前 1 天准备一个现场设计题的答题模板:确认需求→模块划分→边界条件→测试审计,对着一道练习题完整走一遍。
面试当天准备纸笔,遇到设计题先画结构再讲;远程面试提前测试环境和代码编辑器,部分公司会现场写Solidity片段。
面试当天准备好3个反问问题(技术流程、业务阶段、团队构成),根据面试中听到的信息临场调整提问。

常见问题

区块链开发工程师面试一般有几轮?
常见2-4轮:1-2轮技术面(基础+项目深挖或现场编码),部分公司有交叉面或负责人面,最后HR面。初创团队可能压缩到2轮,大厂或交易所类公司轮次更多,安全要求高的岗位还可能加审计相关考察。
没有区块链工作经验,只有个人项目,能面这个岗位吗?
可以,这个岗位转行的人很多,面试官普遍接受个人项目。关键是项目要能讲出设计取舍和真实踩坑,最好有开源代码或测试网部署记录可查。纯跟教程做一遍没有自己改动的项目,深挖时很容易被识别。
面试会现场手写代码吗?考什么语言?
不少公司会考,常见形式是写Solidity函数片段或修一个有漏洞的合约,也可能考链下脚本(如用常见语言写交互逻辑)。建议提前练几道合约编写和找漏洞的题,熟悉在编辑器里裸写代码的感觉。
只会Solidity够吗?要不要准备其他链的开发知识?
看目标公司部署在哪条链,先对齐对方技术栈。通用建议是:Solidity和EVM原理是基本盘,面试前补一下对方所用链与EVM的差异点即可,不必样样精通。诚实说明熟悉边界,比假装都懂更安全。

继续看这个岗位

相关岗位