![](https://img-blog.csdnimg.cn/751658b29c62436cb729fc15c1781082.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java面试习题
文章平均质量分 61
长期更新,主要学习一些java面试题。主要来源于一些经典的java面试题,分享读者对其的一些理解
sword to coding
大学生一枚,致力于记录代码生活的每一滴
展开
-
java面试系列(4)——JVM共享区
先看一下JVM结构图: 说一下JVM中,哪些是共享区、哪些可以作为gc root? 1.JVM中方法区和堆空间是线程共享的,而虚拟机栈、本地方法栈、程序计数器是线程独享的。 2.什么是gc root,JVM在进行垃圾回收时,需要找到“垃圾”对象,也就是没有被引用的对象,但是直接找“垃圾”对象是比较耗时的,所以反过来,先找“非垃圾”对象,也就是正常对象,name就需要从某些“根”开始去找,根据这些“根”的引用路径找到正常对象,而这些“根”有一个特征,就是它只会引用其他对象,而不会被其他对象引用,例如栈中的原创 2022-02-01 16:22:14 · 1323 阅读 · 1 评论 -
java面试系列(3)—— ThreadLocal
说一下ThreadLocal 1.ThreadLocal 是java中所提供的线程本地存储机制,可以利用该机制将数据(如对象)缓存在某个线程内部,该线程可以在任意时刻、任意方法中获取缓存的数据 2.ThreadLocal底层是通过ThreadLocalMap实现的,每个Thread对象(注意不是ThreadLocal对象)中都存在一个ThreadLocalMap,Map的key为ThreadLocal对象,Map的value为需要缓存的值 3.如果线程池中使用ThreadLocal会造成内存泄漏,因为当使原创 2022-01-30 23:48:32 · 746 阅读 · 0 评论 -
java面试系列(2) ——HashMap的put方法
说一下HashMap的put方法的大体流程: 1.根据key通过哈希扰动和路由算法得出数组的下标 2.如果下标对应数组的桶位元素为空,则将key和value封装为Entry对象(JDK 1.7是Entry对象,JDK 1.8是Node对象)并放入对应的桶位 3.如果下标对应数组种的桶位不为空,则分情况讨论: 如果是JDK 1.7,则在添加之前判断是否需要进行扩容,如果不需要则将数据封装成Entry对象,然后使用头插法添加到当前的链表中 如果是JDK 1.8 ,则会判断当前桶位上Node的类型,是红黑树原创 2022-01-27 22:10:19 · 1305 阅读 · 0 评论 -
java面试系列(1)—— ArrayList与LinkedList的区别
说一下ArrayList与LinkedList的区别 1.首先,他们的底层实现结构不同,ArrayList基于数组,LinkedList基于链表实现。 2.由于底层结构的不同,ArrayList更适合随机查找,LinkedList更适合添加、删除。他们查找、添加、删除在不同的场景下时间复杂读有所不同。 3.另外ArrayList和LinkedList都实现了List等接口,但是LinkedList还实现了Deque接口,所以LinkedList还可以用作队列。 以下是详细解析(只展示部分源码): 一.原创 2022-01-26 11:44:11 · 1018 阅读 · 0 评论