这份大厂面试真题之蚂蚁金服,已经通过很多内部人员的证实!建议收藏 ,反复观看!(一)

本文主要探讨了Java从JDK1.7到JDK1.8在Map和JVM内存结构上的变化,重点讲解了ConcurrentHashMap的并发支持。同时,区分了并行与并发的区别,并概述了JVM内存模型的改进。在数据库方面,讨论了MySQL索引的使用场景、优化策略,以及分库分表的概念。此外,还涉及了分布式事务解决方案,如2PC和TCC。内容涵盖了面试中常见的Java并发、数据库优化和分布式系统知识点。
摘要由CSDN通过智能技术生成

后续会更新大厂面试真题之蚂蚁金服二哦

1. jdk1.7 到 jdk1.8 Map 发生了什么变化(底层)?

1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+链 表+红黑树。也就是说在 JVM 存储 hashMap 的 K-V 时仅仅通过 key 来决定每一个 entry 的存 储槽位(Node[]中的 index)。并且 Value 以链表的形式挂在到对应槽位上(1.8 以后如果 value 长度大于 8 则转为红黑树)。
但是 hashmap1.7 跟 1.8 中都没有任何同步操作,容易出现并发问题,甚至出现死循环 导致系统不可用。解决方案是 jdk 的 ConcurrentHashMap,位于 java.util.concurrent 下,专门 解决并发问题。

2. ConcurrentHashMap

思路与 hashMap 差不多,但是支持并发操作,要复杂很多

3. 并行跟并发有什么区别?

并发:指应用交替执行不同的任务,多线程原理
并行:指应用同时执行不用的任务
区别:一个是交替执行,一个是同时执行。

4. jdk1.7 到 jdk1.8 java 虚拟机发生了什么变化?

JVM 中内存份为堆、栈内存,及方法区。
栈内存主要用途:执行线程方法,存放本地临时变量与线程方法执行是需要的引用对象 的地址。
堆内存主要用途:JVM 中所有对象信息都存放在堆内存中,相比栈内存,堆内存大很多 所以 JVM 一直通过对堆内存划分不同功能区块实现对堆内存中对象管理。
堆内存不够常见错误:OutOfMemoryError
栈内存溢出常见错误:StackOverFlowError 在 JDK7 以及其前期的 JDK 版本中,堆内存通常被分为三块区域 Nursery 内存(young generation)、长时内存(old generation)、永久内存(Permanent Generation for VM Matedata), 显示如下图:
在这里插入图片描述

在最上面一层是 Nursery 内存,一个对象被创建以后首先被房到 Nuersery 中的 Eden 内存中,如果存活周期超过两个 Survivor(生存周期)之后会被转移到 Old Generation 中。
永久内存中存放对象的方法、变量等元数据信息。永久内存不够就会出现 以下错误: java.lang.OutOfMemoryError:PermGen
但是在 JDK1.8 中一般都不会得到这个错误,原因在于:1.8 中把存放元数据的永久内存 从堆内存中已到了本地内存(native Memory)中,1.8 中 JVM 内存结构变成了如下图:
在这里插入图片描述

这样永久内存就不占用堆内存,可以通过自增长来避免永久内存错误。
-XX:MaxMetaspaceSize=128m 这只最大的远内存空间 128 兆
JDK1.8 移除 PermGen,取而代之的是 MetaSpace 源空间
MetaSpace 垃圾回收:对僵死的类及类加载器的垃圾回收机制昂在元数据使用达到 “MaxMetaSpaceSize”参数的设定值时运行。
MetaSpace 监控:元空间的使用情况可以在 HotSpot1.8 的详细 GC 日志输出中得到。

更新 JDK1.8 的原因:
1.字符串存在永久代当中,容易出现性能问题和内存溢出
2.类及方法的信息比较难确定其大小,因此对永久代的大小制定比较困难,太小容易出 现永久代溢出,太大则容易导致老年代溢出。
3.永久代会为 GC 带来不必要的复杂度,并且回收效率偏低
4.Oracle 可能会想 HotSpot 与 JRockit 合并。

5. 如果叫你自己设计一个中间件,你会如何设计?

我会从以下几点方面考虑开发:

  1. 远程过程调用
  2. 面向消息:利用搞笑的消息传递机制进行平台无关的数据交流,并给予数据通信来 进行分布式系统的集成,有一下三个特点:
    i) 通讯程序可以在不同的时间运行
    ii) 通讯晨旭之家可以一对一、一对多、多对一甚至是 上述多种方式的混合
    iii) 程序将消息放入消息队列会从小吸毒列中取出消 息来进行通讯
  3. 对象请求代理:提供不同形式的通讯服务包括同步、排队、订阅发布、广播等。 可构筑各种框架如:事物处理监控器、分布数据访问、对象事务管理器 OTM 等。
  4. 事物处理监控有一下功能:
    a) 进程管理,包括启动 serv
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值