【java面经01】10问

本文深入探讨了HashMap与Hashtable的区别,包括对null的支持、线程安全性以及扩容策略。此外,还提及了Java垃圾回收机制,涉及JVM内存模型、垃圾回收算法及其优缺点。进一步讨论了弱引用与软引用的差异,并列举了常用的设计模式如单例、观察者模式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HashMap和Hashtable区别?

这个一定要去看源码!看源码!看源码!实在看不下去的可以上网看别人的分析。简单总结有几点:

1.HashMap支持null Key和null Value;Hashtable不允许。这是因为HashMap对null进行了特殊处理,将null的hashCode值定为了0,从而将其存放在哈希表的第0个bucket。

2.HashMap是非线程安全,HashMap实现线程安全方法为Map map = Collections.synchronziedMap(new HashMap());Hashtable是线程安全

3.HashMap默认长度是16,扩容是原先的2倍;Hashtable默认长度是11,扩容是原先的2n+1
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.HashMap继承AbstractMap;Hashtable继承了Dictionary

扩展,HashMap 对比 ConcurrentHashMap ,HashMap 对比 SparseArray,LinkedArray对比ArrayList,ArrayList对比Vector

concurrenthashmap
在这里插入图片描述
concurrenthashmap不像hashtable那样直接对方法上锁而是采用分段锁(在方法内部的部分使用synchronized关键字)尽可能的把资源放出去。同时最新的cm引入了cas操作。
在这里插入图片描述

arraylist容量
在这里插入图片描述
在这里插入图片描述
vector通过加 synchronized关键字 实现线程安全
在这里插入图片描述

二、说一下Java垃圾回收机制?

需要理解JVM,内存划分——方法区、内存堆、虚拟机栈(线程私有)、本地方法栈(线程私有)、程序计数器(线程私有), 理解回收算法——标记清除算法、可达性分析算法、标记-整理算法、复制算法、分代算法,优缺点都理解下。

  1. jvm内存分为程序计数器,本地方法栈,虚拟机栈(栈帧),方法区(存储常量,类的信息),堆(类对象)

扩展:1.8前后常量池的变化?

1.8之前常量池在方法区当中,但是之后常量池在堆当中
方法区也产生了变化,1.8之前通过jvm内存的永久代实现,但是1.8之后却放入了每个线程的工作内存的元空间当中。
在这里插入图片描述

什么对象可以当作gc root?(其实就是找哪些变量是具有回收可能的)

记住两栈两方法:本地栈,虚拟机栈,方法区的类静态变量(静态全局变量),方法区的类成员变量和成员变量。

1、虚拟机栈中引用的对象

如下代码所示,a 是栈帧中的本地变量,当 a = null 时,由于此时 a 充当了 GC Root 的作用,a 与原来指向的实例 new Test() 断开了连接,所以对象会被回收。
在这里插入图片描述

三、弱引用、软引用区别?

当GC Root指向软引用对象时,在内存不足时,会回收软引用所引用的对象,然而只要发生了gc无论内存足与否都会将虚引用回收。

四、了解过哪些设计模式?(了解,可略过)

1.单例模式:好几种写法,要求会手写,分析优劣。一般双重校验锁中用到volatile,需要分析volatile的原理

2.观察者模式:要求会手写,有些面试官会问你在项目中用到了吗?实在没有到的可以讲一讲EventBus,它用到的就是观察者模式

3.适配器模式:要求会手写,有些公司会问和装饰器模式、代理模式有什么区别?

4.建造者模式+工厂模式:要求会手写。

5.策略模式:这个问得比较少,不过有些做电商的会问。

6.MVC、MVP、MVVM:比较异同,选择一种你拿手的着重讲就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值