java面试(十三)
1、Java函数传入值和引用的区别
基本数据类型是传值到函数中,函数中的运算并不会改变源变量的值;
对象数据类型是传递的引用,如果函数中的操作是在源引用上修改对象值,则最终源变量会发生变化,如例2中的StringBuilder a,但是如果函数中的操作不是在源引用上修改对象值,则最终源对象不会发生改变,如例2中的String c;
2、String、StringBuffer、StringBuilder的区别
(1)字符修改上的区别(主要)
String:不可变字符串;
StringBuffer:可变字符串、效率低、线程安全;
StringBuilder:可变字符序列、效率高、线程不安全;
(2)初始化上的区别,String可以空赋值,后者不行,报错
①String
String s = null;
String s = “abc”;
②StringBuffer
StringBuffer s = null; //结果警告:Null pointer access: The variable result can only be null at this location
StringBuffer s = new StringBuffer();//StringBuffer对象是一个空的对象
StringBuffer s = new StringBuffer(“abc”);//创建带有内容的StringBuffer对象,对象的内容就是字符串”
小结
- 如果要操作少量的数据用 String;
- 多线程操作字符串缓冲区下操作大量数据 StringBuffer;
- 单线程操作字符串缓冲区下操作大量数据 StringBuilder(推荐使用)。
3、Java中`String += “123”`的实现过程
4、LinearLayout与RelativeLayout对比
LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。
RelativeLayout相对布局允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。
性能对比 (1)RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,也会调用子View 2次onMeasure (2)RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。 (3)在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout。
5、使用Service的业务场景介绍
为了满足开发者处理后台任务的需要,Android提供了Service这个组件,同时为了方便开发者使用Service,又封装了一个IntentService。当然,现在很多App在处理后台任务的时候并没有优先使用Service,而是自己实现了一套线程池机制或者使用Android提供的AsyncTask来执行后台任务,这里我们来分析下他们各自的优劣:
Service的优点是系统原生支持,使用方便;创建进程方便;可以提供给系统内其他App使用;优先级高,当App退到后台后不宜被杀死。缺点是由于启动Service涉及到多次IPC,运行效率不高,而且受限于系统接口,使用不够灵活。
线程池的优点是运行效率高,配置和使用灵活。缺点是多进程实现不方便, 由于Android实现了一套进程托管机制,我们不能直接创建一个新的进程,而只能通过四大组件的形式创建新的进程。
基于以上分析,我们可以看出,一般普通的异步任务,比如网络请求,数据库或者文件相关操作,我们都会使用线程池的方式来做,因为这样使用的系统开销小,运行效率高,而且随着业务逻辑的复杂度增加,扩展性也更强。然而,对于一些特殊场景,比如进程保活,使用第三方SDK服务比如地图,IM等,就需要使用Service来实现,因为这些服务一般与App主进程隔离开,需要运行在新进程中以防止App主进程发生异常崩溃时,牵连第三方服务也挂掉。
6、使用Fragment和View的对比
其实本质上都是把View组装到一起,只是Fragment可以有效的管理View有生命周期,从代码设计角度讲可以提高内聚性,不同情况下还可以设计不同的Fragment,比如横屏和竖屏情况下View的显示不一样,那么可以建立2个不同的Fragment去处理,代码上面可以有效的扩展。
7、Service和IntentService的区别
Service的简介:
什么是service: service是后台服务
service的作用: 为了保证应用程序被挂到后台后某些组件仍然可以工作
service的弊端: service既不是独立的进程也不是独立的线程,是依赖于主线程的,所以是不建议在service里面做过多的耗时操作的,避免ANR。
IntentService的简介:
什么是intentService: intentService是Service的子类,继承service,拥有service的全部生命周期,包含了service的全部特性;
intentService的作用: 在onCreat被执行时内部会开启一个线程,用于解决在后台服务中进行耗时操作;
例如:后台上传图片,批量操作数据库等;
求职面试题&解析