JAVA基础和Android面试题

文章目录

    • JAVA基础
      • JAVA基本数据类型,占用字节,取值范围
      • String可以被继承么
        • JAVA中final关键词
          • 1.修饰类
          • 2.修饰方法
          • 3.修饰成员变量
          • 4.修饰成员变量
      • String StringBuffer StringBuilder区别
        • String不可变
      • 抽象类和接口的区别
      • sleep与wait的区别
    • 安卓
      • 安卓权限修饰符(有权限打勾)
      • activity四种启动方式并简述其特点
      • Service
        • Service生命周期
      • BroadCastReceiver
        • 种类
        • 注册方式
      • 进程保活
        • 进程优先级
        • 安卓进程回收策略
        • 安卓保活方案
      • 内存溢出和内存泄漏的区别和内存溢出如何避免
      • 网络七层协议、TCP/IP、UDP、HTTP、Socket个人理解

JAVA基础

JAVA基本数据类型,占用字节,取值范围

数据类型 占用字节 占用位数 取值范围
byte 1 8 (-27)- (27-1)
short 2 16 (-215)- (215-1)
int 4 32 (-231)- (231-1)
long 8 64 (-263)- (263-1)
float 4 32 精度为7-8位
double 8 64 精度为15-16位
char 2 16 0~65535
boolean 1 8 false/true

String可以被继承么

String类被final修饰,不可被继承

JAVA中final关键词

1.修饰类

当用final去修饰一个类的时候,表示这个类不能被继承。
a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。
b. final类中的成员方法都会被隐式的指定为final方法

2.修饰方法

被final修饰的方法不能被重写。
a. 一个类的private方法会隐式的被指定为final方法。
b. 如果父类中有final修饰的方法,那么子类不能去重写。

3.修饰成员变量

a. 必须要赋初始值,而且是只能初始化一次。

4.修饰成员变量

a. 必须初始化值。
b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。

String StringBuffer StringBuilder区别

- 是否可变 是否安全
String × ×
StringBuilder ×
StringBuffer

String不可变

例:

		String a="111";
        System.out.println(a.hashCode());
        a="222";
        System.out.println(a.hashCode());

看似a的值发生了变化,但是打印a的hashCode发现

		48657
		49650

a已经不再是a,因为a的内存地址发生了变化,这就是String的不可变。

抽象类和接口的区别

(1)语法 抽象类以abstract关键词修饰 接口以interface关键词修饰

(2)接口全部方法都是抽象方法,属性都是常量。

(3)类只能单继承,接口可以多实现

sleep与wait的区别

sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。所以sleep(100L)意思为:占用CPU,线程休眠100毫秒wait(100L)意思为:不占用CPU,线程等待100毫秒

安卓

安卓权限修饰符(有权限打勾)

访问权限 子类 其他包
public
protect
default(默认)
private

activity四种启动方式并简述其特点

  • standard(默认)
    默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
  • singleTop
    可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
  • singleTask
    只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
    如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中
  • singleInstance
    只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

Service

Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件

Service生命周期

  • startService
    • onCreate()
    • onStartCommand()
    • onDestory
  • bindService
    • onCreate()
    • onBind()
    • onUnbind()
    • onDestory

BroadCastReceiver

应用程序之间传输信息的机制,通过Intent来传送我们的数据

种类

  • 普通广播
  • 有序广播
  • 本地广播
  • Sticky广播

注册方式

  • 静态注册
    清单配置文件里注册
    生命周期不仅局限于activity,activity关闭与否,不受影响,即使app退出了还是会收到广播。
  • 动态注册
    使用IntentFilter注册
    跟随Activity的生命周期,如果Activity销毁不注销BroadcastReceiver会内存泄漏

进程保活

进程优先级

  • 空进程
  • 后台进程
  • 服务进程
  • 可见进程
  • 前台进程

安卓进程回收策略

  • Low memory Killer(定时执行):评分机制对进程打分,分数高的进程为bad进程,杀死并释放内存。
  • OOM_ODJ:判断进程优先级

安卓保活方案

  • 1px Activity(监听锁屏广播和开屏广播)-传言QQ使用该方法
  • 开启前台Service
  • 一大一小双进程互相拉活
  • JobScheduler机制拉活

内存溢出和内存泄漏的区别和内存溢出如何避免

http://blog.csdn.net/ch1406285246/article/details/61618963

网络七层协议、TCP/IP、UDP、HTTP、Socket个人理解

http://blog.csdn.net/ch1406285246/article/details/55504330

你可能感兴趣的:(安卓开发)