大三学生拿到阿里,百度实习offer面试经验分享

  • 总结

    首先说作为一名大三本科学生能拿到阿里,百度的实习offer,真的很幸运(因为BAT一般收211,985的研究生居多点),除非本科生有非常强的自学能力,一直有人会问,BAT实习面试和校招面试哪个难度更大,在我感觉来真的差不多,不信你去问度娘,看以往别人分享的面试经验哈,主要是想进BAT的童鞋有点多(是太多太多),竞争有点大吧。
    然后说说BAT面试难度的要求,BAT不需要只会干活的人(那是技校培养出来的人),大公司不仅需要你有扎实的基础,还需要你懂得底层的实现原理,就拿C++来说,你最好要懂得用C语言设计C++的大体思路,我做iOS开发主要用的Objective-C,我就要知道C语言设计Objective-C得大体思路,比如百度二面的时候就被问到C++对象模型和Objective-C对象模型不同,其实C++和Objective-C类的本质都是结构体,然后最好要明确自己熟悉的语言是如何进行内存管理的,一些大一,大二的学生感觉自己学习了C#或者java能写个网页,维护个网站啥的,就感觉良好,这两门语言比较好学(至少和Objective-C和C++相比),都是入门容易精通难,就拿内存管理来说,虽然这两门语言的设计者,尽可能的让使用这两门语言的人感觉容易使用,但是,在大型公司招聘的时候,内存管理是如何设计的,一般都会被问到,这就要求我们全方位的了解自己熟悉的语言。
    我的第一次面试是3月20号阿里的内推面试,第一次面试是让支付宝部门的大神内推的,第一次电话面试,答的不是很好,面试完一小会刷新官网的面试状态,变成了待回绝!第一次面试呀,就这样被虐了,总结了一下失败的经验,然后又开始复习,其实潜意识的复习从14年12月份就开始了,复习内容主要有C语言,C++,算法,数据结构,Linux操作系统,iOS开发,因为我面试的是iOS,所有之后的复习还是深入挖掘iOS开发还有计算机网络这块。后来参加了阿里的笔试(笔试通过),然后参加了京东的电话面试,两个月之后参加了阿里在天津的面试,三轮面试都是通过,一面面试官给了我较高的评价(一面面试官问我你怎么懂的这么多技术宅嘛?),面试完成后,HR马上给我说面试通过。第二天收到杭州的电话问想去北京还是杭州实习,当时脑子一抽选了杭州,因此就来到了杭州。5月6号收到北京的去百度面试的电话,问了一下什么时间有空,我说5月8号,后来由于种种原因,将面试推迟到了5月12号,5月7号参加完阿里的圆桌会议,就回学校了,7号到12号又把iOS的知识复习了一下,12号匆匆忙忙的坐上了去北京的动车,面试地点在百度总部之一的奎科科技大厦,三轮面试感觉还比较轻松,不过三轮面试大概总共面了三个小时的样子,最后一面是部门经理(manger),经理是一个很nice的姐姐,感觉对我很客气的样子,面试完我还以为挂了呢(一般来说面试官对你表现的很客气,就表示你要挂呀),第二天就收到百度HR的电话,说四个面试官(二面是俩面试官,其中包括内推我gege),对我感觉还不错,希望能尽快入职。我说考虑一下,然后HR让我晚上给她回复。由于个人原因,我最后还是选择了去阿里,当然百度的那个部门也十分高大上,百度知道部门,面我的第一个面试官就是知识搜索部门的,想想都高大上啊,而且奎科大厦里面环境特别好,但是最终还得做出选择,最终我选择了阿里。其实京东的面试也算过了,因为,一面完后过了一段时间,内推我大神问我,他们希望要实习生在他们公司实习完,就能继续留下来正式工作,大体意思是如果我能确定留在京东工作就可以过去实习,然而那个时候我已经确定要去阿里实习了,因此就拒了。
    参加的面试比较多,面试过程中遇到的问题,不能一一道来,只能挑选其中印象较深的,先说说如果你想轻松通过BAT(更甚至是goolge,微软)面试,除了大学本科的书籍,最好能把哪些书看看吧。

  • C++
    1.C++ Primer Plus
    2.Effective C++
    3.深度探索C++对象模型
    4.STL源码剖析
    5.另外我还把传智播客的C,C++视频教程看了几遍(是清华的C++大神讲的),其实大部分内容都是上面所说的书中的东西,只是增加了一些实践经验罢了。
    ……
    个人感觉大学课程所学的C++ 知识仅仅只是把C++的语法粗糙的讲完(至少我所在的大学是),如果你只是满足于大学C++成绩满分,或者在学校里用C++写了几个小项目就觉的自己熟悉 C++,更甚至是精通C++,我想你错了,你所学的C++知识,甚至连C++的十分之一都不到,C++博大精深。就这样说把,即使你大学里的专业课程都是满分(至少我们学院是这样,清华北大等名校除外),你离要求还是差远了。

  • Linux/Unix操作系统
    1.深入Linux内核架构
    2.Linux内核设计与实现
    3.Unix网络编程(第一卷 套接口API 第二卷 进程间通信)
    4.Linux内核设计与实现
    5.另外我还把传智播客的C++项目实战部分(就是Linux和Unix的使用)的视频看了两遍,其实你如果面试C++研发工程师,就必须精通Linux的使用,Linux下网络数据库编程,不信你看各个大公司的招聘官网。个人感觉看视频仅仅会增加在项目中是如何使用C++或C语言的,如果要获得详细的知识,还应该多阅读书籍。
  • 算法与数据结构
    1.算法导论
    2.编程之美
    3.剑指offer
    4.如果想深度钻研数据结构建议多买几本组合数学,离散数学,高等数学,数论的书看看,将会对数据结构有更加深入的理解(毕竟计算机就是数学延伸出来的)。
    4.关键平时还是多练吧,当然还得看智商啊
  • Objective-C与iOS
    1.精通Objective-C
    2.Effective Objective-C
    3.OS X ,iOS多线程和内存管理
    4.iOS网络高级编程
    5.iOS数据库应用高级编程
    6.Objective-C编程之道(对二十几种设计模式进行讲解,并举出Apple官方框架中使用的设计模式,也用Objevtive-C实现了每一种设计模式)
    7.另外一开始做项目的时候看过两套iOS的完整视频(MJ老师的iOS视频教程,无限互联),大家如果着急做项目的话可以看看视频,但是想精通的话还是要多看书籍,技术博客,Apple官方文档,WWDC视频。
  • 其他
    这部分我也没做到,部门的TL(Team Leader)说要把我们培养成full stack(全栈式,需要精通前端,后端,客户端等)开发工程师,建议大家多学学java web,PHP,html 5,js等,有时间就多学吧。

下面对每次面试做一个概括吧

主要说说面试中印象较为深刻的问题,不一一列举,还是建议大家按照我上面说的多多学习而不是针对面试,因为面试的次数很多,很多问题都有重复,一面二面可能重复,不同公司的面试也会重复,

阿里内推面试 

1.问到iOS推送通知的实现和原理
就是后台有一个单独的守护进程(就相当于一个长期运行在后台的qq)在全局收发消息,收到apns服务器的消息后会发到指定进程,用的xmpp协议,其他应用层面的东西就不说了,百度都能百度到,iOS系统中不允许应用长期运行在后台,这也是iOS系统比安卓系统使用顺畅的原因之一,安卓可以随意开一个守护进程运行
2.Objective-C内存管理
3.Objective-C协议
4.C++如何实现代理设计模式
5.问到一些项目问题
6.OSI网络协议七层
8.对称加密与非对称加密
…….
京东内推面试 
自我介绍
1.Objective-C内存管理
2.Objective-C runtime(就是Objevtive-C的底层实现)
3.Objective-C中单例设计模式的实现和使用
4.Objectve-C中观察者(KVO),通知的区别
5.使用过哪些常用的框架
6.设计缓存
7.Objevtive-C几种多线程实现方式和区别
…..
阿里一面(天津) 面试时间一个小时
自我介绍
1.git(git 的tag 感觉很难的样子) 的使用
2.如何自己实现字典模型互转
大体思路就是用runtime动态获取一个类的属性列表,变量列表,属性名列表,变量名列表,根据属性名或者变量名,进行键值编码(赋值),这里面的具体实现还是挺复杂的,请看MJ老师的框架MJExention

3.Objective-C实现hook(黑盒调配)
4.autoreleacepool(内存管理池)的使用,以及全局的autoreleace pool何时释放
两次运行循环(消息循环)切换之间
5.观察者(KVO)的实现
通过类型混合指针机制,通过runtime,动态生成所观察对象类的子类,改变所观察对象的isa指针,使他指向它的子类,这样这个对象就神奇的变成原来类的子类,重写所监听属性的set方法,通过runtime拦截这个方法就是hook,来实现。

6.设计缓存
7.有没有自己封装过控件
8.自己项目的OAuth认证的流程
9.http状态码(http tag,http缓存啥的)
10.对称加密非对称加密
11.Objective-C是一门动态的语言,对象是如果调用一个方法的
12.如果点击一个按钮,但是按钮响应的方法没有实现咋办?
(1)动态方法解析
(2)快速转发
(3)标准转发
13.Objective-C内存管理的实现(Objective-C内存管理的实现)
14.除了开发自己还有什么其他兴趣
15.数据结构和算法掌握的咋样,刷过acm没

…….

阿里二面(天津) 面试时间大概为40分钟
二面面试官是以前淘宝的架构师,应该是负责我们整个部门的技术,后来加微信才知道他在阿里工作了6到7年的样子。
自我介绍
1.设计控件
2.看看自己的作品
3.如何进行iOS app软件bug测试
4.Objective-C内存模型
5.iOS 响应者链
6.看过哪些iOS开发的书籍,说到iOS网络方面时,他让我分享其中一章给他,我不假思索的说出了http请求的优化
7.操作系统的各种问题
8.iphone 6的屏幕适配问题
…….
还有不少不过想不起来了

阿里三面(天津) 面试时间大概为20多分钟
1.对BAT的看法
2.对阿里的看法
3.自己的缺点
4.看着自己的简历又问了一些问题
5.自己在学校的一些事情

4.有什么想问HR的
…..

不说和之前面试重复的了,总之有不少
百度一面(北京) 面试时间大概为60多分钟
1.自己在项目中做的最有难度的一件事是什么
2.设计模式
3.http和https的区别
4.block在内存中的位置,也就是 C++中的Lambda表达式(block块本质上是一个对象,有全局块,栈块,堆块三种)
4. 如何用工具检测内存泄漏
5. 设计通知模式有什么需要注意的地方
……

百度二面(北京) 面试时间大概为60多分钟
这次面试是两个面试官

1.iOS屏幕适配(AutoLayout)
2.如何设计runtime(也就是设计Objective-C
3.看了看我写的项目的代码(因为我带电脑了)
4.Objective-C和C++的区别
5.java 反射,C++ RTTI,Objective-C的runtime是不是一样的
6.问了几个C++的问题
7.看过什么项目的源码,说说其中的技巧
……

百度三面(北京) 面试时间大概为60多分钟
这次面试官是部门经理,主要问了两个技术问题,然后问了问我在学校的团队的分工,美工谁来做,团队之间如果沟通交流,然后为我解答了几个在百度工作的问题,中间还说,能进入这一面试都是十分优秀的同学,等等,还有其他一系列问题。就这样闲扯了一个小时,最后,部门经理送我下楼。

最后,虽然通过面试,但是发现自己的不足还很多,希望进入阿里和今后的工作中能不断的进行学习。

个人简历:
http://pan.baidu.com/s/1c0wE9J6

猜你喜欢

转载自blog.csdn.net/chenweiya/article/details/46120127