- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)