不能出门的第10天我焦虑了,为了金三银四我要充电了决定刷完这千道Java试题

 

前言:

因为疫情我被困在了家里,我是一个被无聊笼罩的人,呆在家里为国家做贡献,打算年后面试找工作的我决定发奋刷面试题,不打无准备的仗,这么多面试题的收集整理花费了很多的时间和经历,程序员朋友们如果你也在家不能出门的话,如果你要跳槽面试的话就跟我一起把面试题刷起来吧朋友。

面试题我整理成了PDF文档,需要的话可以免费领取哦关注的我的供种号Java周某人即可领取

友情提示:面对疫情要做好防范工作哦

面试题

包含内容:

MyBatis 面试题(27题)

ZooKeeper 面试题(28题)

Dubbo 面试题(30题)

Elasticsearch 面试题(24题)

Memcached 面试题(23题)

Redis 面试题(40题)

MySQL 面试题(50题)

Java 并发编程(一),Java 并发编程(二)(共123题)

Java 面试题(一),Java 面试题(二)(共228题)

Spring 面试题(一),Spring 面试题(二)(共116题)

微服务面试题(50题)

Linux 面试题(45题)

Spring Boot 面试题(22题)

Spring Cloud 面试题(8题)

RabbitMQ 面试题(12题)

kafka 面试题(18题)

由于篇幅限制面试题的内容也过多,所以没有办法一一分享出来,笔者选择一些面试题分享,需要全部面试题的关注的我的供种号Java周某人即可领取

1.#{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换。Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的set 方法来赋值;Mybatis 在处理${}时,就是把${}替换成变量的值。使用#{}可以有效的防止 SQL 注入,提高系统安全性。

2.Mybatis 是如何进行分页的?分页插件的原理是什么?

Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 sql 内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。分页插件的基本原理是使用 Mybatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。

3.使用 MyBatis 的 mapper 接口调用时有哪些要求?

1、Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同;

2、Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的parameterType 的类型相同;

3、Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的resultType 的类型相同;

4、Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径。

4. Zookeeper 对节点的 watch监听通知是永久的吗?为什么不是永久的?

不是。官方声明:一个 Watch 事件是一个一次性的触发器,当被设置了 Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了 Watch 的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。一般是客户端执行 getData(“/节点 A”,true),如果节点 A 发生了变更或删除,客户端会得到它的 watch 事件,但是在之后节点 A 又发生了变更,而客户端又没有设置 watch 事件,就不再给客户端发送。在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

5.Dubbo 的整体架构设计有哪些分层?

接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现

配置层(Config):对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心

服务代理层(Proxy):服务接口透明代理,生成服务的客户端 Stub 和 服务端的 Skeleton,以 ServiceProxy 为中心,扩展接口为 ProxyFactory

服务注册层(Registry):封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory、Registry、RegistryService

路由层(Cluster):封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker 为中心,扩展接口为 Cluster、Directory、Router 和 LoadBlancce

监控层(Monitor):RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor 和 MonitorService

远程调用层(Protocal):封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为 Protocal、Invoker 和 Exporter

6.Dubbo 集群容错有几种方案?

7.Dubbo 配置文件是如何加载到 Spring 中的?

Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema 以及 Dubbo 自定义的 schema,每个schema 都会对应一个自己的 NamespaceHandler,NamespaceHandler 里面通过 BeanDefinitionParser 来解析配置信息并转化为需要加载的 bean 对象}

8.Redis 常见性能问题和解决方案:

1、Master 最好不要写内存快照,如果 Master 写内存快照,save 命令调度 rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务

2、如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一

3、为了主从复制的速度和连接的稳定性,Master 和 Slave 最好在同一个局域网

4、尽量避免在压力很大的主库上增加从

5、主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1<- Slave2 <- Slave3…这样的结构方便解决单点故障问题,实现 Slave 对 Master的替换。如果 Master 挂了,可以立刻启用 Slave1 做 Master,其他不变。

9、Redis 的同步机制了解么?

答:Redis 可以使用主从同步,从从同步。第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffer,待完成后将 rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

10.什么情况下设置了索引但无法使用

1、以“%”开头的 LIKE 语句,模糊匹配

2、OR 语句前后没有同时使用索引

3、数据类型出现隐式转化(如 varchar 不加单引号的话可能会自动转换为 int 型)

11.Myql 中的事务回滚机制概述

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚

12.为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?

当你调用 start()方法时你将创建新的线程,并且执行在 run()方法里的代码。但是如果你直接调用 run()方法,它不会创建新的线程也不会执行调用线程的代码,只会把 run 方法当作普通方法去执行。

13、什么叫线程安全?servlet 是线程安全吗?

线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。

Servlet 不是线程安全的,servlet 是单实例多线程的,当多个线程同时访问同一个方法,是不能保证共享变量的线程安全性的。Struts2 的 action 是多实例多线程的,是线程安全的,每个请求过来都会 new 一个新的 action 分配给这个请求,请求完成后销毁。

SpringMVC 的 Controller 是线程安全的吗?不是的,和 Servlet 类似的处理流程。

Struts2 好处是不用考虑线程安全问题;Servlet 和 SpringMVC 需要考虑线程安全问题,但是性能可以提升不用处理太多的 gc,可以使用 ThreadLocal 来处理多线程的问题。

14.Spring 应用程序有哪些不同组件?

Spring 应用一般有以下组件:

 接口 - 定义功能。

 Bean 类 - 它包含属性,setter 和 getter 方法,函数等。

 Spring 面向切面编程(AOP) - 提供面向切面编程的功能。

 Bean 配置文件 - 包含类的信息以及如何配置它们。

 用户程序 - 它使用接口。

15.什么是 spring bean?

它们是构成用户应用程序主干的对象。

 Bean 由 Spring IoC 容器管理。

 它们由 Spring IoC 容器实例化,配置,装配和管理。

 Bean 是基于用户提供给容器的配置元数据创建。

读者福利:

本次就跟大家分享了这么多,由于篇幅的限制不能每一个都详细的分享出来,需要这份完整的pdf资料的可以关注的我的供种号Java周某人即可领取

希望可以帮助到有需求的人,前方疫情告急,愿远方的你一切安好。居家隔离记得给自己充充电哦

发布了178 篇原创文章 · 获赞 29 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Javazhoumou/article/details/104138913