JAVA面试--基础

JAVA基础知识

1.jvm,jre,jdk?

jvm:Java虚拟机,所有Java项目都运行在虚拟机上,是Java程序的运行环境。
jre:是Java的运行时环境,包含jvm和Java程序所需要的核心类库。
jdk:是Java程序开发工具包,包含jre和开发时所需要的工具包。

2.为什么说Java是跨平台的语言?

计算机程序想达到某种功能,是靠操作系统去和硬件协调调度的,而Java是在jvm上运行,jvm去和操作系统调度,不同操作系统有不同的Java软件也有不同的jvm运行Java程序,所以Java是跨平台的。

3.什么是面向过程?什么是面向对象?

面向过程:它是一种具体化的思想,具体化某一个实体对象。如:想吃番茄炒蛋,就得去超市买鸡蛋,番茄所需要的具体食材,然后去一步步去炒去实现。
面向对象:这是Java的一种编程思想,是模型化的,将某一具体事情对象抽象成某一类事情对象,但面向对象底层还是面向过程。如:想吃番茄炒蛋不需要自己去做,去饭店报菜单即可,不想吃番茄鸡蛋换其它也可以。面向编程思想实现离不开四大特性:抽象,封装,继承,多态。

4.抽象?封装?继承?多态?

①抽象类:包含抽象方法的类叫抽象类,但抽象类中可以不全是抽象方法,可以拥有成员变量,方法。

注意:
1.抽象类不能被实例化,子类必须给抽象方法具体实现;
2.抽象类不一定包含抽象方法,抽象方法一定是抽象类;
3.抽象类中方法只是声明不包含方法体;
4.抽象方法不能被static和final修饰

②封装:将抽象类的部分特性和行为进行包装,起到保护的作用,防止这部分内容被外部类定义的代码随便访问,需要访问时提供公共方法访问。

③继承:子类继承父类的属性和方法,子类可以直接访问父类非私有的属性和方法。

④多态:Java中多态就是同一个接口,使用不同的对象去执行而产生不同的效果。多态必要的三个条件:继承,重写,父类引用指向子类对象。

5.接口类?

接口类:接口类是一种特殊的抽象类,接口中的方法隐式指定为public abstract,接口中成员变量默认static final成员且要初始化。

注意:
1.接口中访问修饰符隐式为public abstract不能被其它修饰符修饰。
2.接口中可以有变量但隐式指定为public static final。
3.接口方法只被声明不被实现。

6.接口类和抽象类的区别?

抽象和接口区别:
1.抽象类可以有具体实现方法,接口不允许。
2.单继承多实现。
3.变量修饰不同

7.重载和重写?

重载:同一类中方法名相同,参数不同叫重载,返回值和修饰符不能作为判断此方法是否是重载的依据。有参和无参的构造方法也是特殊的重载

重写:方法重写也叫复写,必须有继承,是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和参数都不能改变。即外壳不变,核心重写!但在jdk7后重写返回值可以不同但访问权限不能比父类低。

8.Java中的数据类型?引用类型?

基本类型:四类八种;类型(所占字节数,默认值)
整数类型:byte(1B,0),short(2B,0),int(4B,0),long(8B,0L)
浮点类型:float(4B,0.0f),double(8B,0.0d)
布尔型:boolean(1B,false)
字符型:char(2B,\u0000).

注意
boolean只有两种值true和false只占1位。char是单一的16位Unicode字符,min=\u0000=0 max=\uffff=65535。

引用类型:一个对象,一个类,数组,接口;默认值都为null。

9.int和float比较大小?

int和float都是4个字节32位,为什么float比int大?int第1位代表正负,其它31位表示数值。float第1位代表正负,2-9是指数,10-32是底数。double和long也是这样,double第一位正负,2-12是指数,13-64是底数。

10.break和continue区别?

break在循环语句中是跳出当前循环,执行循环外下面的语句。continue是提前结束此次循环进入下一循环判断而不是终止循环。

11.==和equals区别?

①==在基本类型中是值比较,引用类型中是内存地址的比较。
②.equals底层代码就是==比较,所以equals是内存地址的比较,但有些类重写了equals方法对值进行了比较。

源码:下面是String中的equals()比较

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {  // 这些内容是重写内容
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

12.String,StringBuffer,StringBuilder?

String是final修饰,不可变,每次操作都会产生新的string对象。
StringBuffer(线程安全)和StringBuilder(线程不安全)都是在原对象操作。
性能:StringBuilder>StringBuffer>String。 场景:经常改变字符使用后两个,多线程使用共享变量使用StringBuffer

13.hashCode()和equals()?

①.equals():Object中的equals方法和“==”一样的,底层就是用的"=="。想实现不同的比较必须重写equals方法。
②.hashCode():作用是获取哈希码,返回int整数,是用来确定该对象在哈希表中的索引位置,Java任何类都包含hashCode()函数。为什么会用到hashCode()?
如:Java容器中Set是不允许存储重复值,这时又不能使用equals方法,如果数据多的话要重复调用很多次equals大大降低性能。当存储数据时根据对象地址算出hashCode,如果当前位置没有值便插入数据,如果有值了便调用equals()判断两个值是否相等,相同取代元素,不相同会插入同一个地址使用链表形式保存。

注意
Java对于eqauls方法和hashCode方法是这样规定的:
①两个对象相同,hashCode值一定要相同,重写equals方法要重写hashCode。
②hashCode相同,他们也不一定相同

14.串行,并发,并行?

串行:单线程,一个一个排队执行。
并行:同一时刻对多个任务同时进行(多cpu)。
并发:同一时间段多个任务执行(单cpu)。
所有的并发处理都有等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候执行。

15.什么情况下使用序列化?

序列化: 把对象转为字节序列的过程,在传递和保存对象时,保证了对象的完整性和可传递性,便于在网络传输和保存在本地文件中。
反序列化: 把字节序列转为对象的过程,通过字节流的状态和信息描述,来重建对象。
①想把数据保存到数据库中或者一个文件中使用。②远程调用的时候。 ③网络传输时

16.数据存储常用结构?

栈:先进后出,只允许在一端进行插入和删除。
队列:先进先出,一端插入,一端删除。
数组:是有序的元素序列,数组在内存中开辟一段连续的空间用来存储数据。快速查找,删除添加慢
链表:由一系列节点组成,有存储元素的数据域和存储下一个节点地址的指针域。增删快,遍历查找慢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值