2018年android面试分享和学习总结

10,056 阅读6分钟

概述

回顾历史不忘初心 展望未来继续前行。

17年零零碎碎也捣鼓了好一阵子,从Android 自定义View开始,到源码分析,设计模式,再到JVM的了解以及最近看完的Java线程和并发以及集合。对Android体系有了一个大概了认识和了解。

成果和收获

可以说博客和github对于面试有一定的加分项,原本一开始写博客的目的是因为公众号,博客平台等一些大V的建议,不过到后来发现写技术博客的过程中,不仅能够对知识的深入认识和掌握,还能够提升对该知识的记忆和印象。因为虽然写博客会比较耗时,不过对知识的梳理笔记能够让日后重温复习变得更简单快速。

17年初给自己定的目标是进入一家”大”公司,虽然没有对这个”大”字作出严格的定义。不过很幸运,18年3月的时候(也就是前两天)完成了这个目标。

我个人觉得以下两个观点可以说是比较营养滋补的心灵鸡汤 :

  • 工作后的努力,往往回报率会很高。
    可以这么说 : 初中升高中,高中升大学。也就是在我们的学生时代,努力的回报率可能不尽人意。高考想考个名牌大学,大多都是天资聪颖或是毅力顽强。
    但是,读了大学之后考研,考进名牌大学的难度会比高考时期小蛮多的(考上研的同学分享的心得)。
    最后说到工作,工作的努力往往带着很大的目的性,通过自身的不断学习积累,回报率会比考研还高。
    也就是 高考<考研<工作飞升。

  • 好环境能让人跑的更快。
    PS : 在绿皮车上跑步,很难追上在快车或者动车走路的人。

面试分享


Android

  1. 四大组件是什么与它们的生命周期(及Fragment)。

  2. Acitivty的四种启动模式与特点。

  3. Activity状态保存与恢复。

  4. Service的生命周期,启动方法,有什么区别。

  5. service和activity怎么进行数据交互。

  6. 怎么保证service不被杀死。

  7. 广播使用的方式和场景以及广播的几种分类。

  8. Intent的使用方法,可以传递哪些数据类型。

  9. ContentProvider使用方法。

  10. ContentProvider、ContentResolver、ContentObserver 之间的关系。

  11. Thread、AsycTask、IntentService的使用场景与特点。

  12. FrameLayout 、 LinearLayout 、 RelativeLayout 各自特点及绘制效率对比。

  13. Android的数据存储形式。

  14. Android两种序列化的区别和作用。

  15. Sqlite的基本操作。

  16. Android中的MVC、MVP模式。

  17. Merge、ViewStub的作用。

  18. 动画有哪几类,各有什么特点?

  19. Handler、Loop消息队列模型,各部分的作用。

  20. Android的消息机制,子线程更新UI的方法和原理。

  21. Android怎么加速启动Activity。

  22. App的启动过程。

  23. Android优化方法。

  24. 如何防止内存泄漏?

  25. Android中弱引用与软引用的应用场景。

  26. Bitmap的四种属性,如何加载大图(inJustDecodeBounds)。

  27. View与View Group分类。自定义View过程:onMeasure()、onLayout()、onDraw()。

  28. View刷新机制和绘制流程。

  29. Activity、Window、View的联系和理解。

  30. invalidate和requestLayout的区别及使用。

  31. Touch事件分发机制和冲突处理。

  32. Android IPC:Binder原理。

  33. Android5.0(UI库)、6.0(权限)、7.0特性。

Android 这块比较注重项目经验和平时学习的积累。 《Android开发艺术探索》《深入理解ANDROID 卷3》这两本书可以对Android有比较全面的认识和理解。


JVM

  1. Java运行时数据区域,导致内存溢出的原因。

  2. 对象创建、内存布局,访问定位等。

  3. GC的判定方法。

  4. 垃圾收集算法和运作原理。

  5. 内存分配与回收策略(Eden,survival from to,老年代)。

  6. Class文件结构(常量池)。

  7. 类加载过程。

  8. 类加载器(双亲委派模型)。

  9. 运行时栈帧结构(主要是局部变量表,理解栈堆)。

  10. Java泛型,自动拆箱,条件编译等多种语法糖。

  11. Java内存模型结构(主内存和工作内存)及操作,原子性可见性和有序性等。

  12. Java线程安全涉及的概念和分类。

《深入理解Java虚拟机 第二版》基本涵盖目前市场主流的 jvm 面试问题。


Java 线程

  1. volatile的内存语义和应用。

  2. Java重排序和顺序一致性。(as-if-serial和happens-before)

  3. 线程的状态和优先级。

  4. 启动线程和安全的终止线程。(interrupt)

  5. ThreadLocal的使用

  6. Java中的锁(偏向锁,轻量锁,重量级锁)

  7. Java重入锁ReentrantLock和Condition。

  8. Synchronized和锁的等级(方法锁、对象锁、类锁)。

  9. Synchronized的wait(sleep的区别)和notify运行过程。

  10. CAS介绍。(compare and swap)

  11. Java中的并发工具(CountDownLatch,CyclicBarrier等)

  12. Java线程池的使用和原理(模型)。

  13. Java生产者和消费者模型。

关于线程和并发这块方面的知识,我个人还是推荐先阅读《Java并发编程的艺术》,这本书比较好上手。 再通过《Java高并发程序设计》和《Java并发编程实战》深入理解。


Java 集合

  1. List、Set、Map的区别

  2. ArrayList、LinkedList、Vector的区别。

  3. CopyOnWriteArrayList的了解。

  4. HashMap和HashTable的区别。

  5. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

  6. TreeMap、HashMap、LindedHashMap的区别。

  7. Collection包结构,与Collections的区别。

Java集合主要考验对集合的使用和认识,一般都是以HashMap下手,问增删改查方法及内部原理。 集合这块暂时没有好的书本推荐。只能在网上了解。后面我也会写关于集合系列的文章。


网络

  1. TCP与UDP的区别。

  2. TCP和UDP报文结构。

  3. TCP的三次握手与四次挥手过程。

  4. TCP可靠传输原理实现(滑动窗口)。

  5. TCP拥塞控制。

  6. TCP流量控制。

  7. Http的报文结构。

  8. Http的状态码。

  9. Http的请求方法。

  10. Http1.1和Http1.0及2.0的区别

  11. Http长连接。

  12. Cookie与Session的作用和原理。

  13. Https加密原理。

网络这方面关于tcp/udp的可以阅读《计算机网络 第七版》的第五章运输层部分。 Http推荐《图解 HTTP》


数据结构和算法

目前算法还处于蓝海状态,算法和数据结构是需要日积月累慢慢修炼的内功心法,已经入手《算法 第4版》准备慢慢啃。 如果已经有算法基础的同学可以买《剑指offer》《编程之美》刷刷题。


写在最后

书籍是进步的阶梯。我之所以比较推荐用看书的方法来学习主要的原因是 : 书籍能够比较系统全面的了解某个知识。也就是可以建立知识体系。

不积跬步无以至千里,机会是留给有准备的人。

这里写图片描述