最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》
3 在换工作前,需要定下预期目标,同时要观察公司的情况
我见过不少人,面试成了就进去了,结果虽然钱达到预期,但工作环境和行业背景都不是自己想要的,对自己未来发展很不利。
目前不少公司的情况,比如行业背景(比如金融保险电商等)还有工作强度(加班情况)在网上都能查到,用什么技术(比如分布式技术还是云还是AI)通过打听也能问到。互联网是万能的,甚至如果仔细些,一些离职率,每年工资的增长幅度,甚至这个公司是第几轮融资,一般也能看到。
而且,大家在面试的时候,可以通过现场观察以及和面试官交流,旁敲侧击地打探到上述情况。在这个基础上,大家需要结合自己当前的需求和未来3到5年的发展方向,找若干类适合自己的公司,下面就给些我个人的和我所见到的例子。
1 (这是我个人的观点)比如我不大愿意进创业型公司,也比较排斥长时间的996,所以这类公司我只是拿来练手。
2 有段时间,不少P2P金融公司踩雷,所以哪怕面试时,这类公司的面试官会说得天花乱坠(很少有说自己不好的),但这类公司得慎重。
3 有次我到一个现场去面试,发现公司规模不大,是在一个园区里占1个楼层,且大多是业务人员,开发的不多,而且人事总会说自己公司正在融资,那么这个公司就有可能不稳定,在有其它选项时,我就没去。
4 我认识一个人,他想在Java分布式这块有所发展,他5年后的目标是架构师,在面试过程中,他就详细问了未来新进组的技术栈,等确定可以了再入职。
换工作是个折腾人的事情,虽然没有十全十美的事情,进新公司后一定会发现和当初的预期有所不同,但如果事先不调查,那么入职后后悔这还是小事,耽搁自己的发展才是大事。
4 面试前,我总要查看职位介绍,以此准备项目介绍
在上文里,我一直介绍的是准备简历和定目标,从这部分开始,将介绍准备面试。在之前的博文里,我一直强调项目介绍的重要性,所以当我自己出去面试的时候,这块绝对重视。在准备项目介绍前,我还是会通读应聘职位的技术介绍,然后按如下的步骤来准备。
1 介绍项目的基本情况,比如这个项目是干嘛的,有哪些模块流程是什么,自己做了哪些,持续了多久,有多少个人参与。这块切记,可以谈下业务,但别深入,因为面试官不熟悉,也不想熟悉候选人的业务,这块时间控制在1分钟之内。
2 通过介绍项目用到的软件,以及项目的管理方式,来进一步验证项目的真实性,否则很难和培训班给出的项目有差别。
我介绍的时候,就说,项目管理用Maven,部署用jenkins,静态扫描用Sonar,任务管理和bug管理用jira,平时采用敏捷的项目迭代方式,每天有站会,大约1月一个迭代版本。这块大家可以根据自己的情况来介绍,时间也别太长,估计用1分钟也就够了。
3 这块最重要,是结合业务,抛出项目用到的技术,但别展开。
比如我见过一个职位介绍,里面写到需要有数据库优化的经验,那么我就说,项目里我用过MyCat作为分库分表,(不展开技术),结果上线后,我们数据库能承受住每秒2000个并发请求(说下用好的结果)。
又如一个JD里说要用到微服务技术,那么我就说,项目里用到了Spring Cloud框架,用到了Ribbon,Eureka等组件,容器是Docker。用好以后,在发布时会发现,各模块之间的调用耦合性大大降低。
这块为什么不用展开?第一,当前还在介绍项目,如果展开技术,就会主次不分,面试官会对你的逻辑思路产生质疑。第二,由于在JD里有要求,面试官一定会深入来问,别人问你说总比自己自吹自擂要好。 第三,就好比之前考文科内容,当前在介绍项目时,先应当把所有的点说出来,面上自有机会发挥。
5 准备项目介绍时,我是如何准备值钱技术的
这块其实和介绍项目经验时密不可分,这里就拿我介绍过的Netty组件来说明。
1 准备如何过渡到相关技术的说辞。
这里一定别让面试官感觉你在自说自话。比如我准备的方案1是,在介绍好项目背景后,如果面试官没打断,我就询问,能否介绍其中的Netty细节?得到允许后再说。方案2是把这些技术关联到面试官可能会问的问题上,比如问及网络通讯时介绍Netty,这个事先我会整理一个问题列表,遇到此类问题,我会抛出Netty说辞。对于其他技术也可以照此准备。
2 结合业务需求点,说下为什么要用这个技术,以及用了有什么好处。
比如为了优化网络通讯协议,所以用基于TCP协议的Netty,我业务模块里的xxx功能是用到netty,再稍微结合业务和Netty展开下。这样的话,面试官就会感觉这个技术你不是仅仅在学习中用到,而且在项目业务里用到。
3 准备下这个技术里我踩过的坑。
比如通讯过程中我遇到了半包和粘包问题,对此我更是深入了底层代码说明,还有Netty里的堆外内存管理问题,我准备了一个由于管理不善而导致的OOM问题的排查和解决过程(这类问题网上相关的也很多)。
4 我再准备了用了这个技术后对项目的帮助。
比如Netty是基于TCP协议的,它要比Http协议要轻,所以通讯性能高,且Netty内部的Reactor线程模型对系统的IO帮助很大。
其实准备到这个程度,一般的面试官就不怎么再问了,哪怕面试官再问了一个我不知道的问题,我也可以理直气壮地说不知道了,毕竟我之前已经介绍了不少底层代码,再精通Netty的人也未必能面面俱到地在脱稿的情况下回答出任何问题。
但为了以防万一,我更准备了“源于项目但高于项目”的说辞,一方面证明我平时还会不断专研,另一方面进一步证明我熟悉并能合理使用Netty的底层代码。这方面我准备了如下的内容:
1 Netty的重要组件以及一个请求过来时各模块工作的时序图。2 Netty内部零拷贝的原理和好处,对此还专门准备了代码。3 Netty读写索引的工作方式。4 Netty异步处理的机制。
大家可以想象下,如果在面试中,大家很自信地边写底层代码边解释问题,面试官会对大家有什么评价?其实这些都是可以准备的,我一直没明白,为什么有些人面试前不做任何准备?这些准备的素材又不是找不到。
下面我再略讲下我MyCAT的准备要点。
1 还是讲下业务背景,为什么要用?2 如何使用,无非是设置分库规则,改写SQL语句等。3 准备下踩到的坑,比如自增长主键在每台机器上都要保证唯一。4 然后再结合些底层代码,准备下一条SQL语句是如何分发到对应的分库上的,然后执行好以后又如何返回的。
基本上我面试时说到这个程度后,面试官就不怎么问了。
6 事前评估好自己的薄弱点,想办法让面试官忽略
哪怕事先再准备,我们也不能保证自己一定能达到职位介绍里的要求,这时候就得准备一个自己薄弱技术的列表,然后想办法在面试中绕过去,如果绕不过去,就找些替代方案。
比如我对消息通讯组件不熟悉,在面试前我哪怕看代码看文档也无法进一步理解,我就在面试中,故意不提这个环节,抛出其它值钱技术,引诱面试官来问,一般交流一个技术点大约耗时10分钟(边画图边介绍再提问),所以面试过程中详细交流到的最多也就5个点,少的话就3个,在不少面试里就根本没涉及到这块。
有两场面试,技术面试官问及到了,我就说项目里用过,同时多介绍些使用场景,比如用Kafka进行异步消息通知,通过消息中间件来保证交易的幂等性。这样面试官听到我介绍了应用场景,就至少会认为我用过。只有一场面试,面试官在kafka方面问得很细,问到如何集群内防止消息重发的细节,我就没回答上。
也就是说,我通过刻意回避外加介绍业务应用场景,很大程度上隐藏了我了解不深的技术。相反,如果我在简历中大大咧咧地写上用过kafka,那么可能每场面试都会被问到,毕竟在面试中被问倒不是件好事。
总结
如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了
《Java中高级核心知识全面解析》
小米商场项目实战,别再担心面试没有实战项目:
面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**