Java校招面试题及答案.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Java校招面试题及答案

一、Java基础

问:equals和==的区别是什么?举个实际例子

答:==是判断“地址”相等,比如基本类型(int、char)比的是值(因为基本类型存的就是值,没有地址),引用类型(比如String、对象)比的是内存地址;equals默认和==一样,但很多类会重写它,改成“值相等”判断。

比如String:Stringa=abc;Stringb=newString(abc);这里a==b是false(a在常量池,b在堆里,地址不同),但a.equals(b)是true(重写后比的是字符串内容)。

注意:重写equals时一定要重写hashCode,不然用HashMap的时候会出问题——比如两个对象equals为true,但hashCode不同,会被当成两个key存在不同位置。

问:String、StringBuilder、StringBuffer有啥区别?开发中怎么选?

答:核心差在“可变性”和“线程安全”:

String是不可变的,每次拼接(比如a+a)都会新生成字符串,循环拼接时特别耗内存;

StringBuilder是可变的,拼接不会新建对象,但线程不安全,适合单线程场景(比如普通业务代码里拼字符串);

StringBuffer也是可变的,但加了synchronized锁,线程安全,不过性能比StringBuilder慢,适合多线程(比如并发日志打印)。

比如循环拼1000个字符串,用String会生成999个临时对象,用StringBuilder就一个,效率差很多。

问:int和Integer有什么区别?什么是自动装箱/拆箱?

答:int是基本类型,存的是值,默认值0,不能为null;Integer是int的包装类,是对象,存的是地址,默认值null,还能调用方法(比如Integer.parseInt(123))。

自动装箱就是基本类型转包装类,比如Integera=10;(底层是Integer.valueOf(10));拆箱是包装类转基本类型,比如intb=a;(底层是Value())。

注意:Integer有缓存,-128到127之间的值会复用对象,比如Integerc=100;Integerd=100;c==d是true,但超过127比如c=200;d=200;就是false。

二、集合框架

问:ArrayList和LinkedList的区别?什么时候用哪个?

答:底层结构不一样:

ArrayList是数组实现的,查数据快(通过索引直接找,O(1)),但增删慢(比如中间插数据,要移动后面的元素,O(n));

LinkedList是双向链表实现的,增删快(改前后节点的指针就行,O(1)),但查慢(要从头遍历,O(n))。

实际用的时候:如果是“查多增删少”(比如存用户列表,经常查用户信息),用ArrayList;如果是“增删多查少”(比如存消息队列,经常加消息、删消息),用LinkedList。

另外ArrayList初始容量是10,满了会扩容1.5倍(比如10→15→22),扩容时会复制数组,所以如果知道大概大小,初始化时指定容量(比如newArrayList(100))能减少扩容次数。

问:HashMap的底层结构?JDK1.7和1.8有什么区别?

答:JDK1.7是“数组+链表”,JDK1.8改成了“数组+链表/红黑树”,核心是优化查询效率:

数组是哈希桶,每个元素是链表(解决哈希冲突,比如两个key算出来的哈希值一样,就存在同一个桶的链表上);

JDK1.8里,当链表长度超过8,而且数组长度=64时,链表会转成红黑树(红黑树查是O(logn),链表是O(n),长链表转树后快很多);如果后来元素少了,树又会转成链表。

其他区别:1.7是头插法(扩容时可能出现循环链表),1.8改成尾插法;1.7哈希函数计算更复杂,1.8简化了(用key的hashCode异或上key的hashCode右移16位,减少哈希冲突);1.8支持nullkey(存放在数组索引0的位置)。

问:HashSet和HashMap是什么关系?HashSet怎么保证元素不重复?

答:HashSet底层就是用HashMap实现的!HashSet的add方法,其实是往HashMap里放一个key(就是HashSet的元素),value是一个固定的空对象(叫

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档