记一次线上面试实习生岗位的心得和体会

第一次投实习生简历的心得:

这次面试我投的是Java实习开发岗,在Boss投的简历,过了初筛,第一次线上面试,算是社招的难度吧。问得有一些很基础,但是有一些很离谱,被问了很多次底层的实现原理。(蒙圈了)
直接上面试题:
1.面试官:说一下String、StringBuffer和StringBuilder的区别及用法?
一开始我还是挺有自信的,因为也看过。就说了String指的是字符串数值不可改变,因为它底层使用final修饰过。StringBuilder和StringBuffer的用法一样,不同的是StringBuilder是jdk1.5引入的,使用范围是单线程,因为synchronized修饰过,所以不安全,但是效率比StringBuffer高。然后面试官接着追问(String的底层原理、StringBuffer的底层原理),我蒙圈了,就心想String的底层不就是字符数组吗还有什么原理,就没回答上来,StringBuffer更没把握了。然后他也就跳过了接着问字符串的拼接是怎么实现的,这个我之前看过,但是我没回答上来,也答得偏,其实是因为本身字符串的数值是不可变的,是因为拼接的时候使用了StringBuilder的append()方法,将字符串拼接了起来,然后toString()打印成字符串输出。

2.面试官:说一下Java常用的数据结构?
我就直说了List、Set、Map三个,他追问List和Set有哪些常用的实现类,我就说了ArrayList、LinkedList、Vector和HashSet、TreeSet吧,然后他追问ArrayList和TreeSet的底层是怎么实现的?我又蒙圈了,ArrayList是数组我知道,因为数组有索引,查询非常快,但是说怎么实现和创建我除了直接new还真答不上来,TreeSet也没了解过(后来查了资料,原来TreeSet和TreeMap原理是一样的,底层结构是红黑树,也是通过重写hashCode()和equals()方法来实现唯一)。还问了我LinkedList底层结构(这我只知道底层结构是双向链表),然后他追问LinkedList是怎么实现一个链表反转(我一点都没学过java的数据结构,还说给我一个节点让我说出思路,唉,后来要补上了)。

3.面试官:说一下Object类的常用方法和Java常见的异常,还有foreach如果要遍历以下List集合,里面如果加上list.remove()可以吗?
这次问得还比较简单,Object类常用的就说出了6个,hashCode()、equals()、toString()、finalize()、clone()、wait()。常见的异常:
NullPointerException(空指针异常)、ClassCastExcepton(数据类型转换异常)、SqlException(数据库异常)、IndexOutOfBoundsException(索引越出下标异常)、ClassNotFound(文件路径找不到异常)。Foreach的循环体是不可以,也不建议操作的,只提供遍历集合的功能。如果加上list.remove()会报错。
4.面试官:说到hasCode()和equals(),能说一下hasCode()的约定和equals()和= =的区别吗?
其实这个问题非常常见,hasCode()的话,是一个对象的标识,如果两个对象equals()比较后相等,那么它们的hasCode值一定相等,但是如果equals()比较后不等,那么它们的hashCode也有可能相等。说到equasl()和= =的区别,相信大家都会有印象,其实equals()方法底层返回的就是= =,所以它们本质上是相同的,所以一般比较基本数据类型的时候使用的是= =,比较的是它们的值,如果是引用对象使用= = 比较的话,则是比较它们的地址是否指向同一个内存空间。而因为equals()是Object类的方法,所以要引用对象才可以使用该方法,如果引用对象没有重写equals()方法的话,也是跟用= = 比较毫无差别的。例如String类,它重写了equals()方法,重写后变成如果两个字符串的字符序列相同那么就返回true,所以String str = “abc” 和String str1 = “abc”,那么str.equals(str1)是为true,==号比较也为true,因为都是指向了同一个内存空间"abc"。但是如果普通引用对象不重写equals(),那么它们比较的就是内存地址(也就跟= =一样),所以如果String类底层没有重写equals()的话,那么str.equals(str1)就为false了。当然,不存在这个可能,因为已经有牛人帮我们写好了String的底层代码。
5.面试官:说一下IO流里的字节流和字符流有什么区别?(这个只是有点印象)

我只是说了字节流操作的是字节和字节数组,而字符流操作的只是字符和字符数组(字符串)。其实标准答案如下:字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单元的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲、就用字节流好点。如果是关系到中文(文本)的,用字符流好点。所有文件的储存都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是把字符编码成字节,再储存到这些字节到磁盘。在读取文件时,也是一个字节一个字节地读取形成字节序列。
使用范围区别?
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串
2.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流可以。

6.面试官:聊一下Spring的依赖注入bean的方式和常用的注解?(终于到框架了)
Spring的依赖注入bean有三种方式:基于构造器注入、基于setter注入、基于注解注入。常用的注解有@Autowired、@Reposity、@Service、@Controller、@RequestMapping、@Resource、@Componet、@Configuration、@Import等。

6.面试官:说一下Bean的作用域?(考记忆力)
Bean的作用域:singleton、prototype、session、globalsession、request、application、websocket(我只说出了前四种),然后追问道各种有什么特点,我只记得singleton和prototype的区别了,说了singleton是单例模式,只要spring容器中存在一个共享bean的实例,并且id与该bean的id相匹配,那么就只会返回一个bean的实例。prototype是原型模式,对需要保持会话状态的bean,Spring容器会对每个对bean的请求都创建一个新的实例。

8.面试官:说一下jsp的内置对象?(JavaWeb知识,也是考记忆力)
jsp有9个内置对象:request、response、pageContext、session、application、out、page、exception、config(我只说出了7种)。

最后连问我对我们公司你有什么想问的吗都没说,就知道已经凉了一半了。没办法,社招招聘的都是希望可以直接进来干活的,而不想费劲去培养一个新人。对于这次线上面试,也知道了自己的不足,基础知识很多不牢固,理解不够透彻。虽然说问的都是原理,但是都是基础,虽然对于实习生没有这么高的要求,但学了还是没有坏处,多面几家就知道自己哪里不足。一开始还以为会问一下数据库的知识,谁知道问了一下Java的基础就没有了,可能已经知道了我的情况吧,也不需要问下去了。总之,不能停止学习,只学了半年,很多知识都只是记忆犹新。不说了,看书去了。。。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值