安卓rxjava开发pdf,安卓大厂74道高级面试合集

## 二、Android面试知识框架 ![Android面试知识框架](http://www.icode9.com/i/li/?n=2&i=images/20210712/1626042428886826.jpg) ## 三、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[m][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).*与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能否转为List。 (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 #### 最后笔者收集整理了一份Flutter高级入门进阶资料PDF 以下是资料目录和内容部分截图 > ![](http://www.icode9.com/i/li/?n=2&i=images/20210712/1626042428174682.jpg) > ![](http://www.icode9.com/i/li/?n=2&i=images/20210712/1626042428405452.jpg) > 里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。学不会来打我! > ![](http://www.icode9.com/i/li/?n=2&i=images/20210712/1626042428681876.jpg) > **以上资料皆无偿分享,领取方式:[点击我的GitHub](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)即可免费获取**
上一篇:Android 开源库源码分析


下一篇:2021大厂Android面试最火问题,超详细