百度面试经验

作者: Themores | 来源:发表于2015-08-09 10:56 被阅读618次

    内推简历差不多过了1个多月,5月底,4-27下午百度的面试电话,由于当时和哥们在长江边上骑自行车,顺带在长江里洗了个澡,于是跟面试官预约面试时间到4-28早上10点。当时投递的是Android客户端开发,至今没有hr的电话,结果可想而知。但是也来说说感受,来总结一下这次经验。

    一面:

    面试官是一个叫丁超的RD,一接通电话,让我简单的自我介绍,然后就开始进行提问,首先记得第一个问题是关于try-catch-finally 的知识点,记住一点无论发生什么都会走到finally,于是这个问题顺利解决,然后说了一段代码,考察的是continue-break-return 三者的区别,当然针对这几个关键字,很容易解决。紧接着又开始问,继承中子类和父类构造函数的执行次序,当然是从父的构造函数先开始执行,然后又问了一个多态的问题,从继承到父引用指向子对象,到Override。于是开始问到了算法以及数据结构中的问题,让我比较两个字符串是否相等,题目大致是这样的”字符串 abc 和bac 这种就是相等”,由于面试官电话的声音比较小,我就再次问他确认问题,确认之后第一想法先判断长度用到str.length()如果不想等,可想而之,直接return false;想等则是想到将字符串单个的都转成Ascll码,然后进行快速排序,一一比较即可。面试官觉得可以,继续问下一个问题,这时候他开始问到进程和线程的区别,然后问到进程的通信方式和信号量,一一解决。然后开始针对java 的同步关键字synchronized 进行简单的描述,对这方面了解还行,于是跟他说了一些,他也觉得满意,然后开始又开始出了一段代码的问题,在弄清代码的结构之后,原来是考察对象引用传参的知识点,当然这个问题在项目中写代码常见,我很快解决,于是面试官开始问到集合,然后问到HashTable,我一听是这个,我主动向面试官说,我就从java 的集合开始说起吧,然后就从Connection 接口到list ,set接口,到map接口,然后又说他们下面的子类哪些事线程安全,哪些线程不安全,当然用的最多的是ArrayList(不安全) 和Vector(安全),描述的很清楚,面试官很开心,然后问我会用那几个设计模式中的内容,我说最多的就是工厂模式和单例模式,于是面试官要我写一段代码关于单例模式的实现,这是在写代码中写的常用的,于是很快的描述给他。既然是android 客户端开发职位,当然少不了android方面点问题,一来便问了一个在onCreate()方法里面加上一句代码while(true);结果会怎样,我第一反应是这应该是考察ANR 机制,于是我说这就是相当于在主线程中干耗时的操作吧,网络请求基本上是放在子线程中进行,然后Handler 去刷新UI  线程,将Handler-MessageQueue-Looper机制说了一遍。面试官觉得不错,继续发问,问在什么时候能够获取到布局中textview 的宽度和高度,然后我的回答是setContentView之后,可能是没理解面试官的意思,紧接着,面试官说如何知道一个activity 开始真正展示让用户操作,我当时记得activity 的生命周期顺口答出onResume ()方法,面试官继续觉得不完整,然后继续说有一个真正的visible的方法,我瞬间想到onWindowFocusChanged()这个方法,面试官觉得不错,继续问Service  ,当然是从service 的两种启动的方式和区别及生命周期,回答不错。然后开始问,用没有自定义个view,由于之前做项目的时候,做过重力感应的遥杆,于是我第一想到的是onDraw()方法,然后又联系到自己当时为了解决scrollerview于listview 的冲突,继承过listview 然后改写过onMeasure 方法,然后面试官就针对onMeasure方法的两个参数要我进行解释,由于项目的基础算是了解一些,然后说给他听,他觉得还行。然后开始问onSaveInstanceState  ,问到这个当然会说到onSaveInstanceState()和onRestoreInstanceState(),于是这个问题也就顺利解决。这时候,面试官又开始,举例说到viewpager中的事件冲突问题,第一印象,这就是在考分发事件机制。于是把分发机制的原理和流程说了一遍,面试官说基本上对的。于是面试官松一口气,说问题就问到这里,你还有什么问题要问我吗?由于在做项目的时候最常见的问题是沟通和需求变更,我想知道百度这样的公司是怎么解决的,面试官说的很详细,我也全部记录下来,然后重复描述给他。一个多小时的面试,挂掉电话,问了面试官的名字,一面感觉不错,下午就去上课。

    二面:

    4-28下午,刚刚上课不到几分钟,010区号的电话打了过来,一想应该是百度,于是接了电话,说是二面。面试官说基础知识一面已经问了,你有没有用过我们的产品-百度手机卫士,然后我确实没用过,然后他继续说你现在是android 还是iphone,看着自己碎屏的华为机器,说是android,我顺势说这个手机太渣,内存太小(不知道面试官是不是要我装一个手机卫士,然后针对产品进行提问),收到我的拒绝,面试官有些不爽:“那这样吧,我们继续问一些基础问题。”然后面试官直接以来便从线程同步,出了一段代码一个类里面有一个static 方法和普通方法都加上synchronized能不能被同步住,当时对这个很模糊,当然我知道new 一个对象,是开辟一个新的内存区域,多个线程中两个方法能不能被同步住,当然就是看他们有没有共享资源,这个问题问的相当的模糊,也导致自己对这个问题跟着面试官走了一趟,面试完之后针对这个问题,讨论了很多次,于是总结出来了3点

    1. 类的静态方法仅能访问静态资源,比如静态类变量和静态方法

    2.类的静态方法不能访问实例变量

    3.实例方法可以访问实例变量 和类变量 以及类方法

    所以不再纠结面试官的问法是否正确或者糊涂,只要记住这三点,当多线程下的对象有没有共享资源便一眼可知。然后面试官开始针对链表的操作进行提问,说一个y 型链表如何找出交点,于是将思想跟他说过之后,他觉得可以,继续开始发问,如何删除一个单向链表的某个节点,问题在于如何找到节点,然后如何释放节点,描述一番,说最后一步是p->next=null;然后面试官就说这样就结束了,可能是java用过的完全就不会去释放空间(GC 让人懒惰),面试官说还需要free一下,这方面确实是忘记了。然后就开始问android 的东西,同样问到service,这个当然很简单,然后又开始问我觉得自己对android那方面比较厉害,我遍从布局,到activity和service,开源框架,开源控件,说了一遍,面试官觉得还不错。然后又开始问到一个res下图片drawable-m  下放100×100的图片,实际的访问的像素是多少?针对这个问题,确实平时做的少,于是呢,说不太清楚,然后他告诉我是200,然后说,你可以自己做一下demo试一下。然后又开始问到java 对象的4个引用和作用,这个针对弱和软引用问得比较深,也一一回答出来了。然后开始问到剑指offer里面的内容,多线程下的单例模式,由于最近刚买这本书,也看到这一章,回答的相当不错。然后又开始问到fork这个函数…印象中是创建进程吧(毕竟不是c++程序员)。然后面试官继续问android 里面的context(这里有个问题就是我确定他是applcation的context和activity的context),我先从application 的context进行描述(面试官打住,说不对吧?然后我就问,您刚才问的是那个context。),然后再针对activity 的context进行描述和比较。然后最后一个问题是数组和链表的区别,这个是最常见的问题,然后就描述清楚,然后面试官就说今天就到此结束吧。你还有什么问题?然后我也就问了几个项目沟通方式的问题,差不多1个多小时,挂掉电话,二面结束,心里感觉不适很好,毕竟有一些问题没答上来。

    本次百度面试总结便到此结束,一来自己的基础还不够扎实,二来就是在面试之前没有针对百度移动事业部的产品没有研究(尽管百度手机卫士,百度杀毒等产品确实不是很好用)。这是一次宝贵的面试经验,继续加油。

    相关文章

      网友评论

      • ecd7a169b709:没看出博主哪里基础不扎实啊==,可以请问博主最后去哪里高就了吗==同武汉高校的学生。。
        Themores:@knight92 去了360,后面又跳了。:smile:
      • 孙沪stupid:之前我被猎头推荐到百度面试,我都没敢去,百度电话打了几个,我说在外面旅游😅😅然后我就消失了。
        Themores:@stupidwho 😄😄..有机会都不去.浪费呀

      本文标题:百度面试经验

      本文链接:https://www.haomeiwen.com/subject/gjqiqttx.html