本资料汇集了百度公司往年的Android开发工程师面试题目,涵盖基础知识与实际应用等多个方面,旨在帮助求职者准备技术面试。
### 百度校园招聘历年经典面试题汇总:Android岗
#### 1. MVP模式的优缺点
- **优点**:
- **低耦合**:将业务逻辑与UI分离,提高了代码的可维护性。
- **易于测试**:Presenter层可以方便地进行单元测试。
- **复用性**:Presenter和Model可以被多个View重用。
- **缺点**:
- **增加复杂度**:相对于简单的MVC或MVVM模式,MVP引入了更多的类,增加了系统的复杂度。
- **视图依赖**:View层对Presenter有一定的依赖,这在某些情况下可能会导致不易于切换不同的UI框架。
- **生命周期管理**:需要手动处理Activity或Fragment的生命周期与Presenter的关联。
#### 2. 图片压缩怎么做
- **质量压缩**:使用Bitmap的`compress()`方法来调整图片的质量参数。
- **尺寸压缩**:通过计算合适的采样率来减少图片大小。
- **格式选择**:根据应用场景选择不同的图片格式,如JPEG适用于照片,PNG适合透明背景的图像。
#### 3. 图片缓存怎么做,解释LruCache算法
- **LruCache**(Least Recently Used Cache)是一种基于最近最少使用原则实现的缓存机制。在Android中,通常用于缓存频繁访问的大对象,如图片。
- **实现**:当缓存容量达到设定值时,最久未使用的项会被移除以释放空间。
#### 4. HTTP协议简介
- **HTTP**(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议。
- **工作原理**:客户端发送请求至服务器,服务器接收请求并返回响应。
#### 5. 常用排序算法及其时间、空间复杂度
- **冒泡排序**:时间复杂度O(n^2),空间复杂度O(1)。
- **快速排序**:平均时间复杂度O(n log n),空间复杂度O(log n)。
- **归并排序**:时间复杂度O(n log n),空间复杂度O(n)。
#### 6. Java中多态的表现
- **多态**是面向对象编程的一个重要特性,允许子类继承父类,并覆盖父类的方法。
- **实现方式**:继承和接口实现。
#### 7. 抽象类和接口的异同
- **相同点**:都不能实例化。
- **不同点**:
- 抽象类可以有构造函数和部分实现的方法,而接口只能包含公共静态常量和抽象方法。
- 类可以实现多个接口,但只能继承一个抽象类。
#### 8. Android Service与广播
- **Service**:后台运行的任务,与用户界面分离。
- **广播**:一种发布订阅模式,用于不同组件之间的消息传递。
#### 9. 如何收到推送通知
- **方案**:使用Google Cloud Messaging (GCM) 或 Firebase Cloud Messaging (FCM)。
- **保持活跃**:即使应用处于关闭状态也能接收推送通知。
#### 10. 开源框架了解
- **RxJava**:响应式编程框架。
- **Dagger**:依赖注入框架。
- **Room**:SQLite数据库的封装。