Android_QA
2020 年 10 月 27 重磅更新:
最真实的 Android 面经,最详细的面试回答,我都给你准备好啦!
几大公司面试问题:https://juejin.im/post/6878902981400625160 里面都备注了回答要点!
最重要的,遇到这些面试题该如何回答我都给你写好了,我愿称之为最强口水话。
何为口水话呢?
就是面试官问你相关问题的时候,你应该如何说的话。
有没有遇到这样的场景,明明面试官问我的问题我会,我也看过甚至我自己也写过相关博客,但是在回答的时候还是支支吾吾说不清楚,或者不分轻重想到啥就说啥。
口水话专门用来解决这个问题,它不同于一般博客语言琐碎,而是语言精炼,突出重点,以沟通的方式而非说教的形式去阐述问题。
详细见:https://github.com/Omooo/Android-Notes
这一次,轻松拿下 Android 面试!
Java 部分(一)基础知识点
- Java中 == 和 equals 和 hashCode 的区别
- int、char、long 各占多少字节数
- int 和 Integer 的区别
- 谈谈对Java多态的理解
- String、StringBuffer、StringBuilder的区别
- 什么是内部类?内部类的作用
- 抽象类和接口的区别
- 抽象类的意义
- 抽象类与接口的应用场景
- 抽象类是否可以没有方法和属性?
- 接口的意义
- 泛型中的extends和super的区别
- 父类的静态方法能否被子类重写?
- 进程和线程的区别
- final、finally、finalize的区别
- 序列化的方式
- Serializable 和 Parcelable 的区别
- 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因。
- 静态内部类的设计意图
- 成员内部类、静态内部类、方法内部类(局部内部类)和匿名内部类的理解,以及项目中的应用
- 谈谈对kotlin的理解
- 闭包和局部内部类的区别
- String转换成Integer的方式以及原理
- 面向对象思想
- 对象拷贝的理解?深拷贝、浅拷贝的区别?
- Enumeration 和 Iterator 的区别?
Java 部分(二)高级知识点
- 哪些情况下的对象会被垃圾回收机制处理掉?
- 讲一下常见的编码方式?
- UTF-8编码中中文占几个字节,int型几个字节?
- 静态代理和动态代理的区别,什么场景使用?
- Java的异常体系
- 谈谈你对解析与分派的认识
- 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?
- Java中实现多态的机制是什么?
- 如何将一个Java对象序列化到文件里?
- 说说你对Java反射的理解
- 说说你对Java注解的理解
- 说说你对依赖注入的理解
- 说一下泛型原理,并举例说明
- Java中String的了解
- String为什么要设计成不可变的?
- Object类的equal和hashCode方法重写,为什么?
- 为什么Java里的匿名内部类只能访问final修饰的外部变量?
- Synchronized
- volatile
- 类加载流程双亲委托机制
Java 部分(三)数据结构
Java 部分(四)线程、多线程和线程池
- 开启线程的三种方式?
- 线程和进程的区别?
- 为什么要有线程,而不是仅仅用进程?
- run() 和 start() 方法的区别?
- 如何控制某个方法允许并发访问线程的个数?
- 在 Java 中 wait() 和 sleep() 方法的区别
- 谈谈 wait/notify 关键字的理解
- 什么导致线程阻塞?
- 线程如何关闭?
- 讲一下 Java 中的同步的方法
- 数据一致性如何保证?
- 如何保证线程安全?
- 如何实现线程同步?
- 两个进程同时要求读写,能不能实现?如何防止进程同步?
- 线程间操作 List
- Java 中对象的生命周期
- 说说线程池
- 并发编程面临的挑战有哪些?
Android 部分(一)基础知识点
- 四大组件是什么?
- 四大组件的生命周期和简单用法
- Context的理解?
- AsyncTask详解
- Android虚拟机以及编译过程
- 进程保活方案
- Android 消息机制
- Window、Activity、DecorView以及ViewRoot之间的关系
- Android事件分发机制
- dp、sp、px的理解以及相互转换
- RelativeLayout和LinearLayout在实现效果同等的情况下使用哪个?为什么?
- 布局相关的 <merge>、<viewstub> 控件作用及实现原理
- Fragment详解
- Json、XML
- Assets目录与res目录的区别
- View视图绘制过程原理
- 解决滑动冲突的方式?
- APP Build过程
- Android利用scheme协议进行跳转
- MVC、MVP
- SurfaceView
- HandlerThread
- IntentService
- 谈谈你对Application类的理解
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递?
- SharedPreference在使用过程中有什么注意点?
- SQLite有哪些可以优化的地方?
- 嵌滑滑动机制
- RecyclerView 优化
Android 部分(二)高级知识点
- Android 系统架构
- Android 各个版本特性
- Android 系统启动流程
- 应用程序进程启动过程
- Activity 状态的保存与恢复
- Android 动画框架实现原理
- requestLayout、onLayout、onDraw、drawChild 区别与联系
- requestLayout、invalidate、postInvalidate 的区别
- Activity、Window、View 的区别及联系
- Volley 的理解
- 如何优化自定义 View
- 低版本如何实现高版本 API
- 描述一次网络请求的过程
- HttpUrlConnection 与 OkHttp 的关系
- Bitmap 的理解
- Looper 架构
- ActivityThread 的工作原理
- AMS 的工作原理
- WMS 的工作原理
- 自定义 View 如何考虑机型适配
- 自定义 View 的事件
- LaunchMode 应用场景
- SpareArray 原理
- ContentProvider 是如何实现数据共享的
- Service 与 Activity 的通信方式
- IntentService 原理与作用
- ApplicationContext 与 ActivityContext 的区别
- SP 是进程同步的嘛?如何做到进程同步?
- 谈谈多线程在 Android 中的使用
- 进程和 Application 的生命周期
- 封装 View 时候这么知道 View 的大小?
- RecycleView 原理
- AndroidManifest 的作用和理解
- Touch 事件流程
- 时间分发中的 onTouch 和 onTouchEvent 有什么区别?
- View 和 ViewGroup 分别有哪些与事件分发有关的回掉方法
- View 的刷新机制
- View 的绘制流程
- 自定义控件原理?
- 为什么不能在子线程更新 UI?
- ANR 产生原因是什么?如何定位和修正?
- 什么情况下会导致 OOM,如何避免?
- OOM 是否可以 try-catch
- 内存泄露发生的情况?如何避免
- LruCache 默认缓存大小?
- ContentProvider 的权限管理
- 如何通过广播拦截一条短信
- 广播是否可以请求网络?
- 计算一个 View 的嵌套层级?
- Activity 栈
- Android 线程有没有限制?
- 线程池有没有上限?
- 有没有尝试简化 Parcelable 的使用?