记一次 Android 面试

最近老同事给内推了链家网的 Android 职位,由于时间仓促,加上近半年多一直处于忙碌地开发状态中,还没能复习便接到了电话面试。

虽然大部分问题都答上来了,原理性的问题基本都把大体流程说出来了,但是时间间隔太久不少具体细节记不太清了,描述得不够详细,因此并没能达到面试官的期望值。

对于自己的表现,基本在自己的预期中,谈不上好,也谈不上太差,还算中规中矩,只是一面都没过,自己还是挺失落的(自己真的是有点自信过了头,觉得不复习也能轻松过一面 o(╥﹏╥)o )

之前在内推的简历前还特意对一些项目的功能实现加了些描述,因为功能其实挺复杂的,需要结合很多知识点,并且自己做了最大化的优化,遗憾的是面试官竟然没有问到任何一个跟项目相关的问题(这点跟我面试别人的时候完全不同,我喜欢根据项目去拓展问题)。

总的来说面试的问题并不是太难,但是需要静下心来花时间好好复习,趁着面试刚过去两三天,还能记得大部分面试问题,抽了些时间将电话面试中的问题做了下整理(后续会补上答案),方便自己后续复习,也希望能帮助到大家。

题目整理

  1. StringBuilder 和 StringBuffer 区别

    StringBuilder 跟 StringBuffer 一样,都是用来处理可变的字符序列 , 区别在于 StringBuilder 是线程不安全的 ,而 StringBuffer 是线程安全的
    在运行效率上,StringBuilder 比 StringBuffer 要高, 因此在不考虑线程安全的情况下,推荐使用 StringBuilder。

  2. String 在 jvm 中的设计原理

    深入理解Java:String

  3. synchronized Lock 区别

    详解synchronized与Lock的区别与使用
    深入研究 Java Synchronize 和 Lock 的区别与用法

  4. java 中 sleep() 跟 wait() 区别,项目中 Thread sleep 的应用场景

    1. sleep() 属于 Thread 类
      线程调用此方法后,会休眠一段时间,休眠期间,会暂时释放cpu,但并不释放对象锁
    2. wait() 属于 Object 类
      释放占有的对象锁,线程进入等待池,释放cpu,而其他正在等待的线程即可抢占此锁,获得锁的线程即可运行程序
  5. sychronized 锁住方法后方法能被中断吗?

    不能被中断,Lock 可以被中断

  6. java 中 final 修饰方法和修饰类的作用

  7. ArrayList 和 LinkedList 区别

    1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
  8. ArrayList 的实现原理,是否允许数据重复

  9. Java 动态代理 Proxy 类的使用

  10. Java的反射机制,原理,应用场景,getDeclaredField和getField 的 区别

  11. java 单例设计模式,双重检测写法中两个判空的原因

  12. Android 整个界面布局,父子组件的绘制流程以及单个子 View 的绘制流程

  13. Android 事件分发机制原理相关代码,如何处理父子布局的嵌套滚动

  14. 自定义 View 中,onMeasure 中 MeasureSpec 的 Spec 有几种类型, 以及他们的作用,在其值为 EXACTLY 的情况下, 当子 View 超过父 View 大小时, 返回的宽高值是什么,是否会超过父布局

  15. Activity 的启动渲染流程, AMS, ActivityThread 相关概念

  16. Android 解析 XML 有几种方式? LayoutInflate 是如何解析 XML 并创建对象的(面试官是想问这里用的反射的方式创建的对象)

  17. Android 中代理模式的应用场景

  18. Android 中 Binder 的原理机制, 其中 ServiceManager 传递给 Client 的进程是否为真实进程

  19. Android 中 Handler 的原理机制

  20. Android 中 Service 的概念, IntentService 和 Service 区别,在 IntentService 中是否需要手动终止 Service, Service 的使用场景

  21. Android 中跨进程通信的方式, 应用场景, aidl 相关概念

  22. Dalvik 和 JVM 的区别

  23. pathclassloader, dexclassloader 区别

  24. Android 插件化的实现原理机制

  25. Android 热修复的主流框架对比及实现原理

  26. 一个界面中需要请求多个接口,所有接口数据获取后再进行界面渲染,请问如何来实现

  27. RxJava 中 merge, zip 的实现原理

  28. 自定义 View 中如何实现圆形图片

  29. 说说你常用的图片框架以及实现原理(glide, fresco)

  30. Android 中 65535 问题中 MultiDex 的实现原理

  31. Android 中内存泄漏的常见场景(我回答了项目中遇到的非静态内部类/匿名内部类,Handler,异步操作引用了 Context,面试官多次询问是否还有其他场景后补充了自定义 View 中 TypeArray 使用后未调用 recycle()方法也会泄漏)

  32. Android 中如何开启新的进程,Manifest 中 process 参数命名加 “:” 什么作用

  33. 如何快速将一个单向链表反序操作

  34. 冒泡排序的实现

猜你喜欢

转载自blog.csdn.net/cjpx00008/article/details/81178677