其实今年面试发现,对于底层的东西还是得多看,之前虽然整理过一些Java面试的东西,但还是不够,下面就回顾下比较需要掌握的知识点。
1、JVM的内存结构
收藏一篇比较好的文章:
JVM内存模型及垃圾回收算法 :http://blog.csdn.net/kingofworld/article/details/17718587
2、HashMap原理
1)HashMap: http://wiki.jikexueyuan.com/project/java-collection/hashmap.html
put的时候用equals方法比较key是否已经存在(延伸:equals和==区别:http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html; 以及重写equals和hashCode:
http://blog.csdn.net/javazejian/article/details/51348320)
2) ConcurrentHashMap
http://www.jianshu.com/p/1ca810c0ea42 (注意jdk1.8是红黑树, 链表的长度超过8时,会调用treeifyBin(tab , i)方法将链表结构转换为红黑树。ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了。首先,取消了Segment分段锁的数据结构,取而代之的是数组+链表(红黑树)的结构。而对于锁的粒度,调整为对每个数组元素加锁(Node)。然后是定位节点的hash算法被简化了,这样带来的弊端是Hash冲突会加剧。因此在链表节点数量大于8时,会将链表转化为红黑树进行存储。https://blog.csdn.net/fouy_yun/article/details/77816587)
3、List/Set实现及数据结构
4、List的removeheIterator的remove(一边循环一边remove)
集合remove与迭代器remove checkForComodification()会检查expectedModCount与modCount 是否相等,如果不相等就会抛出ConcurrentModificationException异常。 在ArrayList的remove()方法内部的实现主要是通过循环找到元素的下标, 然后调用私有的fastRemove()方法:astRemove()方法中会先修改modCount的值,然后将通过复制一个新的数组的方法将原来index位置上的值覆盖掉,最后数组大小减一 (modCount的作用是记录操作(添加删除)ArrayList中元素的次数(这个很关键),每次操作ArrayList中元素后就会使modCount加一) Iterator的remove()方法分析 看源码可知ArrayList通过iterator()方法得到了一个内部类Itr,这个内部类实现了Iterator接口,在内部类Itr中定义了一个变量expectedModCount . expectedModCount 只在new一个Itr对象时初始化为modCount,在调用Itr对象的next()与remove()方法时第一步会先调用checkForComodification()方法, 并且在remove()方法中会调用ArrayList.this.remove(lastRet)方法(也就是具体的ArrayList对象的remove()方法,上面我们讲过,在ArrayList对象的remove()方法中会使得modCount的值加一),然后修改expectedModCount 的值为modCount。 Collection与Iterator的remove()方法最大的区别就是: Iterator的remove()方法会在删除元素后将modCount 的值赋值给expectedModCount,使其又相等。 如果调用Iterator 的remove() 方法来删除的话,则iterator的内部对象个数和原来集合中对象的个数会保持同步, 而直接调用集合的remove方法来删除的话,集合中对象的个数会变化而Iterator 内部对象的个数不会变化, 当调用Iterator 的next 遍历的时候发现集合中的对象的个数和Iterator 内部对象的个数不同,这样指针往后移动的时候就找不到要迭代的对象。 这是报异常的主要原因,但 内部对象操作时为了避免这种情况都会通过checkForComodification方法检测是否一致,不一致提前抛出异常ConcurrentModifiedException。
5、Linux常用命令
内存:jstat -gcutil查看gc回收; OOM内存溢出(包含堆溢出和栈溢出),先导出内存堆栈信息,用第三方工具如MAT分析
CPU: jstack命令看哪些线程使用cpu过高,锁竞争,IO等;
软连接:ln -s abc cde 建立abc 的软连接
6、redis的过期机制? mongo的结构(Bson)以及使用限制。
相关推荐
### 你应该更新的Java知识 #### 一、Java语言的发展变迁 随着技术的不断进步,Java作为一门历史悠久的编程语言,也在不断地发展和进化。在过去的十年里,Java及其生态系统经历了许多重要的变化,这些变化对Java...
这个知识图谱源码的提供,旨在帮助开发者系统地理解和掌握Java在服务端开发中的核心技术和实践。以下是一些关键知识点的详细阐述: 1. **Java基础**:Java是一种跨平台的面向对象的编程语言,它的强类型、垃圾回收...
### Java基础知识教程讲义知识点概览 #### 一、Java的起源与发展背景 - **Java与计算机语言进化的关系**:Java的出现被视为计算机语言发展史上的一次重要变革,其背后有着深厚的背景故事。从B语言到C语言再到C++...
以下是对标题和描述中涉及的Java常见面试题目的深度剖析: 1. **字符串(String)**:Java中的字符串是不可变的,这意味着一旦创建,就不能更改其内容。String类提供了丰富的API,如substring()、indexOf()、replace...
Java作为一门历史悠久的编程语言,在企业级开发领域拥有着无可替代的...随着Java版本的不断更新,这些核心知识点也在不断地丰富和发展,Java开发者需要持续学习和掌握最新的Java技术动态,以适应不断变化的开发需求。
以上是Java面试中常见的JVM和内存管理相关的知识点,对于Java开发者来说,理解和掌握这些概念是基础,也是提升职业竞争力的关键。在实际面试中,面试官可能会深入询问这些话题,例如垃圾收集的工作机制、内存泄漏的...
【Java Web随手记,持续更新】是一份涵盖了Java Web开发中的各类知识点的综合记录,旨在帮助开发者积累经验,提升技能。这份资料可能包含了从基础概念到高级技术的多个层次的内容,适合不同阶段的Java Web开发者学习...
持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...
**JAVA知识完全手册** 在Java编程领域,掌握全面的基础知识是至关重要的,因为这将为开发者构建稳定且高效的软件系统奠定坚实基础。本手册旨在提供一个详尽的Java学习资源,涵盖从入门到进阶的各种知识点,以满足...
持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...
持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...
这份"JAVA核心知识点整理——java自学资料.rar"包含了一份详细的Java学习资源,旨在帮助已经具备一定Java基础知识的开发者进一步提升技能,深入理解Java的底层机制。以下是这份资料可能涵盖的一些核心知识点和学习...
熟练掌握常见的开发框架和技术栈对于高效开发Java应用至关重要。主要包括: - **Spring Framework**:Spring是目前最流行的Java企业级应用开发框架之一,它提供了依赖注入、面向切面编程等功能,极大地简化了开发...
持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...
本资源"【互联网一线大厂面试+学习指南】 涵盖大部分Java程序员所需要的面试知识点和面试技巧,分享真实面试经历"是一个宝贵的资料库,旨在帮助Java开发者提升自己的技能,成功通过一线大厂的面试。 首先,Java...
在IT行业中,Java项目更新升级程序是一个至关重要的环节,它涉及到软件生命周期的维护阶段,确保应用程序能够持续地适应用户需求的变化和技术的演进。在这个特定的"JAVA项目更新升级程序"中,我们可以深入探讨以下几...
持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...
在当代编程语言的星空中,Java犹如一颗璀璨的明星,其光辉不仅在于其广泛...对于所有Java开发者来说,持续学习和实践这些基础知识是不可或缺的,它为开发者打开了一扇通向编程世界的大门,让他们能在技术的海洋中遨游。
持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...
【标题】:“Tomcat常见问题集锦(持续更新)” 在Java Web开发中,Tomcat作为最常用的开源应用服务器,其稳定性和性能是开发者关注的重点。这篇博客文章旨在收集和解决Tomcat在实际运行中遇到的各种问题,为开发者...