Android面试——个人知识体系构建(持续更新)

目录

1、操作系统

  • 概念

操作系统(Operating System, OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的软件集合。

  • 内存管理

逻辑地址(虚拟地址)、物理地址、分页、分段、页置换算法

  • 线程与进程

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
https://blog.csdn.net/kuangsonghan/article/details/80674777

  • 进程间通信

管道、信号量、共享内存、消息队列、信号、套接字
https://www.cnblogs.com/liugh-wait/p/8533003.html

2、计算机网络

  • TCP/UDP区别
  • TCP三次握手四次挥手
  • TCP如何保证数据不出错
  • Http/Https区别
  • Https详解
  • Token
  • 计算机网络模型、TCP/IP协议五层模型
  • DNS解析
  • Url是如何转换成网页的

3、数据结构

  • 数组与链表在内存中的区别
  • 数组与链表的区别
  • 队列与栈的区别
  • 二叉树详解
  • 二叉树的遍历-前序/中序/后序
  • 红黑树详解
  • 深度优先/广度优先算法

4、算法

  • 动态规划
  • 贪心算法
  • 排序算法
  • Manacher
  • 判断链表有环
  • 链表反序

5、Java

  • 基本数据类型

1 整型 byte(1字节) short (2个字节) int(4个字节) long (8个字节)
2 浮点型 float(4个字节) double(8个字节)
3 逻辑性 boolean(八分之一个字节)
4 字符型 char(2个字节,一个字符能存储下一个中文汉字)

  • int与float区别

int为二进制存储(-2^31 ~ 2^31),float为指数存储
https://blog.csdn.net/C2681595858/article/details/84865920

  • float与double区别

float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间
double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储空间
当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f
例如:float a=1.3;
则会提示不能将double转化成float 这成为窄型转化
如果要用float来修饰的话,则应该使用float a=1.3f
注意float是8位有效数字,第7位数字将会产生四舍五入
所以如果一个float变量 这样定义: float a=1.32344435; 则第7位将产生四舍五入(5及5以下的都将舍去)

  • int和Integer的区别

int是基本数据类型,Integer是封装类,是对象。
注意 -128~127
https://blog.csdn.net/Teacher_Lee_ZZSXT/article/details/79230501

  • 自动装箱拆箱(ArrayList不能使用基本数据类型)

Integer total = 99; //自动装箱
int totalprim = total; //自动拆箱
https://www.cnblogs.com/wang-yaz/p/8516151.html
https://www.cnblogs.com/libinhong/p/10988945.html

  • 原子性
  • 单继承/单根继承
  • 双亲委派模型
  • 深拷贝/浅拷贝
  • 线程同步/线程安全-Volatile/Synchronized/Lock
  • 两者区别-(abstract/interface)(Override/Overload)(wait/sleep)(JDK/JRE)(start/run)
  • 三者区别-(String/StringBuilder/StringBuffer)(final/finally/finallize)(== 、equals、===)
  • 内部类使用外部类局部变量为什么要声明为final
  • GC详解
  • 四种引用(软引用与弱引用的区别)以及软引用实现高速缓存

强引用、软引用、弱引用、虚引用,高速缓存的实际应用
https://blog.csdn.net/he_world/article/details/50543793

  • Java 反射
  • 泛型与泛型擦除
  • HashMap详解
  • 设计模式
  • 生产者消费者模式

手写!!!
https://blog.csdn.net/u011109589/article/details/80519863

6、Android

  • Android四大组件(ABCS)

Activity、BroadCast Receiver、ContentProvider、Service

  • Activity生命周期,横竖屏切换,配置信息更改

onCreate-onStart-onResume-onPause-onStop-onDestroy onRestart
onConfigurationChanged
https://www.cnblogs.com/chenxibobo/p/9646608.html

  • Fragment生命周期

onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy、onDetach
fragment之间使用不同的切换方式时,生命周期的变化 ↓
https://www.jianshu.com/p/c8f34229b6dc←—————

  • Activity与Fragment通信

https://blog.csdn.net/qq_36982160/article/details/82802544
.
https://blog.csdn.net/carson_ho/article/details/75453770

  • Fragment懒加载

setUserVisibleHint方法
onHiddenChanged方法
https://www.jianshu.com/p/0e2d746e3a3d

  • Activity启动模式,taskAffinity

standard(标准),singleTop(生命周期变化,新闻推送)
singleTask(首页),singleInstance(微信小程序)
taskAffinity:指定Activity所处的活动栈

  • 广播的两种注册方式

静态注册/动态注册
静态注册:在Manifest中注册,随系统启动而启动,一直在运行
动态注册:在代码中注册,随应用启动而启动,应用结束则销毁广播
Android8.0以后,大部分广播不再支持静态注册,官方说为了省电。

  • Service启动模式,生命周期,与Thread的区别

startService启动:启动之后便于启动者(如Activity)无关了,不进行通信,一般用来在后台执行任务,通过调用stopService来停止服务。
生命周期:onCreate(只执行一次),onStartCommond(可能 执行多次,通过调用startService),onBind(虽然用不到,但是需要重写),onDestroy。
·········································································································
bindService启动:service生命周期与启动者(如Activity)关联,启动者被销毁后,service也会被销毁,双方可以通过IBinder来进行通信,通过unBinderService来停止服务。
生命周期:onBind,onUnbind
·········································································································
startService和bindService启动,需要调用stopService和unBinderService来停止服务。
·········································································································
·········································································································
service是运行在主进程里的main线程中,在无响应超过20S后会触发ANR
(BroadCast10S,Activity5S)
,或者运行在独立的进程里的main线程中,不同于线程,线程是程序执行的最小单元。通常是在Service中开启线程来处理一些后台任务。
https://www.jianshu.com/p/4c798c91a613

  • IntentService

封装好的Service,为我们在内部创建了线程(使用HandlerThread),并处理好了线程的开启和销毁,可以在service中处理耗时任务。
第一行代码中的说法是:在Service中开启线程执行耗时任务时,为了防止程序员忘记在任务执行完毕后关闭服务,所以封装了一个类来为程序员做这些工作,这个类就是IntentService。
https://www.jianshu.com/p/8c4181049564

  • Android消息机制(ThreadLocal)

1.为什么一个线程只有一个Looper、只有一个MessageQueue?
2.如何获取当前线程的Looper?是怎么实现的?(理解ThreadLocal)
3.是不是任何线程都可以实例化Handler?有没有什么约束条件?
4.Looper.loop是一个死循环,拿不到需要处理的Message就会阻塞,那在UI线程中为什么不会导致ANR?
5.Handler.sendMessageDelayed()怎么实现延迟的?结合Looper.loop()循环中,Message=messageQueue.next()和MessageQueue.enqueueMessage()分析。
https://blog.csdn.net/feather_wch/article/details/81136078
https://blog.csdn.net/feather_wch/article/details/79263855

  • HandlerThread
  • 线程间通信
  • 进程间通信
  • AsycnTask
  • Android事件分发机制
  • Android解决滑动冲突
  • Android动画(帧动画、补间动画、属性动画)
  • View绘制原理(难点)
  • Android屏幕刷新机制(难点)
  • 自定义View
  • Android框架(Framework)
  • Android开机过程(源码)(难点)
  • 点击应用图标到启动完成,整个执行过程是怎样的(难点)
  • Android Application与Context
  • SharedPreferences

请不要滥用SharedPreferences

  • MVC – MVP – MVVM
  • RecyclerView缓存机制
  • ListView&RecyclerView的item复用机制,ListView与RecyclerView的区别
  • 内存泄漏、内存抖动、内存溢出、ANR
  • Android布局、布局优化(include/merge/viewstub)
  • 网络请求注解
  • 序列化
  • SparseArray等
  • Android优化工具

Android Github开源库整理

点赞