近期打算对自己的知识进行学习,自己也做了3年多工作了,总感觉好多没有学会,也有很多的补足,自己平时也经常会看视频,写demo学习,但是感觉自己的进步不是很大,对于将来的职业发展自己也是有很多的困惑,因为自己总是进入公司后独立开发,自己的经验,学习方法感觉也是有问题的,方方面面吧。 因此找些面试题或者好的博客收集下资料,也为自己的知识做下储备,希望接下来的时间自己能够静下心来,把技术学好学扎实!
近期看了下面的这个文章做了5年Android,靠着这份面试题跟答案,我从12K变成了30K,打算把里面的知识点自己找一下并总结, 希望自己可以短期内学习并提升自我, 先找到里面的题目答案,计划在后续的工作中不断更新...
Java相关
- 容器(HashMap、HashSet、LinkedList、ArrayList、数组等)
- 内存模型
- 垃圾回收算法(JVM)
- 垃圾回收机制和调用 System.gc()的区别?
- 类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)
- 反射
- 多线程和线程池
- 设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
- Java 四大引用
- Java 的泛型
- final、finally、finalize 的区别
-
final、finally与finalize的区别
12.接口、抽象类的区别 - 接口和抽象类有什么区别
Android 相关
自定义View或效果
- 事件拦截分发
- 解决过的一些性能问题,在项目中的实际运用
APP性能优化,内存优化,布局优化,绘制优化,内存泄漏
检测应用主线程不规范代码: StrictMode
性能优化工具: Lint
明显内存问题初筛
性能优化 (讲讲你自己项目中做过的性能优化)
Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP)
-
Android9.0 http网络请求失败问题分析与解决方案
缓存自己如何实现(LRUCache 原理) - Android 内存缓存 LruCache 原理与实现
-
Android LruCache 缓存机制实现原理
图形图像相关:OpenGL ES 管线流程、EGL 的认识、Shader 相关 -
Android OpenGL ES零基础系列(三):OpenGL ES的渲染管道及VertexShader与FragmentShader
SurfaceView、TextureView、GLSurfaceView 区别及使用场景 - view、surfaceview、GLsurfaceview的区别和应用场景
- 动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)
MVC、MVP、MVVM
跨进程通信的几种方式?
- Intent, 比如拨打电话
- ContentProvider数据库存储数据
- Broadcast广播通信
- AIDL通信,通过接口共享数据
ContentProvider数据库存储数据
使用 ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用 SQLite 数据库实现的,所以其对数据做的各种操作都是以 Sql 实现,只是在上层提供的是 Uri,用户只需要关心操作数据的 uri 就可以了,ContentProvider 可以实现不同 app 之间共享。
具体如何实现?
Android跨进程通讯机制
Activity启动模式,有哪些不同
AIDL应用场景
AIDL在ROM开发中很常用.除去功能上的使用,安全性也是一个方向,可以获取到调用者的UID和包名做安全校验.这个特性一般的四大组件无法做到,Handler,message也做不到。
B/S和C/S
简述TCP,UDP,Socket
- 深入理解TCP、UDP协议及两者的区别
- 说说TCP,UDP和socket,Http之间联系和区别
- TCP、UDP、HTTP、SOCKET、WebSocket之间的区别
- TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
TCP是经过3次握手,4次挥手完成一串数据的传送
UDP是无连接的,知道IP地址和端口号,向其发送数据即可,不管数据是否发送成功
Socket是一种不同计算机,实时连接,比如说传送文件,即时通讯
Handler、ThreadLocal、AsyncTask、IntentService 原理及应用
Gradle(Groovy 语法、Gradle 插件开发基础)
线程内存模型,线程间通信
热修复、插件化
组件化架构思路
系统打包流程
SharedPrefrence 源码和问题点
sqlite相关
如何判断一个 APP 在前台还是后台?
AMS 、PMS
Activity 启动流程,App 启动流程
Binder 机制(IPC、AIDL 的使用)
为什么使用 Parcelable,好处是什么?
Android 图像显示相关流程,Vsync 信号等
组件化、多渠道、 打包不同需求的app
-
在Android Studio下使用Gradle,进行多版本代码管理的示例
项目地址 https://github.com/Jasonchenlijian/VariantsDemo -
Android项目组件化编程和多渠道编程的结合案例
项目地址 https://github.com/Jasonchenlijian/AndroidModuleVariantsDemo
Android音视频开发
Android数据库
Android动画
组件化和arouter原理
Android Studio打包
Android单元测试
设计模式
- [设计模式系列之一——单例模式几种实现方式] (https://blog.csdn.net/m0_37796683/article/details/103203266)
Git
屏幕适配
NDK开发
Android开发遇到的问题
- 解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
- Error: Cannot fit requested classes in a single dex file (# methods: 149346 > 65536)
数据结构与算法
- 时间复杂度 / 空间复杂度
- 常用的排序算法有哪些?
- 字符串反转
- 链表反转(头插法)
- 如何查找第一个只出现一次的字符(Hash查找)
- 如何查找两个子视图的共同父视图?
- 无序数组中的中位数(快排思想)
- 如何给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
- 二叉树前序、中序、后序遍历
- 最大 K 问题
- 广度、深度优先搜索算法
- String 转 int。核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;
- 如何判断一个单链表有环?
- 100 亿个单词,找出出现频率最高的单词。要求几种方案;
- 链表每 k 位逆序;
- 镜像二叉树;
- 找出一个无序数组中出现超过一半次数的数字;
- 计算二叉树的最大深度,要求非递归算法。
- String 方式计算加法。
Kotlin
- 关键字transient是干啥的
- Kotlin中 ?、!!、?:、:: 、->、== 符号的简单说明
- kotlin coroutines 协程教程(四) Suspend function 挂起函数
- 酷欧天气的Jetpack版本实现,采用了MVVM架构
Android项目/架构
Android面试
- RecyclerView 和 ListView 使用对比分析
- HTTP与HTTPS的区别
-
Socket心跳包机制总结
Android 有哪些存储数据的方式。 - Android五种数据存储方式
项目中使用的框架(源码阅读/理解)
Rxjava
Okhttp
Okhttp3源码解析(3)-Call分析(整体流程)
Retrofit破解Retrofit
源码
Kotlin 相关
Flutter相关
- Dart 当中的 「..」表示什么意思?
- Dart 的作用域
- Dart 是不是单线程模型?是如何运行的?
- Dart 是如何实现多任务并行的?
- 说一下Dart异步编程中的 Future关键字?
- 说一下Dart异步编程中的 Stream数据流?
- Stream 有哪两种订阅模式?分别是怎么调用的?
- await for 如何使用?
- 说一下 mixin机制?
- 请简单介绍下Flutter框架,以及它的优缺点?
- 介绍下Flutter的理念架构
- 介绍下FFlutter的FrameWork层和Engine层,以及它们的作用
- 介绍下Widget、State、Context 概念 - Widget
- 简述Widget的StatelessWidget和StatefulWidget两种状态组件类
- StatefulWidget 的生命周期
- 简述Widgets、RenderObjects 和 Elements的关系
- 什么是状态管理,你了解哪些状态管理框架?
18.简述Flutter的绘制流程 - 简述Flutter的线程管理模型
- Flutter 是如何与原生Android、iOS进行通信的?
- 简述Flutter 的热重载