Java实习生面试题及答案.docx

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

Java实习生面试题及答案

一、Java基础概念

问题:说说Java面向对象的三大特性,分别举个简单例子

答案:三大特性是封装、继承、多态。

封装:把对象的属性和方法藏起来,只暴露必要接口。比如定义Person类,把name和age设为私有,通过getName()、setAge()方法操作,避免直接修改属性;

继承:子类拿父类的属性和方法,还能加自己的功能。比如Student继承Person,既能用Person的getName(),又能新增study()方法;

多态:父类引用指向子类对象,调用方法时执行子类实现。比如Personp=newStudent();,p.study()会执行Student里的study()方法,而不是父类(若父类没定义则报错)。

问题:String、StringBuilder、StringBuffer有啥区别?实际开发中什么时候用哪个?

答案:核心区别在可变性和线程安全:

String:不可变,每次拼接(比如s+=a)都会新生成对象,效率低,适合简单的字符串定义(比如Stringname=小明);

StringBuilder:可变,线程不安全,但效率高,适合单线程下频繁拼接字符串(比如循环里拼日志:sb.append(日志内容));

StringBuffer:可变,线程安全(加了synchronized锁),但效率比StringBuilder低,适合多线程环境下的字符串操作(比如多线程写同一个缓存字符串)。

二、集合框架

问题:ArrayList和LinkedList的底层结构是什么?增删查改效率有啥区别?用在什么场景?

答案:

底层结构:ArrayList是动态数组(大小不够时自动扩容),LinkedList是双向链表;

效率区别:

查(get(index)):ArrayList快,直接通过索引定位;LinkedList慢,得从表头/表尾遍历到指定位置;

增删(中间位置):LinkedList快,改下链表的指针就行;ArrayList慢,得移动数组里的元素(比如在第2位插数据,后面的元素都要后移);

场景:查多改少用ArrayList(比如存用户列表,经常按索引查用户);频繁在中间增删用LinkedList(比如存消息队列,经常在队列中间插入/删除消息)。

问题:HashMap的key可以是null吗?value呢?HashMap和Hashtable有啥核心区别?

答案:

HashMap的key可以为null(只能有1个nullkey),value也可以为null;

核心区别:

线程安全:Hashtable线程安全(方法加了synchronized),HashMap线程不安全;

效率:HashMap效率高,Hashtable效率低;

key/value限制:Hashtable的key和value都不能为null,HashMap可以。

三、异常处理

问题:Checked异常和Unchecked异常有啥区别?各举两个实际开发中遇到的例子

答案:

区别:Checked是编译时异常,必须显式处理(要么try-catch,要么throws);Unchecked是运行时异常,编译不报错,不用强制处理;

例子:

Checked:IOException(读文件时没找到文件)、SQLException(连数据库时地址错了);

Unchecked:NullPointerException(调用了null对象的方法,比如Strings=null;s.length())、ArrayIndexOutOfBoundsException(数组越界,比如int[]arr={1};arr[1])。

问题:try-catch-finally里,finally块一定会执行吗?如果try里写了return,finally还会执行吗?举个例子

答案:几乎一定会执行,除非JVM直接退出(比如System.exit(0));try里有return,finally还是会执行,执行完再返回try的结果。

例子:

publicstaticinttest(){

inta=1;

try{

returna;//这里会先记录返回值1,再进finally

}finally{

a=2;//改了a,但不影响之前记录的返回值

}

}

//调用test()会返回1,不是2

四、多线程基础

问题:创建Java线程有哪两种常用方式?它们的区别是什么?写段简单代码示例

答案:两种方式是“继承

文档评论(0)

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

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

1亿VIP精品文档

相关文档