2017年 Android面试题 总结
来源:互联网 发布:知乎提问没人浏览 编辑:程序博客网 时间:2024/05/21 04:23
1、关于创建对象
1)Integer对象
Integer j = 123;Integer h = 123;
then j==h true;
Integer i = new Integer(123);
Integer j = new Integer(123);
System.out.println(i==j); false
Integer j = 130;Integer h = 130;
then j==h false;
关于Integer对象的缓存机制:http://blog.csdn.net/losetowin/article/details/49968365
public static void main(String[] args) { Integer num1 = new Integer(100); Integer num2 = new Integer(100); System.out.println("num1==num2 " + (num1 == num2)); Integer num3 = 100; Integer num4 = 100; System.out.println("num3==num4 " +(num3 == num4)); Integer num5 = 128; Integer num6 = 128; System.out.println("num5==num6 " + (num5 == num6)); Integer num7 = 100; Integer num8 = new Integer(100); System.out.println("num7==num8 " + (num7 == num8)); int num9 = 100; Integer num10 = new Integer(100); Integer num11 = 100; System.out.println("num9==num10 " + (num9 == num10)); System.out.println("num9==num11 " + (num9 == num11));}
创建Integer对象时,直接调用Integer.valueOf()方法。而Integer对象和int类型的数值比较时,会进行拆箱操作。
2、操作字符串
subString()和subStr()的区别;两个方法的参数都是从第一个参数0开始,最后一个参数不包括。
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
避免点继承的局限,一个类可以继承多个接口;适合于资源的共享。
5、handler的作用: 如果没有多线程handler是否还有用?
1.运行在某个线程上,共享线程的消息队列;
2.接收消息、调度消息,派发消息和处理消息;
3.实现消息的异步处理;
2. Minor GC和Major GC是俗称,在Hotspot JVM实现的Serial GC, Parallel GC, CMS, G1 GC中大致可以对应到某个Young GC和Old GC算法组合;
3. 最重要是搞明白上述Hotspot JVM实现中几种GC算法组合到底包含了什么。
3.1 Serial GC算法:Serial Young GC + Serial Old GC (敲黑板!敲黑板!敲黑板!实际上它是全局范围的Full GC);
3.2 Parallel GC算法:Parallel Young GC + 非并行的PS MarkSweep GC / 并行的Parallel Old GC(敲黑板!敲黑板!敲黑板!这俩实际上也是全局范围的Full GC),选PS MarkSweep GC 还是 Parallel Old GC 由参数UseParallelOldGC来控制;
3.3 CMS算法:ParNew(Young)GC + CMS(Old)GC (piggyback on ParNew的结果/老生代存活下来的object只做记录,不做compaction)+ Full GC for CMS算法(应对核心的CMS GC某些时候的不赶趟,开销很大);
3.4 G1 GC:Young GC + mixed GC(新生代,再加上部分老生代)+ Full GC for G1 GC算法(应对G1 GC算法某些时候的不赶趟,开销很大);
4. 搞清楚了上面这些组合,我们再来看看各类GC算法的触发条件。
简单说,触发条件就是某GC算法对应区域满了,或是预测快满了。比如,
4.1 各种Young GC的触发原因都是eden区满了;
4.2 Serial Old GC/PS MarkSweep GC/Parallel Old GC的触发则是在要执行Young GC时候预测
其promote的object的总size超过老生代剩余size;
4.3 CMS GC的initial marking的触发条件是老生代使用比率超过某值;
4.4 G1 GC的initial marking的触发条件是Heap使用比率超过某值,跟4.3 heuristics 类似;
4.5 Full GC for CMS算法和Full GC for G1 GC算法的触发原因很明显,就是4.3 和 4.4 的fancy算法不赶趟了,只能全局范围大搞一次GC了(相信我,这很慢!这很慢!这很慢!);
5 题主说的 “Full GC会先触发一次Minor GC” - 指的应该是
5.1 (说错了,我删了)
5.2 PS MarkSweep GC/Parallel Old GC(Full GC)之前会跑一次Parallel Young GC;
原因就是减轻Full GC 的负担。
Major gc 和full gc 都会触发stop the world
Minor gc 会清理年轻代内存
12、触发GC的时机:
1、fragment的使用:
2、java的erro有哪些情况:一般error是与虚拟机相关的问题,比如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出;
Exception表示程序可以处理的异常,可以捕获并且可能恢复。
可检查异常:要求编译器必须处置的异常,编译器可以检查到的异常。需要在方法头部声明可能抛出的异常类型,程序在throws语句后立即终止,它后面的语句执行不到,然后在包含它的所有trycatch块中(可能在上层函数)从里向外寻找与之相关的catch块。
不可检查异常(编译器不要求强制处理的异常):包括运行时异常以及错误。常见的checkexception有:io异常以及sql异常;
常见的运行时异常:可以不处理,出现此类异常时,总是虚拟机接管。例如:NullPointerException,没有人处理这个问题。ClassCastException,IndexOutOfBoundsException、ArrayStoreException等
3、线程同步机制:sychronized、volatile、lock、threadlocal等
4、MVP:使得view和model完全解耦。
5、http中header包括的内容:
6、
7、activityA启动activityB:oncreate-onstart-onresume-onpause-oncreateB-onstartB -onresumeB-onstopA;
activityA 按home键:onsumeA-onpause-onstop
8、何时执行onsaveInstance:按home键,来了一个电话,横竖屏切换,按电源键关闭屏幕时;
9、onsaveInstanceState和onrestoreInstanceState方法不一定成对调用,onrestoreInstanceState会在onstart和onresume之间执行;
onsaveInstanceState调用时,activity可能销毁也可能没有销毁,所以只有activity销毁重建时,onRestoreInstanceState才会调用
10、1. 当Activity被系统撤销后重新建立时,保存以及恢复数据的函数调用顺序是:onSaveInstanceState(保存数据)-->onCreate(恢复数据allstate)-->onRestoryInstanceState(恢复数据HierarchyState)
1、C++和java的区别:
指针 :C++具有指针功能,java没有。
多重继承:C++支持多重继承,java用接口来替代
自动内存管理:java所有对象都是用new操作符建立在堆上的。java自动进行内存回收操作,不需要程序员释放内存资源。
2、异常的抛出:
import java.util.*;
public class Main{
private static Object object = new Object();
public static ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
public static void main(String[] args)
{
try{
System.out.println("hello ");
func();
}catch(Exception e)
{
System.out.println("catch ");
}finally{
System.out.println("caught ");
}
System.out.println("final");
}
public static void func() throws NumberFormatException
{
String s="abc";
if(s.equals("abc"))
throw new NumberFormatException();
//System.out.println(Double.parseDouble(s));
}
执行结果:
hello
catch
caught
final
public classZeroTest {
publicstatic void main(String[] args) {
try{
inti = 100/ 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
thrownew RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
执行结果:12。
当分子为0时抛出异常,直接到catch,里面的输出I不会执行,catch之后输出1,然后又抛出runtimeException,执行finally的内容,之后的都不会执行。
3、List是接口,所以不能实例化,只能靠linkedArrayList或者ArrayList实现
所以new List()方法错误。其实List list = new ArrayList()类似于父类引用指向子类实现。
4、静态广播与动态广播对比:静态广播生存周期长,很多静态广播都是对系统进行监听。而动态广播随着context的终止而终止。
优先级动态广播比静态广播高。
动态广播无需在AndroidMainfest.xml中声明直接使用即可。
同一优先级动态广播快?????广播用sendOrderBroadcast方法发送,接收者凭借优先级,intent-filter android:priority=“n”或者setPriority设置。另外可以调用abortBroadcast()方法结束即可。并且可以使用setResultExtras(Bundle)方法将数据存入broadcast,并将broadcast发送给下一级接收者,
4、通过contentresolver获取contentprovider对象,contentprovider用于跨进程间访问数据
- 2017年 Android面试题 总结
- 2017 android面试题总结
- android面试题总结
- android面试题总结
- android 面试题总结
- android面试题总结
- android面试题总结
- Android面试题总结
- android面试题总结
- Android面试题总结
- Android面试题总结
- Android面试题总结
- Android面试题总结
- Android 面试题总结
- android面试题总结
- Android面试题总结
- android 面试题总结
- android面试题总结
- Android 图片加载框架分析对比
- 进来瞧瞧!2017采购信息大数据平台排行
- 树莓派 ROS 常用命令
- 生产消费设计模式
- 单调队列的学习
- 2017年 Android面试题 总结
- jquery与表单
- RedirectAttributes应用
- java的简单语句
- Qt视图场景框架之仿射变换
- python dlib学习(六):训练模型
- git常用命令
- refusing to merge unrelated histories(AS项目推送至码云出错)
- 计算轮廓点的最小凸包像素面积,最小外接圆的快速方法