上一篇面试连环炮整体讲述了面试官会问的java基础和高级相关的知识点以及一些数据库和缓存相关的理论和实践,包括消息队列。发到各个技术群里引起了广泛的讨论,也支持我去继续写剩下的两篇文章。本篇将从项目实战的角度去看面试官会从哪些方面去考察应聘者的知识深度和广度。
项目部署用的是什么容器启动的?说一下tomcat的架构模型?说一下Tomcat的线程模型?底层原理是什么?跟Netty的线程模型相比有什么区别?做过Tomcat的调优吗?你们服务部署的时候Tomcat的线程数怎么设置的?依据是什么?假如要做分布式的session管理的话怎么配置tomcat的参数?tomcat的分布式session实现方案有什么缺点?你了解其他分布式session的方案吗?
Netty了解吗?用在什么地方?说一下Netty的线程模型?说一下Netty NIO 相对于jdk NIO有什么优势?解决了JDK NIO的什么问题呢?Netty是如何解决粘包和拆包的问题的??什么是零拷贝技术?Netty中的零拷贝技术怎么实现的?Netty是如何管理堆外内存的?遇到过netty堆外内存泄漏的问题吗?怎么排查并解决的?
说一下Linux中的IO模型有哪些?IO 多路复用是怎么实现的?画一下Linux底层中关于零拷贝技术的流程图?
什么是单点登录系统?画一下你维护的这个单点登录的系统架构图?讲讲登录流程,如何设置cookie和获取Token的?这个是分布式的吗?支持跨域吗?不支持的话需要怎么解决呢?了解过市面上标准的CAS单点登录方案吗?
es有用过吗?说一下es的索引原理?说一下es的查询数据的过程?假如es数据量越来越多,有些分页查询的场景越来越慢怎么解决?mysql到es的数据同步怎么做的?通过binlog的方式有什么优缺点?还有别的方式吗?
zk用过吗?说一下你用zk的一些场景?了解zk的原理吗?zk有哪些节点类型?zk的分布式锁怎么实现的?假如要实现公平锁怎么做?假如master挂了,此时需要选举,说一下zk的选举过程,涉及到哪些角色的转换?选举为master的依赖条件是什么?说一下zk新加节点和减少节点的过程?是否会影响zk服务的可用性?zk在CAP模型中满足了哪两个特性?为什么?
分布式配置服务用过哪些?怎么用的?灰度发布的同时去发布配置是否有问题?客户端如何感知配置服务发生变化的?配置数据是怎么存的?说说diamond的架构设计?说说diamond的多级缓存机制?diamond是如何保证客户端获取数据的一致性的?假如我配置要发布到多个物理单元中diamond的数据库设计怎么是怎么弄?数据同步是怎么做的?说说你为什么不用eruake或者consule去做服务发现和配置管理呢?nacos有什么优势?nacos源码看过吗?有没有学到些什么?
mongodb用过吗?特点是什么?跟MySQL比有什么特点?适用场景是什么?
项目中有用到Mybatis吗?说一下Mybatis的启动过程?说一下Mybatis是怎么集成spring的?说一下Mybatis集成spring的时候提供了哪些基于spring的功能?说一下Mybatis中你比较熟悉的几个类?这些类的源码看过吗?Mybatis源码中有没有哪些源码的实现令你印象深刻?假如我项目中通过service层调用了mybatis的方法,这个调用过程了解吗?Mybatis的动态sql用过吗?怎么用的?Mybatis的分页插件用过吗?实现原理是什么?
spring DI & IOC :项目中用到spring框架了吗?说说你对依赖注入和控制反转的理解?spring中的依赖注入有哪些方式?哪种方式能避免循环依赖?为什么?如果出现循环依赖了你怎么解决?
spring AOP:spring aop有用过吗?spring aop有哪些核心内容?你使用aop实现了什么功能呢?aop的原理知道吗?假如我要使用aop去实现统计方法的执行时间的功能?你用哪种通知方式?说一下执行时间的计算过程?有什么问题?说一下spring aop中拦截器的原理?spring中的代理机制是怎么实现的?有哪些代理方式?说一下JDK动态代理和Cglib动态代理的区别?Cglib只能对类进行代理吗?final修饰的类能代理吗?
spring Bean:说一下spring bean的注入过程?说一下spring的启动过程?spring bean销毁的时候会做哪些操作,调用哪些方法?说一下我配置的bean在spring中是怎么存的?说一下bean的作用域有哪些?分别有哪些使用场景?
spring 源码&设计模式:spring源码阅读过吗?说一下spring有哪些核心模块?说一下spring mvc的整个处理流程?spring的controller类是线程安全的吗?如何保证线程安全呢?说一下spring的事务传播属性有哪些?说一下spring中有哪些设计模式?这么做的好处是什么?说一下spring的启动过程中事件监听是怎么做的?
springboot有用过吗?说一下springboot的启动流程?做过自定义的springboot starter吗?什么是自动装配?原理是啥?什么是SPI?跟java中的SPI有什么区别?项目中大量使用SPI有什么缺点?springboot项目有哪些运行方式?springboot跟mybatis集成使用需要配置什么?
spring eruake:eruake的服务发现是怎么做的?eruake的源码读过吗?如果服务提供方下线了客户端如何感知?eruake在CAP模型中满足了哪两个特性?跟zk比有什么区别?跟nacos相比呢?
spring hystrix:hystrix用过吗?说一下hystrix的断路器的原理?sentinel跟hystrix有什么区别?
分布式CAP理论了解吗?说一下CAP分别代表什么意思?zk满足了哪两项?为什么?redis呢?
有哪些组件或者中间件满足AP/CP?
分布式锁有哪几种实现方案?Mysql的悲观锁怎么实现的?乐观锁和悲观锁的区别?zk实现的分布式锁有什么缺点?假如使用redis实现分布式锁的话怎么解决超时问题?有哪些方案?Redisson用过吗?
分布式事务有用过吗?如何保证事务数据一致性的?有哪些方案?假如事务过程中出现了不一致的情况怎么处理?假如我有一个履约场景,发送发货通知,然后调用库存服务扣减库存,然后写订单数据到自己的业务db中,现在有个问题就是第二步失败了,第一步成功了,请问怎么解决?
项目中用到RPC框架了吗?什么框架?dubbo用过吗?画一下dubbo的架构流程?dubbo中注册中心如何感知服务下线的?dubbo注册中心挂了会影响服务间的调用吗?为什么?RPC的原理是什么?画一下RPC服务调用的过程?RPC的序列化协议有哪些?你用过的这些RPC框架有哪些令你感到不爽的地方呢?假如要实现一个RPC框架你如何支持异步调用的特性?RPC框架中的工作线程和Netty线程中怎么去分工的?
分布式系统有过实践经验吗?你如何理解分布式和集群的?你认为什么是微服务?说说你最熟悉的项目是怎么用微服务的方式搭建起来的?画一下这个项目的业务架构图?说一下项目里面有哪些核心业务模型?画一下这些业务模型之间的关系?有哪些业务流程?DDD了解吗?这些系统的边界在哪?有哪些上下文?实体和值模型的区别是什么?
项目中分布式定时任务怎么用的?如何确保只有一台机器去执行?假如任务执行时间较长,超过了锁的时间怎么解决?
有个场景:有4个运动员,需要同时开始跑并跑到终点,另外有2个裁判分别在起点和终点,在起点的裁判负责发起开始跑的指令,在终点的裁判负责记录每位运动员到终点的时间,然后需要计算4位运动员的耗时排名。有以下三个问题:
1.如何设计这个业务场景的业务模型?
2.java 多线程中如何去模拟并计算这4个运动员的耗时,并得出排名?
3.假如在分布式的情况下如何计算这4个运动员的耗时,并得出排名?
扩展:
1.分布式调度了解吗?假如我有一批任务要执行,我现在有很多集群,每个集群的机器数量和状态都不一样?你该怎么去调度这些机器去尽快完成这些任务?
2.在上述任务调度过程中假如有任务执行耗时比较长,请问有哪些排查思路?