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

天分享鱼皮的 编程导航 里一位鱼友跨境电商独角兽公司的面经,三面顺利拿下 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 全程直播带做的 原创项目 ,手把手带你 掌握独立开发项目的方法 ,并且提供 现成的简历写法 ,成功帮助不少小伙伴找到了工作。

并且星球里已经汇总了求职过程中的高频问题,求职前完整阅读一遍,能少走很多弯路,找工作不迷茫!

欢迎感兴趣的同学加入体验,限时领取 36 元优惠券:

三天内不满意可全额退款,有没有用自己试了才知道

往期推荐

我的编程学习小圈子

出息了,我也可以给开源项目贡献!

短信登录,还能这样玩?

没有好看的粘贴工具?看看这个!

备战四个月,每天学14小时,我成了。。

150 位,我们出成果了!

相关推荐

  • 一个小公司的技术开发心酸事(已倒闭)
  • 高校老师因发消息爱打问号被学生投诉!被学校撤职后反手上诉获赔13万
  • 来势汹汹的Linux系统激爆网络神秘地带
  • 重磅发布:aiXcoder-7B代码大模型正式开源
  • 开源副屏「操作系统」底层采用Electron,是生产力工具还是美丽的废物?
  • 基于OpenCV的路面质量检测
  • 判定二级教学事故!大学教师被解聘
  • 【深度学习】Unet++(pytorch实现)
  • 【深度学习】目标检测的常用数据处理方法!
  • 手机可以跑大模型了,一夜下载量超2000
  • 开源go实现的IOT物联网新基建平台
  • 11.8K Star开源了!从此DevOps有了新选择
  • 我为什么使用 Linux 做开发?
  • 重磅:2024 年 QS 世界大学学科排名出炉!
  • 外包巨头大规模裁员,砍掉 22063 人!
  • 王慧文,投了个中国版Character.AI
  • 搭建完美的技术写作环境,第1-8章
  • 太神了!首位 AI 程序员上线,居然可以修复自己写的bug
  • 原子化状态管理库 Jotai,它和 Zustand 有啥区别?
  • 剑指Sora!120秒超长AI视频模型免费开玩