Android每天10道面试题05

介绍:

20道面试题=5 java + 3 Android + 1(计网+数据结构+操作系统选择式)+ 1 算法题
主要以我自己的回答方式总结,小伙伴们欢迎指教奥~

Java部分

1.equals 与==区别

在object类中,equals 与==是没有区别的,都是对比两个对象的内存地址,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwqaKven-1620575611778)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\1620575537823.png)]

但是大多数情况下equals 会被 覆写 , 比如String类中的equals(),然后去比较堆内存中存储的值 ,也就是去比较对象的属性值

在这里插入图片描述

2.静态变量和实际变量的区别

1.语法上

静态变量:要加static

实际变量:不用加

2.程序运行时

静态变量:静态变量不属于某个 实例对象,而是属于类,所以称为类变量 ,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配到空间,静态变量就可以被使用了

实际变量: 实例变量属于某个对象的属性,必须 创建了实例对象,其中的实例变量才会 被分配到空间,才能使用这个实例变量

3.存储位置

静态变量:存在方法区

实际变量:存在堆中

3.静态方法可以被重写吗

在Java中静态方法可以被继承,但是不能被覆盖,即不能重写。

4.switch可以用string当匹配符吗,可以用哪些

在java jdk1.7之前, switch只能支持byte、short、char、int ,jdk1.7之后支持 string ,

( 其实,jdk1.7并没有新的指令来处理switch string,而是通过调用switch中string.hashCode,将string转换为int从而进行判断。)

5.多态的应用场景,优点

一种方法需要多种实现。

优点:

提高了代码的可维护性(继承保证)

提高了代码的扩展性(多态保证

Android部分

6.service如何保活

  1. onStartCommand方法,返回START_STICKY

onStartCommand方法,返回START_STICKY 在运行onStartCommand后service进程被杀死后,那将保留在开始状态,但不会保留那些传入的intent。不久后service就会再次尝试重新创建,因为保留在开始状态,在创建 service后将保证调用onstartCommand。如果没有传递任何开始命令给service,那获取到的Intent为null。手动返回START_STICKY,亲测当service因内存不足被kill,当内存又有的时候,service又被重新创建,但是不能保证任何情况下都被重建,比如进程被干掉了….

  1. 提升Service优先级

在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = “1000”这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播。

3 提升Service进程优先级

Android中将进程分成6个等级,由高到低分别是:前台进程、可视进程、次要服务进程、后台进程、内容供应节点以及空进程。当系统进程空间紧张时,会按照优先级自动进行进程回收。可以使用startForeground()将服务设置为前台进程。

4 在onDestory中重启Service

直接在onDestroy()里startService或service +broadcast 方式,就是当service走ondestory的时候,发送一个自定义的广播,当收到广播的时候,重新启动service。

5 监听系统广播判断Service状态

通过系统的一些广播,比如:手机重启、界面唤醒、应用状态改变等等监听并捕获到,然后判断我们的Service是否还存活,但要记得加权限

6 将APK安装到/system/app,变身系统级应用

这种方式适合调试来用,并不算是一种解决办法,不推荐使用,因为你的APP是给用户使用的。
7 两个service互相激活
首先介绍一下Service的等级:

一、前台进程
二、可见进程
三、服务进程
四、后台进程
五、空进程 —关闭应用后,没有清理缓存
所以为了提高优先级我们可以使用startForeground()方法将Service设置为前台进程。
一个service设为主服务,一个service设为 守护服务,互相监听,发现对方杀死就立刻启动
Android Service保活方法总结(不被杀死)双进程守护

7.service怎么进行耗时操作

service运行在主线程,所以不能进行耗时操作

方法一:service中开子线程

方法二: 使用IntentService

IntentService是继承Service的抽象类,在IntentService中有一个工作线程来处理耗时操作。

IntentService是一个基于Service的一个类,用来处理异步的请求。你可以通过startService(Intent)来提交请求,
该Service会在需要的时候创建,当完成所有的任务以后自己关闭,而不需要我们去手动控制

原理: IntentService 的 onCreate方法 中利用 HandlerThread 创建了一个循环的工作线程,

然后将工作线程中的Looper对象作为参数来创建ServiceHandler消息执行者。

使用:

public class TestService extends IntentService {

public TestService() {
    super("TestService");
}

@Override
protected void onHandleIntent(@Nullable Intent intent) {
    //执行耗时操作
}
}

8.子线程一定不能更新UI吗?

答:不一定。
1.Activity存在一种审计机制,这个机制会在Activity完全显示之后工作,如果子线程在Activity完全显示之前更新UI是可
行的;
2.SurfaceView:多媒体视频播放,也可以在子线程中更新UI
3.Progress:进度相关控件,也可以在子线程中更新UI

计算机网络

9.HTTP是基于什么协议的?

HTTP是基于tcp,IP协议的
在这里插入图片描述

算法

10.排序算法都有哪些?

十大经典排序算法总结(Java实现+动画)

“过人才弯腰,罚球才低头”

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rose J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值