Android面试知识点总结

昨天发了一片文章《Android近期面试总结》,其实这篇文章主要还是对于自己前一段时间所做的事情的总结。对大家的价值并不是很大。而有一位将要实习的同学讲“先收藏,到时候再来看。”我也不想这样误人子弟,而自己在前一段时间也整理了很多知识点,只是在自己的笔记本中,其实这些才是对于将要找工作的人价值比较大的吧。

文中只有知识点,没有解答,请各位自行寻找答案。(不然内容将会过长,而且这些东西网上都有很多相关的内容,很好找到,所以请自行查找。)

本文将为大家提供以下内容的部分知识点:

  1. Java基础知识
  2. Android基础知识
  3. 计算机网络基础知识

个人非常不擅长算法,我也懒得去刷那些算法题。所以就不列了。不过对于找实习的各位同学,要去好好刷刷那些算法题。我本放荡不羁爱自由,当初就是因为太任性,懒得刷,大公司的笔试都没过,现如今,生而为人却不能光芒万丈,真是无颜见我的列祖列宗和江东父老呀。前车之鉴,后事之师。各位同学自己看着办。

Java基础知识点

  1. 基本类型和引用类型是什么?每种基本类型都占多少位多少字节?String是基本类型还是引用类型?
  2. Java什么时候是值传递什么时候是引用传递?
  3. String相关的。String常量池,StringBuffer,StringBuilder,运算符“+”与“+=”重载。String不可变的理解。String的intern方法不同版本的实现原理的区别。
  4. 什么是自动拆装包?
  5. Java的作用域修饰词有哪些?他们的作用是什么?(不要忘记default,default可以理解成包级别的作用域修饰符)
  6. Java的容器框架结构。他们对应的数据结构都是什么?他们有什么优缺点?哪些是RandomAccess的(这个和遍历的时候是使用迭代器的方式还是i的方式有很大关系)。(有时间最好把HashMap,ArrayList,LinkedList,HashTable,HashSet,搞安卓的同学最好把LinkedHashMap的源码也看了,因为这个和我们常用的一个内存缓存LruCache有很大关系。)
  7. Java容器相关的辅助类Arrays和Collections了解一下。
  8. Java虚拟机的内存模型。堆,方法区,方法栈,本地方法栈,程序计数器都是什么?这些不同虚拟机的具体实现是不同的,我们经常讨论的是HotSpot中的实现。堆的什么新生代老生代?Eden?Survivor的Form和To?永久代。
  9. Java的GC机制?内存回收策略有哪些?HotSpot中具体策略是什么?两次回收是怎么回事(和finilize有关)?如果有时间最好再去了解哪些是GC Root?
  10. final,finally和finalize都是干什么的?带有finally又有return的方法中,finally中的代码是什么时候执行的,finally中改变了return的值,什么情况下会起作用什么情况下不会起作用?
  11. Java 4种引用,强软弱虚引用都是什么?
  12. Java怎样开启一个线程。线程池是干什么的?有哪些常用的线程池?优缺点是什么?
  13. Java中同步的方式有哪些?类锁和对象锁。共享锁和排斥锁。wait,notify,notifyAll。await和signal,signalAll。wait是在if中使用还是循环中使用?
  14. volidate关键字的作用?(提供可见性和顺序性,自己去找相关文章理解,不要忘记顺序性!!)
  15. 面向对象的三大特征。Java多态的实现原理?动态绑定的理解?
  16. 内部类,静态内部类,匿名内部类,局部内部类。.this和.new。
  17. Java Object中的基本方法有哪些?
  18. Java clone的使用。
  19. Java hashCode和equal方法。
  20. equal方法和“==”
  21. Java的Class对象。
  22. Java反射机制
  23. Java的静态代理和动态代理
  24. Java注解相关的。(这个其实你自己不提一般不会有面试官问。但现在很多框架都是用的注解,所以最后也要了解一下比较好。)注解的生存期。注解的作用有哪些?(如果你用过ButterKnife这种注解框架,那么最好知道它是什么时候处理注解的,怎样处理的具体代码,有兴趣和时间可以自己研究。)
  25. Java泛型。编译期擦除技术。擦除引发的问题。
  26. Java创建一个线程安全的单例。或者其他比较常见的设计模式。(这个一般他会问你你知道什么,然后让你写什么,或者说这个模式用来解决什么问题。)
  27. Java枚举的理解。
  28. Java操作文件的基本API,RandomAccessFile。NIO。
  29. Java访问网络的基本API。Socket,DatagramSocket,URLConnection。
  30. Java异常有几种?什么是运行时异常,有什么特点?

Android基础知识

  1. Activity的生命周期。启动模式。
  2. Service的生命周期,和两种启动方式。
  3. Fragemnt的生命周期和使用场景。(使用场景结合自己用过的讲就好了,不过一般有:实现手机平板适配,Fragment+FragmentAdapter+ViewPager实现分页滑动效果,实现快速的页面切换,和封装相同的UI逻辑提高代码重用性)Fragment要注意的问题。(主要Fragment嵌套出现的问题)
  4. BoardCastReciever的两种注册方法。
  5. ContentProvider的基本使用方法和作用。ContentValue的使用方法,他和HashMap的区别是什么?
  6. SharedPreference三种获得方法和区别,commit和apply的区别。
  7. SQLite数据库的基本操作API(最后也要会写SQL语句,不过之后实际应用的时候都用封装好的CRUD方法,不过有的时候面试官会考。尤其注意创建表,数据库升级的时候更新升级表的SQL语句的写法,这个是要我们写原生SQL语句的,不过之后工作中使用一些数据库的框架,这些也不用了。不过应付面试,注意准备一下吧。)
  8. Android基本网络库OkHttp的使用方法和优缺点。(优缺点很重要)
  9. Android执行异步有哪些方法?线程间通讯的方式?
  10. AnycTask的优缺点?串行or并行?内部线程池是怎样的?(有时间的话可以看看AsyncTask的源码,还是挺经典的,可以学习到不少东西的。不同版本,串行和并行有变化,最新的是既可以并行也可以串行。)
  11. 常用的布局有哪些?
  12. View的绘制流程?
  13. View,SurfaceView,GLSurfaceView有什么区别?
  14. ListView的优化。(这个问题我真是不明白为什么现在还在问。不是都有RecyclerView了吗?不过既然经常问那就准备一下,过不项目中已经完全用RecyclerView代替了。)
  15. RecyclerView与ListView的区别。RecyclerView的优缺点。(这个如果你主动提到了RecyclerView,面试官很有可能跟进这样问。再次强调:尤其注意缺点,这个是我们不太容易注意的。)
  16. WebView的基本使用方法。WebViewClient和WebChromeClient。
  17. Android和H5通信。(基本上就是JS和Android原生互调)
  18. Intent的作用。(PenddingIntent不知道有没有必要了解,一般没人问吧。自己看着办吧。)
  19. Android的屏幕适配方法有哪些?(延伸的比如多语言,RTL布局。不过这两个也基本没有人问。)
  20. XML加载的几种方式,各自的原理。都有什么优缺点?
  21. Android中动画的分类,各自的优缺点。(基本上讲了帧动画,Tween动画,属性动画就OK了,至于Transition Framework可讲可不讲。)
  22. Android中图片加载和缓存怎么做?(一般原生的话加载使用BitmapFactory,缓存使用LruCache就可以了。LruCache的原理再讲讲基本差不多了。如果你使用过这方面的第三方库,自己翻过源码的话再讲,没有的话千万不要讲。因为你只要提了第三方库,面试官紧跟着的就是为什么使用这个库,这个库的优缺点是什么?他的原理是什么?所以如果你看过源码,大胆的讲,让面试官知道你知识的深度。)
  23. JSON相关的。(这个基本上问问你们网络传输用什么格式,然后你说用Json,然后就是怎么解析呀巴拉巴拉巴拉……)
  24. Android中方法数65535问题的原因和解决办法。
  25. Android中的消息传递机制。(Message,Handler,MessageQueue,Looper那个玩意)
  26. 有哪些容易造成内存泄漏的原因?
  27. MVC,MVP。(MVVM一般不会问,以及相关的DataBinding呀随便了解一下就OK,不要把重点放在这个上面)
  28. 什么是ANR?什么原因?怎么解决?
  29. 什么是Force close?……
  30. 什么是OOM?……

下面的实习生一般并不会遇到:

  1. Android的Touch事件分发过程(这个直接找网上的文章看看就好了,多的不得了)
  2. Android应用从Launcher的启动过程
  3. Android中进程保活的方法
  4. Android中的IPC Binder是怎么回事?出于什么考虑?
  5. Android中的Zygote是什么鬼?出于什么考虑?
  6. Android中的DVM和JVM有什么区别?又加入的Android Runtime是出于什么考虑?有什么优势?
  7. Android中各个版本的功能特性?
  8. Android中如何检测内存泄漏?
  9. 进行过哪些性能优化(这个就要据自己实际的例子)
  10. AIDL的使用。
  11. NDK开发。(这个我也不熟……囧!)
  12. Android中用过哪些第三方库?他们的工作原理是什么?优缺点?(这些要看个人了。自己没事可以去翻翻自己用的第三方库的源码。可以学习到不少东西。)
  13. Android的插件化技术和热修复技术。(这个好像也不怎么会问,总归不是主流,了解一下就好,一旦说到可以扯扯淡)
  14. Android混淆
  15. Android反编译

计算机网络

其实基本上能问到的也就1和2。其实这里我能记住的已经不多了。

  1. TCP
  2. UDP
  3. OSI 7层模型
  4. TCP/IP 4层模型
  5. Http和一些错误码代表的含义。
  6. 还有一个SPDY的协议可以了解一下,Http的增强。(因为OkHttp里用这个协议,到时候扯扯淡说不定能加分。)

总结

如果是对于实习生,我觉得这些应该可以了吧。不过前提是你要能过了笔试。笔试我的建议就是在网上找题刷。因为有的时候就是脑筋急转弯。有的时候是算法。这些东西都是刷题刷出来的。不要学我当初浪的不行。不过其实我也并不后悔,在前公司的时间里也学到了不少的东西,也做了别人做不了的东西,这应该也是只有创业公司才能有的锻炼吧。

如果看到我列的这些你很多都不会,也不要担心。一条一条的去学习,你一定要努力,但千万别着急。

最后,看了这篇文章之后找到好工作的记得回来打赏!回来打赏!回来打赏!重要的事情说三遍!