关于前段时间的Java实习面试总结
Posted q964024886
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于前段时间的Java实习面试总结相关的知识,希望对你有一定的参考价值。
前言:关于前段时间(大概在五月下旬)的3+1面试,一直想做个总结,但是后面接踵而来的实验、考试、做课程设计,不得不把这事搁在现在来完成。
3+1面试总结
3+1,是学校与企业联合培养人才的一种方案,面向大三的学生。这一次,我们计算机专业和网络工程专业一共大概500多人,而实习岗位只有80个,还是有一点竞争的。毕竟学院要求不可以自己去外面找实习,只能在这里抢或者留在学校学习。说什么我都不想在大四呆在学校了。
清晰回忆起5月19日的下午,我带着准备好了的简历,提前30多分钟来到学院楼,企业也陆陆续续地的搭好自己的“营地”,我开始找我感兴趣的企业,并且和他们开始聊一些关于实习的内容。
第一家公司是理致,“营地”里坐的事两位年轻的大佬,我坐在椅子上,把简历递给他们,他们问了我一些问题,Java学得怎么样?有没有做过项目?还有闲谈了其他,他们说他俩都是佛大的师兄,然后工作环境啥的很比较好,公司在祖庙附近交通也是很方便的,然后一天的工作时间也比较少,压力小......
之后了解其他公司,其中到了蚁米科技,他看了一下我的简历,聊了一下简历上的内容,后来他问起技术的问题...
他说:“我看你有学习框架,能说一下Spring的核心吗?”
我答:“Spring的核心啊,我觉得就是有三个部分,一个是IOC/DI,一个是AOP,还有就是Spring的事务控制了。”
然后就是跟他解释了一下这些概念与思想,其中我讲到了Spring的好处时,提到了解耦。然后面试官就继续追问我什么是解耦,为啥需要解耦。我当时其实并不可以很好地解释这个概念,现在回忆起当时是这样说的......
我说:“耦合就是模块与模块的联系、依赖的紧密程度吧,解耦就是要降低这种程度。”
他继续问:“为啥需要解耦”
我答:“因为要尽量符合高内聚低耦合啊”
他还是问:“从原理上讲一下为什么要这么做”
我(有点受不了了)答:“因为书上这么说的”
哦豁凉凉,我当时只知道什么是解耦,而不知道为什么要解耦,这问题我回答地不清不楚。寻找了一下自身的原因:平时没有很在意这写些概念,只觉得书上是这么说的,并没有去想为什么需要这样。这样不好,得改。
后来,我找了一下资料。
耦合,从字面上来看有藕断丝连的意思,“耦” 这个字在中国汉语里指的是两个人在一起耕地,他俩各干各的互不影响,这也是“耦合”的由来。那么 低耦合也就是尽可能的使每个模块之间或者每个类之间再或者是每个方法之间的关联关系减少,这样可以使各自尽可能的独立,一个地方出错,不会影响全部,更能提高代码的重用性。这就是为甚需要解耦。
就这样,那天投了几家公司。之后就有了很多笔试,复试......
接下来重点聊一下金赋面试,第一轮是笔试,6条题目。但是此时此刻我只能想起其中的3条题目了。
-
map集合的遍历方式
-
通过Map.keySet()遍历key和value
-
通过Map.entrySet使用iterator遍历key和value
-
通过Map.entrySet遍历key和value
-
通过Map.values()遍历所有的value,但不能遍历key
-
-
乱码产生的原因
文件在保存时是有编码格式的,只有当保存时使用的编码格式与读取时使用的编码格式相同时才能正确读取文件;例如UTF-8编码、GBK编码都可以读取中文,那么如果采用UTF-8编码保存文件,但是采用GBK编码读取文件就会造成乱码,因此UTF-8编码保存的文件应该使用UTF-8编码读取。
-
面向对象的特点
封装:将同一种对象的属性和方法抽象成一个类,隐藏对象的属性和方法的实现并对外提供接口,通过接口来访问类。
继承:对同类事物的同种特性的抽象。继承时,子类拥有父类的属性和方法,并且可以有自己特有的属性和方法,此外,子类还可以以自己的方式来实现父类的功能(重写).
多态:对不同种事物的同种行为的抽象。
第二轮是技术面试(虽然只有几个问题,但是聊得还挺久的):
-
描述一下什么是类?
我当时说:“类就是对某一事物的抽象,这个事物有自己的行为和属性。比如人,所有人都是一个类,每个人都有一双眼睛,一个鼻子,就是这个类的属性,人可以跑步,可以吃饭,这就是类的行为动作。转换到代码上来说,属性就是类中的数据,行为就是类能提供的服务、方法”。
-
简述一下你做的这个项目?
一个动态博客系统...
(当时讲了开发流程,所用的技术栈等等,然后就聊到了阿里大于短信服务,恰好面试官也有用过)
-
有关阿里大于的短信验证码功能?针对这一功能,假如要换为腾讯的,百度的要怎么搞?因为阿里的会比较贵,注意要换的地方可能有很多处。(面试官说这个功能他前段时间也有用过,所以会比较感兴趣)
我当时说:“啊这样的话,看可不可以把有关短信验证的代码块抽取,把阿里提供的接口换成腾讯的、百度的性不行,或者是把短信验证的功能封装成接口或者是抽象类,用不同的版本去实现它,应该可以处理多处用到的问题。我也没试过,这些只是初步的想法,不知道行不行得通,或者可以尝试一下用AOP?”
那时候我回答完只看见他微微地点了一下头,我并不知道是否答对,咱不知道,咱也不敢问啊。
-
假如实习过后,你愿意继续留在金赋吗?
可以的。
过了一段时间,我收到了金赋的复试通知,让我去他的公司,我过去了,提早了二十多分钟,在他们公司静静地等着。期间跟人事部的小姐姐得知,这次面试也是技术面,有两波,先来的是开发部的两个大佬,后来的是研发部的大佬,他们问的问题我都做了总结:
-
数据库的三范式。
-
第一范式:确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。
-
第二范式:需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
-
第三范式:确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖)。
-
-
假如你马上就要上飞机了,突然你同事有很紧急的任务要你马上做,你该怎么办?
我当时说:“Ummm可以叫上级安排一下,因为自己没有时间做这个任务,让上级安排有空人员去完成。换在操作系统上说,一个进程执行着自己的事,就应该告诉CPU,自己没空,然后让CPU调度其他空闲的进程”
-
你熟悉哪些设计模式?讲一下工厂模式?
熟悉的设计模式有代理模式,工厂模式,单例模式,观察者模式。
工厂模式大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。采用工厂模式的好处是方便解耦,可以降低模块与模块的耦合性。
-
假如要你实现一个加减乘除的计算器,你会怎么做?
“如果要比较好的设计的话,我觉得可以用接口+实现类的方式去设计。先定义一个接口,写四个抽象方法,然后用类去实现它。或者直接用类,不用接口,不过我之前在一本书上看过用接口设计的思想会比较好”。
-
对未来的技术生活有什么展望?
“我觉得嘛,Java的生态圈还是很大很繁荣的,过段时间就要开始学习SpringBoot和SpringCloud,还有很多框架要学,因为现在是站在巨人的肩膀上,用着别人造好的‘车轮子’,希望自己以后可以多研究一下源码,多学一些算法,可以自己造车轮子,未来10年之内成为架构师。”
-
聊一下你的项目开发流程。
“呃...首先要设计好数据库,然后搭建开发环境,利用Maven管理项目,配置好配置文件,写好实体类,然后主要从controller层、service层、dao层完成后台,利用json交互数据,前端会用到js、ajax。”
-
聊一下3种list的区别。
“Java集合中的常用的list,有ArrayList、LinkedList、Vector。其中ArrayList和Vector都是基于数组实现的,其中这两个的区别就是Vector比较古老,大概在JDK 1.0时就有了,是线程安全的,在扩容时容量是乘以2的,而ArrayList在JDK 1.2时出现,线程非安全,在扩容时容量乘以1.5,这是这两个的主要区别。LinkedList是基于双向链表实现的,在进行插入/删除操作时,时间复杂度为O(1),因为链表可以断裂,但是在检索的时候,时间复杂度为O(n),而ArrayList在进行插入/删除操作时,时间复杂度为O(n),在检索的时候,时间复杂度却为O(1),因为跟它的数据结构有关。”
-
详细描述一下什么是多态,同一个方法名,不同返回类型算多态吗?
多态性是指子类对象可以像父类对象那样使用,同样的消息可以发给父类对象,也可以发给子类对象。
-
聊一下Maven。
“Maven是项目管理工具,目前经常用于管理项目所依赖的jar包,在pom文件引入jar对应的坐标,即可从Maven中央仓库自动下载依赖。很方便,和Gradle类似。”
-
前端与后端怎样交互,用什么数据,后端怎样处理
“前端发送http请求给后台,后台拿到请求参数,经处理后返回给前端。用的是json数据,我一般在后端用@ResponseBody注解,则返回值自动转化为json数据。”
-
乱码问题
(和笔试那儿一样的......)
-
我看你简历上有博客地址,你平时的学习有做记录吗?
“嗯嗯有记录的,因为以前觉得学习了没有做记录的话,过一段时间就会觉得:咦,前段时间学了什么,怎么没点印象的,就是感觉脑子空空的,之后觉得有必要边学习边总结边记录,方便日后复习,方便找回当时学习这个知识点的状态,不过话说以前也有做纸质版的笔记,现在是电子版的总结,显示效果会好很多。”
码了半天字啦,还有好多没有说完,感觉有点话痨......(接下来的两家公司就不细说了哈)
第二家公司是广东群志有限科技公司,任老师的公司哈哈,第一轮笔试通过了(考核技术),进入第二轮面试(没问技术,只是闲谈),然后竟然挂了。。。
事后我反省了一下,我觉得我是在第二轮面试上问了一个不该问的问题:“假如我进到贵公司,我可以学到什么?”。当时我问完就觉得有点不太对劲,有个面试官脸就黑了,说:“你想学的这里都有。”
Emm...当时4个面试官面试一个学生,说实话我是有点紧张的,问的问题不合适,没有放低姿态,心态没有放好。(最后结果是没有通过)
第三家公司是广东理致有限公司,在祖庙附近。一轮笔试是一些Java的基础题和一些前端的知识,二轮面试时技术面,问的有Hibernate的问题和一些自己做的项目等问题,三轮面试是和老总的谈话,而且还是两个上了年纪的女老总,期间有聊到公司里除了她俩,都是男的,还有很大一部分比例都是佛大的,聊了一下价值观啥的,总之聊得还是很开心的。(最后结果是通过了)
总结一下吧,我发现自己经历的面试多了,就感觉其实也没什么的,会的就会,不会就不会,回去马上学。而且要重点把握自己所做的项目,要经得起面试官的审问,谈吐要自信,多记录多总结就可以成为一个“面霸”了。
以上是关于关于前段时间的Java实习面试总结的主要内容,如果未能解决你的问题,请参考以下文章