南京莱斯-Java开发- 一面 面经

1、请做个简单的自我介绍

基本信息层面:

  • 教育背景:[学校][专业]毕业,在校期间GPA排名前[X]%
  • 技术栈掌握:熟练掌握Java核心技术、Spring生态、MySQL数据库调优、Redis缓存方案

项目经验层面:

  • 参与过[X]个完整项目周期,涉及电商/金融/物流等领域
  • 独立负责过[具体模块]的架构设计,日均处理[X]万级请求
  • 解决过生产环境的性能瓶颈问题,将接口响应时间从[X]ms优化到[Y]ms

个人特质层面:

  • 代码习惯:注重单元测试覆盖率,遵循阿里巴巴开发规范
  • 学习能力:持续关注技术演进,阅读过Spring源码和JVM规范
  • 协作意识:有Code Review经验,善于技术文档编写

2、Java中有哪些原始类型

整型家族(4种):

  • byte:8位有符号,范围-128到127,常用于IO流操作节省内存
  • short:16位有符号,范围-32768到32767,实际开发较少使用
  • int:32位有符号,范围约±21亿,最常用的整数类型
  • long:64位有符号,需要加L后缀,用于时间戳、大数值计算

浮点型家族(2种):

  • float:32位单精度,精度约6-7位,金融计算禁用
  • double:64位双精度,精度约15-16位,科学计算首选

其他类型(2种):

  • char:16位Unicode字符,范围0到65535,可以存储中文
  • boolean:理论1位但JVM实现为4字节,只有true/false

关键特性:

  • 存储位置:栈内存直接存值,访问速度快
  • 默认值:数值型为0,boolean为false,char为'\u0000'
  • 自动装箱:JDK 1.5后可自动转换为包装类,但频繁装拆箱影响性能

3、SpringBoot中如何实现异步处理

配置启用层面:

  • 启动类添加@EnableAsync注解激活异步功能
  • 自定义线程池配置类实现AsyncConfigurer接口
  • 设置核心参数:corePoolSize=8、maxPoolSize=16、queueCapacity=200、keepAliveSeconds=60

使用方式层面:

  • 在Service方法上标注@Async("自定义线程池名称")
  • 返回类型可以是void、Future<T>或CompletableFuture<T>
  • 调用方通过Future.get()获取结果,支持超时控制

注意事项层面:

  • 必须通过Spring容器注入调用,类内部直接调用会失效
  • 异步方法必须是public修饰,private会被忽略
  • 异常处理需要实现AsyncUncaughtExceptionHandler接口
  • 事务传播需要特别注意,异步方法默认开启新事务

实战优化层面:

  • 使用@Async("线程池名")区分不同业务场景的线程池
  • 配置线程池拒绝策略为CallerRunsPolicy保证任务不丢失
  • 监控线程池状态,通过Actuator暴露线程池指标

4、MySQL中如何关联查询多张表

JOIN类型详解:

  • INNER JOIN:只返回匹配行,适用于必须存在关联的业务场景
  • LEFT JOIN:保留左表全部数据,右表无匹配时填充NULL,常用于主表查询
  • RIGHT JOIN:保留右表全部数据,实际开发中较少用,可用LEFT JOIN替代
  • CROSS JOIN:笛卡尔积,两表记录数相乘,一般是SQL错误导致

关联条件设计:

  • ON子句:指定关联字段,支持多条件AND连接
  • WHERE子句:在关联后过滤数据,执行顺序在JOIN之后
  • USING子句:当关联字段同名时的简化写法

性能优化要点:

  • 关联字段必须建立索引,避免全表扫描
  • 小表驱动大表原则,将数据量小的表放在前面
  • 避免SELECT *,只查询需要的字段减少数据传输
  • 超过3张表关联考虑分步查询或冗余字段设计
  • 使用EXPLAIN分析执行计划,关注type和rows字段

替代方案:

  • 子查询:IN/EXISTS适合一对多场景,但性能通常不如JOIN
  • 应用层关联:先查主表再批量查从表,通过代码组装数据
  • 数据冗余:高频查询场景通过字段冗余避免关联

5、数据库事务具备哪些核心特征

原子性(Atomicity):

  • 定义:事务内所有操作要么全部成功,要么全部回滚
  • 实现机制:通过undo log记录修改前的数据,回滚时恢复
  • 典型场景:转账操作,扣款和加款必须同时成功

一致性(Consistency):

  • 定义:事务执行前后数据库从一个一致性状态转到另一个一致性状态
  • 约束保证:主键、外键、唯一索引、CHECK约束等
  • 业务保证:账户余额不能为负、库存不能超卖等业务规则

隔离性(Isolation):

  • 定义:并发事务之间互不干扰,通过隔离级别控制
  • 四种级别:READ UNCOMMITTED(脏读)、READ COMMITTED(不可重复读)、REPEATABLE READ(幻读)、SERIALIZABLE(串行化)
  • MySQL默认:REPEATABLE READ,通过MVCC和间隙锁解决幻读
  • 实现机制:锁机制(悲观锁)和MVCC多版本并发控制(乐观锁)

持久性(Durability):

  • 定义:事务提交后数据永久保存,系统崩溃也能恢复
  • 实现机制:通过redo log记录已提交事务的修改
  • 刷盘策略:innodb_flush_log_at_trx_commit=1保证每次提交都刷盘

实际应用考量:

  • 隔离级别越高性能越低,需要根据业务场景权衡
  • 分布式事务需要引入Seata等框架实现最终一致性
  • 长事务会导致锁等待和undo log膨胀,应该拆分或异步化

6、String、StringBuilder、StringBuffer有什么区别

不可变性对比:

  • String:final修饰的char数组,任何修改都创建新对象
  • StringBuilder/StringB

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java面试圣经 文章被收录于专栏

Java面试圣经,带你练透java圣经

全部评论
感觉面试的时候也不可能 答得这样规范 除非你是大佬特别猛 但又有几个呢
点赞 回复 分享
发布于 今天 19:15 江苏
还得是清华,愿意来多多卷吗 看我帖子
点赞 回复 分享
发布于 今天 16:56 香港

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务