java面试原理题有哪些?java原理题整理

阳光 2021-08-20 17:57:18 java常见问答 7114

在Java面试中,需要考核的内容以及类型有很多,这样做就是为了考核java程序员的能力,看看能不能胜任java岗位,那么今天我们就给大家分享一些java原理题目以及答案!

1. 对于synchronized关键字,它的底层原理又是什么呢?

synchronized是jvm实现的一种互斥同步访问方式,底层是基于每个对象的监视器(monitor)来实现的。被synchronized修饰的代码,在被编译器编译后在被修饰的代码前后加上了一组字节指令。

在代码开始加入了monitorenter,在代码后面加入了monitorexit,这两个字节码指令配合完成了synchronized关键字修饰代码的互斥访问。

在虚拟机执行到monitorenter指令的时候,会请求获取对象的monitor锁,基于monitor锁又衍生出一个锁计数器的概念。

当执行monitorenter时,若对象未被锁定时,或者当前线程已经拥有了此对象的monitor锁,则锁计数器+1,该线程获取该对象锁。

当执行monitorexit时,锁计数器-1,当计数器为0时,此对象锁就被释放了。那么其他阻塞的线程则可以请求获取该monitor锁。

2.序列化存储原理是什么?

Java 序列化机制为了节省磁盘空间,具有特定的存储规则,当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用。第一次写入对象以后,第二次再试图写的时候,虚拟机根据引用关系知道已经有一个相同对象已经写入文件,因此只保存第二次写的引用,所以读取时,都是第一次保存的对象。

3..LinkedHashMap的原理是什么?

LinkedHashMap继承自HashMap,所以具有所有HashMap的特性以及功能,同时在HashMap的基础上维护了一个双向链表,所以可以保证在对map中的元素进行迭代时是有序的。

LinkedHashMap的Key和Value都允许空;

LinkedHashMap的Key重复会覆盖、Value允许重复;

LinkedHashMap是有序的;

LinkedHashMap非线程安全;

LinkedHashMap会使用链表将每一个插入的元素都按照插入的顺序进行组织,这个链表是独立于HashMap这个结构而存在的,相当于是即维护了一个HashMap,又维护了一个双向链表,当我们进行遍历的时候就会从链表的头结点开始进行遍历,所以是有序的。

在LinkedHashMap中有一个字段叫accessOrder,这个字段可以指定链表的组织顺序,当设置为false时所有的Entry按照插入的顺序排列,而当设置为true时所有的Entry按照访问的顺序排列,每次被访问的元素都会被放置到链表的尾部。

在java中有很多原理需要大家搞清楚,只有将原理弄清,才能进行实践,才能完成项目!最后大家如果想要了解更多java面试题知识,敬请关注奇Q工具网。

推荐阅读:

fastjson格式化输出如何操作?fastjson如何过滤字段?

json字符串去掉空格怎么弄?Json对象与Json字符串如何互转?

java如何开发?java开发教程