邦盛科技Java开发工程师面试经验

面试题目

  1. 自我介绍及简历项目、实习经历深挖。
  2. JVM相关:是否有观察过项目中的Full GC情况?如何解决?jmap的作用是什么?
  3. Spring框架:AOP在项目中有哪些实际应用?Bean的生命周期在项目中有用到吗?
  4. 系统设计:一个亿的冷热数据,如何实现冷热分离?
  5. 并发编程:线程池参数如何设计?如果是秒杀系统,参数应如何考量?
  6. 反向提问:Java开发核心技术栈及日常工作、新员工培训及晋升路径。

参考解析

  1. Full GC优化:通常由老年代空间不足或元空间溢出导致。解决思路:通过jstat监控GC频率,优化JVM参数(如堆内存大小),检查代码中是否存在内存泄漏或长生命周期的大对象,必要时使用MAT分析堆转储文件。
  2. AOP与Bean生命周期:AOP常用于日志记录、事务管理、权限校验等横向切面。Bean生命周期常用于初始化阶段加载配置、建立连接池或在销毁阶段进行资源释放。
  3. 冷热数据分离:基于时间维度或访问频率,将热数据保留在Redis或高性能数据库中,冷数据异步归档至分布式文件系统(如HDFS)或低成本存储(如MySQL历史表、OSS),并结合压缩算法(Snappy/Gzip)减少存储空间。
  4. 秒杀系统线程池:不能照搬固定参数。核心参数如corePoolSize/maxPoolSize需结合流量预估,建议使用支持动态调整的线程池(如ThreadPoolExecutor的set方法),通过监控队列积压情况动态扩缩容,避免OOM或任务堆积。