我的转行之路(电气转IT)------2018阿里校招面经
博主本专业电气,今年3月下定决心转向互联网行业,本来想依仗自己比较自信的学习能力自学成才的,不过学了一段时间感觉还是需要一个人来指点,不仅仅是指点一些技术性的问题,更是需要有人来指点一下方向性的问题。后来狠了狠心花了大价钱报了一个培训班------达内,当时也真的很担心被骗呀,因为知乎上各种黑,不过好在身边有鲜活的从达内出来后来取得成功的例子,以及咨询老师真诚的态度,才下定了决心进去学习。几个月,学完了java基础、javaweb、框架以及和分布式系统相关的一些技术,最后还顺利参加了达内举办的项目峰会,8个人6天完成了一个完整的项目,具体的项目已经部署到了我的阿里云上,访问www.haoj.club(PC端效果比较好)就可以访问到,这个项目是仿照今日头条做的,基本上今日头条有的功能:新闻浏览、新闻推荐、短信注册登录等等这些功能都有了,而且就用了6天。怎么说呢,这几个月的成长个人感觉是非常迅速了,因为几个月之前java一点不懂,而现在已经可以独立的完成数据库设计、前台编写、后台编写、环境搭建和项目部署这一整套的流程了,虽然完成的项目和企业真正的大型分布式项目还是没法比(毕竟一个人的能力是有限的),但是基本的开发能力已经具备了。培训班就是这个好处吧,可以带你迅速入行,少走很多弯路,一些基本的配置不用自己花一些不必要的时间去摸索,一些很实用的开发经验和开发窍门都可以迅速获得。
之后博主就凭借这个项目以及已有的一些技术去参加面试了,心里也很明确,全中国的IT公司只想去阿里,因为阿里真的是中国程序员的朝圣地,进去真的能学很多。最终经历了5轮面试,顺利拿到了offer。这里和大家分享一下我的面试经验。
首先是一次不记名面试,这里我也真的很感谢这场不记名面试了,如果没有这场不记名面试,我可能真的一面就结束了。因为我之前是没有任何找工作的面试经验的,再加上去阿里对我来说真的是一件几个月做梦都会梦到的事情,我把它看的太重了,所以在面试之前我经历人生中最紧张最紧张的一段时间,导致这次面试基本是全面GG。我先来说一下这次面试的过程吧。
面试我的是一位小姐姐(这是我之前没想到的,因为我觉得肯定是个男生),我先是自我介绍,然后我感觉我介绍的很着急,而且没有逻辑性(充分暴露了我的准备不足),介绍完就感觉很不好,此时已经感觉有点凉了。然后就问了第一个问题:springcloud的三个原则是什么?我不知道啊,springcloud我才学了一天啊,只会用啊,所以第一个问题就GG了,我更紧张了。之后小姐姐问我,你对哪块有比较深入的研究,我因为之前对redis看了不少,所以我就说redis还仔细研究过一点,然后就又问了一个问题,那个问题中关于redis的名词我都没听过,这个时候我已经完全慌了,两个问题都没答出来。后来又聊着聊着说到了多线程,第三个问题:一个线程销毁之后还能再start嘛?我:能吧?(我没有注意过啊)所以相当于问了三个问题都没答出来,小姐姐似乎感觉到我的水平了,所以就没再多问了,就讲起了我这几个月的生活,早起看算法,白天听课,晚上调电路还得复习白天的,每天已经用尽了我最大的力气了,我也说到了自己面的不好,(事实上第一是因为我很紧张,第二我确实有的地方掌握的不是很深入)。她很亲切的说没关系,几个月能成这样已经不错了。然后最后聊了聊别的就结束了。其实后来我才知道这个小姐姐是清华的,更加坚定了我去阿里的决心,我渴望去一个周围都是大神的地方磨炼自己!
结束之后我仔细分析今天的面试,总结了一些经验,而且深刻的明白是要稍微准备一下,尤其是并发编程这块的知识点,所以接下来的几天我疯狂弥补之前的一些知识漏洞,等待接下来的正式面试。
几天后是一面,一面整体的节奏比较缓,主要是以技术问题为主,没有加入太多的聊天内容,面的也比较久,一共面了一个多小时,下面是一面的题目:
1、线程实现的方式
2、线程池的理解
3、hashmap的底层,你怎么了解的
4、jvm底层
5、垃圾回收机制
6、怎么理解mvc
7、排序算法选一种(我选的快排)
8、单点登录引出来的一个问题,如果通过A域名访问了A系统,通过B域名访问了B系统,B系统如何知道此客户端也访问了A系统
9、类加载机制
10、说一说ThreadLocal的理解
11、爬虫用什么做的,怎么做的
12、如果爬取到的数据格式不一致怎么办(针对我的那个新闻网站)
13、你对你这个项目的数据有没有一些其他想法?如果让你重新做,你会有哪些改善
14、你这个项目的架构说一说
整体来说,一面的基础性问题比较多,所以博主基本都答出来了,准备过还是有些用处的。所以一面完了感觉还不错,接着第二天下午就二面了。
二面是我最慌的面试,因为二面是最关键的,是最大的主管面试,所以非常关键,整体来说,二面的节奏非常快,和一面完全不同,面试官很希望我言简意赅的说完答案,所以面的不算很好,当时完了又以为GG了,好在最后还是幸运的过了,面试问题如下:
1、静态方法和实例方法的同步有什么不同?
2、future类的作用
3、红黑树比平衡二叉树的优势
4、知道最大堆,最小堆嘛?描述一下堆排序
5、redis是单线程还是多线程的,说说redis的优势
6、了解AOP嘛,基于什么原理的
7、3点15分的夹角是多少度
二面面试官问的很急,我答的也快,所以有两个问题答的不好,但是面试官让我觉得有一种肃然起敬的感觉,因为他说话比较快,但是都能说到点子上,最关键的说的话非常让人容易接受。二面过了,当天晚上我就接到了三面的电话(阿里的效率真的让我瞠目结舌)
三面是交叉面试了,基本都围绕我的项目展开,我经过前面几次的面试之后,这个时候已经拥有了很高的面试经验值了,所以三面的时候我一点不慌了,回答问题非常稳重(一面刚开始的时候腿在抖。。。),三面的问题如下:
1、介绍以下你项目的特色
2、说说你这个项目的分工,以及在团队协作之间遇到的问题
3、用java爬虫有什么不好
4、谈谈你对mycat的理解以及如何进行数据库的双机热备
5、谈谈redis如何构建集群,数据在底层是如何进行同步的
6、网络连接和断开的过程?为什么是4次挥手不是3次?
7、数据库事务的四个特性
8、volatile关键字的作用
9、估算一下7的128次多少位(这个数学问题,我当时没想出思路,只估算了个100,虽然蒙对了,但是思路没给出,事实上这个题的思路有点难的)
三面还算比较顺利,基本都是我在说,所以也很快过了,第二天早上就收到了HR终面,两天4面,鬼知道我那两天经历了什么。。。
HR就基本问一些基本情况了,没有技术问题,只要人不是不正常感觉都没啥问题。
总结一下面试经验吧,虽然我只经历了阿里的面试,但是这几场面试足以让我总结出面试的门道了:
1、自我介绍非常重要,基本上是主导你的整个面试的过程的东西了,一定要好好准备自我介绍,把面试官往你熟悉的地方引
2、见机行事,如果面试官不急,你就不要急,回到的时候多说一点,尽量把只是穿起来,往你熟悉的地方引,比如博主的1面,问我HashMap的底层,我就不仅说了它底层是一个数组加链式栈,还说了链式栈的目的是解决哈希冲突,还说了解决哈希冲突有两种方法:一种拉链法,一种线性探测法,hashmap采用了前者,(我现在还知道了ThreadLocalMap采用后者,这个知道的人不多,如果你顺着引出来,加分很多)。如果面试官比较急,证明他有很多人面,他希望在最短的时间里让你说出关键的东西,比如博主的二面,我们就不需要扩展说,言简意赅即可
3、一定要好好准备,对一些常用的内容进行深入的探究,比如现在面试必问的多线程高并发,JVM底层,数据结构和算法,一定要 挑一些进行深入的探究
4、最好有一个完整的项目或者有一个担任重要角色的项目,对这个项目非常熟悉,并且要想好项目开发过程中遇到的问题以及如何解决的
5、不装,会就是会,不会就是不会,不要猜,我二面就犯了错,面试官问我redis单线程还是多线程,我随口一说:多线程吧?面试官:猜的吧?我:是。。。。面试官:不会不要猜!所以我当时慌的一批!
大概就是这么多吧,这次转行对我个人而言,除了提升了知识之外,更多的是磨炼出了一种敢于从原有的圈子跳出来的勇气、决心和毅力以及迅速适应新的环境的能力,今后的生活不确定性仍然很多,但是我现在反而很期待这种不确定性带给我的一种紧张和兴奋的感觉,以及成功之后的那种走路脚下生风、激动的睡不觉的兴奋。