Java面试题整理

1、Java基础

4、当数据需要大量更改时候,StringStringBuffer 哪个是更好的选择?

操作字符串的类有:String、StringBuffer、StringBuilder。
String每次赋值都会申请一片新的内存,创建一个新的对象;
StringBuffer 本质上是动态的,可以动态的更改其值
所以,当数据需要大量更改的时候,StringBuffer 是更好的选择。
StringBufferStringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder多线程环境下推荐使用 StringBuffer

21、String str=“i”String str=new String(“i”) 一样吗?

不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。

5、如何在Java中完成垃圾回收?

Java中,对象不被引⽤时,垃圾回收就会发⽣,对象会被⾃动销毁,调⽤ System.gc() ⽅法或 Runtime.gc() ⽅法。

6、可以在Main() ⽅法执⾏代码?

如果要在类加载时,对象创建之前执⾏语句,可以在类中使⽤静态代码块。所以,即使在main⽅法中创建对象之前,此静态代码块中的语句都将在加载类时执⾏⼀次。

8、是否可以为对象多次调⽤类的构造函数

不可以。使⽤new创建对象时,会⾃动调⽤构造函数,对象创建之后,则⽆法再调⽤该构造函数。

9、如何制作⼀个Java对象的副本

使⽤克隆,我们可以创建具有对象的实际状态的副本。Clone() 是Cloneable Binterface的⽅法,因此需要实现Cloneable interface来进⾏对象拷贝。

10、如何限制⼀个类不被继承

使⽤关键字final

11、在Java中,如何禁⽌序列化变量

想要某些变量不被序列化,那么可以在声明时使⽤关键字transient
private transient val;

13、定义了类的显式构造函数之后,还可以使⽤默认构造函数吗?

如果没有定义显式构造函数,那么Java将提供⼀个默认的⽆参数构造函数,但是如果定义了显式构造函数之后,就不能再调⽤默认构造函数

14、在没有执⾏main()的情况下,成功编译了⼀个Java类,这⼀说法正确吗?

正确,虽然Java编译器规定程序的⼊⼝点为static main,但是没有 main() 还是能够编译,只是不能运⾏。

15、Java中变量没有初始化可以使⽤吗?

Java不会给变量分配默认值,因此变量没有初始化的情况下,程序会编译失败并给出错误提⽰。

16、Java中可以使⽤goto来转到特定⾏吗?

不可以,Java中没有goto关键字

17、equals()== 有什么区别?

Java中,== 操作:
(1)基本数据类型:比较两个变量的值是否相等
(2)引⽤数据类型:比较两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作:表⽰的两个变量是否是对同⼀个对象的引⽤,即堆中的内容是否相同。

19、以下哪个类将分配更多的内存?

A类:三种⽅法,四个变量,⽆对象
B类:五个⽅法,三个变量,⽆对象

在创建对象之前,不会分配内存,所以这两个类都没有分配内存

20、想要保留对象的数据以供以后使⽤,最好的做法是什么?

序列化

22、接口抽象类有什么区别?

(1)实现抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
(2)构造函数抽象类可以有构造函数;接口不能有。
(3)实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
(4)访问修饰符接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符

2、Java容器

23、Java的容器有哪些?

数组 ArrayList
链表 LinkedList
队列 Queue
stack
哈希表 HashMap TreeMap(key排序)
集合 set
Tree
heap

24、HashMapHashtable 有什么区别?

(1)存储HashMap 运行 key 和 value 为 null,而 Hashtable 不允许。
(2)线程安全Hashtable线程安全的,而 HashMap 是非线程安全的。
(3)推荐使用:Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。

25、说一下 HashMap实现原理

HashMap的底层实现原理:
(1)第一步:当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值
(2)第二步:根据 hash 值将 value 保存在 bucket 里。
(3)第三步:当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时使用链表;否则使用红黑树。

26、HashSet 的实现原理?

(1)HashSet 是基于 HashMap 实现的
(2)HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单
(3)相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成
(4)HashSet 不允许重复的值。

27、ArrayListLinkedList 的区别是什么?

(1)数据结构实现:ArrayList动态数组LinkedList双向链表
(2)数据存储方式ArrayList 顺序存储,LinkedList 链式存储
(3)随机访问效率:ArrayList 随机访问的时候效率要高
(4)增加和删除效率:LinkedList 效率要高
(5)使用频繁访问ArrayList频繁增删LinkedList

28、ArrayArrayList 有何区别?

(1)存储内容:Array 可以存储:基本数据类型和对象,ArrayList :只能存储对象。
(2)大小:Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
(3)内置方法:Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

3、多线程

1、什么是多线程

多线程是一个编程概念。在单个程序中以并发方式执行多个任务,同一个进程的多个线程堆栈共享,有助于改进程序的性能

2、为什么Java中会使用Runnable interface?

Runnable 在Java中用于实现多线程java.lang.Runnable 是由一个支持多线程的类来实现的。

3、Java中三种实现多线程的方法?

(1)通过使用 java.lang.Runnable Interface中的 run 方法来实现多线程;
(2)编写一个扩展 java.lang.Thread类的类
(3)实现 Callable 接口;其中RunnableCallback区别runnable 没有返回值,callable 可以拿到有返回值,callable 可以看作是 runnable 的补充。

7、在多线程中,如何确保资源不会同时被多个线程使⽤?

在多线程中,通过使⽤同步的概念来控制对多个线程之间共享的资源的访问。使⽤synchronized关键字,可以确保只有⼀个线程可以⼀段时间内使⽤共享资源。

12、请描述⼀下线程的不同状态

Java中的线程往往是处于下⾯的某⼀种状态。
NEW:通过New关键字创建了Thread类(或其⼦类)的对象
RUNNABLE:这种情况指的是Thread类的对象调⽤了start()⽅法,线程处于就绪状态。
RUNNING:线程获得了CPU,处于运⾏状态。
DEAD:处于RUNNING状态的线程,在执⾏完run⽅法之后,就变成了DEAD状态了。
BLOCKED:这种状态指的是处于RUNNING状态的线程,出于某种原因,⽐如调⽤了sleep⽅法、等待⽤户输⼊等⽽让出当前的CPU给其他的线程。

18、在Java线程编程中,哪个⽅法是所有线程必须实现的?

Run() 是⼀个Runnable接⼝的⽅法,必须由所有线程实现。

29、并行和并发

并发 = 两个队列和一台处理器。
并行 = 两个队列和两台处理器。

4、设计模式

30、设计模式
(1)概念:

31、常见的设计模式

32、说一下单例模式的实现

33、简单工厂模式和抽象工厂模式

34、

35、

36、

37、

38、

39、

40、

41、

42、

43、

44、

45、

46、

47、

48、

49、

50、

51、

52、

53、

54、

55、

56、

57、

58、

59、

60、

61、

62、

63、

64、

65、

66、

67、

68、

69、

70、

71、

72、

73、

74、

75、

76、

77、

78、

79、

80、

81、

82、

83、

84、

85、

86、

87、

88、

89、

90、

91、

92、

93、

94、

95、

96、

97、

98、

99、

100、

1、

2、

3、

4、

5、

6、

7、

8、

9、

0、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面试题整理是为了帮助准备面试的候选人好地了解面试的内容和要求。对于Java2021的面试题整理,可以从各个方面进行组织和分,以便好地帮助面试者准备。下面是我对Java2021面试题整理的一些建议。 1.基础知识:面试题可以包括Java语言的基本语法、关键字、数据型、流程控制语句、异常处理等方面的问题。这些问题可以帮助面试者检验自己对Java语言基础知识的掌握程度。 2.面向对象:面试题可以涉及Java面向对象的概念、封装、继承、多态以及接口、抽象等方面的问题。这些问题可以帮助面试者了解Java面向对象编程的特点和应用。 3.集合框架:面试题可以包括关于Java集合框架的知识,如ArrayList、LinkedList、HashSet、HashMap等的特性、用法和区别。这些问题可以帮助面试者检验自己对Java集合框架的理解和应用能力。 4.多线程:面试题可以涉及Java多线程编程的基本概念、线程的创建与启动、线程同步与互斥、线程池等方面的问题。这些问题可以帮助面试者了解多线程编程的原理和实践。 5.IO流:面试题可以包括关于Java IO流的知识,如输入输出流的分、字符流和字节流的区别、文件读写操作等方面的问题。这些问题可以帮助面试者检验自己对IO流的理解和应用。 6.异常处理:面试题可以涉及Java异常处理的机制、try-catch语句的使用、自定义异常等方面的问题。这些问题可以帮助面试者了解异常处理的原理和常见应用。 7.Java虚拟机:面试题可以包括Java虚拟机(JVM)的基本概念、内存模型、垃圾回收算法等方面的问题。这些问题可以帮助面试者了解JVM的工作原理和性能优化。 8.框架和工具:面试题可以涉及Java常用的开发框架和工具,如Spring、Hibernate、MyBatis、Maven等方面的问题。这些问题可以帮助面试者了解开发框架的应用和工具的使用。 通过对这些方面的面试题整理,可以帮助面试者全面了解Java2021面试的内容和要求,并有针对性地准备和复习相关知识。面试者应该注重理论的学习,同时结合实践经验进行练习,以便在面试时能够好地展示自己的能力和潜力。同时,面试者还应注意自己的沟通能力、问题分析能力和解决问题的能力,这些都是面试过程中重要的评估指标。 ### 回答2: Java2021面试题整理主要集中在以下几个方面: 1. 基础知识:Java中的基本数据型、变量和常量、运算符、控制语句等内容是面试中常见的考点。面试官会通过这些问题判断候选人对Java基础知识的熟悉程度和掌握能力。 2. 面向对象编程:Java是一门面向对象的编程语言,所以面试中对面向对象的理解和应用也是重要的考点。常见的问题包括和对象、继承和多态、封装和抽象等。 3. 异常处理:Java中的异常处理是编程中的重要内容,面试中会涉及到异常的概念、异常的分、如何捕获和处理异常、自定义异常等。 4. 集合框架:Java集合框架是Java开发中常用的工具,常见的面试题会涉及到ArrayList、LinkedList、HashMap等集合的特点和应用场景,以及集合的遍历和使用方法。 5. 多线程:Java是一门支持多线程的语言,所以多线程的知识也是面试中的热点考点。常见的问题包括线程的生命周期、线程同步与互斥、线程间的通信、线程池等。 6. JVM相关知识:Java虚拟机(JVM)是Java运行的基础,所以对JVM的了解也是面试中的重要考点。常见问题包括JVM的结构、内存模型、垃圾回收机制等。 此外,面试中还可能涉及到数据库、网络编程、设计模式等其他相关知识。因此,面试前需要对Java的相关知识有全面的掌握,并且要能够灵活运用这些知识进行问题的解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值