欢迎关注我的公众号:石杉的架构笔记(ID:shishan100)mysql
周一至周五早8点半!精品技术文章准时送上!linux
精品学习资料获取通道,参见文末程序员
目录面试
1、回眸再看,感慨万千redis
一、互联网公司的 “ 面试套路 ”算法
二、跳槽前的技术积累spring
2、苦修半年,成果检验sql
一、面试week1:准备不足、当头一棒数据库
二、面试week2:查漏补缺、稍有转机编程
三、面试week3:一气呵成、拿下offer
四、offer盘点及选择
3、最后的总结
一、投简历策略
二、简历中的知识准备
三、论面试心态的重要性,千万别崩
4、文末彩蛋
这样回答问题,能让面试官两眼放光
“正式开始以前,先说一下这位同窗的面试成果,从一个不知名的小公司出身,原先年薪不到20万,经过本身的努力不断的提高技术,最终收获多个知名互联网公司的Offer,年薪达到30多万,几乎翻倍!
半年多的准备,1个月的面试,从准备时的信心满满,到初试牛刀的当头一棒,再到沉下心来,不断补足短板,再度启程,最终拿下目前的offer。
面试准备是一场持久战,个中滋味、惟有自知。在即将入职新公司以前,特地将这一路走来的心得体会分享出来,给本身作一个总结,也跟广大筒子共勉。
一、互联网公司的"面试套路"
通过此次跳槽面试北京多家互联网公司以后,楼主总结出了一个“面试套路”。
通常的有必定技术氛围的互联网公司的面试,大体能够分为三面:
(1)一面:基础
一面面试官通常是团队里比较资深的工程师,进去以后的同事。而一面通常会问的基础内容包括:集合、网络、IO、并发、基本数据结构和算法、JVM。
根据楼主的面试经历,若是是面试互联网公司,一面通常都会挑出上述所说的一个或几个专题提问。
数据结构算法不用多说了,楼主建议从准备面试开始,一天刷一到两道算法题。
不用选择太难的题目,可是经典的排序、查找算法,基本的数据结构好比二叉树、链表、堆栈,这种必定得会,不然写不出来就回家。。。
另外,建议你们去看看JDK的底层源码,好比集合包、并发包的源码。看的时候必定要边看边总结边画图,这样最后记在你脑子里的,是一幅幅的图片。
若是光看不画图的话,除非你是天才,不然必定很快就忘了!楼主自身的血泪教训。。。
总之,若是能作到上述几点:掌握经典数据结构算法题目,而且能够在面试现场,跟面试官画图聊聊JDK底层源码的话,一面必过。
(2)二面:项目经验
二面面试官通常是你将来团队leader,通常会结合项目来进行考察。举个例子,下面就是一个比较典型的项目连环炮:
通常二面就会从项目各个细节入手,考察各类技术在项目里是如何运用的,而且技术是如何结合业务来落地的。
而后有的面试官会继续深挖,看看你对本身项目中用到的技术,掌握的是否足够深刻。
因此除告终合项目把某个技术说清楚外,最好对这个技术有必定的深度。
举个例子,若是项目里用到了微服务相关的东西,那么若是你去看过Spring cloud相关的源码,好比Eureka、Ribbon、Feign这些组件源码,那么面试会很加分。
楼主在面试最后拿到offer的那个互联网公司时,就提到了本身项目中用到了微服务,而且由此去看了注册中心Eureka的源码。
而后从源码层面,详细画图阐述了其内部的心跳机制、多级缓存机制等等,甚至给面试官指出了Eureka中存在的一些bug,那一轮面试楼主印象很深入,和面试官聊的很是开心。
(3)三面:综合能力
三面的话,若是是中小公司,多是CTO面试。若是是大公司,多是你将来进入的团队的leader的leader,好比说部门总监之类的级别。
总的来讲,三面面的比较杂,每一个公司都不太同样。有的会接着问你基础,有的会再问你项目,有的直接给你聊情怀,五花八门的都有。
楼主以为,最重要的仍是一二面,前两面的反馈很重要。三面的话,只要正常回答,都没啥问题。
二、跳槽前的技术积累
接下来,再说下跳槽以前的准备。
楼主3年经验,去年下半年因为不知足于以前公司的技术氛围和薪资,加上本人又比较能折腾,但愿进那种比较知名的互联网公司挑战一下,所以萌生了跳槽的想法。
因此从去年下半年开始,利用业余时间学习了大量技术。从系统的开始准备,到面试第一家公司,大概花了半年的时间。
准备期间学习的技术包括:
(1)Redis缓存相关技术,以及高并发下的缓存架构设计
这块是互联网公司必用必问的,因此楼主对Redis技术进行了深刻系统的学习,同时了解了一些常见的架构设计技巧。
(2)Elasticsearch
如今互联网公司通常都有全文检索的需求,好比网站或者APP里的搜索框,因此ES技术用的愈来愈普遍。
所以对ES技术也是进行了从头至尾的学习,对其底层算法、原理以及优化技巧都作了深刻的了解,面试的时候,所有可以画图讲解。
(3)微服务相关技术
微服务就不用说了,互联网公司必备,如今系统都是用微服务架构来设计的。所以楼主对Dubbo、Spring Cloud技术栈都进行了全面的学习,并且对这些技术都阅读过底层源码。
(4)JDK源码、设计模式
文章最开始就说了JDK源码的重要性,所以楼主将重要的JDK底层源码,好比集合包、并发包的源码都读了一遍。此外,对各类设计模式也作了必定的研究。
(5)分布式事务、分布式锁
分布式系统这块,也是面试互联网公司必问的技术
(6)常见面试技术问题的梳理和总结
包括数据库、网络、IO、分库分表、MQ,等等
以上技术,楼主都进行了系统的学习和研究,并且不少技术都尝试在本身负责的项目中进行了运用和实践。
大概花费了有半年的时间,几乎都是夜以继日的学习,没有什么娱乐的时间。由于去年就但愿在2019年的春节后能够换一家公司,改变本身的命运!
在准备了大概半年后,下面就是楼主正式开始面试的经历。
一、面试week1:无情打击,当头一棒
首先就是写简历投简历,楼主在刚过完年后就裸辞了,而后开始投简历。
虽然大体知道主要面试的是哪些知识点,可是写完简历以后,本身都不敢投,由于毕竟没太多的面试经验。
因此第一周仅仅面试了2家,当时有面试也会日后推,主要是不想浪费机会。
(1)新东方在线
新东方旗下的在线教育公司,据说立刻要上市了。
首先是一个多线程编程的面试题,比较简单。而后就是开聊项目,在项目中穿插问知识点,此次面试由于有很多知识点本身有点忘了,因此不少东西没回答太好。
好比说sql执行计划中你最关心的字段,这样的问题,都没有回答好。最后的结果是一面就挂了。
第一周面试就被打击了,有点沮丧。有不少知识点我本身也知道,可是就是没有掌握,明显是去被吊打的节奏,浪费了新东方这个机会。
而后周末两天,哪也没去,在家里不分昼夜的全力复习,补足短板。
二、面试week2:查漏补缺,稍有转机
(1)用友
首先是去了以后开始作笔试题,主要是分析哪些SQL使用到了索引,为何索引失效,大概有10多条SQL分析。
面试过程当中,我主要是往本身擅长的点上面去聊,包括jdk底层的源码,springcloud等方向,全程我在讲。
而后二面的面试官说我不太合适,他们想找能写先后端的人,不须要互联网方向的那种。
因此,楼主在这里给各位筒子提个醒,投简历必定慎重,若是你是打定想去互联网公司的话,非互联网公司就不要浪费时间了。
在面试过程当中我一共碰到三家这样的,套路都是相似的,先是一套面试题,而后就一面,面完以后就是回去等消息。。。
(2)某中小型的互联网金融公司
一面
一面直接开聊,先聊基础,聊到synchronized锁的实现原理,cas实现原理,juc包下并发类的场景使用场景。
而后开始聊框架源码,我讲了讲springcloud中Eureka的源码,Hystrix框架的源码,而后聊了一下集合相关的类,例如HashMap、ConCurrentHashMap等等。
聊到一半以后,面试官对个人态度友好了不少,还探讨了一些读源码的方法。
而后拿着一张笔试题,两个算法题,二选一,随便作一个。
楼主属于那种算法底子通常的,平时刷题也很少,看到算法题就有点慌,最后面试官说写个二分查找吧。
就这样,我想因为前面给面试官的印象稍微好一点,因此这块就放我过关了。
二面
二面的面试官开始抽查了一些知识,包括mysql索引优化,索引结构,redis缓存雪崩、穿透等相关的问题,还问了一些并发相关的问题。
而后给了一个系统设计的场景:在分布式场景下,100万的优惠码,怎样保证每一个用户只能领取一个?领取了以后,再次点击仍是以前领取的那个。
个人思路是使用存放在redis中再结合分布式锁,而后给演示了执行过程,勉强说的过去,最后说有没有更好的实现方式,想了一会,而后认怂。
接着问了JVM类加载流程、GC回收算法、GC回收器。恰好这块没有看,只能回答对这块不熟。
最后面试结束,问了一下指望薪资,而后叫我等一下,准备去叫HR。过了一下子说,这周还要再面试一些人,而后会综合考虑,就送我出去了。
当时比较郁闷,不过如今想一想很正常,一个有几年经验的工程师居然对JVM这些常见的知识点都不熟悉,可怕。结果固然也是挂掉了。
没说的,楼主赶忙的背着书包回去,恶补JVM相关的知识点。
(3)一家给银行作系统的小公司
一面是一个号称架构师的人面的,一上来我就开聊springcloud源码,恰好他们也在用这套框架,包括Hystrix。
恰好我对这块很熟悉,他们只是使用默认的配置,对里面的原理就是一个黑盒。我一通讲还带画图,直接将他征服。而后就是问我指望薪资,带我见老板,入职日期我拖了一周,算是增长了一点信心,拿到一个保底offer了。
三、面试week3:一气呵成,拿下offer
(1)一家A轮融资的在线教育公司
一面
首先一面就是给一台电脑你,有三道题目,任选一道让你作,过了开始下一面。
题目都比较常规,一面顺利经过。
二面
二面首先基本问了一些项目,而后你提到什么就问什么。
好比楼主提到线程池,他就问线程池的参数有哪些,分别的做用是什么?而后问了一些基础的知识集合,并发之类。
而后二面还问了springcloud框架源码,Eureka增量拉取注册表机制。
而后就是一些基础:cas、cas有哪些问题以及怎么解决,volatile、synchronized、线程池、redis、mysql索引,索引优化,索引失效,索引底层结构等。
令我印象深入的是问了我数据库中整型除了int,还有哪些整型(tinyInt、bigint)。面试官说好奇好多人都回答不出来,我固然也是没回答出来。
因为当晚面完二面都比较晚了,而后约了次日下午5点cto面试
三面
三面是cto面,问的很基础,好比Https怎么防止被抓包?讲讲什么是BIO、NIO、AIO?(当场说没研究这块)讲讲JVM类加载流程(第二次跪在上面了)。
而后问了些生产环境的问题,问了生产环境mysql怎么部署,我说单机部署,对分库分表没有深刻研究,估计这几个问题的抽查,就被cto打死了。最后问了下指望薪资,而后回去等消息。
心态:原本对这家在校教育觉得稳了,结果一直没有电话联系我,此时已通过去了2两周,除了一个小公司offer之外,没有拿到其余的offer。
而后稍微有点知名度的都在这周的安排表上,我在想若是这周没搞定一个的话,北京的独角兽都没剩下多少了,瞬间感受压力大了。
再加上这家复试完以后,没有当即给答复,通常都是凉了,此时有点心态崩了。
后续:一天以后,HR没有联系我,因为据说他家技术氛围不错,我就主动打电话过去了,最后的结果是给offer,薪资在大概20多万的样子,常规性涨薪幅度。确实也是本身存在不少问题,好多知识都没有答出来。
(2)国内最大的互联网招聘网站
一面
一面从基础到项目统统问了下,项目层面没有深究,对并发这块的基础知识问了,最后是问了分布式锁的实现原理。
楼主讲了基于redis和基于zookeeper的分布式锁实现原理以及框架的源码,另外深刻讲了springcloud源码。
而后就是问了dubbo了解多少,让你设计一个dubbo,你会怎样设计,而后设计一个限流熔断框架,你会怎么设计;
再就是针对redis问了下使用场景,怎么使用,缓存穿透、缓存击穿等问题。
一面整体来讲,还比较顺利,一面过了以后开始二面。
二面
二面问了下项目,没有太过于深究项目,问了项目开发过程当中遇到哪些问题,怎么解决的?
而后问了下哪些场景使用到多线程,是怎么使用的,知道线程池的原理吗,生产环境数据库怎么部署?redis怎么部署?
主从数据同步的原理了解吗?主从架构的延时和数据丢失怎么解决?有遇到系统OOM的问题吗,怎么解决?作过哪些JVM优化?为何要这样配置?
面完后问了指望薪资,说这周会通知,楼主知道又进入备胎模式了,通过上次的经历,知道戏份不大了。
结果意想不到的是,最后竟然人家发offer了,并且年薪达到了30多万。
(3)一家中小型的互联网金融公司
一面
一面技术官并无问太多的问题,主要是我讲了springcloud的源码,而后他们准备转向springcloud,最后问了下redis缓存穿透、缓存雪崩,以后就是一些大而形式的问题。
二面
问了数据库锁有哪些,什么状况下形成数据库的死锁,怎么避免数据库死锁。而后就是哪些场景下使用了设计模式。
接着问了下指望薪资,给砍了一点下来,我以为二面面试官可能以为我对mysql这块的锁不是很熟悉,可是也给offer了,年薪不到30万的样子。
(4)一家D轮融资的在线教育公司
一面
一面是结构化面试,从各个方面开始聊,聊集合、并发、网络、IO,Linux命令。
而后开始聊springcloud框架源码,最后聊的挺欢快的,固然有些问题没回答出来,可是气氛聊的能够,加上面试官的提示,最后也给出了答案,特别是linux命令这块。
二面
二面主要是深刻项目细节,最后听我讲完项目以后。问我什么是CAP理论。其实当时我已经掉入坑中,可是还很傻逼的回答了CAP理论和BASE理论。
而后问我你的项目符合CAP理论吗?项目中这么保证一致性?rabbitmq这块的交换器的三种模式是什么?最后跪了。
(5)好将来(美国上市的教育公司)
首先就是从简历第一条开始日后面聊,集合、并发、网络、IO原理等,最后问了springcloud的源码,将近聊了一个小时,而后说二面会二天内通知,我就知道凉了,最后果真没让经过。
(6)某垂直领域电商公司
一面
问基础,ConcurrentHashMap原理,CAS,synchronized底层原理,底层采用不一样的实现方式(自旋锁等)的不一样。
JVM原理,young区为何要有2块survival区,只有一块行不行。
而后问了索引结构,什么是B+树,索引优化,什么是聚簇索引,这么创建聚簇索引,所有是基础的问题,没有涉及任何框架源码和项目状况。
二面
内推放水,简单问了BeanFactory和SpringApplicationContext是什么关系,有什么不一样。而后几个简单问题。而后就给offer了。
(7)必要商城
一面
一面是基础问题,相似于上面的基础问题通常,大同小异,没有很大差异。
二面
二面开始问项目,讲完项目以后,因为二面的面试官是老乡,并且面完以后我就知道没戏了,就请教了老乡,能给一些建议吗?
老乡说他二面就不会问基础的知识点了,由于已通过了一面,他做为二面主要考察的是这个项目你是否真的作过。
第二,你作的项目是否符合他团队目前的需求。
第三,项目中的技术难点是否存在,以及解决方案是否合理,还有一些分布式的场景怎样解决。
第四:考虑我能不能过他领导的下一关,最后也是收获蛮多,后来也没给offer。
(8)赶集网
一面下午5点赶过去,跑了一天已经很疲倦了,而后开聊,先讲项目,项目中穿插着问一些知识点。
好比面试官问了mysql索引,以及事务的隔离级别,可重复读是怎么实现的,mvcc机制了解吗,等等。
固然更多的是场景设计,设计一个分库分表的场景,根据什么来设计。
疲惫的我想直接回去了,后来面到7点以后,说老大在开会,下次通知来复试,而后就回去了,最后也没给offer。
四、offer盘点及选择
将近一个月的面试,主要收获了下面这些offer:
综合下来,楼主最终选择了知名度最高的那家独角兽公司,并且它的年薪也给到了30多万,薪资是给的最高的。
一、投简历策略
先在小公司跑几家,面几家以后,就会有感受了,知道大体的套路是啥了。
第二,若是打定主意去互联网的话,非互联网公司不要投。跑来跑去的时间,不如把知识复习扎实点。
二、简历中的知识准备
我感受技能点不用写太多,我就写了20条,其实10条核心技能点就差很少了。
应该面试一二线厂的话,他们按照他们的风格去考察,你写了的也会问,没写也会问,因此10条核心知识点就够了。
按照惯常的三面策略,每一面的侧重点都不一样,你能够本身给本身考察,而后不会的赶忙找资料复习。
好比一面一般都是基础知识,二面一般围绕项目来考察,三面一般就是生产环境,解决问题的能力,系统场景设计等等。
三、论面试心态的重要性,千万别崩
由于每一个面试官的喜爱不同,颇有可能跑了好几家以后,依然没有收到offer,不免会有一些气馁。
楼主的建议是此时你应该放慢一下节奏,把这几天没回答出来的问题总结出来,不会的赶忙去查漏补缺,不管你以前准备的多好,你面试的过程当中都会暴露出不少问题。
而后感受差很少了,再次大规模的投递和面试,个人面试主要集中在第三周,第一周和第二周面试较少,主要是在复习和小公司练手。
最后就是知识点的总结,好比在JVM这块我就掉坑几回了,后来也是面试跑了一天回来,再累也坚持找资料把漏洞补上了。
这样回答问题,能让面试官两眼放光
这个算是楼主这一个月面试下来,总结的一点经验吧,楼主本身以为仍是蛮有用的,各位筒子若是不嫌弃,也能够本身试试啦。^_^
举个例子,好比面试官问你:大家分布式事务怎么作的?
那么,你能够按照这样的思路回答:
若是每一个技术,都按照这样的思路,每一个问题都这样去回答,回答两三个问题,面试官就不会怀疑你技术能力了。
扫描下方二维码,备注:“资料”,获取更多“秘制” 精品学习资料
一大波微服务、分布式、高并发、高可用的原创系列文章正在路上
欢迎扫描下方二维码,持续关注:
石杉的架构笔记(id:shishan100)
十余年BAT架构经验倾囊相授
推荐阅读:
二、【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?
三、【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
六、大规模集群下Hadoop NameNode如何承载每秒上千次的高并发访问
七、【性能优化的秘密】Hadoop如何将TB级大文件的上传性能优化上百倍
九、【坑爹呀!】最终一致性分布式事务如何保障实际生产中99.99%高可用?
十一、【眼前一亮!】看Hadoop底层算法如何优雅的将大规模集群性能提高10倍以上?
1六、亿级流量系统架构之如何设计全链路99.99%高可用架构
1八、大白话聊聊Java并发面试问题之volatile究竟是什么?
1九、大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?
20、大白话聊聊Java并发面试问题之谈谈你对AQS的理解?
2一、大白话聊聊Java并发面试问题之公平锁与非公平锁是啥?
2二、大白话聊聊Java并发面试问题之微服务注册中心的读写锁优化
2三、互联网公司的面试官是如何360°无死角考察候选人的?(上篇)
2四、互联网公司面试官是如何360°无死角考察候选人的?(下篇)
2五、Java进阶面试系列之一:哥们,大家的系统架构中为何要引入消息中间件?
2六、【Java进阶面试系列之二】:哥们,那你说说系统架构引入消息中间件有什么缺点?
2七、【行走的Offer收割机】记一位朋友斩获BAT技术专家Offer的面试经历
2八、【Java进阶面试系列之三】哥们,消息中间件在大家项目里是如何落地的?
2九、【Java进阶面试系列之四】扎心!线上服务宕机时,如何保证数据100%不丢失?
30、一次JVM FullGC的背后,竟隐藏着惊心动魄的线上生产事故!
3一、【高并发优化实践】10倍请求压力来袭,你的系统会被击垮吗?
3二、【Java进阶面试系列之五】消息中间件集群崩溃,如何保证百万生产数据不丢失?
3三、亿级流量系统架构之如何在上万并发场景下设计可扩展架构(上)?
3四、亿级流量系统架构之如何在上万并发场景下设计可扩展架构(中)?
3五、亿级流量系统架构之如何在上万并发场景下设计可扩展架构(下)?
3七、亿级流量系统架构之如何保证百亿流量下的数据一致性(上)
3八、亿级流量系统架构之如何保证百亿流量下的数据一致性(中)?
3九、亿级流量系统架构之如何保证百亿流量下的数据一致性(下)?
40、互联网面试必杀:如何保证消息中间件全链路数据100%不丢失(1)
4一、互联网面试必杀:如何保证消息中间件全链路数据100%不丢失(2)
4三、高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?
4五、从团队自研的百万并发中间件系统的内核设计看Java并发性能优化
4六、【非广告,纯干货】英语差的程序员如何才能无障碍阅读官方文档?
4七、若是20万用户同时访问一个热点缓存,如何优化你的缓存架构?
4八、【非广告,纯干货】中小公司的Java工程师应该如何逆袭冲进BAT?
50、【金三银四跳槽季】Java工程师如何在1个月内作好面试准备?
5一、【offer收割机必备】我简历上的Java项目都好low,怎么办?
5二、【offer去哪了】我一连面试了十个Java岗,通通石沉大海!
5三、高阶Java开发必备:分布式系统的惟一id生成算法你了解吗?
5四、支撑日活百万用户的高并发系统,应该如何设计其数据库架构?
5五、尴尬了!Spring Cloud微服务注册中心Eureka 2.x中止维护了咋办?
5六、【Java高阶必备】如何优化Spring Cloud微服务注册中心架构?