1.为什么选择java
回答:1.java相对与c++是纯粹的面向对象编程,抛弃了c++的指针和继承的复杂使用。同时提供了丰富的内置库用于开发。2.一次编译,到处允许。将java代码编译为字节码,可通过jvm虚拟机编译成机器码在不同的环境下运行。3,具有安全性和健壮性,如数组越界机制和垃圾回收机制。
2.java的基本数据类型和引用类型
回答:基本的数据类型有8种,要记住其对应的长度和方位
引用类型:就是指String和数组这些,其储存与堆当中。
3.抽象类和接口的区别
回答:1.两者都不能实列化。2.抽象类用abstract class,接口的是inerface。3.抽象类只能继承一个,接口可以继承多个。
.抽象类可以有静态变量,常量和成员变量,接口只能有常量。
静态变量:stastic修饰的,成员变量:普通定义出的互不干扰的。常量:由final修饰的。
4.说出final的特点
被final修饰的类不可以被继承,被修饰的常量不可以被修改,被修饰的静态变量地址不可以变但是地址的内容可以变。修饰方法,方法不可以被重写,修饰的对象必须被赋予初始值。
5.说出stastic的特点
java类包含了5大:成员变量,构造器,方法,初始化块,内部类。static可以修饰除构造器的其他成员,被修饰的对象属于整个类,不属于类建立的单个对象。且类被创建时,stastic也会被建立。访问规则是静态可以访问静态,非静态可以访问静态,静态不能访问非静态。
6.介绍String类
String类包含了多个方法。String的new对象是将对象放入堆内存中管理。
7.分析String,StringBuilder,StringBuffer三者间的区别
String是一个不可变的字符串,直到对象被销毁,都不可以改变其值
StringBuffer是一个可变字符串,可以通过内置方法修改。
StringBuilder和StringBuffer相似,但其没有考虑多线程的安全问题,所以其效率更高,但是具有多线程的安全问题。
8..equals和==的区别
equeal是比较值相同,==比较的是内存地址相同。
9.为什么说重写了equals后纪要重写hashCode
equals用于比较2个对象是否相等,如果相等则必须有相同哈希码。但哈希码相同,2者确不一定相等。在业务中Object默认的equals是用==比较的,检验的是否为同一个对象,实际只需要判断其内容,所以需要进行重写。由于hashCode与equals有联动关系,所以也要重写。
10.讲述java8的特性
11.讲述自动装箱和拆箱
自动装箱:把一个基本类型的数据直接赋值给对应的包装类型;
自动拆箱是指把一个包装类型的对象直接赋值给对应的基本类型
由于基本类型都是继承于Object,所以在数字进行传参时候常需要基本数据类型和包装类型的相互转换。
12.java处理异常的机制
使用了trycatchfinally,其作用分别是try中写业务代码,catch用于捕获和处理异常,finally用于回收资源。如果一个异常没有被捕获则java程序将会被终止。发生异常后由jvm判断是否具有相应的catch方法,就算中使用了return和throw语句,也会立刻终止确保执行完finally的代码后再执行。
13.java对象的理解
对象的三大特性:封装,继承,多态
封装:可以将信息保存在类的内部。
继承:实现了代码复用
多态:配合继承,可以调用多个子类去构建。常见的是出行的交通工具。
14.说明重载和重写的区别
重载是指同一个类下具有相同方法名但传入参数不同
重写是指子类去覆盖其父类的某一个方法
15.介绍访问修饰符
访问修饰符4种,public,privite,protect,default
default表示默认:protect表示可以被同一包下子类访问也可以被其他包子类访问,一般是希望子类去重写。public最为宽松的访问。
16.泛型和泛型擦除
伪反向则代表编译后会得到泛型指代是哪些具体的类,实际的字节码文件是不包含泛型的信息的。
17.反射的理解
18.分析多线程
线程是操作系统的最小单元,进程池子对应多个线程处理多个任务,线程各自管理者自己的空间和io。多线程可以共享着进程的资源。
带来的优势:提高cpu效率优化结构,数据共享效率高。
19.线程如何建立
java的建立线程有三种方式,继承Thread类,调用run然后使用start开启。实现Runable接口,之后调用run方法。3.实现Callable接口。
20.介绍线程的状态
创建阶段,new出一个线程,就绪阶段,执行start后进入就绪阶段,使用run方法进入运行阶段,使用sleep等方法进入超时等待阶段,使用wait进入阻塞阶段(需要其他线程进行通知才可以唤醒),销毁阶段。
21.说出wait和sleep的区别
1,所属的类型不同:wait是属于object下,sleep是属于thread下。
2.sleep进入的是超时等待阶段,wait进入阻塞阶段,唤醒的方式也不同,wait需要使用notify进行唤醒
3.对锁的依赖不同 - wt()依赖于synchronized锁,通过监视器进行调用,调用后线程会释放锁。 - sleep()不依赖于任何锁,所以在调用后它也不会释放锁.即使进入了sleep,这个线程仍然占据着这个锁的意思。
22.如何保证线程安全