202105面试总结-2

这篇博客总结了五月份的面试经历,涉及到Spring Bean的线程安全性、MyBatis缓存、Zookeeper配置、Redis操作、MySQL索引优化、JVM内存模型、Spring Cloud熔断以及Kafka原理等核心知识点。还探讨了微服务的优缺点、单机服务改分布式面临的问题以及Spring Boot的自动配置机制。面试过程中还讨论了如何避免Redis分布式锁的抢占风险和优化SQL查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试总结

五月份找工作的面试总结,有些题目想不起来或者记错的,仅供参考。
答案自行网上找或者咨询大神,个别面试官当面点出的答案已写上了,可以参考回答。
PS:如直接暴露公司名有侵犯的话,请联系删除


中燃科技

面试前有个笔试题,基础题。

  • spring的bean是线程安全的吗?

    答:不全是。
    读操作时默认是无状态的,也就是不涉及写,理论上是线程安全的;
    写操作的话,如果是公共变量则可将该变量托付给ThreadLocal来管理其线程;

  • mybatis的缓存,一级与二级区别?

  • spring bean的生命周期?

  • spring事务实现原理,以及事务传播机制?默认的传播级别?

    答:
    默认传播级别是PROPAGATION_REQUIRED ,上下文有事务就加入,否则自己创建新的事务执行。

  • zookeeper能干啥?怎么配置?

  • 说一下redis,Linux常用命令

  • MySQL索引,最左原则

  • 慢查询sql优化


金证股份

初面,线上面试

  • HashMap结构?为什么是线程不安全的?有造成过OOM吗?

    答:
    结构:jdk7之前是数组+链表;jdk8及之后增加了红黑树;
    线程不安全的原因:
    1、底层resize方法可能造成死循环。HashMap初始容量大小为16,当有数据要插入时,都会检查容量有没有超过设定的阈值,如果超过,需要增大Hash表的大小,整个Hash表里的元素都需要被 重算一遍。
    2、迭代器的过程中有可能其他线程修改了map的值。

  • 数组与链表的区别?

  • 项目中有多线程?说一下线程池的类型?

    答:
    1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
    2、newFixedThreadPool:创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
    3、newSingleThreadExecutor:创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。
    4、newScheduleThreadPool:创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。
    5、newSingleThreadScheduledExecutor:创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行并且可定时或者延迟执行线程活动。

  • springAOP用了什么设计模式?

  • 动态代理有哪些?工作中有用到吗?

  • mybatis的#{}跟${}的区别

    答:
    1、#{xxx} 解析为一个 JDBC 预编译语句的参数标记符,一个 #{xxx} 被解析为一个参数占位符;而${xxx}仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
    2、#{xxx} 解析之后会将String类型的数据自动加上引号,其他数据类型不会;而${xxx} 解析之后是什么就是什么,他不会当做字符串处理。
    3、#{xxx} 很大程度上可以防止SQL注入(SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作);而${xxx} 主要用于SQL拼接的时候,有很大的SQL注入隐患。
    4、在某些特殊场合下只能用${xxx},不能用#{xxx}。例如:在使用排序时ORDER BY ${id},如果使用#{id},则会被解析成ORDER BY “id”,这显然是一种错误的写法。

  • 说一下jvm内存模型

  • 说一下springcloud的熔断

  • 说一下springMVC的工作流程

  • redis的set和setnx有什么区别?怎么加key的有效时间

  • redis有加缓存击穿、缓存雪崩的操作吗?怎么实现的


加推科技

主要问微服务相关的问题多些。

  • 说一下你做的项目?有什么收获?

  • 微服务是什么?为我们解决了什么问题?为什么要用微服务?

  • 单机服务改成分布式需要考虑的问题有哪些?

  • 单机服务改为微服务后,有A、B、C三块,现在不想分太细粒度,现若是需把C加到A或B服务,要考虑哪些问题来选择其一?

    答:
    首先从业务的角度考虑就是,请求量的问题,看A跟B那个跟C的交互多一些;
    然后从技术层面考虑的话是,看A与C、B与C哪两个数据库的表重合度比较高,整合后是否能较少的跨服务请求。

  • springcloud中,一个请求完成的过程是怎样的?各个组件分别做了什么?

  • 说一下Eureka的结构?Eureka什么时候会有服务交互?

  • Eureka的自我保护机制?怎么判断是否网络波动?

  • A在X服务通过feign去调用B开发的Y服务的某个接口,怎么做定制化熔断?

    答:
    实现FeignClient的接口类做整体的熔断即可

  • kafka相关的问题:
    1、说一下kafka结构以及原理
    2、Partition是干嘛的?有什么作用?
    3、Broker和Partition的区别?
    4、Broker分区有Leader跟多个Follower,生产者怎么发送消息的,发给谁是怎么判断的?
    5、怎么保证消息发送/消费成功?
    6、如果消费真消费完一条消息,没有手动提交会怎样?还能继续消费吗?
    7、怎么防止消息重复消费
    8、为什么kafka查询快

    Kafka的答案这里附上知乎某大神的一篇文章,你细品!
    https://zhuanlan.zhihu.com/p/68052232

  • 说一下原始mq的实现原理

  • mq的有哪些应用

    答:
    1、就是我们系统中常用的发布订阅功能,处理不能及时反馈的请求;
    2、大并发的订单请求时,可将其存到消息队列,等高峰期过了再挨个处理。

  • redis三种分布式锁

    (当时只答出了setnx实现互斥锁,然后就有了下面那个问题)

  • setnx也会有锁抢占的风险,怎么解决?

  • 怎么定位慢查询?说一下慢查询定位原理?

    (当时答了MybatisPlus的内置的慢查询插件,然后被问其慢查询原理时一脸懵逼。。。)

  • 优化sql时怎么判断是否有命中索引?

  • mysql的explain数据中哪些索引类型

  • mysql最左索引原则?为什么要叫最左原则

  • 簇聚索引与非簇聚索引区别?

  • springboot的约定大于配置是怎么实现的?

    答:
    这里应该是源码中@ConfigurationProperties注解的作用
    (当时面试官没否定,应该没错)

  • 说一下springboot自动配置做了哪些工作?

  • 你认为你的优势是什么?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值