百度App研发部一面(电话面试)
1.是否了解快速排序?说一下快速排序的思想。
答:balabala。这里就不详述了,如果不清楚可以去网上找一下。
备注:快排推荐这篇文章https://www.cnblogs.com/CBDoctor/p/4077574.html
2.有看过Java源码吗?
答:只看过HashMap,ArrayList之类的源码(开始慌了)
追问:2.1 能否说一下HashMap的源码实现?
答:balabalabala
追问:2.2 能否描述一下HashMap是如何求哈希值的?
答:balabalabala
追问:2.3 想象现在有这样一个场景,我希望存入HashMap的key值范围在0-1000,但是其中大部分的key值范围都在200-300之间,请给出一个求哈希值的算法,使得哈希分布比较均匀(哈希冲突尽可能少)。
答:balabalabala
3.你的简历里面有提到对序列化了解比较深刻,能否介绍一下序列化相关的问题?
答:balabalabala
追问: 3.1 说一说Serializable跟Parcelable的相同点跟不同点吧。
答:balabalabala
追问: 3.2 Serializable用到了反射,那Parcelable是怎么做的呢,为什么Parcelable性能会比Serializable要好?
答:balabalabala
追问: 3.3 假设有一个进程A,一个进程B,进程A有个对象,现在需要进程B也能够获取该对象,有哪些方法可以做到?
答:balabalabala
4.来问一些Android的问题吧。你简历上写了Activity的启动模式,能否说一下,包括你了解的各种Flag?
答:balabalabala
追问: 4.1 你说项目里面有实际用到,能否描述一下具体情况?
答:balabalabala
追问: 4.2 既然你项目里有用到SingleInstance,假设现在有这样一个场景:有4个Activity ABCD,其中B是SingleInstance模式,其他都是Standard模式。如果A启动B,B启动C,C启动D,这时候我连续按返回键,会出现什么现象?
答:balabalabala
追问: 4.3 确定吗?
答:balabalabala
追问: 4.4 TaskAffinity属性了解吧?假设有这样一个场景:Activity A属于一个Application,Activity B属于另一个Application,Activity B指定TaskAffinity属性值为Activity A的包名,并且Activity B是SingleTask模式。如果从Activity A启动Activity B,Activity B会进入到哪个Activity栈?
答:会进入Activity A所在的Activity栈。
追问: 4.5 如果Activity B是Standard模式呢?
答:这时候TaskAffinity属性不作用,仍然会进入Activity A所在的Activity栈。(问题问的不太好,但是我表达出了我了解这个知识点。追问到这里,面试官终于肯定了我一次,不容易啊o(╥﹏╥)o)
5.自定义View这部分可以描述一下吗?
答:大概分为onMeasure,onLayout,onDraw三步。
追问:5.1 可以描述具体一点吗?每一步都做了什么?
答:
追问:5.2 你在项目里面应该用到过自定义View吧,具体是怎么用的呢?用的时候需要注意些什么问题?
答:
6.Android消息机制可以简单说一下吗?
答:
追问:6.1 你提到了消息被取出来后,会被传回给发送消息的handler,这个是怎么做到的呢?(这个问题实际上是想看看你是否真的看过源码)
答:message里面有个target变量,这个变量就是发送message的那个handler对象,通过这个target就可以执行该handler的handleMessage方法了。
7.你在项目里面用到了动画,说一下你对动画的理解吧。
答:
追问:7.1 项目里面具体是怎么用的呢?比如说你用了属性动画,能不能详细描述一下你是如何一步一步操作属性来达到对应的动画效果的?
答:
8.TCP的三次握手了解吗?
答:
追问: 8.1 为什么是三次握手而不是4次或者其他次数的握手呢?
答:
追问: 8.2 之前你说有做过java web,服务器通信返回的状态码有哪些,可以说一下吗?
答:200成功码,404找不到请求资源,503错误,其他的记不清了。
备注:常见的状态码分为2xx,3xx,4xx,5xx系列。其中2xx为成功状态码,比如200ok,204not content,206Partial content;3xx为重定向系列,比如301永久重定向,302临时重定向,303,304,307等;4xx为客户端错误,比如400Bad request,401Unauthorized,403Forbidden,404Not found等;5xx系列为服务器错误,比如500Internal Server Error,503Service Unavailable等。
9.OK,那今天的一面就到这里,你还有什么想问我的吗?(面试惯例,都懂的)
答:
面试总结:第一次面试BAT级别的大厂。跟非大厂的面试比起来,有几点很明显的区别:
- 更加注重基础。(算法,数据结构)
- 更关注你解决一个问题的思路而不是结果。
- 对一个知识点会一直追问,直到满意或者你不会为止。
- 考察一个知识点的时候,会结合实际问题考察。
- 针对一个知识点,基本不会问应用的问题,而是问你源码级的东西。
Ps.一面过了,不过已经接了另一家公司的offer,也已经回了青岛,所以不打算去北京二面,直接拒了。蚂蚁金服那边也给了面试邀请,同样因为没法去北京,也拒了。
虽然遗憾,但是经过多家公司的面试,目前对自己的水平已经了解的差不多,BAT还是够呛,就算面试侥幸通过也只会是校招水平的定级。深入考虑了下,还是决定去心仪的公司锻炼一下,暂时就不考虑毁约了。