Java后端面试分享

JAVA后端:分享一下最近找工作时碰到的面试题

基础面试

最近也面试了一些公司,从小的创业公司到大的BAT企业都有涉及。分享一下记录的一些面试问题吧,没有很系统的整理,凭印象记录了一些:

  1. jvm相关问题。这是一个绕不开的话题,包括JVM的内存模型,GC相关的知识,实际生产环境中遇到的问题怎么分析和调优。
  2. Springboot自动装配流程以及启动流程,推荐两篇博客吧
    https://blog.csdn.net/mergades/article/details/103996241
    https://www.freesion.com/article/37131200522/
  3. Springboot组件自动装配原理
    @springbootapplication的实现自动装配,复合注解,主要包含三个注解: @enableautoconfiguration,@springbootconfiguration,@componetScan .
    Springbootconfiguration 底层还是configuration用于容器装配的注解
    Componetscan 扫描启动类下的路径中的注解@controller/service 等加入ioc容器
    enableautoconfiguration主要包含两个注解autoconfigurationpackage , import .
    Impot(autoconfigurationSelector) - > mate-inf 下面的spring-factories文件中找到需要装配的类
  4. 怎样自定义一个starter. (弄清楚第二点和第三点就知道是怎么回事了)
  5. Spring 相关设计模式(还有很多,不一一列举了)
    工厂模式(beanfactory)
    单例模式(bean默认单例,sigletonObjects)
    代理模式(AOP,动态代理)
    适配器模式(Spring Aop 时BeforeAdvice、AfterAdvice、ThrowsAdvice )
  6. Spring bean生命周期,三级缓存目的和原理
    注释:spring相关的问题还有很多,例如AOP相关等等。
  7. Mybatis工作原理(个人理解,如有问题,望交流指正)
    a.Configuration初始化时会加载相关的配置文件,包括数据库配置和SQL相 关的XML配置。sql会被解析成一个个mapperstatement存放起来。Mapper接口在解析的时候会生成对应的动态代理的工厂实例。
    b.Sqlsessionfactory 会生成sqlsession.
    c.常用的基于接口的使用时,Sqlsession.getmapper 获取到动态代理(由动态代理工厂生成)
    d.动态代理多想对象执行相应的DML操作,本质上还是传递给sqlsession执行,sqlsession 调用excuter去执行,获取方法对应的mapperstatement并执行。
    根据反射,将结果映射成需要的对象。
  8. Eureka工作原理
    服务注册(同步注册表信息),服务续约(心跳检测)
    自我保护机制,避免由于网络波动导致的异常心跳,导致服务大面积下线,Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。
    Eureka Server 进入自我保护机制,会出现以下几种情况:
    (1 Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
    (2 Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
    (3 当网络稳定时,当前实例新的注册信息会被同步到其它节点中
    Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。当个别客户端出现心跳失联时,则认为是客户端的问题,剔除掉客户端;当 Eureka 捕获到大量的心跳失败时,则认为可能是网络问题,进入自我保护机制;当客户端心跳恢复时,Eureka 会自动退出自我保护机制。
    Eurka 工作流程
    了解完 Eureka 核心概念,自我保护机制,以及集群内的工作原理后,我们来整体梳理一下 Eureka 的工作流程:
    1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息。
    2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务。
    3、Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常。
    4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例。
    5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端。
    6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式。
    7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地。
    8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存。
    9、Eureka Client 获取到目标服务器信息,发起服务调用。
    10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除。
    这就是Eurka基本工作流程
  9. Kafka为什么会有那么大的吞吐量?
  10. Mysql相关
    索引分类,数据结构,优化方案,分表分库(垂直分割,水平分割)
  11. zuul底层原理
  12. 熔断机制
  13. ES的读写流程和跨索引查询
    https://blog.csdn.net/ifenggege/article/details/107947273
  14. ES性能优化
  15. NIO
  16. Mongdb
  17. kafka消息顺序和重复消费的情况
  18. Bitmap数据结构
  19. Hashtable 和hashmap
  20. Spring事务
    A.事务原理
    数据库对事务的支持
    B.什么情况下进行事务回滚
    当拦截的方法有指定异常抛出时,事务会自动回滚
    C.什么时候事务失效
    自我调用,不是public方法(本质是aop动态代理实现的,非代理对象调用时并不能开启事务)
    错误异常,并没有匹配相关的异常,自然无法回滚
    数据库本身并不支持事务
    D.spring事务和数据库事务隔离的区别
    相同,当两者设置不同的隔离级别时,以Spring为主,如果spring设置的隔离级别数据库不支持,则以数据库为主
    E.Service方法中调用另一个方法,默认开启几个事务
    一个,事务有传播性,默认propagation_required
    F.怎么保证spring事务内的连接唯一性
    因为connection在事务开启时被封装在了ThreadLocal中。
  21. zookeeper相关问题
    https://blog.csdn.net/weixin_43122090/article/details/103645642
  22. Mpp架构原理
    https://blog.csdn.net/linnyn/article/details/80052960
  23. Oracle相关优化
  24. ActiveMq和rabbitmq,kafka 区别,怎么选型

补充说明

  1. 大家都吐槽现在的程序员招聘都是面试造火箭,入职拧螺丝。但是行情如此,打不过就加入,找工作之前还是有必要好好准备一下的。上面列举的是记忆中记得的一些问题,在二面三面四面中可能还会有一些场景模拟,方案选型相关的问题。以及你对当前一些技术以及趋势的看法,平时关注技术社区,论坛,github等等,以及自己平时的学习习惯和方法等等。
  2. 算法相关。算法是基本上都会问到的,如果你想去大厂,那必须得好好准备了,多刷刷leetcode吧

菜鸟一枚,先分享这么多吧,有什么不足的地方希望大家多指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值