Android知识储备

近期打算对自己的知识进行学习,自己也做了3年多工作了,总感觉好多没有学会,也有很多的补足,自己平时也经常会看视频,写demo学习,但是感觉自己的进步不是很大,对于将来的职业发展自己也是有很多的困惑,因为自己总是进入公司后独立开发,自己的经验,学习方法感觉也是有问题的,方方面面吧。 因此找些面试题或者好的博客收集下资料,也为自己的知识做下储备,希望接下来的时间自己能够静下心来,把技术学好学扎实!

近期看了下面的这个文章做了5年Android,靠着这份面试题跟答案,我从12K变成了30K,打算把里面的知识点自己找一下并总结, 希望自己可以短期内学习并提升自我, 先找到里面的题目答案,计划在后续的工作中不断更新...

Java相关

  1. 容器(HashMap、HashSet、LinkedList、ArrayList、数组等)
  1. 内存模型
  1. 垃圾回收算法(JVM)
  1. 垃圾回收机制和调用 System.gc()的区别?
  1. 类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)
  1. 反射
  1. 多线程和线程池
  1. 设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
  1. Java 四大引用
  1. Java 的泛型
  1. final、finally、finalize 的区别

Android 相关

自定义View或效果

  1. 事件拦截分发
  1. 解决过的一些性能问题,在项目中的实际运用

APP性能优化,内存优化,布局优化,绘制优化,内存泄漏

检测应用主线程不规范代码: StrictMode

性能优化工具: Lint

明显内存问题初筛

性能优化 (讲讲你自己项目中做过的性能优化)

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

  1. 动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)

MVC、MVP、MVVM

跨进程通信的几种方式?

  1. Intent, 比如拨打电话
  2. ContentProvider数据库存储数据
  3. Broadcast广播通信
  4. 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是经过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音视频开发

Android数据库

Android动画

组件化和arouter原理

Android Studio打包

Android单元测试

设计模式

Git

屏幕适配

NDK开发

Android开发遇到的问题

数据结构与算法

  1. 时间复杂度 / 空间复杂度
  1. 常用的排序算法有哪些?
  1. 字符串反转
  1. 链表反转(头插法)
  1. 如何查找第一个只出现一次的字符(Hash查找)
  1. 如何查找两个子视图的共同父视图?
  2. 无序数组中的中位数(快排思想)
  1. 如何给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
  1. 二叉树前序、中序、后序遍历
  1. 最大 K 问题
  1. 广度、深度优先搜索算法
  1. String 转 int。核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;
  1. 如何判断一个单链表有环?
  1. 100 亿个单词,找出出现频率最高的单词。要求几种方案;
  1. 链表每 k 位逆序;
  1. 镜像二叉树;
  1. 找出一个无序数组中出现超过一半次数的数字;
  1. 计算二叉树的最大深度,要求非递归算法。
  1. String 方式计算加法。

Kotlin

Android项目/架构

Android面试

项目中使用的框架(源码阅读/理解)

Rxjava

Okhttp

Kotlin 相关

Flutter相关

  1. Dart 当中的 「..」表示什么意思?
  1. Dart 的作用域
  1. Dart 是不是单线程模型?是如何运行的?
  1. Dart 是如何实现多任务并行的?
  1. 说一下Dart异步编程中的 Future关键字?
  1. 说一下Dart异步编程中的 Stream数据流?
  1. Stream 有哪两种订阅模式?分别是怎么调用的?
  1. await for 如何使用?
  1. 说一下 mixin机制?
  1. 请简单介绍下Flutter框架,以及它的优缺点?
  2. 介绍下Flutter的理念架构
  3. 介绍下FFlutter的FrameWork层和Engine层,以及它们的作用
  4. 介绍下Widget、State、Context 概念 - Widget
  5. 简述Widget的StatelessWidget和StatefulWidget两种状态组件类
  6. StatefulWidget 的生命周期
  7. 简述Widgets、RenderObjects 和 Elements的关系
  8. 什么是状态管理,你了解哪些状态管理框架?
    18.简述Flutter的绘制流程
  9. 简述Flutter的线程管理模型
  10. Flutter 是如何与原生Android、iOS进行通信的?
  11. 简述Flutter 的热重载

推荐阅读更多精彩内容