安老师,你好:
在面试面谈过程中,总是会被问到一些基础性问题。如Java面试经常会问到下面这类基础问题:
能否谈一下,悲观锁和乐观锁?
能否谈一下,线程池?
能否谈一下,hibernate二级缓存?
hashmap?
……
Hibernate、线程池等这些基础知识,以前培训、看书的时候都学习过,在学习的过程中也写过demo,当时感觉也理解、记住了,但是,面试的时候,问到这方面问题,还是说不清楚、答不好,有些细节方面的地方忘记了。面试的时候,有些基础题也能回答,但面试官再往深层次的追问几个问题,就答不上来了。
在准备面试的时候,这类基础性的问题还非常的多,网上就有些牛人收集几千道题(Java面试题1000道),还附有答案。但个人感觉仅仅看懂、背会这些题目的答案是肯定不够的,这经不起面试官的追问。可如果一个个题目深入下去研究、去理解原理,上千道题目这样的数量,又会让我感觉到时间不够用。
我想问:在面试的时候,怎么高效准备这类基础性问题?
很遗憾,基础知识类问题的准备,我不知道有什么轻松、快速、高效的法子,如果你找到了,回头来告诉我啊。我接下来说的,都不轻松,可能阅读过程中感觉会没那么舒服,但这些策略,都是行之有效的,愿意挑战的话,就做好准备开始吧。
1、结硬寨打呆仗
基础概念性的问题,往往是有参考答案的,有对错的。比如面试官问你“哪些容器是线程安全的”、“final在Java中有什么用”,答案基本就是固定的。
这一类问题,和我们上学时复习考试,道理差不多,想要很好的答出来,最基本的方法,是下面这些:
- 复习知识点
- 看面试题解析
- 刷笔试题
这些是笨功夫、硬功夫,跳不过去的,得扎扎实实做。这就好比考试,学期开始学的东西,期末时,肯定要走一遍复习流程,用各种方式反复理解、记忆。
2、三大策略提升准备效率
当然准备基础概念题目时也有一些优化策略,比如:
- 80/20法则
- 关联记忆
- 互动演练
80/20法则用在这里,意思是,挑出最常被问到的那些题目,花更多功夫去记忆、练习、问答演练。比如你可能看到了1000多道题,但实际上只有200道经常被问道。关联记忆,意思是,把不常用的知识点和你经常用的知识点,想办法关联起来,以熟悉来索引陌生。比如,你用过HashMap,HashMap是非线程安全的,那从这个点出发,就有两种关联方法,1)非线程安全的容器还有哪些,就可以找到WeakHashMap、TreeMap等等,2)线程安全的容器有哪些,就可以找到HashTable、Vector、ConcurrentHashSet等。一旦知识点彼此之间关联起来,记忆就会很快,复习也很快,因为牵一发就可以动全身,从任意一个熟悉的知识点出发,就可以拎出一串来。互动演练,指的是找个人向你提问,彼此来回问答。这种方式有两个好处,一是与面试场景像,可以练场感;另一个是演练对手熟悉的知识点和你不一样,他问的点和顺序,往往和你预期的也不一样,这样就能打通那些你因为不熟悉而下意识回避的知识点。
3、深入一层关注如何应用
知识类问题,面试时常会遇到两个层面的提问:
- 某某是什么,比如悲观锁是什么、乐观锁是什么
- 某某的应用,比如什么场景下用悲观锁,具体怎么用,举个例子
所以你单单记忆知识点,还不够,还要考虑这个知识点在项目中的应用,问问自己下列问题:
它是怎么用的
为什么这么用
为什么不那么用
用了之后有什么效果
对于那些你经常在项目中用的知识点,“应用”这个环节,你按上面的问题清单回顾一下,反思一下就能心中有数。对于你仅仅知道但很少在项目中用的知识点,除了按照书上或者别人总结的应用经验了解外,也可以挑常被面试官提到的知识点做做小练习,然后再结合上面的问题清单反思它是怎么用的。
4、你的付出必定是值得的
求职找工作是大事,对你的职业发展、经济收入、生活状态,都有非常非常大的影响。这么重大的事情,值得认真对待,值得投入时间和精力。假如时间不够用,是有方法可以挤一挤的,比如早上早起1个小时,下班路上看看、听听,晚上吃饭快一点,少刷会手机……想想看,要是你努力准备了两个月,获得了理想的Offer,进入了一直想去的公司,月薪增加了50%,是什么感觉?那时你一定会感谢你现在的付出,你会觉得,一切都是值得的。退一万步讲,就算你这次为这家公司的准备,没能收到效果,但你的付出,让你巩固了的知识、结构化了体系,也是值得的。同时,你这次准备的基础知识,面试下一家公司,也很可能用得上,努力并不会白费。你看,无论如何,你的付出,都是值得的。请相信,你在今天所有的投入,就是你深埋地下的一粒粒种子,时候到了,它们必将发芽,生长,与你一起绽放。