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、用户名、密码等信息。
- 示例(以 XML 配置为例):
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="password"/> </bean>
- 解释:
- 首先定义了一个
id
为dataSource
的bean
,它的类是DriverManagerDataSource
,这是 Spring 提供的一个简单的数据源实现。 property
标签用于设置数据源的属性。driverClassName
指定了数据库驱动的类名,这里是 MySQL 的驱动。url
定义了数据库的连接地址,包括主机名(localhost
)、端口号(3306
)和数据库名称(mydb
)。username
和password
分别是连接数据库所需的用户名和密码
- 首先定义了一个
2.事务管理器(Transaction Manager)配置
作用:事务管理对于保证数据的一致性和完整性至关重要。Spring 的事务管理器配置定义了如何管理事务,包括事务的传播行为、隔离级别等。
示例(以 XML 配置为例):
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
解释:
定义了一个id
为transactionManager
的bean
,其类是DataSourceTransactionManager
,这是用于 JDBC 数据源的事务管理器。
- 通过
property
标签的ref
属性将之前定义的dataSource
注入到事务管理器中,使得事务管理器能够使用这个数据源来管理事务。
3. 扫描组件(Component Scanning)配置
作用:Spring 通过组件扫描来自动发现和注册应用中的组件,如@Service
、@Repository
、@Controller
等标注的类。这大大简化了对象的创建和管理过程。
示例(以 XML 配置为例):
<context:component - scan base - package="com.example.myapp"/>
解释:
context:component - scan
标签告诉 Spring 从com.example.myapp
这个基础包及其子包中扫描组件。这样,Spring 会自动创建和管理这些组件,例如,将带有@Service
注解的类作为服务层组件进行管理,将带有@Repository
注解的类作为数据访问层组件进行管理。
4. AOP(面向切面编程)配置(如果需要)
作用:AOP 用于实现横切关注点的分离,如日志记录、安全检查等。通过 AOP 配置,可以定义切面、切点和通知,将这些横切关注点从业务逻辑中分离出来,提高代码的可维护性和复用性。
示例(以 XML 配置为例):
<aop:config><aop:pointcut id="businessService" expression="execution(* com.example.myapp.service.*.*(..))"/><aop:aspect id="loggingAspect" ref="loggingAspectBean"><aop:before pointcut - ref="businessService" method="logBefore"/></aop:aspect>
</aop:config>
解释:
aop:config
标签是 AOP 配置的根标签。aop:pointcut
定义了一个切点,id
为businessService
,expression
属性中的表达式execution(* com.example.myapp.service.*.*(..))
表示匹配com.example.myapp.service
包下所有类的所有方法。aop:aspect
定义了一个切面,id
为loggingAspect
,ref
属性指向一个切面实现的bean
(这里假设是loggingAspectBean
)。aop:before
标签定义了一个前置通知,它会在匹配切点(pointcut - ref="businessService"
)的方法执行之前调用logBefore
方法,这个方法通常用于记录日志等操作。
二、 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 可以通过一些特定的存储参数设置,如压缩数据文件等方式,来节省存储空间。
两者的主要区别总结
- 数据存储方式:
- InnoDB 采用聚集索引,数据存储在主键索引的叶子节点中;
- MyISAM 的数据和索引是分开存储的,索引叶子节点存储数据的物理地址。
- 事务支持:
- InnoDB 是支持事务处理的存储引擎,能够保证数据的 ACID 特性;
- MyISAM 不支持事务处理,适用于对事务要求不高的简单查询场景。
- 索引结构对性能的影响:
- InnoDB 的 B + 树在高并发事务环境和需要数据完整性保证的场景下表现出色,其叶子节点的链表结构有利于范围查询;
- MyISAM 的 B + 树在以读为主的简单查询场景下效率较高,索引和数据分离存储在某些情况下可以提供更快的查询速度。
- 空间利用和存储管理:
- MyISAM 在空间利用上相对灵活,可以单独管理数据文件和索引文件的大小;
- InnoDB 由于聚集索引的存在,数据存储相对紧密,但在频繁更新数据时可能需要更多的索引维护操作。
四、 读写分离的情况下怎么保证数据的一致性?
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 来确保准确性。
相关文章:
java常见的面试题
目录 一、 spring的配置文件的哪四处? 1.数据源(Data Source)配置 2.事务管理器(Transaction Manager)配置 3. 扫描组件(Component Scanning)配置 4. AOP(面向切面编程)配置&…...
2025吉林大学软件学院研究生人工智能原理真题
选择题 5题共10分 5.以下模型不需要训练过程的是? A.支持向量机 B.决策树 C.KNN近邻算法 D.卷积神经网络 简答题 4题35分 1.大模型是否已经通过图灵测试 2.三个近二十年来的机器学习模型和应用案例 3.LDA原理和算法流程 4.CNN原理和算法流程 证明题 谓词逻辑15…...
Qt判别不同平台操作系统调用相应动态库读取RFID
本示例使用的读卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b8jdyXi&ftt&id562957272162 #include <QDebug> #include "mainwindow.h" #include "./ui_mainwindow.h" #include "QLibrary"…...
智慧工地系统:建筑施工智能化管理的全新模式
智慧工地概述 智慧工地是将互联网的理念和和物联网的技术引入建筑工地,依托物联网、互联网、大数据、5G技术,建立云端数据平台,形成大数据的业务体系,打通一线操作与远程监管的链条,实现劳务、安全、环境、材料等各个…...
js将object整个实体对象作为参数传递
①将object实体转化成json字符串传递: JSON.stringify(obj) ②将json字符串转化成JSON对象值:JSON.parse(json) 实际应用: <div id"div_notice" stylefont-size:14px; width:100%; height:200px; overflow-y:auto;></di…...
shell的循环结构
1、思维导图 2、定义一个find函数,查找ubuntu和root的gid并使用变量接收结果 #!/bin/bash #第二题查找gid并返回结果 find() {u_gidid -g ubuntur_gidid -g rootecho "root-gid$r_gid"echo "ubuntu-gid$u_gid" } ret$(find) echo $ret3、定义一…...
STM32-笔记29-蓝牙遥控插座项目
一、实验前期准备 手机通过蓝牙模块远程遥控风扇。(插座的原理就是继电器,所以控制继电器就是控制插座电源) 二、项目实现 复制项目文件夹32-蓝牙模块实现,重命名33-蓝牙遥控插座项目 找到一个继电器项目,把继电器复…...
计算机网络复习(习题)
术语辨析 数据链路层 该层在两个通信实体之间传送以帧为单位的数据,通过差错控制方法,使有差错的物理线路变成无差错数据链路。 网络层 负责使分组以适当的路径通过通信子网的层次。 运输层 负责向两台主机中进程之间的通信提供通用的数据传输服务的层次。 应用层…...
webserver的http实现
1、用了状态机,为什么要用状态机? 在逻辑处理模块中,响应的http请求采用主从状态机完成, 传统的控制流程都是按照顺序执行的,状态机能够处理任意顺序的事件,并能提供有意义的响应--即使这些事件发生的顺序和…...
C语言----指针
目录 1.概念 2.格式 3.指针操作符 4.初始化 1. 将普通变量的地址赋值给指针变量 a. 将数组的首地址赋值给指针变量 b. 将指针变量里面保存的地址赋值给另一个指针变量 5.指针运算 5.1算术运算 5.2 关系运算 指针的大小 总结: 段错误 指针修饰 1. con…...
Elasticsearch与数据库数据一致性:最佳实践与解决方案
在现代应用程序中,Elasticsearch(ES)作为一个高效的分布式搜索引擎,常常与数据库一同使用,以提供强大的搜索、分析和数据可视化功能。然而,数据库和Elasticsearch之间的同步与一致性常常成为一个挑战。如何…...
C# 基本语法
C# 基本语法 介绍 C#(读作 "C sharp")是一种现代的、面向对象的编程语言,由微软开发,并在2000年首次发布。它是.NET框架的一部分,被广泛用于开发各种类型的应用程序,包括桌面应用、Web应用、移…...
CDGA|浅析自动化对数据治理的深远影响
在数字化时代,数据治理已成为企业管理的核心议题之一。随着数据量的快速增长和复杂性的不断提升,传统的手工数据管理方式已难以满足企业的需求。而自动化技术的引入,为数据治理带来了新的动力,正在逐步改变数据治理的面貌。 自动化…...
【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
🌟 关于我 🌟 大家好呀!👋 我是一名大三在读学生,目前对人工智能领域充满了浓厚的兴趣,尤其是机器学习、深度学习和自然语言处理这些酷炫的技术!🤖💻 平时我喜欢动手做实…...
小程序租赁系统的优势与应用探索
内容概要 小程序租赁系统,听起来很高大上,但实际上它比你想象的要实用得多!设想一下,几乎所有的租赁需求都能通过手机轻松解决。这种系统的便捷性体现在让用户随时随地都能发起租赁请求,而不再受制于传统繁琐的手续。…...
汇编环境搭建
学习视频 将MASM所在目录 指定为C盘...
ubuntu24.04使用open-vm-tools无法在主机和虚拟机之间拖拽文件夹
最近安装了vmware用ubuntu24.04作为虚拟机 然后发现无法在主机和虚拟机之间复制粘贴 然后安装了 sudo apt-get install open-vm-tools-desktop重启虚拟机,发现可以复制粘贴文字,但是文件和文件夹仍然不行 搜索发现是Ubuntu(22.04࿰…...
C++软件设计模式之模板方法模式
模板方法模式是面向对象软件设计模式之一,其主要意图是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 动机 在软件开发中,常常会遇到这样的情…...
20241231 机器学习ML -(2)KNN(scikitlearn)
1. build DKTree 递推创建Tree;当前维度找中位数分割 数据集 left set,Node(mid), right set. * 循环维度(当log(Nsample)>featureSize) 2. DKTree KNN search * 理论部分向量几何有介绍。 每个维度列中,中位数对应的数据点…...
Prometheus之终极指南(The Ultimate Guide to Prometheus)
Prometheus之终极指南 Prometheus 彻底改变了我们在现代 DevOps 生态系统中监控基础设施、应用程序和服务的方式。它不仅仅是一个工具;它是一个由指标收集、告警和实时监控组成的生态系统,受到 Uber、Google 和 SoundCloud 等组织的信任。在本文中&…...
如何使用Python调用淘宝api接口获取商品详情信息?
使用 Python 调用淘宝 API 接口获取商品详情信息,可按照以下步骤进行: 注册并获取 API 密钥 访问淘宝api文档,点击 “立即测试” 按钮,按照提示完成注册流程。注册成功后,登录测试平台,进入 “控制台” 页面…...
ubuntu 22下解决Unment dependencies问题
问题现象 在使用apt安装包的时候,出现如下错误: 解决方案 第一步 sudo apt-get -f install sudo apt-get update sudo apt-get upgrade第二步 sudo apt-get update sudo apt-get clean sudo apt-get autoremove第三步 sudo apt --fix-broken inst…...
leetcode 热题100(155. 最小栈)multiset c++
链接:155. 最小栈 - 力扣(LeetCode) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。…...
某小程序sign签名参数逆向分析
文章目录 1. 写在前面2. 接口分析3. 分析还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...
阿里云redis内存优化——PCP数据清理
在阿里云安装了一个redis节点,今天使用时忽然想着点击了一下分析内存。好家伙,居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊,怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度,研究了下这个问题的来源。网上…...
YOLOv10-1.1部分代码阅读笔记-head.py
head.py ultralytics\nn\modules\head.py 目录 head.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class Segment(Detect): 4.class OBB(Detect): 5.class Pose(Detect): 6.class Classify(nn.Module): 7.class WorldDetect(Detect): 8.class RTDETRDec…...
java开发中注解汇总
注解作用位置注意mybatis Data Getter Setter ToString EqualsAndHashCode AllArgsConstructor NoArgsConstructor Data 代替:无参构造,get,set,toString,hashCode,equals Getter Setter 可放在类和方法上&…...
Java开发 PDF文件生成方案
业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…...
Python机器学习笔记(十七、分箱、离散化、线性模型与树)
数据表示的最佳方法:取决于数据的语义,所使用的模型种类。 线性模型与基于树的模型(决策树、梯度提升树和随机森林)是两种成员很多同时又非常常用的模 型,它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…...
[极客大挑战 2019]Http 1
进入环境: 检查源码发现有一个链接,但是这里没有绑定,需要手动跳转,打开后,发现提示: 这里就是需要我们从https://Sycsecret.buuoj.cn来访问它 因此我们抓包,使用referer:服务器伪造…...
最近学习shader的一些总结
旨在总结最近学习shader过程中一些关键要素,强化下记忆,如果有错误也烦请指出。 1.Properties 可调节变量,用于定义从外部传入到内部的变量, 以及外部通过访问这些变量名, 可以获取这些变量的值 其中定义时指定的类型, 在后文中类型不一定相同(基本不…...
庐山派K230学习日记1 从点灯到吃灰
1 简介 庐山派以K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可作为AI与边缘计算平台 K230简介 K230芯片集成了两颗RISC-V处理器核心,双核…...
在Swagger(现称为OpenAPI)中各类@api之间的区别
在Swagger(现称为OpenAPI)中,ApiOperation 是用来描述单个API操作的注解。除此之外,Swagger还提供了其他一些类似的注解,它们用于不同层次或目的来增强API文档的详细程度和可读性。以下是这些注解及其之间的区别&#…...
【网络协议】开放式最短路径优先协议OSPF详解(二)
前言 第一部分:【网络协议】开放式最短路径优先协议OSPF详解(一) 在第一部分中,我们了解了链路状态路由协议并讨论了 OSPF 的工作原理,同时学习了如何配置 OSPF。在本章的第二部分中,我们将进一步探讨 OS…...
windows文件夹自定义右键调用powershell完成7zip加密打包
准备powershell脚本 2. regedit的路径是:计算机\HKEY_CLASSES_ROOT\Directory\shell\,在此项目下新增子项目diy_command\command,command的数据值为powershell D:\windowsProjects\directory_diy.ps1 %1 效果,点击后进入和power…...
MySQL 入门教程
MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 在本教程中,会让大家快速掌握MySQL的基本知识,并轻松使用MySQL数据库。 什么…...
BOOST 库在机器视觉中的应用及示例代码分析
一、引言 机器视觉是一门让计算机模拟人类视觉功能,对图像或视频数据进行理解、分析和决策的学科领域。在机器视觉的开发过程中,常常需要高效处理各种数据结构、进行数值计算、实现多线程并行处理以及运用优秀的算法框架等。BOOST 库作为一个功能强大、…...
第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)
自然语言处理(NLP)中的词嵌入(Word2Vec、GloVe)技术,是NLP领域的重要组成部分,它们为词汇提供了高维空间到低维向量的映射,使得语义相似的词汇在向量空间中的距离更近。以下是对这些技术的详细解…...
Log4j2 详解(异步日志打印及CSV格式日志输出)
Log4j2 详解 Apache Log4j2 是一个功能强大的 Java 日志记录框架,提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式,包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。 一 Log4j2 基础概念与配置 1.1 Log4j2 介绍…...
[网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集
CSP概念 CSP 是 Content Security Policy(内容安全策略)的缩写,是一种用于增强 Web 应用程序安全性的安全机制。它通过允许网站管理员控制页面中加载内容的来源来减少跨站脚本攻击(XSS)等常见的安全风险。 CSP 的工作…...
linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习
1.思维导图 2.练习 1.定义一个find函数,查找ubuntu和root的gid 2.定义一个数组,写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...
C# 设计模式(结构型模式):桥接模式
C# 设计模式(结构型模式):桥接模式 在软件设计中,我们经常会遇到系统的变化频繁,或者需要灵活扩展功能的场景。这时,桥接模式(Bridge Pattern)便显得尤为重要。桥接模式是一个结构型…...
RC充电电路仿真与分析
RC充电原理 下图是一个常见的RC充电电路:(假设R10K,C100nF) SW断开时,这个电路处于断路状态,C既没有充电也没有放电;SW闭合时,直流电源5V为电容C充电; 充电时电容两端…...
在 SQL 中获取第m个开始的n条记录方法汇总
在 SQL 中,要获取第m个开始的n条记录,主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例说明几种常见的方法: 1. 使用 LIMIT 和 OFFSET 适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。 SELECT * FROM table…...
Linux 35.6 + JetPack v5.1.4之编译 pytorch
Linux 35.6 JetPack v5.1.4之编译 pytorch 1. 源由2. 折腾3. 构建步骤3.1 下载代码3.2 编译选项3.3 CUDA选项3.4 CUDA路径3.5 版本控制3.6 编译whl 4. 总结5. 参考资料 1. 源由 目前,有很多科研性质的自动导航的开源代码,例如: Linux 35.5…...
docker 部署nginx
1、拉取阿里的nginx镜像: docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/list_su/nginx:stable-perl 2、官方nginx镜像: docker pull nginx:stable-perl 3、创建挂载文件目录 mkdir nginx && cd nginx mkdir c…...
深入刨析数据结构之排序(上)
目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…...
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
文章目录 PreApache CommonsApache Commons ProperLogging (Apache Commons Logging ) JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...
力扣刷题:栈和队列OJ篇(下)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 1.括号匹配问题(1)题目…...
QT:控件属性及常用控件(1)------核心控件及属性
一个图形化界面上的内容,不需要我们直接从零去实现 QT中已经提供了很多的内置控件: 按钮,文本框,单选按钮,复选按钮,下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…...