⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 juejin.im/post/5bbcc325e51d450ea52ff5f9 「柴泽建_Jack」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

一般面经很少会告诉你如何临场发挥,我觉得这边文章对你很重要。

上一篇文章讲了如何进行前期的准备,但是在面试的过程中,一定会问到没有准备过的问题。那么这个时候怎么办的?那么我来简单讲一下我总结下来的经验。依然分为几种情况:

  1. 编程测试
  2. 面试

1. 编程测试

编程测试是很多大公司都会有的环节。有些考察算法,有些是考察编程能力,有些是考察设计。内容要看面试官想考察面试者什么能力有关。对于这种测试,很多人就要问了,“这不就和高考一样,拿到题目做,不就完了,和临场发挥有什么关系?”。其实这和高考大有不同。

编程测试的时候你是面对着命题者的。而且命题者往往有他想要考察的点。但是命题者都是语文水平和我们差不多的程序员,题目就是他们随便写写的。意思的表达多少会有点不清晰。那么这个时候就是临场发挥的时候了。

审完题不要急着做,先简单思考一下命题者究竟想要考察什么,题意究竟是什么。然后把自己理解的题意讲给命题者听,问下他题目是不是这个意思。

无论你理解的对不对,都没有关系,理解的不对命题者会给你指出,总比你把代码都写完了才发现题目理解错了好。无论对错,无形中都为自己加了一些分。因为这反应了你平时是一个动手做之前,先把需求理解清楚的人。那么题目理解完之后就可以直接写了吗?错。

对于一道题目,一定会有很多解题思路和方法。高考的时候是你最后的结果对,那这题就能拿到满分。但是编程测试可不是。使用了不好的思路和方法一样会挂掉。那么这就又到了临场发挥的时候了!

明确了题目意思之后,先讲“那我思考一下”为自己争取一些时间。然后就让自己的CPU跑起来思考吧,尽量多想几种方案。然后把自己的方案讲给命题者听,如果能讲出每种方案的优缺点更好。

有的人可能觉得做到这一点很难。其实在我自己的面试过程中,以及与其他人交流面试的时候发现,编程测试的题目一般都能做出来。挂掉的都是挂在方法上。如果水平不是太差,至少能想出一种简单粗暴的方法。但是,如果你把这个写下来,往往拿不到Offer。所以讲你的思路就很重要了。把你的思路和解题方法讲出来,和面试官一起探讨。面试官往往会试探的引导你去寻找正确方法,这就又给自己增加了机会。当探讨到面试官满意的方法,或者实在想不出来,面试官说“那你就按当前讨论的方法写吧”的时候再动手写。

按照上面的方法编程测试下来,就算你没有用完美的方法解题,也一定会给面试官留下一个好的印象。

2. 面试

面试环节可变因素实在太多,问到自己没有准备过的问题非常正常。遇到自己准备过的内容,精确正确的回答是最理想的。然而遇到自己没有准备过的问题,也没有必要直接说自己不会。往往一场面试下来,你发现有几次“这个我不会”,那Offer也就没了。那么怎么样在自己不会的时候也能给面试官留下好印象呢?

  1. 让面试官重复问题(确认问题内容,争取思考时间)
  2. 复述问题(让面试官确认一下你是否理解了问题,同时争取思考时间)
  3. 表明自己没有研究过(让面试官可以谅解,毕竟再厉害的人也有没有研究过的问题)
  4. 请求时间思考一下(争取时间,拼命想)
  5. 30秒到1分钟后,讲思路与面试官探讨,不一定要有答案(表明自己的思路,以探讨的方式和面试官交流,面试官会引导你向正确的答案靠近。)

举一个我支付宝面试栗子,聊到了数据库分表,面试官突然问了如下问题:

假如有一个交易表,用户和商家每进行一次交易就会在交易表中产生一条记录,那么分库分表,要按照怎样的规则分。

这个问题我之前并没有准备过。于是我说:“不好意思,我没有太明白您的问题,您能否再重复一下。”,他重复一遍之后,我又复述了一下问题,得到了他的肯定之后,我说:“我之前没有研究过这个问题,我现在思考一下可以吗?”,面试官不会说不行的。

然后过了大概三四十秒的样子。我回答:“对这张表进行分表的话,我们希望的效果是同一个用户的所有数据都在一个表中,同一个商家的所有数据都在同一个表中。但是任何用户是可以和任何商家交易的。假设一个A表中的用户和B表中的商家交易,那么产生的数据就无法确定放在哪个表中,所以不存在这样的一个分表规则。”其实我在那段时间里就想到这里,在说这段话的时候想到的接下来的。然后我接着说:“那么不知道是不是可以将这个表通过用户分表,另外再维护一个商家到原始数据的索引表。来为商家提供查询。”然后面试官说:“这样确实可以,但是有些麻烦,没关系,我随便问问的。”

如果遇到没有准备过的问题,按照这个思路,最后只要说出一些自己的思路。即使思路不太正确。也比直接说不会好。毕竟谁都有没有研究过的问题。这样回答至少说明了你乐于去思考。

3. 总结

在面试过程中,遇到没有准备过的问题很正常。遇到的时候不要慌张,要保持冷静,想办法争取时间,并在争取到的时间内全速开启自己的CPU去思考。最后把握好时间不要冷场尴尬。没有想出结果就说思路。无论对错都比直接说不会好。祝大家面试成功。下一篇介绍平时工作工程中如何积累。

文章目录
  1. 1. 1. 编程测试
  2. 2. 2. 面试
  3. 3. 3. 总结