一杯茶,一支烟,出了Bug,冰火两重天;带你领略这份2023年Java面试葵花宝典

HashMap面试题
HashMap与HashTable的区别

1.HashMap线程不安全 HashTable 线程是安全的采用synchronized
2.HashMap允许存放key 为null HashTable 不允许存放key 为null
3.在多线程的情况下,推荐使用ConcurrentHashMap 线程安全 且效率非常高

HashMap底层是如何实现的

在HashMap1.7版本中底层是基于数组+链表实现的,如果发生Hash冲突概率
比较大,会存放到同一个链表中,链表如果过长 会从头查询到尾部 效率非常低。
所以在HashMap1.8版本 (数组容量>=64&链表长度大于8) 就会将该链表转化红黑树。

HashMap根据Key查询时间复杂度?

1.Key没有产生冲突 时间复杂度是为o(1); 只需要查询一次
2.Key产生冲突 采用链表存放则为O(N) 从头查询到尾部
3.key产生冲突采用红黑树存放则为O(LogN)
HashMap底层是有序存放的吗?

是无序的,因为Hash 算法是散列计算的 没有顺序,如果需要顺序
可以使用LinkedHashMap集合采用双向链表存放。

HashMap7扩容产生死循环问题有了解过吗?
其实这个JDK官方不承认这个bug,因为HashMap本身是线程不安全的,不推荐在
多线程的情况下使用,是早期阿里一名员工 发生在多线程 的情况下使用HashMap1.7 扩容会发生死循环问题,因为HashMap1.7 采用头插入法 后来在在HashMap1.8 改为尾插法 。
如果是在多线程的情况下 推荐使用ConcurrentHashMap

HashMap Key 为null 存放在 什么位置
存放在数组 index为0的位置。
ConcurrentHashMap 底层是如何实现?
1.传统方式 使用HashTable保证线程问题,是采用synchronized锁将整个HashTable中的数组锁住,
在多个线程中只允许一个线程访问Put或者Get,效率非常低,但是能够保证线程安全问题。
2.多线程的情况下 JDK官方推荐使用ConcurrentHashMap
ConcurrentHashMap 1.7 采用分段锁设计 底层实现原理:数组+Segments分段锁+HashEntry链表实现
大致原理就是将一个大的HashMap 分成n多个不同的小的HashTable
不同的key 计算index 如果没有发生冲突 则存放到不同的小的HashTable中 ,从而可以实现多线程
同时做put操作,但是如果多个线程同时put操作 key 发生了index冲突落到同一个小的HashTable中
还是会发生竞争锁。
3.ConcurrentHashMap 1.7 采用 Lock锁+CAS乐观锁+UNSAFE类 里面有实现 类似于synchronized
锁的升级过程。
4.ConcurrentHashMap 1.8版本 put操作 取消segment分段设计 直接使用Node数组来保存数据
index没有发生冲突使用cas锁 index 如果发生冲突则 使用 synchronized

分布式解决方案

请问你在生产环境中,如何搜索日志的呢?
回答:

  1. 传统的方式采用tail 搜索文件日志,如果服务器是集群的
    使用tail 指令搜索日志效率是非常低;
  2. 所有我们构建分布式ELK+Kafka采集日志 ,统一将我们的日志输出到
    ES中,通过可视化界面查询。
    3.或者整合skywalking监控服务报警,直接通过skywalking定位服务追踪链
    报错信息。
    4.在一些较大的互联网企业中,保证服务器端安全性,生产环境一般是不允许直接连接生产环境
    服务器,而是通过日志采集系统查看日志。
image.png
image.png

生产环境中,你遇到了报错的问题 你是如何定位的?
回答:

  1. 传统的方式 在生产环境中遇到报错问题,我们是通过搜索日志的方式,排查具体的错误。
    2.采用aop形式拦截系统错误日志,在将这些错误日志调用微信公众号接口 主动告诉给我们的开发人员
    生产环境发生了故障。
  2. 我们公司采用apm系统 skywalking ,监控整个微服务 如果服务在一段时间
    内发生了故障或者报错 会主动调用微信模板接口通知给开发人员 生产环境发生了故障。在通过skywalking 追踪 链可以直接查看到具体的错误信息内容
1
i

调用接口的时候,如果服务器端一直没有及时响应 怎么解决?

im

1.如果调用接口发生了响应延迟:是因为我们http请求是采用同步的形式,基于请求与响应模型如果服务器端没有及时响应给客户端,客户端就会认为接口超时,接口发生了超时客户端会不断重试 ,重试的过程中 会导致 幂等性问题
幂等性问题(需要保证业务唯一性。)
2.如果接口响应非常慢,就需要对代码做优化例如 加上缓存减轻db查询压力、减少GC回收频率
2.如果接口代码在怎么优化 就是执行非常耗时时间,因为采用mq异步的形式 不能够使用 同步形式。
举例子:接口代码里面 需要调用非常多接口 在响应客户端
接口代码:
1.调用征信报告接口---15s-30s

im
ima

生产环境服务器宕机,如何解决呢?

  1. 我们公司生产环境,会对我们服务器 实现多个节点集群,如果某台服务器
    发生了宕机 会自动实现故障转移,保证服务的高可用。
ima
  1. 如果服务器宕机 我们可以在服务器上安装keepalived 监听java进程,如果该java进程发生了宕机 会自动尝试重启该java进程,这是属于软件层面。如果是物理机器比如关机了,可以使用硬件方式自动重启服务器 例如向日葵
    3.如果服务器发生了宕机,尝试重启n多次还是失败,我们可以使用容器快速动态的实现扩容(docker或者k8s)
    4.重启该服务,如果重启多次还是失败 则会发送短信模板的形式通知给运维人员。
    注意:千万不要回答 直接重启服务器端。

SpringCloud

为什么不选择dubbo?却选择SpringCloud?

  1. dubbo 属于RPC框架;
  2. SpringCloud 不属于RPC框架,属于微服务全家桶框架,提供非常多
    在分布式微服务架构中遇到难题
    2.1服务治理---nacos eureka zk
    2.2分布式配置中心 nacos springcloud config 携程阿波罗
    3.3分布式事务 lcn(被淘汰)、seata
    3.4服务追踪 zipkin /skwalking
    3.5服务保护 hystry、sentinel
    3.6微服务网关 zuul gateway
    ....
    feign客户端 rpc框架 类似于 dubbo

dubbo rpc框架 底层 netty 封装dubbo 协议
整合分布式解决方案---自己单独整合 单一功能
而springcloud 提供了成熟一套微服务解决方案。
dubbox 属于当当网提供 http协议接口
feign 调用接口 http协议
开放平台(阿里、腾讯) http协议 跨平台

dubbo与feign 都是面向接口 调用 底层思想原理都是相同。
底层采用动态代理技术。
服务正在发布中?如何不影响用户使用?

服务正在发布中,该jar中正在启动...
客户端访问的时候,一直阻塞等待。
1.使用nginx 故障转移即可。
2.灰度发布 先发布一小部分 如果没有问题 在让所有用户都可以访问。
灰度发布 nginx+nacos gateway+nacos(推荐)

对方调用你接口响应比较慢?你会怎么排查?
项目搭建服务追踪监控系统
1.zipkin /skwalking 通过平台形式可以查询该接口响应速度时间。
对方调用你接口响应比较慢 多个维度思考?
带宽→服务处理(cpu)→数据库或者Redis→网络IO操作(例如调用别人接口)
1.走外网传输数据 会有带宽限制呢
2.请求如果达到服务端,服务足够线程处理请求 如果服务器没有足够的线程

处理该请求? 导致客户端会阻塞等待?
解决办法:
1.调整最大线程数
2.调整最大线程数 治标不治本,对接口做限流操作 例如服务器端没有足够
线程处理的时候(策略服务熔断 降级 限流策略。)
3.服务cpu处理性能(多核cpu) 体现多线程同时处理 降低cpu上下文切换的次数。
如果发生了上下文切换会导致其他的线程 会短暂阻塞 有需要从新被cpu调度。
4.判断sql语句查询是否比较慢、做mysql调优 快速响应结果
5.网络IO操作(例如调用别人接口)代码在怎么优化还是比较慢,将耗时的操作
采用异步的形式处理 例如多线程(消耗cpu的资源) 建议使用MQ。

开发者不小心删除了生产环境数据?怎么恢复呢?
1.正常的情况下 在生产环境中 没有delete或者rm -rf 通过update
隐藏的形式, 后期淘汰策略删除。
2.构建mysql主从集群环境 可以通过备份节点恢复数据,一主一从。
3.如果执行delete 我们是可以通过binlog 快速恢复数据。

你在开发过程中,遇到哪些难题?你是怎么解决的呢

如果在面试的过程中被面试官问到:你在开发过程中,遇到哪些难题?
不要答:空指针异常、常见错误异常。
遇到问题→你是如何分析的?→如何排查的?→最终是怎么解决的?
1.分布式事务
2.分布式幂等
例如 我们公司提供了一个接口,被其他公司进行调用。
他的公司在调用我们公司接口的过程中,我们的接口响应超时了,
最终触发了客户端重试了,重试的过程当中请求的参数都是相同的,导致我们接口
会重复执行业务逻辑。
解决办法: 全局id 业务上防重复、 在db层面去重复 例如 创建唯一约束
3.定时任务调度
例如:我们项目在生产环境中做定时任务,如果集群的情况下 定时任务重复执行。

解决该问题
1.在打jar包的时候 加上一个开关 只让一个jar包执行定时任务
2.整合分布式任务调度平台 xxljob 最终分片执行 定时任务集群的执行
定时任务1 【】跑批 1-10万 定时任务2 11-20万
4.数据同步延迟问题
我们公司 使用canal 解决mysql与redis+kafka 数据同步问题
发现就是在并发的情况下同步非常延迟,我们整合kafka分区模型
根据每张表都有自己独立的topic主题,每个topic 主题有自己独立
分区 每个分区有自己独立消费者 ,解决消息顺序一致性问题。

6.安全性问题
7生产环境发生cpu飙高、内存泄漏
.......真实业务场景当中遇到难题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容