2021年春招首发!阿里云云原生实习一二三面面经,看完的都进阿里了!

前言

不得不说时间是越过越快,依稀记得去年的金九银十招聘季就在昨天,一转眼金三银四就来到了眼前。之前在和粉丝聊天的时候都在催我出一期阿里的面经。我联系了在阿里面试的朋友拿到了第一手资料熬夜帮大家整理好了,满满的都是细节,建议反复观看!

云原生k8s一面

  • 自我介绍
  • 读研还是直接工作?工作
  • 开局做算法题,两数之和,哈希表轻松解决
  • Arrays.sort使用了什么排序算法
  • 解释下快排的过程
  • 快排的空间复杂度+推导
  • 除了快排还有哪些排序算法
  • 排序算法的稳定性(如果本身有序,是否会打乱原来的相对位置,这个我答错了,然后这里面试官告诉了我增设个定义)
  • 基于第八点问我冒泡排序是否稳定
  • 问我常用的数据结构,答了个hashmap
  • 如果让我实现一个hasmap,会怎么做
  • 进程和线程的关系和区别
  • .进程和线程共享了资源,线程也自己独有一些资源,那么具体哪些资源是共享的,哪些资源是线程独有的
  • 传输层的协议常用的有哪些
  • TCP和UDP的区别
  • TCP怎么做到可靠传输
  • 16点提到了滑动窗口,所以追问滑动窗口除了用在可靠传输的保证,还问了有什么作用,我答的是流量控制
  • 追问滑动窗口流量控制怎么实现的,这里除了课本上的那种一开始两倍增长然后再线性增长,然后再减到一半,然后我追答了一个bbr,所以19问追问bbr
  • bbr的过程
  • 追问bbr相比于传统流量控制算法的优点
  • 问mysql使用的时候有几种可用的索引方式(业务层面)
  • 聚簇索引,非聚簇索引的区别
  • 普通索引在实现的时候可以用哪些技术来实现
  • 除了innodb 还用过其他引擎吗(提了myisam和内存索引)
  • myisam索引有没有什么地方用到的
  • 应用在线上运行比较长时间后,sql查询比较慢,怎么排查(这里我把explain里面的字段含义都答了一遍,因为提到了因为扫描函数估算错误而导致的索引错误选择而导致的效率低下,所以有了27的追问)
  • 如果因为索引选择错误而导致了选择索引错误,那有什么办法修正呢,我回答了analyase xxx和在sql语句里面强制指定索引
  • 问项目
  • 为什么很多项目都选择Spring?
  • 为什么在项目中使用ioc?(这里我答了交给spring管理之后,可以通过干预Spring Bean的生命周期来达到一个可扩展 解耦合的地步,由于答了Spring管理bean的生命周期,所以有了31问的追问)
  • Spring的生命周期,(反正大概把源码那一套东西说了一下,大概答了4分钟,由于提到了Spring在postBeforeInstiation提供了给bean aop的机会,所以有了32问的追问)
  • Spring自身有什么地方使用了aop么?这我答的是 @Transactional
  • @Transactional在使用的时候有没有遇见过因为aop的缺陷而导致的不生效的问题,比如一个类里,没加Transactional的方法,调用加了@Transactional注解的方法,可能生效也可能不生效,不生效的可能原因是什么,要求围绕aop的实现来答,这个我答的不好,面试官要我下去之后看看源码再思考一下
  • netty有实际使用过吗
  • 问epoll原理
  • 问我gc调优经验,说了一个内存泄漏排查,还有上线容量估算
  • 问我K8S了解什么
  • 排查系统性能问题的时候,用什么思路和工具,uptime top pidstat netstat vmstat dstat sar -n DEV能答的工具还有一些字段的含义都丢出去了,然后说了软中断 硬中断 iowait 进程之间wait过高的时候,排查的思路
  • K8S了解多少,项目中用过吗
  • 最近在学什么
  • 有什么要问的

得出一个经验,面试的内容和难度可能会随着你的回答而变化,阿里的算法两数之和是真的舒服。

云原生k8s二面(2月19早上9点半面的,电话面)

  • 你的学习经历?(这边说了看过的一些中间件的源码,然后最近看的源码)
  • 你看过K8S源码吗?(这个答了没有0)
  • 你说说你知道的K8S原理,尽可能详细的?(这里答了K8S里面各种组件和大致原理,稍微漏了东西,不过漏掉东西是因为这个问题有点大,一时间漏了,后面在追问项目细节的时候他追问回来了)
  • K8S调度pod到节点的原理(这里答了和nodeAffinity、污点、资源占用和pod的资源需求相关的字段有关的一些东西,这里多答了一个label 和 selector有关的,后来想想好像不该答)
  • 问项目
  • 问我项目里的自定义集群怎么做的?(这里我答了openresty,我那个项目是要对接另外一个开源产品,出于某些原因要把一些业务逻辑写在网关那)
  • 你项目有用到K8S吗(没有)?然后追问了为什么不用?我答的因为我对接的那个开源产品是要修改他源码的认证流程的,我当时还不具备去看那个产品和K8S相关的源码,第一反应是不要去接K8S的
  • 追问其他项目细节(细节我大概都对上了)
  • 如果现在让你把那个项目用K8S来做的话你会怎么做?(因为一时间没get到面试官要问的点,就给了个不完美方案,然后就有了10 11的追问)
  • 针对我项目问:接入K8S之后,网关的转发逻辑怎么处理(在每个pod启动的时候,在他的生命周期里对网关进行一个配置路由的过程)
  • 然后问了如果每个用户都需要一个硬盘空间的话,应该用什么(这个就是面试官在追问我第三点没答出来的有状态服务和volume那套了,然后我才反应过来,然后就回答了在pod的template里面用volumeClaim申请存储,然后挂载到某个目录就行)
  • 用户态和内核态的区别
  • 容器了解吗(答的大概了解,不过我只会docker容器)
  • docker容器实现资源隔离原理(答了Linux的cgroup和namespace技术)
  • TCP和UDP的区别
  • java进程和go进程应该怎么通信(这个我回答的是,如果能统一通信协议和序列化协议的话,可以使用grpc,然后就是http,然后答了个socket,还有同一台机器上ipc)
  • 做了道回溯题,比如下面这个矩阵,找出目标的字符串,ALBABA,返回true或false,下面这个的话从0 0开始往下走然后一直往右走就是了
    A B C D E
    L B A B A
    W D A D L
  • 问我为什么学了K8S(我回答的是,一开始我被他提供的一些特性所吸引就学了一下,然后后来看Dubbo源码的时候就很好奇,这些东西直接在K8S上做就好了,当时还迷惑了一段时间,后来慢慢学习才知道,dubbo3.0就在干这事,所以最近就看起了dubbo和k8s)
  • 因为18问的说法,所以这一问追问了dubbo的什么东西可以直接在k8s做(一开始先说了服务自省的机制,这一点是和SpringCloud 云原生统一的基础,服务注册和pod的生命周期结合,还有API Client,或者是DNS Client,还有和istio结合)
  • 反问环节,你们部门是做什么的,这里面试官回答的是弄K8S的。(怪不得问了那么多K8S的东西)

云原生k8s三面(2月19下午4点22打电话约我下午5点面试,稍微有点匆忙,视频面)

  • 自我介绍(我就说了三句,他觉得有点简洁)
  • 是怎么学习一些技术的
  • 问项目?
  • 问我项目里面为什么网关选择openresty(nginx+lua)?(对接着开源产品的官方文档直接选了nginx,然后后来业务逻辑复杂之后发现要在网关层加逻辑,就用了openresty)
  • nginx的缺点?(该配置需要reload)
  • 追问那如果现在让你技术选型你会怎么选?(我会选择开源产品本身支持的一个可配置的网络代理)
  • 详细的追问了项目里的认证流程的细节
  • 问了项目里其他人怎么分工
  • 还有其他落地的项目吗?
  • 问我的秒杀方案(rocketmq事务+redis自增自减+秒杀逻辑和openresty网关降级请求的处理)
  • 追问那怎么保证redis的数据和数据库一致呢?(我说我的方案如果解耦的话是不需要保证强一致吧)
  • 那像这样的话,秒杀和正常购物流程怎么共存呢,你如果是用这种方案去保证的话,是没有办法保证秒杀不影响正常购物吧(讲到这我就认输了,我自己就说可能设计的不周到,说实话如果不是没写过什么真正的项目,我是真的不想写秒杀的,我一直觉得秒杀是个雷区,不过面试官还是很好人的,没为难我,说我思路大概没错,尽可能保证了安全,但是真正的电商系统没有你们想象的那么简单,可能还会涉及跨地区调度,比如广州的人在广州这发货,北京那边的人从北京那边发货)。
  • 为什么你觉得redis原子性的自增+RocketMQ会比直接操作mysql的效率高呢?(这里把redis原子性自增自减都答了,还有把RocketMQ的架构答上去了,还有mysql的日志和rocketmq的日志,因为他感觉我一直没答到点上,在他一步一步诱导下,mysql 可重复读下的next-key lock也说出来了,不过这里他还有点惊讶我居然知道next-key lock,可是似乎还不是他想要的答案,最后在进一步引导终于答出来了,rocketmq投递消息到commitlog的时候,是单线程顺序写,而mysql要靠锁,其实我一开始回答了rocketmq利用了磁盘的顺序写的,我感觉我应该答到点上了)
  • 之后打算工作还是读研,还有之后的学习计划(直接工作,研究dubbo3.0和k8s相关的一些东西)
  • 为什么学k8s?和我二面答的差不多(先学了个大概,然后看了dubbo源码对为什么有些事不直接在k8s上做感到好奇,然后知道dubbo3.0是这么干之后就开始学)
  • 你还投了阿里的其他部门吗?
  • kubectl去更新一个pod的配置的时候,kubenetes发生了什么(这个答的巨差,因为之前面试一直没问过,所以k8s源码我没怎么了解,虽然立过要看k8s源码的flag,但是综合考虑还是没去看,不过如果有机会能进到这个部门,我肯定第一时间去看的)
  • 然后就跟我说,因为是提前批嘛,系统不流通,到时候录入系统的时候只能录一个的,到时如果不注意容易进到自己不想进的部门。然后我就说我会和内推的师兄交流好?

阿里提前批他通知我过了,我师兄说等系统开放之后可以录入系统,内推我的师兄说进入系统之后就是offer发放的流程了,就没面试了!

总结

面试难度可以说中规中矩,没有说特别难,也没有说特别简单,想要面过一定得做好充足的前期准备!

另外我这里为大家准备了一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套大厂面试题(不断更新中),希望大家都能找到心仪的工作!
有需要的朋友点击这里备注csdn,直接下载即可

猜你喜欢

转载自blog.csdn.net/weixin_47277170/article/details/113936120