笔试面经:一次意料之外的面试
作者:唯有努力不欺人丶
本文经作者授权发布。链接:https://www.jianshu.com/p/0217e9317ab6
因为理念不合,所以七月初便交了辞职报告.然后本以为还要一个月的时候正式离职或者招到人后正常办理交接后离职.却不料计划不如变化快,于某一天老板说java项目暂缓.直接的表现就是没有交接者,我可以直接离职。所以就这么突然的辞职了. 辞职后本打算在家休息几天再开始找工作。所以只是在boss上把简历打开,状态改为求职。但是并没有主动去各个岗位毛遂自荐。在离职的第一天睡到自然醒,又买了爱吃的菜在家磨练厨艺。然后重点来了!!第二天一早,发现boss上有主动搭讪并邀约面试的。好吧,虽说没有准备,但是也没必要错过这个机会,所以直接约在了下午两点。现在写这个文章是面试完毕回家后决定把面试的经历整理整理,在此做个记录,也算是给新人一个建议。
然后在下午两点屁颠屁颠跑到公司中间太阳雨什么的就不说了。反正是到了公司(因为之前boss上就看了公司规模不大,20
人以下的)很意外的有个前台小美女。我说我是去面java开发,就拿出一打纸给我说是一个简单的笔试。把我引到一个会客厅,并且倒了一杯温水(说实话大热天的一杯温水,很细心的小美女啊~~长得也可爱,哈哈)。接着说面试题吧,怎么说呢,一共十二道题,最后两道是口述经历的。所以正经的笔试题10
道,我先根据记忆说一遍。
第一道题
private
,protected
,public
和默认的作用和区别。
这个确实是基础到不能再基础的,你可以说我爱现也可以说我想得多.我答题的时候考虑了两点,一个是修饰方法,还有一个是修饰类。因为修饰方法除了权限,还点出了一点,private
可以被子类继承但是子类无权访问(使用反射可以看出子类是继承了父类的私有方法的,不管是否是final
,只是直接调用父类的私有方法是不可以的,字段同理)其实我觉得如果我当时不提到这个也不能算错,提到了多少应该算是加分项吧?毕竟感觉最后面试的时候经理对我的笔试还算满意啊。还有提到了如果修饰类的话,不考虑内部类的情况,一个.java文件中只能有一个public
的类。(我个人态度能往上靠的知识都可以提一下,前提是确保是对的)
第二道题
对java中的多态的理解
首先感谢我qq群友,上午知道要面试之前问大家面经了,一个群友发了一个阿里面经(我就不打马赛克了,有意见的私聊我啊~顺便打下广告,群招人):
然后重点就来了!!!打开这个阿里面经:
只能说运气好到爆,第一个问题就是多态的理解.然后我其实这个只看了前几道题,反正这次算是压中题了,抑制不住的想笑~~然后这个题就是这么回答的。其实哪怕不看这个,对多态也是理解的,但是觉得自己的原话可能没有这个总结的到位和准确。
第三道题
对
static
的理解。static
域中可以调用非静态变量或者方法么?被static
或者private
修饰的方法可以被覆盖么?
这个题考的也是基础,没啥说的,我大概的回答(当时我也是凭感觉回答,可能有的用词不准确或者不太正确,我现在这里说的都是当时回答的):static
修饰方法,则这个方法是静态方法,修饰变量则这个变量是静态变量。从归属上理解,静态块(静态方法,静态变量) 是属于类的而不是实例对象的,所有对象共享一份。从类加载上讲,在类被初始化的时候就会被执行,并且同时分配内存空间。以后的所有访问都是访问这个地址。所以从内存上讲,静态块只占一份内存,但是值是可以修改的.不过地址不会改。静态块可以被类直接调用.虽然也可以被对象调用,但其指向的是一个,而且如果在eclipse编译下,对象调用静态块不会报错但是会报警告。
static
域中不可以直接调用非静态变量或者方法,但是可以new
个对象再通过对象调用(我不知道我这里是不是说的多余了。但是我觉得直接回答 static
域中不可以调用非静态变量或者方法太绝对了.)
被static
或者private
修饰的方法都不可以被覆盖(我觉得没啥好解释的,所以笔记的时候只写了不可以)
这里说点题外话,我有做笔记的习惯在以前的文章里就说过了,面试回家以后我翻了翻笔记本,发现这道题我是记下来过的:
第四道题
HashMap
和HashTable
的区别?ArrayList
和Vector
的区别?
哎,只能说天道酬勤吧.我大概说了下HashTable
是线程安全的,HashMap
是非线程安全的。HashTable
的key
和value
都不是能null
,而HashMap
的都可以。ArrayList
是非线程安全的,Vector
是线程安全的,但是因其内部加锁所以效率低.
这个题我反正只回答了这么多,然后觉得自己挺满意,毕竟也都是做过的.然后这里再介绍下牛客这个软件就是刷题软件,然后java一千多道题左右吧,我反正是闲着没事就组一套题答。
第五道题
手写冒泡排序(我有点回忆不起来了,这个手写冒泡是第九题我记得,这里想起来就先说了吧)
说实话我在这里小小的卡了一下,大家别笑。原理大概方法都知道,真写的时候还是有点小问题的,一时间有点蒙住了,但是最后费了一点时间反正是写出来了,重点就是双循环和两个值追尾交换,这里还有个问题,就是我为了这个arr又new了个数组...反正是对付写完了。
for(i = 0;i < arr.length;i++){
for(j = 1;j < arr.length - i;j++){
if(a[j - 1] > a[j]){
int temp;
temp = a[j];
a[j] = a[ j- 1];
a[j - 1] = temp;}}}
第六道题
tcp的三次握手,两次行么?为什么?
我就呵呵了,这个题有点槽点啊,一天三顿饭,为什么三顿啊?一顿可以么?不行不行,转入正题,其实这个知识我在上次找工作,http原理的时候有涉及到,虽说记得不那么清楚,但是大概的还是能叙述出来,下面是我的答案。
三次握手是由其工作原理决定的(毕竟设计成三次肯定是有意义啊,我这句话就是凭感觉万金油)
首先在连接之前,客户端要告诉服务端我要给你东西了(我当时就用的这种土话),第一次握手
。然后服务端收到了以后说那你发来吧 第二次握手
。最后tcp
以一种方法把数据用很小很小的粒度一点一点的发过去,这样做是防止数据丢失,都发完了,第三次握手
。
其实回来之后我又看了tcp三次握手的,我说的百分之60
对吧,就是术语啥的有点问题.关键是好几个月前啃得,现在还能编的差不多不错了,我自己挺知足的。然后这里我是说面试经验 ,就不科普tcp原理啥的了。
对了我还说了http
底层就是tcp
。然后把Http的实现记住的都墨迹了一遍~~反正话痨属性,而且我觉得多秀一些知识没问题啊.而且那么大空白的纸,我就写两三行总觉得不太合适.然后附上我以前的笔记(字就这样了,主要是内容):
第七道题
osi七层模型都是什么?
哎,怎么说呢,还是要感谢群里大佬(ps:我说的这么多不都是一个群啊),几个月前找工作的时候向大佬请教的时候啃得知识,当时找工作没用到,结果现在用到了~哈哈
然后这么久了,肯定是记得没那么全,但是我记得当时查osi七层模型的时候就看过一些说法,所以又闲扯了几句,下面是我的回答:
七层模型是一种很理想化的模型,包括物理层,访问层(这个也是记混了,也是自己编的,哎,说一说记性这种东西真的不靠谱。我打包票当时是真的背的很熟练啊),应用层,传输层,网络层,数据层(其实现在看这个是说错了的,因为原模型中的数据链路层。关键真的我上面的好多都是蒙的)。(然后又发表了自己的看法,其实是当时看到的然后有一点点印象的东西),七层模型很理想化,目前并没有完全符合七层模型的实例。而是每个协议对应七层模型中的几层而已,比如刚刚说的tcp也可以用七层模型中的几层模型来表示(当时看过,但是我真的忘了对应的咋表示了~所以就说到这就没了)。
第八道题
我有点想不起来了,哎,反正就这么说吧,这次笔试真的很基础,反正没有我没听过,没接触过的概念!然后这个第八题说一些自己的看法感悟吧.我上面的图片可能看起来很杂乱,其实有的图片我没必要传.但是这里都一一展示了.从年前的录音。到平时刷牛客的笔记,到上次面试的笔记.到上午群友的友情提供阿里面经。
我这个文章的题目是意料之外的面试,说实话除了上午瞄了几眼阿里的面经,剩下的我并没有为这次面试做什么准备的工作。所以这个面试真的是意料之外的,但是对笔试的成绩我是比较满意的,从结果来看我觉得公司也还算是满意的。但是我觉得我其实还可以做的更好,如果昨天不是吃喝玩乐放松了一天呢?如果之前工作也随时看一下java的基础知识,给自己充电呢?
确实都是很基础的东西,但是你要想想这些问题问你,你会不会都能答上?说实话,我个人角度,如果上午没有看阿里面经,对于多态可能我的答案就是一句:父类引用指向子类对象。而且有时候我们的答案不是错的,但是却是不准确的.比如我说的tcp,我觉得大体的流程我是理解的,但是我的答案肯定是不配拿满分。也会想想如果我再用点心啃几天知识会不会好一点,但是问题是机会不会给我几天.就是想说一句话,大家都说缺少机会缺少机会,可是你确定机会来了你准备好了么?
面试
可能是我面试经验比较少,也可能是公司缺人,我不太确定是哪种情况。但是面试的时候面试官是肯满意的,起码有夸奖了我知识储备挺多.我不知道是客气还是什么 ,但是我是当真了的。然后接下来讲一些面试的心得:
首先,逃不过的一个问题,为什么离职?因为我个人经历较少,然后我上个公司的情况比较复杂,所以我就直接说的因为理念不合,面试官紧接着就问觉得他们公司怎么样?一来我今天面的是一家外包公司,二来也是我真实的想法,所以我就说我觉得我的性格适合外包公司,因为环境简单而且需求明确。
尤其是不用考虑项目上线后的市场反馈(可能我想的比较简单而且说的有偏颇,反正我真的是这么想的)。而自己的做产品的话需要考虑的多而且需求变更,公司可能达不到预计等等意外.尤其是创业中的公司变数太大。所以我个人找工作本来就倾向于外包,各司其职等等,反正意思就是对于公司情况我很满意。
开始面试我问题了!!这里是个重点,让我讲了一些情景处理和业务实现。一直到这里问的都ok,然后的然后,我之前也写了一直用的spring boot.我不知道是真的这么巧还是面试官故意的。
问我做过原生项目么?excuse me?这个要get什么技能?
我说当时学习的时候做过原生demo.没有实际项目经历.然后面试官说嗯。那部署过项目么?我说没有(我真不知道现在当个开发还必须全栈么?大佬们也可以留言告诉我情况~),但是在服务器上跑过项目,因为上个项目没有上线,所以没做到最后,但是会简单的操作linux
服务器.知道一些常用的命令和脚本的编写,面试官追问:也就是没有自己部署上线经验了?我说是的。
面试官说他们公司用的都是spring
,我用过么?我说用过啊,springboot
只不过spring
进一步封装而已.最开始都用的spring啊~只不过配置上比spring boot
麻烦,但是是可以搭环境的(其实我现在还在吐槽为什么外包技术栈不是最新的~)
前端技术都会什么啊?我说简单的html页面编写,jQuery
会用,以前做过一些简单的网页,但是框架页面渲染什么都没做过。重点要来了,面试官跟我说,我觉得你技术点比较单一啊,我脸上笑嘻嘻,心里MMP.你要是想找个全栈我确实是知识点比较单一,然后当时确实是心里有点觉得自己是不是会的太少了。
接下来我觉得进入到重中之重:问我期望薪资多少啊?我报了个价(说实话是在我事先预计的低了点的,因为之前那一串的问答让我有点受挫),剩下说了点工作上的福利待遇啥的就不多说了,然后谈完后很客气的就先走了。
出了公司我情绪还有点低落,觉得是不是自己挺菜的,然后群里扯淡,和一个我觉得高山仰止的人聊了这个事,那个人说别多想,这个就是套路...总要用一串你很难答上的问题来压压你.我多多少少受到安慰了。然后走路,地铁、公交~折腾到家五点多快六点的时候,收到了boss上的回信,说觉得我还不错,因为公司现在比较着急赶项目,本来应该跟老板报告再决定招不招的。
但是现在时间紧,如果愿意可以下周一就去,试用期怎么样怎么样的就比较大众化了,没啥好说的。然后我现在并没回复,一来双向选择,我觉得我还没选呢。二来我是打算休息几天再开始工作,三来,你可以说我幼稚,但是我第一次遇到这种可能是故意压人的面试官,心里不痛快啊!
总结
其实我面试经历不太多,但是既然今天面了,而且有一些感悟,所以就总结一下,给比我新的正在找工作的人点建议吧 。
首先打铁还需自身硬.基础还是要多啃啃的,用不到也别觉得可惜,你看我上次啃得没用到但是这次用到了啊!会的多一点起码不会是错~我们不知道机会什么时候会来!!!
二,如果面试中被人连环问你都不会,别跟我一样急着否定自己.如果真的是你菜,那也已经菜了,不然别人故意的,你也没办法.可以适当 的坚持下自己的想法.我现在就好后悔之前报薪资的时候没扛住然后往下报了.哎~
三,我个人的经验,就是不管面试还是笔试,问到的是你知道,但是不是很了解的东西,你可以往你确定正确而且有点相关的技术上靠.就是把握说话的方向吧.笔试也是,我反正现在觉得我写的答案比较多起码不是减分项,因为感觉面试官看我的答案的时候是挺满意的. 暂时就这么多吧以后我会尽量每一次面试都补充或者写一下经过,问题,感悟和总结的~~
对了,再安利下,有个软件 叫做牛客,里面可以刷题,然后我挺经常用的,里面有收费的内容不过我没用过,单纯用来学习java基础知识的.如果觉得没啥好学习途径的萌新可以下载一个试试牛客 。
喏,手打不易,而且八点多快九点了我还在网吧敲得这篇文章,所以别吝啬动动小手分享转发点赞评论啥的~
---END---
推荐阅读:
Android自定义View-【不可思议的Canvas】天气不可能那么可爱
Android Q退出了甜蜜的命名传统,Google悄然走出命名困境