Java八股文口试题通常涵盖了Java语言的底子知识、高级特性、框架应用、数据库操纵等多个方面。以下是一些常见的Java口试题及其详细回答,按照不同的主题举行分类:
一、Java底子
- 面向对象的特征有哪些?
- 抽象:忽略与当前目标无关的细节,只关注与当前目标干系的方面。
- 继承:允许新类继承现有类的属性和方法,实当代码的重用。
- 封装:将对象的状态信息隐藏在对象内部,不允许外部直接访问,而是通过该对象提供的方法来实现对内部状态的访问和操纵。
- 多态性:允许不同类的对象对同一消息作出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
- 重载(Overload)与重写(Override)的区别?
- 重载:发生在同一个类中,方法名相同但参数列表不同(参数范例、个数、顺序至少有一个不同),返回范例可以不同,但不能通过返回范例来区分重载。
- 重写:发生在有继承关系的子类与父类之间,方法名、参数列表必须完全相同,返回范例可以相同或更小的范围(协变返回范例),访问权限不能比父类中被重写的方法的访问权限更低。
- 接口(Interface)与抽象类(Abstract Class)的区别?
- 接口:一种引用范例,是一种抽象的范例,它是一种特殊的类,它是完全抽象的,没有具体实现的方法,不能被实例化。接口中的方法默认是public abstract的,接口中界说的变量默认是public static final的。
- 抽象类:是一种特殊的类,不能被实例化,只能被继承。抽象类中可以包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)。
- 深拷贝(Deep Copy)与浅拷贝(Shallow Copy)的区别?
- 浅拷贝:仅仅复制对象本身(包括对象中的基本数据范例变量和对象的引用变量),但不复制对象引用的其他对象。
- 深拷贝:不但复制对象本身,还复制对象引用的其他对象,使得新对象和原对象完全独立。
- sleep()和wait()的区别?
- sleep()是Thread类的方法,导致当火线程暂停执行指定时间,不会释放锁。
- wait()是Object类的方法,用于线程间的通讯,导致当火线程等待直到另一个线程调用此对象的notify()方法或notifyAll()方法,会释放锁。
二、Java高级
- JVM内存结构及其作用?
- 方法区(Method Area):存储每个类的结构信息,如运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容等。
- 堆(Heap):所有对象实例以及数组都要在堆上分配,是垃圾网络器管理的重要区域。
- 栈(Stack):每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个栈帧(Stack Frame),对应着一次次方法的调用。
- 步调计数器(Program Counter Register):是一块较小的内存空间,可以看作是当火线程所执行的字节码的行号指示器。
- 当地方法栈(Native Method Stacks):与虚拟机栈所发挥的作用非常相似,其区别不外是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而当地方法栈则为虚拟机利用到的Native方法服务。
- Java中的垃圾网络算法有哪些?
- 标记-扫除(Mark-Sweep):起首标记出所有必要回收的对象,然后统一回收被标记的对象。
- 复制(Copying):将内存分为大小相等的两块,每次只利用其中一块,当这一块内存用完时,就将还存活的对象复制到另一块上面,然后再把已利用的内存空间一次清理掉。
- 标记-整理(Mark-Compact):标记过程仍然与“标记-扫除”算法一样,但后续步调不是直接对可回收对象举行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端界限以外的内存。
- 分代网络(Generational Collection):根据对象的存活周期的不同,将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的网络算法。
- synchronized和volatile的区别?
- synchronized:是Java中的一个关键字,用于控制多个线程对共享资源的访问,包管同一时刻只有一个线程能够访问该资源。synchronized既可以修饰方法,也可以修饰代码块。
- volatile:是Java中的一个修饰符,用于包管变量的可见性和有序性,但不包管原子性。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,每次利用都会直接从主存中读取。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |