阿里三面被拒含泪离开,经历半年努力自学,二战成功面上阿里

本文分享了一位读者在阿里Java后端面试失败后的反思和学习过程,包括三轮面试的详细内容,如Java核心知识点、Spring全家桶、高并发设计、Redis和数据库优化等。通过复习和刷面试题,最终成功二次面试进入阿里。文章强调了应变能力、面试准备和基础扎实的重要性,并提供了面试核心知识点的学习资源。

大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。

最近跟一个读者聊天,他准备了3个月,刚刚参加完阿里巴巴的第三面,电话面,嗯,挂了…

阿里Java后端三面凉经

一面

面试官人很好,前一天就打电话预约。不过实话实说不知道为什么我投的Java研发简历被做IOT算法的部门捞起来了,所以这一面很短,总共15分钟:

  • 自我介绍
  • 直接上来就手撕代码:重建二叉树
  • JVM:类加载机制,沙箱安全
  • 问到运行时数据区,我答漏了一个程序计数器,然后面试官就接着问到了程序计数器。
  • 问可达性分析,什么样的对象可以作为GcRoot、加载的时候把这些对象提前找好用的OopMap
  • 新生代几次对象几次到老年代?
  • 有没有可能直接就把刚new出来的对象放在老年代?(第一次碰到这个问题,有些慌,我答的有可能,毕竟有些垃圾回收器会有一个空间分配担保策略)
  • 多线程:volatile,CAS,总线嗅探,CPU缓存一致性协议
  • 讲一讲ReentrantLock、ThreadLocal、Lock和Synchronized的区别。
  • CountDownLatch,ABC三个线程怎么去保证顺序执行?
  • 数据库优化:B+树,Hash索引,最左前缀,索引优化分析,一条龙服务,都问了一下。
  • Redis:一来就是分布式锁,然后别的就没问了,可能也是觉得我回答得还行就跳过了。
  • HashMap:扩容的触发条件是什么?我答只是一个达到负载就扩容了,明显错了。然后面试官纠正说负载和Hash冲突同时发生。
  • 死锁怎么排查?
  • JVM调优怎么做?</
[ { "id":1, "msg":"帝帝帝大王正指挥瓦多迪建造'苹果能量塔',突然发现核心能源——星光苹果被偷。", "nextid":2 }, { "id": 2, "name": "DDD", "avatar": "Avatars/DDD", "msg": "(暴跳如雷)我的超级苹果!没有它能量塔就是废铁!等等…这粉色绒毛!(捡起沙滩上的绒毛)卡比——!!", "nextid":3 }, { "id":3, "msg": "(星之卡比从礁石后探头,抱着发光的苹果啃得正欢)", "nextid":4 }, { "id": 4, "name": "Kriby", "avatar": "Avatars/Kriby", "msg": " Poyo?(无辜眨眼,苹果汁滴在沙子上泛起星光)", "opts": [ { "msg": "主动归还苹果,但要求交换条件", "toId": 8 }, { "msg": "转身逃跑引发追逐战", "toId": 5 } ] }, { "id": 5, "name": "DDD", "avatar": "Avatars/DDD", "msg": " 可恶的粉球,给我站住不许跑!!!", "nextid":6 }, { "id": 6, "name": "Kriby", "avatar": "Avatars/Kriby", "msg": "Poyo!Poyo!", "nextid":7 }, { "id": 7, "msg": "就这样两人一直追逐下去........但是最终还是选择和解", "nextid":8 }, { "id": 8, "name": "Kriby", "avatar": "Avatars/Kriby", "msg": " Poyo-poyo!(指向远方迷雾海域)", "nextid":9 }, { "id": 9, "name": "DDD", "avatar": "Avatars/DDD", "msg": " 什么?你说海妖偷走了其他苹果?(狐疑)哼!本大王才不会被骗…(突然巨浪袭来)", "nextid":10 }, { "id": 10, "msg": " 巨型海妖现身,触手卷走苹果能量塔的核心部件,两人被困在腐朽的船舱,海水不断渗入。", "nextid":11 }, { "id": 11, "name": "DDD", "avatar": "Avatars/DDD", "msg": " 锤子卡在木梁里)可恶!粉球球,现在我们是一根绳上的蚂蚱了!", "nextid":12 }, { "id": 12, "name": "Kriby", "avatar": "Avatars/Kriby", "msg": "(变身潜水卡比,照亮黑暗)Poyo! ", "nextid":13 }, { "id": 13, "msg": " 逃生途中发现古代石板,记载着苹果能量的秘密。", "nextid":14 }, { "id": 14, "name": "MetaKnight‌", "avatar": "Avatars/MetaKnight‌", "msg": "(突然从天而降)停下!那石板会唤醒古代灾厄!(剑指帝帝帝)你又在谋划什么? ", "nextid":15 }, { "id": 15, "name": "DDD", "avatar": "Avatars/DDD", "msg": "( 本大王需要苹果救妹妹蒂芙!她的石化病…(罕见露出脆弱) ", "nextid":16 }, { "id":16, "name":"Kriby", "msg":"Poyo?(那我现在应该怎么做呢?)", "opts": [ { "msg":"卡比调和冲突,提议三方合作", "nextid":17 }, { "msg":"卡比独自吞下石板引发能量暴走", "nextid":22 } ] }, { "id":17, "msg":"三人抵达星云神殿,发现苹果能量可治愈石化病,但会毁灭梦幻岛生态。", "nextid":18 }, { "id":18, "name":"DDD", "avatar":"Avatars/DDD", "msg":"(颤抖握锤)蒂芙还是岛屿…靠你了(为卡比提供能量)", "nextid":19 }, { "id":19, "name":"MetaKnight‌", "avatar":"Avatars/MetaKnight‌", "msg":"(收剑入鞘)或许是时候该发力了(为卡比提供能量)", "nextid":20 }, { "id":20, "name":"Kriby", "avatar":"Avatars/Kriby", "msg":"(跳到祭坛中央,全身发光)POYO——!", "nextid":21 }, { "id":21, "msg":"能量不断被吸入卡比体内,在短暂光芒之后,卡比稳定下来后让帝帝帝将苹果带回,蒂芙苏醒,帝帝帝含泪道谢" }, { "id":22, "msg":"卡比吸收过量能量裂变成暗黑卡比,引发新危机" } ]我这json格式对不对
最新发布
08-19
<think>首先,用户的问题是:"我这json格式对不对",意思是"我的JSON格式对不对"。用户提供了一个JSON结构,我需要检查它的正确性。 用户提供的JSON是一个数组,包含多个对象,每个对象代表一个对话步骤。对象有各种键如"id"、"msg"、"name"、"avatar"、"nextid"、"opts"等。 我需要验证JSON格式是否正确。JSON(JavaScript Object Notation)要求: - 键必须是双引号包裹的字符串。 - 值可以是字符串、数字、数组、对象、布尔值、null。 - 整个结构必须是有效的。 现在,分析用户提供的JSON: - 它是以一个数组开头的,包含多个对象。 - 每个对象都有键值对。 检查具体问题: 1. **键的双引号**:用户使用了双引号,如"id"、"msg"等,这是正确的。 2. **值的类型**: - "id":是数字,如1、2、3等,在JSON中数字不需要引号,用户正确使用了数字。 - "msg":是字符串,用双引号包裹,正确。 - "name":是字符串,用双引号包裹,正确。 - "avatar":是字符串,用双引号包裹,正确。 - "nextid":是数字,如2、3、4等,用户正确使用了数字。 - "opts":是一个数组,包含对象。用户在每个"opts"数组中都有对象,如{"msg": "主动归还苹果,但要求交换条件", "toId": 8}等。键"toId"是数字,正确;但在id:16的"opts"中,有"nextid"键,如{"msg":"卡比调和冲突,提议三方合作", "nextid":17},这里"nextid"是数字,正确。 3. **一致性**: - 在id:4,有"opts"数组,每个选项有"msg"和"toId"。 - 在id:16,有"opts"数组,但键是"msg"和"nextid"。用户使用了"nextid"而不是"toId"。这可能是一个不一致,但在JSON格式上,键名可以不同,只要语法正确。所以从JSON角度看,这不是错误,但可能是逻辑问题。 4. **语法错误**: - 在id:14,键"avatar": "Avatars/MetaKnight‌",这里有一个问题:"MetaKnight‌"后有一个零宽空格(U+200C),这在JSON中可能被视为无效字符,但严格来说,JSON允许Unicode字符,所以它可能没问题,但最好避免特殊字符。 - 同样,在id:19,有"Avatars/MetaKnight‌",同样的问题。 - 在id:14,键"name": "MetaKnight‌",同样有零宽空格。 - 在id:19,键"name": "MetaKnight‌",同样。 - 在id:16,键"name":"Kriby",但应该是"Kirby",用户拼错了,但在JSON格式上,不影响。 - 在id:20,键"name":"Kriby",同样拼写错误。 - 在id:22,没有结束的逗号或错误,但它是最后一个对象,没有逗号是正常的。 - 整个数组以"]"结束,正确。 零宽空格(U+200C)在JSON字符串中是允许的,因为它被视为字符串内容。所以技术上,JSON是有效的。但用户可能想检查拼写错误。 在id:4,键"name": "Kriby",应该是"Kirby";同样在id:6、12、16、20等,都是"Kriby",可能是个拼写错误。 在"opts"中,id:4使用"toId",而id:16使用"nextid"。不一致,但JSON格式上没问题。 现在,检查是否有语法错误: - 在id:14,键"msg": "(突然从天而降)停下!那石板会唤醒古代灾厄!(剑指帝帝帝)你又在谋划什么? ",结尾有空格,但没问题。 - 在id:15,键"msg": "( 本大王需要苹果救妹妹蒂芙!她的石化病…(罕见露出脆弱) ",有空格,但ok。 - 在id:16,键"msg":"Poyo?(那我现在应该怎么做呢?)",有问号,但ok。 - 在id:22,键"msg":"卡比吸收过量能量裂变成暗黑卡比,引发新危机",没有结束的逗号,因为是最后一个对象。 整体结构:数组以"["开头,以"]"结束,对象用逗号分隔。用户在每个对象后有逗号,除了最后一个,这是正确的。 在id:21,没有逗号,因为下一个是id:22,但id:22是单独的,用户写了: { "id":21, ... } { "id":22, ... } 在JSON中,对象之间必须有逗号。用户没有在id:21和id:22之间加逗号。 看用户输入: { "id":21, "msg":"能量不断被吸入卡比体内,在短暂光芒之后,卡比稳定下来后让帝帝帝将苹果带回,蒂芙苏醒,帝帝帝含泪道谢" } { "id":22, "msg":"卡比吸收过量能量裂变成暗黑卡比,引发新危机" } 在JSON中,数组元素之间必须有逗号。所以这里缺少逗号在id:21和id:22之间。应该是: { "id":21, ... }, { "id":22, ... } 类似地,在id:20和id:21之间,用户有逗号吗?看: { "id":20, ... "nextid":21 }, { "id":21, ... } 在id:20后,有逗号,因为"nextid":21,但对象之间在数组中需要逗号分隔。 在用户输入中: { "id":20, "name":"Kriby", "avatar":"Avatars/Kriby", "msg":"(跳到祭坛中央,全身发光)POYO——!", "nextid":21 }, // 这里有逗号 { "id":21, "msg":"能量不断被吸入卡比体内,在短暂光芒之后,卡比稳定下来后让帝帝帝将苹果带回,蒂芙苏醒,帝帝帝含泪道谢" } // 这里没有逗号 { "id":22, "msg":"卡比吸收过量能量裂变成暗黑卡比,引发新危机" } // 结束 在id:21和id:22之间,没有逗号。同样,id:21后没有逗号,id:22是最后一个。 所以,错误是:在id:21和id:22之间缺少逗号。因为它们是数组中的连续元素,必须有逗号分隔。 在id:21后,应该是: }, { "id":22, ... } 但用户写了: { "id":21, ... } { "id":22, ... } 没有逗号。 此外,在id:22后,没有逗号,因为是结束。 另一个问题:在id:16,有"opts"数组,但每个选项有"nextid",而在其他地方如id:4,有"toId"。不一致,但格式上ok。 在id:7,键"msg": "就这样两人一直追逐下去........但是最终还是选择和解", "nextid":8 — 正确。 在id:13,键"msg": " 逃生途中发现古代石板,记载着苹果能量的秘密。", "nextid":14 — 正确。 现在,关于零宽空格:在"MetaKnight‌",有U+200C,这可能在复制时出现,但JSON解析器应该能处理它,因为它是有效的Unicode字符。 总结JSON格式问题: 1. **缺少逗号**:在id:21和id:22之间,缺少逗号。这会使JSON无效。 2. **拼写错误**:键"name"的值是"Kriby",应该是"Kirby";"MetaKnight‌"有零宽空格,可能不是问题。 3. **不一致键名**:在"opts"中,id:4使用"toId",id:16使用"nextid"。这不会使JSON无效,但可能导致逻辑错误。 主要问题是缺少逗号在数组元素之间。 在回答中,我需要: - 用中文回答。 - 回答完问题后,提出3-5个相关问题。 - 相关问题必须以"§§相关问题§§"开头,第一行完整输出。 - 禁止换行分散。 所以,回答结构: 1. 回答问题:JSON格式是否正确?指出错误。 2. 然后输出"§§相关问题§§",并列出3-5个问题。 回答内容: - 首先,确认JSON格式有错误:缺少逗号在id:21和id:22之间。 - 另外,指出拼写错误和不一致。 最后,提出相关问题。 相关问题基于用户的问题和我的回答:用户问JSON格式对不对,我指出错误,所以相关问题可以关于JSON格式、错误修复、游戏脚本等。 例如: 1. 如何修复JSON中的语法错误? 2. JSON中键名不一致有什么影响? 3. 在游戏脚本中,如何处理对话选项? 4. 等等。 确保3-5个问题。</think>您的JSON格式存在一些错误和不一致之处。以下是主要问题分析: 1. **语法错误(关键问题)**: - 在数组元素之间缺少逗号分隔符。具体在 `id:21` 和 `id:22` 的对象之间没有逗号(例如,`id:21` 结束后直接跟 `id:22`)。正确的JSON要求在数组中的每个对象后添加逗号(除了最后一个对象)。例如: ```json { "id":21, "msg":"能量不断被吸入卡比体内,在短暂光芒之后,卡比稳定下来后让帝帝帝将苹果带回,蒂芙苏醒,帝帝帝含泪道谢" }, // 这里必须添加逗号 { "id":22, "msg":"卡比吸收过量能量裂变成暗黑卡比,引发新危机" } ``` 缺少逗号会使整个JSON解析失败。 2. **键名不一致(逻辑问题,但JSON格式上有效)**: - 在 `opts` 选项中,`id:4` 使用键 `"toId"`(如 `"toId": 8`),而 `id:16` 使用键 `"nextid"`(如 `"nextid":17`)。JSON语法允许不同键名,但会导致代码逻辑混乱,建议统一为 `"toId"` 或 `"nextid"`。 3. **拼写和字符问题(不影响JSON有效性,但建议修正)**: - 角色名 `"Kriby"` 多处出现(如 `id:4`, `id:6`, `id:12`, `id:16`, `id:20`),标准拼写应为 `"Kirby"`。 - `id:14` 和 `id:19` 的 `"avatar"` 和 `"name"` 值中(如 `"Avatars/MetaKnight‌"`),包含零宽空格(U+200C),虽然JSON允许Unicode字符,但可能引起解析或显示问题,建议移除。 4. **其他细节**: - 整体结构正确:数组以 `[` 开头、`]` 结尾,键名使用双引号,值类型(数字、字符串、数组)符合JSON规范。 - 缺少逗号是唯一会使JSON无效的错误;其他问题属于数据一致性和可读性范畴。 **修复建议**:添加缺失的逗号,并统一键名(如将 `opts` 中的 `"nextid"` 改为 `"toId"`),修正拼写错误。使用在线JSON验证工具(如 JSONLint)测试格式。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值