Android学习大纲

JAVA

容器(HashMapHashSetLinkedListArrayList、数组等)

需要了解其实现原理,还要灵活运⽤,如:⾃⼰实现 LinkedList 、两个栈实现
⼀个队列,数组实现栈,队列实现栈等。
HashMap HashTable CurrentHashMap 的核⼼区别(并发),其次内部
数据结构的实现、扩容、存取操作,再深⼀点 哈希碰撞,哈希计算,哈希映
射,为什么是头插法,扩容为什么是 2 的幂次等。
参考
JAVA 容器 - ⾃问⾃答学 HashMap
https://www.jianshu.com/p/32f67f9e71b5
什么是 HashMap
https://juejin.im/post/5a215783f265da431d3c7bba
从源码⻆度认识 ArrayList LinkedList HashMap
https://www.jianshu.com/p/f174d49b391c

内存模型

参考
理解 Java 内存模型
https://juejin.im/post/5bf2977751882505d840321d
你了解 Java 内存模型么( Java7 8 9 内存模型的区别)
https://blog.csdn.net/laomo_bible/article/details/83067810

垃圾回收算法(JVM

JVM 类加载机制、垃圾回收算法对⽐、 Java 虚拟机结构 当你讲到分代回收算法的时候,不免会被追问到新⽣对象是怎么从年轻代到⽼
年代的,以及可以作为 root 结点的对象有哪些两个问题。
1 、谈谈对 JVM 的理解 ?
2 JVM 内存区域,开线程影响哪块区域内存?
3 、对 Dalvik ART 虚拟机有什么了解?对⽐?
ART 的机制与 Dalvik 不同。
Dalvik 下,应⽤每次运⾏的时候,字节码都需要通过即时编译器( just in
time JIT )转换为机器码,这会拖慢应⽤的运⾏效率。
⽽在 ART 环境中,应⽤在第⼀次安装的时候,字节码就会预先编译成机器
码,极⼤的提⾼了程序的运⾏效率,同时减少了⼿机的耗电量,使其成为真正
的本地应⽤。这个过程叫做预编译( AOT,Ahead-Of-Time )。这样的话,应
⽤的启动 ( ⾸次 ) 和执⾏都会变得更加快速。
优点:
系统性能的显著提升。
应⽤启动更快、运⾏更快、体验更流畅、触感反馈更及时。
更⻓的电池续航能⼒。
⽀持更低的硬件。
缺点:
机器码占⽤的存储空间更⼤,字节码变为机器码之后,可能会增加
10%-20% (不过在应⽤包中,可执⾏的代码常常只是⼀部分。⽐如最新
Google+ APK 28.3 MB ,但是代码只有 6.9 MB 。)
应⽤的安装时间会变⻓。
4 、垃圾回收机制和调⽤ System.gc() 的区别?
参考
Java 虚拟机( JVM )你只要看这⼀篇就够了!
https://blog.csdn.net/qq_41701956/article/details/81664921

类加载过程(需要多看看,重在理解,对于热修复和插件化⽐较重要)

反射

多线程和线程池线程有哪些状态,哪些锁,各种锁的区别

并发编程:
synchronized volatile ReentrantLock CAS 的区别
synchronized 修饰实例⽅法和修饰静态⽅法有啥不⼀样。
sleep wait yield 的区别, wait 的线程如何唤醒它。

HTTPHTTPSTCP/IPSocket通信、三次握⼿四次挥⼿过程

计算机⽹络部分:
1. TCP 有哪些状态
2. 三次握⼿、四次挥⼿。为啥不是三次不是两次
3. HTTPS HTTP 的区别, HTTPS 2.0 3.0
4. 浏览器输⼊⼀个 URL 按下回⻋⽹络传输的流程?
5. 问的深⼀点的可能涉及到⽹络架构,每层有什么协议, FTP 相关原理,
例: TCP 建⽴连接后,发包频率是怎么样的?

设计模式(六⼤基本原则、项⽬中常⽤的设计模式、⼿写单例等)

⽣产者模式和消费者模式的区别?
单例模式双重加锁,为什么这样做?
知道的设计模式有哪些?
项⽬中常⽤的设计模式有哪些?
⼿写⽣产者、消费者模式。
⼿写观察者模式代码。
适配器模式、装饰者模式、外观模式的异同?
谈谈对 java 状态机的理解。
谈谈应⽤更新(灰度、强制更新、分区更新?)

断点续传

Java 四⼤引⽤

强引⽤、软引⽤、弱引⽤、虚引⽤的区别以及使⽤场景。
强引⽤置为 null ,会不会被回收?
稍微问的深⼀些的⾯试官会和内存泄漏检测原理以及垃圾回收糅杂在⼀
起。

Java 的泛型, 和 的区别

问到泛型、泛型擦除、通配符相关的东⻄

 finalfinallyfinalize 的区别13. 接⼝、抽象类的区别

Android 

⾃定义 View

1. ViewGroup 绘制顺序 (例:⾃定义 ViewGroup 如何实现 FlowLayout
如何实现 FlowLayout 调换顺序)  
2. ⾃定义 View 如何实现打桌球效果;
3. ⾃定义 View 如何实现拉⼸效果,⻉瑟尔曲线原理实现?

事件拦截分发

事件分发已经不是直接让你讲了,会给你具体的场景,⽐如 A 嵌套 B B
C ,从 C 中⼼按下,⼀下滑出到 A ,事件分发的过程,这⾥⾯肯定会有
ACTION_CANCEL 的相关调⽤时机。

解决过的⼀些性能问题,在项⽬中的实际运⽤。

性能优化⼯具

(TraceView Systrace 、调试 GPU 过度绘制 & GPU 呈现模式分析、
Hierarchy Viewer MAT Memory Monitor & Heap Viewer & Allocation
Tracker 等)

性能优化 (讲讲你⾃⼰项⽬中做过的性能优化)

1. ⽹络: API 优化、流量优化、弱⽹优化
2. 内存: OOM 处理、内存泄漏、内存检测、分析、 Bitmap
,LeakCanary 原理,什么检测内存泄漏需要两次?
3. 绘制  
4. 电量: WeakLock 机制、 JobScheduler 机制
5. APK 瘦身 ( APK 瘦身是怎么做的,只⽤ armabi-v7a 没有什么问题么?
APK 瘦身这个基本是 100% 被⾯试问到,可能是我简历上提到的原
因。)
6. 内存抖动
7. 内存泄漏
8. 卡顿 { 如何检测卡顿,卡顿原理是什么,怎么判断⻚⾯响应卡顿还是逻辑 8.
处理造成的卡顿 } BlockCanary 的原理  
9. 布局优化、过度渲染处理、 ANR 处理、监控、埋点、 Crash 上传。
10. 启动优化

Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP

缓存⾃⼰如何实现(LRUCache 原理)

SurfaceViewTextureViewGLSurfaceView 区别及使⽤场景

动画、差值器、估值器

Android 中的 View 动画和属性动画 - 简书、 Android 动画 介绍与使⽤)
属性动画、补间动画、帧动画的区别和使⽤场景

MVCMVPMVVM

相互间的区别和各种使⽤场景,如何选择适合⾃⼰的开发架构。

HandlerThreadLocalAsyncTaskIntentService 原理及应⽤

Handler 机制原理, IdleHandler 什么时候调⽤。

GradleGroovy 语法、Gradle 插件开发基础)

热修复、插件化

1. 谈谈对 ClassLoader 的理解
2. 双亲委托机制的好处
3. ⾃定义 ClassLoader
4. 插件化为什么会出现,如何代码加载,资源加载,代理 Hook

组件化架构思路  

1. 如何从⼀个⽼项⽬⼀步步实现组件化,主要问思路,考察架构能⼒和思考
能⼒。(需要考虑很多,每⼀步做什么,顺序很重要)
2. 组件化和模块化的理解与区别?

系统打包流程

Android 有哪些存储数据的⽅式。

SharedPrefrence 源码和问题点;

sqlite 相关

1. sqlite 升级,增加字段的语句
2. 数据库框架对⽐和源码分析
3. 数据库优化及数据迁移问题
4. getWritableDatabase getReadableDatabase 的区别

如何判断⼀个 APP 在前台还是后台?

混合开发

1. Hybrid 做过吗? 例: Android 通过 WebView 调⽤ JS 代码 例: JS 通过
WebView 调⽤ Android 代码;
2. Hybrid 通信原理是什么,有做研究吗?
3. 说说你⽤过的混合开发技术有哪些?各有什么优缺点?

Android Framework

AMS PMS

Activity 启动流程,App 启动流程

 Binder 机制(IPCAIDL 的使⽤)

讲讲 Linux 上的 IPC 通信, Binder 有什么优势, Android 上有哪些多进程通
信机制 ?
1. 项⽬中遇⻅了什么多进程场景?
2. AIDL 是什么?解决了什么问题?
3. 谈谈对进程共享和线程安全的认知?
为什么使⽤ Parcelable,好处是什么?

Android 图像显示相关流程,Vsync 信号等

三⽅源码

Glide :加载、缓存、LRU 算法

( 如何⾃⼰设计⼀个⼤图加载框架 )
LRUCache 原理)

EventBus

LeakCanary

ARouter

重点: Router 原理,如何实现组件间的通信,组件化平级调⽤数据的⽅式。

插件化(不同插件化机制原理与流派,优缺点。局限性)

热修复

RXJava

RxJava 的线程切换原理)

Retrofit

Retrofit OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么
实现的)

OkHttp

1 OkHttp 源码,⽹络缓存
2 、如果从⽹络加载⼀个 10M 的图⽚,说下注意事项  

算法与数据结构

单链表:反转、插⼊、删除

双链表:插⼊、删除

⼿写常⻅排序、归并排序、堆排序

⼆叉树前序、中序、后序遍历

最⼤ K 问题

⼴度、深度优先搜索算法

String int

核⼼算法就三⾏代码,不过临界条件很多,除了判空,还需要注意负数、
Integer 的最⼤最⼩值边界等;

如何判断⼀个单链表有环?

链表翻转;

快排;

100 亿个单词,找出出现频率最⾼的单词。要求⼏种⽅案;

链表每 k 位逆序;

镜像⼆叉树;

找出⼀个⽆序数组中出现超过⼀半次数的数字;

计算⼆叉树的最⼤深度,要求⾮递归算法。

String ⽅式计算加法。

项⽬&HR

项⽬开发中遇到的最⼤的⼀个难题和挑战,你是如何解决的。(95% 会问到)

说说你开发最⼤的优势点(95% 会问到)

你为什么会离开上家公司

你的缺点是什么?

你能给公司带来什么效益?

你对未来的职业规划?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值