Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Question To Ask | 后续面试题集中征集处

Moosphan opened this issue · comments

Question To Ask | 后续面试题集中征集处

回答统一格式,如:

  • 问题内容:接口与抽象类的区别?
  • 所属范围:Java 相关
  • 问题出处(可选):xxx公司面试题
  • 出现频率(可选):★★★★☆ (此处表示4.5星,满分为:★★★★★)
  • 困难指数(可选):★★★☆ (此处表示3.5星,满分为:★★★★★)
  • 参考答案(可选):xxxxx
  • 问题内容:为什么 Android 设计成只能在主线程更新 UI?

  • 所属范围:Android 相关

  • 问题内容: 一张 1M 大小的图,加载到 Android 中占多大内存,怎么计算的?

  • 所属范围:Android 相关

  • 问题内容:屏幕旋转时 Activity 的生命周期如何变化的?

  • 所属范围:Android 相关

  • 问题内容: Activity 的启动流出和 APP 的启动流程?

  • 所属范围:Android 相关

问题内容:从机器和开发者来看,对象分别是什么?
所属范围:Java或系统底层
问题出处:自创
问题难度:二星
出现频率:一星

问题内容:为什么在安卓7.0以后,谷歌不建议使用file:// URI传递文件了?
所属范围:Android 相关

问题内容:Activity等中的onLowMemory()和onTrimMemory(int level)有什么异同?
所属范围:Android 相关

问题内容:强引用、软引用、弱引用、虚引用的区别 ?
所属范围:Java
参考答案:

  • 强引用:最常见的普通对象引用,只要有强引用的存在,不管该对象是否闲置,垃圾收集器都不会去管理该对象。那什么时候会被回收呢?如果没有其他引用关系,只要超过了引用作用范围或者显示得将引用赋值为null,就可以被回收了。
  •     软引用:通过 SoftReference 类实现,它的生命周期要比强引用短一些,当内存不足才会被垃圾收集器回收。
  •     弱引用:通过 WeakReference 类实现,它的生命周期比软引用短一些,当垃圾收集器线程扫描到它的时候,不管内存是否不足都会被回收,不过垃圾收集器线程优先级很低,所以不一定会很快回收该对象。
  •     虚引用:又叫“幻象引用”,通过 PhantomReference 类实现,你不能通过它访问对象。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制。这个在日常开发中很少用到。

问题内容:A类的static 代码块, 什么情况下, 会被触发执行, 你能列举出多少情况?
所属范围:Java 相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★
参考答案(可选):调用A类的静态属性; 初始化A类的实例(包括反射); 使用 ClassLoader加载A类; 目前知道这几种;

问题内容:LinearLayout, FrameLayout, RelativeLayout 哪个效率高, 为什么;
所属范围:Android相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★
参考答案(可选):

问题内容:LinearLayout 包裹 A, B 两个 Button, 在 AButton 上按下, 一直移动, 手指扫过 BButton, 整个事件传递的过程, MoveEvent 的数值;
所属范围:Android相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★
参考答案(可选):

问题内容:HTTP 1.0与1.1 的区别?
所属范围:HTTP相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★★★
困难指数(可选):★★
参考答案(可选):

问题内容:launcher 启动 App 的 MainActivity, 牵涉到哪几个进程, 期间用什么方式进行的通信?
所属范围:Android相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★★
困难指数(可选):★★★
参考答案(可选):

问题内容:活动 A 调用 startActivityForResult 前往活动 B, 在 B 页面 setResult,并启动活动 A, 并且活动 A 的启动模式是 SINGLE_TASK,请问活动 A 会回调哪些方法?这些方法的执行顺序是怎样的?
(onRestart-onResume-onNewIntent-onActivityResult)
所属范围:Android相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★
参考答案(可选):

问题内容:假设有一个AService, 我们先Start2次, 再Bind2次;
1.. 请问内存中有几个AService对象实例, 怎么做到的?
2.. 如果想让这个AService停下来, 需要怎么做?
所属范围:Android相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★★
困难指数(可选):★★
参考答案(可选):

问题内容:Glide 是不是后进来的任务, 优先执行?
如果让你实现这个需求, 你打算怎么做?
所属范围:Android相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★
参考答案(可选):

问题内容:RxJava 用过吧? 假设现在让你设计一个通用的框架, 假设就做HTTP请求, 那么你可以设计实现,
ABC多个任务串行执行吗? ABC多个任务并发执行吗? 多个任务串行+并发呢?
你打算怎么解决这个问题, 可以先简单讲一下, 可以不参照RxJava原理, 只要能实现需求即可;
所属范围:Java相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★★
参考答案(可选):

问题内容:动态代理的原理, 简单讲一下;
动态代理, 能否代理普通类, 譬如 UserBean, 答案是 No; 为什么不能呢? 能大概讲一下吗?
所属范围:Java相关
问题出处(可选):不记得啊, sorry
出现频率(可选):★
困难指数(可选):★★★
参考答案(可选):

问题内容:通过ByteBuffer.allocate和ByteBuffer.allocateDirect分配的ByteBuffer有什么不同?
所属范围:Java相关
出现频率:★☆
困难指数:★★

问题内容:线程池技术有什么优点?
所属范围:Java基础
出现频率:★★☆
困难指数:★

问题内容:finalize()方法是什么?为什么不建议对象重写此方法?
所属范围:Java基础
出现频率:★★★
困难指数:★

问题内容:什么是volatile关键字?
所属范围:多线程
出现频率:★★
困难指数:★★
参考答案:https://zhuanlan.zhihu.com/p/56191979

回答统一格式,如:

问题内容:小明从一楼到三楼用了6分钟 (每层用的时间都是一样的)那么他从一楼到六楼用了多长时间

所属范围:Java相关
问题出处(可选):XXX公司面试题

Android相关问题
ListView和RecyclerView的性能比较以及运用场景的选择

问题内容:下拉状态栏会不会影响Activity的生命周期?为什么?
所属范围:Android

问题内容:局部变量能否用final修饰符,有什么好处?
所属范围:Java

问题内容:HandlerThread和Thread 、Handler三者之间的关系,在什么情况下使用?
所属范围:Android

问题内容:什么是 Java 注解?
所属范围:Java基础
备注:注解,不是注释!!

问题内容:什么是Java中的泛型?使用泛型相比强转的好处的什么?
所属范围:Java基础

问题内容:HashMap,ArrayMap,IdentityHashMap,Hashtable,ConcurrentHashMap,EnumMap,SparseArray/LongSparseArray的区别?
所属范围:集合框架

问题内容:Android给我们提供了一个叫 LruCache 的缓存类,那么,什么是 LRU 算法?
所属范围:算法

问题内容:更改线程优先级可以使用Thread类的setPriority(int)方法,也可以用android.os.Process的setThreadPriority(int),那么两者之间是什么关系?
所属范围:Android
出现频率:★
困难指数:★★
参考答案:
为了这个问题我特意去看过源码。
Thread的setPriority方法是把参数保存到了成员变量priority里,如果此线程在工作,调用nativeSetPriority方法,这个方法会把Thread类定义的那些线程优先级转换为linux的优先级,然后如果设置为background级别,或从background修改到非background,调用set_sched_policy设置调度策略,最后调用linux的setpriority来设置。
Process的setThreadPriority直接就是个native方法,一路追踪下来最后还是调用的set_sched_policy和setpriority,不同的是没有转换(传进来的参数直接就是linux的优先级)
还剩下一个问题,设置了优先级,获取的时候结果是什么?
Thread的getPriority方法直接返回了成员变量priority,所以通过Process.setThreadPriority设置不会反映到这里
Process的getThreadPriority方法返回的是getpriority的结果,所以通过Thread.setPriority设置之后也会反映到这里

  • 问题内容 : RecycleView和ListView的区别?
  • 所属范围 : Android相关
  • 出处 : 忘了
  • 出现频率 : ★
  • 困难指数 : ★★★
  • 参考答案 :
  1. ViewHolder模式 在ListView中,没有严格的ViewHolder模式。但在使用RecycleView时,ViewHolder是必须实现的。
  2. ListView只能实现垂直线性排列的列表视图,而RecycleView可通过LayoutManager来实现水平滚动视图或者瀑布流视图。
  3. item动画。在RecycleView中可以通过ItemAnimator来实现。
  4. 数据源。在ListView中通过实现不同的Adpter来实现,而在RecycleView中则必须通过RecycleView.Adapter来实现。
  5. ListView是两级缓存,RecycleView是四级缓存。
  6. RecycleView可以实现局部刷新

问题内容:Exception(指checked exception),RuntimeException,Error的异同和出现场景?
所属范围:Java 基础
出现频率:★★
困难指数:★

问题内容:对象的浅克隆和深克隆是什么?
所属范围:Java 基础
出现频率:★
困难指数:★★

问题内容:什么是冒泡排序?
所属范围:算法
出现频率:★★☆
困难指数:★
ps:关于为什么不问其他排序算法,因为我只会冒泡。。。

问题内容:关于 onMeasure 的问题
第一次预测量-调用栈流程: performTraversals-measureHierarchy-performMeasure;
第二次最终测量-调用栈流程: performTraversals-performMeasure;
1.. 第一个问题
什么时候会触发第一次测量, 什么时候会触发第二次测量, 为什么要这样做, 只测量一次行不行? 所有的UI系统, 例iOS, 都是要这样做吗? 这个问题, 困扰很久了, 网上的答案多数是, 我发现了这个现象, 这些函数都干了什么;

2.. 第二个问题
第一次测量, 是拿着父窗体的尺寸, 问子控件要多大?
第二次测量, 是拿到了子控件的尺寸, 调整父窗体尺寸, 并告诉子控件, 父窗体只能提供多大尺寸, 也可以强制子控件变成多大尺寸;
我这样理解, 对不对? 请好心人, 帮忙解答;

所属范围:Android 基础
出现频率:★
困难指数:★★

问题内容:普通View,SurfaceView,TextureView有什么异同?
所属范围:Android View相关
出现频率:★★
困难指数:★

建议将已经征用的问题在“面试题征集处”删除 @Moosphan

commented

问题内容:简述一下什么是快速排序及其应用场景?
所属范围:算法
出现频率:★★
困难指数:★★★

问题内容:什么是算法的时间复杂度和空间复杂度?
所属范围:算法相关

问题内容:如何在不使用加减乘除的情况下求一个整数的7倍?(不限定语言)
所属范围:无(不知道怎么分类)
出现频率:★★
困难指数:★★★★
参考答案:https://75team.com/post/multiply7.html

问题内容:如何判断一个链表是否有环?
所属范围:算法/数据结构
出现频率:★★★
困难指数:★☆

问题内容:如何解决哈希冲突?
所属范围:算法/数据结构
出现频率:★★★★
困难指数:★

问题内容:ArrayList是否可以被序列化,如何序列化
所属范围:java 基础
出现频率:★★★★
困难指数:★

问题内容:Activity onDestroy()什么时候调用,什么时候不会调用 ?
所属范围:Android 相关

问题内容:View.post为啥可以获取view的宽高,View.post一定会执行吗?
所属范围:Android 相关
出现频率(可选):★★★★☆
困难指数(可选):★★★☆
参考答案(可选):参考范围:onAttachedToWindow进而追溯到viewrootimpl和绘制流程/后者不一定执行(跟API挂钩,7.0之前跟之后被官方爸爸重构过)

问题内容:谈谈对ThreadLocal的理解? 使用场景有哪些?
所属范围:线程 相关
问题出处(可选):百度

问题内容:字符串中存在多个{[()]}, 如何正确匹配?
所属范围:算法 相关
问题出处(可选):百度

问题内容:如何简单粗暴的理解 协程模型/工作模式

所属范围:kotlin相关

问题内容:谈谈对 webview 优化的经验和理解

所属范围:Android 相关

commented

问题内容:关于 onMeasure 的问题
第一次预测量-调用栈流程: performTraversals-measureHierarchy-performMeasure;
第二次最终测量-调用栈流程: performTraversals-performMeasure;
1.. 第一个问题
什么时候会触发第一次测量, 什么时候会触发第二次测量, 为什么要这样做, 只测量一次行不行? 所有的UI系统, 例iOS, 都是要这样做吗? 这个问题, 困扰很久了, 网上的答案多数是, 我发现了这个现象, 这些函数都干了什么;

2.. 第二个问题
第一次测量, 是拿着父窗体的尺寸, 问子控件要多大?
第二次测量, 是拿到了子控件的尺寸, 调整父窗体尺寸, 并告诉子控件, 父窗体只能提供多大尺寸, 也可以强制子控件变成多大尺寸;
我这样理解, 对不对? 请好心人, 帮忙解答;

所属范围:Android 基础
出现频率:★
困难指数:★★

-----------分割线--------------------
问:什么时候会触发第一次测量, 什么时候会触发第二次测量, 为什么要这样做, 只测量一次行不行?
答:除了DecorView,其他的View第一次测量大多数都是发生在它的父View调用onMeasure得时候;什么时候需要第二次测量?自然是第一次测量时无法确定具体的尺寸时,就会发生第二次的测量,如LinearLayout的权重,子View的宽度设为0,权重为1,那么第一次测量结果为0,等其他的View都测量完毕,再去测量这个权重的View,给它设置正确的宽度;
这也正是存在这种无法通过一次测量得出需求尺寸的因素,才需要对View进行多次测量

问:第一次测量, 是拿着父窗体的尺寸, 问子控件要多大?
答:这个是在父View的尺寸是精确的情况下的一个情况,如果父View的尺寸都是wrap_content,此时要看父View的父View有无做限制了,如果都没限制,那么就是子View要多大就给多大,并依据全部子View的尺寸确定父View的具体尺寸了

问:第二次测量, 是拿到了子控件的尺寸, 调整父窗体尺寸, 并告诉子控件, 父窗体只能提供多大尺寸, 也可以强制子控件变成多大尺寸;
答:是的,第二次测量往往都是父View的尺寸已经确定了,要对第一次测量还无法确定具体尺寸的View进行二次测量

问题内容:View.post为啥可以获取view的宽高,View.post一定会执行吗?
所属范围:Android 相关
出现频率(可选):★★★★☆
困难指数(可选):★★★☆
参考答案(可选):参考范围:onAttachedToWindow进而追溯到viewrootimpl和绘制流程/后者不一定执行(跟API挂钩,7.0之前跟之后被官方爸爸重构过)

希望接下来是这个啊

问题内容:谈谈 Android 里的uid?
所属范围:Android 相关
出现频率:★★
困难指数:★☆

问题内容:谈谈悲观锁和乐观锁?
所属范围:多线程
出现频率:★★☆
困难指数:★★

问题内容:谈谈偏向锁,轻量级锁,重量级锁?
所属范围:多线程
出现频率:★★
困难指数:★★
参考答案:可参考此文章:一个想休息的线程:JVM到底是怎么处理锁的?怎么不让我阻塞呢?

问题内容:谈谈 multidex?有什么坑?
所属范围:Android 相关
出现频率(可选):★★☆
困难指数(可选):★★

问题内容:浮点数为什么不精确?
所属范围:底层实现(不知道怎么分类2333)
出现频率(可选):★★☆
困难指数(可选):★★★

问题内容:String的intern方法有什么作用?
所属范围:Java 相关
出现频率(可选):★★
困难指数(可选):★☆

问题内容:我们经常听见“Android每16ms刷新一次视图”,那么这个数字是怎么得出的?你能讲讲原理吗?
所属范围:View
出现频率(可选):★★★
困难指数(可选):★★☆

问题内容:为什么会出现 ConcurrentModificationException?
所属范围:Java 基础

问题内容:如何优化 SharedPreferences?
所属范围:Android 数据储存

问题内容:既然红黑树那么好,java8里在HashMap中也有应用,为什么HashMap还要保留链表结构而在单个链表元素较多时才转换为红黑树?
所属范围:算法/数据结构

commented

问题内容:onTouchEvent事件返回值的意义
所属范围:Android事件传递
面试公司:阿里巴巴

commented

问题内容:谈谈retrofit的实现原理?
所属范围:第三方库

问题内容:在上一家公司任职过程中,你最有成就感的一次经历?
所属范围:开放性
问题出处:各大公司面试题
出现频率:★★★★★
困难指数:★★★★☆

问题内容:blockCanary的原理
所属范围:第三方库源码

问题内容:请说说findViewById做了哪些事情?并说说其内部原理?
所属范围:Android
问题出处:百度面试题
出现频率:★★★☆☆
困难指数:★★★★☆

问题内容:队列的实现方式有哪些?基于数组和链表结构实现的队列各有什么特点和应用场景?
所属范围:数据结构算法
问题出处:百度面试题
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:Retrofit中如何动态配置baseUrl?
所属范围:Android
问题出处:百度面试题
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:Java集合操作中的sort方法底层用的什么排序算法?能否简要分析一下其原理?
所属范围:Java、数据结构算法
问题出处:国外某独角兽公司面试题
出现频率:★★☆☆☆
困难指数:★★★★☆

问题内容:请从源码角度说说Activity的启动过程?
所属范围:Android
问题出处:百度面试题
出现频率:★★★☆☆
困难指数:★★★★☆

问题内容:什么是跳表?请说说它内部原理和特点,相比于红黑树,它有什么优点?
所属范围:数据结构算法
问题出处:ThoughtWorks面试
出现频率:★★☆☆☆
困难指数:★★★★★

问题内容:请说说HashMap在JDK1.8版本中做了哪些改动?为什么这样修改?
所属范围:数据结构算法
问题出处:滴滴出行面试
出现频率:★★★☆☆
困难指数:★★★★☆

问题内容:请说说哈希算法有哪些应用场景?请列举几个具有代表性的哈希算法?
所属范围:数据结构算法
问题出处:滴滴出行面试
出现频率:★★☆☆☆
困难指数:★★★☆☆

问题内容:如何在O(n)时间内从一组数据中找出第K大的值?
所属范围:数据结构算法
问题出处:滴滴出行面试
出现频率:★★☆☆☆
困难指数:★★★★☆

问题内容:散列表查找效率很高,那么为什么还需要二叉树呢,请说说你的看法?
所属范围:数据结构算法
问题出处:Hello出行面试
出现频率:★★☆☆☆
困难指数:★★★★☆

问题内容:什么是堆排序?为什么快速排序比堆排序性能要好?
所属范围:数据结构算法
问题出处:滴滴出行面试
出现频率:★★☆☆☆
困难指数:★★★★☆

问题内容:在Java中,以下代码可无视java checked exception限制强行抛出异常:

public class Hack {
    @SuppressWarnings("unchecked")
    public static <T extends Throwable> void throwNoCheck(Throwable e) {
        throw (T) e;
    }
}
Hack.<RuntimeException>throwNoCheck(new Throwable());

它的原理是什么?

所属范围:Java 基础
出现频率:★★
困难指数:★☆

问题内容:请谈谈AsyncTask内部实现原理?
所属范围:Android源码
问题出处:滴滴出行面试
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:如何实现绝对值运算?
所属范围:Java
问题出处:某独角兽互联网
出现频率:★☆☆☆☆
困难指数:★★★☆☆

问题内容:什么是原子操作?你能列举一些原子操作的例子吗?
所属范围:Java
问题出处:某独角兽互联网
出现频率:★★☆☆☆
困难指数:★★★☆☆

问题内容:请说说AAR打包过程?它会生成哪些资源?
所属范围:Android
问题出处:互联网某独角兽公司
出现频率:★★☆☆☆
困难指数:★★★☆☆

问题内容:finally 语句块中可以使用 return 操作吗?为什么?
所属范围:Java
问题出处:某独角兽互联网
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:Java接口变更的情况下,如何处理才会尽可能少的影响上层接口实现上的改动?
所属范围:Java
问题出处:无
出现频率:★☆☆☆☆
困难指数:★★★☆☆

问题内容:Kotlin 中匿名函数和lambda表达式的区别是什么?
所属范围:Kotlin
问题出处:无
出现频率:★☆☆☆☆
困难指数:★★★☆☆

问题内容:遇到 WindowManager$BadTokenException 你是如何解决的?
所属范围:Android疑难杂症
问题出处:无
出现频率:★☆☆☆☆
困难指数:★★★★☆

问题内容:什么是类型擦除?有哪些方式可以获取泛型参数的类型信息?
所属范围:Java
问题出处:无
出现频率:★☆☆☆☆
困难指数:★★★★☆
回答范围:https://blog.csdn.net/zzp_403184692/article/details/8266575

问题内容:Gson中TypeToken的实现原理?
所属范围:源码
问题出处:滴滴
出现频率:★☆☆☆☆
困难指数:★★★☆☆

问题内容:git rebase 和 git merge 的区别?
所属范围:Git
问题出处:未知
出现频率:★☆☆☆☆
困难指数:★★★☆☆

问题内容:能从Framework层分析一下ANR产生的原因吗?
所属范围:源码
问题出处:滴滴
出现频率:★★☆☆☆
困难指数:★★★★☆

问题内容:IdleHandler有了解过吗?和普通的Handler有什么不同?
所属范围:Android源码
问题出处:无
出现频率:★☆☆☆☆
困难指数:★★★☆☆

问题内容:Activity因异常重启后系统会做些什么?如何恢复数据的?
所属范围:Activity
问题出处:无
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:非Activity类型Context如何启动新的Activty?
所属范围:Activity
问题出处:无
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:当try-catch-finally每个语句块中都有return语句,最终返回是哪个块中的值?
所属范围:Java
问题出处:无
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:试从源码角度分析RecyclerView上下滑动过程?
所属范围:RecyclerView(缓存机制)
问题出处:Alibaba
出现频率:★★★☆☆
困难指数:★★★★☆

问题内容:请说说Retrofit背后实现原理?
所属范围:网络
问题出处:阿里巴巴
出现频率:★★★☆☆
困难指数:★★★★☆

问题内容:Intent-Bundle内部是如何实现数据传递的?
所属范围:源码
问题出处:阿里巴巴
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:ARouter实现原理是什么?
所属范围:开源框架
问题出处:阿里巴巴
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:Looper为什么不会卡死,Epoll的实现原理是什么?
所属范围:源码
问题出处:阿里巴巴
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:ClassLoader的双亲委托机制?
所属范围:源码
问题出处:阿里巴巴
出现频率:★★★☆☆
困难指数:★★★☆☆

问题内容:unicode和utf-8有什么区别?
所属范围:计算机基础
问题出处:阿里巴巴
出现频率:★★★☆☆
困难指数:★★★☆☆