Android每天10道面试题05

Android每天10道面试题05

        • 介绍:
    • Java部分
      • 1.equals 与==区别
      • 2.静态变量和实际变量的区别
      • 3.静态方法可以被重写吗
      • 4.switch可以用string当匹配符吗,可以用哪些
      • 5.多态的应用场景,优点
    • Android部分
      • 6.service如何保活
      • 7.service怎么进行耗时操作
      • 8.子线程一定不能更新UI吗?
    • 计算机网络
      • 9.HTTP是基于什么协议的?
    • 算法
      • 10.排序算法都有哪些?

介绍:

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

Java部分

1.equals 与==区别

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

Android每天10道面试题05_第1张图片

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

Android每天10道面试题05_第2张图片

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协议的
Android每天10道面试题05_第3张图片

算法

10.排序算法都有哪些?

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

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

你可能感兴趣的:(Android面试,android)