Android 高级面试题!android 享学课堂 vip 课程下载
二、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).如何使用快速排序算法对整数数组进行排序? CVTE3.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.如何优化自定义 View11.FC(Force Close)什么时候会出现?12.Java 多线程引发的性能问题,怎么解决?13.TraceView 的实现原理,分析数据误差来源。14.是否使用过 SysTrace,原理的了解?15.mmap + native 日志优化?
八、三方源码理解
1.Glide :加载、缓存、LRU 算法 (如何自己设计一个大图加载框架) (LRUCache 原理)2.EventBus3.LeakCanary4.ARouter5.插件化(不同插件化机制原理与流派,优缺点。局限性)6.热修复 7.RXJava (RxJava 的线程切换原理)8.Retrofit (Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的)9.OkHttp
【附】相关架构及资料
往期 Android 高级架构资料、源码、笔记、视频。高级 UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter 全方面的 Android 进阶实践技术,群内还有技术大牛一起讨论交流解决问题。
**本文已被[CODING 开源项目:《Android 学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](
)
收录**
最后自我介绍一下,小编 13 年上海交大毕业,曾经在小公司待过,也去过华为、OPPO 等大厂,18 年进入阿里一直到现在。
深知大多数初中级 Android 工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此也是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
评论