外包Java后端开发三年,年底跳槽两个月如何应付面试?

前言

以java面试为例,每一年的重点都是不一样的,招聘要求中可能出现你没有使用过的技术, 如:RPC、springboot、docker等。如果,2个月后要去面试,你心仪的公司,招聘要求上出现这样的你没有用过的技术,都不知道面试官会问这个技术的哪些问题。每年新出现的技术很多,但大部分是属于针对特定应用领域的编程框架。比如十几年前的各类Web编程框架,十年前的中间件框架,最近几年的深度学习框架等等。要快速掌握一个技术,需要学习的内容分为领域知识和框架两部分,并在此基础上要做一些实例来练习。领域知识是针对这个领域内通用的,即便是换个框架也能用的上。而框架知识则是领域知识的封装,方便编程使用的。

小编在这里总结了一篇学习方法,只要你本身不是很菜,用此方法两个月足够学好多个技术,而且是真学会、可以拿出来用的那种。需要注意的是,此方法对于大部分技术都很有效(比如java,spring,Redis、网络、操作系统等等),但对于算法、数据结构、设计模式这种需要慢慢积累基本功的不太有效。

1.整理一份思维导图

去网上找一个有深度的面试题列表,比如阿里系的。然后逐一尝试回答,不会的就查资料,边回答边整理成思维导图。

思维导图不需要太细致,也没有固定的格式,你自己看着舒服就好。

  • JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么 要分为EdenSurvivor?

  •  为什么要分为 Eden 和 Survivor? 为什么要设置两个 Survivor 区?
  • 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cmsG1,包 括原理,流程,优缺点:

  • JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存:

  • 简单说说你了解的类加载器,可以打破双亲委派么,怎么打破:

  • 怎么打出线程栈信息:

  • 强引用、软引用、弱引用、虚引用的区别?

上面是小编搜集并发编程的思维导图,需要详细的思维导图以及面试真题可以点我 领取哦

2.搜集一些大厂真题面试题自己解答

然后搜集一些面试题的文章,小编这里收藏了一些面试文章,想看的小伙伴可以点进去了解一下呢!

这些JVM 多线程 网络编程面试大厂必问的Java面试题,你都刷了吗?

想当程序员中间万元户吗?这几个MySQL核心技术点必须要搞懂!

来自蚂蚁金服内部JAVA面试宝典意外流出!【收藏了】

临近双11,恶补了两个月成功拿下大厂offer,跳槽到阿里巴巴

解答完全部的面试题后,对于这个技术你会得到一个大体的思维导图。然后继续刷更多新题来查缺补漏,思维导图就会比较完整了。

3. 不断的复述和巩固知识点

有了思维导图之后,就不断在大脑中复述导图中的内容。

一定要用具体的语言把知识点表达出来,就像教别人一样,默念即可。这一步比较重要,学名叫小黄鸭学习法,用具体的语言表述知识点才会知道自己有哪些模棱两可的地方。

这样几次之后就会形成稳固的“晶体记忆”(不用百度了,是我自己发明的词汇)。

4. 加深技术的厚度

每次回忆时,深入挖掘还不太懂的部分,尝试理解底层原理,更新到思维导图上,这样对于该技术的理解就会慢慢变深厚。

这一步也很重要,一直停留在表层技术并不能帮你拿到一个好的offer。

5. 出去装X吧

等你对思维导图了然于胸,并且有了一定深度之后,就去面试吧,很大可能会把面试官忽悠住,以为你是个隐藏王者。我靠这个方法硬生生把Redis从零学到了源码级,蚂蚁金服的面试官都被我忽悠瘸了。

晶体记忆是个什么鬼?我的感觉就是一个知识体系已经被大脑完全吸收并且压缩成一个结晶。处于这种状态时你会觉得这个知识体系就那么大一点,但你真的去扩展回忆时,会发现里面的内容真特么多,而且都是已掌握的。

打铁还需自身硬(此方法不适合所有人)

打铁还需自身硬,用这种速成方法首先你得有不错的基础,否则在研究面试题解法这一步你就坚持不下来,因为看不懂原理。靠死记硬背永远都过不了面试。

保留好这些知识图谱,它们都是你的财富。找到工作后也最好每天抽一个分支出来复习,在深冬冰封之际,我等食物链底层的码农要时刻保持武器的锋利,自己足够强悍才能抵御风险

此方法具有普适性,我正在用这个方法学习金融知识,效果还不错。

小黄鸭学习法

在第三步中,我们需要复述思维导图的内容,以达到透彻理解的目的,这其实就是小黄鸭学习法。

简而言之就是把知识讲解给别人,比如一只玩具小黄鸭。。。检验自己是否完全理解一个知识的最好方式就是教会一只小黄鸭。

这个方法是有神经学依据的。据我所知,人脑非常善于为不合理的事情找一个合理的解释,也就是所谓的脑补

具体研究过程可以去看一些裂脑人的实验记录,当右脑出现负面情绪时,左脑并不知道发生了什么(因为左右脑的信息交换通道被切断),但最终左脑会脑补出一个“合理”的解释,并相信那就是事实,然而这个解释实际上是错误的。

因此当你学会了一个知识点之后,你的大脑会产生“朕已完全学会”这样的假象。

然而当你尝试给别人讲解该知识点时,就会发现其实还有很多解释不通的地方,这种情况基本上100%会出现。

另外,在编程实践中,用这种方法可以快速排查故障,快速弄懂复杂的代码等等。

打个比方,如果你看不懂一段代码背后的业务逻辑或实现细节,那么可以试着用几句话来精确描述这段代码的功能和实现手段。如果能做到这一点,说明你已经懂了。

不要以为这是多此一举,人脑不可能在任何时候都保持清醒。在实际开发中,我们的大脑并不会用自然语言来处理代码,而是直接进行逻辑和抽象思维。这就产生了很多脑补,你对代码的理解很有可能是错误的,想必很多人都经常遇到。

这个方法看起来有点蠢,实际上非常有用。

 关于结构化思维

玩知乎快6年,好不容易有了个千赞的答案,就再说点干货。

之前我们使用了结构化思维的一些手段(思维导图),但这仅仅是冰山一角。对于程序员来说,具备良好的结构化思维习惯会显著提高生产力,它的作用比小黄鸭学习法还要大,我已经在自己身上验证过多次。

大家可以自行在知乎搜索“结构化思维”来进行深入学习,有很多优秀的答案。接下来我只说说自己常用的几种思维方式以及在编程中的实施。

5W1H法

这个方法会的人比较多,这里主要介绍一下在编程实践中怎么进行5W1H分析。遇到一个问题或需求,按照以下步骤分析:

  1. 写一个列表,每一项分别为What, Why, Where, When, Who, How
  2. What:简短的用几句话精准的描述出问题的内核是什么,需求的本质是什么。这是总体纲领,确保你在后续的工作中不会走偏。
  3. Why:用一两句话描述为什么要做这件事。这可以确保你做的事情有意义,并且目标是正确的。
  4. Where:在空间维度上静态的分析问题。宏观上,问题涉及到哪些组件;微观上,该问题涉及到哪些关键的类、方法、配置等等。原则上你可以把任何与空间有关的因素都扔进这个篮子里,分析的越全面越好。
  5. When:在时间维度上动态的分析问题。宏观上,组件之间怎么互相通讯;微观上,上述的代码何时被触发等等。原则上你可以把任何与时间有关的因素都扔进这个篮子,同样分析的越全面越好。Where和when常常会有重叠的因素,这个不要紧,随便你放哪里都行。
  6. Who:在人物关系这个维度上分析问题。一般这一步比较直观,列举出问题涉及到的人、人与人之间的关系以及每个人的职责即可。这样你遇到事情就能够找到正确的人。
  7. How:用一个列表来描述怎么完成这件事。这一步其实是一个总结,把前面五个维度的因素综合到一起,来找出一个优质省力的解决方案,然后按照解决方案来实施即可。

5W1H思维法最大的好处就是强制你去进行多个维度的全面思考。就像我之前说的,我们的大脑很喜欢脑补,如果不能明确的一条一条去分析,我们的大脑就会进行各种跳跃性的思维,最终遗漏了很多因素。在稍微复杂的项目里,你可能连需求的内核是什么都弄不清楚,别问我是怎么知道的。

链路法

我自己总结的一个方法,对程序进行线性的因果分析。无论是单线程、多线程还是复杂的系统,用静态眼光来看,程序都是线性的,这是此方法的依据。具体步骤:

1.组成链路

遇到一个问题或需求时,先用5W1H法进行多维度分析,再把Where篮子里的因素按照When因素来粗略排序,一个一个链接起来。如果你对自己的工作足够了解,这一步应该会比较快。

2. 分析链路

按照你遇到问题的类型来进行不同的分析:

  • 如果遇到的是一个故障排查问题,那么仔细观察链路的每个节点,根据问题上下文,从最有可能出问题的几个节点开始验证和推断,缩小问题半径,直到找出问题所在。其实很多人进行故障排查时都在这么做。
  • 如果遇到的是一个改祖传屎山的需求,那么进行链路分析时就需要寻找代码中的太极节点。所谓太极点,就是能够以小博大的关键部位。我们都知道祖传代码改的越多越容易出毛病,为了安全着想,我们一定要尽量控制修改范围。找到这些太极点,就可以在少量的改动下,完成需求。
  • 如果遇到的是一个测试的需求,那么可以对链路中的每个节点进行扩展分析,列举出每个节点可能出现的边界条件、异常情况等等,再写测试用例来覆盖到这些节点。

链路法最大的好处就是让你不再依靠直觉去做事,在各个阶段都知道自己在做什么。有时候直觉很重要,尤其是故障排查时,但如果你只依靠直觉,那么肯定会遗漏掉很多有用的信息。如果你只依靠直觉去改代码,那么最终结果大概率不是最优解,无形中会增加很多测试和验证成本。

其他方法

STAR法:此方法常常用来向别人描述某一个具体的事情或问题。在沟通中用的比较多,但在具体编程中用的不多所以请自行搜索。

金字塔法:这个方法比较普遍。但说实话,这个方法掌握起来并不容易,我主要用它来汇报工作。

PK法:当你对于决策踌躇不定时(比如技术选型),可以找一张纸,列举出几个方案的所有优缺点,优点和优点PK,缺点和缺点PK,最后你会得到答案。

算法的学习方法

算法没有捷径可走,但可以用一些方法更快的提高算法能力。

“道“和”术“:

在我看来算法的学习分为“道”和“术”,“道”指的是框架和思路,“术”指的是将思路转化为代码的能力。有时候给你一道算法题你没有解题思路,这就是“道”的能力不足;而有时候你有思路却无法把代码编写出来,或者漏洞百出,这是“术”有所欠缺。

“道”和“术”是可以分开练习的:

练习“道”时,可以每天找一定数量的算法题,比如二十道,看题目之后只思考和回忆思路和各种解法,不需要写一行代码。这样反复练习,过段时间基本上看到普通的题目就至少会有一种靠谱的思路。

“术“的练习会更直观,就是每天解几道算法题,写出具体代码,并思考各种边界条件、编程技巧及测试用例等等。这样坚持一段时间,“术”的能力自然会提高,写不复杂的算法基本可以一次过。

金玉良言

  • “沟通“是软件开发中的第一等公民。能够深刻理解并实践这句话的工程师,没有一个不牛B的。
  • 做项目要先外后内,先高后低。先解决外部的因素,再去认真考虑内部的因素,因为外部因素一般都会显著阻碍项目的进展。先从高层次去研究,比如产品的流程及各种细节、完整的需求、整体架构及工作流,再深入到底层去研究具体实现、技术难点及解决方案等等。逆向的去实施一个项目,到最后常常会做很多的无用功。这样的案例常常在有几年经验的人身上见到,以为自己技术牛B,直接上来就怼具体实现,须知一个项目是由人、事和技术三方面组成的,人和事不能协调和沟通好,技术再好项目也不可能成功。
  • 遇事先解决情绪问题,再解决实际问题。带着情绪去解决问题,常常会犯很多低级错误。
  • 建议有眼界的人去多研究一下元认知,你会打开一个不一样的世界。
  • 持续自省是极其厉害的能力,会帮助你成为真正厉害的那一撮人。它就像北冥神功一样,让你从各种人身上学到优秀的东西,来补充你自身的缺陷。

文章到此就结束了!

最后来自小编的福利

以下是小编整理的一份大厂真题的面试资料,以及2020最新Java核心技术整理的资料集锦,需要领取的小伙伴可以 点我 免费领取 ,编程的世界永远向所有热爱编程的人开放,这是一个自由,平等,共享的世界,我始终是这样坚信的。

部分资料图片:

喜欢小编的分享可以点赞关注哦,小编持续为你分享最新文章 和 福利领取哦

猜你喜欢

转载自blog.csdn.net/QLCZ0809/article/details/111395729