关于java:进大厂也就这回事工作后2到3年进大厂操作指南

34次阅读

共计 7477 个字符,预计需要花费 19 分钟才能阅读完成。

在 BAT 这种大厂里,只有肯吃苦,技术和工资提高的速度会超出你设想,我在上海,按以后价格算,个别在大厂里干个三四年,好歹房子的首付应该能有,而且这种房子还不是太偏僻太小的。

进大厂的确须要肯定的实力,但如果单单技术好,没有其它的技巧,预计的确也有些难度。不过话说来,哪怕是二本出身,哪怕技术个别,只有肯上心加办法切当,工作后 3 年进大厂应该不是难事。在本文里,就将针对终点个别技术个别的同学,给出具体的进大厂操作指南。

1 先从策略上蔑视,进大厂也就这回事
大厂里也有只有 2,3 年开发教训的高级开发,而且其中有些同学的学校可能也就是个二本,或者他们进大厂前,资格技术和你也差不多。甚至能够这样说,只有找到渠道去面试,外加适当的筹备技巧,进大厂其实比进一些面试要求比拟刻薄的小公司更容易。

就拿一些步骤来说吧,简历方面,只有有适当的分布式组件教训就至多能失去面试机会,面试时,当然如果光会增删改查当然不行,不过面试问到的题目以及发问的形式,网上多了去了,本文也会波及,要害第一要适当看分布式技术,第二要联合我的项目说,这对高级开发而言,也不难。甚至当有些我的项目比拟缺人时,面试的规范更会升高。

我给大家量化一下进大厂的须要破费的致力和工夫吧。第一大略每天用 1 个小时看材料运行代码筹备说辞,每周大略累计用 10 个小时,通过 2 个月其实该看得就差不多了,而后再用 2 个月用几个小公司面试练手,就能够去大厂投简历了。如果一切顺利什么都好说,万一不成,换个项目组,或者多面几家大厂,面个 3,4 次,应该也能行了。用工夫致力应该不是问题,致力的方向可能未必大家都晓得,具体的后文将具体开展

2 尽可能洗白你的不利因素
首先要让你的简历过筛选,否则没面试机会。能过筛选的简历个别长什么样?

1 硕士,一本大学,1,2 年教训,而且最近我的项目里蕴含分布式组件等值钱技术。

2 如果大学个别,本科学历,预计要运气,看不同的项目组,可能会须要再多 1 年左右的我的项目教训,如果项目组焦急要,或公司招聘需要高时,其实不看学校。

3 这点很重要,别太频繁跳槽,最好最近 1 年没跳槽经验,而且最近退职,不是长时间处于到职状态。

简历上我的项目教训这块能够本人开掘,但如果有不利的因素,尽量用工夫冲淡。

1 学校个别,找个有高并发背景的我的项目,体现在简历上,最多两年就够了。

2 最近跳槽太频繁,找个公司窝个一年左右,最好是最近一年半没跳槽经验。如果有超过 1 个月的到职状态,也能够通过间断下班个 1,2 年来淡化。

3 刚从培训班里进去,也去找个小公司干一年半载的,但要积攒分布式我的项目教训。

大家留神没,这部分始终在强调分布式组件的技术,具体而言是 netty,redis,mycat,kakfa 等高并发的技术,工作年限是一方面,另外你简历最近的我的项目里,这些分布式组件的实际技能肯定要体现进去,如果你让大厂的面试官感觉你第一相干技术年限有余,第二只会增删改查,那么对不起,你没面试机会。还有,如果你理论能力很强,但简历上看不出,面试官间接认为你不行。

3 数据结构方面,最好能疏导到筹备好的技术亮点
数据结构是大厂面试必问的点,网上这些题目太多了,而且答案都能够筹备。不过如果要进大厂,最好能举一反三。

先用红黑树举例,除了要能讲根本数据结构,插入删除节点能操作外,能够再引到 ConcurrentHashmap 底层数据结构上,用该对象的底层代码来阐明,其实这和你的我的项目能力无关,当时筹备下就行了,但如果你答复红黑树问题时顺带引出底层代码,甚至还能够从 ConcurrentHash 引到并发方面的问题,这样面试官就不会认为你光会实践。

再说比拟罕用的链表数组等,这些第一能够和 Java 里的 ArrayList 等对象一起讲,第二能够顺带引出疾速生效和遍历等底层代码,这样也能让面试官感觉你根底扎实。

至于 HashMap,这方面都被问烂了,网上的解析文太多了,但大家在答复好实践问题和底层代码后,也能够进一步展现锁和并发的话题。

总之,数据结构的问题是必问了,在这个环节,很多高级开发候选人甚至连底层代码档次的问题都答复不好,而你通过筹备,不仅能触类旁通地展现你对底层代码的了解,更能借机展现锁和并发等技术点,首先就能给面试官留下个好印象。至于口试写算法,这种网上题目更多了,当时更能够筹备。

4 大厂更多考的是并发方面的能力,同时更要联合我的项目说
先给些发问的形式,比方 netty,先问重要组件和工作流程,再问序列化,服务裸露等当时细节,再问读写索引半包粘包等问题,其实对高级开发而言,问到这里就差不多了,如果要找个高级开发,可能再会联合底层代码问。分布式组件有很多,其它组件,比方 mycat,也是先问用法,比方如何设置分库规定,再问底层细节,比方底层代码如何把 sql 定位到具体的库上。再如 redis,能够先会问些数据结构以及根本用法,再问些诸如集群等方面的细节。

哪怕去面大厂的高级开发,筹备分布式并发这块其实也不是问题,因为很多人在之前其实根本没相干我的项目教训,其实都是在背题,你只有在面试时,让面试官感觉稍微比他人多些我的项目教训即可,上面给些筹备的办法。

1 先看几套面试题,这些面试题其实都大同小异,都会比拟深地波及到底层源码和实际要点,先把实践题背熟。这些点尽管不少,但其实都是体力活,背书么,这种事应该没难度。该背哪些素材呢?我之前看到的吊打面试官系列就不错。其实当大家看了几套题当前,会发现分布式组件的值钱技术,也就这么多。

2 其实很多候选人仅仅停留在这个境地,如果你做了后继步骤,就比大多人强了。在背熟当前,再给一些技术找些我的项目的背景,这些技术未必要深,但肯定要联合我的项目的业务。比方就说最根本的 redis,你说你之前的我的项目是某数据处理模块(我的项目能够按理论说),并发量大略每秒 1k,如果都把申请压到数据库,数据库受不了,所以就用 redis 集群,而后筹备些集群的大抵配置形式。在用的时候,联合业务,用到了外面 string 等数据结构,用的时候会设置超时工夫,以防缓存始终在内存,同时为了避免穿透,会把 null 也缓存起来。同时不自量力,就别再说 redis 事务了。

请留神联合业务说技术的时候,未必要波及过于细节的点,比方不必波及到 redis 的线程模型没,但首先得说些配置值(比方集群配置值和超时配置的形式),让面试官感觉你的确在我的项目里用过,其次要讲些我的项目里用到的教训,比方 redis 要用集群,避免单点生效,设置的超时工夫最好前面带个随机秒,以防一个工夫点里大批量缓存生效,一下子去拿数据库从而导致压力过大。

这里仅仅给出了 redis,另外,mycat,kafka,netty, zookeeper,dubbo 等,也照此办理,这样哪怕你平时用得不多,但也能让面试官感觉这方面你有理论的我的项目教训。

3 的确分布式组件这块要说好不容易,为了让面试官感觉你有这方面的教训,或者作为没说好问题时的补救措施,你最好再整顿些理论解决过的问题。

筹备问题时先讲问题是如何发现的,比方日志里频繁报 oom 异样,或者罗唆零碎登不上,再说你是什么查的,无非是通过 linux 命令看日志,或者用 dump 看内存镜像,再说问题起因,比方 dubbo 超时工夫过长导致申请卡住,或者 redis 没设超时工夫导致内存 oom,这些点网上一搜也是一大堆。

而且你剖析问题起因时,更能够借机让面试官感觉你相熟分布式组件的底层源码,比方你筹备些 netty 底层读写索引(或零拷贝)的源码,面试时当你说你解决过因 netty 半包等起因而导致的问题时,能够借机抛出。

4 再筹备些画龙点睛的说辞,当你联合我的项目以及你解决过的问题说出分布式组件技术时,再说出这些点,立刻能让面试官高看你,这些点能够是基于 kafka 的防幂等机制,也能够是 zk 整合 dubbo 的源码,这种值钱技术和源码太多了。因为找这些点是体力活,所以自己在这里就懒得再列了。

再啰嗦下,筹备分布式技术说辞时,肯定要联合我的项目,哪怕你平时用得很少,但能够找网上的材料,但找到后肯定要融入到我的项目里。这里给个例子,某高级开发候选人也很用心,背了很多分布式题,根本有问必能回,但当面试官让联合之前我的项目教训说用到的技术时,他说不上,另一位其实分布式底层细节理解不深,但就能联合我的项目说些 redis 超时以及防穿透的实现细节,其实这些技术并不深,但对高级开发的要求并不高,正是因为后者具备分布式组件的我的项目教训,所以尽管两位都录用了,但后者的工资要高于前者。

5 充沛展现调试和部署我的项目的能力
调试和部署我的项目的能力对高级和高级开发来说相对是亮点,而且哪怕是大厂的候选人,也不是每个人都会。这块你如果说了,面试官未必会细问,只有听你讲的没大问题即可,而且这块不在于用到技术的深浅,而在于你晓得这方面的实际要点。

在我之前的博文里,如何筹备 Java 面试?如何把面试官的发问疏导到本人筹备好的范畴内?,给出了筹备压测的实际要点,从而大家能够看到,面试官不在乎你压测方面解决过的问题,也不在乎波及到的技术,只关怀你有这方面剖析和解决问题的教训。

同样你能够在面试前筹备些剖析和解决问题的步骤,这之前也曾经提到过,这里再给个例子。比方 cat 等监控零碎上频繁报内存用量高,这时你看日志或 dump,而后发现了问题,问题本源太多了,除了方才提到的 redis 缓存没开释,更能够是 netty 堆外内存没解决好。好吧这些波及到的技术太深,那么给些简略的,比方因为 HashMap 用好没 clear,或者数据库对象没关,或线程池创立时用有限队列缓存工作,而后你搜 oom 起因,再去找其它起因,你我的项目里遇到的就能够当作你亮点的说辞。

再说部署办法,你能够看些 zk 加 dubbo 部署的配置文件,也能够看些 redis 各种集群的部署配置,如果你感觉有余力,再看些灰度公布切流量的配置,其实看会了也就是一两句代码的问题,但你联合部署这个大题目说进去,立意就不同了,因为高级开发(以及架构师)不仅要会写代码,更要会部署组件。

6 给出若厂面试过程的发问和答复
面试官:介绍下你的经验和我的项目教训?

候选人,介绍教育背景(二本三本都不要紧),有 1 到 2 年相干教训(开掘课程设计毕业设计和工作后的教训,应该能够达到)。稍微介绍我的项目的业务,比方我之前在 xx 公司做了领取零碎,用到 spring boot, netty, mycat 等技术(筹备过的亮点都能够说,分布式组件多多益善),在我的项目里,我不仅写代码,还参加过压测和数据库和 jvm 调优(抛出钓饵等来问),还解决过线上报出的 redis 缓存穿透,kafka 音讯重发导致不幂等和 dubbo 超时导致线上连接数打满的问题(这里多筹备些分布式的问题,也坐等面试官来问)。再介绍些超出编码技能的能力,比如说,在我的项目里,我还用过 sonar 来治理我的项目品质,参加过 jenkins 公布部署脚本的编写等。(这种技术每个我的项目都有,你关注下,无非是写配置,但你说了就不一样了)

听你讲完我的项目介绍后,面试官会问分布式等问题,比方会问,你说你解决过 redis 缓存穿透问题,你说下如何解决的?

候选人:(答复的时候肯定要联合我的项目),在我的领取管理系统了,领取模块会向风控模块申请公司的风控数据,但雷同申请的参数会发屡次,所以就用 redis 来缓存(大抵介绍业务背景),但理论利用中,收回的申请未必全存在风控的库里,所以就穿透了。起初解决的办法是,把 null 值也缓存,把一些常常申请的但不存在风控表里的参数也缓存。留神这里面试官不会关注具体业务和解决方案,你只有大抵说得没问题就行,比方这里你别说就用单机版的 redis 就行了。同样的问题解决方案多筹备几套,这样你说了,面试官就会认为你在理论我的项目里用过。

当你讲完 redis,mycat,kafka,netty 等解决过的问题后,面试官会开始问些底层的细节,比方会问,你说下 netty 的线程模型,netty 的读写索引,dubbo 反序列化的协定等等,这些就属于考理论知识了,因为你当时背过,所以应该不会有太大的问题。这里面试官的用意是想解脱你当时的筹备,所以会随机提问,但你要想方法把问题点拉回来,而且争取多耗时间,这怎么做呢?

(比方问 netty 的线程模型),候选人:先边画边说,讲好模型后,而后立刻带一句,在咱们我的项目里,是用线程池来治理 work 过程(拉回到业务里),在治理过程时,还遇到过因缓存队列设成无界队列而导致的 oom 问题。(再次抛出钓饵坐等问),而后借机开展,以此胜利消耗面试工夫。而且如果按上文给出的筹备步骤,你能够筹备好每个组件解决过的问题,而后逐个开展。

当问好分布式组件后,面试官可能会问些数据库和 java 根底,这些更简略了。

面试官:你们我的项目的数据库是什么?

候选人:咱们用到的是 oracle,在我的项目里用到了 mycat 分库分表(之前说过就算了,没说过就抛出),在我的项目里,我还解决过长 sql 问题(由此引出调优亮点)。

面试官:你是什么调优的?(情不自禁地被疏导)

候选人:咱们用到的监控形式是 cat,当监控零碎上发现长 sql 时,咱们就用执行打算来剖析,而后对应地建索引,或者建 redis 缓存,或者用 with 语句优化 sql。而后找个筹备过的 sql 讲下就结了。

而后面试官会问些索引之类的问题,这些你当时背些答案,讲些底层构造即可。问好数据库,面试官会问 java 外围,比方 hashmap,线程平安不平安,或者 jvm 问题。这种你背好答案,同样再引申下。

候选人:对于 hashmap,除了方才我讲的底层代码外,用好当前,咱们还须要立刻 clear,以防内存透露(引到内存话题)。或答复好 jvm 问题后,你立刻说,在理论我的项目里,咱们会监控 jvm 的用量,当超出 70% 时,就用 dump 文件看镜像,之前我的项目里我遇到的 jvm 问题有,netty 堆外内存治理不善,ThreadLocal 用好没 remove,造成 oom 的起因太多了,大家自行筹备,我不开展了。

通过上述形式,你答复好问题后,立刻联合业务抛出下个钓饵,而后想方法把问题引到 jvm 调优,数据库调优,线程底层代码,(hashmap 等)底层源码之类的问题,这样可能你自身的技术未必行,而且资格也未必够,但面试官给你的评估可能就是,第一根底扎实,第二有调优教训,第三有分布式组件的应用教训,如果面高级开发,上述三点就足够了,更何况去面高级开发,指不定还有如下的评估,比方把握我的项目代码品质的晋升技能,相熟线上调试和公布的基本技能,相熟分布式底层细节等。如果再失去这些评估,预计面架构师都够了。

这还不算完,当面试官提好问题,但你筹备的亮点没机会抛出时,别不甘心,有机会抛出。

面试官:我问题问好了,你有什么要问我的?

候选人:(先套上话),如果我有幸面试胜利,会进哪个项目组?而后不论面试官怎么答复,哪怕答复“这要看状况调配”也不要紧,而后持续问,(比方 dubbo 亮点没抛够)在你们我的项目里,怎么做近程调用的(揣着明确装糊涂)?面试官个别就会说 dubbo 了,而后交换,交换过程中不经意说句话,咱们之前我的项目也用 dubbo,所以我还看过 dubbo 源码,并解决过服务裸露的问题,而后很大几率能有机会说出。

或者你没机会说出压测技能,就能够假惺惺地问,你们我的项目里会不会做压测?压测时怎么发申请?怎么监控?而后能够在交换过程中说你的亮点。其它的亮点也照此筹备。

7 多找几家小公司面试,其实有些小公司的面试难度还超出大公司
现实状况下,你面试的后果和技能无关,和我的项目教训的长短也无关,只和你简历上的我的项目和技术介绍无关,和你当时的筹备亮点说辞无关。

但如果单纯筹备不去实际,任何面试官都能摸清你的底细,这点别有任何空想。因为一方面你筹备的点未必全,第二你筹备的我的项目说辞未必很好地打过草稿,两头可能会有破绽,这时你就须要找些小公司来尝试了。

这怎么做:筹备按大厂面试的规范筹备,而后到处去投小公司的简历,记住先别着急找大公司,尽量别在大公司里留下面试不成的记录,最好一周面个两家。

刚开始面试的时候,你会发现你的说辞漏洞百出,甚至会被看穿你的底细,但别灰心,第一收集面试官的问法,第二一直练习亮点技能联合我的项目的说法,第三再一直开掘你的亮点技能,这个时间段里,小公司的面试官会渎职地补救你面试中的弱点。

什么时候能出师?第一面试官的确能问分布式组件的实践经验,而不是单纯问实践,第二此类面试你通过三家,第三而且你是大劣势通过,而不是可上可下地通过。

8 进大厂的渠道
这个时候你就能信心十足地去挑战大厂了,这个时候如何找进大厂的渠道呢?

1 在招聘网上等渠道,多接触几个猎头,明和他们说你要进大厂,比方 bat 或者公司名称。不是每个时间段大厂都有招聘名额,不要紧就等,而且等的工夫不会太长,最多 2 个月。

2 找内推,比方大家在网上看到有面试胜利的文章,就分割下。

这里举荐是找猎头,因为猎头不便打探你面试后果,而且面试成了更能帮你最大水平争取工资,同时万一没面成,你能够和猎头说,你想面这家公司的其它我的项目岗位。如果你本人投简历,未必能失去这样的遍历。

当你充分准备,并筹备好的说辞通过小公司的测验后,个别问题就不大了,万一再失败,或者找该公司其它岗位,或者找其它大厂,最多面个 3 次应该也就成了。

9 总结,任何时候开始致力都不晚,大厂离你以后的高度最多也就两年的间隔
还是这句话,其实进大厂,失去的也就是个能通过加班从而疾速晋升技能和支出的机会,而且大厂每年的招聘名额都不少,进大厂不难。网上我就见过不少毕业 3 年内的同学进大厂,我身边的,我见过硕士就 1 年教训进拼多多,本科 2 年教训进阿里,至于 3 到 5 年教训进大厂的人,我都记不过去了。

进大厂除了能晋升技能外,收益也比拟可观,比方工作 3 年,能有 20k*16 个月的支出,找个其它行业,这些资格能有对应支出的,并不多没,而且进大厂后,做个 3,4 年进能够持续降级到架构师,达到年入五六十万的收益(这还算平均水平),退能够像我这样进个外企,工资外加平时出书出视频,在上海也不至于饿死。

可能不少同学当初看大厂须要仰望,但其实做的筹备也就这么回事,工夫用够,多看视频教程,少干有益的消遣,预计顶了天了,2 年致力真的足够了,1 年洗白简历,1 年筹备,这还算多了。但如果固步自封,或者尽管致力但始终不敢迈出面试的步骤,那么可能真只能在小公司里随遇而安了。

如果本文对你有帮忙,别忘记给我个 3 连,点赞,转发,评论,

咱们下期见!学习更多 JAVA 常识与技巧,关注与私信博主(666)

正文完
 0