邦盛科技Java开发工程师面试经验
面试题目
- 自我介绍及简历项目、实习经历深挖。
- JVM相关:是否有观察过项目中的Full GC情况?如何解决?jmap的作用是什么?
- Spring框架:AOP在项目中有哪些实际应用?Bean的生命周期在项目中有用到吗?
- 系统设计:一个亿的冷热数据,如何实现冷热分离?
- 并发编程:线程池参数如何设计?如果是秒杀系统,参数应如何考量?
- 反向提问:Java开发核心技术栈及日常工作、新员工培训及晋升路径。
参考解析
- Full GC优化:通常由老年代空间不足或元空间溢出导致。解决思路:通过jstat监控GC频率,优化JVM参数(如堆内存大小),检查代码中是否存在内存泄漏或长生命周期的大对象,必要时使用MAT分析堆转储文件。
- AOP与Bean生命周期:AOP常用于日志记录、事务管理、权限校验等横向切面。Bean生命周期常用于初始化阶段加载配置、建立连接池或在销毁阶段进行资源释放。
- 冷热数据分离:基于时间维度或访问频率,将热数据保留在Redis或高性能数据库中,冷数据异步归档至分布式文件系统(如HDFS)或低成本存储(如MySQL历史表、OSS),并结合压缩算法(Snappy/Gzip)减少存储空间。
- 秒杀系统线程池:不能照搬固定参数。核心参数如corePoolSize/maxPoolSize需结合流量预估,建议使用支持动态调整的线程池(如ThreadPoolExecutor的set方法),通过监控队列积压情况动态扩缩容,避免OOM或任务堆积。