ToB企服应用市场:ToB评测及商务社交产业平台

标题: java常见的面试题 [打印本页]

作者: 宁睿    时间: 2025-1-4 02:20
标题: java常见的面试题
目录

一、 spring的配置文件的哪四处?
1.数据源(Data Source)配置
2.事务管理器(Transaction Manager)配置

3. 扫描组件(Component Scanning)配置
4. AOP(面向切面编程)配置(如果须要)


二、 start启动器的原理 
1.什么是启动器(Starter)
2. 启动器的工作原理 - 依赖管理方面
3.启动器的工作原理 - 自动配置方面
三、 InnoDB 的b+树和 MyISAM 的b+树的区别?
InnoDB 的 B + 树特点
1.存储布局与数据组织方式
2.适用场景与性能上风
MyISAM 的 B + 树特点
1.存储布局与数据组织方式
2.适用场景与性能上风
两者的主要区别总结
四、 读写分离的情况下怎么保证数据的一致性?
1.读写分离架构概述
2.基于数据同步机制保证一致性
1.异步复制与延迟监控

2.半同步复制的应用
3.应用层控制保证一致性
1.读写分离中间件的使用与配置
2.业务逻辑层的赔偿机制

五、项目中有哪些通信协议
1.HTTP/HTTPS 协议
2.TCP/IP 协议
3.UDP 协议
4.Websocket 协议
5.MQTT 协议(消息队列遥测传输协议)


一、 spring的配置文件的哪四处?


1.数据源(Data Source)配置

作用:在 Spring 应用中,数据源配置是连接数据库的关键部分。它定义了应用步伐如何与数据库举行通信,包括数据库的 URL、用户名、密码等信息。


2.事务管理器(Transaction Manager)配置

作用:事务管理对于保证数据的一致性和完备性至关重要。Spring 的事务管理器配置定义了如何管理事务,包括事务的传播举动、隔离级别等。
示例(以 XML 配置为例)
  1. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  2.     <property name="dataSource" ref="dataSource"/>
  3. </bean>
复制代码
解释
定义了一个id为transactionManager的bean,其类是DataSourceTransactionManager,这是用于 JDBC 数据源的事务管理器
   
  

3. 扫描组件(Component Scanning)配置

作用:Spring 通过组件扫描来自动发现和注册应用中的组件,如@Service、@Repository、@Controller等标注的类。这大大简化了对象的创建和管理过程
示例(以 XML 配置为例)
  1. <context:component - scan base - package="com.example.myapp"/>
复制代码
解释
context:component - scan标签告诉 Spring 从com.example.myapp这个基础包其子包中扫描组件。这样,Spring 会自动创建和管理这些组件,例如,将带有@Service注解的类作为服务层组件举行管理,将带有@Repository注解的类作为数据访问层组件举行管理。


4. AOP(面向切面编程)配置(如果须要)

作用:AOP 用于实现横切关注点的分离,如日志记载、安全检查等。通过 AOP 配置,可以定义切面、切点和关照,将这些横切关注点从业务逻辑中分离出来,进步代码的可维护性和复用性。
示例(以 XML 配置为例)
  1. <aop:config>
  2.     <aop:pointcut id="businessService" expression="execution(* com.example.myapp.service.*.*(..))"/>
  3.     <aop:aspect id="loggingAspect" ref="loggingAspectBean">
  4.         <aop:before pointcut - ref="businessService" method="logBefore"/>
  5.     </aop:aspect>
  6. </aop:config>
复制代码
解释
   
  




二、 start启动器的原理 


1.什么是启动器(Starter)

在 Spring Boot 项目中,启动器是一组依赖的集合,它可以大概资助开发者快速搭建特定功能的开发情况。例如,spring - boot - starter - web启动器可以让开发者很方便地构建一个基于 Spring 的 Web 应用步伐。启动器本质上是一种约定大于配置的工具,它隐藏了大量复杂的配置细节,让开发者可以专注于业务逻辑的实现。

2. 启动器的工作原理 - 依赖管理方面

自动依赖引入:启动器使用了 Maven 或 Gradle 等构建工具的依赖通报特性。以 Maven 为例,当在项目的pom.xml文件中添加一个启动器依赖(如spring - boot - starter - web)时,这个启动器本身会依赖一系列其他的库。
   例如,spring - boot - starter - web依赖于spring - webmvc(用于实现 Spring 的 MVC 框架)、tomcat - embed - core(用于在应用内部嵌入 Tomcat 服务器)等众多库。这些依赖关系是预先定义好的,当添加启动器时,构建工具会自动下载并管理这些相干的依赖。
  版本兼容性管理:Spring Boot 启动器还负责管理依赖的版本。Spring Boot 团队维护了一套经过测试的、相互兼容的依赖版本。例如,在spring - boot - dependencies这个父 POM(在 Maven 中)中,规定了各个库的版本号。当使用启动器时,它所依赖的各个库会按照这个预定义的版本号举行下载和使用,避免了因版本冲突导致的各种题目。

3.启动器的工作原理 - 自动配置方面

条件注解(Conditional Annotations)的应用:Spring Boot 启动器通过条件注解来判定是否须要举行某些配置。例如,@ConditionalOnClass注解用于检查特定的类是否存在于类路径中。如果在项目的类路径中存在org.springframework.web.servlet.DispatcherServlet(这是 Spring MVC 的焦点类),那么与 Spring MVC 相干的配置就会被启用。这样可以根据项目中实际引入的类来动态地配置应用,避免不须要的配置加载。
自动配置类(Auto - configuration Classes)的加载和应用:每个启动器通常都包含一个或多个自动配置类。这些自动配置类会在应用启动时被加载(通过 Spring Boot 的自动配置机制)。以spring - boot - starter - web为例,其中的自动配置类会自动配置 Spring MVC 相干的组件,如视图解析器、消息转换器等。这些自动配置类会根据默认的配置规则或者应用的属性(可以通过application.properties或application.yml文件设置)来设置组件的属性。例如,自动配置类会根据应用的配置来确定视图解析器应该解析哪些视图文件范例(如.jsp、.html等)。
属性绑定(Property Binding):启动器还支持属性绑定功能。开发者可以在application.properties或application.yml文件中设置与启动器相干的属性。例如,对于spring - boot - starter - web,可以设置服务器端口(server.port)、上下文路径(server.servlet.context - path)等属性。这些属性会被自动绑定到相应的配置类或组件上。例如,当设置server.port = 8081时,应用启动时会将嵌入式服务器(如 Tomcat)的端口设置为 8081。



三、 InnoDB 的b+树和 MyISAM 的b+树的区别?

InnoDB 的 B + 树特点

1.存储布局与数据组织方式

索引存储:在 InnoDB 存储引擎中,数据是存储在 B + 树的叶子节点中的非叶子节点只存储索引信息,用于引导搜索路径找到叶子节点。例如,对于一个以主键为索引的表,主键的值会按照序次存储在 B + 树的叶子节点上。并且叶子节点之间通过双向链表相连,这使得范围查询(如查询主键值在某个区间内的所有记载)非常高效。可以从链表的一端开始,序次扫描叶子节点,获取满足条件的所有记载。
数据存储:InnoDB 接纳 聚集索引(Clustered Index)的方式,即如果表有主键,那么主键索引的叶子节点存储的是整行数据。如果没有主键,会选择一个唯一键作为聚集索引;如果没有唯一键,InnoDB 会自动天生一个隐藏的主键。这种存储方式使得通过主键访问数据时,只须要一次 B + 树的查找就能获取到完备的行数据。

2.适用场景与性能上风

事务处理与数据完备性支持:InnoDB 是为事务处理(ACID 特性)设计的存储引擎。B + 树布局在这种情况下体现出色,由于它可以大概很好地支持插入、更新和删除操作,同时保证数据的一致性。在高并发的事务操作情况下,如银行系统中的账户生意业务记载存储、电商系统中的订单处理等,InnoDB 的 B + 树索引可以高效地处理大量的读写操作
   例如:
  在执行一个复杂的事务,涉及多个表的关联查询和数据更新时,InnoDB 可以大概使用 B + 树索引快速定位相干数据,并通过事务机制保证操作的完备性
  磁盘 I/O 优化:由于 B + 树的高度相对较低(通常为 3 - 4 层,具体取决于数据量和索引巨细),在查询数据时,可以大概减少磁盘 I/O 次数叶子节点的序次存储链表连接方式也有利于预读操作。数据库系统可以根据磁盘的读取特性,一次读取多个相邻的叶子节点数据,进步查询服从。这种磁盘 I/O 的优化在处理大量数据时效果尤为明显,例如在大型数据库应用中,存储海量用户信息或者商品数据时,InnoDB 的 B + 树索引可以减少磁盘寻道时间,加快数据访问速度。

MyISAM 的 B + 树特点

1.存储布局与数据组织方式

索引存储:MyISAM 存储引擎也使用 B + 树来构建索引,但与 InnoDB 不同的是,MyISAM 的 数据文件和索引文件是分开存储的。索引文件中的 B + 树叶子节点存储的是 指向数据文件中对应记载的物理地点(如文件偏移量)。
   例如,当通过索引查找一条记载时:
  起首在索引 B + 树中找到叶子节点,获取记载的物理地点,然后再去数据文件中根据这个地点读取实际的数据。
  数据存储:MyISAM 的数据文件存储了表中的实际数据,数据按照插入的序次存储,没有像 InnoDB 那样的聚集索引概念。这使得 MyISAM 在存储一些非关键业务数据或者对数据存储序次没有严格要求的场景下比较方便。
   例如:
  在一些简单的日志存储系统或者临时数据存储场景中,MyISAM 可以快速地插入数据,而不须要思量数据的聚集存储方式。
  
2.适用场景与性能上风

查询性能上风:MyISAM 的 B + 树索引在一些特定的查询场景下具有性能上风。特别是对于读麋集型的应用,尤其是只有单表查询或者简单的多表关联查询(没有复杂的事务处理和数据一致性要求)时,MyISAM 可以大概快速地定位数据。由于索引和数据的分离存储,使得在某些情况下,查询索引的速度可能更快。例如,在一个以读为主的新闻网站内容管理系统中,对于文章内容的查询,MyISAM 可以使用 B + 树索引快速找到文章的物理存储位置,进而读取文章内容。
空间使用与存储机动性:MyISAM 在空间使用上有肯定的机动性。由于数据和索引分开存储,在某些情况下可以更好地管理数据文件和索引文件的巨细。例如,当数据须要频繁更新,但索引相对稳定时,可以只对数据文件举行操作,而不须要频繁地修改索引文件,这样可以减少索引维护的开销。同时,对于一些对存储空间比较敏感的应用,MyISAM 可以通过一些特定的存储参数设置,如压缩数据文件等方式,来节流存储空间。


两者的主要区别总结

   
     
     
     
    



四、 读写分离的情况下怎么保证数据的一致性?

1.读写分离架构概述

在读写分离架构中,数据库系统将读操作和写操作分布到不同的数据库节点(主库和从库)上。主库负责处理所有的操作(如插入、更新、删除)从库负责处理读操作。这种架构可以有效提拔系统的性能和扩展性,由于读操作通常是频繁的,通过多个从库分担读负载,可以更好地应对高并发的读哀求。然而,这种架构可能会导致数据一致性题目,由于数据的更新是在主库举行,而从库的数据更新有肯定延迟。

2.基于数据同步机制保证一致性

1.异步复制与延迟监控

异步复制原理:在主从复制中,最常见的是异步复制方式。主库在执行完写操作后,会将操作记载到二进制日志(Binlog)中,然后通过网络将 Binlog 发送给从库。从库有一个 I/O 线程,它会吸取并将 Binlog 写入本地的中继日志(Relay Log),然后另一个 SQL 执行线程会从中继日志中读取操作记载并执行,从而实现数据的复制。这种方式的优点是主库的写操作不会由于从库的复制而阻塞,性能较好。
延迟监控与处理:为了监控主从复制的延迟情况,可以通过数据库系统提供的工具或者自定义脚本举行。
   
  在 MySQL 中,可以使用 SHOW SLAVE STATUS 下令来检察从库的状态,其中Seconds_Behind_Master 字段表示从库落伍主库的秒数。当延迟凌驾肯定阈值时,可以接纳相应的措施,如停息部分读操作,将读哀求路由到主库,或者发出警报关照管理员举行处理。
  

2.半同步复制的应用

半同步复制机制:半同步复制是一种介于异步复制同步复制之间的方式。在半同步复制模式下,主库在执行完写操作后,会等待至少一个从库确认已经吸取到并写入了中继日志后,才返回写操作成功的消息。这样可以在肯定水平上保证数据的一致性,由于主库可以确保至少有一个从库已经吸取到了最新的写操作记载。
性能与一致性的平衡:不过,半同步复制会对主库的性能产生肯定的影响,由于它须要等待从库的确认。在高并发的写操作场景下,可能会导致主库的响应时间延长。因此,须要根据业务对数据一致性的要求和系统的性能需求来合理设置半同步复制的参数。例如,可以设置等待从库确认的超时时间,当超时后,主库可以自动切换回异步复制模式,以避免长时间等待影响性能。

3.应用层控制保证一致性

1.读写分离中间件的使用与配置

中间件功能介绍:读写分离中间件(如 MyCat、Sharding - JDBC 等)在系统中起到了关键的作用。它可以根据 SQL 语句的范例(读或写)自动将哀求路由到主库或者从库。同时,一些高级的中间件还提供了数据一致性的控制功能。例如,它们可以在事务开始时,将所有相干的读操作也路由到主库,直到事务结束,这样可以保证在事务内部数据的一致性。
一致性策略配置:可以通过中间件的配置来设置数据一致性策略。例如,设置在某些关键业务场景下(如涉及资金生意业务、订单状态变更等),优先使用主库举行读操作,或者设置当从库延迟凌驾肯定限度时,全部读操作切换到主库。这些策略可以根据业务的重要性和对数据一致性的敏感水平来机动调整。

2.业务逻辑层的赔偿机制

记载操作日志与赔偿操作设计:在业务逻辑层,可以设计操作日志记载机制。当在主库执行写操作时,同时记载具体的操作日志,包括操作范例、操作时间、涉及的数据等。如果发现从库的数据与主库不一致,可以根据操作日志举行赔偿操作。例如,如果是一个商品库存的更新操作,在主库更新库存后,记载库存更新的日志。当发现从库库存数据不一致时,可以根据日志重新执行库存更新操作来修复数据。
终极一致性的实现:这种方式通常是基于终极一致性的原则,即允许系统在短时间内存在数据不一致的情况,但通过肯定的机制和时间,终极使数据到达一致。例如,在一个社交网络系统中,用户发布了一条动态,主库更新了动态数据后,从库可能会有短暂延迟。但在用户检察动态或者系统举行数据同步操作后,从库的数据会终极与主库一致。





五、项目中有哪些通信协议

1.HTTP/HTTPS 协议

定义与应用场景
HTTP超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网数据通信的基础,主要用于客户端(如浏览器)和服务器之间传输网页等资源。例如,当你在浏览器中输入一个网址时,浏览器就会通过 HTTP 协议向服务器哀求对应的网页内容,服务器将网页数据发送回浏览器,浏览器再举行解析和显示。HTTPS 是 HTTP 的安全版本,它在 HTTP 的基础上加入了 SSL/TLS 加密层,用于掩护数据传输的安全性。在涉及用户登录、金融生意业务、个人隐私信息传输等场景中广泛应用,如网上银行转账、电商平台的用户登录和支付等操作。
工作原理
   哀求 - 响应模型:HTTP 接纳哀求 - 响应的通信模式。客户端发送一个哀求消息给服务器,哀求消息包括哀求行(包含哀求方法,如 GET、POST 等,哀求的 URL 和 HTTP 协议版本)、哀求头(包含各种哀求相干的信息,如用户署理、担当的内容范例等)和哀求体(在某些哀求方法下包含要发送的数据,如 POST 哀求中的表单数据)。服务器收到哀求后,根据哀求的内容举行处理,然后返回一个响应消息。响应消息包括响应行(包含 HTTP 协议版本、响应状态码,如 200 表示成功、404 表示未找到资源等)、响应头(包含服务器信息、内容范例、内容长度等)和响应体(包含实际要返回给客户端的数据,如网页内容、文件数据等)。
  无状态性:HTTP 是无状态的协议,这意味着服务器不会记住客户端的状态信息。每次哀求都是独立的,服务器不会由于之前的哀求而对当前哀求有特别的处理。例如,在一个电商网站中,用户添加商品到购物车的哀求和结算购物车的哀求是相互独立的,服务器不会自动知道这两个哀求来自同一个用户的购物流程,通常须要通过使用 Cookie 或 Session 等技术来维护用户的状态。

2.TCP/IP 协议

定义与应用场景
TCP/IP(传输控制协议 / 互联网协议)是一组用于网络通信的协议族。其中,IP 协议负责在网络中路由和寻址,将数据包从源地点发送到目标地点。TCP 协议则是一种面向连接的、可靠的传输层协议,用于保证数据的可靠传输。它在许多须要稳定、可靠数据传输的场景中广泛应用,如文件传输(FTP 使用 TCP 协议)、电子邮件传输(SMTP 和 POP3/IMAP 协议在传输层通常基于 TCP)、远程登录(如 SSH 协议)等。
   例如  : 当你使用 FTP 从服务器下载文件时,TCP 协议会确保文件数据准确无误地从服务器传输到你的本地盘算机。
  工作原理
三次握手建立连接:在 TCP 通信开始前,须要通过三次握手来建立连接。起首,客户端发送一个带有 SYN(同步序列号)标志的数据包给服务器,表示哀求建立连接,同时包含一个初始序列号。服务器收到后,返回一个带有 SYN 和 ACK(确认)标志的数据包,确认收到客户端的哀求,并也发送自己的一个初始序列号。最后,客户端再发送一个带有 ACK 标志的数据包给服务器,确认收到服务器的序列号,这样连接就建立成功。
   这个过程可以类比为打电话时,先拨通号码(第一次握手),对方接听并回应(第二次握手),然后你再确认听到对方的回应(第三次握手)。
  可靠的数据传输机制:TCP 通过序列号确认应答机制来保证数据的可靠传输。发送方将数据分割成一个个数据包,并为每个数据包标记一个序列号。吸取方收到数据包后,会返回一个确认应答,告诉发送方已经收到了哪些数据包。如果发送方在肯定时间内没有收到确认应答,就会重新发送丢失的数据包。同时,TCP 还通过滑动窗口机制来控制发送方的发送速度,根据吸取方的吸取本领和网络状态来调整数据发送量,以避免网络拥塞。

3.UDP 协议

定义与应用场景
UDP(用户 Datagram 协议)是一种无连接的传输层协议。它不像 TCP 那样提供可靠的数据传输服务,没有握手过程,也不保证数据包的序次和是否到达目的地。但 UDP 具有传输速度快、开销小的特点,适用于一些对实时性要求较高但对数据准确性要求相对较低的场景,如视频直播、音频通话、网络游戏等。
   例如,在视频直播中,少量的数据丢失对于观众的观看体验影响不大,而实时性更为重要,UDP 可以快速地将视频数据发送出去,减少延迟。
  工作原理
数据报传输方式:UDP 以数据报(Datagram)的形式发送数据。发送方将数据封装成 UDP 数据报,其中包括源端口、目标端口、数据长度和数据内容等信息,然后直接发送给目标地点。吸取方收到数据报后,直接举行处理。由于没有像 TCP 那样的连接建立和数据确认机制,UDP 发送数据的速度更快,但也更容易出现数据丢失、重复或乱序的情况。例如,在一个网络游戏中,玩家的操作指令通过 UDP 发送,偶尔的指令丢失可能会导致玩家角色的动作稍微卡顿,但不会严重影响游戏的整体举行。

4.Websocket 协议

定义与应用场景
Websocket 是一种在单个 TCP 连接上举行全双工通信的协议。它主要用于实现浏览器服务器之间的实时通信。在传统的 HTTP 通信中,客户端和服务器之间的交互是哀求 - 响应式的,服务器不能主动向客户端推送信息。而 Websocket 改变了这种模式,使得服务器可以随时向客户端发送数据,客户端也可以随时向服务器发送数据。
广泛应用于在线谈天、实时数据监控、股票行情推送等须要实时交互的场景。例如,在一个在线股票生意业务平台中,Websocket 可以用于实时推送股票代价的变化,让用户可以大概及时获取最新信息。
工作原理
握手过程与协议升级:Websocket 通信开始时,客户端通过发送一个 HTTP 哀求来举行握手,哀求头中包含特别的字段,表示要升级协议为 Websocket。服务器收到哀求后,如果支持 Websocket 协议,会返回一个响应完成协议的升级。之后,双方就可以在这个 TCP 连接上举行全双工的通信。通信过程中,数据以帧(Frame)的形式发送,帧有多种范例,包括文本帧、二进制帧等,用于通报不同范例的数据。例如,在一个在线谈天应用中,用户发送的谈天消息可以作为文本帧通过 Websocket 连接 发送 给服务器,服务器再转发给其他用户

5.MQTT 协议(消息队列遥测传输协议)

定义与应用场景
MQTT 是一种轻量级的、基于发布 - 订阅模式的消息传输协议。它专为物联网设备之间的通信而设计,适用于网络带宽有限、设备资源有限的情况。例如,在智能家居系统中,各种传感器(如温度传感器、湿度传感器等)可以通过 MQTT 协议将采集到的数据发送到服务器或者其他设备上,同时,控制设备(如智能插座、智能灯等)也可以吸取服务器通过 MQTT 发布的控制下令。
工作原理
发布 - 订阅模式:在 MQTT 协议中,消息的发送者(发布者)将消息发布到特定的主题(Topic)上,而消息的吸取者(订阅者)订阅感兴趣的主题。当有消息发布到订阅者感兴趣的主题时,消息就会被通报给订阅者。例如,在一个智能农业系统中,土壤湿度传感器作为发布者将湿度数据发布到 “soil_moisture” 主题上,灌溉系统作为订阅者订阅了这个主题,当湿度数据低于肯定阈值时,灌溉系统就会收到消息并启动灌溉。
消息质量等级:MQTT 协议支持不同的消息质量等级(QoS)。QoS 0 表示最多一次通报,消息可能会丢失;QoS 1 表示至少一次通报,消息可能会重复;QoS 2 表示只有一次通报,保证消息既不丢失也不重复。这种机制可以根据不同的应用场景和设备性能来机动选择消息通报的可靠性。例如,对于一些不太重要的数据,如情况监测中的一些辅助参数,可以使用 QoS 0 来节流网络资源;而对于重要的控制下令,如智能家居中的电器开关下令,可以使用 QoS 2 来确保准确性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4