跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

频繁遇到的10个Java面试问题

下面是近来面试中经常被问到的10个问题,现在整理分享出来,以供参考。 1、用10分来评估你自己——你在Java方面有多好? 如果您对自己或对 java 的熟练程度不太确定,那么这是一个非常棘手的问题。如果你是java专家,你应该放低一点。在这之后,你可能会根据你所承认的水平得到问题。因此,例如,如果您说了10,但不能回答一个相当困难的问题,那么这将是一个缺点。 2、解释Java 7和Java 8的区别。 老实说,有很多不同之处。在这里,如果你能列出最重要的,就足够了。您应该解释Java 8中的新特性。有关完整列表,请访问原始网站:Java 8 JDK。 你应该知道的最重要的一点是: Lambda表达式,一个新的语言特性,已经在这个版本中引入。Lambda表达式允许您将功能视为方法参数或代码视为数据。Lambda表达式允许您更紧凑地表达单方法接口的实例(称为函数接口)。 Method references( 方法引用)为已经有名称的方法提供了易于阅读的lambda表达式。 立即学习 “ Java免费学习笔记(深入) ”; Default methods( 默认方法)允许将新功能添加到库的接口中,并确保与为这些接口的旧版本编写的代码的二进制兼容性。 Repeating annotations 提供了将相同注释类型多次应用于相同声明或类型使用的能力。 Type annotations 类型注释提供了在使用类型的任何地方应用注释的能力,而不仅仅是在声明中。与可插入类型系统一起使用时,该特性支持改进的代码类型检查。 3、您知道集合类型有哪些? 在这里你应该知道最重要的一点: ArrayList LinkedList HashMap HashSet 在此之后,您可能会遇到一些问题,比如什么时候应该使用这个特定的集合类型,与其他类型相比有什么好处,它如何存储数据,以及幕后的数据结构是如何工作的。 在这里,最好的方法是尽可能多地了解这些集合类型,因为各种问题几乎是取之不尽的。 4. Object 类有哪些方法? 这是一个很常见的问题,用来确定你对基本知识的熟悉程度。这些是每个对象都有的方法: Object类,属于java.lang包,位于类层次结构树的顶部。每个类都是对象类的直接或间接的后代。您使用或编写的每个类都继承对象的实例方法。您不需要使用任何这些方法,但是,如果您选择这样做,您可能需要使用特定于类的代码覆盖它们。 从本节讨论的Object继承的方法有:
protected Object clone() throws CloneNotSupportedException
创建并返回此对象的副本。
public boolean equals(Object obj)
标识其他对象是否“等于”这个对象。
protected void finalize() throws Throwable
当垃圾收集确定没有对对象的引用时,垃圾收集器在对象上调用。
public final Class getClass()
返回对象的运行时类。
public int hashCode()
返回对象的hashcode
public String toString()
返回对象的字符串表示形式。 Object的notify、notifyAll和wait方法都在同步程序中独立运行线程的活动中起着作用,这将在后面讨论,在这里不会讨论。 有五种方法:
public final void notify()
public final void notifyAll()
public final void wait()
public final void wait(long timeout)
public final void wait(long timeout, int nanos)
5、为什么String对象在Java中是不可变的? 1、因为字符串在Java中是不可变的,才能有String pool。通过这种方式,Java运行时节省了大量Java堆空间,因为不同的字符串变量可以引用池中的相同字符串变量。如果String不是不可变的,那么String interning就不可能实现,因为如果任何变量改变了值,它就会反映在其他变量中。 (更多相关面试题推荐: java面试题及答案 ) 2、如果字符串不是不可变的,那么它将对应用程序造成严重的安全威胁。例如,数据库用户名和密码作为字符串传递,以获得数据库连接、套接字编程主机和作为字符串传递的端口详细信息。因为String是不可变的,所以它的值不能更改。否则,任何黑客都可能更改引用值,从而导致应用程序中的安全问题。 3、由于String是不可变的,所以它对于多线程是安全的,并且单个字符串实例可以在不同的线程之间共享。为了线程安全,避免使用同步;字符串是隐式线程安全的。 Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 4、字符串在Java类加载器中使用,不可变性提供了正确的类被类加载器加载的安全性。例如,考虑一个您试图加载java.sql的实例。连接类,但引用的值被更改为myhacking。连接类,可以对数据库执行不需要的操作。 5、因为String是不可变的,所以它的hashcode会在创建时缓存,不需要再次计算。这使它成为映射中键的一个很好的候选对象,而且它的处理速度比其他HashMap键对象快。这就是为什么String是HashMap键最常用的对象。 6、Final、Finally和Finalize的区别是什么? 这个问题是我最喜欢的。 final 关键字在几个上下文中用于定义一个只能分配一次的实体。 Java finally块是用来执行重要代码的块,例如关闭连接、流等。无论是否处理异常,Java finally块总是被执行。Java finally块跟随try或catch块。 Finalize是 GarbageCollector(垃圾收集器)在删除/销毁对象之前调用的方法,对象有资格进行垃圾收集以执行清理活动。 7、diamond的问题是什么? diamond问题反映了为什么不允许在Java中进行多次继承。如果有两个类具有具有特定方法的共享超类,那么它将在两个子类中被重写。然后,如果您决定从这两个子类继承,那么如果您想调用该方法,语言无法决定您想调用哪个方法 我们把这个问题称为钻石问题。它的名字来自上面的图片,它描述了警告。 8、你怎么能让一个类不可变的? 我认为这是一个相当困难的问题。你需要对你的类做一些修改,以实现不变性: 1、将类声明为final,这样它就不能扩展了。 2、使所有字段都是私有的,这样就不允许直接访问。 3、不要为变量提供setter方法 4、让所有可变字段成为final,这样它的值只能被赋值一次。 5、通过执行深度复制的构造函数初始化所有字段。 6、在getter方法中执行对象克隆,以返回副本,而不是返回实际的对象引用。 9、单例Singleton什么意思? singleton是一个类,它只允许自己的一个实例被创建,并提供对所创建实例的访问。它包含静态变量,这些静态变量可以容纳其自身的惟一和私有实例。当用户希望将类的实例化限制为一个对象时,可以使用它。当需要单个对象来协调跨系统的操作时,这通常是有帮助的。 10、什么是依赖注入? 这是您在Java EE或Spring工作时必须知道的第一个问题。控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。 组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection) 总结 在本文中,我们讨论了10大Java面试问题,我认为,根据我的经验,这是当今最重要的问题。如果你知道这些,我相信你在招聘过程中会有很大的优势。 如果你在这个话题上有类似的经历,或者你有一些成功的故事,请在下面的评论中分享。 相关推荐: java视频教程

相关文章