100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【面试题】Java常见面试题集锦

【面试题】Java常见面试题集锦

时间:2023-03-13 20:35:22

相关推荐

【面试题】Java常见面试题集锦

Java常见面试题集锦

面试题模块

这份面试题,包含的内容了十九了模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示:

具体面试题

一、Java基础

1. JDK与JRE有什么区别?

答:JRE:Java运行时环境。包括Java虚拟机、Java核心类库和支持文件,它不包括开发工具JDK(编译器、调试器和其他工具);JDK:Java开发工具包,是完整的Java软件开发包,包括了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

2.== 和 equals 的区别是什么?

答:

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

4.final 在 java 中有什么作用?

5.java 中的 Math.round(-1.5) 等于多少?

6.String 属于基础的数据类型吗?

7.java 中操作字符串都有哪些类?它们之间有什么区别?

8.String str="i"与 String str=new String(“i”)一样吗?

9.如何将字符串反转?

10.String 类的常用方法都有那些?

11.抽象类必须要有抽象方法吗?

12.普通类和抽象类有哪些区别?

13.抽象类能使用 final 修饰吗?

14.接口和抽象类有什么区别?

15.java 中 IO 流分为几种?

16.BIO、NIO、AIO 有什么区别?

17.Files的常用方法都有哪些?

二、容器

18.java 容器都有哪些?

19.Collection 和 Collections 有什么区别?

20.List、Set、Map 之间的区别是什么?

21.HashMap 和 Hashtable 有什么区别?

22.如何决定使用 HashMap 还是 TreeMap?

23.说一下 HashMap 的实现原理?

24.说一下 HashSet 的实现原理?

25.ArrayList 和 LinkedList 的区别是什么?

26.如何实现数组和 List 之间的转换?

27.ArrayList 和 Vector 的区别是什么?

28.Array 和 ArrayList 有何区别?

29.在 Queue 中 poll()和 remove()有什么区别?

30.哪些集合类是线程安全的?

31.迭代器 Iterator 是什么?

32.Iterator 怎么使用?有什么特点?

33.Iterator 和 ListIterator 有什么区别?

34.怎么确保一个集合不能被修改?

三、多线程

35.并行和并发有什么区别?

36.线程和进程的区别?

37.守护线程是什么?

38.创建线程有哪几种方式?

39.说一下 runnable 和 callable 有什么区别?

40.线程有哪些状态?

41.sleep() 和 wait() 有什么区别?

42.notify()和 notifyAll()有什么区别?

43.线程的 run()和 start()有什么区别?

44.创建线程池有哪几种方式?

45.线程池都有哪些状态?

46.线程池中 submit()和 execute()方法有什么区别?

47.在 java 程序中怎么保证多线程的运行安全?

48.多线程锁的升级原理是什么?

49.什么是死锁?

50.怎么防止死锁?

51.ThreadLocal 是什么?有哪些使用场景?

52.说一下 synchronized 底层实现原理?

53.synchronized 和 volatile 的区别是什么?

54.synchronized 和 Lock 有什么区别?

55.synchronized 和 ReentrantLock 区别是什么?

56.说一下 atomic 的原理?

四、反射

57.什么是反射?

58.什么是 java 序列化?什么情况下需要序列化?

59.动态代理是什么?有哪些应用?

60.怎么实现动态代理?

五、对象拷贝

61.为什么要使用克隆?

62.如何实现对象克隆?

63.深拷贝和浅拷贝区别是什么?

六、Java Web

64.jsp 和 servlet 有什么区别?

65.jsp 有哪些内置对象?作用分别是什么?

66.说一下 jsp 的 4 种作用域?

67.session 和 cookie 有什么区别?

68.说一下 session 的工作原理?

69.如果客户端禁止 cookie 能实现 session 还能用吗?

70.spring mvc 和 struts 的区别是什么?

71.如何避免 sql 注入?

72.什么是 XSS 攻击,如何避免?

73.什么是 CSRF 攻击,如何避免?

七、异常

74.throw 和 throws 的区别?

75.final、finally、finalize 有什么区别?

76.try-catch-finally 中哪个部分可以省略?

77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

78.常见的异常类有哪些?

八、网络

79.http 响应码 301 和 302 代表的是什么?有什么区别?

80.forward 和 redirect 的区别?

81.简述 tcp 和 udp的区别?

82.tcp 为什么要三次握手,两次不行吗?为什么?

83.说一下 tcp 粘包是怎么产生的?

84.OSI 的七层模型都有哪些?

85.get 和 post 请求有哪些区别?

86.如何实现跨域?

87.说一下 JSONP 实现原理?

九、设计模式

88.说一下你熟悉的设计模式?

89.简单工厂和抽象工厂有什么区别?

十、Spring/Spring MVC

90.为什么要使用 spring?

91.解释一下什么是 aop?

92.解释一下什么是 ioc?

93.spring 有哪些主要模块?

94.spring 常用的注入方式有哪些?

95.spring 中的 bean 是线程安全的吗?

96.spring 支持几种 bean 的作用域?

97.spring 自动装配 bean 有哪些方式?

98.spring 事务实现方式有哪些?

99.说一下 spring 的事务隔离?

100.说一下 spring mvc 运行流程?

101.spring mvc 有哪些组件?

102.@RequestMapping 的作用是什么?

103.@Autowired 的作用是什么?

十一、Spring Boot/Spring Cloud

104.什么是 spring boot?

答:

105.为什么要用 spring boot?

106.spring boot 核心配置文件是什么?

107.spring boot 配置文件有哪几种类型?它们有什么区别?

108.spring boot 有哪些方式可以实现热部署?

109.jpa 和 hibernate 有什么区别?

110.什么是 Spring Cloud?

答:Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

111.使用Spring Cloud有什么优势?

答:使用Spring Boot开发分布式微服务时,我们面临以下问题:

与分布式系统相关的复杂性——这种开销包括网络问题,延迟问题,带宽问题,安全问题。

服务发现——服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。

冗余——分布式系统中的冗余问题。

负载平衡——负载平衡改善跨多个计算资源的工作负荷,诸如计算机、计算机集群、网络链路、中央处理单元,或磁盘驱动器的分布。

性能问题——由于各种运营开销导致的性能问题。部署复杂性——DevOps技能的要求。

112.服务注册和发现是什么意思?Spring Cloud如何实现?

答:当我们开始一个项目,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。Eureka服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注册并通过调用Eureka服务器完成查找,因此无需处理服务地点的任何更改和处理。

113. 负载平衡的意义是什么?

答:在计算中,负载平衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。

114. 什么是Hystrix?它如何实现容错?

答:Hystrix是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障时不可能避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。

通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。

思考以下微服务:

假设如果上图中的微服务9失败了,那么使用传统方法我们将传播一个异常。但这仍然会导致整个系统崩溃。

随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达1000。这是hystrix出现的地方,我们将使用Hystrix在这种情况下的Fallback方法功能。我们有两个服务employee-consumer使用由employee-consumer公开的服务。

简化图如下所示:

现在假设由于某种原因,employee-producer公开的服务会抛出异常。我们在这种情况下使用Hystrix定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。

115. 什么时Hystrix断路器?我们需要它吗?

答:由于某些原因,employee-consumer公开服务会引发异常。在这种情况下使用Hystrix我们定义了一个回退方法。如果在公开服务中发生异常,则回退方法返回一些默认值。

如果firstPage method() 中的异常继续发生,则Hystrix电路将中断,并且员工使用者将一起跳过firtsPage方法,并直接调用回退方法。断路器的目的是给第一页方法或第一页方法可能调用的其他方法留出时间,并导致异常恢复。可能发生的情况是,在负载较小的情况下,导致异常的问题有更好的恢复机会 。

116. 什么是Netflix Feign?它的优势是什么?

答:

Feign是受到Retrofit,JAXRS-2.0和WebSocket启发的java客户端联编程序。Feign的第一个目标是将约束分母的复杂性统一到http apis,而不考虑其稳定性。在employee-consumer的例子中,我们使用了employee-producer使用REST模板公开的REST服务。

但是我们必须编写大量代码才能执行以下步骤:

使用功能区进行负载平衡。

获取服务实例,然后获取基本URL。

利用REST模板来使用服务。

前面的代码如下:

@Controllerpublic class ConsumerControllerClient {@Autowiredprivate LoadBalancerClient loadBalancer;public void getEmployee() throws RestClientException, IOException {ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");System.out.println(serviceInstance.getUri());String baseUrl=serviceInstance.getUri().toString();baseUrl=baseUrl+"/employee";RestTemplate restTemplate = new RestTemplate();ResponseEntity<String> response=null;try{response=restTemplate.exchange(baseUrl,HttpMethod.GET, getHeaders(),String.class);}catch (Exception ex){System.out.println(ex);}System.out.println(response.getBody());}

之前的代码,有像NullPointer这样的例外的机会,并不是最优的。我们将看到如何使用Netflix Feign使呼叫变得更加轻松和清洁。如果Netflix Ribbon依赖关系也在类路径中,那么Feign默认也会负责负载平衡。

117. 什么是Spring Cloud Bus? 我们需要它吗?

答:

考虑以下情况:我们有多个应用程序使用Spring Cloud Config读取属性,而Spring Cloud Config从GIT读取这些属性。

下面的例子中多个员工生产者模块从Employee Config Module获取Eureka注册的财产。

如果假设GIT中的Eureka注册属性更改为指向另一台Eureka服务器,会发生什么情况。在这种情况下,我们将不得不重新启动服务以获取更新的属性。

还有另一种使用执行器端点/刷新的方式。但是我们将不得不为每个模块单独调用这个url。例如,如果Employee Producer1部署在端口8080上,则调用 http://localhost:8080/refresh。同样对于Employee Producer2 http://localhost:8081/refresh等等。这又很麻烦。这就是Spring Cloud Bus发挥作用的地方。

Spring Cloud Bus提供了跨多个实例刷新配置的功能。因此,在上面的示例中,如果我们刷新Employee Producer1,则会自动刷新所有其他必需的模块。如果我们有多个微服务启动并运行,这特别有用。这是通过将所有微服务连接到单个消息代理来实现的。无论何时刷新实例,此事件都会订阅到侦听此代理的所有微服务,并且它们也会刷新。可以通过使用端点/总线/刷新来实现对任何单个实例的刷新。

118. SpringCloud与Dubbo

答:

SpringCloud和Dubbo都是现在主流的微服务架构。

SpringCloud是Apache旗下的Spring体系下的微服务解决方案;

Dubbo是阿里系的分布式服务治理框架。

从技术维度上,其实SpringCloud远远的超过Dubbo,Dubbo本身只是实现了服务治理,而SpringCloud现在以及有21个子项目以后还会更多,

所以其实很多人都会说Dubbo和SpringCloud是不公平的。

但是由于RPC以及注册中心元数据等原因,在技术选型的时候我们只能二者选其一,所以我们常常为用他俩来对比:

服务的调用方式:Dubbo使用的是RPC远程调用;而SpringCloud使用的是 Rest API,其实更符合微服务官方的定义。

服务的注册中心来看:Dubbo使用了第三方的ZooKeeper作为其底层的注册中心,实现服务的注册和发现;SpringCloud使用Spring Cloud Netflix Eureka实现注册中心,当然SpringCloud也可以使用ZooKeeper实现,但一般我们不会这样做。

服务网关:Dubbo并没有本身的实现,只能通过其他第三方技术的整合,而SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,SpringCloud还支持断路器,与git完美集成分布式配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

119. SpringCloud与Dubbo之间的技术选型怎么看?

答:

目前国内的分布式系统选型主要还是Dubbo毕竟国产,而且国内工程师的技术熟练程度高,并且Dubbo在其他维度上的缺陷可以由其他第三方框架进行集成进行弥补,

而SpringCloud目前是国外比较流行,当然我觉得国内的市场也会慢慢的偏向SpringCloud,就连刘军作为Dubbo重启的负责人也发表过观点,Dubbo的发展方向是积极适应SpringCloud生态,并不是起冲突。

120. Rest与RPC对比

答:

其实如果仔细阅读过微服务提出者马丁福勒的论文的话可以发现其定义的服务间通信机制就是Http Rest。

RPC最主要的缺陷就是服务提供方和调用方式之间依赖太强,我们需要为每一个微服务进行接口的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调用之间因为版本不同而产生的冲突;

而REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只是通过一个约定进行规范,但也有可能出现文档和接口不一致而导致的服务集成问题,但可以通过swagger工具整合,是代码和文档一体化解决,所以REST在分布式环境下比RPC更加灵活

这也是为什么当当网的DubboX在对Dubbo的增强中增加了对REST的支持的原因。

121. 文档质量和社区活跃度

答:

SpringCloud社区活跃度远高于Dubbo,毕竟由于梁飞团队的原因导致Dubbo停止更新迭代五年,而中小型公司无法承担技术开发的成本导致Dubbo社区严重低落,而SpringCloud异军突起,迅速占领了微服务的市场,背靠Spring混的风生水起;

Dubbo经过多年的积累文档相当成熟,对于微服务的架构体系各个公司也有稳定的现状。

122. SpringBoot和SpringCloud

答:

SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务

而SpringCloud专注于解决各个微服务之间的协调与配置,服务之间的通信,熔断,负载均衡等,技术维度并相同,并且SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo进行优秀的整合开发

总结:

SpringBoot专注于快速方便的开发单个个体的微服务

SpringCloud是关注全局的微服务协调整理治理框架,整合并管理各个微服务,为各个微服务之间提供,配置管理,服务发现,断路器,路由,事件总线等集成服务

SpringBoot不依赖于SpringCloud,SpringCloud依赖于SpringBoot,属于依赖关系

SpringBoot专注于快速,方便的开发单个的微服务个体,SpringCloud关注全局的服务治理框架

123. Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别。

答:

1.ZooKeeper保证的是CP,Eureka保证的是AP

ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的

Eureka各个节点是平等关系,只要有一台Eureka就可以保证服务可用,而查询到的数据并不是最新的

自我保护机制会导致:

Eureka不再从注册列表移除因长时间没收到心跳而应该过期的服务

Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(高可用)

当网络稳定时,当前实例新的注册信息会被同步到其他节点中(最终一致性)

Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪

2.ZooKeeper有Leader和Follower角色,Eureka各个节点平等

3.ZooKeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题

4.Eureka本质上是一个工程,而ZooKeeper只是一个进程

124. 微服务之间是如何独立通讯的?

答:

微服务通信机制

系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。

围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的去集中化控制。

将组件定义为可被独立替换和升级的软件单元。

以业务能力为出发点组织服务的策略。

倡导谁开发,谁运营的开发运维一体化方法。

RESTful HTTP协议是微服务架构中最常用的通讯机制。

每个微服务可以考虑选用最佳工具完成(如不同的编程语言)。

允许不同微服务采用不同的数据持久化技术。

微服务非常重视建立架构及业务相关指标的实时监控和日志机制,必须考虑每个服务的失败容错机制。

注重快速更新,因此系统会随时间不断变化及演进。可替代性模块化设计。

微服务通信方式:

同步:RPC,REST等

异步:消息队列。要考虑消息可靠传输、高性能,以及编程模型的变化等。

消息队列中间件如何选型

1.协议:AMQP、STOMP、MQTT、私有协议等。

2.消息是否需要持久化。

3.吞吐量。

4.高可用支持,是否单点。

5.分布式扩展能力。

6.消息堆积能力和重放能力。

7.开发便捷,易于维护。

8.社区成熟度。

RabbitMQ是一个实现了AMQP(高级消息队列协议)协议的消息队列中间件。RabbitMQ支持其中的最多一次和最少一次两种。网易蜂巢平台的服务架构,服务间通过RabbitMQ实现通信。

125. 什么服务熔断?什么是服务降级?

答:

在复杂的分布式系统中,微服务之间的相互调用,有可能出现各种各样的原因导致服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可用,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调用关系是同步的,会对整个微服务系统造成服务雪崩,为了解决某个微服务的调用响应时间过长或者不可用进而占用越来越多的系统资源引起雪崩效应就需要进行服务熔断和服务降级处理。

所谓的服务熔断指的是某个服务故障或异常一起类似显示世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,而不是一直等到此服务超时。

服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值。

126. 微服务的优缺点是什么?说下你在项目开发中碰到的坑

答:

优点:

每一个服务足够内聚,代码容易理解

开发效率提高,一个服务只做一件事

微服务能够被小团队单独开发

微服务是松耦合的,是有功能意义的服务

可以用不同的语言开发,面向接口编程

易于与第三方集成

微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界面组合

开发中,两种开发模式

前后端分离

全栈工程师

可以灵活搭配,连接公共库/连接独立库

缺点:

分布式系统的负责性;多服务运维难度,随着服务的增加,运维的压力也在增大;系统部署依赖;服务间通信成本;数据一致性;系统集成测试;性能监控.

127.你所知道的微服务技术栈有哪些?列举一二。

答:

多种技术的集合体

我们在讨论一个分布式的微服务架构的话,需要哪些维度

维度(SpringCloud)

服务开发SpringBootSpringSpringMVC服务配置与管理 Netfilx公司的Archaiusm,阿里的Diamond服务注册与发现Eureka,ZooKeeper服务调用Rest,RPC,gRPC服务熔断器Hystrix服务负载均衡Ribbon,Nginx服务接口调用Feign消息队列Kafka,RabbitMq,ActiveMq服务配置中心管理SpringCloudConfing服务路由(API网关)Zuul事件消息总线SpringCloud Bus

111.spring cloud 断路器的作用是什么?

112.spring cloud 的核心组件有哪些?

十二、Hibernate

113.为什么要使用 hibernate?

114.什么是 ORM 框架?

115.hibernate 中如何在控制台查看打印的 sql 语句?

116.hibernate 有几种查询方式?

117.hibernate 实体类可以被定义为 final 吗?

118.在 hibernate 中使用 Integer 和 int 做映射有什么区别?

119.hibernate 是如何工作的?

120.get()和 load()的区别?

121.说一下 hibernate 的缓存机制?

122.hibernate 对象有哪些状态?

123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

124.hibernate 实体类必须要有无参构造函数吗?为什么?

十三、Mybatis

125.mybatis 中 #{}和 ${}的区别是什么?

126.mybatis 有几种分页方式?

127.RowBounds 是一次性查询全部结果吗?为什么?

128.mybatis 逻辑分页和物理分页的区别是什么?

129.mybatis 是否支持延迟加载?延迟加载的原理是什么?

130.说一下 mybatis 的一级缓存和二级缓存?

131.mybatis 和 hibernate 的区别有哪些?

132.mybatis 有哪些执行器(Executor)?

133.mybatis 分页插件的实现原理是什么?

134.mybatis 如何编写一个自定义插件?

十四、RabbitMQ

135.rabbitmq 的使用场景有哪些?

136.rabbitmq 有哪些重要的角色?

137.rabbitmq 有哪些重要的组件?

138.rabbitmq 中 vhost 的作用是什么?

139.rabbitmq 的消息是怎么发送的?

140.rabbitmq 怎么保证消息的稳定性?

141.rabbitmq 怎么避免消息丢失?

142.要保证消息持久化成功的条件有哪些?

143.rabbitmq 持久化有什么缺点?

144.rabbitmq 有几种广播类型?

145.rabbitmq 怎么实现延迟消息队列?

146.rabbitmq 集群有什么用?

147.rabbitmq 节点的类型有哪些?

148.rabbitmq 集群搭建需要注意哪些问题?

149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

151.rabbitmq 对集群节点停止顺序有要求吗?

十五、Kafka

152.kafka 可以脱离 zookeeper 单独使用吗?为什么?

153.kafka 有几种数据保留的策略?

154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

155.什么情况会导致 kafka 运行变慢?

156.使用 kafka 集群需要注意什么?

十六、Zookeeper

157.zookeeper 是什么?

158.zookeeper 都有哪些功能?

159.zookeeper 有几种部署模式?

160.zookeeper 怎么保证主从节点的状态同步?

161.集群中为什么要有主节点?

162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

163.说一下 zookeeper 的通知机制?

十七、MySql

164.数据库的三范式是什么?

165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

166.如何获取当前数据库版本?

167.说一下 ACID 是什么?

168.char 和 varchar 的区别是什么?

169.float 和 double 的区别是什么?

170.mysql 的内连接、左连接、右连接有什么区别?

171.mysql 索引是怎么实现的?

172.怎么验证 mysql 的索引是否满足需求?

173.说一下数据库的事务隔离?

174.说一下 mysql 常用的引擎?

175.说一下 mysql 的行锁和表锁?

176.说一下乐观锁和悲观锁?

177.mysql 问题排查都有哪些手段?

178.如何做 mysql 的性能优化?

十八、Redis

179.redis 是什么?都有哪些使用场景?

180.redis 有哪些功能?

181.redis 和 memecache 有什么区别?

182.redis 为什么是单线程的?

183.什么是缓存穿透?怎么解决?

184.redis 支持的数据类型有哪些?

185.redis 支持的 java 客户端都有哪些?

186.jedis 和 redisson 有哪些区别?

187.怎么保证缓存和数据库数据的一致性?

188.redis 持久化有几种方式?

189.redis 怎么实现分布式锁?

190.redis 分布式锁有什么缺陷?

191.redis 如何做内存优化?

192.redis 淘汰策略有哪些?

193.redis 常见的性能问题有哪些?该如何解决?

十九、JVM

194.说一下 jvm 的主要组成部分?及其作用?

195.说一下 jvm 运行时数据区?

196.说一下堆栈的区别?

197.队列和栈是什么?有什么区别?

198.什么是双亲委派模型?

199.说一下类加载的执行过程?

200.怎么判断对象是否可以被回收?

201.java 中都有哪些引用类型?

202.说一下 jvm 有哪些垃圾回收算法?

203.说一下 jvm 有哪些垃圾回收器?

204.详细介绍一下 CMS 垃圾回收器?

205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

206.简述分代垃圾回收器是怎么工作的?

207.说一下 jvm 调优的工具?

208.常用的 jvm 调优的参数都有哪些?

二十、其他问题

1.super()与this()的区别?

This():当前类的对象,super 父类对象。

Super():在子类访问父类的成员和行为,必须受类继承规则的约束,而this代表当前对象,当然所有的资源都可以访问。

在构造函数中,如果第一行没有写super(),编译器会自动插入。但是父类没有不带参数的构造函数,或这个函数被私有化了(用private 修饰)。此时必须加入对父类的实例化构造。而this就没有这个要求,因为它本身就进行实例化的构造。

而在方法中super和this使用的方法就差不多了。只不过super要考虑是否能访问其父类的资源。

2.作用域public、protected、private,以及不写时的区别?

public:不同包、同一包、类内都可用private:类内protected:不同包的子类,同一包、类内都可用不写时:同一包内、类内

3.编程输出如下图形:

* * * * *

* * * *

* * *

* *

*

public class Print { public static void main(String[] args) { for (int i = 0; i < 5; i++) { for (int j = 5; j > i; j--) { System.out.print("*");} System. out .println();}} }

4.Java的事件委托机制和垃圾回收机制

Java事件委托机制的概念:一个源产生一个事件并将它送到一个或多个监听器那里。在该方案中,监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。

垃圾回收机制:垃圾收集是将分配对对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则该对象适合进行垃圾回收。

5.在Java中,如何跳出当前的多重嵌套循环?

使用break;return方法

6.什么是java序列化,如何实现java序列化(用示例表示)

序列化:可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内容读取,转化为一个对象。

处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化的对象进行读写操作,也可以将流化的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类对象实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutoutStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOututStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

7.一个“.java”源文件是否可以包括多个类(不是内部类)?有什么限制?

可以,如果这个类的修饰符是public,其类名与文件名必须相同。

8.排序都有哪几种方法?请列举

排序的方法有:插入排序(直接插入排序,希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、归并排序、分配排序(箱排序、基数排序)。

9.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

重写Override,子类覆盖父类的方法,将子类传与父类的引用,调用的还是子类的方法。

重载Overloading,一个类多个方法,名称相同,参数个数类型不同

两者都是Java多态性的不同表现

Overloaded的方法是可以改变返回值的类型。

10.ArrayList和Vector的区别,HashMap和Hashtable的区别

ArrayList与Vector主要从两方面说:一是同步性,Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的;二是数据增长,当需要增长是,Vector默认增长为原来的一倍,而ArrayList却是原来的一半。

HashMap与HashTable主要从三方面来说:一是历史原因,Hashtable是基于陈旧的Dictionary类的,而HashMap是java1.2引进的Map接口的一个实现;二是同步性,Hashtable是线程安全的,也就是说是同步的,而HashMap是线程不安全的,不是同步的。三是值;只有HashMap可以让空值作为一个表的条目的key和value。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。