`

Java常见知识(持续更新

阅读更多

其实今年面试发现,对于底层的东西还是得多看,之前虽然整理过一些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...

    JAVA服务端研发知识图谱_源码.rar

    这个知识图谱源码的提供,旨在帮助开发者系统地理解和掌握Java在服务端开发中的核心技术和实践。以下是一些关键知识点的详细阐述: 1. **Java基础**:Java是一种跨平台的面向对象的编程语言,它的强类型、垃圾回收...

    java基础知识教程讲义

    ### Java基础知识教程讲义知识点概览 #### 一、Java的起源与发展背景 - **Java与计算机语言进化的关系**:Java的出现被视为计算机语言发展史上的一次重要变革,其背后有着深厚的背景故事。从B语言到C语言再到C++...

    Java常见笔试,面试题目深度剖析

    以下是对标题和描述中涉及的Java常见面试题目的深度剖析: 1. **字符串(String)**:Java中的字符串是不可变的,这意味着一旦创建,就不能更改其内容。String类提供了丰富的API,如substring()、indexOf()、replace...

    JAVA核心知识点整理.pdf

    Java作为一门历史悠久的编程语言,在企业级开发领域拥有着无可替代的...随着Java版本的不断更新,这些核心知识点也在不断地丰富和发展,Java开发者需要持续学习和掌握最新的Java技术动态,以适应不断变化的开发需求。

    【精品干货】JAVA超全知识点总结——核心面试知识汇总(283页).pdf

    以上是Java面试中常见的JVM和内存管理相关的知识点,对于Java开发者来说,理解和掌握这些概念是基础,也是提升职业竞争力的关键。在实际面试中,面试官可能会深入询问这些话题,例如垃圾收集的工作机制、内存泄漏的...

    Java web随手记,持续更新

    【Java Web随手记,持续更新】是一份涵盖了Java Web开发中的各类知识点的综合记录,旨在帮助开发者积累经验,提升技能。这份资料可能包含了从基础概念到高级技术的多个层次的内容,适合不同阶段的Java Web开发者学习...

    Java面试知识总结.zip

    持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...

    JAVA知识完全手册

    **JAVA知识完全手册** 在Java编程领域,掌握全面的基础知识是至关重要的,因为这将为开发者构建稳定且高效的软件系统奠定坚实基础。本手册旨在提供一个详尽的Java学习资源,涵盖从入门到进阶的各种知识点,以满足...

    全网最齐全的Java面试题库-附答案-持续更新.zip

    持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...

    Java课堂笔记、代码、java核心知识点梳理、java笔试面试资料.zip

    持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...

    JAVA核心知识点整理——java自学资料.rar

    这份"JAVA核心知识点整理——java自学资料.rar"包含了一份详细的Java学习资源,旨在帮助已经具备一定Java基础知识的开发者进一步提升技能,深入理解Java的底层机制。以下是这份资料可能涵盖的一些核心知识点和学习...

    java程序员需要掌握的知识点

    熟练掌握常见的开发框架和技术栈对于高效开发Java应用至关重要。主要包括: - **Spring Framework**:Spring是目前最流行的Java企业级应用开发框架之一,它提供了依赖注入、面向切面编程等功能,极大地简化了开发...

    一份面向Java初学者和初级工程师的知识点总结和面试题解析,着重关注面试中最常见的知识点。.zip

    持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...

    【互联网一线大厂面试+学习指南】 涵盖大部分Java程序员所需要的面试知识点和面试技巧,分享真实面试经历。.zip

    本资源"【互联网一线大厂面试+学习指南】 涵盖大部分Java程序员所需要的面试知识点和面试技巧,分享真实面试经历"是一个宝贵的资料库,旨在帮助Java开发者提升自己的技能,成功通过一线大厂的面试。 首先,Java...

    JAVA项目更新升级程序

    在IT行业中,Java项目更新升级程序是一个至关重要的环节,它涉及到软件生命周期的维护阶段,确保应用程序能够持续地适应用户需求的变化和技术的演进。在这个特定的"JAVA项目更新升级程序"中,我们可以深入探讨以下几...

    Java 笔试、面试 知识整理.zip

    持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...

    Java基础知识资料

    在当代编程语言的星空中,Java犹如一颗璀璨的明星,其光辉不仅在于其广泛...对于所有Java开发者来说,持续学习和实践这些基础知识是不可或缺的,它为开发者打开了一扇通向编程世界的大门,让他们能在技术的海洋中遨游。

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。.zip

    持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次...

    Tomcat常见问题集锦(持续更新)

    【标题】:“Tomcat常见问题集锦(持续更新)” 在Java Web开发中,Tomcat作为最常用的开源应用服务器,其稳定性和性能是开发者关注的重点。这篇博客文章旨在收集和解决Tomcat在实际运行中遇到的各种问题,为开发者...

Global site tag (gtag.js) - Google Analytics