面试记录(3)

GrowingIO面试记录

今天是10.28日,参加了GrowingIO的线上面试。说实话,过了笔试还是挺意外的,当时记得有一道编程题目只写出了一半。但是运气不会每次都这么好,下午面试,晚上就收到挂的信息了。结束的时候看了下时间,差不多面了20分钟左右,而且最后一个问题的结束给人的感觉很突兀,当时就感觉到这次多半是凉了。现在都有点怕面试官的那句“你还有什么想问我的吗?”,我明白,每次到这个环节,都是面试官出于客气,客套一下。感觉找个工作真难啊,自己的技术还差得太远了,天天搬砖对自己的职业发展没起到什么作用。

过程

面试官:了解sacala吗?如果让你转语言,可以接受吗?
我:(在面试前了解到过,好像要转语言)可以的,之前也听说了你们会用sacala
面试官:先自我介绍下
我:讲了下自己当前的技术栈,大学的学习经历(没什么特别亮眼的地方,都是搬砖经验,感觉没起到什么加分作用)
面试官:看你写了项目经历,那么说下你在项目中遇到的技术难点吧
我:本来想说抽奖业务的超卖处理的,不过听到面试官说技术难点,突然有点怂了,感觉我们当时实现的方法不是很难(通过预生成记录的方式),所以就说了之前用websocket的时候,bean注入不进去的问题。当时由于是spring boot实现的websocket,通过查阅文档知道是多实例的,所以老是注不进去。
面试官:这个WS的controller是你自己注入Bean的吗?是的话,为什么不是单例的呢?
我:(本来以为说成这样就行了,结果被面试官反问还挺惊讶的,之前解决的时候,由于是框架帮忙实现的,就没多想,结果GG了,给自己挖了个坑,大家千万不像我这样做 T_T ,这就相当于问我为什么WS要设计成多实例的)一时语塞,不知道说什么(第一次语塞),一度十分尴尬,瞎说了下
面试官:(感觉我思路不是很清晰,不是很满意)那你说下spring的ioc的好处吧
我:好处是将创建对象的过程交给了容器去管理,减少了程序员手动new的过程
面试官:(感觉这不是他想听到的答案)那我new一下也很方便,也用不了多少时间,为什么还要ioc呢?
我:在配置类的时候可以只配置一次Bean的属性,不用每次都手动写,且单例的时候更方便
面试官:那我写个属性,实现个单例也不会很麻烦吧,为什么还要IOC呢?
我:(心里明白,应该是答不出来了,这个问题基本凉了,后来
知道,他想听到装配倒置,让依赖过程反过来,由低向上,这样在改动的时候就会十分方便,便于解耦)一时语塞,开始搪塞过去(第二次语塞
面试官:那你说下AOP吧
我:(这个问题答得还可以,就略过吧)说了aop的思想,业务场景,JDK动态代理的实现和CGlib代理的实现,以及他们的区别
面试官:你用过多线程吗,对线程池有了解吗?
我:说了线程池的好处,方便建立线程,减少创建线程和销毁线程的开销
面试官:那你说说有哪些线程池以及它们的特点和业务场景吧
我:说了单线程的线程池,以及它是用来让任务按顺序执行的,fixedThreadPool是有线程上限的线程池,
定时任务线程池(这里有些线程池记得不太清楚)
面试官:线程多起来会产生什么问题呢?
我:线程会占用栈内存,而且会有并发问题(其实还应该回答,线程多了,会增加切换CPU上下文的开销)
面试官:那并发问题怎么解决呢
我:通过加锁解决,可以用synchronized代码块,synchronized方法,lock同步锁解决。
面试官:那synchronized到底是锁什么呢?
我:锁对象的monitor,通过反编译可以看到字节码在获取锁的时候尝试得到该锁,如果不为0则不可得到该锁。
面试官:那你说的这个monitor是存储在哪的呢?
我:堆内层的对象的对象头部分
面试官:那sychronized和reentrantLock有什么区别呢?
我:(当时没有听清楚,加上不太会读reentrantLock,将reentrantLock听成了什么什么log,一脸懵逼,现在想起来,这么简单的问题,难受啊T_T)以为是没听过的东西,慌的一B,一时语塞(第三次语塞),很抱歉的说没听过这个
面试官:(感觉印象更差了)除了加锁还有什么解决并发的手段吗?
我:(以前没思考过这个问题,想了很久才挤出来)atomic类的类型,volatile关键字可以解决部分并发问题
面试官:(给人的感觉越来越不耐烦,因为我卡壳的次数和时间太多了,而且有些卡壳的是比较简单的问题)那你说说volatile是怎么解决的
我:在遇到共享变量的时候volatile可以保证两个线程之间的变量的可见性,是通过底层硬件实现的。
面试官:那你为什么说volatile关键字可以解决部分并发呢?
我:(其实我是随口说的,没想到面试官会这么抠字眼,发现给自己挖了个坑)知道画蛇添足了,想了很久说,意思是可以解决部分的场景下的并发问题
面试官:(我感觉他觉得我说话的思路很不清晰,对知识理解不够深,心里想着凉凉)那线程池如果任务过多会怎么样?
我:会根据配置的拒绝策略,进行相应的操作,如抛出异常之类的4种,这里蕴含着一个策略设计模式
面试官:是直接就执行拒绝策略了吗?
我:(心里明白这么问,肯定是还想我说写什么,但是知识有限,当时感觉自己想不出来,其实应该是如果是具有缓存任务的线程池,那么缓存任务也满了才会执行拒绝策略) 我说是的
面试官:(感觉是索性继续往下问)那你解释下刚刚说的那个策略设计模式吧
我:策略模式是根据构造对象的时候,采用不同的接口的实现类传入对象,从而使对象在执行接口里面的方法的时候采用实现类制定好的策略
面试官:那你说说策略模式和简单工厂的区别
我:(这个设计模式不太熟,直接放弃了,事后看了下,感觉是个很简单的设计模式,但是当时没看过,还是自己太菜了,本来应该说他们的目的不同,策略模式是侧重在执行方法的手段,而简单工厂是侧重创建对象什么的) 一时语塞(第四次语塞),委婉的说不太熟悉这种设计模式
面试官:(感觉此时对我的印象特别差,不太像继续了解下去了)最后一个问题有点不太记得了
我:简短的回答了一点点
面试官:我大概知道情况了,你还有什么想问我的吗?
我:(最害怕的环节来了,感觉面试不是很顺利的情况下,突兀的说出这句话,那么基本意味着凉凉,这是我之前面试了解到的套路,心中长叹一口气,这个公司与我无缘了)你们为什么选用sacala做为开发语言呢?
面试官:你觉得java的语法啰嗦吗?sacala的语法简单点,虽然学起来的时候会花点时间,但是掌握了之后开发效率还是高的
我:(想着随便扯扯吧,安慰下自己,不会太尴尬)你们平常的业务是怎么进行埋点的呢?(因为依稀记得官网上说他们做用户数据分析无需埋点,就有点好奇)
面试官:那个是由开发SKD的同事实现的
我:没有了,谢谢~

总结

本次面试是我第三次参加面试,其实如果是大点的公司这个面试算第二次,通过本次面试感觉到自己还是太菜了,对于很多东西都是一知半解的,导致被问起来,总是得不到让面试官十分满意的答案。数了一下,面试总共有四次语塞,其他的小小的卡壳还没记录进去,已经能感觉到问题有多大了。不过也算是一次十分宝贵的经验,能认识到自己还有哪些方面的不足。以后学习知识要多多往深处学习,学习之余多思考,不然学了也难以应对面试,有时还会给自己挖坑。也了解到spring的ioc,aop,多线程等高频考点,要多积累这方面的知识,尽量做出一个让面试官满意的答案。现在已经差不多11月了,秋招基本接近了尾声,自己10月中旬出来秋招,比较晚,之前没接触秋招,也没好好准备,感觉有点可惜。照这个情况,可能只能等2,3月份的春招了,哎,这两个月再去好好的准备下相关的知识吧,争取春招找个好一点的工作,希望各位小伙伴能从我的经历里面学到点东西,引以为戒T_T。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值