京东的校招面试是我第一次参加大型的现场面试,不管是初试还是复试,场面都是非常壮观,幸好两次面试都没有太怯场。

问题

下面贴一下初试和复试中遇到的一些问题。

初试:

  1. Android 的四大组件是哪些?
  2. Service 的 bindService 和 startService 有什么区别?
  3. Handler 能否在子线程中使用?
  4. View 的绘制流程?如何实现一个自动旋转的 ImageView
  5. 接口和抽象类的区别?
  6. 面向对象的三大特性?
  7. synchronized 关键字和 Lock 的区别?synchronized 在 JVM 是如何实现的?Java 对 synchronized 做了哪些优化?
  8. 介绍一下 HashMap。HashMap 在 1.8 之后用什么来存数据?(红黑树)HashMap 为什么不是线程安全的?(会成环)
  9. JVM 的内存模型是怎样的?
  10. 讲一下 C++ 中虚函数。
  11. 介绍以下 C++ 中的模板类。和 Java 中的泛型有什么区别?

复试:

  1. 对 Android 哪些部分的知识比较熟悉?
  2. View 绘制的分发流程。
  3. 有这样一个需求,在 onDraw() 中绘制 10 张图片,会有什么影响?
  4. 讲一下 Android 中的 Handler 机制。Looper 是如何创建的?prepare() 方法做了哪些事情?Handler 如何发送延时的 Message?
  5. Http 和 Https 的区别?对称加密和非对称加密有何区别?
  6. 长连接是如何实现的,如何维持长连接?
  7. 二叉树的前序、中序、后序遍历。
  8. 平常用到哪些设计模式?手写一个单例模式。在 Android 中单例模式失效(还是会创建多个实例)?(多进程)
  9. 对 Android 的插件化有了解吗?
  10. 讲一些 Android 的反射。Java 为什么要设计反射机制?
  11. 还有哪些语言可以运行在 JVM 上?(Kotlin)
  12. JVM 的内存模型。
  13. 二分查找的条件是什么?(有序)
  14. 快速排序的实现原理是什么?

总结

这两次面试所被问到的题目都还是比较常见的,大部分也都是在面试准备中所应该准备到的题目。初试的时候被问到 C++ 的问题让我很慌,后面也要抽时间把 C++ 中的一些知识回顾一下。关于 JVM 内存模型的问题也被问到很多次了,但是一直没去好好看这个知识点,这两次都被问中,也是很难受。

秋招之路漫漫,唯上下而求索。