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被执行时内部会开启一个线程,用于解决在后台服务中进行耗时操作;

例如:后台上传图片,批量操作数据库等;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值