文章来源:http://link.zhihu.com/?target=https%3A//wangjingxin.top/2018/06/28/recruit/
背景介绍:
作者软工专业大三学生,山东大学ING工作室后台组组长,工作党,参加了18年实习生春招,3月12第一面开始,4.2号最后一面结束,一共面了三家公司。
准备阶段:
真正开始准备春招是放了寒假之后,寒假前,我手上还有一个外包,因为甲方时不时的要求导数据,所以放假后甲方不放人,让我在学校先待一段时间,当然是有偿的,但是过了不到一周,我爸给我打来电话,说我爷爷生病住院了,我弟弟也得了感冒要住院,然后我就连夜买火车票回了家,直接奔去了医院。
医院的条件很艰苦,没有网,我跟我弟弟挤一张小病床,我爸在楼下陪护我爷爷,晚上根本睡不好,但是创造条件也要复习,自己开热点,把剑指offer上的题目刷完了,还刷了几套往年编程题。一直到小年,家人们都出院了,在医院的这段时间,所做的主要的事情就是刷题,和零碎的知识点复习,大概花了十天。
回家之后条件就好多了,大概可以每天保持14个小时的学习时间,复习资料就是网上的面经,牛客网上刷题(这一段时间刷题并不多),还有工作室学长给提供的资料。
这段时间我还没有想投简历,我想的是等开学后统一投简历,结果在一月十八号的时候,阿里C部门主管给我发了个邮件,大意就是无意间逛到了我的github,问我毕业后是否考虑加入阿里,我当时喜出望外,github上有点料还是挺有用的(github上有个大一写的Java课设,是一个从底层用swing实现的超级玛丽,当时已经有110多个star了)
但是后来并没有走C部门,而是走的我校友所在的T部门的内推。
简历投递:
开学后,大概是3.5号,又准备了一周之后,3.12开始投递简历,都是内推。前后分别投了:阿里,百度,美团,腾讯,京东,网易,头条,华为,链家。
笔试:
阿里有一个编程测验,但是不算是笔试不计成绩,是一个算法题,具体的题目忘得差不多了,好像是一个商品组合的最优解问题,我感觉难度还是不小的,想了贪心,dp,都没有思路,由于限定时间,权衡到最后放弃了思考,写了个暴力dfs就提交了。
面试干货:
3.12首先面的是美团,第一次面试,由于紧张和其他原因,面试表现不是很好。
美团一面
面试官:自我介绍一下
我:(自我介绍都是一样的套路,所有的)我是XXX,来自XXX大学,大学期间加入了ING工作室学习Java后台,后来担任了后台组组长,做了不少项目,很希望加入XXX公司。
面试官:介绍项目
我:(一个人的命运,不仅靠个人的努力,还得看历史的进程,我在所有的面试中,着重介绍的项目就是我寒假前的那个外包,因为这个外包对于我来讲,的确是我做过的含金量最高的一个项目了,而且这个外包在我们工作室历年做的外包项目中都是少见的,可遇不可求的高含金量项目,我自认为这个项目给了我很大的优势,这个项目是一个分类管理系统,对近200万的结构化数据进行分类筛查,分类依据是多元化的,主要是数据的一个字段和类别关键字的匹配程度,还需要做匹配度的量化排名,而且甲方要求严格,随机抽查样本,正确率必须达到95%以上,还要支持复杂条件的快速查询,优化分类过程,所以很考验算法能力,和数据库优化能力)XXX项目是XXX委托的一个外包,实现了XXX。
面试官:那我们聊一聊elasticsearch吧,说说倒排索引是怎么回事。
我:(上面介绍项目只说了项目的内容,以及实现方法,我自认为面试官会直接问项目亮点,这时候我再把准备好的两个难点,一个是量化匹配度算法,一个是数据库设计和优化一说,就完美了,结果面试官不按套路出牌,没有问难点和亮点,直接让聊一聊elasticsearch,还问了个我不会的东西)这个没有了解过。(出师不利,第一个题就给难住了)
面试官:那你说一说elasticsearch的核心算法吧。
我:(终于逮住一个会的了)elasticsearch的核心算法是基于统计的检索算法,TF/IDF算法。TF是本文档中的词频,IDF是所有文档中词频的倒数,具体是XXX
面试官:elasticsearch的分词知道吧,你这个项目用的什么分词器?
我:用的ik分词器。
面试官:ik分词器有两个粒度知道吗,你用的哪一个粒度,说说理由
我:有粗细两种粒度,由于对于匹配精度要求较高,所以选择了粗粒度
面试官:还有其他选择ik分词器的原因吗
我:我了解到ik分词器可以对词典进行热更新,我们这个项目中,每上传一次关键词,就要更新一次词库,所以需要这个热更新功能,而且这个中文分词器也是比较出名的一个分词器。
面试官:说一说hashmap的原理
我:hashmap是基于hash的散列,由数组和一个双向链表组成,数组长度保证为2的整次幂,方便计算mod值,hash值冲突的挂到链表头部,1.8中做了个红黑树优化,优化了XXX情况,在xxx的时候用xxx的方法扩容。
面试官:知道原子类吗,说说原理
我:使用cas实现原子操作,具体是XXX
面试官:那这个类中表示变量字面量的那个字段,应该用什么来修饰?
我:用volatile,volatile是用来XXX,原理是XXX
面试官:说一说乐观锁和悲观锁吧
我:乐观锁是XXX适用于XXX情况,悲观锁是XXX,适用于XXX情况
面试官:说一说lru是怎么实现的吧。
我:(懵逼了,只知道这是采用抛弃最近最少使用的缓存策略的一种缓存失效算法,怎么实现的真没了解过,然后自己临时想了个O(logn)的算法,用二叉堆实现,其实这个实现不是lru,是错误的,因为我理解错了lru。然后面试官可能没听出来我理解错了,只听了我说这个复杂度是log级,然后就说这个有一个常数级的实现方法,我就不知道了)
面试官:说说mysql中的锁吧
我:行锁,表锁,gap锁,共享锁,排它锁,意向锁,分别是用来做XXX
面试官:你说说死锁,以及怎么避免死锁
我:死锁是XXX,产生死锁有四个必要条件XXXX,可以用保证加锁顺序一致避免死锁等
面试官:你说说聚簇索引加锁和二级索引加锁有什么区别
我:(懵逼了,不知道啊,实话实说,不知道有什么区别)
面试官:说一下自己还有哪些项目值得说的
我:大一做的Java课设,可diy地图的超级玛丽,完全从底层,基于swing实现,从扣图到编码完全自己完成,6k多行代码,github上100多star,课设成绩年级第一,
至此,美团一面结束,面了大概28分钟(这么短),第一次面试感觉发挥的并不是很好,很多东西没有发挥出来,也有不少的问题没有答上来,难度感觉中等。
第二天3.13百度打来电话面试。这个表现还行。
百度一面
面试官:自我介绍
我:(还是那个套路)
面试官:说说ArrayList和LinkedList的区别
我:(???没有问项目,这个比美团还不走寻常路)ArrayList基于数组,LinkedList基于双向链表,读写的优势,以及LinkedList对于读取下标的一个优化
面试官:说说hashtable吧
我:hashtable使用独占锁线程安全,效率差key不能为null,hashmap原理是XXX(还是那一套)
面试官:那怎么让map既效率高,又线程安全
我:ConcurrentHashMap,实现原理XXX,1.7和1.8的实现有XXX不同
面试官:我看你写了一个简易版的tomcat,是基于nio的吗?(是)那说说Java的bio和nio
我:bioXXX,nioXXX,nio优势在于XXX,bio优势在于XXX,工作原理为XXX,nio使用epoll系统调用,epoll和poll,select有XXX不同,epoll基于红黑树和链表,具体工作原理是XXX
面试官:那你这个tomcat怎么解决的粘包拆包问题?
我:利用http协议报文格式。在连接层就处理成一个一个独立的http报文,然后交给解析器处理,具体是XXX
面试官:用过什么设计模式吗?
我:策略模式,模板方法模式,单例模式等等
面试官:说一说单例模式怎么实现
我:饥汉式,懒汉式的双重锁校验,静态内部类,枚举
面试官:双重锁校验需要用volatile修饰,你说说这个关键字是干啥的
我:这个是XXX
面试官:说说对spring的理解
我:spring是一个bean容器,两大核心是ioc和aop,原理是XXX,好处是XXX
面试官:说一说Java中的锁吧
我:自旋锁,synchronized,读写锁,可重入锁(公平非公平)基于aqs,aqs原理是XXX,实现原理分别是XXX,底层都是操作系统原语,
面试官:哪些常用的原子变量,原理?
我:(还是cas那一套)
面试官:常用的阻塞队列,原理
我:阻塞队列有XXX,原理是当队列满,再插入则阻塞线程,某线程取出元素以后唤醒其他阻塞的线程重新竞争锁,队列空,取的线程阻塞,插入之后将取线程唤醒竞争锁XXX
面试官:说说线程池
我:线程池作用是XXX,有几个参数XXX,参数的意义是XXX,工作原理是XXX
面试官:ThreadLocal?
我:用来保存线程私有对象,基于thread对象维护的一个采用线性开型寻址法的一个简单map,key是threadLocal本身,可能会出现内存泄露问题,原因是XXX,这个问题使用弱引用解决,具体是XXX
面试官:说说数据库的设计和优化
我:权衡具体业务的读写情况,适当反范式,索引优化,看执行计划,慢查询等,具体XXX(这里我强行结合项目说了一下,先是小心的问了问面试官,用不用结合项目说一下,面试官答应了,然后就开始讲项目)
面试官:redis和elasticsearch都用过?用来干啥?
我:(对于es,正中下怀,这个项目的另一个难点就是利用es来做的,当即把怎么利用es来做匹配,怎么进行优化说了一遍,redis就是说了说用来做缓存之类的)
面试官:我看你本科阶段做了很多项目啊,你怎么就想来百度呢?
我:(???这是要转hr面吗?然后就企业文化,自我提升等扯了一波)
至此,百度一面结束,大概是47分钟,总体表现还可以,面试难度属于简单模式,没想到面试官不按套路出牌,不问项目,还好我机智,强行把话题引到了项目上
第二天3.14阿里打来电话约了面试,这次面试是我这今年春招所有面试中最难的一次,面哭了都快
阿里一面:
面试官:自我介绍
我:(套路)
面试官:项目介绍
我:(项目,两个难点)
面试官:你这个项目,我把数据量扩大100倍,并且放到互联网上,并发量变得更高了,怎么解决?
我:(100倍?本来就是200w左右,扩大100倍就是两亿数据,而且还要变成一个互联网应用,项目本来并发量不高,甲方只要求2000左右,一上来就问这么难的问题,这下可咋办)对于大数据量,应该进行数据拆分,这个项目如果拆分的话,最好的办法是通过不同的查询条件进行拆分(项目中查询是根据不同的查询条件去不同的表里查询的,所以这种的有天然的划分方式)
(还没等我说完)
面试官:你这样是假设所有的查询是平均分不到不同的领域的,万一有热点数据怎么办,比如有80%的查询条件命中了一台机器呢。
我:分布不均匀可以做一个redis集群,用来分流。我们这个项目是改动比较少,查询较多的应用。所以用redis性价比是很高的。
面试官:你这个项目是不会经常改动的,但是最终还是会改动的,如果改动的话怎么保证数据的一致性?
我:(还是从这个项目本身的需求出发)这个项目数据改动的时候是某个时间段集中大规模改动的,所以改动是有特定的时间段维护的,在维护的时候,我们不允许访问。
面试官:(完全改了需求)假设你这个就是特别频繁改动呢?
我:(至此,我这个简单的项目被面试官扩展成了一个高并发,大数据量,改动频繁的互联网项目,现如今的问题主要集中在如何保证数据一致性)频繁改动如果保证一致性的话,可以使用nwr模型。
面试官:用这个方法,可扩展性不高,而且还需要在代码中感知网络拓扑,因为我们这个是廉价存储,所以机器可能会宕机,机器数量会经常变化,而且我们现在集群是异地的,而且不想添加感知网络拓扑的代码,有没有别的方法。
我:这样的话,根据cap理论,是不可能保证强一致性,除非牺牲可用性。否则只能保证最终一致性。
面试官;但是我们是需要保证强一致性的,因为付款之类的如果有延迟的话,用户财务不就有损失了,那怎么办?
我:(彻底懵逼)牺牲可用性?没有其他的好方法了
面试官安慰:没事,你现在的这个方案,对于你现在的这个应用场景是ok的,好,那再聊聊别的。
(刚上来就被一通连环问问懵逼了,不断的改变业务场景,最后问的实在说不出来话了,果然阿里难度不一般)
面试官:你技能栈中的这些知识是老师教的还是自学的?平时怎么学习?
我:(介绍了自己的学习历程,从大一开始,从有学长带,到学长去工作了开始自学之类的,平时接一些外包做项目提升自己,看书看博客等等)
面试官:主要是看过哪些书?
我:(说了一些著名的书,thinking in Java,算导,jvm白书等等)
面试官:有没有参与一些开源的项目?
我:(很尴尬)没有
面试官:Java的八种基本数据类型
我:(太尴尬了,只说出来了七种,short死活死活想不起来,一生的污点)
面试官:没事没事,Java的多线程用的多吗,Java实现多线程的基本方式有几种?
我:直接new Thread,线程池
面试官:还有一种呢?
我:(???还有啥,不知道,后来查资料,面试官可能是想问Callable)
(至此,信心大概被打击了一半了)
面试官;说说线程池的原理
我:(还是那一套,参数,执行过程)
面试官:多线程是不是开的越多越好?有什么注意的地方
我:不是越多越好,因为线程的上下文切换需要代价
面试官:怎么减少上下文的切换?
我:开的线程数不要太多。具体策略要分是io密集型应用还是cpu密集型的应用
面试官:怎么知道当前Java程序的上下文切换开销,写一个shell脚本
我:用jstack,jstack是XXX
面试官:那这个工具有没有告诉你上下文切换的开销?
我:(这个jstack还真没用过)实话实说,这些命令行工具了解的不是很多,仅限于理论。
面试官:可以理解,说说Java的锁,怎么实现乐观锁
我:乐观锁基于cas,具体实现XXX
面试官:jvm的堆内存模型
我:1.7结构是XXX,1.8结构是XXX,分为XXX,XXX,XXX,每个区域的作用是XXX,可达性分析策略,几种垃圾回收算法XXX,新生代老生代的算法,分配担保等等
(没想到这个问题成为另一个噩梦的开始)
面试官:互联网应用中怎么对老年代进行优化
我:互联网应用并发量比较高,所以需要gc停顿的时间短,如果要优化,可以用标记清除算法,处理速度比较快,停顿比较少,但是会产生碎片,缩小老年代内存空间,调整进入老年代的年龄也可以减少gc停顿
面试官:缩小老年代空间有一定的道理,但是怎么解决碎片问题,有没有一些参数可以减轻这个问题
我:(这个还真不清楚怎么解决)实话实说,不是很了解。(后来查了资料,面试官的意思应该是CMSFullGCsBeforeCompaction参数,这个参数代表了在经过多少次标记清除之后,进行一次标记整理,对于垃圾回收器的工作方式了解的还是不够,也是当时回答问题的时候思维被限制住了,没想到多种算法协同)
面试官:还有其他的方案可以减少gc吗
我:由于gc停顿是不可避免的,从用户角度出发,对gc停顿进行均摊,分散到若干次gc中,每次gc时间很小,用户也应该感受不到。
面试官:平时算法怎么样?
我:看过一些算法,高中参加过算法竞赛
面试官:约瑟夫问题怎么解?
我:(这个比较常规的解法是用链表或者数组模拟一下就行,但是这样肯定特别low,我记得有一个复杂度为线性的递推算法,但是想不起来了,最后这个题就只说了一个朴素算法)
面试官:呵呵没事
(此时信心被打击没了)
面试官:web相关框架的源码可看过?
我:spring mvc的源码看过一些,其他的没有。
面试官:说说spring ioc
我:(还是那一套)
面试官:今天我们聊了很长时间,就先到这里吧,你有啥要问我的
至此,阿里一面结束,一共面了77分钟,我一度感觉自己应该是凉了,现在只有这个超长的面试时间能安慰我:一般凉了的不会跟你聊这么久的,所以内心还是有报一丝希望,这次面试难度等级自认为是很高的,而且出现了很多失误。
过了几天,到3.16,百度打来电话约二面,这次面试难度和百度一面差不多,算是简单难度
百度二面:
面试官:自我介绍,项目亮点
我:(还是一样的配方)
面试官:两个文件,存储着int(32)类型的数值,都是10G,给你8G内存,怎么求两个文件的交集?
我:典型的bitmap问题,512M空间解决
面试官:看你用过elasticsearch,说说tf/idf算法
我:(还是套路)
面试官:一个表有id,point两个字段,给定一个用户id,如何找出来他的排名
我:(一个子查询解决)
面试官:说说gc算法,以及jvm内存模型
我:(熟悉的配方)
面试官:aop原理
我:(还是套路)
至此,百度二面结束,大概是48分钟,主要是探讨了做的项目,48分钟中,跟面试官聊项目就用了半小时,因为可聊的东西还是挺多的。面试难度简单。
过了四天3.20,百度打来电话,约了三面,三面是半hr面半技术面,面试时间大概是40分钟,主要问了家庭背景,学习情况,学习方法,为什么想来百度等非技术性的知识,技术性的还是聊了聊项目,然后就给了口头offer。至此,百度offer已get。
过了一天3.21,阿里打来电话约了二面,二面难度算中等,没有一面那么刁钻。
阿里二面:
面试官:自我介绍
我:(还是套路)
面试官:学过哪些课程
我:专业课有XXX等
面试官:介绍一下项目
我:(还是套路,但是说完之后就打断了,没让我说项目难点,可能跟一面面试官有交流)
面试官:排序算法会那些,说说快排
我:排序算法有XX,XX,XX等,快排按照基准值的取法分为取中快排,取首快排,随机快排。基本原理是XXX
面试官:avl树了解吗。
我:avl树是一种二叉平衡树,要求所有节点的左右子树的高度差不超过1,二叉树的操作有建树,插入节点调整,删除节点调整,过程分别是XXX
面试官:说说最短路算法
我:最短路算法可以分为单源最短路和多源最短路,多源最短路可以用基于dp的Floyd算法,Floyd算法的原理是XX,局限性是XX,也可以用n次单源最短路来实现多源最短路,单源最短路最著名的有基于贪心的迪杰斯特拉,原理是XXX,正确性分析XX,局限性分析XX,复杂度分析,可以用优先队列进行优化,原理是XXX,优化后的复杂度分析XXX,此外还有暴力算法bellman-ford,以及队列优化的bellman-ford spfa。
面试官:好了,就这些就好了。说一说你对锁的理解
我:还是那一套,sync,cas,可重入锁(公平锁非公平锁)读写锁,原理,aqs原理等等
面试官:说说Java的泛型,和c++实现上有什么不同
我:Java的泛型是假泛型,运行时会消除,全部变成Object然后进行强转,c++的模板是编译时进行分析,自动生成不同参数类型的代码,是真泛型。
面试官:设计模式?
我:单例,策略,模板方法,桥梁,工厂等(没有细问)
面试官:hashtable?hashmap?Concurrenthashmap?
我:特性,原理,实现,1.7和1.8的优化还是这一套
面试官:谈谈ioc的理解
我:(熟悉的配方)
面试官:数据库优化?
我:(因为之前没有让讲项目难点,所以准备就此问题向这方面靠一靠,结果被面试官打断说稍微说说就行了,不用结合项目了)
面试官:介绍一下nio和aio
我:还是熟悉的配方,epoll那一套,原理,红黑树链表
面试官:还有没有我没有问到的亮点?
我:大一写的的可diy地图的超级玛丽,我的个人博客。
至此,阿里二面结束,这个面试官没有像第一个面试官那样一直追问下去,问的题目也是很基础,难度远小于阿里一面,大概是中等难度
阿里二面五分钟后,立马又打来了电话,是三面hr面,聊了大概20分钟,聊了聊家庭,生活,学习,项目,大学的经历,实习时间(感觉有些稳了)
过了几天,3.27晚上,美团打来电话约了二面,这次面试难度还是相对高一些的。
面试官:自我介绍,项目介绍
我:(套路)
面试官:怎么使用es来对面试者进行分类。
我:这是一个聚类问题,首先对面试者进行信息采集,然后进行数据清洗,标准化处理等,然后可以使用kmeans等无监督学习算法进行聚类,es用来计算两个面试者的相似性,对于面试者的技术栈,自我评价等非结构化数据,可以看做文本,用es进行匹配,来计算二者的距离,最后计算综合相似读(这个我也说不准这样可不可以,但是这好歹是个思路)
面试官:现在有若干借贷者,若干投资者,求一种最优的匹配策略。
我:(这个问题需要先考虑什么算是最优,最后和面试官探讨的结果是,尽量较少使用投资者,尽量动用资产少的投资者的钱,这样的话,这个问题可以看作是一个布尔背包问题的变形,对每个投资者,进行一次背包,看看哪一个可以容纳得下最多的借贷者,然后容纳同样多的就使用资产少的,然后将这个投资者和他所容纳的借贷者去掉,对剩下的借贷者和投资者再次进行dp,直到所有的借贷者都被包含。这个是一个贪心的思想,并没有证明是否真的能取到最优解,但是绝对是可以取得到近似最优解)
面试官:说一说spring mvc处理请求的过程
我:(就是怎么被这几个组件处理的)
面试官:说说过滤器和拦截器
我:(很简单,基础知识)
至此,美团二面结束,大概51分钟,难度中等偏上,这次是主管面的,问的算法较多。
当天白天,3.27,阿里打来电话约四面,这次是视频面,提前说了需要手写代码。加了面试官的微信号。
3.28下午阿里四面,这次面试难度中等偏上。
面试官;自我介绍,项目
我:还是套路
面试官:redis谈谈
我:redis的应用场景,在项目中的应用等谈了谈。
面试官:说说分词算法
我:(这个还真不知道,最后上网查了查,什么隐马尔科夫模型啥的,后来上课学了一些皮毛)
面试官:说说tf/idf算法
我:(这个问题第三次遇到了,轻车熟路)
面试官:说一说jvm的命令行工具,
我:jmap,jstack等,功能是XXX
面试官:倒排索引说一下
我:(美团一面问到了,不会,过后看了看)倒排索引是搜索引擎的核心数据结构,原理是XXXX
面试官;好,手写算法吧
(终于到这里了)
N个球队,每个球队有一个球队的水平,水平是个整数,设计一个函数,每次调用函数,随机取出一个球队,要求,取出的球队的分布和球队水平成正比。
我:(拿起A4纸开始写。这个题目不算难,主要是考虑怎么利用现有的产生均匀分布随机数的random函数,映射成变成和球队水平相关的随机数,这个可以用几何概型的思路,把球队的水平,抽象为线段,线段的长度就是球队水平,水平越高,线段越长,所有的球队的水平总和,即为整个线段的长度,每次从线段上随机取一个点,判断这个点属于哪一段,那么这次取出的就是这个球队,这样就达到了题目说的要求,思路有了,关键是怎么设计数据结构。这里有两种思路,一种是取球队是常数级复杂度,但是比较耗费空间,具体是,开辟一个大小为球队水平总和的int数组,然后对每一个球队,将一段这个球队水平长度的数组的值设置为球队id,这样每次随机生成一个0到球队水平和的随机数,返回以这个随机数为下标的球队的id即可,这样虽然取球队的复杂度低,但是预处理的时间可能会很高,而且占用空间也很大,因为这个写起来简单,为了快速表达思路,我在纸上写的就是这个方法,交给面试官看之后,面试官说你这个空间复杂度太大了,有没有别的方法,我随即说了第二个方法,牺牲了一些取球的效率但是换来了极大的空间和预处理时间的节省,第二个思路就是只存端点,每个球队拥有一个区间,区间的长度即为球队水平,区间不重合,先对区间从小到大排序,然后每次生成一个随机数,将这个随机数也看成一个长度为0的区间,然后用二分法查找到对应的球队。这样预处理是O(nlogn)。每次取球队是O(logn),空间复杂度是O(n)这个方法性价比还是比较高的,跟面试官说了这个思路后,面试官还是比较满意的)
至此阿里四面结束,大概是50分钟,这一面难度中等偏上,也有一些没有答上来的题目,但是最后的算法题回答的还是不错的。
过了几天3.31,美团打来电话,约了三面,这一面本来应该是技术面,但是这个面试官转了管理了,所以就成了hr面。也是问了家庭,发展规划,学习,大学经历等,而且这个面试官还问了有没有女朋友,然后又问了女朋友怎么看待去上海工作,还问了打不打游戏。大概面了27分钟。
过了两天4.2号,阿里打来电话,五面hr面,跟面试官聊了聊家庭学习生活职业规划,介绍了一下公司,问了问实习时间。大概22分钟
第二天4.3号,美团打来电话,四面hr面,谈了谈薪资,发了口头offer,问了问规划等。八分钟。
过了两天,4.5号晚上阿里发来了短信,说已经发了意向书,然后我立马下床打开电脑点了接受。然后撤掉了还没有面试的其他所有简历。
后来我才知道今年阿里对集团的实习生要求比之前提高了一个档次,只要A和以上的,真是不知者无畏,如果我早就知道这个消息,为了稳妥,我可能就不走T部门的内推了。
至此,我的春招实习完全结束,最后拿到了三份offer。
自己对结果还算比较满意,但是没有参加腾讯的面试还是比较遗憾的,虽然后来也邀请我面试了,但是还是拒绝了,因为已经有了心仪公司的offer,惊心动魄的春招已结束,就不去浪费其他公司的面试资源了。对于春招,虽然一开始准备的时候,家里遇到了突发状况,有一些小插曲,但是总体来说还是比较顺利的,但是就面试表现来看,我感觉自己还是有提升空间的。
面试总结:
1、从面试题目来看,大厂校招还是看重基础的,三个公司一共七次技术面,其中有六次涉及到了数据结构和算法。所以,一定要重视学科基础,基础不牢,地动山摇。
2、面试准备一定要尽早,刷题更是要尽早,不妨现在就开始,leetcode,codeforces,多刷题总没坏处。
3、一定要主动向面试官表现自己,有时候面试官可能不会去深入问,但是你自己去深入的介绍,面试官一般不会打断你,但是你虽然懂的很深,但是只是简单的说了说,面试官又没继续问下去,这样就很难受了。
4、对于不会的东西,一定别胡诌,但是也不能不说,不会也要自己去扩展,延伸,说出自己的心路历程。比如面试官问A,我不会,但是我知道跟A很相近的B,我说一下B问题的思路,总比什么都不说强。
5、Github上要用起来,经常往上放一些东西是很有用的,参考C部门主管内推的例子。
6、基本上每一面面试官都会问你有没有什么要问他的,一句话,一定要表现出来你热爱学习,热爱技术,可以问一些比如”对我以后的发展提一些建议“或者”公司培养新人的模式“此类问题。
7、面试过程中即使感觉自己前面表现不是很好,也别放弃,一定要全程保持冷静,保持积极,参考阿里一面。
8、平时如果接外包,一定要接有质量的,一些无新意无挑战无难度的外包,除了能赚些钱就是浪费时间了,大学生的时间很宝贵,不要把时间浪费在赚小钱上。
9、学习一定要深入,不能浅尝辄止,会100种语言的hello world是没有用的,尤其是在校生,对技术钻研的深度比广度更重要(当然前提是广度不能过于狭窄,需要自己权衡),灌木丛是永远无法成材的。
10、面试也看缘分,即使没有通过面试,也别放弃,吸取经验,再接再厉。
以上是我的春招面试经历,希望我的经历能够给大家多少带来一些启发,在此我要感谢码农翻身的刘欣老师,我从大二就开始关注刘老师的公众号,一篇一篇妙趣横生的文章将晦涩难懂的技术讲解的如此有滋有味,让我非常受启发,极大的扩充了我的知识储备,还要感谢我的女朋友,一直陪伴着我,鼓励着我,让我有动力去努力奋斗。