2024 Java后端面试场景题 51 道及答案解析!

打印 上一主题 下一主题

主题 1618|帖子 1618|积分 4854

因本面试题内容较多,共1314页,篇幅有限无法全部显现,故现仅展示前2道(14页),后续标题答案会在背面一一展示,如有须要的也可以,查察下方名片直接获取~ 非常感谢!
  目录

1. 知己知彼才能百战百胜,如何做好面试前的预备工作
2024 年的行情,和 3~4 年前不同,通过海量简历投递和海量面试找工作的时代已颠末去了。
在如今面试时机较少,并且面试难度较大的情况下。
充实做好面试的预备才是快速通过面试最有效的方法!
切忌把真实面试当靶场,末了带来的代价黑白常巨大的!
面试无非就两个部分,投简历、面试!
很多人把重心放在投简历上,忽略了预备面试的重要性,末了的效果是获得了面试时机
但是在面试过程中被刷下来了。
1.1 怎么写简历
着手预备的第一步聚焦于简历的打造。
简历是他人开端相识你的窗口,其重要性不言而喻,因此精心构思简历至关重要。理想的简历应当围绕你的亲身经历构建,正如某些杰出人士仅凭一句“Unix 的创造者”便足以令人印象深刻。
尽管并非所有人都拥有云云耀眼的成就,但这一例证夸大了个人经历在简历中的核心职位。
因此,选择那些能丰富你简历含金量的职位,从事能让你简历熠熠生辉的项目,乃是简历撰写的黄金法则——让经历说话,而非仅仅堆砌文字。
然而,简历的文字表达同样不可小觑,尤其是当我们缺乏显赫配景时。简历应当精粹,避免冗余信息导致焦点暗昧,着重突出你的上风与技能。一样平常而言,简历应涵盖以下核心部分:

个人简介:用不超过 200 字简明扼要地概括自己,例如:“拥有超十年软件开辟履历,带领团队逾四年,专长于构建高可用性、高性能的分布式系统,配景高出互联网与金融业,目前担当 XXX 公司 XX 职位,负责 XXX 平台。”


  • 联系信息:推荐利用专业的电子邮件地址(如 Gmail),避免利用过于休闲的邮箱服务。若拥有个人网站、博客、GitHub 或 Stack Overflow 账号,务必附上,尤其是个性化域名更能彰显主动性和审美品味,且确保页面内容组织恰当,真诚无伪。
  • 技术作品与展示:展示你的成果,尤其是对于前端开辟者更为直接。后端开辟者则可通过 GitHub 展示项目。专业证书或奖项同样值得提及,如微软或 Oracle 认证。
技能概览:


  • 技术栈:明白列出把握的编程语言、框架、技术工具及设计理念,如 Java、SpringBoot、Redis、分布式系统架构等。
  • 专业领域:涵盖前端、算法、呆板学习、分布式系统、数据库管理等。
  • 行业履历:涉及的行业如金融、电子商务,及特定业务如客户关系管理、付出系统等。
  • 软实力与履历:团队管理规模、项目管理履历、个人特质等,轻便明了即可。
确保简历内容与目标职位的技能要求对齐,以便快速创建匹配印象。工作与教诲配景需精挑细选,夸大关键项目、挑衅、责任及所获成就,同时,这些内容应紧密支持你的技能报告,避免离题。
简历长度以不超过两页 A4 纸为宜,接纳 PDF 格式以保证格式一致性。可鉴戒 LinkedIn 或 Microsoft Office 模板美化外观,力求内容精粹,重点突出。
记住,简历的目标是凸显你的独特之处,哪怕仅展示两三个亮点,也足以引起注意。
末了,简历是打开机会之门的第一步,尤其在竞争激烈的就业市场中,除了实质性的技能和履历,别出心裁的简历设计与正面积极的自我评价亦能增长脱颖而出的时机。
即便初始条件有限,显现出积极的态度、持续的学习意愿和办理题目标能力,同样能传达出你是一个值得投资的潜力股。
1.2 技术知识储备
在预备简历时,切记实事求是,你所列出的每一项技能都可能成为面试对话的起点。"精通"、"认识"、"相识"需正确区分,以免自相矛盾。
对于提及的每项技术,务必把握其底子及核心概念,由于面试过程中,面试官每每会逐步深入探讨,以此评估你的现实水平。因此,系统性复习相关册本和资料是不可或缺的步骤,以备不时之需。
例如:


  • 如你标明纯熟把握 Java,那么不仅限于底子语法,还应涵盖并发编程、NIO、JVM等进阶知识,同时对 Spring、Netty 等盛行框架的基本原理有所认识。
  • 提及 Go 语言,意味着你应至少阅读过官方的《Effective Go》,明白其核生理念。
  • 当枚举 Redis 时,对其数据结构、性能调优计谋、高可用部署方式及分布式锁机制等,通过官方文档的研读应到达一定的明白深度。
  • 如声称把握面向对象设计,认识《设计模式》中的经典 23 种模式将是基本要求。
  • 对于分布式架构的宣称,则需对 CAP 原则、微服务架构、弹性设计以及 SpringCloud、Cloud Native 等相关技术框架有深刻明白。
  • 关于网络编程的技能,明白 TCP/IP 协议的三次握手、四次挥手过程,Socket 编程底子,以及 select、poll、epoll 等 I/O 多路复用技术,都是必不可少的知识点。
综上所述,你简历上的每一项技术标注,都应当基于你对该技术核心知识点的把握之上。
这比如备考期末测验,你须要全面回顾教材,确保把握大多数关键知识点,纵然不必八面见光,但对于 80%以上的重点内容,你都应做到胸有定见。这样的预备不仅是为了应对面试,更是对自己技术深度和广度的负责态度体现。
1.3 项目预备(非常重要)
在面试过程中,分享个人项目经历或办理过的挑衅几乎是每个面试官必问的环节,但令人诧异的是,很多候选人并未对此做好充实预备。以下四个经典题目频仍出现于面试之中:
1. 分享一个你最为自豪或近来完成的项目。
2. 讲述一次你攻克的最复杂或技术含量最高的困难。
3. 形貌一个你经历过的最具挑衅性或最艰巨的项目。
4. 谈谈你曾犯下的最大技术失误或引发的技术故障。
这些题目背后,面试官的意图各异:


  • 第一个题目旨在探查你的成就顶峰、爱好地点;
第二、三题侧重于你的题目办理能力和面对逆境时的心态韧性;


  • 而第四题则关注你对待错误的态度,以及是否具备反思与发展的能力。
值得注意的是,面试官会通过一连追问细节来验证信息的真实性,由于虚构的情节难以在严密的追问下自作粉饰。
为有效应对这类题目,以下建议大概能资助你更好地预备:


  • 构建故事框架:运用 STAR 法则(情境 Situation、任务 Task、行动 Action、效果Result)来组织你的叙述,确保内容条理清楚,避免冗长繁杂。
  • 添加细节:丰富的技术细节是说服力的关键,它能让故事显得更加真实可信。
  • 注入情感:真挚的情感表达能传递你的热情、自豪与对峙,确保情感源自真实的体验。
  • 融入反思:在叙述中穿插你的思索、教训总结及后续的改进措施,显现你的发展和成熟。
  • 到达这样的叙述水平并非易事,须要持续的训练与积聚。日常工作中,造就即时总结的风俗,对经历举行记录与反思,是避免临阵磨枪的有效方法。
此外,提升语言组织能力与逻辑头脑同样重要。通过撰写工作文档和经营个人技术博客,不仅可以锻炼写作技巧,还能深化对技术的明白和反思。
现实上,这些平日里的功夫,正是在关键时刻展示你专业素养与个人魅力的基石。因此,成功的面试体现,源于平日里一点一滴的积聚与修炼。
面试建议是,一定要自信,敢于表达,面试的时间我们对知识的把握偶然间很难八面见光,把自己的思绪说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
1.4 步调员职业规划的利器-终局头脑
没有人知道未来是怎样的,但未来并非虚无飘渺,而是以不同的概率形式活在今天,“终局头脑”就是以时间为矢,找到此中概率最大的可能。
在和朋友的饭后闲聊的时间,经常会由于没有限定的发散,引发一些争论或者进入僵局,一样平常这个时间,我经常会引入一个词语“终局头脑”,基于未来的角度去回看事情的发展,每每会得到一些风趣的结论。
在做职业规划的过程中,面对职场渺茫的咨询者,我也经常会用到这种方式,基于理想职业,去规划 Ta 的职业发展路径,再从浩繁路径中选择中最舒服或者最恰当的去执行。
那么什么是终局头脑呢?这不是什么新的理论,在一本十多年前的脱销书《高效能人士的七个风俗》中,就提出了“以终为始”的观点,这实在就是我们如今说的“终局头脑”
“从如今开始,以你的人生目标作为权衡一切的标准,你的一言一行,一举一动,无论发生在何时,都必须依照这一原则,即由个人最重视的期许或代价观来决定一切。牢记自己的目标或者任务,就能确信日常的所作所为是否与之南辕北辙。”
而这个词条的最早提出者,大部分认为是湖畔大学的曾鸣传授,关于终局头脑他是这样表述的:“在面对选择时,从尽头出发思量题目,来决定你当下的选择。”
人的一生中,总有一些比较复杂且时间跨度很长的事业,我们经常做着做着就忘了自己为什么要做这件事,而“终局头脑”就是在做一件事的过程中,通过想象最终的结局,以愿景为导向来反推如今的每一个行为、每一项选择,矫正自己是否正沿着正确的路线奔向尽头站而没有跑偏,清楚接下来的每一寸韶光都要以什么方式度过,然后“以终为始”,站在未来看如今,修正自己当下正在做的事情。

似乎听起来很简单,但现实很少有人能做到,由于更多的时间只是把“终局头脑”作为知识去明白,而不是一种的头脑的工具去运用。
职场题目概述来说无非就是定位、适应、发展、转型这几大类,处在不同职业发展阶段的人,一样平常都会遇到不同的困境,而中年危机的由来,大部分都可以分别到转型题目,
对于这个阶段的人生来说,要放弃的就不仅仅是一个岗位而已,另有你在行业中已经获得的资历;在转型过程中,最大的障碍就是你的薪酬待遇上。但是,我们要知道的是,当一个环境缺乏更多的想象空间时,给多少薪酬已经不重要了。
而接纳终极头脑的思索方式,会让你重新审视如今的经历,跳出 “当下长处优先”的头脑模式,用一个恒久的眼光去重新判定,对个人而言,面临转型期,你须要思索的是:
1、如今做的哪些事情是对未来 5-10 年有资助的?
2、如今做的哪些事情对未来没有资助?
3、对未来是否有资助,你的判定依据是什么?
4、你的个人商业模式是什么?
回归主题,人到中年,该怎样规划职业生涯?起首要做到的应该是不断审视自己,思索从职业危机中得到了什么,而非失去了什么。当你重新筛选出的自己的核心代价观时,再去着手规划自己的职业:
1.4.1 重新制定整体的职业生涯规划
把眼光投向未来,制定 5-10 的恒久规划,然后制定一个 3-5 年的可操作性强、具体完备、动态性的中期职业生涯规划。

如果你对如今工作意味着什么,未来的职业的真实性都不清楚时,那你对你来说最重要题目,不是转型,而是把当下的工作做好,在工作中不断地明白未来的人生目标。
在制定恒久规划时,你须要时刻提示自己:面对快速增长、激荡变化的未来,你今后想要哪种范例的工作生存?什么样的工作或活动会更让你以为开心?面对不可猜测的未来,你未雨绸缪了吗?你有什么样的远大理想?个人或生存偏好须要再改变什么以更适将来?在职业满足度方面,什么对你来说最重要...
1.4.2 实现头脑方式的转变
转型并不是要是全盘否定已往的职业经历,从 0 开始,而是基于新的规划,重新归纳整理已往的经历,梳理出可复用的职场技能、管理履历、人脉资源、头脑逻辑等,要相信没有任何一段经历是无用的,多余的,不断的思索,提炼,用唯一的经历打造独有的上风,从技术头脑向管理头脑转变;
1.4.3 探索职业第二曲线
走出岗位、平台、行业的舒适区,不局限服务于某一企业、行业,打开思绪,积极探索职业第二曲线,用最小的试错成本去尝试一些你认为风趣的事情,去找到真正决定 “未来”的小概率事件。

终局头脑可以使你思量题目更加久远和深入,偶然会领先同龄人和竞争对手几个维度;终局头脑可以很复杂,也可以很简单,只要换一个未来的视角,从最大的题目开始,用倒序思索,你将会发现更多的可能性。
2. 电商平台中订单未付出过期如何实现自动关单?
日常开辟中,我们经常遇到这种业务场景,如:外卖订单超 30 分钟未付出,则自动取订单;用户注册成功 15 分钟后,发短信息关照用户等等。这就延时任务处理场景。
在电商,付出等系统中,一设都是先创建订单(付出单),再给用户一定的时间举行付出,如果没有按时付出的话,就须要把之前的订单(付出单)取消掉。这种类以的场景有很多,另有比如到期自动收货,超时自动退款,下单后自动发送短信等等都是类似的业务题目。
2.1 定时任务
通过定时任务关闭订单,是一种成本很低,实现也很容易的方案。通过简单的几行代码,写一个定时任务,定期扫描数据库中的订单,如果时间过期,就将其状态更新为关闭即可。

 
优点:实现容易,成本低,基本不依赖其他组件。
缺点:
时间可能不敷正确。由于定时任务扫描的间隔是固定的,所以可能造成一些订单已颠末期了一段时间才被扫描到,订单关闭的时间比正常时间晚一些。增长了数据库的压力。随着订单的数量越来越多,扫描的成本也会越来越大,执行时间也会被拉长,可能导致某些应该被关闭的订单迟迟没有被关闭。
总结接纳定时任务的方案比较恰当对时间要求不是很敏感,并且数据量不太多的业务场景。
2.2 JDK 延迟队列 DelayQueue

DelayQueue 是 JDK 提供的一个无界队列,我们可以看到,DelayQueue 队列中的元素须要实现 Delayed,它只提供了一个方法,就是获取过期时间。

用户的订单生成以后,设置过期时间比如 30 分钟,放入界说好的 DelayQueue,然后创建一个线程,在线程中通过 while(true)不断的从 DelayQueue 中获取过期的数据。
优点:不依赖任何第三方组件,连数据库也不须要了,实现起来也方便。
缺点:
由于 DelayQueue 是一个无界队列,如果放入的订单过多,会造成 JVM OOM。DelayQueue 基于 JVM 内存,如果 JVM 重启了,那所有数据就丢失了。
总结DelayQueue 适用于数据量较小,且丢失也不影响主业务的场景,比如内部系统的一些非重要关照,就算丢失,也不会有太大影响。
2.3 redis 过期监听
redis 是一个高性能的 KV 数据库,除了用作缓存以外,实在还提供了过期监听的功能。
在 redis.conf 中,配置 notify-keyspace-events Ex 即可开启此功能。
然后在代码中继续 KeyspaceEventMessageListener,实现 onMessage 就可以监听过期的数据量。


 通过以上源码,我们可以发现,其本质也是注册一个 listener,利用 redis 的发布订阅,当 key 过期时,发布过期消息(key)到 Channel :keyevent@*:expired 中。
在现实的业务中,我们可以将订单的过期时间设置比如 30 分钟,然后放入到 redis。
30 分钟之后,就可以消耗这个 key,然后做一些业务上的后置动作,比如检查用户是否付出。
优点: 由于 redis 的高性能,所以我们在设置 key,或者消耗 key 时,速度上是可以保证的。
缺点:由于 redis 的 key 过期计谋原因,当一个 key 过期时,redis 无法保证立刻将其删除,自然我们的监听事件也无法第一时间消耗到这个 key,所以会存在一定的
延迟。别的,在 redis5.0 之前,订阅发布中的消息并没有被持久化,自然也没有所谓的确认机制。所以一旦消耗消息的过程中我们的客户端发生了宕机,这条消息就彻底丢失了。
总结:redis 的过期订阅相比于其他方案没有太大的上风,在现实生产环境中,用得相对较少。
2.4 Redisson 分布式延迟队列
Redisson 是一个基于 redis 实现的 Java 驻内存数据网格,它不仅提供了一系列的分布式的 Java 常用对象,还提供了很多分布式服务。
Redisson 除了提供我们常用的分布式锁外,还提供了一个分布式延迟队列RDelayedQueue,他是一种基于 zset 结构实现的延迟队列,实在现类是RedissonDelayedQueue。

 优点:利用简单,并且实在现类中大量利用 lua 脚本保证其原子性,不会有并发重复题目。
缺点:须要依赖 redis(如果这算一种缺点的话)。
总结:Redisson 是 redis 官方推荐的 JAVA 客户端,提供了很多常用的功能,利用简单、高效,推荐大家尝试利用。
2.5 RocketMQ 延迟消息
延迟消息,当消息写入到 Broker 后,不会立刻被消耗者消耗,须要等待指定的时长后才可被消耗处理的消息,称为延时消息。
在订单创建之后,我们就可以把订单作为一条消息投递到 rocketmq,并将延迟时间设置为 30 分钟,这样,30 分钟后我们界说的 consumer 就可以消耗到这条消息,然后检查用户是否付出了这个订单。
通过延迟消息,我们就可以将业务解耦,极大地简化我们的代码逻辑。
优点:可以使代码逻辑清楚,系统之间完全解耦,只需关注生产及消耗消息即可。别的其吞吐量极高,最多可以支持万亿级的数据量。
缺点:相对来说 mq 是重量级的组件,引入 mq 之后,随之而来的消息丢失、幂等性题目等都加深了系统的复杂度。
总结:通过 mq 举行系统业务解耦,以及对系统性能削峰填谷已经是当前高性能系统的标配。
2.6 RabbitMQ 死信队列
除了 RocketMQ 的延迟队列,RabbitMQ 的死信队列也可以实现消息延迟功能。
当 RabbitMQ 中的一条正常消息,由于过了存活时间(TTL 过期)、队列长度超限、被消耗者拒绝等原因无法被消耗时,就会被当成一条死信消息,投递到死信队列。
基于这样的机制,我们可以给消息设置一个 ttl,然后故意不消耗消息,等消息过期就会进入死信队列,我们再消耗死信队列即可。
通过这样的方式,就可以到达同 RocketMQ 延迟消息一样的效果。
优点:同 RocketMQ 一样,RabbitMQ 同样可以使业务解耦,基于其集群的扩展性,也可以实现高可用、高性能的目标
缺点:死信队列本质还是一个队列,队列都是先辈先出,如果队头的消息过期时间比较长,就会导致背面过期的消息无法得到及时消耗,造成消息壅闭。
总结:除了增长系统复杂度之外,死信队列的壅闭题目也是须要我们重点关注的。


另另有《原创2024年Java步调员最新面试"八股文"攻略》 、《[2024真题合集]Java步调员一线大厂面试真题》如有须要,查察下方名片获取~

有须要的,查察下方名片获取~ 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表