JAVA基础面试题

①ArrayList和LinkedList的区别?

 

答:首先他们都是List集合类的。区别总体上有两点,第一点是底层实现原理不同,像ArrayList的话底层是由数组实现,而LinkedList底层则是双向链表实现的。所以在第二点上就是他们的操作元素的性能有区别。首先查询数据数组就可以直接根据下标索引去查询,而链表的话就只能从第一个元素跟着指针一个一个去查找,显然数组的性能是要高于链表。但是像增加数据和删除数据,数组就要考虑到增加或者删除点后面元素的前移或者后移,而链表的话就直接改变一下前后元素的指针指向就可以。

②String,StringBuffer,StringBuider的区别?

③八大基础类型?

答:首先数字类型:byte,short,int,long,float,double。其次字符型char。最后布尔型boolean。

④抽象类与接口的区别?

答:①首先概念就是不同的,抽象类一般是对对象的抽象,而接口一般是对动作的抽象。接口也是一种特殊的抽象类。②接口使用interface修饰,抽象类使用abstract修饰。对象只能继承一个抽象类,但是可以实现多个接口。③抽象类可以有构造方法,而接口没有。④抽象类的成员变量没限制,但是接口的成员变量必须是常量,默认修饰符为public abstract final。⑤抽象类在jdk1.7之前只允许有抽象方法,但在jdk1.8之后也可以有普通方法。而接口在jdk1.7也都只能是抽象方法,但是jdk8之后可以定义静态方法。

⑤解决哈希冲突的方法?

答:①开放定址法,在冲突的位置向前去寻找新的空闲的地址(可分为线性探测法(ThreadLocalMap的解决方法)和二次探测法)。②链地址法,HashMap的解决方法,以链表形式连接冲突的节点。③再哈希法,构建多种哈希函数。④建立公共溢出区,发生冲突的都存放在溢出表中。

⑥Object类中提供了哪些方法?

⑦JDK,JRE,JVM的区别?

答:①JDK是java开发工具包,是整个java开发的核心,并且JDK是包括了JRE和JVM。②JRE是java runtime environment,是java的运行环境,包含了java核心类库。③JVM是java虚拟机,是java跨平台的核心部分

⑧深拷贝和浅拷贝的区别?

答:浅拷贝就只是把一个对象的的引用指针或者说引用地址拷贝一份赋值给新对象,而深拷贝则是复制并且创建一个一模一样的对象。浅拷贝新旧对象指向同一块内存,通过任何一个对象的操作都会影响到其他对象,而深拷贝则是指向两块不同的内存,每一个对象的操作不会影响到其他对象的值。

⑨自定义注解?

答:自定义注解的话是通过元注解实现的,元注解包括:①Target:指定注解可以修饰的类型,像可以设置为在方法上或者在类上。②Retention:表示注解的作用域或者叫生命周期,可以设置为只保留在源文件,或者保留到class文件,还是说执行的时候依然存在。③Docmented:指定注解是否加入JavaDoc。④@Inherited:表示注解是否可以被继承

⑩什么是面向对象?谈谈你的理解?

答:首先不同于面向过程的注重事情的步骤和顺序,面向对象更注重事情有哪些参与者以及各自需要做什么。比如洗衣服吧,面向过程的话就将任务拆解成一系列步骤:打开洗衣机->放衣服->放洗衣液->清洗->甩干。而面向对象的话就会拆分出两个对象,人对象就需要打开洗衣机,放衣服,放洗衣液。而洗衣机对象就需要清洗和甩干。面向对象更易于复用、拓展和维护吧。像面向对象的话三大特性:继承,封装和多态。

封装:通过private关键字定义内部的成员变量,然后通过get和set方法对外暴露访问,像获取或者修改直接通过get和set方法,无需关心内部实现。

继承:java中提供extends关键字去实现子类继承父类,获取到父类提供的共性方法或者属性的同时,子类还可以做出自己的改变或者扩展。

多态:首先多态是要基于继承,重写以及父类引用指向子类对象来实现的。像多态的话也分为编译时多态和运行时多态,编译时多态主要是通过方法重载实现的,而运行时多态的话只要是通过子类重写父类的方法来实现的。而多态的底层原理则是方法表,如果子类重写了父类的方法,重写的方法就指向子类自己的实例,如果没有重写的话就会向上转型寻找父类的方法。多态的话优点就是灵活性和可拓展性以及可维护性,缺点的话就是限制访问子类特有的方法。

⑪如何理解java的序列化和反序列化?

答:首先序列化主要是为了解决网络上对象传输的问题,序列化就是把内存里的对象转换为字节流以便实现存储和传输,而反序列化就是根据从文件或者网络上获取到的字节流构建出一个新的对象。像现在最常用的就是通过JSON的统一解析格式,再通过数据流进行相互传输达到跨平台间的数据交互,最常见的就是我们前端和后端的参数传递。

⑫讲一讲java异常?

答:异常可分为运行时期异常(ArrayIndexOutOfBoundsException:数组越界异常。ArithmeticException:算数异常。NullPointerException:空指针异常....)和编译时期异常。

Try{ }catch{ }的执行过程:

当try中出现异常时,会创建一个对应的异常对象,根据这个异常对象去catch中找匹配的异常类。

Throw和Throws的区别:

首先二者都是用来抛出异常的。Throw一般是用于在代码块中,程序员手动的抛出一个异常,运行到Throw语句,会立刻停止该代码块不会往后面执行。而Throws一般是用于方法上去声明可能会抛出什么异常,但是该方法不一定会发生异常。

⑬空指针异常如何处理?

答:①检查空指针,即在使用对象之前判断其是否为空。

②JDk8的新特性中,提供了Optional类。

⑭get和post的区别?

答:首先他们都是http中的请求的两种方式。①首先get的话一般是用来向后端请求资源,而post的话一般就是用来提交数据像什么表单数据之类的。②其次get的请求参数是放在URL里面的,并且参数长度有限制(2048),而post的话请求参数则是放到请求体中,长度无限制。③因为get的参数在URL中,所以其安全性没有post好。④get请求一般会被浏览器缓存,而post不能

⑮Final,Finally和Finalize的区别?

答:①Final是java中的关键字,一般用于声明属性,方法,方法参数和类,表示属性不可改变,方法不可以被重写,最终参数,类不能被继承。②而Finally是异常处理结构语句中的一部分,finally中的代码块无论是否发生异常都会执行。③Finalize则是Object类中的一个方法,一般是用于在垃圾回收器的时候调用该方法进行垃圾回收

⑯BIO,NIO,AIO是什么以及区别?

答:首先BIO,NIO,AIO三者都是Java中的网络编程模型。

BIO(Blocking_IO):同步阻塞IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器需要启动一个线程进行处理,并且阻塞等待客户端连接和阻塞等待客户端消息,并且不管那一端的Socket断掉,另一端也会直接断掉。如果这个链接不做任何事情会造成不必要的线程开销。不过可以通过线程池机制去改善。

NIO:同步非阻塞IO:NIO是java1.4版本引入的一个IO API,可以替换掉标准的Java IO API。服务器实现模式为一个请求一个线程,即客户端发送的连接请求都注册到多路复用器(选择器)上,多路复用器轮询到连接有I/O请求才去启动一个线程进行处理

其NIO的三大核心部分:Channel(通道,负责数据传输,双向可同时进行读写),Buffer(缓冲区,负责数据存取,从通道读取,也是通过通道写出),Selector(选择器/多路复用器,负责轮询通道,是实现非阻塞的核心)

 

NIO非阻塞式的原理:通过一个线程并发处理多个客户端的连接和读写操作。

NIO与BIO的区别:

AIO:异步非阻塞IO:基于NIO,可以称之为NIO2.0,不管是客户端连接还是读写都是异步操作。

⑰IO和NIO的区别?

答:首先IO和NIO都是java中用来IO数据操作的。区别在于:①IO是面向流的,而NIO是面向缓冲区的。所以NIO的效率要高。 ②IO的各种流是阻塞的,就是说在操作读或者写的流的时候,线程会被阻塞直到数据被完全读取和数据完全输出。而NIO是非阻塞的,通过一个线程并发处理多个客户端的连接和读写操作,不需要阻塞的等待连接和读写。 ③IO是单向的,输入流只能输入,输出流只能输出。而NIO中提供了三大核心组件,Channel通道去负责数据传输,Buffer缓存区去负责数据的存取,Selector选择器/多路复用器负责轮询通道监听连接事件。实现了双向的数据传输。

⑱==和equals的区别?

答:①==如果作用于基本类型(byte,short,int,long,float,double..)的话比较的是值,但是如果作用于引用类型的话,比较的是引用地址。②equals是Object类中的一个方法,默认比较的也是对象地址是否相同,但是如果重写了就要看重写之后的逻辑,像String类就重写了equals方法,比较的就是字符串的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值