专栏名称: 程序员鱼皮
鹅厂全栈开发,持续分享编程技法和实用项目
目录
相关文章推荐
单号码查入口  ·  发现一个奇怪的现象:穷人的富养是带孩子到处旅 ... ·  21 小时前  
单号码查入口  ·  发现一个奇怪的现象:穷人的富养是带孩子到处旅 ... ·  21 小时前  
三个妈妈六个娃  ·  人在英国,遭遇了一次紧急撤离 ·  5 天前  
51好读  ›  专栏  ›  程序员鱼皮

三轮电商公司面试,已拿 Offer!

程序员鱼皮  · 公众号  ·  · 2024-04-13 22:50

正文

天分享鱼皮的 编程导航 里一位鱼友跨境电商独角兽公司的面经,三面顺利拿下 Offer,大家可以看看在项目、八股文、技术方面,企业的关注重点。

星球原文链接:https://t.zsxq.com/11g51QIzs

本文已获原作者授权

一面面经

1、项目介绍,项目背景

2、讲一下项目的远程调用如何实现的?

答: A、为什么要远程调用 B、远程调用的技术选型( Feign 和 RPC )以及二者的技术差异

3、你的项目为什么要用到 RabbitMQ ?你是如何应用 RabbitMQ 的?

答: A、短信异步发送 B、接口调用失败的回滚机制

4、接口限流是如何实现的?

答: A、为什么要限流?B、限流算法的选择(令牌桶算法和漏桶算法)

5、Redis如何解决订单幂等性?

答: 唯一标识订单请求,Redis 记录成果处理的订单,根据订单有效时间自动淘汰记录的数据。

6、订单支付超时问题为什么选择死信队列来解决?

答: A、自己了解的技术栈有限 B、消息队列的可靠性非常好,可以保障支付超时的信息不会丢失

7、编程题:查询树中某个节点的所有后代节点

答: 递归即可

二面面经

1、开局先问为什么实习辞职?

2、为什么要从上一家公司离职?

答: 真实回答了面试官

3、为什么要用编码算法呢?编码算法是怎么实现的?

答: 根据公司的业务场景回答为什么,根据自己对编码算法的理解回答怎么实现。

4、项目的 RPC 远程调用是如何实现的?有了解过其他实现方式吗?

答: 从服务注册,服务发现,服务调用三个方面讲了一下我的理解;其他实现方式的话,我对比了 Feign 和 RPC 的实现。

5、TCP 协议如何保证可靠性?

答: 1)确认和重传:接收方确认收到数据后发送确认消息,发送方在一定时间内未收到确认消息则会重传数据。

2)序号和确认号:TCP 使用序号和确认号标识数据包的顺序和确认情况。

3)流量控制:通过滑动窗口机制控制发送速率,防止接收方处理不及时。

4)拥塞控制:根据网络拥塞程度调整发送速率,避免网络拥塞导致丢包和传输延迟增加。

5)超时和重传:发送方在一定时间内未收到确认消息时会触发超时重传机制,确保数据传输的可靠性。

6、TCP 首部有那些字段?

答: TCP 首部包括源端口号、目标端口号、序列号、确认号、数据偏移、控制位、窗口大小、校验和、紧急指针、选项和填充。这些字段用于标识连接的端口、排序和确认数据、指示数据的偏移和长度、控制连接状态、指示接收窗口大小、校验数据的完整性,以及提供额外的功能和信息。

7、滑动窗口和拥塞策略你了解吗?他们的作用是什么?原理了解吗?

答: 滑动窗口和拥塞控制是 TCP 协议中的两个关键机制,它们的作用是保证数据的可靠传输和网络的稳定性。滑动窗口机制用于实现流量控制,通过动态调整发送数据的量来确保接收方能够及时处理数据,防止发送方发送速率过快导致接收方不堪重负。拥塞控制则是为了防止网络拥塞,通过动态调整发送数据的速率来适应网络的容量,保证网络的稳定性和可靠性。这两个机制的原理是通过发送方和接收方之间的交互来实现的,发送方根据接收方的通知动态调整发送数据的量和速率,以保证数据能够在网络中稳定传输。

8、MySQL 有一个自增主键 id,查询 id > 5,用到索引吗?< 5 可以吗?为什么可以用到索引?

答: 我的是回答是不会,因为这是个开区间的查询,数据有很大的不确定性,可能会涉及多个数据页的磁盘 IO,查询效率可能会很低,不符合索引提高查询效率的目的。

网上查的答案是有可能会用到索引,有可能不会用到索引,要根据具体的查询情况去分析。

9、id + 1 = 5会用到索引吗?如果存储的是字符串能用到索引吗?

答: 我的回答是不会,同样是从数据的不确定去回答。

字符串我的回答是看情况,如果字符串是确定的且符合最左前缀原则,那就可以用到索引。

10、Java 你看过哪些源码?

答: 我已经阅读过一些Java的源码,包括但不限于Java标准库中的一些常用类和接口,如 java.lang、java.util、java.io 等。此外,我还研究过一些流行的开源 Java 框架和库的源码,比如 Spring 框架、Hibernate 框架、Guava 库等。

11、HashMap 的链表什么时候转红黑树?为什么是链表转红黑树的阈值是8?

答: 节点到 8 的时候转红黑树,因为当链表的节点达到 8 个时,哈希冲突的概率已经非常大了,查询的性能有可能会从 o(1) 退化成链表的o(n) 。

12、线程池那块你看过哪些?实践过吗?

答: 自定义过线程池,也在批量导入数据时实践过了,讲了一下线程池的 7 个参数以及线程池的拒绝策略。

13、RPC 是怎么实现A服务调B服务,原理是什么?如果让你实现一个 RPC ,你会如何实现?

答: RPC(Remote Procedure Call,远程过程调用)是一种技术,允许一个进程通过网络调用另一个进程上的函数或过程,就像调用本地函数一样。实现 RPC 的基本原理包括定义接口、序列化参数、网络传输、反序列化参数、调用远程函数、序列化返回值、网络传输返回值和反序列化返回值等步骤。要实现一个 RPC,需要考虑通信协议、序列化和反序列化、接口定义、网络通信、服务注册与发现、负载均衡和容错处理、安全性和性能优化等方面的问题。

14、编程题:给定 n 个线程,线程按顺序交叉打印 0 - 100

三面面经

1、上家实习公司离职原因?

2、为什么选择我们公司?

3、反问环节,公司的核心业务,上班时间,薪资待遇?

鱼友面试感悟

鱼友在三次面试后的感悟:

一面,毕竟是自己以后可能在一个项目工作的同事,这一面面试官问的一般不太难,更注重询问项目背后的原理和动机,其次才是关于具体实现的细节。

到了二面,这一面可能是你到时候工作的小组长,面试更专注于考察个人的技术基础和深度,所以这面会相对于一面有一定的困难程度。

三面,也就是我们熟悉的 hr 面,看上面我发的面经,大家应该也可以感受到,这一面没有任何难度,就是问些你的基本情况和你的反问环节,自己想对公司方面的了结,这一面千万要放松心态,心平气和地面试,因为你的一举一动也是 hr 对你个人的考量。

在面试过程中一定要学会引导面试官关注自己擅长的方面,也就是往自己会的方面引导,但是也别给自己挖坑,自己不会还要引导,那样是坑害自己的,dog!

以上,就是今天的分享,希望对大家有帮助。



欢迎学编程的朋友加入鱼皮的 编程导航知识星球 ,和 3 万名 编程学习者共享知识、交流进步。

星球拥有 30+ 原创学习路线和专栏、 上千篇 优质编程学习求职干货。

还有鱼皮从 0 - 1 全程直播带做的 原创项目 ,手把手带你 掌握独立开发项目的方法 ,并且提供 现成的简历写法 ,成功帮助不少小伙伴找到了工作。







请到「今天看啥」查看全文