好的,我重新以面试官身份,针对你简历中的实际项目经验提问,并提供简洁、符合实习生水平的回答。


IM即时通讯系统项目

1. 你在IM项目中担任组长,具体负责哪些工作?

回答: 我主要负责后端架构设计和核心功能开发。具体包括:设计数据库表结构(用户表、好友关系表、消息表、群组表),搭建Spring Boot项目框架,实现用户注册登录、JWT认证、好友管理、WebSocket实时通信等模块。同时协调前后端开发进度,组织代码评审,解决技术难点。


2. JWT Token是如何实现用户认证的?

回答: 用户登录成功后,后端生成JWT Token返回给前端。Token包含用户ID、过期时间等信息,并用密钥签名。前端将Token存在localStorage,之后每次请求都在Header中携带。后端通过拦截器验证Token的签名和有效期,验证通过后从Token中提取用户ID,完成身份认证。


3. WebSocket如何实现实时消息推送的?

回答: 用户登录后,前端建立WebSocket连接,后端用ConcurrentHashMap存储用户ID和Session的映射关系。当用户A发消息给用户B时,后端先将消息存入数据库,然后通过用户ID找到B的Session,调用session.getBasicRemote().sendText()推送消息。如果B不在线,消息只存数据库,等B上线后查询历史记录。


4. 好友关系表是如何设计的?

回答: 采用双向关系设计。表结构包括:id、user_id、friend_id、status(0待确认/1已同意/2已拒绝)、create_time。当A添加B为好友时,插入两条记录:AB和BA。这样查询好友列表时直接用user_id查询即可,效率高。同时在user_id和friend_id上建了唯一索引,防止重复添加。


5. 消息表是如何设计的?数据量大了怎么办?

回答: 消息表包括:id、from_user_id、to_user_id、group_id(群聊用)、content、msg_type(1文本/2图片/3文件)、is_read、create_time。在from_user_id、to_user_id、create_time上建了索引。

目前数据量不大,暂时没遇到性能问题。如果数据量大了,可以考虑按时间或用户ID分表,或者将旧消息归档到历史表,只保留最近的热数据。


6. 如何防止SQL注入?

回答: 主要用MyBatis Plus的预编译机制。MyBatis会把#{}替换成?,然后用PreparedStatement的set方法赋值,自动转义特殊字符,防止SQL注入。同时对用户输入做了基本校验,比如长度限制、特殊字符过滤。


7. 图片和文件消息是怎么处理的?

回答: 前端先调用文件上传接口,后端接收文件后保存到服务器指定目录(如/uploads),返回文件URL。然后前端将URL作为消息内容发送。接收方收到消息后,通过URL展示或下载文件。上传时做了文件类型和大小限制,图片限制5MB,普通文件限制20MB。


8. 如何保证消息不丢失?

回答: 消息先存入MySQL数据库,再通过WebSocket推送。这样即使推送失败(如对方离线),消息也已经持久化了。用户上线后可以查询历史记录获取未读消息。


9. 群聊消息是如何推送的?

回答: 收到群聊消息后,先存入数据库,然后查询群成员列表,遍历每个成员,如果在线就通过WebSocket推送。为了避免阻塞,可以用线程池异步处理推送任务。


10. 遇到过什么技术难点?如何解决的?

回答: 一个难点是WebSocket连接管理。一开始用HashMap存储Session,多线程环境下出现了并发问题。后来改用ConcurrentHashMap解决了线程安全问题。

另一个难点是跨域配置,前后端分离时,前端请求被浏览器拦截。通过在Spring Boot配置CORS,允许前端域名跨域访问解决了。


大数据应用开发培训项目

11. 能介绍一下大数据平台的架构吗?

回答: 基于Docker搭建的完全分布式环境。底层是Hadoop(HDFS存储+YARN资源管理),上层有:

  • Spark:离线批处理
  • Flink:实时流处理
  • Kafka:消息队列,缓冲实时数据
  • Flume:日志采集
  • Hive:数据仓库,SQL查询
  • HBase:NoSQL数据库
  • ClickHouse:OLAP分析
  • Redis:缓存和实时指标存储

数据流是:Flume采集 → Kafka缓冲 → Flink实时处理 → HBase/ClickHouse存储 → 前端可视化展示。


12. Spark和Flink有什么区别?

回答:

  • Spark:微批处理,把数据分成小批次处理,延迟秒级,适合离线计算
  • Flink:真正的流处理,逐条处理数据,延迟毫秒级,适合实时计算

在项目中,离线数据清洗用Spark,实时指标计算用Flink。


13. Kafka在项目中的作用是什么?

回答: Kafka作为消息队列,起到缓冲和解耦的作用。实时采集的数据先写入Kafka,Flink从Kafka消费数据进行处理。这样即使Flink处理速度慢,也不会丢数据。同时Kafka支持多个消费者,可以同时给不同的下游系统提供数据。


14. Hive和MySQL有什么区别?

回答:

  • MySQL:OLTP数据库,支持事务,适合高并发的增删改查,延迟低
  • Hive:数据仓库,基于HDFS,适合大数据量的批量查询和分析,延迟高

项目中,实时数据存MySQL,历史数据和离线分析用Hive。


15. 你用Scala写过哪些代码?

回答: 主要用Scala编写Spark和Flink任务。比如用Spark读取HDFS数据,进行数据清洗(去重、过滤、类型转换),然后按条件聚合统计,最后写入MySQL或ClickHouse。Flink任务是消费Kafka数据,实时计算指标(如PV、UV、GMV),存入Redis供前端查询。


16. 数据可视化是如何实现的?

回答: 使用Vue.js + ECharts。后端提供RESTful API接口,返回JSON格式的统计数据。前端通过Axios调用接口获取数据,然后用ECharts渲染成折线图、柱状图、饼图等。遇到跨域问题,在后端配置了CORS解决。


17. ClickHouse有什么优势?

回答: ClickHouse是列式存储的OLAP数据库,查询速度非常快,特别适合大数据量的聚合分析(如SUM、COUNT、GROUP BY)。项目中用来存储实时计算结果和离线分析结果,查询响应时间在毫秒级。


通用技术问题

18. Spring Boot相比传统SSM有什么优势?

回答:

  • 自动配置:不需要写大量XML配置,开箱即用
  • 内嵌服务器:集成了Tomcat,打成jar包直接运行
  • 依赖管理:通过starter简化依赖管理
  • 微服务支持:方便集成Spring Cloud做微服务

开发效率高很多。


19. MyBatis和MyBatis Plus有什么区别?

回答: MyBatis Plus是MyBatis的增强工具,提供了很多便捷功能:

  • 通用Mapper:自动生成基础的CRUD方法,不用写XML
  • 条件构造器:链式调用构建查询条件,如QueryWrapper
  • 分页插件:自动处理分页
  • 代码生成器:自动生成Entity、Mapper、Service代码

开发效率更高,但底层还是MyBatis。


20. Git分支管理是怎么做的?

回答: 我们采用Git Flow模式:

  • master分支:生产环境代码
  • develop分支:开发分支
  • feature分支:每个功能单独开分支,开发完合并到develop
  • release分支:发版前从develop切出,测试通过后合并到master

日常开发在feature分支,通过Pull Request合并,组长Code Review后才能合并。


21. Maven的作用是什么?

回答: Maven是项目管理工具,主要用于:

  • 依赖管理:在pom.xml声明依赖,自动下载jar包
  • 项目构建:编译、测试、打包一键完成
  • 统一项目结构:标准的目录结构(src/main/java等)

比手动管理jar包方便很多。


22. 你如何学习新技术的?

回答: 我的学习路径是:

  1. 官方文档:先看官方文档了解基本概念
  2. 实践项目:通过做项目巩固知识
  3. 遇到问题:Google、Stack Overflow、GitHub Issue查找解决方案
  4. 技术分享:在小组内分享学到的技术,加深理解

同时会用Cursor、Claude等AI工具辅助学习和调试代码。


23. 为什么想做Java后端开发?

回答: 我对后端逻辑和系统设计比较感兴趣,喜欢思考如何设计数据库、如何优化性能、如何保证系统稳定性。Java生态成熟,企业应用广泛,学习资源多。通过做IM项目和大数据项目,我更加确定了想往后端方向发展。


24. 实习期间希望学到什么?

回答: 希望能够:

  1. 实战经验:参与真实的生产项目,了解企业级开发流程
  2. 技术提升:学习分布式系统、微服务、缓存、消息队列等技术
  3. 规范学习:学习代码规范、设计模式、最佳实践
  4. 团队协作:提升沟通能力和团队协作能力

同时希望得到前辈们的指导,快速成长。


25. 你有什么想问我的吗?

回答:

  • 实习生主要会参与哪些项目?
  • 团队的技术栈是什么?
  • 有没有导师带新人的制度?
  • 公司对实习生有什么期望和考核标准?

以上问题和回答都是基于你简历的真实项目经验,符合实习生水平,简洁、真诚、有技术深度。面试时保持自信、诚实,展现学习能力和成长潜力就好!加油!💪