百度面试经验和总结

百度导航面试(拿到实习Offer)

一面

一面是电话面试,那个时候下午刚好下课,然后收到来自深圳的一个电话,是百度导航团队的,问我能否第二天上午能否电话面试,我说可以。因为当时刚刚参加完CVTE面试不久,而且知道自己CVTE被刷了,所以那个时候又激动又慌张,因为面试了才知道自己还差很远。于是那天晚上就看了一下JVM相关的知识,因为这个在CVTE面试有问到。到第二天面试的时候,电话终于来了,涉及的问题主要以下这些:

项目
  • 描述一下你在学校里负责的项目?
  • 说一下项目里面具体某部分的实现

项目相关的主要围绕着这两方面展开,关键是自己做过的东西自己一定要清楚怎么实现的,要能够完整清晰地解释给别人听,让人家明白,不然自己不是很清楚,解释的时候又解释不清楚,这样印象分就会减少很多。

安卓基础
  • 了解Handler的机制吗?
  • 消息队列中的消息是怎么知道传递到哪个Handler进行处理的?
  • 有没有用过跟Handler相关的HandlerThread这个类?
  • 说一下Android的四大组件?你用过哪些?
  • 说一下Activity的生命周期?
  • 如果一个Activity因为意外退出了,应该在什么时候保存用户的数据?
  • 说一下ContentProvider的作用?
  • Android中有哪些途径可以用于应用程序的数据存储?
  • 你了解过Android中哪些异步加载机制?举个例子
  • 了解过AsyncTask怎么实现吗?如果让你来实现,你会怎么做?
  • 你知道哪些设计模式?对观察者模式了解吗?

基本上能回忆起来就这些Android相关的基础,总的来说难度不算太难,在询问安卓基础的过程中,还会有一些知识点结合你所做的项目,看看是否懂得灵活变通,而不是只记住个概念。一面总体来说还算可以,大部分题目都能回答。如果真的懂,就把你知道全部都说了,这样会体现你真的有看过相关的知识,并且掌握得还不错,因为你自己可以组织你自己的语言把你所知道的说出来,说明到了一定的程度。如果真的不会,就直接说,不好意思,还没了解。如果不懂装懂,一本正经地胡说八道,反而会扣分。
一面是电话面试,大概聊了40分钟左右,面试官对我评价还不错。我以为可以暂时松一口气,补一补其他基础的时候,当天下午4点到5点的时候就接到了第二天电话二面的通知。我心里一颤,晚上又开始密锣紧鼓复习专业基础了。

二面

二面如期而至。一面问到了安卓基础,所以估计二面问安卓基础的应该不会太多。所以也估计面试官会偏向数据结构方面的知识,于是也有了一些心理准备。

项目
  • 网络请求的缓存机制你怎么实现的?
  • 你用了什么数据传输的格式?
  • 你怎么从缓存中找到你想要的数据?
  • 你会怎么实现缓存机制?
  • 项目中分了三层,层与层之间怎么实现数据传递?
  • 你的项目需要传输多媒体类型的数据,Http协议的头部有哪些变化?
  • 项目过程有没有遇到一些问题?你是怎么解决的?
  • 项目组里面有没有出现拖延的现象?如果有,你是怎么解决的?
专业基础
  • 你在大学里面学了哪些课程?
  • 你了解哪些数据结构?
  • 知道哈希表吗?说一下哈希函数怎么构建的?
  • 怎么避免哈希地址的冲突?有几种方法?
  • 你在大学里学过哪些算法?
  • 解释一下什么叫动态规划?
其他方面
  • 你在计算机设计大赛拿了个三等奖,有没有了解过拿了全国一等奖的项目是做什么的?
  • 说一下你的第一个项目,简单介绍一下
  • 你的新闻是哪里来的?提取了新闻哪些特征作为推荐算法的依据?

二面用时大概半小时。总体看来,二面涵括的内容不仅仅包括个人的项目经历和专业基础,还有考察了面试者有没有关注外面的世界和别人的工作,这也提醒了我们在平时不要只埋头做自己的,主动关注别人的成果也是很重要的。

三面

比较幸运的是,一面和二面感觉都不算很难,发挥还算可以,两位面试官给的评价都是还不错。二面在周五,过了一个周末的时间,在周一下午4点多的时候(感觉百度处理事情都有规定的时间,比如通知都在下午4点到5点,面试基本都在上午11点左右,如果有同学要等百度通知的话下午4点到5点就不要周围跑了免得错过了电话就不好了),通知我过了二面,这个星期抽个时间去深圳进行三面。收到这个消息真是又高兴又担心,毕竟来到了三面,还是现场面。根据搜集到的面经介绍,百度现场面基本上都要手写代码。正巧有个同学在周二要去深圳百度面试,于是就跟面试官确定了周二下午三点的面试时间。为了准备百度传统的手写代码的面试,那天晚上我还是有好好复习了java基础知识和数据结构这些知识,以防万一。但是很意外的是,竟然没有让我现场写代码,而是问了一些项目方面的内容,还有性格和校园经历等等。具体如下。

  • 简单描述一下你的做过的项目。
  • 项目当中有分层的架构,层与层之间怎么实现数据传递?
  • 说一下你现在的专业和课程有什么区别?
  • 评价一下你自己是个怎样的人?有什么例子可以证明?
  • 你在大学期间有什么事特别开心,又有什么事特别沮丧?
  • 你的第一个项目拿的名次不是很好,那有没有想过怎么改进还是就这样算了?
  • 你在做项目负责人的过程中,有没有遇到一些特别大的问题,需要拿出来撕逼的?最后有没有解决?怎么解决?(偏向具体做法)
  • 有没有看过一些非技术类的书籍?都有哪些?
  • 有没有用过百度地图?(因为没有用过所以就被问了下面这一个问题。。。)用过哪些百度的产品?
  • (承接上题,因为我答的是百度搜索。。)你觉得百度搜索有哪些不好的地方?如果是你来做,会怎么改进?

还有其他一些关于实习时间和转正之类的内容,这些因公司而异,就不写了。总体来说,三面涉及了少量技术,但都是和项目相关的,只要自己足够清楚自己负责的内容,就没有太大的问题。虽然面我的是一位研发经理,但是问的很多问题都是在了解你的个人性格、经历等方面的内容,更像是HR面试,了解面试者的为人,以及是否适合在这里工作。用时大概一个小时,相比前两面轻松很多。

在三面(周二)结束之后,两天之后(周五),就收到了面试通过的通知,HR安排入职。从简历投递到面试通过,用时不到两个星期。在这过程里面,感觉相对幸运,毕竟是有两次电话面试和一次现场面试,一起面试的同学(不同岗位)是直接到现场进行一二三面。而且更幸运的是拿到了百度实习的offer,这真是一个来之不易的机会。希望可以在百度里面学到更多的知识,开阔自己的眼界。

总结补充

针对这几场面试,做了一些总结,仅供参考。Android移动开发的面试主要考查四大块的内容,分别是数据结构和算法、Java基础、安卓基础、项目内容。以下是一些建议和书籍推荐

数据结构

我是看课本复习的数据结构,个人认为最好能掌握上课提到的所有数据结构,但是重点要掌握下面几个:

  • 链表
  • 树和二叉树
  • 查找(特别是二分查找和平衡二叉树,二分查找要求能写递归和非递归两种算法的代码,会求时间复杂度)
  • 排序(会写快速排序和归并排序算法,会求时间复杂度,其他的排序算法要知道算法过程,需要特别注意堆排序)
  • 时间复杂度和空间复杂度(自己要学会面对非课本类型的一些简单的算法的时间复杂度和空间复杂度的推导,当然课本里面的推导也要熟悉)
JAVA基础

java基础除了基本的面向对象的特性之外,其实还有很多需要熟悉的内容,面试之前最好可以过一遍,即使不是很熟悉,但至少有个印象,免得面试时问起一脸茫然。

  • Java异常机制(Exception、Error、RuntimeException)
  • Java IO机制
  • 集合类框架(要深入到原理实现,即用到了什么数据结构,过程是怎么样的,常考HashMap、LinkedList、ArrayList、HashSet,最好全部都看一下,这个很重要)
  • Java同步机制
  • Java多线程
  • Java反射机制和ClassLoader
  • Java字符编码
  • (如果有精力)Java虚拟机(这个相对较深入,有余力的话可以看下《深入Java虚拟机》这本书,看前三章基本上可以对虚拟机有个大概的了解,起码不会出现被问起什么都不知道的情况)

推荐:Java相关的技术博客、java设计模式

Android基础

Android基础这方面,有个问题需要注意的,就是我们所知道的一些android组件或者机制,可能你只是知道它的存在,也知道大概的实现过程和原理,但是并没有使用过,这种情况的确会发生的。因此你知道实现过程和原理也可以,没有用过但在面试的时候问到,可以把你知道的都说出来,这样就会让人感觉,即使你没有用过,但是你很清楚其中的原理,用起来也不难,只是现在的项目中暂时不需要而已。好了,说了这么多,个人认为相关的Android基础应该包含:

Android基础
  • Android四大组件(Activity, Service, ContentProvider, BroadcastReceiver)
  • Fragment、ListView等常用控件的使用
  • 数据存储(SharedPreference, SQLite, 文件存储系统)
  • 网络请求和数据解析(get和post请求,json数据格式,缓存系统等等)
Android进阶
  • View的工作过程和绘制
  • Android的消息处理机制
  • Android缓存系统的实现原理
  • Activity的启动模式等
  • Android内存泄漏和性能优化
推荐书籍
  • 《疯狂Android讲义》(几乎覆盖了Android需要掌握的基础内容,可以用来覆盖知识面)
  • 《Android群英传》(Android知识从基础到进阶的过渡,有涉及实现原理,但是没有非常深入,可用来过渡学习较深入的Android知识,多图,讲解比较通俗)
  • 《Android开发艺术探索》(Android进阶必备书籍之一,多文字和源码,带你阅读Android实现源码,了解背后的原理。因为没有很多图,而且多数用文字和代码来描述,所以读起来需要一定的耐心。里面涉及的内容都是相对深入而且也是面试和工作中经常用到的,所以建议要把它看懂和看透,会有很大帮助。)
项目经历

要对自己所负责的部分很熟悉,清楚自己负责的部分是怎么实现的。同时要顾及整体的系统实现,也就是要点面结合。除此之外,还要多了解其他人的项目做了什么,大概怎么做的,这考查到你涉猎面是不是够广,是不是有关注其他人的动态。

整个面试的经过和总结差不多就这样。实习只是一个开始,一次面试的总结,是为了可以更好地看到自己存在哪些不足,以及以后该往哪些方向去努力。这份经历和大家一起分享,一起进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值