5.26 海能达安卓开发面试(5.27二面)
- 对安卓有什么理解
安卓(Android)是由Google开发的基于Linux内核的开源移动操作系统,主要用于智能手机、平板电脑等触屏移动设备。主要特点包括:
- 使用Java/Kotlin作为主要开发语言
- 基于Dalvik/ART虚拟机运行应用
- 采用组件化架构设计(Activity, Service, BroadcastReceiver, ContentProvider)
- 提供丰富的API支持硬件功能调用
- 具有完善的权限管理系统
- 支持多任务处理和后台服务
- Java的回收机制
Java使用自动垃圾回收(GC)机制管理内存,主要特点:
- 基于"可达性分析算法"判断对象是否存活
- 主要回收堆内存中的对象
- 使用分代收集策略(新生代/老年代)
- 常见GC算法:标记-清除、标记-整理、复制算法
- 触发条件:新生代Eden区满触发Minor GC,老年代满触发Full GC
- System.gc()只是建议而非强制进行GC
- JVM的内存模型
JVM内存主要分为以下几个区域:
- 方法区(Method Area):存储类信息、常量、静态变量等
- 堆(Heap):对象实例存储区域,GC主要工作区
- 虚拟机栈(VM Stack):线程私有,存储局部变量表、操作数栈等
- 本地方法栈(Native Method Stack):为Native方法服务
- 程序计数器(PC Register):线程私有,指示当前线程执行位置
Java 8后用元空间(Metaspace)替代了永久代(PermGen)
- 类的加载机制
类加载过程分为以下阶段:
- 加载:查找并加载类的二进制数据
- 验证:确保类文件格式正确
- 准备:为静态变量分配内存并设置默认值
- 解析:将符号引用转换为直接引用
- 初始化:执行静态代码块和静态变量赋值
类加载器采用双亲委派模型:
- Bootstrap ClassLoader
- Extension ClassLoader
- Application ClassLoader
- Java的四种引用类型
-
强引用(Strong Reference):最常见的引用,只要强引用存在,对象就不会被回收
-
软引用(Soft Reference):内存不足时会被回收,适合缓存实现
-
弱引用(Weak Reference):只要发生GC就会被回收
-
虚引用(Phantom Reference):最弱的引用,主要用于跟踪对象被回收的状态
-
开闭原则讲一下
开闭原则(Open-Closed Principle, OCP)是SOLID原则之一,定义:
- 对扩展开放:模块行为可以被扩展
- 对修改关闭:模块源代码不应被修改
实现方式:
- 使用抽象和接口
- 通过继承和多态实现扩展
- 策略模式、模板方法模式等设计模式的应用
- 最熟悉的两个设计模式
单例模式(Singleton):
- 确保一个类只有一个实例
- 提供全局访问点
- 实现方式:饿汉式、懒汉式(双重检查锁定)、静态内部类、枚举
观察者模式(Observer):
- 定义对象间一对多的依赖关系
- 主题(Subject)状态变化时自动通知观察者
- Java中可用java.util.Observable和Observer实现
- Android中广泛用于事件处理(如点击事件)
- Activity的生命周期
Android Activity生命周期主要回调方法:
-
onCreate() - 首次创建时调用
-
onStart() - 变为用户可见时调用
-
onResume() - 开始与用户交互时调用
-
onPause() - 失去焦点但仍可见时调用
-
onStop() - 完全不可见时调用
-
onDestroy() - 被销毁前调用
-
onRestart() - 从停止状态重新启动时调用
-
协程和线程是什么
线程(Thread):
- 操作系统调度的基本单位
- 有独立栈和程序计数器
- 线程切换开销较大
- 多线程编程需要考虑同步问题
协程(Coroutine):
- 轻量级线程,用户态调度
- 协程切换开销小
- 可挂起和恢复执行
- 简化异步编程模型
- Kotlin协程通过挂起函数实现非阻塞异步编程
- 如果if太多的话应该怎么去优化
优化过多if语句的方法:
-
策略模式:将不同分支逻辑封装到不同策略类中
-
状态模式:根据对象状态改变行为
-
多态:利用继承和方法重写替代条件判断
-
表驱动法:使用Map或数组存储条件与处理的映射
-
责任链模式:将条件判断分散到处理链的各节点
-
枚举+方法:将条件逻辑封装到枚举方法中
-
工厂模式:根据条件创建不同对象处理
-
接口类和抽象类的区别是什么
| 特性 | 接口(Interface) | 抽象类(Abstract Class) |
|---|---|---|
| 实例化 | 不能实例化 | 不能实例化 |
| 方法实现 | Java 8前不能有实现 | 可以有具体方法实现 |
| 变量 | 默认public static final | 无限制 |
| 继承 | 可多继承接口 | 只能单继承 |
| 构造方法 | 不能有 | 可以有 |
| 访问修饰符 | 默认public | 任意 |
| 设计目的 | 定义行为契约 | 提供通用实现基础 |
| Java 8+ | 支持默认方法和静态方法 | - |
