百度+腾讯面经_Android
百度一面
面试中遇到的问题:
- MVC模式是什么意思,Model 是否能够直接与 View 进行交互。
- 什么是进程,如何创建进程,有几种实现进程通信的方法。
- 详细说了下 ContentProvider。
- sychronized 与 ReenLock 的区别。
- 出了一道关于锁的题目(知识点:对象锁和类锁)。
- 用过什么设计模式,说了一堆,然后叫我实现***模式(手写了静态***)。
- 什么是内存泄露与内存溢出,Android有哪些内存泄露,面试官着重问了,Handler的内存泄露和解决办法。
- 由于在说内存泄露的时候多说了下 GCRoot,就问了下 GCRoots 有哪些。
- Looper 的原理。
- handle.postDelayed() 中如何实现延迟发送的 (没用过,我只好跟面试官说如果是我我会如何实现,最后回去看了下源码,发现分析对了)。
- Android 的四种 LaunchMode
- 两种 Service 的区别及其生命周期,Service 是否是全局的(感觉考点是:访问的 Service 是唯一实例,被创建过一次,下一次再启动就不会调用 onCreate())
- HandlerThread 与 IntentService原理。
- ThreadLocal 的原理。
- HashMap 的原理,解决 Hash 冲突有哪几种方法。
出了一道关于 Set 的题目,创建两个 Person 对象,存入 Set 中,请问 set.size() (考点:重写 equals() 与 hashCode()) - 逆序链表。(手写)
- 线程池 (说了输入参数、四个预置的ThreadPool 的特点,线程池的源码),面试官一直问我 SchedulerThreadPool 和其他 ThreadPool 的区别,引导说 SchedulerThreadPool 可以实现 delayed (没看过源码)。
- UDP 与 TCP 的区别,三次握手机制(手写)
- HTTP 和 HTTPS 的区别
20 .问我面过几家公司,我只能说笔试完的公司都没有发给我通知面试 - -,考官很惊讶的说你居然是第一面。。(难道是被鄙视了。。。)
面试官很友善,不会的题目会引导你。一面问的都是基础知识,没有问 Android 框架源码、项目难点、难的算法。。。
百度二面
问题:
- 自我介绍(每个人不同)
- 讲解下你在 Github 上的项目(我做了一个网络小说阅读器)
- 你知道哪些设计模式,这些设计模式在Android中的使用,然后叫我写了个观察者模式。
- Android的 LaunchMode (面试官问这道问题的时候,附加前句是,那我问你个简单的问题,听到这句话当时感觉自己GG了- -)
- 举一个例子,说明你的学习能力(这个没准备。。瞎说了一通)
- 知道几种单例模式的写法,写一个单例模式,为什么使用这种写法。(我写了枚举的写法,然后从单例的线程安全,如何破坏单例模式进行分析)
- 最后问了个面试官,如何看待这次百度全面禁止 React Native - -。。。
关于第三点设计模式在Android中的使用,之前没准备,脑回路没转过来,所以我就跟面试官说,在Android的框架中用到的设计模式比较多,然后讲Glide、OkHttp、Retrofit、RxJava 源码中是如何使用设计模式的。回去想了下,Android源码中的设计模式,大概总结了
如下几点:
- Adapter:适配器模式。
- Binder: AIDL 生成的***模式。
- AlertDialog: 建造者模式。
- View的事件分发: 责任链模式。
- LayoutInflater: 单例模式。
- ListView源码: 观察者模式。
- File文件流: 装饰者模式。
- ExecutorSerivce: 对于创建 Thread 的简单工厂模式。
- 属性动画:策略模式
当然这只是一部分,各位牛油可以自己分析分析。。
这次面试我挖了挺多的坑,面试官都没接。只面试了我20分钟,就叫我走了。。。当时感觉自己 GG 了,为嘛啥都不问咧,问的都回答上来了呀,难道是走个过场。。。。然鹅,当天晚上居然收到了,二面通过的消息,想了想,面试都是玄学,唉。。。。
百度三面
面试的问题总结:
- 自我介绍
- 讲解项目
- 谈一了追求新技术的问题
项目部分:
- 面试官首先问我在 github 上的项目的缺点,我说了 xxx 巴拉巴拉。其中涉及到了绘制方式复杂造成视图的卡顿问题,然后我说成了过度绘制- -。然后他就问,如果在一个 xml 中每个 View 都是必要的,应该如何优化卡顿问题。(感觉回答的不太好)
- 由于图片加载造成了OOM问题,应该如何解决。我说了压缩 Bitmap 和使用 WeakReference,Lru。他就问如果每个图片都是必须的,并且已经压缩了。那么该如何解决 OOM,当时只想到对 Java 堆进行扩容。
- 用10个字说出我个人项目的核心代码 (我说了一堆,他说我没有 GET 到他的点。。尴尬,这不是我的项目么 - -,为什么我的项目的核心代码,我自己都不知道 Orz)
- 你的项目支持的版本支持到 Android 几,我说 6.0 的权限没有做,所以只支持到 6.0 以下。他问我为什么没做,现在都出到 O 了,你咋还没支持到6.0 咧,我说这是之后的内容,不是我非常重要的优先级。然后问我各版本 Android 的特点,如何适配。
说我为什么研究框架的源码,我说是为了爬坑,那你在框架上遇到过哪些坑。 - 问我在项目中如何使用 RxJava(链式调用,线程切换,背压) ,还有冷热发射器(RxBus),说我太过推崇 Rx 系的东西,但是又对这个框架大材小用,然后问我 Rx 这个思想是从哪里来的? (猜了个微软,他说从 js 中来的)
- 说说你在项目中是如何使用 MVP 模式的。
- 说说你对 lambda 表达式的优缺点(项目中用到了),然后谈他们团队对于 lambda 的理解。
- 说说你对 Android O 的了解,我说完之后,他跟我说他自己也不知道。(真会开玩笑。。。)
聊天的问题:
- 如何推动一项新技术,在团队之中使用。我说了 xxx ,他说没有 GET 到他的点 - -。
- 换了个问题问我,如果团队给你一项任务,你要在一周内完成,但是如果你使用新技术最短需要在两周内完成,应该怎么办。
反正之后都是这类的问题 - -,聊了好久。。
最后在我提问的时候,又开始聊起来了。不知道是聊天中的哪一句话打动了他,他就跟我说刚才你都没有 GET 到我的点,你现在这句话才是我要的 (???,额。。。Orz)
好多问题没有遇到过,总结下来感觉回答的不太好。。
自我总结:
- Android 基础要打好。
- 对自己的项目要十分的了解。
腾讯面试,跟以前面试的流程完全不一样,有点懵逼。。。在成都腾讯大厦面的,基本上每个人都给了2面机会,但是问的知识点比较少,所以面经就附带了,当然最后跪了。。。。
腾讯一面(30分钟)
面试官全程问项目,大概问题是这样的:
- 自我介绍,边介绍边画我的简历。。
- 说出你项目中,认为最难的项目。
- 项目中的难点在哪里,如何实现的。(这里说了一堆)
- 你项目中存在什么问题,我说了一个上下滑动卡顿的问题(自制的ListView,用来解决小说翻页问题),我当时没修复这个问题。
- 那你觉得可能出现这个问题的可能原因是什么,如何检测、分析。(这个问题考个人的解决方式,就不说了)
- 如何解决死锁,项目中遇到过死锁的问题没有。(没遇到过)
- MVP 与 MVC 模式
除了项目,基础问题都没问。。。
一面完,问了一个一起面试的,他说他二面大概10分钟,几个问题就结束了。
腾讯二面(10分钟)
问题如下:
- 冒泡排序。
- Java的基础类型的长度。
- String是否可以使用 switch,原理是什么。
- RxJava 源码 (我说的时候,面试官全程看别人,当时感到自己凉了。。)
- 功能题:如何实现一个文件的多并发下载。(这个功能没实现过,答了可能的实现方式,但是深入到下载优化的时候,没回答好)
第五题没回答好,所以最后感觉,跪的不冤。。。。总体而言,腾讯比较偏于项目。