面试题整理-Android

125 阅读3分钟
  1. View的绘制和触摸事件机制。

调用 invalidate 或者 reqeustLayout 方法后,对绘制流程的影响。

  1. Java内存模型和虚拟机内存模型。
  2. 多线程的volatile关键字原理。
  3. 关于TCP你知道多少。
  4. https是如何加密的。
  5. HashMap的数据结构,并说明下put和get的流程。
  6. Android是如何通过xml文件展示出控件布局的。
  7. dex分包原理,哪些是放在主dex中的。
  8. CAS是什么,它的实现原理是什么。
  9. synchronized是如何保证原子性,可见性,有序性的。
  10. Flutter的绘制流程。

这个算是Flutter的重点问题吧。

  1. HashMap如何使用分段锁来保证线程安全。
  2. 主线程的Handler在子线程通过Message的obj把某对象传递到主线程处理,子线程切换到主线程是如何保证它的可见性的。
  3. CAS的ABA问题,如何解决。
  4. 点击app到第一个Activity可见经历了哪些过程。
  5. StartingWindow的展示时机。
  6. 详细说下Binder机制。
  7. Skiga和openGL的关系,各自负责哪些点。
  8. Kotlin协程是如何挂起和唤醒的。
  9. http2了解多少。
  10. 实现AOP的手段有哪些,切入点是哪些时机。
  11. 如何判断一个对象是可回收的。
  12. 垃圾回收算法有哪些。
  13. 你们应用启动时会有多少线程产生。

可能是想知道是否有对整体的线程进行调度。

  1. Kotlin和Java混合开发时,遇到了哪些坑。
  2. 进程和线程的关系和区别。
  3. HandlerThread帮我们做了哪些事。
  4. Android中有哪些动画,各自的坑点是什么。
  5. HashMap和Hashtable的区别。

最主要的区别还是线程安全,但是其他的数据结构、扩容、null值也最好说下,还有就是Hashtable是如何实现线程安全的。

  1. Retrofit是如何通过RxJava2CallAdapterFactory实现RxJava的链式调用的。
  2. LiveData和RxJava的联系和区别。
  3. 热启动显示启动页,如何实现。
  4. RecyclerView的缓存机制。
  5. 算法部分:
  • 有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。 给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。
  • 获取一个二叉树的每层最大值。
  • 利用链表进行大数相加。

如:1 -> 2 -> 3 -> 4和5 -> 6 -> 7 -> 8进行相加,得到6 -> 9 -> 1 -> 2。

  • 对一个链表以两个节点为一组,进行反转。

如:1 -> 2 -> 3 -> 4,得到2 -> 1 -> 4 -> 3。

  • 如何进行一次遍历得到一个链表的倒数第k个节点。
  • 获取二叉树从根节点出发和为target的路径。
  • 如何判断一个由'{','}','[',']','(',')'组成的字符串是合法的。
  • 合并两个有序链表得到一个有序链表。
  • 对一个二叉树进行链表化。