当前位置: 首页 > 后端技术 > Java

进大厂也是一样,在大厂工作2~3年,操作指南

时间:2023-04-01 20:14:10 Java

在BAT这样的大厂,只要你肯吃苦,技术和工资进步的速度会超乎你的想象。我在上海,按照现在的物价,一般在大厂干个三四年。至少我应该能有一套房子的首付,而且这种房子也不算偏僻,也不算小。进入大厂确实需要一定的实力,但如果只有技术好,没有其他技能,可能会比较吃力。但换句话说,即使你是二本,即使你技术一般,只要你肯努力,做得好,工作后3年内进大厂应该不难.本文针对起点一般技能的同学给出进入大厂的具体操作指南。1从战略角度开始鄙视,进大厂就是这样。也有在大厂只有2、3年开发经验的初级开发人员,有的可能只有第二所学校。可能在他们进大厂之前,资质和技能都和你差不多。甚至可以说,只要找到去面试的渠道,加上适当的准备技巧,进入大厂其实比进入一些面试要求更苛刻的小公司更容易。让我们采取一些步骤。简历方面,只要有适当的分布式组件经验,至少可以获得面试机会。当然,如果面试的时候只知道增删改查,当然不行,但是面试的问题和提问方式,网上太多了,这个文章也将涵盖它。第一个关键是正确看待分布式技术,第二个是结合项目。这对于初级开发来说并不难。甚至有些项目比较缺人的时候,面试标准也会降低。让我量化一下进入大厂所需要付出的努力和时间。首先,我每天花大约1小时阅读数据和运行代码来准备我的演讲。我每周总共花费大约10个小时。2个月后,应该能读的差不多了,然后又花2个月的时间在几家小公司面试实习。然后就可以去大厂投简历了。如果一切顺利,谈什么都容易。不行就换个项目组,或者约几个大厂。过了三四次,应该就没事了。花点时间努力应该问题不大,努力的方向未必大家都知道。具体细节后面会详细展开。能通过筛选的简历通常是什么样子的?1硕士,大学,1、2年工作经验,近期项目包括分布式组件等有价值的技术。2如果你有一个普通的大学学位和一个学士学位,你可能很幸运。根据项目团队的不同,您可能还需要大约一年的项目经验。如果项目组着急,或者公司的招聘需求高,你其实不看学校。3这非常重要。换工作不要太频繁。最好最近一年没有换工作,而且最近一直在工作,不用长期离职。简历上的项目经历可以自己去挖掘,但如果有不利因素,尽量用时间冲淡。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/秒左右。如果把所有请求都push到数据库,数据库受不了,所以用redisCluster,然后准备一些集群的通用配置。使用的时候,结合业务,里面用到了string等数据结构。使用的时候会设置一个超时时间,防止缓存一直在内存中。同时为了防止渗透,null也会被缓存。同时量力而行,不要再谈redis的事情了。请注意,在结合业务谈论技术时,不必涉及太多细节。比如redis的线程模型就不用涉及了,但是首先要说一些配置值(比如集群配置值,超时配置方式),让面试官觉得你确实用过项目,然后说说在项目中使用的经验,比如redis使用集群防止单点故障,超时时间最好设置在它后面随机一秒,以防大批量在某个时间点缓存失效,一下子去取数据库,导致压力过大。这里只给出redis。另外mycat、kafka、netty、zookeeper、dubbo等也都是这样处理的,这样即使你用的不多,也能让面试官觉得你有这方面的实际项目经验.3分布式组件确实不好说。为了让面试官觉得你有这方面的经验,或者当你没说出好问题的时候作为补救,你最好整理出一些实际解决过的问题。准备问题的时候,先说说问题是怎么发现的,比如日志中经常报oom异常,或者系统根本登录不上,你在查什么。无非就是通过linux命令查看日志,或者使用dump查看内存镜像,然后说说问题原因,比如dubbo超时时间过长导致请求卡死,或者redis没有设置atimeout时间导致内存oom,网上有很多这样的点。并且在你分析问题原因的时候,可以借此机会让面试官觉得你熟悉分布式组件的底层源码。当出现netty半包等问题时,可以趁机抛出。4准备一些收尾工作。当你结合项目和你解决过的问题说分布式组件技术,然后说出这几点,面试官立马就会对你刮目相看。这几点可以是基于kafka的反幂等机制,也可以是集成dubbo源码的zk。这样有价值的技术和源代码太多了。由于找到这些点是体力活,我懒得在这里列出它们。再说一遍,在准备分布式技术演讲的时候,一定要结合项目。即使你很少用到,网上也能找到资料,但是找到之后一定要把它集成到项目中。这是一个例子。初级开发候选人也很努力。他背了很多分布式题。基本上,他将能够回答任何问题。但是当面试官要求结合之前的项目经验说说用到的技术时,他也说不出来。其他其实我对分布式的底层细节了解不深,但是可以结合项目说说redis超时和防渗透的实现细节。其实这些技术都不深,但是对初级开发的要求并不高,正是因为后者有模块化组件的分布式项目经验,所以虽然两人都被录用了,但后者的薪水要比后者高以前的。5充分展现项目调试部署能力项目调试部署能力绝对是初级和高级开发人员的一大亮点,并不是每个人都会,即使是大厂的候选人。如果你这样说,面试官可能不会问的很详细,只要你说的没有大的问题就行,而且这不是所用技术的深浅,而是你知道这方面的实际要点。在我之前的博文中,如何准备Java面试?如何将面试官的问题引导到自己准备的范围内?,给出压测准备的实际要点,让大家看到面试官并不关心你在压测中解决了什么问题,也不关心涉及的技术,只关心你在这方面分析和解决问题的经验区域。同样,可以在面试前准备一些分析和解题的步骤,前面已经讲过,这里再举一个例子。例如cat等监控系统经常报内存占用过高。这个时候你看看log或者dump,然后发现问题所在。问题的根本原因太多了。除了刚才提到的redis缓存,可能是netty堆外的内存没有处理。好的。嗯,涉及到的技术太深了,我举一些简单的,比如因为HashMap没有清空,或者数据库对象没有关闭,或者创建线程池时使用无限队列缓存任务。由于其他原因,您在项目中遇到的可以作为您的亮点。说说部署方式吧,zk+dubbo部署可以看一些配置文件,也可以看各种redis集群的一些部署配置。如果你觉得自己精力够了,可以看看灰度发布和切流量的一些配置。事实上,你可以看到它。只是一两句代码的问题,但是结合部署这个大话题说,用意就不一样了,因为高级开发人员(和架构师)不仅要会写代码,还要会能够部署组件。6.给出若畅面试过程中的问答。面试官:说说你的经历和项目经历?应聘者要介绍自己的教育背景(有两本或三本书都无所谓),有1到2年的相关经验(应该可以挖掘出课程设计、毕业设计和后期工作经历).简要介绍项目业务。比如我在xx公司的支付系统中使用了springboot、netty、mycat等技术(编写的亮点可以说是分布式组件越多越好),在项目中,我不仅写代码,还参与了压力测试和数据库及jvm调优(抛饵等问),也解决了网上反映的redis缓存穿透,kafka消息重传导致幂等和dubbo超时导致在线连接数打满的问题(准备多了问题发到这里,等面试官问)。让我介绍一些编码技能之外的能力。比如在项目中,我也使用sonar来管理项目的质量,参与了jenkins发布部署脚本的编写。(这个技术每个项目都有,注意的话无非就是写配置,说出来就不一样了)听完你的项目介绍,面试官会问分布的问题,比如你说你解决了redis缓存穿透问题,你是怎么解决的?考生:(回答时一定要结合项目),在我的支付管理系统中,支付模块会向风控模块请求公司的风控数据,但是同一个请求的参数会发送多次,所以我使用redis做Cache(大致介绍一下业务背景),但是在实际应用中,并非所有发送的请求都存储在风控库中,所以被穿透了。后来的解决方案是把null值也缓存起来,同时缓存一些经常请求但风控表中没有的参数。注意这里的面试官不会关注具体的业务和解决方案,你只要说大体上没有问题就好,比如你可以使用单机版的redis,而不是在这里说。同一个问题多准备几套解决方案,这样一说出来,面试官就会认为你在实际项目中用过。说完redis、mycat、kafka、netty等解决的问题,面试官就会开始问一些底层细节,比如问,你可以说说netty的线程模型,netty的读写索引,还有dubbo反序列化协议等等,这些属于理论知识的考验,既然你都提前背下来了,应该问题不大。这里面试官的用意是去掉你提前的准备,所以他们会随机提问,但是你得想办法把题点带回来,尽量多花点时间。如何才能做到这一点?(比如问netty的线程模型),候选人:先画图说说,说完模型,马上来一句,在我们的项目中,线程池是用来管理工作进程的(拉回business),在管理流程的时候,我也遇到过将缓存队列设置为无界队列导致的oom问题。(再次抛饵等问题),然后趁机开始,这样才能顺利消耗面试时间。而如果按照上面给出的准备步骤,就可以准备好各个组件所解决的问题,然后再一一展开。问完分布式组件,面试官可能会问数据库和java基础,比较容易。面试官:你们项目的数据库是什么?考生:我们用的是oracle,项目中用的是mycat分库分表(之前说了就算了,不说就扔),在项目中,我也处理过问题长sql(这会导致调优亮点)。面试官:你调音是为了什么?(不由自主引导)考生:我们使用的监控方式是cat。当监控系统上发现长SQL时,我们使用执行计划对其进行分析,然后据此建立索引,或者建立redis缓存,或者使用with语句优化SQL。然后找一个准备好的sql说一下。然后面试官会问指标之类的问题。可以提前背一些答案,讲讲底层结构。跟数据库问好,面试官会问java核心,比如hashmap,线程安全不安全,或者jvm的问题。你把这种问题的答案背下来,然后再延伸一遍。考生:对于hashmap,除了我刚才提到的底层代码,在使用之后,我们需要立即清除它,以防止内存泄漏(引出内存的话题)。或者回答完jvm的问题,你马上说在实际项目中,我们会监控jvm的使用情况。当超过70%时,我们将使用转储文件查看图像。之前项目遇到的jvm问题是nettyheap内存管理不好,ThreadLocal用的好但是没有去掉,oom的原因太多了,大家自己准备,我就不展开了。通过上面的方法,回答完问题,马上结合业务抛出下一个诱饵,然后想办法把问题引向jvm调优,数据库调优,线程底层代码,(hashmap等)底层源码代码等问题,这样可能你自己技术不好,资历不够,但是面试官给你的评价可能是第一,你基础扎实,第二,你有调优经验,还有第三,你有使用分布式组件的经验,以上三点就够了,初级开发不说,可能还有以下测评,比如掌握提升项目代码质量的技巧,熟悉在线调试发布的基本技能,熟悉底层分布式等细节,再拿到这些评价,估计表面架构师够用了。这还没完,当面试官问的好问题,你准备的highlight却没有机会扔出去,不甘心,你还有机会扔出去。面试官:我问了问题,你想问我什么?候选人:(先说吧)如果我有幸面试成功,我会加入哪个项目组?然后不管面试官怎么回答,即使你回答“看情况和分布”也没关系,然后继续问,(比如dubbo的highlights不够)在你的项目中,如何你做远程调用(假装糊涂)吗?面试官一般都会说dubbo,然后交流,交流过程中随便说一句,我们之前的项目也是用的dubbo,所以我也看了dubbo的源码,解决了服务暴露的问题,然后就是我很有可能有机会说出来。或者没有机会谈压力测试的技巧,你可以虚伪地问,你的项目会做压力测试吗?压力测试时如何发送请求?如何监控?然后你可以在交流中谈谈你的亮点。其他亮点也以同样的方式准备。7多找几家小公司面试。其实一些小公司的面试难度比大公司还要难。理想情况下,你的面试结果与技能无关,与项目经验长短无关。只看你简历上的项目和技术介绍。这与您预先准备的亮点有关。但是如果你只是简单的准备,不去练习,任何一个面试官都能查出你的底细,不要对此抱有任何幻想。因为一方面你准备的可能不完整,另一方面你准备的projectpitch也可能没有起草好,中间可能会出现漏洞。这时候就需要找一些小公司试试。怎么做:按照大公司的面试标准准备,然后到处去小公司投简历。切记先不要急着找大公司,尽量不要留下大公司面试失败的记录。最好一周面试两次。家。面试一开始,你会发现自己的说辞漏洞百出,甚至可能会被看穿细节,但不要气馁。首先,收集面试官的问题。继续挖掘你聪明的技能。这个时间段,小公司的面试官会在面试中尽量弥补你的短板。我什么时候可以离开我的老师?首先,面试官确实可以问分布式组件的实践经验,而不是简单的问理论。第二,你已经通过了三个这样的面试。8个进大厂的渠道现在可以自信挑战大厂了,这个时候怎么找渠道进大厂呢?1、在招聘网站等渠道多联系几个猎头,告诉他们你想进大厂,比如bat或者公司名。不是每个大厂每个时间段都有招人名额,等着吧,等的时间不会太长,最多2个月。2.寻找内部推荐人。例如,如果您在网上看到有关成功面试的文章,请与我们联系。这里的建议是找猎头,因为猎头方便查询你的面试结果,面试可以帮助你的薪水最大化。同时,如果面试失败,可以告诉猎头,想面试这家公司的其他项目职位。如果你自己投递简历,你可能得不到这样的遍历。当你准备充分,准备好的演讲经过小公司的测试,一般问题并不严重。如果再失败,或者在公司换个职位,或者换个大厂,最多见3次。完成。9总而言之,努力工作永远不晚。一个大厂离你现在的高度最多也就两年。事实上,如果你进入一个大工厂,你会得到一个可以通过加班快速提高技能和收入的人。机会多,而且大厂每年都有很多招聘名额,进大厂并不难。在网上看到很多3年以内毕业的同学进了大厂。我身边的人,见过硕士1年经验进拼多多,本科2年进阿里。至于进过大厂有3、5年经验的,我都想不起来了。除了提升技能,进入大厂还能带来不小的收益。比如工作3年,可以赚取20k*16个月的收入。如果再找一个行业,具备这些资格的人,就可以有相应的收入。进厂工作,3、4年后,可以继续升级为建筑师,年收入达到50万到60万元(这还是一个平均水平),退休了还可以进外企像我这样,工资加上平时的书和视频,在上海是不会饿死的。可能很多同学现在需要仰望大厂,但其实准备工作就是这样。如果时间充裕,多看视频教程,少做一些没用的消遣,估计天上掉馅饼,2年的努力真的够了,1年的简历刷白,1年的准备,这也太多了。但是如果你原地踏步,或者你努力了还是不敢迈出面试这一步,那你可能真的要在小公司安定下来了。如果这篇文章对你有帮助,别忘了连打3个,点赞、转发、评论,我们下期再见!了解更多JAVA知识和技能,关注和私信博主(666)