0
点赞
收藏
分享

微信扫一扫

java面经

大沈投资笔记 2022-04-14 阅读 47
java

java面试基础(一)

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


1 接口和抽象类有什么区别?

答:抽象类要被子类继承,接口要被类实现,抽象类既可以声明方法又可以实现方法,接口只能声明方法。抽象类可以有构造函数,但是不能被实例化,接口没有构造函数也不能被实例化。抽象类里定义的变量是普通变量,而接口里定义的变量一定要是常量。类只能单继承抽象类,但是类可以多实现接口。抽象类是重构的结果,接口是设计的结果。

2 说说抽象类不能被实例化,为什么还要有构造方法?

答:首先要明白抽象类是需要被子类继承,才能够被使用。而在子类继承了抽象类,可以在自己的构造器里通过 super()方法先初始化父类抽象类里的属性。

3 抽象类会用到构造函数初始化属性,那么为什么接口却没有构造函数?

答:因为接口里定义的变量都必须是常量,会被放在常量池中,不需要初始化。

4 为什么抽象类,接口无法实例化?

答:首先抽象类里可能会有抽象方法,抽象方法是没有方法体的。这样JVM没有办法为抽象类分配具体的内存空间,所以出于安全考虑,Java规定抽象类,接口无法实例化

5 字符流与字节流的区别?

1 读写的时候字节流是按字节读写,字符流按字符读写。
2 字节流适合所有类型文件的数据传输,因为计算机字节(Byte)是电脑中表示信息含义的最小单
位。字符流只能够处理纯文本数据,其他类型数据不行,但是字符流处理文本要比字节流处理文本
要方便。
3 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。
4 只是读写文件,和文件内容无关时,一般选择字节流。

6 同步与异步,阻塞与非阻塞

同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。
同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

阻塞:阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。
非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。
举个生活中简单的例子,你妈妈让你烧水,小时候你比较笨啊,在哪里傻等着水开(同步阻塞)。等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞)。后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,你需要去倒水了(异步非阻塞)。

7 BIO、NIO、AIO

BIO:一连接一线程。,客户端有连接请求的时候,服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然这也可以通过线程池机制改善。
NIO: 一请求一线程。客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到有连接IO请求时才会启动一个线程进行处理
AIO:一个有效请求一线程。 客户端的IO请求都是通过操作系统先完成之后,再通知服务器应用去启动线程进行处理。

8 为什么要在实现Serializable接口的同时最好还要指定serialVersionUID的值

1 在Java中实现了Serializable接口后,就是标识了这个Java对象可序列化的,所以之后JVM底层会帮我们实现序列化和反序列化的操作。
2 UID 显式的指定serialVersionUID的值,那么这个serialVersionUID就不会再因为属性的变化而变化,也就保证能够反序列化成功。不显式会默认一个UID,属性修改时会改变。

总结

举报

相关推荐

0 条评论