几天收到一通电话,来自某公司的技术大牛。我面试的是java实习生岗位,上来这位面试官语气很温和,刚开始让我做一段自我介绍。我秉持了自我介绍的几大原则,中规中矩地给他介绍了一些在简历上没有的东西,或者是强调一些我想要突出的内容和我之前实习的一些详情信息。然后讲完大概花了三分钟,下意识的行为到三分钟就停止了。
之后,这位面试官依旧很温和地提醒我不要紧张,说从电话那头感觉我很紧张。我也就笑笑不说话了。
然后面试官说从简单的开始,由浅入深。说先来java基础。
1.java的基本类型说一下。
我只说了六个(除了byte,short),这种情况下我也是很无奈。随后听到面试官很善意的提示,说还有一个字节,瞬间让我想起了byte,,然后就说可以了。
基本类型:int,short,long,char,boolean,byte,double,float
随后又问
2. 基本类型的包装类型都有哪些,详细说说。
对于我来说,这些基础懂是懂,总会有一些卡壳,说了Integer,Float,Double,Long,Boolean然后讲不出来了。
后来又问了我一下Object类,问我知不知道Object的方法。
我就讲了三个,wait,notify,notifyAll。
然后他就给我讲了equal方法(其实就是想讲equal,想从我这里引申出来,没想到的是我根本不知道equal是Object的方法,所以他就没能如意,只能自己提出来了。)
然后就针对这个equal。问我:
Integer a=1;
int b = 1;
问a==b和a.equal(b)分别返回什么。true还是false。
后来又问我集合方面的问题,问我平常比较多用collection接口下那些集合子类,可以分别介绍一下,
然后我就陈述了ArrayList,Set,Vertor和Stack。讲完后,
他就说,“既然你知道Vector是线程安全的,那么我就模拟一个场景。假设现在有个分布式系统,两台服务器(两个Tomcat)都要对这个Vector进行操作,要求是保证这个是线程安全的,“
听到这里,我就蒙了,我就说加个锁保证同一时间只能有一个线程去调用他,然后他就反问我说,有必要加锁吗?
我又蒙了,因为这位面试官比较亲切,我就大胆了一下,试着去挑战一下他,也反问了他一句:“那既然vector是线程安全的,即使是两个tomcat操作他,会发生线程安全问题吗?”
面试官笑了笑,说“你觉得呢,如果你有机会碰上一下高并发的情景的话,可以去看看。”
好吧,归根结底是我见识少,。
之后就问了我关于java异常对象,问我Error能不能捕获,我自然回答不能,只看过try...catch一些Exception什么的,没见过Error的,Error应该是交由JVM管理的。
随后他又问我Error和Exception是什么关系?我就回答说他们都实现了Throwable接口。
在这基础上,他问了我一个比较有趣的问题,当然,在我看来是比较有趣的,
他说,如果try...catch捕获的对象是Throwabe的话,能不能捕获Error?
我又蒙了,不过仔细想了想,既然是Error的父接口,那理论是可以捕获Error的,但是从来没这么试过,我就这样回答了他,算是比较保守的了。
之后呢,又问了一下分布式系统,问我自己做的项目是怎么搭的结构等等。然后在这基础上,问我一个业务场景也比较有趣,说是假设一个分布式系统,每五分钟需要调用一个服务去清理一下自己定义的缓存,那么分布式系统自然会有很多台Tomcat,如果同时有很多tomcat调用这个服务造成一个争抢情况的,如何保证已经被这个服务已经调用了并清理好缓存了?(大概是这样吧,毕竟是电话面试,记得不是很清楚了。大意差不多。)
我听完后,说这个应该就是多线程争抢一个服务的问题吧,我顿了好一会,最后回答他说,要不然尝试加锁?
面试官就问我,你这个锁是一个tomcat里的吧,那多个tomcat都去访问,怎么去限制呢?
我这时候就蒙了。
不过人总是会冥冥中找到一点灵光,我又想到了一种解决方案,就是通过在这个调用服务里添加一个全局变量flag,模仿java同步包里的那个Semaphore的信号量属性一样,当有线程调用他时,flag加1,这样,其他tomcat调用他之前判断flag为1就不会执行了。我讲完了很紧张的等他公布结果。
惊喜的是,他说我的思路是对的。
但是....(听到他说但是两个字的时候,心都凉了,觉得还是棋差一招。)
但是其实redis里面有个方法就可以实现这个功能,而不用我们自己去搭建,不过也没关系啦,你只是见得少,思路是对的。
说到底还是自己不过精深,面试官知道我做着一个分布式系统,同时也用到了redis。于是就出了这么道题同时考校到了这两个知识点。
所以说,各位简历上写的东西和自己说的东西还是得谨慎,自己给自己挖的坑。
讲到这里面试官的提问也算结束了,之后就是我对他的一些问题询问了,我就问了我比较感兴趣的三个问题,然后就结束了今天年的电话面试。
还未收到结果。希望是个好结果。不过,在这之中,确实增长了很多知识。学到了很多。碰上一个友好可亲的面试官是种什么感受?很舒坦。聊得很愉快。