2016年9月份Android岗面试经历-百度

面试前

今年8月份的时候,向以下公司投递了简历:百度、腾讯、阿里巴巴、网易、京东,其中京东和阿里巴巴把我笔试给挂了,其余公司的笔试过了。阿里巴巴把我笔试挂了我感觉很坦然,因为笔试题做得实在不好,而京东把我的笔试挂了我就觉得很奇怪,当时大部分题目都做得还可以,只有一道算法题没做出来,后来就没过。不过都是往事了,有空把笔试经历总结一下,下面开始把面试经历好好回忆一下,因为已经过了两个星期,我尽量回忆一下吧。

百度面试

百度一面

百度一面在成都金牛区的一家酒店里,百度在候面区组织面试的人很少,只有两三个人的样子。一面大概持续了三天,技术岗和非技术岗在不同的地点面试。面试大概从早上九点开始,中午12点暂停休息,下午2点继续开始,持续到下午6点,一场面试一般会持续一个小时左右。所以一天大概有6到7批人面试,每一批大概有30人左右,技术岗的一面持续约3天。所以可以估算出成都地区进入一面的人数:

3*7*30=630人。

一面的面试官是个很平易近人的程序员,我进了房间把简历递给他后他并没有细看。(一面和二面的面试官都没怎么细看简历,也许是之前已经看过了电子简历?)

  • 我坐下来后他也并没有要我做自我介绍,而是主动问我什么时候开始做Android的,Java又是什么时候开始学的?我回答说2015年9月份开始自学Android的,也是那个时候开始学Java的。到现在差不多一年了。

  • 然后他问:你Java学得如何?还算熟悉吗?我回答:我Java学得不算熟悉,但是也为了面试多多少少看了一些面试题。(没错,就是这么耿直,然后面试官就笑了,我也笑了。)

  • 气氛就这么轻松下来了,他问:那我们开始吧,先来个简单的,说一下String、StringBuffer和StringBuilder的用法和区别吧。我回答:String的内部实现为final char[],所以每次对现有的字符串修改的话都会新实例化一个String,所以频繁的字符串修改和拼接要用StringBuffer,在单线程环境下用StringBuilder,性能更好,因为可以避免加锁带来的性能损耗。

  • 他问:JDK里面的容器用过吧,把你所熟知的集合列举出来并说一下他们的用处。(不得不说这个问题很考基础,还好我都研究一遍了。。。= =)我回答:ArrayList,LinkedList,Vector,Set,TreeSet,HashMap,TreeMap,LinkedHashMap,HashTable,然后我把他们内部的实现和常用操作的时间复杂度给说了一遍,甚至还把OpenJDK、OracleJDK和Apache Harmony Project JDK内部的实现的差异给说了一下。这个问题的回答有很多细节答错了,比如我把Collection接口和Set接口给弄混了,但是答得很多还到处拓展地讲了一下,面试官好像还比较满意。

  • 他问:你在项目中肯定用到多线程了吧,你们多线程是如何交互的呢?我一下子晕了,不知道”多线程交互“指的是什么,他也有点无奈,就进一步说是主线程和子线程之间的通信,我一下子就明白了,就随口说了一个Handler。

  • 他继续追问:使用Handler要注意什么呢?我答:1、在非主线程中初始化之前要调用Looper.prepare()。2、防止内存泄漏,用WeakReference保存活动或碎片的引用。

  • 他问:学校里学过算法吧,手写一个快速排序吧。我就巴拉巴拉写了一个给他看。

  • 他问:用两个栈实现一个队列。当时我知道这是一个老套路的题了,但是我以前偏偏没认真思考过这个问题,当时马上给出的解时间效率不高,他有些不满意,就一步步引导我,好在我也不觉得紧张,想了想就把结果想出来了。

  • 他问:你在项目里怎么保证应用切入后台,音乐服务不被杀死呢?(我的项目是一个音乐软件的项目)我知道这又是Service保活的老套路,答了两点:1、onStartCommand()返回START_STICKY。2、服务切换成前台服务。 只答了这两点他就没难为我了。

  • 他问:多个Fragment如何共享一个ActionBar呢?如果在MainActivity已经有了一个ActionBar的情况下子Fragment又实例化一个ActionBar会发生什么呢?这个问题我很懵,就瞎扯了会有多个ActionBar重叠。

  • 他问:多个Fragment共享一个ActionBar的情况下,如果想要在不同的Fragment下使用不同的Menu怎么办呢? 然后我就被问傻了,直接说我没接触过这个问题,他就开始告诉我怎么实现,巴拉巴拉说了几句后好像突然意识到我只是个本科生,就笑了笑,切换到下个问题。

  • 他问:你在项目中怎样实现的图片加载呢?我答说用的Picasso。然后他问这个框架看过源码吗,我就回答看过,然后写出了几个主要的类,然后把缓存策略跟他讲了讲(LRU,七分之一可用堆空间,50MB磁盘控件),和缓存的实现也讲了讲(LinkedHashMap,HttpClient的缓存),他看上去好像也不是很了解这个库,就没有多追问。

  • 他问:你在项目中怎样实现内存的优化呢?我回答:主要优化图片的内存占用,首先对图片重新裁剪,根据控件占用的实际像素数对图片进行resize,然后根据服务器上的该类型图片是否有透明通道决定要不要把alpha通道给砍掉。他点了点头,就切换到下个问题。

  • 他问:如果让你实现一个图片加载框架,你打算怎么做?我回答:还是用LinkedHashMap做内存缓存,用图片的URL做主键,做两级缓存。我知道这个问题我答得还不够,但是面试官挺宽容的,没有多刁难我。

  • 他问:你用过sqlite吗?他跟mysql有什么显著的区别吗?这个问题把我难住了,就随口扯了扯,他跟我解释了几句sqlite的表存储在哪,又交流了一下sqlite的性能后,也没有多刁难我。

  • 他问:描述一下Android里面的控件的事件分发过程。我回答:一个事件传递给ViewGroup时,ViewGroup先决定要不要拦截这个事件,如果要拦截,就在onInterceptTouchEvent(MotionEvent e)这个回调用返回true,然后交给这个控件来消费。如果不拦截的话,ViewGroup内部保存了它的孩子View的列表或者数组,然后遍历这个数组逐一询问他们是否要拦截。 当时表述地不是很清楚,面试官确认了几遍就结束了这个问题。

  • 他问:写过JNI吗?我回答:没在项目中写过,平时写过几个demo。然后扯了扯这个JNI写起来很蛋疼,类型不匹配就容易崩,在IDE还不容易看到。他好像有同感的样子,笑了笑,一面的问题就全部结束了。

最后他问还有什么要问他的,我又很搞笑地说:没什么要问的。他就主动扯了扯一些技术方向。我很感谢这位面试官,他最后很关切地问我是不是要回重庆去,我说我要留在这里等面试结果,他就建议我先回重庆去,因为面试结果还要等两天才能出来。

百度二面

两天后我接到百度的二面的通知,我又赶到了成都市。面试地点没有变,二面的人比起一面要少多了,没有看到霸面的同学。二面大概持续了2天左右,每一批的人都要少了很多,我估计进入二面大概有200~300人左右。
二面的面试官没有一面的面试官那么和蔼可亲,他总是面无表情,然后不停地切换到下一个问题。让我手写代码地时候他只是面部表情地盯着他的MacBook。一开始让我做了一个自我介绍,然后马上就开始了面试。

  • 他问:平时用过观察者模式吗?说一下你对观察者模式的理解吧。我就说多个界面同时观察一个数据变化的情况,说了一下观察者模式的实现,就是被观察者保存观察者的列表,有数据变化就遍历这个列表去通知观察者。他好像有点不满意。

  • 他问:Builder模式呢?我就说了一下用Builder模式来实现一个配置参数类的构造,他听得有点懵就把我打住,让我把Builder模式写一遍。我就巴拉巴拉写了一个给他看,他点了点头。

  • 他接下来又让我写了一个快速排序,我有些无奈,一面二面考到同样的题,于是又原样写了一个给他看。

  • 他问:写一个函数,给定一个单链表和头指针和链表的某一个结点,在O(1)的时间内删除这个结点。我思考了一下,觉得O(1)内删除这个结点是不可能的,因为我没法在O(1)内获取到要删除的这个结点的前向结点。我就问他:能否逻辑上删除这个结点,而不是实际删除。他点了点头说可以。我又问他:有没有可能要删除尾结点?他说有可能,我马上就不干了,当即跟他说这不可能,他想了想,笑了笑,就说那就不删除尾结点。

struct Node{
    Node *next;
    int val;
    Node () {next=NULL;}
};
void removeNode(Node*head, Node*target){
    if (!head || !target)
        return;
    if (target->next){
        Node *temp=target->next;
        target->val=target->next->val;
        target->next=temp->next;
        delete(temp);
    }
}
  • 他叫我手写一个回调函数的实现。我就随手写了一个给他看,他点了点头。

  • 他问:HashMap的内部结构?这也是老套路了,我就画了个图给他看。他就没说什么,继续下一题。

  • 他问:解释一下红黑树吧。我当时有些记不得了,就说:1、平衡二叉树。2、插入、删除、查询复杂度O(nlgn)。(这里答错了,当时头有点晕)3、根节点和叶结点是黑节点,从根节点到叶结点经过的黑节点数目相同。(这个也不知道有没有答错,面试官当时也是面无表情。)

  • 他问我对深拷贝和浅拷贝的理解。我就很抖机灵地拿前面那个链表那一题举例,说只拷贝链表地头节点就是浅拷贝,拷贝整个链表就是深拷贝。他笑了笑,没好气地叫我说好一点。我就说:一个对象实际在堆空间中存在,如果只拷贝一个对象的引用,使得多个引用指向同一个堆空间内的对象,这就是浅拷贝。如果拷贝了实际的对象,使得堆空间内有两个对象,就是深拷贝。

  • 他继续追问:怎样实现一个类的深拷贝呢? 这个问题我有点没底气,就说了两个方法。1、定义一个拷贝构造函数,对传入的对象的每个成员进行拷贝。2、实现Cloneable接口。也不知道答得对不对,面试官也没有太多反应。

  • 他让我在纸上写出Fragment的生命周期。 我就巴拉巴拉写了整个过程给他看。

  • 他问:Android内部的WebView用过吧,Android怎样跟js交互呢? 我就直接说我没有接触过HTML5和原生的混合开发。

  • 他问:应用上线后,如果应用出错了,异常信息如何收集呢? 讲真我也没接触过这个问题,但是还是能猜一猜的。我就说,catch到的异常可以getCause()和getMessage(),把这些异常信息写入文件或数据库中,定期打包上传到服务器。他也没说什么。

  • 他问:你这个应用的项目的架构是如何设计的? 我就回答:用的Retrofit+RxAndroid,图片加载用的Picasso。整体是一个MVP架构。他又问这个MVP架构的内部的大体类结构如何,我就写了几个代表性的接口和类,给他演示不同层次间如何通信。

  • 他问:项目如何实现用户个人信息的安全性?我回答说用https,他又追问我对Https的理解。我就说会多几次握手,有一定性能消耗,加密原理上应该是利用了大整数的因式难分解,在传输层和应用层加了一个加密层。

  • 他问:如何实现微信上的一个自定义控件。我刚准备说自定义控件的过程就被他打住了,这个问题有点怪怪的,他主要考察的是我有没有真正地写过一个自定义控件,问了我api如何设计等等。把我给考住了。

然后二面就差不多结束了,他问我有啥要问的。我就随口扯了扯,问他对这个行业的发展趋势看法。他就说Android市场虽然差不多饱和了,高级人才还是缺得很等等。整个二面对手写代码的能力考察得比较频繁,面试官提的问题也更灵活和贴近实战。

百度面试总结

百度的面试总体上来比较正常,考察地范围比较均衡和稳定。所有面试官应该都共用了一个”考察题库“,我甚至可以瞥到他们在纸上列出地题目列表。题目会覆盖到Java基础、Android基础、设计模式、Android项目的实际问题的解决方案、算法和数据结构,经常会碰到经典套路的题目,如果实现刷过这些面试题会很轻松。
百度面试的题目虽然大体上比较稳定,但是不同的面试官还是有自己的考察特点,有的面试官比较和善,会去积极引导你回答问题,有的面试官会喜欢问你项目中的实际问题,而不是纸上谈兵。
最后结果:二面挂了,我虽然觉得二面表现尚可,可是还是挂了,可能我还需要提高吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容