深入探讨:Spring与MyBatis中的连接池与缓存机制
深入探讨:Spring与MyBatis中的连接池与缓存机制
引言
在现代应用程序开发中,性能优化是一个永恒的话题。而在企业级Java应用开发中,Spring和MyBatis是两种非常流行的框架,它们的连接池和缓存机制对应用程序的性能有着至关重要的影响。本文将深入探讨Spring和MyBatis中的连接池和缓存机制,从基本概念到高级应用,全面覆盖这两个框架中的性能优化技术。
第一章 连接池机制
1.1 连接池概述
连接池(Connection Pool)是一种用于管理数据库连接的技术。它通过维护一定数量的数据库连接来减少频繁创建和关闭连接所带来的开销,从而提高应用程序的性能。
1.1.1 连接池的基本原理
连接池通过预先创建一定数量的数据库连接并维护一个连接的池子,当应用程序需要访问数据库时,从池中借用连接,用完后再归还给池。这样减少了创建和关闭连接的开销。
1.1.2 连接池的优点
- 提高性能:减少频繁创建和关闭连接的开销。
- 资源复用:多个应用程序可以共享同一个连接池。
- 控制并发:通过限制最大连接数来控制并发访问数据库的数量,防止数据库过载。
1.1.3 常见的连接池实现
- DBCP(Database Connection Pooling):Apache Commons DBCP是一个相对简单且功能强大的连接池实现。
- C3P0:提供了丰富的配置选项和良好的性能。
- HikariCP:以高性能和低延迟著称,是目前最受欢迎的连接池之一。
1.2 Spring中的连接池
Spring框架提供了对多种连接池的支持,常见的有DBCP、C3P0、HikariCP等。通过Spring的配置,可以方便地集成和管理这些连接池。
1.2.1 DBCP连接池
DBCP是Apache Commons提供的数据库连接池实现,在Spring中可以通过XML配置或Java配置来使用DBCP。
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="password"/><property name="initialSize" value="5"/><property name="maxTotal" value="10"/>
</bean>
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setInitialSize(5);dataSource.setMaxTotal(10);return dataSource;}
}
1.2.2 C3P0连接池
C3P0提供了更丰富的配置选项,可以通过以下配置在Spring中使用C3P0。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/><property name="user" value="root"/><property name="password" value="password"/><property name="minPoolSize" value="5"/><property name="maxPoolSize" value="20"/><property name="acquireIncrement" value="5"/>
</bean>
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() throws PropertyVetoException {ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");dataSource.setUser("root");dataSource.setPassword("password");dataSource.setMinPoolSize(5);dataSource.setMaxPoolSize(20);dataSource.setAcquireIncrement(5);return dataSource;}
}
1.2.3 HikariCP连接池
HikariCP是目前最受欢迎的连接池之一,以其高性能和低延迟著称。Spring Boot默认使用HikariCP作为连接池。
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:minimum-idle: 5maximum-pool-size: 20idle-timeout: 30000pool-name: HikariCPmax-lifetime: 2000000connection-timeout: 30000
1.2.4 Spring Boot中的连接池配置
Spring Boot简化了连接池的配置,开发者可以在application.properties或application.yml文件中进行配置。
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=2000000
spring.datasource.hikari.connection-timeout=30000
1.3 MyBatis中的连接池
MyBatis本身不直接提供连接池功能,但它能够与各种连接池技术很好地集成。通过配置MyBatis,可以使用外部连接池来管理数据库连接。
1.3.1 MyBatis连接池配置
MyBatis可以通过XML配置文件来指定使用的连接池类型和相关参数。
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="password"/><property name="poolMaximumActiveConnections" value="10"/><property name="poolMaximumIdleConnections" value="5"/><property name="poolTimeToWait" value="20000"/></dataSource></environment></environments>
</configuration>
1.3.2 与Spring集成的连接池配置
通过Spring与MyBatis的集成,可以在Spring的配置文件中定义数据源,并通过MyBatis的配置文件使用这个数据源。
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="password"/><property name="maximumPoolSize" value="20"/>
</bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
</bean>
1.3.3 使用HikariCP作为MyBatis连接池
HikariCP可以通过Spring配置,并在MyBatis中使用。Spring Boot默认支持HikariCP,可以直接在application.properties或application.yml中配置。
mybatis.datasource.url=jdbc:mysql://localhost:3306/mydb
mybatis.datasource.username=root
mybatis.datasource.password=password
mybatis.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.datasource.hikari.minimum-idle=5
mybatis.datasource.hikari.maximum-pool-size=20
mybatis.datasource.hikari.idle-timeout=30000
mybatis.datasource.hikari.max-lifetime=2000000
mybatis.datasource.hikari.connection-timeout=30000
第二章 缓存机制
2.1 缓存概述
缓存(Cache)是一种存储频繁访问数据的技术,通过减少对数据库的访问次数来提高应用程序的性能。缓存可以分为一级缓存和二级缓存两种。
2.1.1 缓存的基本原理
缓存通过将频繁访问的数据存储在内存中,从而减少对数据库的直接访问。一级缓存通常是线程级的缓存,而二级缓存可以是跨线程的全局缓存。
2.1.2 缓存的优点
- 提高性能:通过减少数据库访问次数,降低查询延迟。
- 减少数据库负载:降低数据库的并发访问压力。
- 提高响应速度:缓存的数据可以快速读取,提高应用的响应速度。
2.1.3 常见的缓存策略
- **LRU(Least Recently Used)
**:最近最少使用策略,移除最久未使用的数据。
2. LFU(Least Frequently Used):最少使用频率策略,移除使用频率最低的数据。
3. FIFO(First In First Out):先进先出策略,移除最早加入的数据。
2.2 Spring中的缓存
Spring提供了强大的缓存抽象,可以与多种缓存实现集成,如Ehcache、Caffeine、Redis等。通过Spring的注解和配置,可以轻松地实现缓存功能。
2.2.1 Spring Cache抽象
Spring Cache抽象提供了统一的缓存管理接口,支持多种缓存实现。主要注解包括@Cacheable、@CachePut、@CacheEvict等。
@Service
public class UserService {@Cacheable("users")public User getUserById(Long id) {// 查询数据库return userRepository.findById(id).orElse(null);}
}
2.2.2 使用Ehcache实现缓存
Ehcache是一种强大的缓存实现,可以与Spring Cache抽象集成。
<cache:annotation-driven/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"><property name="cacheManager" ref="ehcache"/>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
<ehcache><cache name="users" maxEntriesLocalHeap="1000" timeToLiveSeconds="3600"/>
</ehcache>
2.2.3 使用Caffeine实现缓存
Caffeine是一个高性能的Java缓存库,可以与Spring Cache集成。
@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CaffeineCacheManager cacheManager() {CaffeineCacheManager cacheManager = new CaffeineCacheManager("users");cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).maximumSize(100));return cacheManager;}
}
2.2.4 使用Redis实现缓存
Redis是一种分布式内存数据库,常用于实现分布式缓存。
@Configuration
@EnableCaching
public class RedisConfig {@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10));return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(cacheConfiguration).build();}
}
spring.redis.host=localhost
spring.redis.port=6379
2.2.5 Spring Boot中的缓存配置
Spring Boot简化了缓存的配置,通过application.properties或application.yml文件可以轻松配置缓存。
spring.cache.type=redis
spring.cache.redis.time-to-live=600000
2.3 MyBatis中的缓存
MyBatis提供了内置的一级缓存和二级缓存功能,可以通过配置文件进行配置和管理。一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存。
2.3.1 MyBatis一级缓存
MyBatis的一级缓存是SqlSession级别的缓存,在同一个SqlSession中执行相同的查询会从缓存中获取数据。
SqlSession session = sqlSessionFactory.openSession();
User user1 = session.selectOne("selectUser", 1);
User user2 = session.selectOne("selectUser", 1);
assert user1 == user2;
2.3.2 MyBatis二级缓存
MyBatis的二级缓存是Mapper级别的缓存,可以跨SqlSession共享数据。需要在配置文件中启用二级缓存。
<mapper namespace="com.example.UserMapper"><cache/><select id="selectUser" resultType="User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>
2.3.3 使用Ehcache实现MyBatis二级缓存
MyBatis可以集成Ehcache作为二级缓存的实现。
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
<ehcache><cache name="com.example.UserMapper" maxEntriesLocalHeap="1000" timeToLiveSeconds="3600"/>
</ehcache>
2.3.4 使用Redis实现MyBatis二级缓存
MyBatis也可以集成Redis作为二级缓存的实现。
<cache type="org.mybatis.caches.redis.RedisCache"/>
redis.host=localhost
redis.port=6379
第三章 高级应用与优化
3.1 连接池的高级应用与优化
通过调整连接池的配置参数,可以优化连接池的性能,例如最大连接数、最小连接数、连接超时时间等。此外,还可以结合Spring的异步处理和事务管理技术,进一步提高应用程序的性能。
3.1.1 连接池参数优化
通过调整连接池的各种参数,可以优化连接池的性能。常见的参数包括最大连接数、最小连接数、连接超时时间等。
spring.datasource.hikari.maximum-pool-size=50
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=20000
3.1.2 连接池监控与管理
通过监控连接池的使用情况,可以及时发现和解决性能问题。HikariCP提供了内置的监控支持,可以集成Prometheus、Graphite等监控系统。
HikariDataSource dataSource = new HikariDataSource();
HikariPoolMXBean poolMXBean = dataSource.getHikariPoolMXBean();
System.out.println("Active Connections: " + poolMXBean.getActiveConnections());
System.out.println("Idle Connections: " + poolMXBean.getIdleConnections());
3.1.3 与Spring事务管理的结合
连接池的管理与Spring的事务管理紧密相关,通过配置合适的事务管理器,可以更好地管理连接池的使用。
@Configuration
public class TransactionConfig {@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}
3.1.4 异步处理中的连接池管理
在异步处理场景下,合理管理连接池非常重要,可以通过Spring的异步支持和连接池配置来优化性能。
@Configuration
@EnableAsync
public class AsyncConfig {@Beanpublic Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(50);executor.setQueueCapacity(100);executor.initialize();return executor;}
}
3.2 缓存的高级应用与优化
缓存的配置和使用也有许多优化空间,例如缓存的有效期、缓存清理策略、分布式缓存的使用等。结合Spring和MyBatis的缓存技术,可以实现更高效的缓存管理。
3.2.1 缓存配置优化
通过调整缓存的各种参数,可以优化缓存的性能。常见的参数包括缓存的有效期、最大缓存大小等。
spring.cache.redis.time-to-live=600000
spring.cache.redis.cache-null-values=false
3.2.2 缓存清理策略
缓存的清理策略对于缓存的有效性和性能有着重要影响。常见的清理策略包括LRU、LFU、FIFO等。
@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CaffeineCacheManager cacheManager() {CaffeineCacheManager cacheManager = new CaffeineCacheManager("users");cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).maximumSize(100).removalListener((key, value, cause) -> System.out.println("Removal cause: " + cause)));return cacheManager;}
}
3.2.3 分布式缓存的实现
分布式缓存可以提高系统的可扩展性和容错能力。常见的分布式缓存实现包括Redis、Hazelcast、Apache Ignite等。
@Configuration
@EnableCaching
public class RedisConfig {@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10));return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(cacheConfiguration).build();}
}
3.2.4 与Spring事务管理的结合
缓存的使用与事务管理密切相关,通过配置合适的事务管理器,可以更好地管理缓存的使用。
@Configuration
@EnableTransactionManagement
public class TransactionConfig {@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}
第四章 实战案例
通过具体的实战案例
,详细介绍如何在实际项目中集成和优化Spring和MyBatis的连接池和缓存机制,从而提高项目的性能和稳定性。
4.1 案例一:基于Spring Boot和MyBatis的电商系统
4.1.1 系统架构设计
介绍电商系统的整体架构设计,包括前端、后端、数据库、缓存等模块。
4.1.2 连接池配置与优化
详细介绍如何在电商系统中配置和优化连接池,包括HikariCP的配置和优化参数。
spring:datasource:url: jdbc:mysql://localhost:3306/ecommerceusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:minimum-idle: 10maximum-pool-size: 50idle-timeout: 30000max-lifetime: 1800000connection-timeout: 20000
4.1.3 缓存配置与优化
详细介绍如何在电商系统中配置和优化缓存,包括Redis的配置和优化参数。
spring:cache:type: redisredis:host: localhostport: 6379time-to-live: 600000
4.1.4 性能测试与调优
通过性能测试工具,如JMeter,测试系统的性能,并根据测试结果进行优化调整。
4.2 案例二:分布式微服务中的连接池和缓存管理
4.2.1 微服务架构设计
介绍分布式微服务架构的设计,包括服务注册与发现、负载均衡、分布式缓存等。
4.2.2 分布式连接池管理
详细介绍如何在分布式微服务中配置和管理连接池,包括使用HikariCP和Spring Cloud的结合。
spring:datasource:url: jdbc:mysql://localhost:3306/microserviceusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:minimum-idle: 10maximum-pool-size: 50idle-timeout: 30000max-lifetime: 1800000connection-timeout: 20000
4.2.3 分布式缓存实现
详细介绍如何在分布式微服务中实现分布式缓存,包括使用Redis和Spring Cloud的结合。
spring:cache:type: redisredis:host: localhostport: 6379time-to-live: 600000
4.2.4 性能测试与调优
通过性能测试工具,如Gatling,测试分布式系统的性能,并根据测试结果进行优化调整。
第五章 未来发展趋势
探讨连接池和缓存技术的未来发展趋势,以及在Spring和MyBatis中的应用前景。
5.1 新型连接池技术
5.1.1 基于AI的连接池优化
AI技术在连接池优化中的应用,例如通过机器学习算法预测连接使用模式,并动态调整连接池参数。
5.1.2 自适应连接池管理
自适应连接池管理技术,可以根据实际负载动态调整连接池的大小和参数,以提高系统的性能和资源利用率。
5.2 新型缓存技术
5.2.1 基于内存计算的缓存技术
内存计算技术的发展,如Apache Ignite、Hazelcast等,提供了高性能的内存缓存解决方案。
5.2.2 分布式缓存的新趋势
分布式缓存技术的新发展,如一致性哈希算法、分布式缓存集群管理等,提高了分布式缓存的性能和可靠性。
5.3 Spring和MyBatis的未来发展
5.3.1 Spring在连接池和缓存管理中的新特性
Spring框架在连接池和缓存管理方面的新特性和改进,例如Spring Data的进一步发展和Spring Boot的增强支持。
5.3.2 MyBatis在性能优化方面的新功能
MyBatis在性能优化方面的新功能和改进,例如更高效的缓存管理和更灵活的配置选项。
结论
总结Spring和MyBatis中连接池和缓存机制的重要性,以及如何通过优化这些机制来提升应用程序的性能。强调在实际开发中,合理配置和管理连接池和缓存是确保系统高效运行的关键。
相关文章:

深入探讨:Spring与MyBatis中的连接池与缓存机制
深入探讨:Spring与MyBatis中的连接池与缓存机制 引言 在现代应用程序开发中,性能优化是一个永恒的话题。而在企业级Java应用开发中,Spring和MyBatis是两种非常流行的框架,它们的连接池和缓存机制对应用程序的性能有着至关重要的…...

[C#]使用C#部署yolov10的目标检测tensorrt模型
【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll,TensorRtExtern源码地址:T…...

Linux CFS 调度器 (1):概述
文章目录 1. 前言2. CFS 调度器2.1 概述2.2 一些实现细节2.3 运行队列:红黑树2.4 一些特征2.5 调度策略2.6 调度器类别2.7 扩展:组调度 3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失ÿ…...

HBase中Master初始化错误~
ERROR:org.apache.hadoop.hbase.PleaseHoldException:Master is initializing 1、停止HBase运行 2、启动zookeeper中的zkCli.sh服务 ./zookeeper/bin/zkCli.sh 3、执行完毕显示以下结果,删除habse文件夹 4、重新启动HBase即可。...

Hive on Spark版本兼容性
Hive on Spark仅在特定版本的Spark上进行测试,因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作,但不能保证。以下是Hive版本及其对应的Spark版本列表: 详情参考官方文档:http…...

grep命令知多少
引言 1. grep命令的重要性 在Linux系统中,grep是一个不可或缺的文本处理工具,它允许用户快速搜索文件中的文本模式。这个命令的名称来源于Global Regular Expression Print,即全局正则表达式打印,它源自UNIX早期的ed文本编辑器。…...

[java]windows和linux下jdk1.8安装包所有版本系列下载地址汇总
【windows jdk1.9系列下载地址】 序号java版本下载地址1java-jdk9-jdk-9.0.1-windows-x64-bin.zip点我下载 【windows jdk1.8系列下载地址】 序号java版本下载地址1java-jdk1.8-jdk-8u202-windows-x64.zip点我下载2java-jdk1.8-jdk-8u201-windows-x64.zip点我下载3java-jdk1…...

Electron+Vue开源软件:洛雪音乐助手V2.8畅享海量免费歌曲
洛雪音乐助手是一款功能全面且完全免费的开源音乐软件,支持在Windows、Android和iOS平台上使用。 平台支持: 桌面版:采用Electron Vue技术栈开发,支持Windows 7及以上版本、Mac OS和Linux,具有广泛的用户群体覆盖。 …...

CAPL通过addTimeToMeasurementStartTime或者getLocalTime获取本地时间
文章目录 getLocalTimeaddTimeToMeasurementStartTimegetLocalTime long tm[9]; getLocalTime(tm); // now tm contains the following entries: // tm[0] = 3; (seconds) // tm[1] = 51; (minutes) // tm[2] = 16; (hours)...

谷歌上架,APP被移除了,没封号,换个包名还能重新提审上架?
对于在Google Play上架应用的开发者来说,尤其是那些矩阵式上架马甲包的开发者,可能已经遭遇过无数次应用被暂停或移除的情况了。通常这种情况下,账号也随之会被封,且大多数开发者认为,没有立马收到封号邮件的话&#x…...

Docker部署MaxKB 知识库(提高问答命中率)
前言 上一篇文章简单的介绍了下MaxKB,这一篇文章就讲如何部署MaxKB。 MaxKB实现逻辑也比较简单,如下图。 安装 修改Docker镜像源 由于不可抗力,部分源已经无法使用,需要修改以下的源地址来拉取镜像。如果是linux,…...

LeetCode739每日温度
题目描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 解析 每次往栈中…...

【Qt】Qt中的几种Timer
1. QObject::startTimer int QObject::startTimer(int interval, Qt::TimerType timerType Qt::CoarseTimer) int QObject::startTimer(std::chrono::milliseconds time, Qt::TimerType timerType Qt::CoarseTimer)每次时间到了会调用虚函数timerEvent() 2. QTimer 3. QBa…...

Excel 多列组合内容循环展开
某表格 A 列是编号,其他列是用逗号分隔的意义不同的分类列 ABCDEFG1Assembly#ProductTypeUnit ConfigNominal CapacitySupply VoltageGenerationCase Construction23H1012290001CMD,P24,36FAA,B33H1012290002CMD,P48,60FA,BA,B43H1012290003CMD,P24,36B,C,D,EAA,B …...

Vue2+Element-ui实现el-table表格自适应高度
效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…...

【人工智能】开发AI可能获刑?加州1047草案详解
引言 随着人工智能(AI)技术的飞速发展,其应用领域不断扩展,但同时也引发了诸多争议和监管问题。近期,加州参议院以32比1的压倒性投票通过了1047号草案,又称《前沿人工智能模型安全可靠创新法案》。这一草案…...

机器学习二分类数据集预处理全流程实战讲解
本文概述 本文对weatherAUS数据集进行缺失值分析并剔除高缺失特征,合理填补剩余缺失值,利用相关性筛选关键特征,采用多种机器学习模型(如逻辑回归、随机森林等)在80%训练集上训练,并在20%测试集上预测明日降…...

大模型应用:LangChain-Golang核心模块使用
1.简介 LangChain是一个开源的框架,它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成,实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛,使得任何人都可以…...

【Tkinter界面】Canvas 图形绘制(03/5)
文章目录 一、说明二、画布和画布对象2.1 画布坐标系2.2 鼠标点中画布位置2.3 画布对象显示的顺序2.4 指定画布对象 三、你应该知道的画布对象操作3.1 什么是Tag3.2 操作Tag的函数 https://www.cnblogs.com/rainbow-tan/p/14852553.html 一、说明 Canvas(画布&…...

【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%
2 初级阶段 —— 基础语法和数据类型 文章目录 2 初级阶段 —— 基础语法和数据类型2.0 关键字(keywords) 🔥2.1 注释与标识符2.1.1 注释2.1.2 标识符 2.2 变量与赋值2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外2.2.2 local变量是局部变量, 以end作为边界2.…...

centos7 xtrabackup mysql 基本测试(3)---虚拟机环境 安装mysql
centos7 xtrabackup mysql 基本测试(3)—虚拟机环境 安装mysql centos7 安装 mysql5.7 可以在运行安装程序之前导入密钥: sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022第一步、下载MySQL 安装包: sudo w…...

Java Native Interface 使用指南
我们知道Java本身的实现,很大一部分是用C写的。实际上,Java也允许我们和原生平台的代码进行交互。 Java定义了一个接口规范,就叫做Java Native Interface,通过这个接口规范,我们就可以让Java代码运行原生平台的代码。…...

代码随想录算法训练营第三十九天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树
62.不同路径 题目链接:https://leetcode.cn/problems/unique-paths/ 文档讲解:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE… 视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu/ 思路 确定dp数组以及下标的含…...

C/C++函数指针、C#委托是什么?
函数指针 #include<stdio.h>//声明函数指针 typedef int(*Calc)(int a, int b); int Add(int a, int b) {return a b; } int Sub(int a, int b) {return a - b; }int main() {Calc funcPoint1 &Add;Calc funcPoint2 ⋐int x 120;int y 140;int z 0;z …...

红队攻防渗透技术实战流程:组件安全:JacksonFastJsonXStream
红队攻防渗透实战 1. 组件安全1.1 J2EE-组件Jackson-本地demo&CVE1.1.1 代码执行 (CVE-2020-8840)1.1.2 代码执行(CVE-2020-35728)1.2 J2EE-组件FastJson-本地demo&CVE1.2.1 FastJson <= 1.2.241.2.2 FastJson <= 1.2.471.2.3 FastJson <= 1.2.801.3 J2EE-组…...

Perl 语言学习进阶
一、如何深入 要深入学习Perl语言的库和框架,可以按照以下步骤进行: 了解Perl的核心模块:Perl有许多核心模块,它们提供了许多常用的功能。了解这些模块的功能和用法是深入学习Perl的第一步。一些常用的核心模块包括:S…...

LangGraph实战:从零分阶打造人工智能航空客服助手
❝ 通过本指南,你将学习构建一个专为航空公司设计的客服助手,它将协助用户查询旅行信息并规划行程。在此过程中,你将掌握如何利用LangGraph的中断机制、检查点技术以及更为复杂的状态管理功能,来优化你的助手工具,同时…...

R可视化:R语言基础图形合集
R语言基础图形合集 欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 基础图形可视化 数据分析的图形可视化是了解数据分布、波动和相关性等属性必…...

mysql导入sql文件失败及解决措施
1.报错找不到表 1.1 原因 表格创建失败,编码问题mysql8相较于mysql5出现了新的编码集 1.2解决办法: 使用vscode打开sql文件ctrlh,批量替换,替换到你所安装mysql支持的编码集。 2.timestmp没有设置默认值 Error occured at:20…...

JS:获取鼠标点击位置
一、获取鼠标在目标元素中的点击位置 getClickPos.ts: export const getClickPos (e: MouseEvent) > {return {x: e.offsetX,y: e.offsetY,}; };二、获取鼠标在页面中的点击位置 getClickPos.ts: export const getPageClickPos (e: MouseEvent) > {return {x: e.pa…...