(1)如何判断一个框架好坏?
□ 考点分析
这是一个比较大的话题,也是考验面试者综合能力的一个常见方法。一般而言,面试官对这种问题并不一定想得到一个标准答案,更多的是想要考查面试者的知识面以及对问题的抽象能力。
□ 解题思路
针对该问题,我们可以从很多方面进行切入,如架构的可扩展性等架构设计指标、设计模式的合理应用等。通过本章的学习,我们明白组件设计原则是判断框架好坏的一个重要方面。面试时介绍组织设计原则的基本概念,并结合其在具体开源框架中的应用,可以组织出对这一问题的有效回答。本章介绍的组件耦合原则内容是这个问题的参考答案,同时本章中关于Dubbo和MyBatis框架的对比内容也可以作为答案的一部分。
(2)Dubbo框架代码的整体演进过程是怎样的?为什么要这样设计?
□ 考点分析
这是一个关于Dubbo的常见问题,主要面向架构师或高级别的开发人员,通过考查Dubbo框架的整体结构,从而判断面试者对Dubbo的宏观掌握情况。
□ 解题思路
这个问题在回答思路上一定要参考本章介绍的Dubbo架构演进图(见图2-19),并能够使用自己的语言将该图中几个核心步骤进行展开说明。从这个角度上讲,这个问题并不难,只要记住这张架构演进图,通常都能够描述清楚。针对这一面试题,本章给出了一个RPC架构的基本演进过程,以及Dubbo框架的特定演进案例。我们也以容易记忆的表述方式介绍了Dubbo框架整体架构演进的各个要点。
(3)简要阐述在MyBatis中一次SQL执行的整体过程?
□ 考点分析
MyBatis作为一个ORM框架,本身对JDBC规范做了封装,自身提供了一套执行流程。这道题考查面试者对MyBatis的理解,属于宏观类问题,而不强调细节,相对简单。
□ 解题思路
针对这道面试题,我们只需要把握在MyBatis中SQL执行的几个核心步骤即可,包括通过配置文件创建SqlSessionFactory,再通过SqlSessionFactory创建SqlSession。然后从SqlSession中获取某一个特定的Mapper,在Mapper内部进一步调用Executor完成对原生JDBC的执行过程。本章对这几个核心步骤的执行要点进行了详细讨论,从而形成了一个完整的执行流程。在回答问题时,我们只要能说清楚这些步骤即可。
(4)如果让你实现一个基础的RPC结构,你会怎么做?
□ 考点分析
作为面试官,笔者非常喜欢问这个问题,不关注标准答案,而是关注面试者的回答思路。总体而言,很多面试者都回答不好,有些人没有思路,有些人则回答得比较片面,笔者总结的原因是大家对RPC最基础的结构缺乏了解。
□ 解题思路
回答这个问题的核心要点就是面试者自己能够实现一个简单但又完整的RPC架构,这个实现过程的好处有很多,一方面能够将理论联系实际,避免只会对一些RPC相关的概念死记硬背;另一方面,可以避免在面对这种“自己设计”“自己实现”“自己理解”等类型的问题时没有思路。本章用了比较大的篇幅来给出一个简单但又完整的代码示例,其目的就是想说明一点,即一个基础的RPC架构并不复杂,我们完全可以自己实现。一旦有了这个简单示例作为基础,你就可以按照自己的思路对其进行扩充,但面试的前提是你必须能够用自己的语言将这个基础结构描述清楚。
(5)如何理解MyBatis中TypeHandler的作用和基本原理?
□ 考点分析
这道题针对MyBatis框架中的某一个具体特性进行展开,主要考查面试者的知识体系是否全面。当然,TypeHandler相关内容有一些生僻,没有经过实践的话可能并不太清楚这个话题,需要提前对此进行准备。
□ 解题思路
在MyBatis中,关于TypeHandler的内容实际上并不复杂,首先,需要知道在MyBatis中存在这个机制,最好有实际的应用经历。然后,如果我们能够结合可扩展性的话题来对TypeHandler的作用和原理进行展开说明,那无疑是一个加分项,可以增强面试官的认可度。本章从理论和实践两方面给出了在MyBatis中的TypeHandler的详细介绍,在对面试题的回答上也建议先从可扩展性的大方向切入,然后给出TypeHandler的设计思想及其在MyBatis中的应用场景,最后通过一个简单的案例阐述基于TypeHandler实现可扩展性的具体方式。