今天去面了一个也算蛮大的公司吧,搞二手车的公司,去面的JAVA开发实习生。
早上10点线上面试的,本来本菜鸡(从来没面上过JAVA开发)前一天晚上还复习了一遍面试八股文,因为自己本身是专升本的嘛,现在9月开学是大四了,就去找的实习。在校期间自己全栈单独写了两个课程的大作业项目,寻思着自己本身应该也没问题了,不说能面上,五五开四六开就行了,毕竟只是一个JAVA开发实习生嘛,结果开面,人傻了。
第一个问题,问了解消费者生产者运行机制嘛
好,我傻了,因为实际写的两个项目的时候,我也没碰到过使用多线程,这个问题把我问呆住了,当初学多线程的时候我只是学习了如果开线程和锁那些概念,没咋了解过这个。但是学习微服务的时候嘛,我也接触到了一点这个概念,就是生产者提供了自己的服务注册到到nacos或者eurake上,再让消费者去nacos或者eurake上获取并使用嘛。
所以我就问是不是微服务的知识点,他说不是,我呆住了,开始害怕了。但是他估计也是觉得我自己写了两个项目,觉得应该还有救,就试着点点我,看看能不能点醒。
面试官:就举个例子,餐厅里面厨师做菜和服务员上菜是两个异步的嘛(我理解是两个不同的线程),但是呢有时候会出现厨师做完了菜,服务员不知道菜好了,服务员还在傻呆着,这种情况有啥解决办法不。
本菜鸡(吓傻中):嗯。。。那可以让服务员弄个类似监听的那种,每隔一段时间就向厨师那边询问菜是否做好,如果做好了就去送菜,如果没做好就得继续等。
面试官:你说的其实很相近了,你再想想
本菜鸡(想了好久):想不出了
现在复盘下来又去看了下消费者和生产者的概念,他意思就是:厨师是个线程,只管做菜,菜做完放到一个空间 (就当是个集合吧),服务员就看这个空间里面元素数量为不为0,不为0就是有菜,那就得拿菜上菜咯)
面试官依然抱有一丝希望,还想着也许这孩子还有救
面试官:那你了解过秒杀系统吗,按你思路去想一下如何实现
本菜鸡(绝望中):额,我想法就是设置一个时间,到秒杀的时间了就重复执行一个秒杀抢货的脚本,直到抢到货
面试官:(失望叹气)。。。。。。
现在复盘下来,我猜测上架商品的商家就是生产者,他们将货物上架了就是秒杀开始,而消费者就是需要监视这个商品,一旦上架了就是有货了,那就开始进行秒杀功能的线程,因为我脑海里的秒杀都是到点秒杀就情不自禁的去想时间那一方面了
第二个问题,JAVA线程池是什么样的
这个问题我也呆住了,因为多线程的知识真的忘了好多好多,当时猜测是不是类似数据库连接池那种(实际上脑袋里猜对了,线程池也是开好的线程放进线程池了,啥时候要用啥时候就拿出来用),结果脑袋在想的时候
面试管:喂,在吗
这一吓,我想了想还是认输吧,因为多线程没有去复习也没有什么实际经验,于是投降了
本菜鸡:抱歉,因为多线程太久没弄了,知识点实在想不起来了
面试官:那今天的面试就到这里吧。
复盘
实际上面好了后我去找大佬补习了一下这次面试遇到的问题,其实他想问的问题确实可以预判到的。
他的招聘信息上写了是在准备做老系统转换为微服务,那么拆成微服务嘛我想法是因该需要有人独立去完成一个个拆分好的独立服务,然后又是拍买二手车的系统,所以确实会使用类似秒杀系统啥的功能。