Kevin's blog Kevin's blog
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档

Kevin

你可以迷茫,但不可以虚度
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档
  • 常见问题

    • 常见面试题
      • Synchronized
        • ❓执行wait()之后锁是什么状态?执行notify()之后锁又是什么状态?
        • ❓synchronized重量级锁执行完毕和轻量级锁执行完毕,对象锁是什么状态?
        • ❓synchronized偏向锁执行完毕,对象锁是什么状态?
        • ❓synchronized什么情况下会升级为重量级锁?
        • ❓无锁状态下如果在synchronized中调用对象hashCode会升级为重量级锁吗?
      • HashMap
        • ❓ConcurrentHashMap协助扩容最大线程数支持是多少?
        • ❓ConcurrentHashMap扩容为何是的两倍?
      • Redis
        • ❓Redis过期key删除策略有哪些?
      • Spring
    • Mybatis一级缓存问题
  • 数据库

  • 代码技巧

  • 浏览器

  • spring应用

  • 使用Java Agent字节码技术扩展
  • 什么是AP,什么是CP,什么是CAP
  • RabbitMq相关
  • ELK查询技巧
  • 性能优化手段
  • 经验技巧
  • 常见问题
kevin
2022-07-01
目录

常见面试题

# Synchronized

# ❓执行wait()之后锁是什么状态?执行notify()之后锁又是什么状态?

✅ 答案:执行wait()之后线程是挂起状态,需要依托操作系统,所以锁升级为重量级锁

​ 执行notify()之后线程唤醒,进入轻量级锁

# ❓synchronized重量级锁执行完毕和轻量级锁执行完毕,对象锁是什么状态?

✅ 答案:因为同步块执行完毕,所以此时资源不存在锁竞争,进入无锁状态,把原本指向栈帧中锁记录的指针指向对象hashCode复制到无锁状态

# ❓synchronized偏向锁执行完毕,对象锁是什么状态?

✅ 答案:还是偏向锁状态,因为偏向锁没有存储对象hashCode,无法复制hashCode到无锁状态

# ❓synchronized什么情况下会升级为重量级锁?

✅ 答案:轻量级锁竞争激烈的状态下会升级重量级,竞争激烈一般指的是通过CAS在轻量级锁竞争过程中没有抢占到锁资源,此时锁状态会升级为重量级锁

# ❓无锁状态下如果在synchronized中调用对象hashCode会升级为重量级锁吗?

✅ 答案:是的,当对象进入重量级锁的时候,hashcode就会转移到monitor中,在monitor中有字段可以记录markword,所以hashcode自然也是在这里面

# HashMap

# ❓ConcurrentHashMap协助扩容最大线程数支持是多少?

✅ 答案:65535

源码:

private static int RESIZE_STAMP_BITS = 16;
/**
 * The maximum number of threads that can help resize.
 * Must fit in 32 - RESIZE_STAMP_BITS bits.
 * 可以帮助调整大小的最大线程数。必须在32 - RESIZE_STAMP_BITS位
 */
private static final int MAX_RESIZERS = (1 << (32 - RESIZE_STAMP_BITS)) - 1;

ps:(1<<(32-16))-1 = 65535
1
2
3
4
5
6
7
8
9

# ❓ConcurrentHashMap扩容为何是的两倍?

✅答案:为了提升散列算法(&与运算)的计算效率;减少hash碰撞;减少扩容时元素的位置移动

# Redis

# ❓Redis过期key删除策略有哪些?

✅答案:

  • 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key
  • 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key
  • 当前已用内存超过maxmemory限定时,触发主动清理策略

# Spring

❓描述下BeanFactory?

❓BeanFactory和ApplicationContext的区别?

202207221414128

❓简述SpringIoC的加载过程?

❓简述Bean的生命周期?

❓Spring中有哪些扩展接口及调用时机?

上次更新: 2025/01/13, 10:51:06
Mybatis一级缓存问题

Mybatis一级缓存问题→

最近更新
01
AI是如何学习的
06-03
02
提示词工程实践指南
06-03
03
chatGpt提示原则
06-03
更多文章>
| Copyright © 2022-2025 Kevin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式