5.26 海能达安卓开发面试(5.27二面)

  1. 对安卓有什么理解

安卓(Android)是由Google开发的基于Linux内核的开源移动操作系统,主要用于智能手机、平板电脑等触屏移动设备。主要特点包括:

  • 使用Java/Kotlin作为主要开发语言
  • 基于Dalvik/ART虚拟机运行应用
  • 采用组件化架构设计(Activity, Service, BroadcastReceiver, ContentProvider)
  • 提供丰富的API支持硬件功能调用
  • 具有完善的权限管理系统
  • 支持多任务处理和后台服务
  1. Java的回收机制

Java使用自动垃圾回收(GC)机制管理内存,主要特点:

  • 基于"可达性分析算法"判断对象是否存活
  • 主要回收堆内存中的对象
  • 使用分代收集策略(新生代/老年代)
  • 常见GC算法:标记-清除、标记-整理、复制算法
  • 触发条件:新生代Eden区满触发Minor GC,老年代满触发Full GC
  • System.gc()只是建议而非强制进行GC
  1. JVM的内存模型

JVM内存主要分为以下几个区域:

  • 方法区(Method Area):存储类信息、常量、静态变量等
  • 堆(Heap):对象实例存储区域,GC主要工作区
  • 虚拟机栈(VM Stack):线程私有,存储局部变量表、操作数栈等
  • 本地方法栈(Native Method Stack):为Native方法服务
  • 程序计数器(PC Register):线程私有,指示当前线程执行位置

Java 8后用元空间(Metaspace)替代了永久代(PermGen)

  1. 类的加载机制

类加载过程分为以下阶段:

  1. 加载:查找并加载类的二进制数据
  2. 验证:确保类文件格式正确
  3. 准备:为静态变量分配内存并设置默认值
  4. 解析:将符号引用转换为直接引用
  5. 初始化:执行静态代码块和静态变量赋值

类加载器采用双亲委派模型:

  • Bootstrap ClassLoader
  • Extension ClassLoader
  • Application ClassLoader
  1. Java的四种引用类型

  1. 强引用(Strong Reference):最常见的引用,只要强引用存在,对象就不会被回收

  2. 软引用(Soft Reference):内存不足时会被回收,适合缓存实现

  3. 弱引用(Weak Reference):只要发生GC就会被回收

  4. 虚引用(Phantom Reference):最弱的引用,主要用于跟踪对象被回收的状态

  5. 开闭原则讲一下


开闭原则(Open-Closed Principle, OCP)是SOLID原则之一,定义:

  • 对扩展开放:模块行为可以被扩展
  • 对修改关闭:模块源代码不应被修改

实现方式:

  • 使用抽象和接口
  • 通过继承和多态实现扩展
  • 策略模式、模板方法模式等设计模式的应用
  1. 最熟悉的两个设计模式

单例模式(Singleton)

  • 确保一个类只有一个实例
  • 提供全局访问点
  • 实现方式:饿汉式、懒汉式(双重检查锁定)、静态内部类、枚举

观察者模式(Observer)

  • 定义对象间一对多的依赖关系
  • 主题(Subject)状态变化时自动通知观察者
  • Java中可用java.util.Observable和Observer实现
  • Android中广泛用于事件处理(如点击事件)
  1. Activity的生命周期

Android Activity生命周期主要回调方法:

  1. onCreate() - 首次创建时调用

  2. onStart() - 变为用户可见时调用

  3. onResume() - 开始与用户交互时调用

  4. onPause() - 失去焦点但仍可见时调用

  5. onStop() - 完全不可见时调用

  6. onDestroy() - 被销毁前调用

  7. onRestart() - 从停止状态重新启动时调用

  8. 协程和线程是什么


线程(Thread)

  • 操作系统调度的基本单位
  • 有独立栈和程序计数器
  • 线程切换开销较大
  • 多线程编程需要考虑同步问题

协程(Coroutine)

  • 轻量级线程,用户态调度
  • 协程切换开销小
  • 可挂起和恢复执行
  • 简化异步编程模型
  • Kotlin协程通过挂起函数实现非阻塞异步编程
  1. 如果if太多的话应该怎么去优化

优化过多if语句的方法:

  1. 策略模式:将不同分支逻辑封装到不同策略类中

  2. 状态模式:根据对象状态改变行为

  3. 多态:利用继承和方法重写替代条件判断

  4. 表驱动法:使用Map或数组存储条件与处理的映射

  5. 责任链模式:将条件判断分散到处理链的各节点

  6. 枚举+方法:将条件逻辑封装到枚举方法中

  7. 工厂模式:根据条件创建不同对象处理

  8. 接口类和抽象类的区别是什么


特性接口(Interface)抽象类(Abstract Class)
实例化不能实例化不能实例化
方法实现Java 8前不能有实现可以有具体方法实现
变量默认public static final无限制
继承可多继承接口只能单继承
构造方法不能有可以有
访问修饰符默认public任意
设计目的定义行为契约提供通用实现基础
Java 8+支持默认方法和静态方法-
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
林寻
下载 APP