Java面试题总结200道(四)

76、ApplicationContext 通常的实现是什么?

  • FileSystemXmlApplicationContext :此容器从一个 XML 文件中加 载 beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
  • ClassPathXmlApplicationContext:此容器也从一个 XML 文件中加 载 beans 的定义,这里,你需要正确设置 classpath 因为这个容器将在 classpath 里找 bean 配置。
  • WebXmlApplicationContext:此容器加载一个 XML 文件,此文件定 义了一个 WEB 应用的所有 bean。

77、有哪些不同类型的 IOC(依赖注入)方式

  • 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现 的,该类有一系列参数,每个参数代表一个对其他类的依赖。
  • Setter 方法注入:Setter 方法注入是容器通过调用无参构造器或无参 static 工厂 方法实例化 bean 之后,调用该 bean 的 setter 方法,即实现了基 于 setter 的依赖注入。

78、什么是 Spring beans

Spring beans 是那些形成 Spring 应用的主干的 java 对象。它们被 Spring IOC 容器初始化,装配,和管理。这些 beans 通过容器中配置的元数据创建。比如, 以 XML 文件中 的形式定义。 Spring 框架定义的 beans 都是单例beans。在 bean tag 中有个属性” singleton”,如果它被赋为 TRUE,bean 就是单例,否则就是一个 prototype bean。默认是 TRUE,所以所有在 Spring 框架中的 beans 缺省都是单例。

79、Spring 框架中的单例 bean 是线程安全的吗

Spring bean并没有可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。

不是线程安全的Spring框架中有一个@Scope注解,默认的值就是singleton,单例的。因为一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,是要考虑线程安全问题的,可以使用多例或者加锁来解决。

当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求对应的业务逻辑(成员方法),如果该处理逻辑中有对该单列状态的修改(体现为该单例的成员属性),则必须考虑线程同步问题。

Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自去搞定。

比如:我们通常在项目中使用的Springbean都是不可可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。

如果你的bean有多种状态的话(比如ViewModel对象),就需要自行保证线程安全。最浅显的解决办法就是将多态bean的作用由"singleton"变更为"prototype"。

80、什么是 bean 装配

装配,或 bean 装配是指在 Spring 容器中把 bean 组装到一起,前提是容器需要知道 bean 的依赖关系,如何通过依赖注入来把它们装配到一起。

81、什么是 bean 的自动装配

Spring 容器能够自动装配相互合作的 bean,这意味着容器不需要和配置,能通过 Bean 工厂自动处理 bean 之间的协作。

82、Spring 支持的事务管理类型

编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵 活性,但是难维护。

声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用 注解和 XML 配置来管理事务。

83、什么是持续集成(CI)

持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程。 这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共 享代码和单元测试。

84、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式 tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于 提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部 署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改, 而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布 它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完 全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

85、Spring Boot 中的监视器是什么

Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。

86、如何在 Spring Boot 中禁用 Actuator 端点安全性

默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

87、什么是 FreeMarker 模板

FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构进行动态网页生成。使用 Freemarker 的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理 html 页面设计。最后使用 freemarker 可以将这些结合起来,给出最终的输出页面。

88、什么是 CSRF 攻击

CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的 Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

89、什么是 WebSockets

WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。

1、WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。

2、WebSocket 是全双工的 -客户端和服务器通信是相互独立的。

3、单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。 然后这个单一连接用于所有未来的通信。

4、Light -与 http 相比,WebSocket 消息数据交换要轻得多。

90、什么是 Apache Kafka

Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。

91、我们如何监视所有 Spring Boot 微服务

Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应 用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运 行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应 用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务, 管理员将不得不击中所有 50 个应用程序的执行终端。

我们可以使用Springboot Admin这样的可视化的监控工具,来监视微服务的状态。

92、负载平衡的意义什么

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

93、在 java 中守护线程和本地线程有什么区别

java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。

任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(bool on);true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon() 必须在 Thread.start()之前调用,否则运行时会抛出异常。

唯一的区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务,如果 全部的 User Thread 已经撤离,Daemon 没有可服务的线程,JVM 撤离。也可以理解为守护线程是 JVM 自动创建的线程(但不一定),用户线程是程序创建的 线程;比如 JVM 的垃圾回收线程是一个守护线程,当所有线程已经撤离,不再产 生垃圾,守护线程自然就没事可干了,当垃圾回收线程是 Java 虚拟机上仅剩的线 程时,Java 虚拟机会自动离开。

94、线程与进程的区别

进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。

一个程序至少有一个进程,一个进程至少有一个线程。

95、什么是多线程中的上下文切换

多线程会共同使用一组计算机上的 CPU,而线程数大于给程序分配的 CPU 数量时, 为了让各个线程都有执行的机会,就需要轮转使用 CPU。不同的线程切换使用 CPU 发生的切换数据等就是上下文切换。

96、死锁与活锁的区别,死锁与饥饿的区别

死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成 的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的必要条件

1、互斥条件:所谓互斥就是进程在某一时间内独占资源。

2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

3、不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。

4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试, 失败,尝试,失败。

活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而 处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。

饥饿:一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执 行的状态。

Java 中导致饥饿的原因:

1、高优先级线程吞噬所有的低优先级线程的 CPU 时间。

2、线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前 持续地对该同步块进行访问。

3、线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的 wait 方 法),因为其他线程总是被持续地获得唤醒。

97、Java 中用到的线程调度算法是什么

采用时间片轮转的方式。可以设置线程的优先级,会映射到下层的系统上面的优先级上,如非特别需要,尽量不要用,防止线程饥饿。

98、在 Java 中 Executor 和 Executors 的区别

Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务 的需求。 Executor 接口对象能执行我们的线程任务。

ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我 们能获得任务执行的状态并且可以获取任务的返回值。 使用 ThreadPoolExecutor 可以创建自定义线程池。

Future 表示异步计算的结果,他提供了检查计算是否完成的方法,以等待计算的 完成,并可以使用 get()方法获取计算的结果。

99、什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)

原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。 处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。 在 Java 中可以通过锁和循环 CAS 的方式来实现原子操作。 CAS 操作—— Compare and Set,或是 Compare and Swap,现在几乎所有的 CPU 指令都支持 CAS 的原子操作。

原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在多线程环境 下避免数据不一致必须的手段。

int++并不是一个原子操作,所以当一个线程读取它的值并加 1 时,另外一个线程 有可能会读到之前的值,这就会引发错误。 为了解决这个问题,必须保证增加操作是原子的,在 JDK1.5 之前我们可以使用同 步技术来做到这一点。到 JDK1.5,java.util.concurrent.atomic 包提供了 int 和 long 类型的原子包装类,它们可以自动的保证对于他们的操作是原子的并且不需 要使用同步。

原子类:AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference

原子数组:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray

原子属性更新器:AtomicLongFieldUpdater,AtomicIntegerFieldUpdater, AtomicReferenceFieldUpdater

解决 ABA 问题的原子类:AtomicMarkableReference(通过引入一个 boolean 来反映中间有没有变过),AtomicStampedReference(通过引入一个 int 来累 加来反映中间有没有变过)

100、Java Concurrency API 中的 Lock 接口(Lock interface) 是什么?对比同步它有什么优势

Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。 他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的 条件对象。

它的优势有:

可以使锁更公平

可以使线程在等待锁的时候响应中断

可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间

可以在不同的范围,以不同的顺序获取和释放锁

整体上来说 Lock 是 synchronized 的扩展版,Lock 提供了无条件的、可轮询的 (tryLock 方法)、定时的(tryLock 带参方法)、可中断的(lockInterruptibly)、可多 条件队列的(newCondition 方法)锁操作。另外 Lock 的实现类基本都支持非公平 锁(默认)和公平锁,synchronized 只支持非公平锁,当然,在大部分情况下,非公平锁是高效的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python、execl数据分析(数据描述)

一 python 1.各函数 1.1python库的安装与导入 #pip install os#pip install matplotlib#pip install seaborn#pip install scikit-learn#pip install scipy#修 改 工 作 目 录import osos.getcwd () # 查看当前工作环境os.chdir( F :\my course\database ) # 修改工作环境o…

数据挖掘不是挖土豆,而是让数据开口说话!

文章目录 1、 缘起1.1 啤酒与尿布 - 发现商业价值1.2 数据挖掘 - 让数据说话 2、数据挖掘的难点3、数据挖掘的方法 Part 1 - 专业技术流3.1 网络数据采集 - 代理技术3.2 网络数据采集 - 爬虫浏览器3.3 网络数据采集 - 网络解锁器3.4 网络数据采集 - Web Scraper IDE 4、数据挖掘…

力扣100热题[哈希]:最长连续序列

原题:128. 最长连续序列 题解: 官方题解:. - 力扣(LeetCode)题解,最长连续序列 :哈希表 官方解题思路是先去重,然后判断模板长度的数值是否存在,存在就刷新&#xff0c…

python类属性和global变量区别

数据成员是指在类中定义的变量,即属性,根据定义位置,又可以分为类属性和实例属性。 类属性定义在方法前面。 定义类属性,非全局变量 class MyClass:#global cc 10 ## 类属性def my_function(self):global qwqw 9print(this …

Vue项目使用process.env关键字及Vue.config.js配置解决前端跨域问题

1.process.env 是Node.js 中的一个环境 1.打开命令行查看环境: 2.process.env与Vue CLI 项目 Vue Cli 有以下三种运行模式 development 模式用于 vue-cli-service serve test 模式用于 vue-cli-service test:unit production 模式用于 vue-cli-service build 和 vue-cli-se…

酷炫的粒子动态表白HTML源码

源码介绍 酷炫的粒子动态表白HTML源码,自己自定义文字,动态组合文字,进行表白,喜欢的朋友可以下载使用,很不错的表白HTML代码 下载地址 酷炫的粒子动态表白HTML源码

深入理解与实践AB测试:从理论到实战案例解析

一、引言 在互联网产品优化和运营策略制定中,AB测试(也称为分组测试或随机化对照实验)是一种科学且严谨的方法。它通过将用户群体随机分配至不同的实验组(通常是A组和B组),对比不同版本的产品或策略对关键…

封装一个可回车事件,不能输入配置项options没有的值的AutoComplete

要想AutoComplete支持回车事件,onKeyDown方法是用不了的,这一点在antd官方4.24.16中并没有提及。但是我们可以追踪到AutoComplete组件的源码,虽然并不能看很懂,但是可以看出组件是InternalSelectProps,RefSelectProps的…

【GPT概念04】仅解码器(only decode)模型的解码策略

一、说明 在我之前的博客中,我们研究了关于生成式预训练转换器的整个概述,以及一篇关于生成式预训练转换器(GPT)的博客——预训练、微调和不同的用例应用。现在让我们看看所有仅解码器模型的解码策略是什么。 二、解码策略 在之前…

小游戏-扫雷

扫雷大多人都不陌生,是一个益智类的小游戏,那么我们能否用c语言来编写呢, 我们先来分析一下扫雷的运行逻辑, 首先,用户在进来时需要我们给与一个菜单,以供用户选择, 然后我们来完善一下&#…

OceanMind海睿思入选中国信通院《2023高质量数字化转型技术解决方案集》

近日,由中国信息通信研究院“铸基计划”编制的《2023高质量数字化转型技术解决方案集(第一版)》正式发布。 中新赛克海睿思 凭借卓越的产品力以及广泛的行业实践,成功入选该方案集的数据分析行业技术解决方案。 为促进数字化转型…

Redis消息队列与thinkphp/queue操作

业务场景 场景一 用户完成注册后需要发送欢迎注册的问候邮件、同时后台要发送实时消息给用户对应的业务员有新的客户注册、最后将用户的注册数据通过接口推送到一个营销用的第三方平台。 遇到两个问题: 由于代码是串行方式,流程大致为:开…

视频号小店月入5w+,真的有那么赚钱吗?

我是电商珠珠 视频号小店是22年视频号团队发展的电商平台,距离现在也不过一年多的时间。我做电商已经有五年左右的时间了,天猫、快手、抖音小店都做过。在22年的时候,我开始琢磨起了视频号小店。 到现在我也拥有了视频号小店的运营团队&…

【C++从练气到飞升】06---重识类和对象

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书。 目录 ⛳️推荐 一、再谈构造函数 1. 构造函数体赋值 2. 初始化列表 每个成员变量在初始化列表中只能出现一次--初始化只能初始…

python爬虫学习第二天----类型转换

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

leetcode LCR121.寻找目标值-二维数组

目录 问题描述示例具体思路思路一思路二 代码实现 问题描述 m*n 的二维数组 plants 记录了园林景观的植物排布情况,具有以下特性: 每行中,每棵植物的右侧相邻植物不矮于该植物; 每列中,每棵植物的下侧相邻植物不矮于该…

Hive SQL必刷练习题:留存率问题(*****)

留存率: 首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存 今日留存率 (今日登录且明天也登录的用户数) / 今日登录的总…

一些恶意样本的流量分析学习

Trickbot Trickbot 是一种自 2016 年以来一直在感染受害者的信息窃取者和银行恶意软件。Trickbot通过恶意垃圾邮件(malspam)分发,也由其他恶意软件(如Emotet,IcedID或Ursnif)分发。 分析来自恶意垃圾邮件…

银行5G短消息应用架构设计

(一)RCS简介 1.1 RCS的提出与标准制定 RCS(Rich Communication Services & Suite,富媒体通信)是GSMA(Groupe Speciale Mobile Association,全球移动通信系统协会)在2008年提出的一种通讯方式,RCS融合了语音、消息…

Bytebase 2.14.1 - 分支 (Branching) 功能支持 Oracle

🚀 新功能 分支 (Branching) 功能支持 Oracle。为 SQL 编辑器添加了项目选择器。 新增 SQL 审核规范: 禁止混合 DDL、DML 语句。禁止对同一张表进行不同类型的 DML 变更 (UPDATE,INSERT,DELETE)。 🔔 重大变更 工作空间设置中的「数据访问…