25年9月上海同余信息科技有限公司 Java开发 二面

1. Java 封装特性在你项目中的具体体现是什么(仅说一个核心场景)?

回答思路

  • 先锚定封装的核心:隐藏内部实现、暴露可控接口,保证数据安全;
  • 核心场景选高频且典型的:实体类(POJO/DO)的字段私有化 + getter/setter 控制访问
  • 结合项目举例:订单实体类(OrderDO)中,将status(订单状态)私有化,仅通过setStatus()方法修改,且方法内增加状态流转校验(如已支付订单不能回滚为待支付),避免外部随意修改状态导致数据混乱;
  • 核心结论:通过封装订单状态字段,仅开放带校验的修改接口,保证业务规则不被破坏。

标准答案 核心体现是订单实体类中对「订单状态」字段的封装:将状态字段私有化,仅通过带业务规则校验的setter方法修改(如禁止已支付订单直接改为待支付),外部无法随意篡改,保证订单状态流转的合法性。

2. Java 多态的实现方式中,方法重写和方法重载最核心的区别是什么?

回答思路

  • 先锚定核心维度:发生阶段(编译期/运行期)+ 匹配规则
  • 方法重载(Overload):编译期确定,基于「方法名相同、参数列表不同(个数/类型/顺序)」匹配,与返回值、权限无关;
  • 方法重写(Override):运行期确定,基于「子类重写父类同名、同参数列表、同返回值(或子类)」的方法,需满足权限不缩小、异常不扩大;
  • 核心结论:重载是编译期静态多态(参数决定),重写是运行期动态多态(对象实际类型决定)。

标准答案 核心区别:方法重载是编译期静态多态,仅要求方法名相同、参数列表不同,由参数匹配决定调用;方法重写是运行期动态多态,要求子类与父类方法签名完全一致,由对象实际类型决定调用。

3. 你在项目中主动捕获异常时,catch 块中最先捕获的是父异常还是子异常?

回答思路

  • 先明确规则:必须先捕获子异常,再捕获父异常
  • 解释原因:异常捕获是按catch块顺序匹配,若先捕获父异常(如Exception),子异常(如NullPointerException)会被父异常拦截,导致子异常的专属处理逻辑无法执行;
  • 举例:先catch NullPointerException,再catch Exception,避免NullPointerException被通用Exception捕获,无法针对性处理空指针问题;
  • 核心结论:先子后父,保证特定异常有专属处理逻辑。

标准答案 最先捕获子异常。因为异常按catch块顺序匹配,若先捕获父异常会拦截所有子异常,导致子异常的针对性处理逻辑失效,必须遵循「先子后父」的捕获顺序。

4. 项目中如果抛出自定义异常,你是如何保证异常信息能准确定位问题的?

回答思路

  • 核心思路:自定义异常需包含「业务标识 + 上下文信息 + 原始异常栈」;
  • 具体实现:
    1. 自定义异常类添加核心字段:错误码(如ORDER_001)、错误描述(如“订单库存不足”)、请求ID(traceId)、业务参数(如订单ID、商品ID);
    2. 抛异常时传入原始异常(Throwable),保留完整栈轨迹;
    3. 全局异常处理器打印包含traceId、业务参数、栈轨迹的日志;
  • 举例:抛OrderException时,传入traceId=xxx、orderId=123、cause=原异常,日志中可直接定位到哪个订单、哪个环节出问题;
  • 核心结论:通过错误码+上下文参数+完整栈轨迹,让异常信息包含“业务场景+技术链路”。

标准答案 核心是让自定义异常携带「上下文信息+完整栈轨迹」:自定义异常类包含错误码、traceId、业务参数(如订单ID),抛异常时传入原始异常保留栈轨迹,全局异常处理器打印所有信息,可直接定位到具体业务场景和代码行。

5. MySQL 中左连接(LEFT JOIN)查询时,ON 和 WHERE 条件的核心区别是什么?

回答思路

  • 先锚定作用阶段:
    • ON:连接阶段生效,筛选右表数据,不满足条件的右表字段置为NULL,但左表数据仍保留;
    • WHERE:连接完成后生效,筛选最终结果集,不满足条件的整行数据会被过滤;
  • 举例:LEFT JOIN order ON user.id=order.user_id AND order.status=1(ON筛选),右表status≠1的置NULL,左表用户仍显示;若把order.status=1放WHERE,会过滤掉所有order.status≠1的行,包括左表用户;
  • 核心结论:ON筛选连接的表数据(保留左表),WHERE筛选最终结果(过滤整行)。

标准答案 核心区别:ON在表连接阶段生效,仅筛选右表数据,不满足条件的右表字段置NULL但左表数据保留;WHERE在连接完成后生效,直接过滤不满足条件的整行结果。

6. 你写 SQL 时,如何避免 JOIN 多表后出现笛卡尔积的问题?

回答思路

  • 核心原因:笛卡尔积是因缺少有效的连接条件(

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

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
感觉你这总结的都很好
点赞 回复 分享
发布于 昨天 21:11 北京

相关推荐

评论
点赞
收藏
分享

创作者周榜

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