大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
第一轮基础问答
面试官:请解释Dubbo服务注册发现的完整流程,以及Sentinel如何实现流量控制?
xbhog:Dubbo通过Registry协议将服务地址注册到ZooKeeper,消费者订阅服务节点变更。Sentinel通过ResourceRegistry
注册资源,在入口方法通过Entry.entry()
获取令牌桶状态,流量超过阈值时抛出FlowException实现限流...
面试官:WebSocket握手阶段的HTTP请求如何处理?请写出Spring的WebSocket配置关键类
xbhog:通过@ServerEndpoint("/ws/socket")
注解开启端点,Servlet容器(如Tomcat)在连接请求的Upgrade头中检测到WebSocket协议时切换处理模式。核心配置需继承AbstractWebSocketMessageHandler
并覆盖handleBinaryMessage方法...
第二轮架构设计
面试官:在自研API网关中如何实现与Nginx的协议解析兼容?
xbhog:通过Spring Cloud Gateway的NettyRoutingFilter
解析HTTP协议包,关键代码:
GatewayFILTER FACTORY = new NettyProtocolDecoderGatewayFilterFactory();
需实现ByteBuf到HTTP请求参数的转换逻辑...
第三轮进阶提问
面试官:C3P0连接池如何实现闲置连接定时检查?请写出配置核心参数
xbhog:通过配置idleConnectionTestPeriod
和preferredTestQuery
来周期性执行测试SQL。典型配置:
c3p0.idleConnectionTestPeriod=300
c3p0.preferredTestQuery=SELECT 1 FROM DUAL
c3p0.testConnectionOnCheckout=true
会在每次获取连接时先执行测试查询...
面试官结束语:非常感谢你的专业解答,我们将通过电话发送面试结果。(面试官起身微笑表示对话结束)
知识点详解
- Dubbo服务注册 - Zk节点路径
/dubbo/com.example.service/providers
- WebSocket消息格式 - 采用自定义二进制帧结构:
[opcode][message length][payload data]
- C3P0失效备选方案 - 当数据库宕机时启用备用连接池的
acquireRetryAttempts
机制