本文首发于公众号【why技术】,关注文末公众号阅读体验更佳。
这是我的第7篇原创文章java
上周,我面试了15位2020年毕业的计算机相关专业的研究生,他们都是来自四川地区98五、211高校,校名如雷贯耳。面试
由于我有参与到设计校招题的工做中。因此我是技术一面的面试官之一。编程
这篇文章我原本想面试完后就能够立刻输出,可是面试结束后,我有了不少思考。数组
这篇文章很差写,可是我是一个"独立的自由撰稿人",因此我仍是想谈谈个人感觉。仅仅表明我我的观点。缓存
正如以前的文章《普通二本,毕业三年,北漂以后,我是怎么成为程序猿的》说的。安全
我是一个本科生,我读的大学是一个普通二本,我报考的那一年,学校刚刚从专科院校升级为二本院校。因此我是学校的第一届本科生。网络
可能由于是第一届本科生,在校招的时候,来咱们学校招人的科技公司一只手都能数过来。并且,每一家公司我都没有听过。我没有去,因此我没有经历过校招。多线程
可是我经历过招聘会,相似于人才市场,当时的场景是这样的:并发
你觉得这是我在网上找的图?框架
不是的,这是2014年11月16日,我去参加《2014年成都冬季特大型人才招聘会暨高校毕业生供需洽谈会》,我拍的。
这我的才招聘会,展厅很是的大,里面有不少的岗位,龙蛇混杂,其中不乏计算机行业相关的工做。好比下面这个来自2014年的招聘:
当年的我丝绝不以为这个招聘有任何的问题,甚至还挺想去。可是我如今再读一次后发现:这TM不就是培训机构吗?!整的还挺委婉啊!
你在网上海投简历,竞争可能更大,可是人才市场给你带来的视觉冲击,是直观且绝望的。
咱们这个专业,毕业后,大方向分为了五类人:
除了少部分的第二类人,他们在毕业以前就已经找好了工做。大多数人,包括我,是毕业以后才去找的工做,那时候,咱们身上的标签是这样的
每个标签都很难找工做,当它们都指向同一我的的时候,就真的很难找工做。
因此就有人四处碰壁,无奈之下报名了培训班,几个月后包装简历,进入职场。也有人就此告别了这个行业,另谋生路。
而我问了我身边的研究生朋友。
他们毕业以前的一年有两次找工做的机会,秋招和春招。其中最好的时机是秋招,不少的叫得上名的科技公司你不须要专门去找他们,他们会去学校开专场招聘会。而后通过一次网络或者现场筛选,若是过了,就能进入到接下来的面试环节。大多数时候面临的问题是:
而后秋招或者春招结束后,就去各大论坛发帖,发出幸福的疑问:
写到这里,我想表达的一个观点就呼之欲出了。
啥?你说研究生多读了三年书还不如三年的工做经验?
若是你是通常大学的研究生,我理解你这样说。
可是,若是你是排名靠前的一流院校的研究生,你还这样说,我多是要打你了哦。
假设你工做了三年,勤勤恳恳,热爱学习。终于鼓起勇气向大公司投了简历,结果有可能由于学历的问题直接被HR刷掉简历,若是有幸进入面试环节,一轮又一轮的技术面试反复轰炸你,并且面试有难度也有深度,面试你的目的是看你这我的是否是加入公司就立刻能投入工做,输出价值。这就是彻底靠实力加一点点运气的时候。
固然,你说你身边有人就谱写了一个十分漂亮的绝地反击的故事呀。这样的故事有,可是更多的是你没有听到的"名落孙山"。
假设你是一个校招研究生,面试时候考察的方面是不同的,面试你的目的是看你这我的是否是能够加以培养,做为公司的储备力量,因此最后进入公司的概率大了不少。
我没考过研,因此我没有话语权说应该怎么去考研。
可是我建议有能力的话能够考研。
多的不能再说了,放一张图吧。仅供参考。
可是很不幸,你可能和我同样,没有机会考研了,和同事之间有一道不可逾越的学历带来的鸿沟。那么你只有拼命的学习,疯狂的汲取知识,对技术保持求真的敬畏之心,学历干不过别人已成定局,可是你技术牛逼,那就能让鸿沟变窄。
如今学习的渠道这么多,知识全在网上,触手可及。
就看你愿不肯意把本身的手,从追剧、游戏、综艺、发呆中抽出来。毕竟一我的最多只有2只手。
好了,到这里,以上表达的全是我的观点,带有强烈的我的主观色彩,你以为有道理,那谢谢你。你以为我在扯淡,也请不要攻击我。
关于面试,有人表现的很优秀,他们都优秀的比较一致。但也有人表现的很通常,他们的通常是千姿百态的。因此我想聊聊那些表现很通常的人。
我在北京的时候,也当过一面面试官。当时咱们小组在发展中,有几个空缺的职位。要求是3年以上工做经验。
我先后大概面试了有50多人吧。
其中有工做经验长达9年的从业者,也有刚刚结束培训的培训生。再加上此次的应届生校招面试。
我想分享一下我遇到的这三类人中表现通常的人,所带给个人思考。
对于那个工做了9年的面试者,我印象很深入,由于最开始拿到简历的时候,我一摸:"这简历,好厚啊!"再一看,工做9年。
因而我去找了个人领导,我说:"这人我应该无法面试,我工做经验都才3年,这哥们是个人3倍啊。咋面?"
领导说:"没事,你先去聊聊,怕什么,就当是技术交流,别当成面试。"
面试的过程当中咱们聊的技术问题,他都没有回答的很好,他的技能就像一块大平板,一眼望去,什么都会一点,可是稍微一深刻探讨,就两眼一抹黑了。
面试的最后,我直接给他说:"在整个面试的过程当中,其实你有些问题回答的是不太好的,可能今天咱们的面试就到这里了,可是我还想请问你一个问题,你能够不回答。你工做了9年了,应该有不少行业内的朋友呀,为何没有内推呢?并且你的技术能力和你的工做年限有点不太匹配。"
他回答了我,大概的意思是这样的:
听了以后,我说:
后来,我把他送到公司门口,他已经走出去了,又转过身来和我握了一下手,他握的很用力,说:"谢谢!"
我在面试结果描述那一栏写的是:
面试结束以后,我把面试结果反馈给个人领导,领导看到我写的评语,意味深长的一笑,对我说:"和我预想的同样,年龄大,工做年限长,可是技术通常"。
以后,他用力握我手的场景有时候会情不自禁的在我脑海里面浮现。
仿佛在鞭策我:前车可鉴,要警戒啊。
对于培训生,无论你是由于热爱编程仍是追求高薪而进入这个行业,我理解大家。面试时你也不须要特别的谦卑,技术面前人人平等。
有一部分培训生包装简历是为了过简历筛选关,由于有可能HR不懂技术,因此我很是理解,不包装简历,就没有面试机会,这样对于那些真正学到的知识的人就很不公平。
面试的时候我遇到他们,我都一视同仁,只要你学到了真本事,我聊了以后以为还行,能达到咱们的用人标准,均可以进入下一轮面试。
经过参加培训进入行业,我以为没有问题。甚至你有真才实学,为了面试机会而包装简历,只要最后你坦诚相待,我也以为没有问题。可是你包装了简历,本身又没有真材实料,态度还不端正,这就是有问题的了。固然属于培训中的一小波人,可是这一小波人的表现打上的标签,也会影响到另外的一下波人。
我身边就有几个经过培训进入行业的朋友,他们本身也很是刻苦努力,有热情,如今工做也还挺不错的。
可是我面试的时候遇到过一个培训生,说真的,就他包装的那个简历,不少技术没有实际操练过,真的经不住几个连环问的,几问以后,就原型毕露了。没有真才实学,指望工资还要的贼高。
你骗过了HR,你还要把技术面试官一块儿骗过去?都到技术面试了,一轮又一轮,你还能骗过去?
那你别干程序猿了,你去当演员吧。
因此,先把态度放端正了,咱们再好好的聊技术吧。
你问我什么叫态度不端正?
你就参加了几个月的培训,找工做的时候听周围的人传说:"谁谁谁,今天拿了一个15k的offer。三个月前,刚来的时候连开发环境都是我帮他配置的呢!"而后你就感受本身牛逼的不行了,甚至以为15k是否是有点低了呀。
因此你面试的时候技术问题回答的通常般,没有什么亮点,可是一问指望工资,张口就是:"不低于18k吧!"。
这叫作态度不端正,而我还真的碰见过。
我当时告诉他:让唐僧成为唐僧的是那一坨经书吗?不是的,是取经的路啊。15K就至关于别人的经书,你别只盯着别人的经书看,你看看他在这一路上的八十一难。你经历了吗?
下面这图,当段子能够,别当真。
上周来面试全是2020年毕业的研究生。我面试的15个,大多数都十分优秀。
可是我想聊的是那些表现通常的人。
因为他们都来自名校,因此我怕问的一些问题没有cue到他们的点,不合他们的胃口(社招面试的时候我才不会这么想),在进行了几个常规基础面试题预热后,我每个面试者都问:"请问你以为你对Java哪一块比较熟悉?基础、框架、中间件的都行,咱们能够聊聊。"
很奇怪,大部分都说本身对Java集合这块比较熟悉。多是集合这块的面试题不少,你们都看过相关的视频或者文章。
基础不牢,地动山摇 --- 集合
有一个面试者也说他熟悉集合,我问他:
在当咱们对HashMap初始化时没有设置初始化容量,系统会默认建立一个容量为16的大小的集合。当HashMap的容量值超过了临界值(默认16*0.75=12)时,HashMap将会从新扩容到下一个2的指数幂(16->32)。HashMap扩容将要进行resize的操做,频繁resize,会致使下降性能。
HashMap是线程不安全的,它的不安全就体如今resize的时候,多线程的状况下,可能会造成环形链表,致使下一次读取的时候可能会出现死循环。
然而他说:"这个我不太清楚,我用的时候没有指定过大小,可是我知道默认大小是16。"
当他这样回答的时候,我大概就判断他可能只是看过几个集合相关的面试题,并无进行过深刻的研究,远达不到熟悉的标准。
我准备引导他,看看他本身经过几个题,能不能联系起来,而后回答这个问题,因此我接着问:
1.添加元素的时候会检查容器当前元素个数。当HashMap的容量值超过了临界值(默认16*0.75=12)时扩容。
2.HashMap将会从新扩容到下一个2的指数幂(16->32)。
3.调用resize方法,定义长度为新长度(32)的数组,而后对原数组数据进行再Hash。这个过程是一个性能损耗点。
由于会带来问题,因此咱们就尽可能减小扩容。
为了减小扩容,在咱们已经知道集合具体多大,或者有个预估值的状况下
就设置一个初始化大小就行了。
结果他说:"当集合大小大于默认大小16的时候,会扩容,扩容的大小是原来的1.5倍。具体这么扩容的我不太清楚,我记得好像是会新建一个集合,把原集合拷贝过去"。(注意这是个错误回答!!!)
当他说完以后,气氛忽然尴尬了起来。很明显,他把ArrayList和HashMap的扩容记错了,基础不牢的表现。
当时我心里就有一个大大的问号:你不是说你熟悉集合吗?
基础不牢,地动山摇 --- 线程
多线程编程,这是基础且关键的技术吧?
由于是应届生,在学校里面学了各类各样的语言。因此面试的时候我会问面试者:你的主要开发语言是什么?
只要面试者说,他的主要开发语言是java。那我就会问线程池:
大多数面试者,在我问到有哪些默认实现的时候,他们就能自动的把下面的问题都回答的差很少。
可是有几个面试者,他们的回答是:仅仅是用过默认实现,具体内部细节没有了解。
那我就会以为,额,怎么说呢,这感受很差说,你本身的体会吧。
我问的另一个关于线程池的问题,我面试的15位,没有一位回答正确,可是我都告诉他们:不要紧的,这个回答不上来的话,不减分,下去能够了解一下。
我问的是:
以前写过一篇文章《有的线程它死了,因而它变成一道面试题》,进行了比较详细的回答,能够了解一下。
而后,关于线程这块,我还会问一个题,这题是咱们的宣讲会的初选题,他们都作过:
大多数面试者,看了十几秒就说选C,而且告诉我理由。
有个面试者他看了一分钟,思考的很认真的样子,而后说他选择D选项,由于选项内容说反了。
我说,你肯定吗?
他说:我很肯定。
我说:下去以后再了解一下吧。
有的面试者看了一分多钟后,没给出答案,因为面试时间宝贵,我就说:这样吧,这题选C。你告诉我C为何错了呢?
这个时候,大多数面试者都会给出一个正确的答案:
只有针对此对象调用notify()方法或者notifyAll()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
注意是准备获取对象锁进入运行状态,而不是当即得到。
再看一下《Java并发编程的艺术》里面是怎么说的,有这样一段话:
可是有的面试者,对于C为何错了,仍是给不出详细分析。
这里反映出了两个问题:
概念模糊,似是而非
另一个面试者回答说他对Redis了解的比较多一点,项目里面用过。
我问了他:"Redis你是拿来作缓存吗?有没有考虑过缓存击穿、缓存穿透、缓存雪崩的状况呢?"。
这里我就不做答了,我以前写过一篇文章《当周杰伦把QQ音乐干翻的时候,做为程序猿我看到了什么?》介绍过,不了解的朋友能够去看看。
他说:"Redis在个人这个项目里面,就是拿来作缓存的。你刚刚说的那几个概念,我有据说过。可是咱们的项目还没遇到这样的问题。"。
我说:"明白,没有关系,你给我介绍一下相关概念和对应的解决方案吧"。
他说:"这个不太清楚。"
好的,我想多是关于Redis的理论知识比较强吧。我接着问:"那你给我介绍一下Redis的两种持久化策略呗?"
他却是说了一些上来,可是整个回答听起来,概念模糊,似是而非。须要我主动去找他回答里面过滤掉一些口水话,提取到几个关键词:AOF,RDB,异步刷盘,可配置,命令追加.....
并且说着说着卡壳了,有一种背课文的感受。
我理解,这个程度,不能叫作熟悉。
送分失败,大失所望
面试的最后几分钟,我都会问一个问题:最近在看什么技术相关的书籍或者文章吗?
典型的送分题呀。这题很难回答吗?你甚至能够说,学业繁忙,主要看的仍是课堂上的东西。
这题你不回答,不减分。回答的好能够加分,回答的很差会减分。
有一个哥们回答说:我最近在看《深刻理解Java虚拟机》。
我一听,有点意思,能够探讨一下了。这书我先后加起来看了五次,
我问他:"你看了这本书后印象最深的点有哪些呢?"
他说:"我印象最深的是垃圾回收会致使用户线程中止。由于我以前碰见过这样的问题,个人程序常常跑着跑着就停了,我当时不知道为何。后来了解到,是垃圾回收的时候致使的用户线程暂停。"
我听到他这个描述我想的是:那这个程序有问题呀,为何会这么频繁且长时间的进行FullGC呢。
因而,我问他:"你是怎么排查这个问题的呢?"
他说:"不是我解决的,是实验室其余的同窗解决的,同窗给我说是垃圾回收的时候致使的问题。我最近看《深刻理解Java虚拟机》的时候也联想到了这个问题。"
听到这里我已经有点失望了,他遇到了问题没有主动去解决问题。同窗告诉他缘由了,他也没有继续深究下去。
算了,仍是回到书上去吧。我问:jvm在回收哪块区域或者进行什么操做的时候会出现你刚刚说的暂停(Stop The World --> STW)用户线程的状况呢?
其实书上写的很明确了。老年代进行Full GC的时候会STW,而老年代经常使用的垃圾收集器是CMS:
更深一层次的缘由书上也写了:
而他的回答是:不太清楚。
失望。
你要说你没看过回答不上来,我还能够理解。可是你说你最近在看,却没有回答上来。那我能够理解为:你仅仅是看了,却没有留下任何的东西吗?
并且我没有问你相似于字节码解读、不经常使用参数介绍这样的刁钻问题吧。
不是我在难为你,是你在难为你本身。
失望。
其余的表现
除了上面说的这些状况,固然还有其余的一些表现。
好比说简历上写了,熟悉单例模式。我让手写个线程安全的单例。而后他写了一个双重检查锁定。却忘了加volatile关键字。
我说你考虑太重排序吗?说到重排序你想到了java的哪一个关键字呢?
他说想到了volatile。
我说那你这里为何没有加volatile关键字呢,他说这里不须要加。
简单的解释了几句后我给他说去看看《Java并发编程的艺术》这本书,里面专门说到了这个问题。
经过前面介绍的校招面试出现的一些问题,能够看到,我面试的时候已经尽力把主动权交给面试者了,可是有的面试者没有好好把握。
可是只要能好好把握这个主动权,把本身尽可能多的展示出来,让我知道你是有技术且是热情的。语言表达清楚,动做不太浮夸,态度不卑不亢,表情轻松天然。
如今不少人面试以前都喜欢看一些面试技巧相关的东西。这没有问题,我本身也看。
可是面试技巧只是锦上添花,你的真实实力才是锦上添花的对象。
在对象还不够坚固的状况下,应该把花在锦上添花的时间,花到加固对象的时间上。
在绝对的实力面前,任何的锦上添花都会显得苍白无力。
这篇文章是我上周末面试结束以后就在构思而且着手准备了,因为和技术相关的点并很少,我更多的是对于面试这件事的思考,写到这里洋洋洒洒又快接近1w字了。大部份内容都是思考于晚上睡觉前的半小时,写于周末和工做日的早上早起的一小时。
仍是以前说过的:
其实想到写什么内容并不难,难的是你对内容的把控。关于技术性的语言,我是反复推敲,查阅大量文章来进行证伪,总之慎言慎言再慎言,毕竟作技术,我认为是一件很是严谨的事情,我经常想象本身就是在故宫修文物的工匠,在工匠精神的认知上,目前我可能和他们还差的有点远,可是我时常以工匠精神要求本身。就像我在群里表达的:对于技术文章(由于我偶尔也会荒腔走板的聊一聊生活,写一写书评,影评),我尽可能保证周推,全力保证质量。
文中提到的两本书《深刻理解Java虚拟机》和《Java并发编程的艺术》是两本很是优秀,值得反复阅读的工具书,能够关注我后,在后台发送java,便可得到电子书。可是对于这类工具书,强烈建议,买一本实体书。
才疏学浅,不免会有纰漏,若是你发现了错误的地方,还请你留言给我指出来,我对其加以修改。
最后须要说明的是,这篇文章有不少是我的的见解,并不权威。
可是若是你承认个人见解,你的点赞、留言、转发、分享、赞扬就是对我最大的鼓励。
谢谢您的阅读,感谢您的关注。
以上。
扫码关注我呀,在这里我会分享一些技术相关的东西,主攻java方向,用匠心敲代码,对每一行代码负责。偶尔也会荒腔走板的聊一聊生活,写一写书评,影评。愿你我共同进步。
欢迎关注公众号【why技术】。在这里我会分享一些技术相关的东西,主攻java方向,用匠心敲代码,对每一行代码负责。偶尔也会荒腔走板的聊一聊生活,写一写书评,影评。愿你我共同进步。