阿里+百度+CVTE面经合集
早上11点,刚刚收到阿里的offer,也算是给自己三个月的春招画上了一个还算圆满的句号。
上图证明一下(阿里巴巴offer截图)
先介绍一下本人的基本情况:陕西普通一本非计算机专业大三学生,非985211。主要技能C/C++/Java/数据结构/算法。
这三个月的经历,首先确实在技术上确实通过不断的面试有了很大的提升,其次在各种面试经验上也有了一些心得。
眼看春招已经基本结束,所以将这段时间的经历写在牛客上,希望能够帮助大家,在秋招上斩获更满意的offer。
所以就拿我收到offer的三家重点说说。(按时间排序)
一、CVTE:
CVTE的实习生招聘非常早,笔试完了就收到通知,预约了面试时间就早早去了,两轮技术面试一轮HR面试,进行的很顺利,3月26号就已经发了offer。
一面:面试官非常亲切,其实我当时是第一次参加现场面试,楼主比较怂,其实现场紧张的不要不要的,自我介绍的时候说完了姓名年龄和专业之后,就卡住说不下去了。面试官看在眼里疼在心上,于是很关心的对我说,没事没事不要紧张,这样吧,我们先写两个算法放松一下(Excuse me?)不过好在面试官出的题很简单,第一个是二分查找,我用递归和非递归各写了一遍,重点就在于下标的控制;另一道是在N个数中求前M大个数,其实也很简单,思路就是使用快速排序的思想,每一次当把一个数字放在正确的位置上的时候跟M进行比较,其实在剑指offer上有原题。好在寒假的时候把剑指offer刷了很多遍,所以很快也写出来了。我个人觉得在写代码之前,有很多事情需要跟面试官进行交流,比如函数的参数、返回值、还有一些异常情况的处理,提前跟面试官约定好。比如我在写代码之前,就问面试官:“假设参数是(int * a rr, int length, int m),在这种情况下,可能会有四种情况会导致程序出现异常情况,① arr == NULL ② length <= 0 ③ m > length ④ m <= 0,询问他在这四种情况下我们该如何处理?”面试官听完之后一下就有兴趣了,及时跟面试官沟通,一方面是防止思路与面试官预期的差距太大,面试官出的题,因此他有责任让面试者明白他的意思,另一方面表现我们积极思考,向面试官展示我们的思考能力。可能之前的算法写的太顺利,所以给自己建立了蜜汁自信,并且面试官对我的第一印象也好,后面的问题回答的很轻松,有struts2和SpringMVC的区别、Spring中IoC和AOP的理解,不过在数据库方面被难住了,在MySQL中如何定为查询效率较慢的SQL语句,比如慢查询日志、EXPLAIN关键字还有PROFILES等。但是总得来说,一面进行的很顺利。
二面:CVTE的面试流程是,如果一面的面试官觉得通过了,就会示意现场接待的姐姐,姐姐会安排在场外休息一下,二面大概在十分钟之后进行;而如果觉得不符合要求,姐姐就会亲切地告诉面试者,今天的面试结束了,可以先回去等消息。等了十分钟之后,二面如约而至,二面是一个年纪稍大,但是很有风度的中年人,事后学长说那是他们部门的BOSS,面试官让我设计了一个场景,青蛙爬井,就是画画UML,两个类图,和他们的关系。最后扩展成面向接口的思维,不得不说BOSS确实功力深厚,纠正了我很多问题,最后才勉强满意。然后就是分析项目,挑了一个我比较熟悉的,问了很多问题,比如页面的跳转关系、我所做的功能模块,让我一边画图一边解释,我自认项目准备的还算充分,因为都是自己做的,所以这部分也算顺利。后面就没有什么技术问题,问了一下我什么时候能来实习,还有在校的经历,同学之间是如何评价我的,然后就结束了。
HR面:晚上回到宿舍就有短信通知,第二天参加终面,当时还在跟女朋友看电影啊,荒原猎人。正看到小李子跟熊搏斗,女朋友吓得不敢看,广州的电话来了,让我预约第二天的终面并且填一个单子。慌慌张张跑回去完成。印象里面那个问卷问的很全面,比如家庭状况、为什么选择去广州、什么情况下会放弃这份工作、小时候印象最深的一件事情、列举出近期让你伤心的事情以及你是如何处理不良情绪的。如果各位到了这一步,一定要谨慎作答,这些问题都会列入到综合评测中。后面的面试就是把这些问题现场问一遍,说是HR面,但我总感觉是高管面,一个高管面三个面试者。
面试出来之后,等做到地铁上,广州负责的CVTE校招的学长就已经告诉我通过了,效率非常高。3月26号拿到的offer,这是春招的第一个offer,当时的心情还是很激动的。
二、百度
百度是学长内推,技术面是两轮技术面试。
一面:简单的自我介绍,因为是电话面试,所以流畅了很多(你们懂的)。一个小时满满的技术问题,所以就不用向上面再赘述了,直接上干货
1. 是否了解动态规划
动归,本质上是一种划分子问题的算法,站在任何一个子问题的处理上看,当前子问题的提出都要依据现有的类似结论,而当前问题的结论是后 面问题求解的铺垫。任何DP都是基于存储的算法,核心是状态转移方程。
2. JVM调优
其实我没有实际的调优经验,但是我主要介绍了一下JVM的分区、堆的分代以及回收算法还有OOM异常的处理思路
3. 分别介绍一下Struts2和Spring
不用多说,这方面比我答得好的同学肯定大有人在,就不出丑了
4. 职责链模式(设计模式)
GoF经典设计模式的一种
5. 实践中如何优化MySQL
④ 硬件的优化
6. 什么情况下设置了索引但无法使用
③ 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)
7. SQL语句的优化
等等
8. 索引的底层实现原理和优化
主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。
9. HTTP和HTTPS的主要区别
10. Cookie和Session的区别
11. 如何设计一个高并发的系统
④ 服务器的负载均衡
12. linux中如何查看进程等命令
13. 两条相交的单向链表,如何求他们的第一个公共节点
很简单的链表题目,博客上的做法一搜一大把,我记得当时答在兴头上,又给面试官解释了一下如何求单向局部循环链表的入口,链表中很经典的问题(其实链表也就那几个常用算法,比如逆制、求倒数第K个节点,判断是否有环等)
二面:可能一面面试官对我的评价还算不错,二面面试官一口气考了我11个设计模式(手动微笑),对,是11个设计模式,有直接提问,也有在场景设计中引导我使用。总共加起来11个,分别是:单例模式、简单工厂模式、工厂模式、抽象工厂模式、策略模式、观察者模式、组合模式、适配器模式、装饰模式、代理模式、外观模式。然后就是设计一个公司下有部门、部门下有经理和员工,经理可以管理经理和员工这样的一个模型,组合模式一套用就行了。后面还问了几个非技术问题,比如和产品、测试发生矛盾了怎么处理,答应的任务发现完成不了该如何处理等,大家如果遇到请随意装逼。
机智的我不管哪家公司问都是说从即日起到大四毕业,中间出了期末考试和毕业设计,都能参与实习,近期就能参加实习。不是故意想骗人,只是目前还没有和HR谈条件的筹码,这样说了就算最后去不了,也算是一次面试机会,如果一开始就拒绝的话,连面试机会都没有。等到技术面试结束了,跟一开始比,就有了谈条件的筹码,这个时候大家再根据情况合理要价
三月的CVTE、四月的百度,现在该说五月的阿里了
三、阿里巴巴
阿里巴巴其实同样的简历,在内推阶段直接简历被刷,非常尴尬。但是有幸笔试蜜汁通过,所以收到了参加现场面试的通知。
一面:一面的面试官长得超级像张家辉,整个面试过程,我满脑子都是《激战》里面的老拳王,当他朝我提问的时候,我就想到激战里面的经典台词“怕输,你就会输一辈子”。不知道面试官老师有没有看出我表情的异样~闲话不多说,上干货。
二叉树本身就是一个递归的产物,那前序举例,访问根节点,然后左节点,再右节点,如果左节点是一棵子树,那么就先访问左子树的根节点,再访问左子树的左节点,依次递归;而层序,使用队列进行辅助,实现广度优先搜索
2. volatile关键字
但它有一个很致命的缺点,导致它的使用范围不多,就是他只保证在读取和写入这两个过程是线程安全的。如果我们对一个volatile修饰的变量进行多线程下的自增操作,还是会出现线程安全问题。根本原因在于volatile关键字无法对自增进行安全性修饰,因为自增分为三步,读取-》+1-》写入。中间多个线程同时执行+1操作,还是会出现线程安全性问题。
3. synchronized
Lock能够实现synchronized的所有功能,同时,能够实现长时间请求不到锁时自动放弃、通过构造方法实现公平锁、出现异常时synchronized会由JVM自动释放,而Lock必须手动释放,因此我们需要把unLock()方法放在finally{}语句块中
4. concurrentHashMap
而读操作不加锁,JDK1.8中ConcurrentHashMap从1600行激增到6000行,中间做了很多细粒度的优化,大家可以查一下。
5. 锁的优化策略
等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。这部分跟面试官谈了很久
6. 操作系统
最后就是经过三天的等待,顺利拿到阿里巴巴的实习offer
楼主从三月初到现在,基本能叫的出来的公司都参加了各种面试,很惭愧拿到offer的只有这三家。但是经过大大小小二三十次的面试,我觉得对一个后台程序员来说,重要的不只是语言,还有数据结构算法、网络基础、并发、数据库、设计模式、操作系统、linux等等很多很多技术需要掌握。我就有很强烈的感觉,单论Java,在楼主的周围其实有很多比楼主强得多的人,可是他们有的人面试一直不顺利,原因就在于其他的知识点相对薄弱。这点在阿里巴巴面试中就体现的很深刻。最后HR问我作为非计算机专业学生,什么专业课没有学到最让我遗憾?我回答网络基础、操作系统、计算机组成原理和系统的数据库知识体系。虽然侥幸拿到了阿里巴巴的offer,但这一次的面试让我深深地看到了自己差距。跟二面面试官交流的时候,他考我项目,我就拼命想把他往框架上拉,想解释hibernate和Spring还有mybatis,结果面试官一次也没有上当。每当我说这些的时候,面试官就会打断我,说我不用解释框架,我们就建立在这些东西都双方都清楚的基础上。所以真心劝各位准备面试的朋友们,多重视基础。基础能够决定学习能力和思维方式,而学习能力和思维方式最终决定一个程序员能走多远。