Android开发工程师面试总结

很久前自己曾有写博客的习惯,最终没有坚持。最近参加了一些面试,求职岗位--Android开发工程师,下面对面试过程中被问到的知识点简单做下总结。


Android

  • AOP两种实现方式
  • 引用类型及使用场景
  • 描述一下集合类,List,Set,Map,要去查阅常见集合类的源码
  • HashMap 源码,内部数据结构,get、put实现逻辑,多线程执行put操作时会出现什么问题
  • 编程过程中常用到的设计模式,为什么要用这种模式(避免过度设计)
  • 对平衡二叉树、B树的理解
  • Activity生命周期(不同情形下的生命周期函数调用顺序)、启动流程(四种启动模式)
  • View事件分发机制
  • 自定义View,了解自定义控件流程,invalidate、requestLayout区别,更新UI在哪个进程
  • Hander机制(Handler, Message, Looper, ThreadLocal), dispatchMessage具体做了哪些处理
  • Bundle机制,查阅Bundle源码实现,为什么用Bundle不用hashMap?
  • 内存泄漏及检测,列举常见的内存泄漏情形
  • LRUCache原理及源码实现
  • AsyncTask 两种调用模式区别
  • 三种动画之间区别与联系,使用场景
  • MVC,MVP模式有什么区别,为什么用接口不用实现类
  • 电源管理(Weaklock)
  • 实现多进程的几种方式
  • 线程的几种状态及状态之间的转换
  • 线程安全,如何写出线程安全代码
  • 对concurrentHashMap的理解,需要了解其内部实现,在什么情形下与hashTable表现性能一致
  • SP是进程安全的么?是线程安全的么?需要了解其内部实现
  • synchronized、Lock之间区别
  • CountDownLatch、CyclicBarrier、Semaphore
  • 对volatile关键字的理解,用双重校验锁实现单例模式如果不用此关键字,可能会出现什么情况
  • gradle点构建后的一系列处理
  • 65535问题
  • 是否了解动态加载方案
  • 模块化与插件化
  • 是否做过Reactnative
  • 对常见热修复方案的理解
  • AMS,PMS,应用程序启动流程

JVM

  • JVM原理
  • 列举堆溢出及栈溢出的场景
  • GC原理,常见垃圾回收算法
  • 类加载机制 (双亲委托)

网络

  • 浏览器怎么实现网络缓存(Session, Cookie)
  • Http、HTTPS、Socket(区别与联系), Socket 在七层网络模型属于哪一层(没有实际意义,只是对传输层的封装)
  • Get、Post区别
  • Forward,Redirect 区别

数据库

  • Btree索引和Hash索引的区别及使用场景
  • 数据库索引会失效的情景,列举常见的几种
  • select count(*) 、 select count(A) 、select count(distinct A) 有什么区别
  • 数据库优化策略
  • Sqlite
  • 用过哪些客户端数据库框架

第三方框架

  • 是否看过Retrofit源码,对其的理解
  • OKHTTP 缓存策略
  • Rxjava的理解,常见的操作符,自定义操作符
  • Fresco、Glide实现原理,缓存实现
  • 是否查看过开源框架源码,挑选一个详细介绍一下

算法

  • 找出一组数据中第K大的数(如果数据量特别大,不能一次加载到内存中如何处理)
  • n个结点,n-1条边,没有环的无向图,以哪个结点作为根结点形成的树结构高度最小
  • 如何判断一个链表是否有环,找到环的入口结点
  • 羊吃草问题,24头羊6天吃光草,20头羊9天吃光草,问18头羊多少天吃光草(草每天会生长)?
  • 手写一个List结构,不能使用集合类
  • 计算一个数字二进制中 1 的个数

情景

  • ListView 右边的滚动条为什么会跳跃
  • 长图加载内部是如何实现的
  • 图片编辑结果如何快速传递(不同Activity之间)
  • 如何在view可见前获取View的宽高

你可能感兴趣的:(面试)