去年Java面试时,你被深刻挖过什么问题?

这篇博客详述了一位开发者在Java面试中遇到的深入问题,涵盖基础、JVM、多线程并发、Spring、MyBatis、Spring Boot、MySQL、Redis、Spring Cloud、Nginx、MQ、数据结构与算法、Linux和简历准备等多个方面。内容强调了Java代码背后的数学逻辑和数据结构,以及面试中如何应对连环追问,特别提到了线程安全的单例模式和并发编程的三要素。博客还分享了美团面试的真实案例,探讨了单例模式、volatile关键字、指令重排、序列化协议和中间件在实际项目中的应用。
摘要由CSDN通过智能技术生成

哈,你竟然敢问面试的坑挖多深,仅 Java 基础来说:

  • HashCode为什么用31作为乘数,你证明过吗?
  • 扰动函数的函数作用是什么,它还有什么场景在用?
  • 拉链寻址和开放寻址具体是什么表现,怎么解决的碰撞问题?
  • ThreadLocal 的实现中还有黄金分割点的使用,你知道吗?
  • CLH、MCS,都是怎么实现的公平锁,代码是什么样?
  • jvmti 可以用于非入侵的监控线程池状态,你用过吗?

关于以上的问题,是不有种即使看过 Java 核心 API 的源码,也很难回答出来?
这是因为 Java 代码本身就是基于数据结构和算法对数学逻辑的具体实现,而那些隐含在代码中的数学知识如果你不会,那么压根你就会忽略掉它,也就因此看不懂源码了。如果你感兴趣这也的技术广度和深度,也可以和我一起折腾,来吧!


传送门

https://github.com/fuzhengwei/CodeGuide​github.com/fuzhengwei/CodeGuide​github.com/fuzhengwei/CodeGuide

接下来分享个小伙伴面美团一面,求职方向是团队技术负责人。此次面试以连环追问的方式为主,喜欢刨根问底,非常考研面试者的技术功底。以下是整理出的部分面试题,我们看看这些题该如何回答。
美团现场面试

  1. 先让写个线程安全的单例模式

public class Singleton { private static volatile Singleton instance; private Singleton() { } public static Singleton getInstance(){ if(null != instance) return instance; synchronized (Singleton.class){ if (null == instance){ instance = new Singleton(); } } return instance; } }

  • 考察线程安全的单例模式,一方面是对基础的了解,另一方面以单例模式作为入口考察并发编程的知识点。
  • 在这里你要知道,并发编程的三要素包括:原子性、可见性、有序性。
  • 那具备三要素知识点的单例模式,主要是如上案例中的双重检查锁和CAS忙等策略。而双重检查锁的单例方式,对于面试官和求职者来说,可以往下继续聊的点就有了。
  • 当然,如果你没有写出这样一种单例模式,大概率会被面试官引导过来。在面试的过程中最好的方式是主动和引导面试官走,也称对脾气,也就是技术臭味相投的感觉。
  1. 高并发下,单例模式会存在哪些问题?
  • 单例模式就是以防止线程不安全和提高代码执行效率而设计的。
  • 双重锁定检查(DCL,Double Check Lock),也就是为此设计的。别被 DCL 唬住喽
  1. 可见性和指令重排是怎么回事?
  • 可见性,Java 编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。
  • 指令重排,在程序执行过程中为了性能考虑,,编译器和 CPU 可能会对指令重新排序。对于并发多线程场景下,指令重排会产生不确定的执行效果。
  1. voliate 关键字为什么可以解决可见性和指令重排?

可见性

  • 首选,volatile 关键字修饰的共享变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值