网络阿里面试题 3/27:
题源地址:https://blog.csdn.net/weixin_48726357/article/details/107662362
一面(问了数据结构、jvm、锁等):
1. 自我介绍和项目
2. HashMap底层如何实现?
数组+链表+红黑树
断点1 : 如果数组是空直接new一个节点进去
断电2 : 如果已经有了节点了判断是否已经到转换为红黑树的阈值(链表->红黑树)
3. Hash一致算法?
传统: 对key名取模服务器台数 余数决定访问那台 实现分区的效果 缺点不能动态添加服务器
hash一致性: 2^32(ipv4的大小)构建一个hash环,将服务器计算后分布在hash环中,在两台服务器之间的就是属于它的请求, 如果服务器分布不平均, 虚拟节点–实际节点的复制品,用于构建均匀到节点分布
4. 说说HashMap和ConcurrentHashMap的区别?treemap和HashMap的区别?
ConcurrentHashMap CAS控制并发安全
TreeMap 红黑树
TreeSet 使用 TreeMap 红黑树
5. java的内存分区?
6. java对象的回收方式,回收算法?
1.标记-清除算法 : 效率低,标记清除后会产生大量不连续的内存
2.标记-整理算法 : 相比标记-清除算法多了整理,相对的更加复杂
3.复制算法 : 简单高效,代价是将内存缩小为原来的一半,代价高
4.分代收集算法
5.非分代收集算法
7. CMS和G1了解吗?
相比 GMS 更注重吞吐量 GMS注重响应
G1 初始标记(独占)->并发标记(并发)->最终标记(并行)->筛选回收(并行)
空间整合,没有内存碎片产生 利用多核性能 控制停顿时间(G1选择回收region,达到预期时间)
8. CMS解决什么问题,说一下回收的过程?
最短回收停顿 老年代 标记-清理(减少减少停顿时间) 失败后SerialOld收集器
初始标记(独占)->并发标记(并发)->重新标记(并行)->并发清理(并发)
缺点 内存碎片 会触发fullgc
1.当程序时间运行当中,在运行功能下,同时产生了多条程序分支,同时工作叫并行。(某一时间节点)
2.(某一时间段)多个线程对同一个功能模块进行访问叫并发。
9. CMS回收停顿了几次?
1次 初始标记
10. java栈什么时候会内存溢出,java堆呢,说一种场景?
调用方法过多,比如递归调用
对象过多,数组过大,内存泄漏
11. 集合类如何解决这个问题(软引用和弱引用),讲下这个两个引用的区别?
软:在内存不够的时候才会被回收
弱:在下一次gc的时候被回收
12. java里的锁了解哪些?
AQS synchronized关键字
13. synchronized锁升级的过程(偏向锁到轻量锁再到重量级锁),分别#### 1. 如何实现的,解决的是哪些问题?
在为发生锁竞争的时候是偏向锁 对象头里
发生锁竞争后升级轻量锁 cas
cas一定次数后升级重量锁
提高性能
14. Tomcat的基本架构是什么?
Server : 整个服务器 1个
Service : 提供具体服务
Service -> Connector : 用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
Service -> Container : 用于封装和管理Servlet,以及具体处理Request请求;
Service -> Container-> Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;
Service -> Container-> Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
Service -> Container-> Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;
Service -> Container-> Wrapper:每一Wrapper封装着一个Servlet;
15. 什么是类加载器?
加载类的 有三种 系统类加载器 扩展类加载器 应用类加载器
16. 说说双亲委派模型机制?
每种类加载器都有自己的加载范围,
系统类加载器加载jdk里的一些类
扩展类加载器加载jdk下 ext下的类
应用类加载用户编写的类
如果用户创建了一个类叫 java.land.String 这应该是不被允许的
故加载类时会最高优先级系统->扩展->应用类加载器,只有系统类和扩展类加载器没有这个方法才会使用应用类加载,当然也可以通过重写类加载器打破委派机制
17. GC的机制是什么?GC算法和回收策略?
可达性分析 引用计数