Java初级工程师面试题及答案.docx

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

Java初级工程师面试题及答案

一、Java基础语法

问题:String为什么是不可变的?实际开发中怎么避免频繁创建String对象?

答案:String底层是char[]数组(JDK9后是byte[]),且被final修饰,所以数组长度和内容都不能改。另外String的hashCode等方法会缓存结果,不可变能保证哈希值稳定,适合当HashMap的key。

避免频繁创建的话,用StringBuilder(单线程)或StringBuffer(多线程)拼接,比如循环里拼字符串时,千万别直接用“+”,会每次new新对象。

问题:int和Integer有什么区别?什么时候会自动装箱/拆箱?

答案:int是基本数据类型,存的是数值,默认值0;Integer是包装类,属于引用类型,默认值null,还能调用equals()、valueOf()这些方法。

自动装箱就是int转Integer,比如Integera=10;(底层是Integer.valueOf(10));自动拆箱是Integer转int,比如intb=a;。注意如果Integer对象是null,拆箱会抛NullPointerException,比如数据库查数值字段可能返回null,用Integer接收后直接转int就会报错。

二、面向对象

问题:Override(重写)和Overload(重载)的区别是什么?重写有哪些规则?

答案:Overload是同一个类里,方法名相同但参数列表(个数、类型、顺序)不同,返回值和权限修饰符随便;比如add(inta)和add(inta,intb)就是重载。

Override是子类重写父类的方法,方法名、参数列表、返回值(子类返回值可以是父类的子类)必须完全一样,而且子类方法的权限不能比父类小(比如父类是public,子类不能是protected),父类的final方法不能重写。

问题:讲一下你理解的单例模式?写一个线程安全的单例模式代码。

答案:单例模式就是保证一个类只有一个实例,还提供全局访问点,比如项目里的配置管理器、连接池通常用单例。

线程安全的单例常用“静态内部类”方式,代码如下:

publicclassSingleton{

//私有构造器,防止外部new

privateSingleton(){}

//静态内部类,只有被调用时才加载,实现懒加载

privatestaticclassSingletonHolder{

privatestaticfinalSingletonINSTANCE=newSingleton();

}

//全局访问方法

publicstaticSingletongetInstance(){

returnSingletonHolder.INSTANCE;

}

}

这种方式不用加锁,靠JVM类加载机制保证线程安全,还能懒加载(用到才创建实例),比“双重检查锁”简单,不容易出错。

三、集合框架

问题:ArrayList和LinkedList的区别?实际开发中怎么选?

答案:底层结构不一样:ArrayList是动态数组,靠数组扩容实现(默认初始容量10,满了按1.5倍扩);LinkedList是双向链表,每个元素存前后节点地址。

选法看场景:如果是查多改少(比如频繁get(index)),用ArrayList,因为数组查元素是O(1);如果是增删多(尤其是在列表中间增删),用LinkedList,链表增删不用移动元素,是O(1)。但要注意,LinkedList如果用get(index),会从表头或表尾开始遍历,效率很低,比如遍历LinkedList最好用迭代器,别用for循环按索引取。

问题:HashMap的key可以是null吗?HashMap和Hashtable的区别是什么?

答案:HashMap的key可以是null(只能有一个nullkey),value也可以是null;Hashtable的key和value都不能是null,否则抛NullPointerException。

其他区别:Hashtable是线程安全的(方法加了synchronized),但效率低,现在基本不用;HashMap线程不安全,但效率高,多线程环境下可以用ConcurrentHashMap替代。另外初始容量和扩容机制不同,Hash

文档评论(0)

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

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

1亿VIP精品文档

相关文档