一面:
项目相关:
-
租户隔离使用的是那种实现方式 ?
-
新建的租户如何初始化数据库脚本?
-
项目中有提到redis缓存,具体是怎么实现的?经常变更的缓存,是如何保证缓存数据和数据库的一直性?
-
缓存雪崩、缓存击穿除了使用锁机制,还有其他的策略吗?一级二级缓存?
-
接口限流使用的是那种算法?
-
项目中使用过哪些设计模式?
-
k8s部署的时候怎么去部署各种各样的业务?做了哪些方便的措施?
-
项目中是否有发现过一些慢接口,平常是怎么进行优化的?
-
一般是怎么查询sql的执行计划?
-
接口平常都是怎么设计的,有没有设计一些规范?
-
项目中是否有用过线程池?平常是怎么用的?
-
项目中是否有用到过锁,平时是怎么用的?发生死锁的话如何解决?代码如何避免死锁?
-
是否有处理过jvm内存溢出的问题?怎么解决的?
-
项目中平常使用的垃圾回收器?
- Serial收集器(串行)
-
Parallel 收集器(并行)
- Concurrent Mark Sweep(CMS)垃圾收集器
- G1 垃圾收集器
-
项目中配置的内存是多大?是否有调整过?主要配置了哪些值?新生代、老年的比例、大小?
-
Spring Cloud都使用过哪些组件?
技术深度:
-
介绍下mybatis的原理,大体流程是什么?
-
TiDB和mysql有哪些区别?除了多集群的支持还有其他的区别吗?
-
线上的sql如果已经加了索引,需要怎么去排查和优化?优化完了之后还是慢怎么办?
-
了解过jdk自带的四种线程池吗?都有什么优缺点?
-
创建线程的时候有哪些参数,是否有了解过?
-
一个任务放到线程池中会有一个流转的过程,具体是怎么流转的?核心线程数、最大线程数、队列三者的关系是什么?
-
使用过jdk的并发包里面的哪些类?
-
synchronize的底层原理是否有了解过?
-
了解过哪些垃圾回收算法?
-
线上的接口如果经常进行垃圾回收,触发stop world导致接口响应变慢,这个需要怎么排查和优化?
-
是否有用过一些命令去看过垃圾回收的频率等?举例几个具体命令?
-
简述下Spring bean的生命周期?实例化到销毁的过程?实例化之后会执行一些扩展的方法,有哪些?
-
eureka的工作原理有了解过吗?是cap模式中的哪一种?
CAP理论:一个分布式系统不可能同时满足C (一致性),A(可用性),P(分区容错性).由于分区容错性P在分布式系统中是必须要保证的,因此我们只能从A和C中进行权衡.
Eureka 遵守 AP
Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。
而Eureka的客户端在向某个Eureka 注册或查询是如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查的信息可能不最新的不保证强一致性)。
二面
- 目前项目中的k8s集群使用的服务发现用的什么技术,是怎么使用的?如何做服务发现的技术选项,为什么不使用nacos?
- TiDB使用过程中是否有遇到过什么问题?为什么不使用mysql?原因是什么?
- 如果需要做租户隔离的话,你会怎么做?
- 多租户模式下数据查询使用拦截器注入租户相关的sql,那么如果拦截器出现了问题,改怎么办?是否有相应的解决策略?
- 如何监控线程池?
- 如何感应线上的热点数据?
- 100万或者更多的数据进行导出,需要怎么处理?接口相应超时怎么处理?
- 大批量数据的导入导出接口应该怎么去做技术评审,会需要提前考虑那些问题?
- 大数据量的表如果进行查询优化?几千万的用户体量,登录同时支持用户名和手机号,如何进行数据库设计,保证不进行全量扫描?分库分表策略如何实现?用户名如果支持修改的话,怎么办?
- 简要介绍下Rabbit MQ的Exchange交换机?为什么不使用kafka,有什么原因?
- 2个k8s集群,各自部署了多个服务,如果部署在不同的机房,存在网络隔离。例如A集群部署pod1和pod2,B集群也部署了相同的pod1和pod2,pod1接口请求后会调用pod2,那么如何保证A集群的pod1接口到的请求默认去访问A集群的pod2,并在A集群的pod2挂了之后,可以自动的去访问B集群的pod2?