在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如何过滤字段?