虾皮运维开发 一面凉经
时间线:12.11 于 ssob 投递,12.12 电话约面(hr 那边背景音非常吵,一听全是在打电话的),12.15 一面。面试时间 55 分钟,已挂。
个人反思总结
自己当时海投的时候没长眼睛,投了个大数据开发运维的。后来 hr 打电话过来约面的时候,犹豫了一下要不要接。想想还是接了,面试机会难得。也能正好借此机会学到不少东西,提升自己的表达能力和应场心态。
这次遇到的面试官听口音是位广东靛仔,非常温和。面试过程中他也很好奇为什么弄后端的投到运维来了,针对我不会的问题也会进行详细的解答,面试下来的体验非常nice。
最近心态有点焦躁,准确的说是非常着急。再过两个星期就到月底了,日常实习offer仍然遥遥无期,面试也很难约到。这段时间格外需要冷静和淡定,我不知道我心里的最后一道防线在哪,每天晚上忙完,一个人走在回宿舍的路上很是失落和郁闷
。
这次面试呈现的最大的一个问题是,不会或者只是了解一点的技术就别写简历上,不然会被直接问穿。这样会给面试官很差劲的印象,认为简历造假或者过度包装。我之前的旧版简历上写了一嘴会用docker进行容器化部署(实际上我只会敲一些docker的命令),结果被问了 docker 底层的一些机制。这个我压根不会,当时整的非常尴尬。

面试内容如下
个人背景询问
- 先做一下简单的自我介绍
- 你这两个项目都是基于Java写的,是吧?
- 你有用 Go 语言写过什么项目吗?
- 你这边说那个计算机博弈大赛,这个赛事可以简单介绍一下吗?
- 这个应该是个团队的比赛,你们组有多少个人呢? 那这个怎么分工呢?你们那个核心代码是谁写的?
- 它的那个核心是什么?就是你怎么设定那个规则。是通过数据训练使它达到比较好的效果,还是说你优化了什么框架?
项目问题深挖
针对 校园生活服务平台(点评)
- 说一下你的两个项目经验,大致简单说一下
- 一人一单和并发问题是如何解决的?
- 对于缓存和库存一致性问题,你是怎么解决的?如果先更新数据库再删缓存,删除缓存失败了如何解决?
- 为什么要使用 Cache Aside 模式?还有其他的一些缓存模式吗?
- 那我印象中你这个用 Cache Aside 的话,它可能会有一个问题。假如你很高并发的情况下,你同时有多个访问在删缓存,然后跟你另外一个线程在读的时候,它可能假如你 A 先把那个缓存给更新了之后,是怎么保证在多并发的情况下,你这个是可以一致性? 假如你很多线程在访问的时候,你这个删缓存可能你删之前已经被别人又读了,那个缓存不是又更新上去了吗?
- 那个扣减库存是通过 MQ 处理,为什么要引入这个 MQ?
- 但是你引入这个中间件之后,不会有导致你扣减库存实际上它变慢的问题吗,也就是他延迟比较久的问题了吗? 我意思是库存假如你是直接调数据库的话,应该是比较快的。那如果你通过一个中间件,那应该起码应该得毫秒级别的 。
- 那个原子性问题是怎么解决的?就是“扣减库存+并发校验”这个流程的原子性保证?
- 对于原子性保证,有没有其他的一些方案?比如说直接使用 Redis 的那个事务?
针对铁路票务系统(12306)
- 我们过下一个项目,12306那个仿铁路购票系统,这个具体是做了啥?
- 我看你这里也有一个缓存跟数据更新的一个方式。这里看起来是用了不同的一个方案,对吧?用了那个 Binlog 监控?
- (后续追问)就是你起了个监控的进程或者脚本,是说监听了数据库的变化,然后去改缓存 Redis 是吧?写入的话就只更新了数据库对吧?
- (继续追问)那你这个也有个问题,就是你这个后台监控进程可能会挂的
- 我记得 12306 它有很大的一个技术难点,应该是说它有个库存扣减一致性问题,这里有没有涉及到或者怎么解决? 这个票务是很复杂的,是涉及到多个车站之间有很多种排列组合的一个情况 。(这边他说的是购票列车中间站点余票如何更新的解决方案)
- 好,你说一下那个责任链模式的请求校验流程,这个是怎么做的?为什么要这么做?
Linux 基础
- 好,我问个问题,就是我感觉因为你的这个项目经验应该是相对比较是偏后端开发的。我们这里是大数据运维工程师的,他是系统帮你投的吗?
- 我们考察一下 Linux 的一些知识 。你对 Linux 系统这边的了解程度怎么样?
- 如果 Linux 系统出现负载问题,比如你部署的服务应用很卡,我们要怎么去排查?
- 那你知道内核的日志在哪里可以看到吗?就是比如说我一个进程里,假设你出现了 OOM 了,或者说你的机器上有一些磁盘,或者说产生了比较大的一些问题的话,它会有日志在那个内核 。
- Linux 的文件系统有了解吗?比如说文件系统它分成了哪些部分组成,以及那个 Inode 的概念?
- MySQL 那个数据备份怎么做的?就是主从的数据一致如何保证?
- MySQL 的话,如果我们发现有连接泄露的问题,要怎么去处理? 就是你应用会连 MySQL,你可能会出现一些泄露的问题。比如说你有一些定期的任务,就不断的去访问那些 MySQL DB ,可能你有一些连接是没有关的,这种的话你可能会导致你的这个连接不停地暴涨。
Docker 容器技术
- Docker 的话,它跟虚拟机有什么区别?
- (追问)我不是问你本机部署层面,然后使用上有什么区别,我是问那个容器跟我们这个虚拟机,他们两个不都是为了虚拟出一个环境吗?他们之间的实现,有什么本质上的一个区别?(面试官后续提示:容器的话它没有自己的内核,它的内核其实用的是宿主机,但是虚拟机的话有自己的一个内核 。)
- 那 Docker 它是怎么实现隔离的?像你拉起了一个 MySQL 的话,你又拉起了一个 Redis 的一个。那他们之间是怎么实现隔离的?(面试官后续提示:他也是用的 Linux 那个 Namespace 的一个技术去做一些隔离,以及用 Cgroups 去做一些限制 )
算法题
- lc23 合并 k 个升序链表(hard)
算法最后没写出来正确的解法,写了个暴力做法和面试官解释了一下。在写代码的过程中,面试官继续追问:
- 我们这个是大数据 SRE 岗位,就是跟其他 SRE 岗位还是有一点点区别。你对大数据这边有什么了解吗?
反问
- 首先岗位适配度不太一样,我想问两个问题,一个是关于面试过程中表现的问题,我后续还有哪些地方需要补补,在技术栈方面
面试官回答:我感觉你那个开发能力其实表现的其实还是不错的。不过对于一些细节上,比如说你的仿 12306 项目。我作为面试官,我肯定是最想了解他那个那个海量并发和多区间库存扣减等核心难点问题。
然后像这种其他的,本身的都还可以,感觉没有什么问题,有些细节上需要进一步考虑,像缓存更新,我感觉应该还是可以做的更深入一点。不过针对我们这个岗位,我们其实主要可能会有一点点不是特别匹配的一个问题。就是我们也会基于跟其他面试者作一个比较,就横向比较去做一个考虑。
- 好,假设说这个面试通过,后续的流程是怎么样?
#面试时最害怕被问到的问题##牛客在线求职答疑中心##如何判断面试是否凉了##发面经攒人品##虾皮##投票#面试官回答:后续会有一轮二面 + hr 面
本专栏用于记录我的日常实习、暑期实习和秋招中面经的记录、反思和总结


