Android 相关的知识繁多,只有真正理解了这些知识点,在实际应用中才能得心应手。然而,太多的刚入门的新手在面对这些知识点时总是“知易行难”,到了实战环节不知从何下手,脑袋一片空。话不多说,先抽考几道基础题,顺便加深一下印象。

笔试部分

Java基本的数据类型有哪些?

  • 基本数据类型

byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0

int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L

float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false

  • 引用

Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

给一段你认为计算 2 * 8 最高效的代码。

自认为这题比较sb,因为编译器在编译这段代码时就自动计算结果了。。 so,我认为这题的本意是教你左移运算:2«3 还有开脑洞的答案 8«1 醉了

final,finally,finalize的区别?

一、final(关键字) 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。 因此一个类不能既被声明为 abstract的,又被声明final的。 将变量或方法声明为final,可以保证它们在使用中不被改变。 被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化), 而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能覆盖(重写)。 二、finally(区块标志,用于try语句中) 在异常处理时提供 finally 块来执行任何清除操作。 如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 三、finalize (方法) Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。 它是在 Object 类中定义的,因此所有的类都继承了它。 子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 注意:finalize不一定被jvm调用,只有当垃圾回收器要清除垃圾时才被调用。

short s1= 1; s1 = s1 + 1; 该段代码是否有错,有的话怎么改?short s1= 1; s1 += 1; 该段代码是否有错,有的话怎么改?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型, 所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。 对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符, java编译器会对它进行特殊处理,因此可以正确编译。

显式Intent和隐式Intent的区别?

显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下, 去调用Intent.setComponent()\Intent.setClassName()或Intent.setClass()方法 或者在new Intent(A.this,B.class)指明需要转向到的Activity , 显式意图明确指定了要激活的组件是哪个组件,一般是在相同的应用程序内部实现的。 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型) 找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间。 参考出处:http://www.tuicool.com/articles/AvAbqyf

面试部分

  • 怎么实现Activity横竖屏切换不重新走Activity的生命周期?
  • 什么情况下会OOM,怎么解决?(面试必问)
  • 讲讲什么时候会内存泄露?
  • 有了解FFmpeg相关的东西吗?
  • 百度/高德 地图相关。
  • 数据缓存相关,DiskLruCache。
  • 对web开发Android有什么了解?
  • ListView的性能优化。
  • 事件分发 滑动冲突处理。
  • 怎么进行代码混淆,并说说Android代码混淆的原理。
  • 说说Gilde框架加载图片的原理、优势 、Glide为什么要这样做、用于解决什么问题?
  • 自定义View的流程和主要用到哪些类?
  • 说说Android View动画和 属性动画 实现的原理。
  • 说下Gradle脚本的使用。
  • 介绍一下Activity的启动模式。
  • 怎么优化Android布局?
  • 极光推送 怎么实现应用程序关闭之后还能继续推送,接入极光推送有遇到那些问题?
  • 运行 1 + “2” 的结果是什么?
  • 格式化时间为”2016-07-20 12:00:00”的格式怎么写?
  • Sqlite本地如何实现分页加载?
  • 有没有看过Android的系统源码,你看源码的方式是怎么看的?
  • 你做过的项目中哪个部分最难,难在什么地方?
  • Map的实现方式;如何获取Map中全部的key、value、key和value?
  • 关于Android 5.0之后的控件了解多少?
  • 如何实现和修改下拉刷新控件以适应公司具体要求?(比如 美团)
  • 你对Android那方面有过深入研究?
  • 说说LruCache缓存算法的具体实现?
  • 说说你负责的项目的架构?
  • 网络访问框架用的是什么,具体怎么实现的?
  • 项目中哪种什么布局用的最多?
  • RecycleView和ListView相比有哪些优势?
  • 遇到ANR怎么处理?
  • 如何提高APP性能?
  • 对设计模式了解多少?
  • Fragment的实现方式有哪些?切换的时候是怎么处理的?
  • String,StringBuilder,StringBuffer的区别?
  • 对多线程有哪些了解,有哪些方式开启一个新的线程?
  • Handler机制?

参考原文