1 技术终面考察面试人哪些能力
2 一般可能会问到的内容
2.1 读的哪些书,redis,那么redis的最新版本是什么,有什么新特性
2.2 如果有提到AI,会问AI原理,比如chatGpt的transformer模型
2.3 可能会问实习期间的团队结构,水位,自己负责的任务,有无解决线上问题,有无直接解决pm提出的需求,有无jvm调优经历,机器中配置的各项jvm参数
2.4 兴趣爱好
2.5 base地
2.6 一些结合业务的场景题
3 考察你是否关注最前沿的技术
3.1 读的哪些书,redis,那么redis的最新版本是什么,有什么新特性
redis的最新版本是6.x;
特性:利用多核cpu,IO多路复用上开始支持多线程操作
3.2 详细讲讲 jdk动态代理随版本迭代做了什么优化?
3.2.1 jdk10&11更好地支持了AOT(Ahead-of-Time Compilation),这可以为动态代理带来性能优化,因为代理类的生成和调用可以受益于AOT编译。讲一下
当我们讨论Java的性能时,JIT(Just-In-Time)编译是一个核心概念。JIT编译器在运行时将字节码动态地转换为本地机器代码,从而实现了性能的提升。然而,这种动态编译需要时间,尤其是在应用程序启动时,这可能会导致延迟。
为了解决这个问题,Java引入了AOT(Ahead-of-Time)编译。与JIT编译相反,AOT编译是在应用程序运行之前进行的,这意味着编译好的本地代码在应用程序启动时就已经可用,从而减少了启动时间。
AOT编译如何帮助动态代理:
-
更快的启动时间:
动态代理涉及到在运行时生成新的类。如果这些类的生成和调用可以在启动之前就完成编译,那么应用程序启动和执行的速度就会更快。 -
预测性能提升:
AOT编译允许编译器在没有运行时信息的情况下作出优化决策。对于某些用例,这可能导致更好的性能。 -
更低的运行时开销:
因为一部分工作已经在启动前完成,所以在运行时,JVM需要做的工作可能会减少,这可能导致更低的CPU和内存开销。
然而,也有一些需要注意的地方:
-
AOT编译的代码可能不如JIT编译的代码那么优化,因为JIT编译器在运行时有更多的信息来做决策。
-
AOT编译可能会增加应用程序的磁盘和内存占用,因为它需要存储编译后的本地代码。
-
如果动态代理生成了大量的新类,那么AOT编译可能不会带来太大的好处,因为这些新类仍然需要在运行时被JIT编译。
总的来说,AOT编译为Java提供了一种新的性能优化机制,但其效果可能因应用程序的具体情况而异。对于动态代理,AOT编译可能会提供一定的好处,尤其是在启动时间和预测性能方面。
3.2.2 如果动态代理生成了大量的新类,那么AOT编译可能不会带来太大的好处,因为这些新类仍然需要在运行时被JIT编译。什么意思?
我理解你对上述句子有些疑惑,让我进一步解释。
Java的动态代理机制允许在运行时生成新的类,这些类通常是为了代理(或称为"封装")其他已存在的类。这意味着这些代理类在应用程序启动时并不已知,因为它们是根据运行时的情境和需求动态生成的。
现在,让我们考虑AOT编译:Ahead-of-Time(AOT)编译是在应用程序启动之前发生的,这意味着编译器只能预先编译那些在编译时已知的类。动态代理生成的类,由于其在运行时生成,自然不在这个"已知"列表中。
因此,即使你使用了AOT编译优化你的应用程序,那些在运行时动态生成的代理类仍然需要由JIT编译器处理。这就意味着你并不能从AOT编译中获得所有的好处,因为仍有一部分工作需要在运行时完成。
简而言之,句子的意思是:如果你的应用程序大量依赖于动态生成的代理类,那么你可能不会从AOT编译中获得太大的性能提升,因为很多类仍然需要在运行时由JIT编译。