首页 >> 生活 >

Java基础面试题库(java基础面试题)

2023-09-25 20:31:42 来源: 用户: 

你们好,最近小时发现有诸多的小伙伴们对于Java基础面试题库,java基础面试题这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 一:面向对象的三个特点,如何理解多态性?

2、 面向对象的三个基本特征是封装、继承和多态。从字面上看,有很多种形式,也就是同一对象可以有很多种不同的形式。在面向对象的语言中,实现接口的许多不同方式都是多态。简单来说,

3、 总之,允许将子类类型的指针赋给父类类型的指针。

4、 二:接口和抽象类有什么区别?

5、 l抽象类和接口都不能直接实例化。如果要实例化,抽象类变量必须指向实现所有抽象方法的子类,接口变量必须指向实现所有接口方法的类对象。

6、 l抽象类应该由子类继承,接口应该由类实现。

7、 l接口只能用于方法声明,抽象类可以用于方法声明和方法实现。

8、 L接口中定义的变量只能是公共静态常量,抽象类中的变量是普通变量。

9、 抽象类中的抽象方法必须全部由子类实现。如果子类不能全部实现父类的抽象方法,那么子类只能是一个抽象类。同样,在实现一个接口的时候,如果不能实现所有的接口方法,那么这个类就只能是一个抽象类。

10、 l抽象方法只能声明,不能实现。接口是设计的结果,抽象类是重构的结果。

11、 l抽象类中不能有抽象方法。

12、 l如果一个类中有抽象方法,那么这个类只能是抽象的。

13、 l抽象方法必须实现,所以它们不能是静态的或私有的。

14、 l接口可以继承接口,可以继承多个接口,但是类只能从单个根继承。

15、 静态方法可以被覆盖吗?为什么?

16、 l静态方法不能被重写。

17、 l在子类中,可以定义与父类同名的静态方法,但不存在“多态性”。严格来说,方法之间没有多态性就不能称为“覆盖”。因此,子类的静态方法不会覆盖父类的方法。

18、 The difference between string, stringbuffer area and string generator.

19、 StringBuffer和StringBuilder的底层实现是通过字节数据加数组复制来实现的。

20、 字符串缓冲区字符串

21、 l2 .String (StringBuffer,StringBuilder)的原因

22、 LString:字符串常量

23、 LStringBuffer:角色创建变量

24、 LStringBuilder:角色创建变量

25、 l3。 StringBuilder and String Buffer

26、 LStringBuilder:线程不安全。

27、 LStringBuffer:线程安全

28、 l总结:1。如果您想要操作少量数据,请使用=String。

29、 L2。单线程操作stringbuffer区域操作大量数据=StringBuilder。

30、 L3。多线程操作stringbuffer区域操作大量数据=StringBuffer。

31、 常见的序列化协议及其优缺点

32、 1、XML

33、 (1)定义:

34、 XML(可扩展标记语言)是一种常用的序列化和反序列化协议。它有着悠久的历史,从1998年的1.0版本开始就被广泛使用。

35、 (2)优势

36、 良好的人机可读性

37、 您可以指定元素或属性的名称。

38、 (3)缺点

39、 序列化数据只包含数据本身和类的结构,不包含类型标识和程序集信息。

40、 类必须有一个将由XmlSerializer序列化的默认构造函数。

41、 只有公共属性和字段可以序列化。

42、 无法序列化方法。

43、 文件庞大,文件格式复杂,传输占用带宽。

44、 (4)使用场景

45、 将数据存储为配置文件

46、 实时数据转换

47、 2、JSON

48、 (1)定义:

49、 JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript(W3C制定的js规范)的子集,

50、 JSON使用了一种独立于编程语言的文本格式,但也使用了类似C语言(包括C、C、C#、Java、javascript、Perl、Python等)的习惯。).

51、 简单清晰的层次结构使JSON成为理想的数据交换语言。

52、 (2)优势

53、 前后兼容性高。

54、 数据格式相对简单,易于读写。

55、 序列化数据小,具有良好的可扩展性和兼容性。

56、 与XML相比,它的协议更简单,解析速度更快。

57、 (3)缺点

58、 数据不如XML具有描述性。

59、 不适合性能要求为ms级别的情况

60、 额外空间开销比较大

61、 (4)适用场景(可替代)

62、 跨防火墙访问

63、 可调式性要求高的情况

64、 基于Web browser的Ajax请求

65、 传输数据量相对小,实时性要求相对低(例如秒级别)的服务

66、 3、Fastjson

67、 (1)定义

68、 Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致。

69、 (2)优点

70、 接口简单易用

71、 目前java语言中最快的json库

72、 (3)缺点

73、 过于注重快,而偏离了“标准”及功能性

74、 代码质量不高,文档不全

75、 (4)适用场景

76、 协议交互

77、 Web输出

78、 Android客户端

79、 创建线程的方式,有什么区别?

80、 采用继承Thread类方式:(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。

81、 (2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。采用实现Runnable接口方式:(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,

82、 可以多个线程共享同一个目标对象,所以非常适合多个相

83、 同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。(2)缺点:编程稍微复杂,如果需要访问当前线程,

84、 必须使用Thread.currentThread()方法。

85、 阻塞、非阻塞、同步、异步区别

86、 同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一种可靠的服务序列。要么成功都成功,失败都失败,服务的状态可以保持一致

87、 异步:一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,此时该服务就算完成了。被依赖的服务是否最终完成无法确定,一次它是一个不可靠的服务序列。

88、 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,函数只有在得到结果之后才会返回。

89、 非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

90、 线程池,说说其理解,线程池的参数问题?几种不同线程池的比较,阻塞队列的使用,拒绝策略

91、 原理:线程池流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池当中的某一个睡眠线程,让他来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态.

92、 为什么用线程池:减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务,也可根据系统的承受能力,调整线程池中工作线程的数目,防止因为消耗过多的内存,而把服务器累趴;

93、 参数:

94、 corePoolSize:核心池的大小;默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,

95、 就会把到达的任务放到缓存队列当中;

96、 maximumPoolSize:线程池最大线程数,表示在线程中最多能创建多少个线程;

97、 keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止;

98、 unit:参数keepAliveTime的时间单位;

99、 workQueue:一个阻塞队列,用来存储等待执行的任务,会对线程池的运行过程产生重大影响;

100、 threadFactory:线程工厂,主要用来创建线程

101、 handler:表示当拒绝处理任务时的策略;

102、 不同线程池的比较:

103、 一;newCachedThreadPool

104、 (1)缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse,如果没有,就建立一个新的线程加入池中

105、 (2)通常用于执行一些生存周期很短的异步型任务,因此一些面向连接的daemon型server中用的不多

106、 (3)能reuse的线程,必须是timeoutIDLE内的池中线程,缺省timeout是60s,超过这个IDLE时长,线程实例将被终止及移出池

107、 (4)放入CachedThreadPool的线程不必担心其结束,超过timeout不活动,会自动被终止;

108、 二:newFixedThreadPool

109、 (1)newFixedThreadPool和CachedThreadPool差不多,也是能reuse就用,但不能随时建新的线程;

110、 (2)任何时间点,最多只能有固定数目的活动线程存在,此时如果有新的线程要建立,只能放在另外的队列中等待,知道当前线程中某个线程终止直接被移出池子

111、 (3)没有IDLE机制,多数针对一些很稳定很固定的正规并发线程,多用于服务器

112、 (4)从方法的源代码看,cache池和fixed 池调用的是同一个底层池,只不过参数不同: fixed池线程数固定,

113、 并且是0秒IDLE(无IDLE) cache池线程数支持0-Integer.MAX_VALUE(显然完全没考虑主机的资源承受能力),60秒IDLE

114、 三:ScheduledThreadPool

115、 (1)调度型线程池

116、 (2)池子里的线程可以按schedule依次delay执行,或周期执行

117、 四:SingleThreadExecutor

118、 (1)单例线程,任意时间中只能有一个线程

119、 用的是和cache池和fixed池相同的底层池,但线程数目是1-1,0秒IDLE

120、 拒绝策略:handler

121、 Future和ListenableFuture 异步回调相关ListenableFuture

122、 该接口扩展了Future接口,增加了addListener方法,该方法在给定的excutor上注册一个监听器,当计算完成时会马上调用该监听器。不能够确保监听器执行的顺序,

123、 但可以在计算完成时确保马上被调用。

124、 Java 四种引用,代表的含义,有什么区别?

125、 1. 强引用(StrongReference)

126、 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,

127、 也不会靠随意回收具有强引用的对象来解决内存不足的问题。

128、 2. 软引用(SoftReference)

129、 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。

130、 软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。

131、 3. 弱引用(WeakReference)

132、 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,

133、 由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

134、 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

135、 4. 虚引用(PhantomReference)

136、 '虚引用'顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

137、 虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,

138、 就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

以上就是java基础面试题这篇文章的一些介绍,希望对大家有所帮助。

  免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!

 
分享:
最新文章