> 欢迎加入[GOLANG ROADMAP](https://www.golangroadmap.com),一个年轻的Go开发者社区,目前是邀请注册制,邀请码:Go语言中文网。本篇面经中的面试题已收录到社区企业题库版块。
### 腾讯CDG 腾讯区块链
#### 一面
- 深挖项目20min
- 以太坊中有哪些树(交易树、收据树、状态树)
- 为什么需要收据树(将交易执行过程中的一些特定信息编码为交易收据,方便对交易进行零知识证明、索引和搜索)
- 以太坊里的状态是什么,状态树怎么存的状态(账户状态包括balance、nonce、codeHash、storageRoot,使用Merkle Patricia Trie即MPT存的账户状态)
- 以太坊的合约数据的储存形式(还是MPT。合约账户中的storage root,对应账户的storage trie)
- 比特币里的交易是怎么存的(Merkle Tree,MT)
- 介绍Merkle Tree的性质、优点,为什么用Merkle Tree存(实现SPV、Merkle Proof)
- 为什么以太坊要将MT改成MPT(这个问题比较复杂,建议读者去B站北大肖臻老师的区块链课中寻找答案)
- 介绍比特币的UTXO
- 比特币查询余额只能从头开始遍历整条链吗,有没有高效方法(创建UTXOSet缓存)
- 比特币地址是怎么生成的(助记词 <-> seed -> 私钥 -> 公钥 -> PubKeyHash <-> address, 其中<->表可双向转换,->表单向转换,最后的PubKeyHash转换为address的时候用的是base58编码,base58编码的原理即辗转相除法)
- 数据库索引,hash索引与B+树索引的适用场景,为什么用B+树索引
- 主键与非主键和索引的关系(InnoDB主键一定是聚簇索引,非主键如果是索引的话,查询可能需要回表)
- 进程、线程、协程的区别
- Golang协程间如何通信
- 算法:口撕链表是否有环
- 堆排序、快速排序的时间复杂度以及分别适用什么场景
- 反问
#### 二面(八股极少,基本全程聊项目)
1. 项目深挖
2. 为什么用区块链?区块链的创新点在哪?(灵魂发问)
3. 技术难点
4. 以太坊相比于比特币的创新点
5. 区块链落地场景
6. 反问
> 本篇面经中涉及的面试题已收录进GOLANG ROADMAP企业题库(搜索关注wx-gzh:GOLANG ROADMAP),可查看面试题解析和参与讨论。
有疑问加站长微信联系(非本文作者))