- 【聊一聊的你们的项目】:侧重业务流程,用简练清楚的语言描述项目做了一个什么事情。然后可以简单介绍一下项目使用的架构和技术栈。这个其实整理一下,一定有东西可以说的,切记业务不要介绍的过于复杂,很多复杂的东西一概而过,面试官有兴趣的话他会自己问,每个系统都有很多细节,讲不完的,这里讲太多会显得很啰嗦。
- 【你在项目中做了哪些东西】:侧重你所做的东西在业务流程中承担的作用和重要程度。然后交代清楚这一块的复杂度,体现一定的技术难度。我知道大部分人都在写业务代码的。大部分时候项目需要大数据和大并发的场景比较少。这个时候你可以侧重从系统设计去聊,比如“面对复杂的业务逻辑如何解藕?”。
- 【你在项目中遇到的最难的问题是什么,你是怎么解决的】:侧重有难度的问题,对于后台,侧重于并发,大量数据,和分布式问题。尽量不要说业务流程,或者一些低级的问题。面试官肯定希望了解你解决了多难的技术问题。那么没有大数据,高并发方面的问题解决经历怎么办?我的经验可以侧重解决分布式问题。因为不管你的用户量有多少,只要项目是分布式系统,那一定会有分布式问题。比如“幂等如何做的?”。
怎么样在自己不会的时候也能给面试官留下好印象呢?
- 让面试官重复问题(确认问题内容,争取思考时间)
- 复述问题(让面试官确认一下你是否理解了问题,同时争取思考时间)
- 表明自己没有研究过(让面试官可以谅解,毕竟再厉害的人也有没有研究过的问题)
- 请求时间思考一下(争取时间,拼命想)
- 30秒到1分钟后,讲思路与面试官探讨,不一定要有答案(表明自己的思路,以探讨的方式和面试官交流,面试官会引导你向正确的答案靠近。)
面试官突然问了如下问题:
假如有一个交易表,用户和商家每进行一次交易就会在交易表中产生一条记录,那么分库分表,要按照怎样的规则分。
这个问题我之前并没有准备过。于是我说:“不好意思,我没有太明白您的问题,您能否再重复一下。”,他重复一遍之后,我又复述了一下问题,得到了他的肯定之后,我说:“我之前没有研究过这个问题,我现在思考一下可以吗?”,面试官不会说不行的。
然后过了大概三四十秒的样子。我回答:“对这张表进行分表的话,我们希望的效果是同一个用户的所有数据都在一个表中,同一个商家的所有数据都在同一个表中。但是任何用户是可以和任何商家交易的。假设一个A表中的用户和B表中的商家交易,那么产生的数据就无法确定放在哪个表中,所以不存在这样的一个分表规则。”其实我在那段时间里就想到这里,在说这段话的时候想到的接下来的。然后我接着说:“那么不知道是不是可以将这个表通过用户分表,另外再维护一个商家到原始数据的索引表。来为商家提供查询。”然后面试官说:“这样确实可以,但是有些麻烦,没关系,我随便问问的。”
项目有关:
- 选择最为熟悉的一到两个项目说明,提及该项目中的难点问题,以及如何针对该项目的开展
- 为什么做这个项目(避免被动安排这个话题)
- 解释项目中遇到的难点是如何攻克,最难的点是什么。
- 项目最终实现效果
- 项目具体部分使用的设计模式并简述选择理由
- 项目运行过程中成员是否曾就某一点发生争执?作为Leader你是如何解决的?具体事例?
- 你觉得你在项目运行过程中作为Leader是否最大限度发挥了队员的优势?具体事例?
- 聊项目,逆向系统是什么意思
- 聊项目,逆向系统用了哪些技术
- 看过哪些技术书籍,介绍一下
简历和自我介绍,简历要好好回顾下自己做的一些项目,然后挑几个亮点项目。自我介绍基本每轮面试都有,所以最好提前自己练习下,想好要讲哪些东西,分别怎么讲。此外,简历提到的技术一定是自己深入研究过的,没有深入研究也最好找点资料预热下,不打无准备的仗。
反问面试官的问题:
- 评价一下我的这次面试表现
- 应该在我的技术栈中增加什么
- 有机会下次面试吗
如果在回答问题的时候能够做一些适当的扩展,自然会让面试官对你有不一样的评价。
先回答问题本质,在回答具体细节,最后做一些平时编程中的扩展。这样,会让面试官觉得你确实是在这个技术上面下过功夫的。