上海同余信息科技有限公司 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和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

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

相关推荐

打开招聘软件,不难发现一个明显的变化:技术岗JD里多了“熟练使用AI编程工具”的要求,非技术岗则标注“能运用AI提升工作效率”;身边的后端同事,开始主动学习前端知识,靠着AI辅助,快速转型全栈;就连行政、运营岗的伙伴,也不再埋头做重复工作,而是用AI批量处理事务、生成方案。从手搓代码到AI编程,从单一岗位到跨界全能,AI的浪潮席卷而来,没有哪个岗位能独善其身。不论你是深耕代码的技术人,还是深耕流程的非技术人,都在经历一场前所未有的岗位变革——工作方式被重构,能力要求被升级,有人在变革中顺势突围,有人在迷茫中被迫淘汰。作为一名深耕后端开发3年,如今转型全栈的从业者,我亲身经历了AI对岗位的颠覆性影响,也见过太多同行、不同岗位伙伴的挣扎与成长。今天,就和大家好好聊聊,AI到底如何改变我们的工作方式和能力要求,我们又该如何适应这场变革,不被时代淘汰。先说说技术岗,这是AI影响最直接、最深刻的领域,尤其是后端开发,几乎迎来了“范式级”的改变。放在3年前,我每天的工作就是手搓代码,从基础的接口编写、bug调试,到复杂的逻辑梳理,每一行代码都要逐字敲击,一个简单的功能模块,往往要花费大半天时间。那时候,后端开发者的核心竞争力,就是“代码写得快、bug少”,只要熟练掌握一门编程语言,能独立完成后端开发任务,就能站稳脚跟。但AI编程工具的出现,彻底打破了这种格局。如今,GitHub Copilot、AI代码助手等工具已成为技术人的标配,Meta的AI编程系统甚至能完成85%的初级代码编写任务,GitHub数据显示,AI生成代码在开源项目中的占比已突破37%。现在我编写代码,不再是从头手搓,而是先让AI生成基础代码框架,再根据业务需求进行微调、优化,原本大半天的工作量,现在2-3小时就能完成。这种改变,不仅提升了工作效率,更重构了后端岗位的工作方式。以前,我们把大量时间花费在重复的代码编写上,很少有精力去思考业务逻辑、系统架构;现在,AI承担了基础的执行工作,我们的重心从“写代码”转向“做决策”——思考如何优化系统性能、如何适配业务需求、如何规避技术债务,把精力放在AI无法替代的复杂决策上。更明显的变化是,后端岗位开始向“全栈化”转型。以前,后端和前端是两个独立的领域,后端只负责接口开发、数据处理,前端负责页面渲染、交互设计,两者各司其职,很少有交叉。但现在,借助AI工具,后端开发者可以快速掌握前端基础技能,用AI生成前端页面代码、调试交互效果,不用再依赖前端同事,就能独立完成“后端+前端”的全流程开发。我身边就有很多这样的例子:有个做后端开发2年的同事,以前连HTML、CSS都不会写,借助AI辅助,只用了1个月,就掌握了前端基础技能,现在能独立完成小型项目的全栈开发;还有个刚入职的应届生,靠着AI编程工具,快速上手后端开发,同时学习前端知识,入职3个月就独立交付了一个完整的全栈小项目。与此同时,技术岗的能力要求也发生了本质变化。以前,“熟练掌握编程语言、能独立编写代码”是核心竞争力;现在,单纯的“会写代码”已经不够了,AI能比我们更快、更准确地完成基础代码编写,我们需要具备的,是AI无法替代的能力——复杂问题解决能力、业务理解能力、系统架构思维。就像Netflix的微服务架构涉及1000+独立服务,其容错设计需结合业务场景进行权衡,AI无法自主完成此类决策;蚂蚁金服JVM调优案例中,人类工程师结合业务峰值设计动态内存扩容策略,将系统稳定性提升40%,这都是AI无法替代的核心能力。此外,学会运用AI工具,也成为技术岗的必备技能,不会用AI编程的开发者,很容易被同行拉开差距,甚至面临淘汰风险。不止是技术岗,非技术岗也在被AI深刻改变,工作方式和能力要求的升级,同样触手可及。以前,运营岗的伙伴每天要花费大量时间写文案、做数据分析、整理用户反馈,重复且繁琐;行政岗要手动整理报表、安排会议、统计考勤,效率低下;销售岗要手动筛选客户、撰写跟进话术,耗时耗力。而现在,AI已经成为非技术岗的“高效助手”。运营岗可以用AI快速生成文案、制作海报、分析用户数据,原本需要1天完成的文案撰写,现在10分钟就能生成初稿,再稍作修改就能使用;行政岗可以用AI自动整理报表、安排会议、发送通知,节省大量时间用于更有价值的工作;销售岗可以用AI筛选精准客户、生成跟进话术,甚至模拟客户沟通场景,提升沟通效率。最直观的变化,就是58同城等企业已经明确要求,所有岗位招聘都要考察AI能力,不只针对技术岗,行政、财务、人力、销售等所有非技术岗位,全部纳入考核范围,完全没接触过AI的人,基本不会被录用。这意味着,AI已经从“可选技能”,变成了所有职场人的“入场券”,不会用AI,已经成为职场硬短板。我有个做运营的朋友,以前每天被文案、数据压得喘不过气,经常加班,后来开始用AI辅助工作,用AI生成文案初稿、分析用户画像、整理运营数据,工作效率提升了3倍以上,再也不用加班,还能有更多时间去思考运营策略、优化用户体验。她坦言,以前觉得AI和非技术岗无关,直到身边的同事都开始用AI,自己才意识到,不拥抱AI,迟早会被淘汰。对于非技术岗来说,AI改变的不仅是工作效率,更是能力要求。以前,非技术岗的核心竞争力是“熟练掌握岗位流程、认真负责”,只要能把本职工作做好,就能稳定立足;现在,单纯的“会做本职工作”已经不够了,我们需要具备“AI应用能力”和“核心创造力”。AI能帮我们完成重复、繁琐的基础工作,但无法替代我们的创造力、沟通能力和业务洞察力。比如运营岗,AI能生成文案,但无法结合品牌调性、用户需求做出有温度、有感染力的内容;行政岗,AI能整理报表,但无法应对突发的行政事务、协调复杂的人际关系;销售岗,AI能生成话术,但无法根据客户的情绪、需求灵活调整沟通策略。此外,跨领域学习能力也变得越来越重要。AI的普及,让岗位之间的边界变得越来越模糊,非技术岗也需要了解基础的技术知识,才能更好地运用AI工具、配合技术团队工作。比如运营岗,了解基础的数据分析知识、AI工具使用技巧,能更好地分析用户数据、优化运营方案;行政岗,了解基础的办公AI工具,能更高效地完成日常工作。不管是技术岗还是非技术岗,AI带来的变革,都不是“替代人类”,而是“解放人类”——把我们从重复、繁琐的基础工作中解放出来,让我们有更多精力去做更有价值、更有创造性的工作。但这种变革,也带来了焦虑:很多人担心自己被AI替代,担心自己的能力跟不上岗位要求,陷入自我怀疑和迷茫。我也曾有过这样的焦虑,尤其是在转型全栈的过程中,面对AI带来的岗位变化,一度不知道该如何发力,甚至担心自己多年的后端经验会被淘汰。直到我开始主动拥抱AI,学习AI工具的使用方法,同时提升自己的核心竞争力,才慢慢走出迷茫,意识到AI不是“敌人”,而是“助手”。在这个过程中,我也发现,很多人之所以焦虑,不是因为AI太强大,而是因为自己没有找到适配变革的方法,没有及时提升自己的能力。其实,应对AI带来的岗位变革,关键在于“拥抱变化、提升核心竞争力”,而精准展现自己的能力,让企业看到你的适配性,简历就成了关键。不管是技术岗转型全栈,还是非技术岗提升AI应用能力,一份能精准展现“AI适配能力”和“核心竞争力”的简历,才能帮你在求职中脱颖而出。但很多人不知道如何在简历中突出自己的AI应用经历、核心技能,要么写得像流水账,要么遗漏关键亮点,导致简历石沉大海。这时候,泡泡小程序AiCV简历王就能帮上大忙。它能一键分析简历与目标岗位JD的匹配度,自动标出缺漏的关键词,不管是技术岗的“AI编程工具使用”“全栈开发经验”,还是非技术岗的“AI高效办公”“跨领域协作能力”,都能精准捕捉。同时,它还能用STAR法则,把我们的工作经历、AI应用案例,优化成HR爱看的专业表述,不用自己费心琢磨,就能让简历亮点十足。我身边很多同行,不管是技术岗转型全栈,还是非技术岗提升竞争力,都用泡泡小程序AiCV简历王优化过简历,原本平平无奇的简历,经过优化后,投递命中率大幅提升,顺利拿到了心仪的offer。它就像一个“简历优化助手”,帮我们精准展现自己的能力,在AI变革的浪潮中,抓住更多机会。最后,我想和所有职场人、正在求职的同学说:AI带来的岗位变革,是挑战,更是机遇。从手搓代码到AI编程,从单一岗位到跨界全能,不是AI要替代我们,而是时代在要求我们变得更优秀、更全能。对于技术岗来说,不要害怕AI编程,要学会用AI提升效率,同时深耕核心能力,培养系统架构思维、业务理解能力,向全栈化、复合型人才转型;对于非技术岗来说,不要忽视AI的力量,要主动学习AI工具的使用方法,提升自己的创造力、沟通能力和跨领域学习能力,让AI成为自己的职场助力。
聊聊我眼中的AI
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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