安卓面试提纲

项目介绍

  • 明确项目是做什么的
  • 明确项目的价值
  • 明确项目的功能
  • 项目的整体架构
  • 明确项目的技术
  • 个人在项目中承担的角色
  • 项目的优缺点
  • 项目重构的建议
  • 在项目中的技术成长

Java基础

反射机制

异常的分类和处理机制

SparseArray和ArrayMap

SparceArray在存取数据时采用二分查找法

SparceArray是按key值大小进行排列的,避免自己主动装箱的过程

适用:
1、数据量在千级内
2、key是int型
LongSparceArray保存key为long型的

ArrayMap
适用:
1、数据量在千级内
2、数据结构类型为Map类型

HashMap

HashMap取数据是通过遍历Entry[]来得到相应的元素

HashMap 内部实现原理

key可否为null(可以)

key如果为空怎么处理

HashMap 默认初始化大小(16),如何扩容

是否线程安全

并发情况下会出现什么问题

hash() eque() 方法 关系

线程相关

同步 异步 区别

说下并发和并行什么区别

并发(concurrency)和并行(parallellism)是:

解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

wait() 方法和sleep()方法区别

sleep():只让出CPU,不会释放同步资源锁
wait():让出同步资源锁,需用notify()唤醒。让之前调用wait的线程有权重新参与线程的调度

CAS机制

乐观派,不加锁
Compare And Swap 即比较交换
核心思想:执行函数:CAS(V,E,N)
V表示要更新的变量
E表示预期值
N表示新值
CAS是一条CPU的原子指令,原子指令必须是连续的

线程池

泛型 extend super 区别

介绍下了解过的垃圾回收算法

Android

Activity、Fragment

Service

NDK

多线程和并发

线程的几种状态

wait和sleep的区别

synchronized的实现原理以及锁优化

在静态方法与对象方法的区别

我们怎么得到所需要的信息?

HashMap是否线程安全

HashTable如何加锁

线程池的种类,区别和使用场景?

分析线程池的实现原理和线程的调度过程?

ThreadLocal原理,用的时候需要注意什么?

内存泄漏和ANR

内存泄漏和内存溢出的区别

如何分析

项目中第三方

  • IM
  • 推送
  • 分享
  • 直播
  • RxJava
  • 支付

扩展

团队如何协作

Kotlin

Flutter

ReactNative

数据库

设计模式

MVC、MVP、MVVM

单例模式

工厂模式

观察者模式

算法与数据结构

排序算法

冒泡的过程,复杂度

快速排序的过程,复杂度

是否有现成的排序可以直接用

Arrays.sort实现原理和Collection实现原理

红黑树

查找算法

二分查找法

二叉树的遍历方式有几种 (前序,中序 ,后序 让举例说明下 或随便画颗树让其写一下遍历顺序) ? 可一进步考察 如写个前序遍历的伪代码

JVM

内存模型

从内存模型的角度解释方法调用时,

引用传递与值传递的区别

什么情况下会内存溢出

JVM垃圾回收机制

何时触发MinorGC等操作

一次完整的 GC 流程(从 ygc 到 fgc)是怎样的

各种回收算法

类的实例化顺序