java后端技术终面可能遇到的问题

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编译如何帮助动态代理:

  1. 更快的启动时间
    动态代理涉及到在运行时生成新的类。如果这些类的生成和调用可以在启动之前就完成编译,那么应用程序启动和执行的速度就会更快。

  2. 预测性能提升
    AOT编译允许编译器在没有运行时信息的情况下作出优化决策。对于某些用例,这可能导致更好的性能。

  3. 更低的运行时开销
    因为一部分工作已经在启动前完成,所以在运行时,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编译。

3.3 数据行式存储的数据库,有没有了解列式存储数据库,比如clickhouse

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值