转载联想面经

JVM:

1. JVM的内存划分

2. 什么情况下会导致JVM栈溢出

3. 垃圾回收的常见算法

4. 什么样的对象会直接进入老年代

Java基础:

5. StringBuffer和StringBuilder区别

6. 有没有看StringBuilder的源码,多线程时StringBuilder为什么不安全,可不可以举个例子

7. StringBuffer怎么上锁的

StringBuffer 是线程安全的,其内部的方法都是使用 synchronized 关键字进行同步的,以保证多个线程同时访问 StringBuffer 对象时的线程安全性。
当一个线程获取了 StringBuffer 对象的锁之后,其他线程将被阻塞等待锁的释放,直到获取到锁才能访问该对象。这样就能保证在多线程环境下,对 StringBuffer 对象的操作是同步的,不会出现数据竞争和数据不一致的情况。

8. 自己项目中有没有用到这个上锁的方法

9. synchronized的锁状态,可以降级吗

10. 了解volatile关键字吗

11. 可重用锁的实现原理

重用锁:一个线程,如果抢占了互斥锁资源,而在锁释放之前,再去竞争同一把锁的时候,不需要等待只需要记录重入次数就可以了。
可重用锁(ReentrantLock)是一种可重入锁,可以被同一个线程多次获取锁,而不会导致死锁。它的实现原理主要依赖于以下几个方面:

CAS(Compare and Swap)操作:可重用锁的实现依赖于原子操作,也就是 CAS 操作。CAS 操作是一种无阻塞的原子操作,它通过比较内存地址中的值和预期值是否相等,来决定是否更新内存地址中的值。如果内存地址中的值和预期值相等,则将新值写入内存地址中,否则不做任何操作。

线程等待队列:可重用锁会为每个等待线程创建一个节点,将节点加入到等待队列中。当一个线程尝试获取锁时,如果锁已被其他线程占用,则将该线程的节点加入到等待队列中,并将该线程挂起。当锁被释放时,将从等待队列中唤醒一个线程继续执行。

锁的状态:可重用锁维护了一个状态变量,表示锁的状态。当一个线程获取锁时,如果锁未被占用,则将锁的状态设置为已占用,并将持有锁的线程设置为当前线程。如果锁已被占用,则判断持有锁的线程是否为当前线程,如果是,则将锁的状态加 1,并返回 true;否则将线程加入到等待队列中,并将该线程挂起。

重入计数器:可重用锁维护了一个重入计数器,用于记录当前线程获取锁的次数。当一个线程获取锁时,如果锁已被该线程占用,则将重入计数器加 1,并返回 true;否则将锁的状态设置为已占用,并将持有锁的线程设置为当前线程,并将重入计数器设置为 1。

综上所述,可重用锁的实现原理主要依赖于 CAS 操作、线程等待队列、锁的状态和重入计数器等机制,通过这些机制可以实现可重入锁,并且可以避免死锁的问题。

https://www.zhihu.com/zvideo/1526976773321891840

12. AQS中线程之间同步的方法

13. 线程池的七大参数

数据库

14. 索引失效的几种情况

15. MySQL的redolog

16. MySQL的两阶段提交

17. 有没有遇到过数据库死锁,举个例子

https://juejin.cn/post/7072000882128191518

项目相关:

一些项目的问题。。。

其他:

18. 用过feignclind吗

19. 微服务中的服务与服务的互相调用是怎么实现的

20. 了解过RabbitMQ吗,用过吗

21. 查看文件最后几百行的Linux命令

22. 查看JVM内存的命令

23. 口述跳台阶的思路

24. 实际用过哪些设计模式

25. spring bean的生命周期

转载:

作者:静默虚空
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

posted @   Chenyi_li  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
历史上的今天:
2022-05-03 FastJson基本用法
2020-05-03 跳台阶
点击右上角即可分享
微信分享提示