Leo Technology Stack Leo Technology Stack
首页
  • Android
  • Web
  • SpringBoot
  • 数据库
  • Docker
  • Netty
  • KubeSphere
  • Linux
  • Android Framework
  • 开源库
思维
  • 面试
  • 投资理财
  • 杂事记录
  • 索引

    • 分类
    • 标签
    • 归档
  • 开源项目

    • Advance Markdown
    • AnLibrary (opens new window)

Leo

不知名的架构师
首页
  • Android
  • Web
  • SpringBoot
  • 数据库
  • Docker
  • Netty
  • KubeSphere
  • Linux
  • Android Framework
  • 开源库
思维
  • 面试
  • 投资理财
  • 杂事记录
  • 索引

    • 分类
    • 标签
    • 归档
  • 开源项目

    • Advance Markdown
    • AnLibrary (opens new window)
  • 目录页

  • 前端

  • 后端

  • Linux

  • thinking

  • interview

    • 面试锦集
    • LeetCode笔记

    • Java面试题

    • Android面试题

      • Android 面试题大纲
        • Java面试题
          • Java基础
          • Java中的设计模式
        • Android UI基础知识
        • Android基础知识
          • Activity
          • Service
          • Broadcast Receiver
          • ContentProvider
          • Fragment
          • Intent
          • Context
          • SharePerferences
          • URI/URL
          • Bitmap
          • WebView
          • NotifiCationCompat
          • MediaPlayer
          • Handler
          • AsycTask
          • Binder
          • AssetManager
          • ActivityManager
          • SystemManager
          • WindowManager
          • PackageManager
          • ResoureceManager
          • ClassLoader
          • WIFI机制
          • 蓝牙机制
          • NFC机制
        • Android高级
          • 子线程与主线程交互方式和优缺点
          • Android性能优化
          • Android屏幕是配
          • AIDL
          • Android中的事件处理
          • Android中的动画
          • ContentObserver内容观察者作用及其特点
          • 源码分析
        • Android Framework
        • 开源框架
          • OkHttp
          • Rxava
          • Retrofit
        • 框架的使用
        • 网络请求
        • 各种SDK操作策略
        • 其他
      • Java面试总结
      • Android 基础知识面试总结
    • 数据结构

  • notes
  • interview
  • Android面试题
2021-04-22

Android 面试题大纲

# Java面试题

# Java基础

  • Java中引用类型有哪些
  • 什么是重载,什么是重写,有什么区别
  • String、StringBuffer、Stringuilder的区别
  • 关键字final和static是怎么使用的
  • TCP/IP协议族分哪几层?TCP、IP、XMPP、HTTP分别属于哪一层?
  • Serializable / Parcelable
    • Serializable作用
    • Serializable优点
    • Parcelable作用
    • Parcelable优
  • ClassLoader
    • BootstrapClassLoader
      1. 加载路径
    • ExtClassLoader
      1. 加载路径
    • AppClassLoader
      1. 加载路径
    • PathClassLoader
      1. 加载路径
    • DexClassLoader
      1. 加载路径
  • 线程池
  • 线程

# Java中的设计模式

  • 设计模式六大原则
  • 你所知道的设计模式有哪些
  • 单列设计模式
  • 工厂设计模式
  • 建造者设计模式(Builder)
  • 适配器设计模式
  • 装饰模式(Decorator)
  • 策略模式(Strategy)
  • 观察者模式(Observer)

# Android UI基础知识

  • RecyclerView、ListView
  • RecyclerView缓存机制
  • ListView缓存机制
  • 为什么会图片错位

# Android基础知识

# Activity

  • 什么是Activity
  • 请描述一下Activity生命周期
  • Activity的四种启动模式,singletop和singletask区别是什么?一般书签的使用模式是sigletop,那么为什么不使用singletask?
  • 常见的Activity类型有FragmentActivity、ListActivity、TabActivity等,请描述一下Activity生命周期
  • 如何保存Activity的状态
  • 两个Activity之间跳转时必然会执行的是哪几个方法?
  • 横竖屏切换时Activity的生命周期
  • 如何将一个Activity设置成窗口的样式
  • 如何退出Activity?如何安全的退出已经调用多个Activity的Application?
  • Android中的Context、Activity、Application有什么区别
  • 两个Activity之间传递数据,除了Intent、广播接受者、content provider,还有啥?
  • Context是什么?
  • Activity的Task
  • ANR时长

# Service

  • Service是否在main thread中执行?service里面是否能执行耗时的操作?
  • Activity怎么和Service绑定,怎么在Activity中启动自己对应的Service?
  • 请描述一下Service的生命周期,bindService生命周期
  • 启动方式
  • 什么是IntentService?有何优点?
  • 说说Activity、Intent、Service是什么关系
  • Service和Activity在同一个线程吗
  • Service里可以弹吐司么
  • 什么是Service以及描述下它的生命周期。service有哪些启动方法,有什么区别,怎么停用Service?
  • 在service的生命周期方法onStartCommand()可不可以执行网络操作?如何在Service中执行网络操作?
  • Service类型
    1. 按地点分类
      1. 本地Service
      2. 远程Service
    2. 按运行分类
      1. 前台Service
      2. 后台Service
    3. 按功能分类
      1. 可通讯Service
      2. 不可通讯Service
  • 自动销毁Service
    1. startService不会自动销毁,调用者销毁后还在
    2. bindService会自动销毁,随着调用者(Activity)销毁而销毁
    3. startService+bindService,调用者销毁后还在,但会调用onUnBind(),需要手动stopService才能销毁
  • ANR时长

# Broadcast Receiver

  • 请描述一下BroadcastReceiver
  • 在manifest和代码中如何注册和使用BroadcastReceiver
  • BroadcastReceiver的生命周期
  • 无序广播
  • 有序广播
  • 粘滞广播
  • 系统广播种类
  • 广播优先级
  • 动态注册
  • 静态注册
  • ANR时长
  • 能否BindService
    1. 不可,但可startService
    2. BindService必须是Activity的Context

# ContentProvider

  • 请介绍下ContentProvider是如何实现数据共享的
  • 请介绍下Android的数据存储模式
  • 为什么要用ContentProvider?它和sql的实现上有什么差别?
  • 说说contentProvider、ContentResolver、ContentObserver之间的关系

# Fragment

  • Fragment和Activity之间是如何传值的
  • 描述一下fragment的生命周期
  • Fragment的replace和add方法的区别
  • Fragment如何实现类似Activity栈的压栈和出栈效果的?
  • Fragment在你们项目中的使用
  • 如何切换Fragment,不重新被实列化?
  • Fragment与Fragment通讯方式
  • Fragment与Activity通讯方式
  • 回退栈
  • 创建方式
    • 静态创建
      • 动态创建
  • 销毁与重建

# Intent

intent (opens new window)

  • Intent传递数据时,可以传递哪些类型数据?
  • Serializable和Parcelable的区别
  • 请描述下Intent和IntentFilter
  • IntentFilter
    1. Action
    2. Category
    3. Data
  • 传递数据类型

# Context

  • 什么是Context
    1. 它描述的是一个应用程序环境的信息,即上下文
    2. 该类是一个抽象(abstract class)类,Android 提供了该抽象类的具体实 现类(ContextIml)
      3.通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作, 例如:启动一个 Activity,发送广播,接受 Intent,信息,等
  • Context, Activity,Appliction的区别
    1. Context是程序的上下文,通过它可以获取程序中各种资源
    2. Activity和Application都是Context的子类
    3. Activity和Application维护的的生命周期不一

# SharePerferences

# URI/URL

  • 什么是URI
  • 什么是URL

# Bitmap

# WebView

(WebView)[https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650825278&idx=1&sn=312f61cac2d4a2839e7457fa7e77fe76&chksm=80b7b6a0b7c03fb6f528fc23825a98a1ab33945d479eab5dea8a5464350daf2c5efd49ad1e62&mpshare=1&scene=1&srcid=0412t0eUjki3R7DgS9snTadF#rd]

  • JS交互
  • WebView隐患
  • 优化WebView

# NotifiCationCompat

# MediaPlayer

# Handler

  • Looper
  • Message Queue
  • ThreadLocal
  • Message
  • Handler

# AsycTask

# Binder

  • 序列化与反序列化的过程

# AssetManager

# ActivityManager

# SystemManager

# WindowManager

# PackageManager

# ResoureceManager

# ClassLoader

# WIFI机制

# 蓝牙机制

# NFC机制

# Android高级

# 子线程与主线程交互方式和优缺点

# Android性能优化

  • 如何对Android应用进行性能分析?
  • 什么情况下会内存泄漏
  • 如何避免OOM
  • Android中如何捕获未捕获的异常
  • ANR是什么?怎么避免ANR和解决ANR(重要)
  • Android线程间通信方式有那几种?(重要)
  • Devik进程,Linux进程,线程的区别
  • 描述下Android的系统架构
  • android应用对内存是如何限制的?我们应该如何合理使用内存
  • 简述下Android应用程序结构是哪些?
  • 请解释下Android程序运行时权限与文件系统权限的区别
  • Framework工作方式及原理,Activity是如何生成一个View的,机制是什么?
  • 多线程通信和多进程之间通信有什么区别,分别怎么实现?
  • 内存优化
  • 卡顿优化
  • 电量优化
  • APK体积优化
  • 内存泄漏、内存溢出 http://mp.weixin.qq.com/s/8bQ4ES5SBvnvPoaw8aGcig
    • 内存泄漏引发的问题
      1. 可能使程序造成卡顿的现象,或者莫名的消失,因为内存过大,系统就更可能的回收这一块的内存,或者直接崩溃
    • 内存泄漏的原因
      1. handler等生命周期较长的匿名内部类,因为这些匿名内部类可能会持有外部的引用,
        从而导致短期内就算Activity退出而一些资源没有被回收,数据结构未优化,图片没有优化,
        没有注意到对象的生命周期,造成许多对象没有被回收,过多的使用Service,单例的过多使用,无效的资源等等

# Android屏幕是配

  • 屏幕适配方式有哪些
  • 屏幕适配的处理技巧有哪些
  • 5.0适配
  • 6.0适配
  • 7.0适配
  • 8.0适配
  • 9.0适配
  • 屏幕适配
  • 资源适配

# AIDL

什么是AIDL以及怎么使用
AIDL的全称是什么?如何工作,能处理哪些类型数据?

# Android中的事件处理

  • Handler机制
  • 事件分发机制
  • 子线程发消息到主线程进行更新UI,除了Handler和AsyncTask,还有什么?
  • 子线程能不能new Handler?为什么?

# Android中的动画

  • Android中的动画分几类,他们的特点和区别是什么?
  • 如何修改Activity进入和退出动画
  • 属性动画,例如一个button从A移动到B点,B点还是可以响应这个点击事件,这个原理是什么?

# ContentObserver内容观察者作用及其特点

# 源码分析

  • UI的自定义View
  • 事件拦截和分发机制

# Android Framework

  • App的启动过程

  • Activity启动流程

  • Handler

  • GC

  • adb命令

  • View体系

    • View生命周期
    • View事件
    • 刷新机制
    • View绘制流程
      1. onLayout
      2. onMeasure
      3. onDraw
    • requestLayou、invalidate、postInvalidate区别
      1. requestLayout
      2. invalidate
      3. postInvalidate
    • 更新UI的方式
      1. Handler
      2. runOnUiThread
        原理很简单,就是传入一个Runnalbe,Activity会判断当前是否在主线程,如果是,
        直接调用Runnable.run,直接调用run不是启动线程这点都知道吧,如果不是主线程
        则调用Activity内部持有的主线程的Handler发送一个Post,这个POST也不是开启线程的,
        熟悉Handler的应该知道,这篇文档也会说Handler
      3. view.post
      4. 特殊情况子线程能更新UI,子线程更新UI时候会经过ViewRootImpl的checkThread判断是否是主线程,
        但是这个ViewRootImpl是在OnResume的时候才创建出来的,所以在onCreate到onResume之前是可以有时间在子线程更新UI的
  • 辅助工具

    1. Scoller

# 开源框架

# OkHttp

# Rxava

# Retrofit

# 框架的使用

  • Gradle命令

一、 自我介绍

二、 开发中都使用过哪些框架、平台

三、 都使用过哪些自定义控件

四、 自定义控件:绘制圆环的实现过程

五、 自定义控件:摩天轮的实现过程

六、 自定义控件:可拖拽排序的GridLayout的实现过程

七、 流式布局的实现过程

八、 项目的流程

九、 项目中常见的问题

十、 即时通讯是是怎么做的?

十一、 设计模式六大原则

十二、 第三方登陆

十三、 第三方支付

十四、 常见框架分析

# 网络请求

  • HTTP协议
    • 请求过程
    • TCP与UDP的区别。
    • TCP和UDP报文结构。
    • TCP的三次握手与四次挥手过程。
    • TCP可靠传输原理实现(滑动窗口)。
    • TCP拥塞控制。
    • TCP流量控制。
    • Http的报文结构。
    • Http的状态码。
    • Http的请求方法。
    • Http1.1和Http1.0及2.0的区别
    • Http长连接。
    • Cookie、Session、TOKEN的作用和原理。https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650825233&idx=1&sn=5ec8c8285771deaf9278f30cda6b21c3&chksm=80b7b68fb7c03f997e6723e3dce4fb6746d2ff157c0281fd3a22ac4c6e01100e5fc8f9c7eca8&mpshare=1&scene=1&srcid=0412IXGvWvDkcy5z357Bz0Ss#rd
    • Https加密原理。

# 各种SDK操作策略

1. 推送
	1. APP关闭后推送策略
1. IM通讯
	1. 记录存取
1. 统计
	1. 自定义埋点
1. 地图
	1. 启动定位、关闭定位
	1. 保存上一次请求作为下一次初始值
1. 支付
	1. 加密
	1. 回调

# 其他

  • 解决过一些性能问题,以及项目中的实际应用。

  • 性能优化工具:TraceView、Systrace、调试GPU过度绘制 & GPU呈现模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary、Lint。

  • 性能优化方向:网络,内存,绘制,电量,APK瘦身

  • IntentService原理及使用

  • 缓存自己实现怎么做?LruCache原理

  • 图形图像相关,如OpenGL ES管线流程,EGL的认识,Shader相关

  • SurfaceView,TextureView,GlSurfaceView区别,使用场景?

  • glide缓存策略?同一个图片跟size有关么

  • android中的动画有哪些

  • View事件传递机制

  • 界面卡顿怎么排查和优化?

  • Fragment的replace和end??的区别?

  • MVP,MVVM,MVC解释和实践

  • 项目之外的,对技术的见解,拓展知识

  • 微信跳一跳外挂怎么实现,检测怎么做的?

  • 一张纯色背景下怎么有效检测各个矩形?

  • 对接的so算法了解么,有接触过相关的库么?

  • 三个算法题选一个并写出测试用例:打印n-m之间所有的素数;计算n-m之间1出现的次数;指定数字序列的排序;

  • android api层的源码熟悉哪些?解释一下

  • ACTION_CANCEL什么时候触发,触摸button然后滑动到外部抬起会触发点击事件吗,在+ + 滑动回去抬起会么

  • 怎么处理嵌套View的滑动冲突问题

  • 热修复相关的原理,框架熟悉么

  • gradle打包流程熟悉么

  • 任意提问环节:其实可以问之前面试中遇到的问题:比如,多模块开发的时候不同的负责人可能会引入重复资源,相同的字符串,相同的icon等但是文件名并不一样,怎样去重?

  • Canvas的底层机制,绘制框架,硬件加速是什么原理,canvas lock的缓冲区是怎么回事

  • surfaceview, suface,surfacetexure等相关的,以及底层原理

  • android文件存储,各版本存储位置的权限控制的演进,外部存储,内部存储

  • 上层业务activity和fragment的遇到什么坑??页面展示上的一些坑和优化经验

  • 网络请求的开源框架:OKHttp介绍,写过拦截器么

  • 数据层有统一的管理么,数据缓存是怎么做的,http请求等有提供统一管理么?

  • 有用什么模式么,逻辑什么的都在Activity层?怎么分离的

  • 如果用了一些解耦的策略,怎么管理生命周期的?

  • 有什么提高编译速度的方法?

  • 对应用里的线程有做统一管理么?

  • jni的算法提供都是主线程的?是不是想问服务类的啊

  • 边沿检测用的啥?深度学习相关的有了解么?

  • 上线后的app性能分析检测有做么

  • 进程间通信方式?Binder的构成有几部分?

  • HttpClient和HttpConnection的区别

  • View的事件传递机制

  • MVC,MVP,MVVM分别是什么?

  • Android中常用的设计模式,说三个比较高级的?

  • 内存优化,OOM的原因和排查方法

  • 想改变listview的高度,怎么做

  • Https是怎么回事?

  • 除了日常开发,其他有做过什么工作?比如持续化集成,自动化测试等等

  • IntentService和Service

  • dp是什么,sp呢,有什么区别

  • 自定义View,ViewGroup注意那些回调?

  • Android界面卡顿的原因以及解决方法

  • android中的存储类型

  • service用过么,基本调用方法

  • Handler机制

  • LinearLayout、FrameLayout、RelativeLayout性能对比,为什么

  • Activity的生命周期,finish调用后其他生命周期还会走么?

  • FW层熟悉么,源码看过么

  • GC回收机制熟悉么,分代算法知道么

  • Java的类类加载原理

  • 内存泄漏如何排查,MAT分析方法以及原理,各种泄漏的原因是什么比如

  • Handler为什么会泄漏

  • gradle熟悉么,自动打包知道么

  • 介绍下先的app架构和通信

  • 自己负责过哪些模块,跟同事相比自己的优势是什么

  • 遇到过什么印象深刻的问题,怎么解决的

  • 最近都做了哪些工作?

  • 遇到了什么印象深刻的问题。A:会顺着你介绍的项目问下具体实现。

  • 推送消息有富文本么?

  • 热修复了解么,用的什么?

  • apk包大小有限制么?怎么减少包大小?

  • 工作中有没有用过或者写过什么工具?脚本,插件等等

  • 比如:多人协同开发可能对一些相同资源都各自放了一份,有没有方法自动检测这种重复之类的

  • 写过native的底层代码么

  • view的绘制熟悉么,介绍下

  • gc相关的算法

  • anr是因为什么产生的,怎么排查

  • 界面上的话,有什么优化措施么?比如列表展示之类的,平时遇到过内存问题吗,怎么优化的?

  • 平时用过哪些设计模式?

  • 介绍下最近一年主要做了什么工作

  • 会对简历上突出的技能进行详情的询问:
    比如:音频合成的具体步骤,以及遇到的一些问题和细节处理。
    会根据面试发散一些问题,问到,seek方法播放到末尾后重新播放会有一些卡顿的不流畅问题,怎么避免,从交互设计或者技术角度。(个人表示没怎么关注这种)。

  • 项目团队多少人,怎么分配工作

  • 线程之间怎么通信的?

  • app的架构是怎么样的,并且为什么这样,有什么优缺点?

  • 算法熟悉么?给了一个二叉排序树,出了一个给定节点找到它的下一个元素(指的是大小顺序的下一个)的算法题。

  • 为什么找工作,自己的优势是什么

  • 技术问题不再局限于简历,可能根据简历和回答情况渐进并扩散。

  • 感觉各个技术面试官之前并没有沟通,可能会问到类似的问题

  • 介绍下自己主要负责的工作

  • Activity的生命周期有哪些,知道onRestart么,介绍下

  • savedInstanceState知道么,干什么用的,什么时候有值,什么时候为空,平时是怎么用的

  • View绘制熟悉么,介绍下,能说下是实现原理么?

  • 平时用过什么开发工具,分析工具?

  • ANR是怎么回事?怎么查?Service会引起ANR么?

  • Activity的启动模式有哪些?栈里是A-B-C,先想直接到A,BC都清理掉,有几种方法可以做到?这几种方法产生的结果是有几个A的实例?

  • 有什么工具可以看到Activity栈信息么?多个栈话,有方法分别得到各个栈的Activity列表么

  • 都熟悉哪些命令?知道怎么用命令启动一个Activity么?

  • SharedPrefrences的apply和commit有什么区别

  • java里带$的函数见过么,是什么意思

  • MD5是加密方法么,Base64呢

  • 有博客和github,主要是写的什么?有哪些关注

  • android 8.0 有哪些新特性

  • 差不多就这些吧。。最后每个面试官都会让你问他问题。

  • ActivityA跳转ActivityB然后B按back返回A,各自的生命周期顺序,A与B均不透明。

  • Synchronize关键字后面跟类或者对象有什么不同。

  • 单例的DCL方式下,那个单例的私有变量要不要加volatile关键字,这个关键字有什么用

  • JVM的引用树,什么变量能作为GCRoot?GC垃圾回收的几种方法

  • ThreadLocal是什么?Looper中的消息死循环为什么没有ANR?

  • Android中main方法入口在哪里

  • jdk1.5?SparseArray和ArrayMap各自的数据结构,前者的查找是怎么实现的,与HashMap的区别

  • Runnable与Callable、Future、FutureTask的区别,AsyncTask用到哪个?- AsyncTask是顺序执行么,for循环中执行200次new AsyncTask并execute,会有异常吗

  • IntentService生命周期是怎样的,使用场合等

  • RecyclerView和ListView有什么区别?局部刷新?前者使用时多重type场景下怎么避免滑动卡顿。懒加载怎么实现,怎么优化滑动体验。

  • SQLite的数据库升级用过么

  • 开放问题:如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题。

  • Scroller有什么方法,怎么使用的。

  • 分享下项目中遇到的问题

  • webwiew了解?怎么实现和javascript的通信?相互双方的通信。@JavascriptInterface在?版本有bug,除了这个还有其他调用android方法的方案吗?

  • ReactiveNative了解多少

  • JNI和NDK熟悉么?Java和C方法之前的相互调用怎么做?

  • ams pms wms

  • Crash怎么处理的啊,anr怎么处理的啊,那个crash和anr时候掏出来的对话框怎么弹出来的

  • 怎么做插件化啊。。

  • Handlerthred intentservie啥原理啊

  • Intentservice需要关闭吗

  • 谈谈架构呀,架构的基本原则呀,你喜欢用那个设计模式啊,

  • 后台线程怎么拿主线程的异常栈啊?

  • 组件化怎么做的呀??独立的组件怎么相互调用接口呀?

  • 你说你做过gradle插件,那讲一下呗

  • 字节码插桩这几个框架你用过呀。那你为啥选asm呀?

  • 插件化来讲一下。。其他apk的resource怎么拿啊。。LoadedApk对象干啥用的??

  • Retorfit用了哪些设计模式呀??okhttp用了哪些呀??为啥用啊,你自己项目用了哪些啊,为毛用啊

  • Tinker原理是啥呀?

  • Application代理机制为啥要这样搞啊

  • 谈谈架构的基本原则啊,结合下你自己经历,谈谈架构

  • Arouter源码看过吗??怎么搞依赖反转啊

  • Ui卡顿怎么检测啊,刷新机制是个啥啊,

编辑此页 (opens new window)
上次更新: 2022-05-07, 10:54:46
Java虚拟机
Java面试总结

← Java虚拟机 Java面试总结→

Theme by Leo | Copyright © 2016-2022 Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式