昨天 hr 面结束了,来许一波愿,顺便分享下面试题目,后期补上这些问题的答案以及一些想法。
我是找的学长内推的,刚开始有一次交流,也不知道算不算一面,主要问了下面的东西:
然后就是正式的一面了,一面比较细致,上来先做了一道算法题,题目很简单,剑指 offer 里的原题,顺时针打印矩阵, leetcode-cn.com/problems/sh…
下面是问题的记录:
总的来说这一次的面试体验不是很好,问的东西比较多,而且面试官真的把我的简历挖得很深,就连公众号里的文章他也看了,这点是我没想到的。面试官很 nice,一直都在和我探讨这些问题,气氛也不是很紧张,之后几天就迎来了二面。
不知道为什么,总觉得二面问的问题和一面比起来侧重点是平常学习生活中的,而不是基础知识了。
到了三面,基础知识问的不如前面几轮了,更多的是项目经验方面的东西,说实话这里也是我欠缺的地方,面试的问题如下:
介绍一下项目
项目是否复盘,如果说用户量/数据量/访问量非常大之后,你了解到的可以做哪些改造?
SpringBoot 有深入了解吗?和 Spring Cloud 有什么差别吗?
SpringBoot 核心框架包含什么?SpringCloud 一套微服务的框架中间有什么部分你是比较熟悉的,详细介绍一下。
SpringBoot 容器启动的大致流程(这个不会)
SpringCloud 在 SpringBoot 的基础上扩展了什么?(我提到了注册中心,作用是什么说了下)
多线程,几种线程的创建方式(thread、runnable、callable),使用的时候有什么场景约束(在什么场景下使用什么方式)
多线程情况下临界区的资源保护有哪些方式?(比如锁)
场景编程题(卡了很长时间)
不考虑高并发/分布式/集群/网络调用等问题,不依赖消息队列/缓存这些东西。希望你可以提供一个医院类,这个类有一个核心的方法给外部调用,这个方法实现如下功能:5 个医生,每个医生可以挂 10 个号,然后医院有 10 个窗口,也就意味着同时只能有 10 个病人挂号,那第 11 个人要挂号的话就不能立刻拿到号,得前面的用户挂完号才可以挂号,病人挂号的时候,医院给病人返回的结果是:1. 如果当前有空余号可用,就取最前的号;2. 如果没有号,就给调用的病人返回没有号的错误。注意:如果有号的话是不能允许返回给病人说没号,如何设计这个类以及这个类中的方法。(附加:如果在分配号的时候偶然出现时间抖动,你该怎么解决)
这一面说实话是我最没有把握的一轮面试,因为自己对于微服务这块确实没有实际操练过,经验很少,源码看的也不多,而且那个场景编程题答的也不是很好,没有很细致的说该怎么实现。
不过这轮面试里,面试官有句话让我印象很深刻,他说作为一个技术人,经验是没有办法衡量的,但是思维可以,我们在日常生活中,应该要善于去使用代码的思维去思考问题。对于一个功能/事物,我可能会想着这个功能可以通过一个消息队列去实现,可以redis去实现,但是这样思考还不够深入,应该在思考的时候就在脑海里构建出伪代码的结构。不然就真的是纸上谈兵。
三面结束,慌张了几天之后迎来了交叉面,我看牛客网上的帖子说交叉面基本上就不刷人了,但还是有些担心,可能我运气比较好吧,简单问了我一些问题就结束了,没有太刁难我:
隔了两天接到了hr的电话,前面几轮面试都拖了挺久的,hr这里反倒比较快了,问的问题也很正常:
有没有帮助他人的案例可以分享一下的吗?
你是怎么规划你未来的职业方向的呢?
对于以下案例,你有什么想法?
商家在我们这进货,为了加快货物的流通,会有赊账,在这个过程中,用户增长非常快,然后需要做一个系统,在这个系统上线的前一周,运营过来说,我们需要加一个子功能,你作为技术,是选择将原版本上线之后再升级,还是说把新系统的功能全部做完了再上线?(我选的第一个) 那按照第一个方法做了,系统也上线了,后期升级的时候你本以为2个星期就可以升级完成,但是你突然发现你可能搞不定,数据上出现了一些问题,产品经理此时也在国外,没办法及时沟通,作为一个技术人员你会怎么办?
大概什么时候可以实习?实习地点?
在面试期间我也看了很多其他人的面经,对比一下发现自己遇到的面试题难度上比他们要小一些,可能是因为自己也没做过什么太复杂的项目,所以也没深入问了。不过阿里的面试官人很nice,面试的过程也不是单向的询问与回答,对一些问题也会进行探讨。总的来说,除了进度比较慢(将近1个月),其他方面的体验还是很不错,这里许波愿,希望可以收到暑期实习的offer。
最后打波广告,如果我的文章对你有所帮助,不妨搜索一下微信公众号「梁注」,或者扫描下方二维码,后期我会不定时分享互联网上有趣的内容,也可以后台回复「微信」与我交流。