二、Android面试知识框架

Android面试知识框架

三、Java 基础叩关

3.1 数据结构与算法

3.1.1 常用的数据结构有哪些?
3.1.2 数组
(1).如何在一个1到100的整数数组中找到丢失的数字?
(2).如何在给定的整数数组中找到重复的数字? 小米
(3).如何在未排序整数数组中找到最大值和最小值? 字节跳动
(4).在Java中如何从给定数组中删除多重复制?
(5).大数相加(今日头条)
3.1.3 链表
(1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要从倒数第一个开始查询,走两步) 腾讯
(2).arrayList底层原理 滴滴 字节跳动
(3).如何在一次遍历中找到单个链表的中值? 中国平安
(4).如何证明给定的链表是否包含循环?如何找到循环的头节点? 优酷
(5).两个有交叉的单链表,求交叉点 华为
(6).如何得到单链表的长度? 360
(7).如何在不使用递归的情况下逆转单链表? 小米/美团
(8).怎么判断链表有环? 滴滴
3.1.4 队列&堆栈
(1).如何使用栈实现队列的功能?(广州荔枝FM)
(2).两个栈实现一个队列 蘑菇街
(3).两个队列实现一个栈 腾讯
(4).对比一下队列和栈,以及它们底部实现 腾讯
3.1.5 二叉树
(1).如何在给定的二叉树中执行先序遍历?百度
(2).如何实现后序遍历算法? 百度
(3).如何在给定数组中执行二分法搜索? 苏宁
(4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的? 58
(5).输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 爱奇艺
(6).请实现两个函数,分别用来序列化二叉树和反序列化二叉树。 YY
(7).平衡二叉树和红黑树的区别?字节跳动
(8).什么是平衡二叉树,它有什么特征 美团
(9).B 树,B+树
3.1.6 HashMap
(1).HashMap的底层原理是什么?线程安全么? 百度 美团
(2).HashMap中put是如何实现的? 滴滴
(3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?
(4).什么是哈希碰撞?怎么解决? 滴滴 美团
(5).HashMap和HashTable的区别 小米
(6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? 滴滴
(7).hashmap concurrenthashmap原理 美团
(8).arraylist和hashmap的区别,为什么取数快?字节跳动
3.1.7图
?(1).旋转输出矩阵

(?2).给定一个矩阵 int matrixA<u>[m]</u>[n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元素 element. 搜狗

3.1.8排序算法有哪些?
(1).top-k排序(堆排序,位图法) 美团
(2).冒泡排序的手写 华捷艾米
(3).堆排序算法的手写 华捷艾米
(4).椭圆形场地有两个赛道,可以同时提供两匹马比赛,两匹马比赛后,可以获知两匹马中跑的快的那匹马,但是没有计时工具。问题,如何最优的算法(比赛次数最少),获知10匹马中速度最快的三匹马 阿里
(5).输入一个整型无序数组,对堆排序的方法使得数组有序 阿里
(6).如何使用快速排序算法对整数数组进行排序? CVTE
3.1.9 查找算法
(1).有序数组的二分查找算法 百度
3.1.10 串
(1).给定一个字符串,请你找出其中不含有重复字符的 最长子串的长度。 字节跳动
(2).给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
3.1.11 请写出以下算法的时间复杂度
冒泡排序法 插入排序法 堆排序法 二叉树排序法
3.1.12 其他算法
(1).常用的对称加密算法,有什么同? 字节跳动
(2).如何在无序(有负数)的数组中查找是否存在和为target的两个数组合,twoSum(); 字节
3.2 Java基础
(1).什么情况下会发生栈内存溢出?
(2).如果让你写一段栈溢出的代码你会什么写,一个栈大概有多大,为什么?每个线程都有这样大小的一个栈吗? (美团)
(3).JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代?
(4).介绍下GC回收机制与分代回收策略。
(5).Java中有几种引用关系,它们的区别是什么?
(6).GC收集算法有哪些?它们的特点是什么?
(7).如何判断一个对象是否被回收,有哪些GC算法,实际虚拟机使用最多的是什么GC算法?(美团)
(8).Jvm内存 结构说一下。
a.描述JVM内存模型。(东方头条)
(9).JVM DVM ART的区别(360)
(10).描述GC机制。Class会不会回收?用不到的Class怎么回收?(东方头条)
(11).StackOverFlow与OOM的区别?分别发生在什么时候,JVM栈中存储的是什么,堆存储的是什么?(美团)
(12).Java虚拟机和Dalvik虚拟机的区别?
(13).请描述new一个对象的流程。
(14).Java对象会不会分配到栈中?
(15).String, Stringbuffer, StringBuilder 的区别是什么?(东方头条)
a.String StringBuffer StringBuilder在进行字符串操作时的效率;这里主要考察String在内存中是如何创建的。(字节跳动)
(16).String为什么是不可变的?(字节跳动)
a.String为什么设计成final的?
(17).final?、finally、finalize?区别。
(18).抽象类和接口的区别。
(19).重载和重写的区别 (京东)
(20).什么是值传递和引用传递,Java 是值传递还是引用传递?
(21).String s = new String(“”);创建了几个对象?
(22).java里 equals和== 区别。
(23).try-catch-finally,try里有return,finally还执行么?
(24).Excption与Error区别。
(25).Static class 与non static class的区别。
(26).PathClassLoader与DexClassLoader的区别是什么?
(27).什么是双亲委托机制,为什么需要双亲委托机制?
(28).描述JVM类加载过程。
(29).动态代理是什么?如何实现?
(30).动态代理的方法怎么初始化的?(字节跳动)
(31).CGLIB动态代理(字节跳动)
(32).说说反射的应用场景,哪些框架,原理是什么?
(33).Java泛型的特点与优缺点,泛型擦除是怎么回事?
(34).List<String>能否转为List<Object>。
(35).泛型super和extends的区别。
a.说法2:Java 的泛型,<? super T> 和 <? extends T> 的区别。
(36).为什么IO是耗时操作?

3.3 并发编程

(1).假如只有一个cpu,单核,多线程还有用吗??(美团)
(2).sychronied修饰普通方法和静态方法的区别?什么是可见性?
(3).锁分哪几类?
(4).CAS无锁编程的原理。(字节跳动)
(5).ReentrantLock的实现原理。
(6).AQS原理 (小米 京东)
(7).Synchronized的原理以及与ReentrantLock的区别。(360)
(8).Synchronized在JDK1.8之后做了哪些优化 (京东)
(9).Synchronized static与非static锁的区别和范围(小米)
(10).volatile关键字干了什么?(什么叫指令重排) (字节跳动)
(11).volatile?能否保证线程安全?在DCL上的作用是什么?
(12).volatile和synchronize有什么区别?(B站 小米 京东)
(13).两个线程用不同的对象,怎么样?(字节跳动)
(14).什么是守护线程?你是如何退出一个线程的?
(15).sleep?、wait、yield?的区别,wait?的线程如何唤醒它?(东方头条、字节跳动)
(16).sleep是可中断的么?(小米)
(17).实现非阻塞式生产者消费者(字节跳动)
(18).如何开启一个线程,开启大量线程会有什么问题,如何优化?(美团)
(19).线程生命周期。
(20).ThreadLocal是什么?
(21).AyncTask的原理。
(22).AsyncTask中的任务是串行的还是并行的?
(23).线程池管理线程原理。
(24).线程池的相关参数,有哪些类型的线程池,线程池任务如何调度,任务队列只是先进先出的队列吗,任务有优先级怎么办,知道优先级反转吗? (美团)
(25).有三个线程T1,T2,T3,怎么确保它们按顺序执行?
(26).Android中操作多线程的方式有哪些?
(27).怎样获取当前线程是否是主线程 (字节跳动)
(28).HandlerThread是什么?
(29).线程间如何通信?
(30).RxJava线程切换原理,RxJava1和RxJava2的区别有哪些?

3.4 网络编程
(1).描述TCP三次握手与四次挥手的过程与意义。
a.TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?
b.三次握手为什么不是两次一次 五次六次(美团)
(2).TCP与UDP的区别是什么?(腾讯)
(3).Http与Https的关系是什么?
(4).SSL握手的过程。
(5).Http的post与get请求的区别是什么?
(6).输入一个URL到浏览器发生了什么?(美团)

四、Android体系

(1).?Acitvity的生命周期是什么样的?

a.?Acitvity的生命周期,如何摧毁一个Activity? (美团)

(2).?Activity的4大启动模式,与开发中需要注意的问题,如onNewIntent()?的调用;

a.?Activity的启动模式,区别 (美团)

b.?singleInstance如果不指定栈名,是怎么分配的?(字节跳动)

(3).?Intent显示跳转与隐式跳转,如何使用?(美团)

(4).?Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?(美团)

(5).?Activity如何保存状态的?

(6).?请描诉Activity的启动流程,从点击图标开始。(B站)

a.?APP是怎么启动的?

b.?启动一个Activity的流程分析

(7).?Service的生命周期是什么样的?

a.?Service两种生命周期以及区别

(8).?你会在什么情况下使用Service?

(9).?startServer和bindServier的区别?(美团)

(10).?Service和Thread的区别?

(11).?IntentService与Service的区别?

(12).?ContentProvider如何自定义与使用场景是什么?

(13).?BroadcastReciver的静态注册与动态注册的区别?

(14).?广播的分类与工作原理

(15).?可以再onReceive中开启线程么,会有什么问题?

(16).?什么是有序广播?

(17).?Application、Activity、Service中context的区别?能否启动一个activity、dialog?

(18).?Fragment的生命周期? ?(美团)

(19).?Fragment的构造函数为啥不让传参?(B站)

(20).?Fragment add与replace的区别,分别对Fragment的生命周期影响(美团)

五、View System

(1).View绘制流程与自定义View注意点。(东方头条、美团)
Android中的每一个UI控件都是集成自View,然后这些View都具有相同的绘制流程,必须经过measure,layout和draw.
view的绘制流程是在Window添加过程中,ViewRootImpl类的setView方法开始的
(2).在onResume中可以测量宽高么
(3).事件分发机制是什么过程?(东方头条)
(4).事件冲突怎么解决?(东方头条)
(5).View分发反向制约的方法?(字节跳动)
(6).自定义Behavior,NestScroll,NestChild。(东方头条)
(7).View.inflater过程与异步inflater(东方头条)
(8).inflater为什么比自定义View慢?(东方头条)
(9).onTouchListener onTouchEvent onClick的执行顺序。(58 京东)
(10).怎么拦截事件 onTouchEvent如果返回false onClick还会执行么?(58 京东)
(11).事件的分发机制,责任链模式的优缺点 (美团)
(12).动画的分类以及区别(车和家)
(13).属性动画与普通的动画有什么区别?(车和家)
(14).插值器 估值器的区别(车和家)
(15).RecyclerView与ListView的对比,缓存策略,优缺点。(美团)
(16).WebView如何做资源缓存?(字节跳动)
(17).WebView和JS交互的几种方式与拦截方法。(字节跳动)
(18).自定义view与viewgroup的区别
(19).View的绘制原理
(20).View中onTouch,onTouchEvent和onClick的执行顺序
(21).View的滑动方式
(22).invalidate() 和 postInvalicate() 区别
(23).View的绘制流程是从Activity的哪个生命周期方法开始执行的
(24).Activity,Window,View三者的联系和区别
(25).如何实现Activity窗口快速变暗
(26).ListView卡顿的原因以及优化策略
(27).ViewHolder为什么要被声明成静态内部类
(28).Android中的动画有哪些? 动画占用大量内存,如何优化
(29).自定义View执行invalidate()方法,为什么有时候不会回调onDraw()
(30).DecorView, ViewRootImpl,View之间的关系,ViewGroup.add()会多添加一个ViewrootImpl吗
(31).如何通过WindowManager添加Window(代码实现)?
(32).为什么Dialog不能用Application的Context?
(33).WindowMangerService中token到底是什么?有什么区别
(34).RecyclerView是什么?如何使用?如何返回不一样的Item
(35).RecyclerView的回收复用机制
(36).如何给ListView & RecyclerView加上拉刷新 & 下拉加载更多机制
(37).如何对ListView & RecycleView进行局部刷新的?
(38).ScrollView下嵌套一个RecycleView通常会出现什么问题?
(39).一个ListView或者一个RecyclerView在显示新闻数据的时候,出现图片错位,可能的原因有哪些 & 如何解决?
(40_.Requestlayout,onlayout,onDraw,DrawChild区别与联系
(41).如何优化自定义View
(42).Android属性动画实现原理,补间动画实现原理

六、Android FrameWork

1.Android中多进程通信的方式有哪些?
a.进程通信你用过哪些?原理是什么?(字节跳动、小米)
2.描述下Binder机制原理?(东方头条)
3.Binder线程池的工作过程是什么样?(东方头条)
4.Handler怎么进行线程通信,原理是什么?(东方头条)
5.Handler如果没有消息处理是阻塞的还是非阻塞的?(字节跳动、小米)
6.handler.post(Runnable) runnable是如何执行的?(字节跳动、小米)
7.handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么?(字节跳动、小米)
8.Handler的sendMessage和postDelay的区别?(字节跳动)
9.IdleHandler是什么?怎么使用,能解决什么问题?
10.为什么Looper.loop不阻塞主线程?
a.Looper无限循环为啥没有ANR(B站)
11.Looper如何在子线程中创建?(字节跳动、小米)
12.Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
13.如何更新UI,为什么子线程不能更新UI?(美团)
14.ThreadLocal的原理,以及在Looper是如何应用的?(字节跳动、小米)
15.Android 有哪些存储数据的方式?
16.SharedPreference原理,commit与apply的区别是什么?使用时需要有哪些注意?
17.如何判断一个 APP 在前台还是后台?
18.如何做应用保活?
19.一张图片100x100在内存中的大小?(字节跳动)

20.?Intent的原理,作用,可以传递哪些类型的参数?
21.如果需要在Activity间传递大量的数据怎么办?
22.打开多个页面,如何实现一键退出?
23.LiveData的生命周期如何监听的?(B站)

七、性能优化专题

1.App稳定性优化
2.App启动速度优化
3、App内存优化
4、App绘制优化
5.App瘦身
6.网络优化
7.App电量优化
8.安卓的安全优化
9.为什么WebView加载会慢呢?
10.如何优化自定义View
11.FC(Force Close)什么时候会出现?
12.Java多线程引发的性能问题,怎么解决?
13.TraceView的实现原理,分析数据误差来源。
14.是否使用过SysTrace,原理的了解?
15.mmap + native 日志优化?

八、三方源码理解

1.Glide :加载、缓存、LRU 算法 (如何自己设计一个大图加载框架) (LRUCache 原理)
2.EventBus
3.LeakCanary
4.ARouter
5.插件化(不同插件化机制原理与流派,优缺点。局限性)
6.热修复
7.RXJava (RxJava 的线程切换原理)
8.Retrofit (Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的)
9.OkHttp

结尾

  • 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升

img

  • 一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

img

Android架构师学习门槛,有没有免费学习资料?

有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我,在我的个人介绍栏目免费获取

或者点击:【点击我的GitHub免费领取】

《Android学习PDF+架构视频+面试文档+源码笔记》来获取学习资料提升自己去挑战一下BAT面试难关吧

为什么免费分享?

如果设置门槛,很多开发者朋友会因此错过这套高级架构资料,错过提升成为架构师的可能。这就失去了我们的初衷;让更多人都能通过高效高质量的学习,提升自己的技术和格局,升职加薪。