avatar-decorate
获赞
97
粉丝
28
关注
12
看过 TA
1685
Harvard University
2024
Java
IP属地:澳大利亚
暂未填写个人简介
私信
关注
头像
今天 16:41
已编辑
小红书_广告投放_后端开发
总所周知, shopee 是 Go 语言大厂。 我一个Java程序员去就是自讨苦吃。  实习生可能还支持换语言,正式校招一般不能。所以还没面我就知道挂了。还好面试官知道如何找话,以致于不会太无聊。不过该面试官是我这次秋招各大厂面试官里面目前唯一敢问我项目细节的。很有意思,很多面试官看见我这项目就知难而退了。项目拷打。撮合引擎 为什么需要,撮合引擎?  DEX 和CEX 的区别, 聊了聊  Uniswap底层架构。 又聊了聊 中心化交易所的撮合引擎的基础架构和常用技术选项。、AMM公式:x∗y=k分库分表 怎么实现,细节?  P99的依据?消息队列  冥等? 3 种方案, 锁, token, 去重表。还问我冷钱包。我说钱包地址是椭圆曲线密码学生成的,每个人的转账钱包地址都是可以快速生成。只要用户交易所掌握地址的私钥。面试官不知道区块链浏览器的存在。 任何区块链交易都是记录在案的。 我估计他是想问消息队列消息丢失的。 但是我说实话,区块链上的交易不可能丢失。八股, redis,缓存三兄弟。mysql 索引系统: epoll   java怎么和操作系统 的文件交互的?  和内存交互的?算法题: LRU ,我时间不够,面试官久催促我结束了。 大概写完了,但是没run,面试官好像也不关心run没run成功。无所谓,反正是KPI。到时候给个“好评”就行。能和面试官聊聊我的项目我已经很感激了。
查看15道真题和解析
0 点赞 评论 收藏
分享
头像
今天 13:02
已编辑
小红书_广告投放_后端开发
9.22 更新 挂 感谢信### 面试问题列表#### Java 基础1.  抽象类和接口的区别是什么?2.  (抽象类和接口)在面向对象的属性上有什么区别?3.  Java的内存(JVM)主要有哪些区域?4.  堆(Heap)和栈(Stack)的主要区别是什么?它们在运行时主要负责哪些模块?5.  堆和栈在物理地址的分配上有什么区别?6.  垃圾回收的一些主要算法有哪些?7.  垃圾回收器的一个基本原理可以简单讲一下吗?(针对标记清除、标记复制、标记整理等算法)8.  目前常见的系统使用的是哪种垃圾回收算法?#### Spring 框架1.  在 Spring 当中,Bean Factory 和 Application Context 有什么区别?2.  平常使用过哪些 Spring 注解?它们的作用是什么?#### 消息队列 (Message Queue)1.  (RocketMQ/Kafka)消息队列的主要结构是怎样的?2.  在使用过程中有遇到过消息积压的情况吗?3.  如果遇到消息积压的情况,你给出的方案是消费端/生产端进行限流或者是消费端进行扩容,扩容 Partition 对消费端大概有什么样的影响?4.  Kafka 是通过哪些机制来保证消息不丢失的?如果遇到了消息丢失,通常的处理方法是怎样的?#### 数据库 (Database)1.  数据库事务可能遇到的死锁问题,死锁的四个条件是什么?2.  数据库索引大概分为哪几类?3.  B+树和哈希索引最主要的区别是什么?4.  在查询时,选择对哪些字段建立索引的基本原则是什么?#### 缓存 (Cache)1.  缓存使用过程中会出现几大问题?(缓存穿透、击穿、雪崩)2.  如何保证缓存数据和 MySQL 数据的一致性?用到了哪些机制?#### 系统设计与高并发1.  配置了一些限流能力,令牌桶策略是怎么样实现的?2.  在高并发场景下,你是怎么样去评估流量需要做限流的?(QPS 达到多少)#### 运维与监控1.  (上线后)为了保证系统稳定性做了哪些监控?2.  除了CPU情况,还需要关注哪些指标?(比如新上接口或功能)#### 个人与综合能力1.  你在实习过程当中最大的提升是在哪些方面?2.  日常开发过程中,有关注一些 AI 的使用吗?(在开发或学校中)#### 计算机网络与操作系统1.  OSI 的七层协议简单描述一下。2.  TCP 和 UDP 协议的区别是什么?3.  TCP 存在一个粘包的问题,可以简单描述一下吗?4.  进程间的通信方式主要有哪些?5.  进程创建后的状态流转是怎样的?6.  进程在什么状态下会变为阻塞状态?在哪些情况下又会由阻塞转变为执行状态?### 面试总结本次面试主要考察了候选人作为后端开发工程师所需具备的综合技术能力。考察范围从核心的 **Java 基础**(JVM内存模型、垃圾回收)和 **Spring 框架**,延伸到了分布式系统中常见的**消息队列**、**数据库**(事务、索引)、**缓存**(一致性、常见问题)等重要组件。面试官通过项目经历,深入考察了候选人在**高并发**场景下的系统设计能力,如限流策略(令牌桶)和线上**监控运维**的经验。此外,面试也覆盖了**计算机网络**(TCP/UDP, OSI模型)和**操作系统**(进程通信、状态流转)等计算机基础知识,展现了对候选人基础功底的重视。最后,还通过开放性问题了解了候选人的**实习成长**以及对**AI技术在开发中应用**的看法。总体来看,这是一次全面且有深度的技术面试,重点评估了候选人的Java后端技术栈、分布式系统实践经验以及扎实的计算机科学基础。
我的秋招日记
0 点赞 评论 收藏
分享
头像
09-17 15:14
已编辑
小红书_广告投放_后端开发
好的,这是一份根据你提供的对话整理的Java后端开发面试经验(面经),还原了面试流程、技术问答和核心考察点。-----### **小米Java后端实习岗面试经验****面试时间:** 约25分钟**面试形式:** 语音面试-----#### **一、开场与项目经历深挖 (约10分钟)**面试官非常直接,在简单的问好和确认身份后,直接切入简历中的实习经历。**面试官:** 看你最近在XXX实习过,能具体讲讲吗?**我:** (介绍了自己所在的团队和业务)XXX**面试官:** 你在里面具体做了什么事?**我:**实习部分 省略布隆过滤器    缓存穿透    分库分表-----#### **二、Java基础知识考察 (约5分钟)**面试官通过在线聊天窗口打字的方式,开始考察Java基础。**问题1:字符串比较**面试官打出代码:```javaString a = // ... some string initializationif (a == "Hello") {// ... do something}```**面试官:** “这样写代码有问题吗?”**我:*** “有问题,这里应该用`.equals()`方法进行比较,而不是用`==`。”* (尝试解释原因)“`==`对于引用类型,比较的是对象的内存地址。而`.equals()`方法(在String类中被重写后)比较的是字符串的内容是否相同。”* *(自我复盘:当时解释得有点磕巴,一开始把两个的作用说反了,但很快纠正了过来。核心点答对了,但表达不够流畅。)***问题2:浮点数比较**面试官接着打出代码:```javadouble a = 2.0;if (a == 2) {// ... do something}```**面试官:** “这样可以吗?”**我:*** “我觉得这样应该是可以的。”* *(自我复盘:这是一个经典的陷阱题。虽然`2.0 == 2`在Java中会返回`true`,因为整数`2`会被自动类型提升为`double`。但面试官实际想考察的是浮点数精度问题。更严谨的回答应该是:‘对于简单的、可以精确表示的浮点数,这样做没问题。但通常不推荐使用==直接比较两个浮点数,因为计算机存储浮点数存在精度误差,应该使用一个极小的阈值(epsilon)来判断两者之差的绝对值是否足够小。’)*-----#### **三、算法题 (约10分钟)**赎金信 改编版, 在一个数组中找到只存在一次的数。-----#### **总结**这次面试整体节奏较快,问题由浅入深,比较典型。1.  **项目经历是重点:** 面试官非常关注你在实习项目中具体做了什么、遇到了什么问题、如何解决的、以及最终产出了什么价值。能够清晰地表达出项目的\*\*背景(Problem)、方案(Action)、结果(Result)\*\*非常重要。2.  **技术深度:** 对于简历上写的技术点,如“Redis优化”,一定要准备好被深挖,能够讲清楚其原理、实现细节和选型考量。3.  **基础知识需扎实:** Java基础(如`==` vs `equals`,浮点数比较)是必考题,不仅要知其然,还要知其所以然,能清晰准确地表达出来。4.  **算法能力:** 对于经典的算法题,要能迅速给出最优解法,并准确分析其时空复杂度。在沟通思路时,尽量主动、完整地把整个解法流程和优缺点都讲清楚。
查看4道真题和解析
0 点赞 评论 收藏
分享
头像
09-11 19:17
已编辑
小红书_广告投放_后端开发
前景提要, 被字节的HR 主动打电话过来。邀请面试。行,反正秋招面就面。我详细询问了岗位JD, HR 一口咬定是Java的岗位。然后,反问发现面试官组里业务和JD 只能说 毫无关系。连语言都是GO。以后 HR再打电话, 一定要问清 组的业务 和 语言。  面试官是go的,他知道我不会go,没办法问我java ,也没办法问我go。    相当于直接少了一半的知识点可以问。  就只能聚焦于问,数据库,redis 还有消息队列。 这样每个问题会被挖的非常非常深。而且都是场景题拷打,我一时半会真顶不住。 毕竟校招生考场景题。。。我也面过 哔哩哔哩  ,虾皮 等公司用go的,面试都会出现这种情况。  而且我觉得大部分情况来说,实习可以接受转语言。而校招正式岗除非,特别特别优秀。 不然一般就会挂。所以,刚面完就知道挂了。算了,希望别面评太差。手撕:手撕一道, sql 题, 一道滑动窗口。### 核心技术问题* **Redis**:* 排行榜如何用 Redis **Sorted Set** 实现?它的底层数据结构是什么?你对跳表(skip list)了解多少?* 在限流、缓存和去重等场景中,你还用过 Redis 的哪些功能?* **消息队列(MQ)**:* 你用 RocketMQ 做什么?如何保证消息的**可靠性**(不丢失)和**幂等性**(不重复消费)?* 当消息大量积压时,你会怎么处理?* **并发与限流**:* 你简历中提到的高并发限流是如何实现的?* 你选择的**令牌桶算法**在实际生产中是如何工作的?特别是令牌是如何生成的?这种实现方式有什么潜在问题?* **数据库**:* 你用过哪些数据库?对 MySQL 了解多少?* **InnoDB** 为什么要用 **B+树** 作为索引结构?相比于其他树结构有什么优势?* 在分布式系统中,为什么主键推荐使用自增 ID 而不是雪花算法生成的 ID?这和数据库底层存储有什么关系?* `VARCHAR(50)` 和 `VARCHAR(5000)` 在存储和性能上有何区别?* 数据库死锁是如何产生的?你有什么解决方案?* **系统与基础**:* Java 中什么时候用**多进程**,什么时候用**多线程**?它们的区别是什么?(我是第一次听说Java 有多进程这东西)* 你对**虚拟内存**有什么了解?* 你在实习期间主要负责哪些工作?* 你做的排行榜是怎么实现的?* 你提到的“延迟消息解冻机制”具体是做什么的,解决了什么业务问题?* 你如何保证缓存和数据库的**数据一致性**?* 你提到的“先更新数据库,再删缓存”和“双删”方案,它们的实现细节和各自的缺陷是什么?特别是在读写分离场景下,如何解决读到旧数据的问题?技术深度与广度Redis:详细询问了Redis在排行榜、限流、缓存和去重表中的应用。特别关注了Sorted Set的底层实现(跳表)以及跳表本身的实现原理。此外,还考察了Redis数据类型的底层实现(例如,Set)以及你对Redis中各种数据结构的掌握程度。MQ(消息队列):主要围绕RocketMQ展开,询问了你使用MQ的目的(异步解耦和最终一致性),以及如何保证消息的可靠性(不丢失)、不重复消费(幂等性)以及如何处理消息积压。他特别对你提到的分布式锁、去重表和ACK确认机制等方案进行了追问,并深入探讨了它们在实际场景中的局限性。并发与限流:针对你简历中提到的高并发限流项目,详细询问了你实现的令牌桶算法。他追问了令牌的生成方式(定时任务)以及这种实现可能带来的问题(流量不平滑),试图考察你对算法原理的理解是否深入。数据库:MySQL:深入询问了InnoDB的索引结构(B+树),特别是它为什么选择B+树以及这种结构带来的优势(范围查询)。他还通过自增ID和雪花ID作为主键的例子,考察你对数据库底层存储和索引原理的理解。此外,还问到了死锁的产生和解决方法(包括MVCC)。数据类型:通过VARCHAR(50)和VARCHAR(5000)的对比,考察你对MySQL数据类型存储和性能的理解。Java基础:询问了Java中多进程与多线程的区别,以及在什么场景下会选择使用它们。操作系统:简单询问了虚拟内存的概念和作用。---总结整体来看,面试官不仅关心你“做了什么”,更关心你“为什么这么做”以及“你是怎么做的”。他通过层层递进的追问,试图考察你是否真正理解了项目背后的技术原理,以及你是否有能力独立思考并解决实际问题。他多次对你的回答进行反问和质疑,这通常是为了测试你面对压力的应变能力以及对技术细节的掌握程度。建议你重点回顾以下几个知识点:Redis中Sorted Set的底层原理(跳表),以及跳表的具体实现。令牌桶和漏桶算法的原理对比,以及如何实现一个真正平滑的限流。缓存和数据库双删方案在读写分离场景下的一致性问题。MySQL索引,特别是为什么主键建议使用自增ID。多进程和多线程在不同场景下的选择和优劣。
查看18道真题和解析
0 点赞 评论 收藏
分享
公司做AI相关,实习工资开的很高。 看起来福利不错。想着试试投一投。   2天后HR打来电话约了笔试和面试。笔试:  LRU,典,没什么好说的。面试:1.    自我介绍,很久没做了。2.     项目和实习,项目是用的马哥的铁路。 面试官是比较了解这些东西的。直接“我记得这个项目是github上的一个开源项目吧。那你应该是做的二次开发吧。那我不问这个了。  实习问的大概是做了些什么,印象最深刻的是什么。3.   手撕:请设计一个列表缓存容器(key -> str, value.>List),支持根据id对缓存值进行增删改查,即支持以下方法:1. get(String id)-> List:根据给走的id获取对应的完整有序列表。如果id不存在,返回nul。2. slice(String id, int fromIndex, int toIndex)-> List:根据给定的id获取对应有序列表的子列表范围为[fromIndex, toIndex).如果id不存在或索引越界,返回null,3. replace(String id, List value)-> List:使用给定的value替换id对应的有序列表,并返回被替换的原列表。如果id不存在,则新增该键值对并返回null4. insertHead(String id, List value)-> null:将value插入到id对应有序列表的头部。如果id不存在,则新增该键值对。5.removeHead(String id, int count)-> null:移除id对应有序列表的前count个元素。如果当前列表中元素数量小于count,则移除所有元素。我很少做设计题。刚看见懵逼了。 废了15分钟左右写出来。 明显,面试官绷不住了。4. 讨论了synchronized ,hashtable,concurrenthashmap等,怎么给这个缓存容器做线程安全。5.反问,一些start-up公司的技术问题。 很有意思。面试官不喜欢八股和面试冲刺项目,要深厚的基础和虚心的态度。 这也是为什么我被挂的原因。
查看5道真题和解析
0 点赞 评论 收藏
分享
查看17道真题和解析
0 点赞 评论 收藏
分享
头像
2024-04-25 11:05
已编辑
小红书_广告投放_后端开发
查看16道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务