Skip to main content
 Web开发网 » 站长学院 » 浏览器插件

2021年最新java面试宝典(设计模式+List+Main+String)讲解+答案

2021年10月11日6440百度已收录

很实在的JAVA程序员面试小窍门

因为程序员大部分都是头脑程序化,不太会察言观色(察言观色的人都去写PPT了),也就是情商不是很高,我就是属于那种!

今天我们要讲的并不是诸如类的问题,不是怎么撰写面试简历的问题,也不是怎么穿衣打扮提高形象的问题,而是总结一些我们JAVA程序员进入公司面试的题目跟答案,希望能帮助到大家!

想让你的简历打动面试官吗?

来看下面的面试题跟答案吧!

1、你知道的List都有哪些? 答案: ArrayList、LinkedList、Vector等。

2、List和Vector有什么区别? 答案: Vector是List接口下线程安全的集合。

3、List是有序的吗? 答案: List是有序的。

4、ArrayList和LinkedList的区别?答案: 分别用在什么场景? ArrayList和LinkedList数据结构不一样,前者用在查询较多的场合,后者适用于插入较多的场合。

5、ArrayList和LinkedList的底层数据结构是什么? 答案: ArrayList使用的是数组结构,LinkedList使用的是链表结构。

6、ArrayList默认大小是多少,是如何扩容的? 答案: Jdk1.7之前ArrayList默认大小是10,JDK1.7之后是0,JDK差异,每次约按1.5倍扩容。

7、List是线程安全的吗?如果要线程安全要怎么做? 答案: List中的Vector才是线程安全的,其他要实现线程安全使用工具类Collections.synchronizedList(new ArrayList())方法。

8、怎么给List排序? 答案: 使用List自身的sort方法,或者使用Collections.sort(list)方法;

9、Arrays.asList方法后的List可以扩容吗? 答案: Arrays.asList使用的是final数组,并且不支持add方法,不支持扩容。

10、List和Array之间如何互相转换? 答案: List>Array使用toArray方法,Array>List使用Arrays.asList(array)方法,由于它是固定的,不固定的可以使用new ArrayList(Arrays.asList(array))。

11.请列举出在JDK中几个常用的设计模式? 答案: 单例模式(Singleton pattern)用于Runtime,Calendar和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像Boolean.valueOf,观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。

12.什么是设计模式?你是否在你的代码里面使用过任何设计模式? 答案: 设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸

13.Java 中什么叫单例设计模式?答案: 请用Java 写出线程安全的单例模式 单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime是单例模式的经典例子。从 Java 5 开始你可以使用枚举(enum)来实现线程安全的单例

14.在 Java 中,什么叫观察者设计模式(observer design pattern)? 答案: 观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行反映。这个视图对象是一个主体,而不同的视图是观察者。

15.使用工厂模式最主要的好处是什么?答案: 在哪里使用? 工厂模式的最大好处是增加了创建对象时的封装层次。如果你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。

16.举一个用 Java 实现的装饰模式(decorator design pattern)?答案: 它是作用于对象层次还是类层次? 装饰模式增加强了单个对象的能力。Java IO 到处都使用了装饰模式,典型例子就是 Buffered 系列类如BufferedReader和BufferedWriter,它们增强了Reader和Writer对象,以实现提升性能的 Buffer 层次的读取和写入。

17.在 Java 中,为什么不允许从静态方法中访问非静态变量? 答案: Java 中不能从静态上下文访问非静态数据只是因为非静态变量是跟具体的对象实例关联的,而静态的却没有和任何实例关联。

18.设计一个 ATM 机,请说出你的设计思路? 答案: 比如设计金融系统来说,必须知道它们应该在任何情况下都能够正常工作。不管是断电还是其他情况,ATM 应该保持正确的状态(事务) , 想想 加锁(locking)、事务(transaction)、错误条件(error condition)、边界条件(boundary condition) 等等。尽管你不能想到具体的设计,但如果你可以指出非功能性需求,提出一些问题,想到关于边界条件,这些都会是很好的。

19.在 Java 中,什么时候用重载,什么时候用重写? 答案: 如果你看到一个类的不同实现有着不同的方式来做同一件事,那么就应该用重写(overriding),而重载(overloading)是用不同的输入做同一件事。在 Java 中,重载的方法签名不同,而重写并不是。

20.举例说明什么情况下会更倾向于使用抽象类而不是接口? 答案: 接口和抽象类都遵循”面向接口而不是实现编码”的设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。下面有几个点可以帮助你回答这个问题:

在 Java 中,你只能继承一个类,但可以实现多个接口。所以一旦你继承了一个类,你就失去了继承其他类的机会了。 接口通常被用来表示附属描述或行为如:Runnable、Clonable、Serializable等等,因此当你使用抽象类来表示行为时,你的类就不能同时是Runnable和Clonable(注:这里的意思是指如果把Runnable等实现为抽象类的情况),因为在 Java 虽然你不能继承两个类,但当你使用接口时,你的类就可以同时拥有多个不同的行为。 在一些对时间要求比较高的应用中,倾向于使用抽象类,它会比接口稍快一点。 如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。有时,接口和抽象类可以一起使用,接口中定义函数,而在抽象类中定义默认的实现。

21.main方法是做什么用的? 答案: main方法是Java程序的入口方法,JVM在运行的时候会首先查找main方法。

22.不用main方法如何运行一个类? 答案: 不行,没有main方法我们不能运行Java类。 在Java 7天之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。

23.main方法如何传递参数?答案: 传递参数的类型是什么?能不能改变该参数类型? String数组,不能改变。

24.main方法为什么是静态的?能不能改为非静态? 答案: main()方法一定是静态的,如果main()是非静态的那么在调用main方法时JVM就得实例化它的类。

不能改为非静态,main()方法必须声明为静态的,这样JVM才可以调用main()方法而无需实例化它的类。

如果从main()方法去掉“static”这个声明,虽然编译依然可以成功,但在运行时会导致程序失败。 在实例化时,还得调用类的构造函数。

如果这个类的构造函数有参数,那么届时就会出现歧义。

25.main方法能被重载吗? 答案: 可以,我们可以重载main()方法。一个Java类可以有任意数量的main()方法。

26.main方法能被覆盖吗? 答案: 在Java中静态方法在编译时会编译在一起,main方法是静态方法,所以你在Java中不能覆盖静态方法。

27.main方法的返回类型是什么?能不能改变? 答案: void,不能改变。

28.main方法的作用域用什么修饰?答案: 能不能改变? public,不能改变。

29.main方法可以同步吗? 答案: main方法可以在Java中同步,synchronized修饰符允许用于main方法的声明中,这样就可以在Java中同步main方法了。

30.main方法可以终结吗? 答案: 可以在Java中终结main方法。

下期更新java更多面试资料+答案 ,来点个关注第一时间看到java最新知识

评论列表暂无评论
发表评论
微信