阅读更多
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。

该项目在阿里巴巴内部得到了广泛的部署,在外部也有大量的用户群。为了使大家更好地了解和使用Druid,我们采访了Druid项目的主要负责人——温少(博客)。

温少是ITeye的名人了,为了照顾新会员,先来个自我介绍吧! Top

我2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。

2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。

Druid是什么?有什么作用? Top

Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。

Druid的项目背景?目前的项目团队情况?开源目的? Top

2010年开始,我负责设计一个叫做Dragoon的监控系统,需要一些监控组件,监控应用程序的运行情况,包括Web URI、Spring、JDBC等。为了监控SQL执行情况,我做了一个Filter-Chain模式的ProxyDriver,缺省提供StatFilter。当时我还做了一个SQL Parser。老板说,不如我们来一个更大的计划,把连接池、SQL Parser、Proxy Driver合起来做一个项目,命名为Druid,于是Druid就诞生了。

2011年2月春节期间,我完成了连接池(DruidDataSource)的第一个版本,4月开始在生产环境测试,2012年第一季度开始大规模实施。

提交过代码的开发者有5个人,主要代码是我维护,有一人专门负责内部实施。

通过开源,希望有更多使用场景,更多的反馈,更多人参与其中,共同打造最好的数据库连接池。

Druid支持哪些数据库? Top

Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。

Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。

Druid是如何扩展JDBC的? Top

Druid在DruidDataSourc和ProxyDriver上提供了Filter-Chain模式的扩展API,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用。

为什么说Druid是“最好的数据库连接池”?体现在哪些方面?这是如何实现的? Top

阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。

首先,强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。

  • 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
  • SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。
  • 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。

其次,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。

Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的WallFilter。

阿里巴巴内部实现了用于数据库密码加密的CirceFilter,以及和Web、Spring关联监控的DragoonStatFilter。


第三,Druid集合了开源和商业数据库连接池的优秀特性,并结合阿里巴巴大规模苛刻生产环境的使用经验进行优化。

  • ExceptionSorter。当一个连接产生不可恢复的异常时,例如Oracle error_code_28 session has been killed,必须立刻从连接池中逐出,否则会产生大量错误。目前只有Druid和JBoss DataSource实现了ExceptionSorter。
  • PSCache内存占用优化对于支持游标的数据库(Oracle、SQL Server、DB2等,不包括MySql),PSCache可以大幅度提升SQL执行性能。一个PreparedStatement对应服务器一个游标,如果PreparedStatement被缓存起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似“SELECT * FROM T WHERE ID = ?”这样的场景,性能可能是一个数量级的提升。但在Oracle JDBC Driver中,其他的数据库连接池(DBCP、JBossDataSource)会占用内存过多,极端情况可能大于1G。Druid调用OracleDriver提供管理PSCache内部API。
  • LRU是一个性能关键指标,特别Oracle,每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,有助于数据库服务器优化,这是重要的指标。Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0则不是。BoneCP在mock环境下性能可能还好,但在真实环境中则就不好了。

Druid的性能如何?能否给出一些测试对比数据? Top

性能不是Druid的设计目标,但是测试数据表明,Druid性能比DBCP、C3P0、Proxool、JBoss都好。

这里有一些测试数据:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916539

谈谈Druid的SQL解析功能?效率如何? Top

Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。

简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。

Druid的扩展性如何? Top

Druid提供Filter-Chain模式的插件框架,通过编写Filter配置到DruidDataSource中就可以拦截JDBC的各种API,从而实现扩展。Druid提供了一系列内置Filter。

在SQL注入防御方面,Druid的优势是什么?实现原理是什么? Top

Druid的优势是在JDBC最低层进行拦截做判断,不会遗漏。

Druid实现了Oracle、MySql、Postgresql、SQL-92的Parser,基于SQL语法分析实现,理解其中的SQL语义,智能、准确、误报率低。

具体细节参考这里:http://code.alibabatech.com/wiki/display/Druid/WallFilter

目前Druid的应用(部署)情况? Top

Druid是阿里巴巴监控系统Dragoon的副产品,从Dragoon监控系统的数据来看,在阿里巴巴已经部署了600多个应用。在阿里巴巴外部也有很多Druid的用户,外部用户没有正式统计数据,但经常有反馈。

我想将其中的某个模块(比如监控模块)用到其他连接池,是否可以?模块的独立性如何? Top

可以通过DruidDriver把内置的Filter用在其他连接池中。在2011年上半年DruidDataSource不成熟的时候,我们也是这么做的。在其他连接池中使用内置的Filter,需要修改jdbc-url,使用DruidDriver作为一个ProxyDriver。

我想在项目中使用,应该注意哪些事项?能否用于商业项目? Top

Druid是一个开源项目,基于Apache 2.0协议,你可以免费自由使用。Druid只支持JDK 6以上版本,不支持JDK 1.4和JDK 5.0。

配置是否复杂?能否给出一个典型的配置实例? Top

为了方便大家迁移,Druid的配置和DBCP是基本一致的,如果你原来是使用DBCP,迁移是十分方便的,只需要把corg.apache.commons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。

以下是一个参考配置:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${jdbc_user}" />
    <property name="password" value="${jdbc_password}" />
     
    <property name="filters" value="stat" />
 
    <property name="maxActive" value="20" />
    <property name="initialSize" value="1" />
    <property name="maxWait" value="60000" />
    <property name="minIdle" value="1" />
 
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <property name="minEvictableIdleTimeMillis" value="300000" />
 
    <property name="validationQuery" value="SELECT 'x'" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
     
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
</bean>

在上面的配置中,通常你需要配置url、username、password、maxActive这几项。

在DruidDataSource中,你可以不配置DriverClass,它根据url自动识别。Druid能够自动识别20多中url,常见的JDBC Driver都包括了。

我目前使用其他连接池(DBCP/C3P0/Proxool等),如何迁移到Druid? Top

从DBCP迁移最方便,把org.apache.commons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。

Druid网站上提供了Druid/DBCP/C3P0/JBoss/WebLogic的参数对照表,通过这个对照表来迁移你目前的配置。

其他开发者如何反馈问题、提交bug? Top

Druid源码托管在github.com上,项目地址是https://github.com/AlibabaTech/druid

你可以在github上提交patch和issue(包括bug和新特性)。你也可以加入我们的QQ群92748305,和开发者以及其他用户一起交流。
  • 大小: 81.4 KB
  • 大小: 79.4 KB


评论 共 97 条
97 楼 zxgwxit 2017-12-02 16:05
连接池中的connection 是否机制是什么?我使用Oracle 数据库,发现一个connection 几乎不会物理关闭,时间一久,Oracle就包 ora-01000,超出游标限制。
96 楼 zxgwxit 2017-12-02 15:57
连接池中的connection 是否机制是什么?我使用Oracle 数据库,发现一个connection 几乎不会物理关闭,时间一久,Oracle就包 ora-01000,超出游标限制。
95 楼 zhangwusheng 2015-09-16 16:04
zhangwusheng 写道
Lexer.java:688

688: public void scanVariable() {


            for (;;) {
                ch = charAt(++pos);

                if (ch == '}') {
                    break;
                }

                bufPos++;
                continue;
            }

这里的for如果我sql语句里面 select ${fffffffff 就死循环了吧?



说错了,最终也会异常
94 楼 zhangwusheng 2015-09-16 16:02
Lexer.java:688

688: public void scanVariable() {


            for (;;) {
                ch = charAt(++pos);

                if (ch == '}') {
                    break;
                }

                bufPos++;
                continue;
            }

这里的for如果我sql语句里面 select ${fffffffff 就死循环了吧?
93 楼 lyh2011 2015-06-04 16:31
92 楼 windshome 2015-05-28 09:18
我的系统启动程序中初始化了数据库连接池,但是配置中db的url写的是“1”,按道理说初始化池应该出错(初始连接数是1),但是奇怪的是,系统启动毫无问题,启动后各种与数据库无关的功能也运行完全正常。

那么,初始连接数是没有用的?druid开始根本不检查数据源配置是否正确?这个误打误撞还正好满足了我这个特殊需求,想来也怪怪的。
91 楼 jikemike 2014-09-04 18:13
druid sql注入问题: 使用druid版本为1.08.
查询字段包含tq.point报错,修改为 2 as point,则可以。
错误提示Caused by: java.sql.SQLException: sql injection violation, limit row 0 :
90 楼 tanwan 2014-08-11 11:30
您好..我使用了您的sql parser...当我解析insert into test.rss_server values ('\'1', 2, '3')这类sql就会失败..有没有什么办法?
89 楼 kanghui520520 2014-07-02 15:13
你好,请教个问题,我在使用druid1.0.3时候,会偶尔报这样一个错:
java.lang.ArrayIndexOutOfBoundsException:3
at java.util.concurrent.CopyOnWriteArrayList.get(CopyOnWriteArrayList.java:368)
at java.util.concurrent.CopyOnWriteArrayList.get(CopyOnWriteArrayList.java:377)
at com.alibaba.druid.filterChainImpl.nextFilter(FilterChainImpl.java:405)
at com.alibaba.druid.filterChainImpl.Connection_isClosed(FilterChainImpl.java:371)
at com.alibaba.druid.FilterAdapter.Connection_isClosed(FilterAdapter.java:888)
at com.alibaba.druid.filterChainImpl.Connection_isClosed(FilterChainImpl.java:371)
at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.isClosed(ConnectionProxyImpl.java:284)
at com.alibaba.druid.pool.DruidPooledConnection.isClosed(DruidPooledConnection.java:816)
at com.alibaba.druid.pool.DruidPooledPreparedStatment.close(DruidPooledPreparedStatment.java:172)
我用的是derby数据库,配置了Filter为:stat,log,wall
因为要支持wall功能,强制将DbType设置为oracle,这是什么原因造成的呢,能帮分析下吗
88 楼 kanghui520520 2014-06-30 10:26
请问,项目使用druid后,第一次登录很慢约500毫秒,第二次登录就很快,30到60毫秒,在高并发测试下,更慢,这是为什么呢?怎么才能让第一次登录变得快呢?
87 楼 kanghui520520 2014-06-23 16:12
yunnysunny 写道
kanghui520520 写道
请问,我要在人大金仓数据库(国产数据库)下使用druid,我该怎么操作,如果不能实现,我该怎么修改druid代码呢

没听说过这个数据库,这个数据库提供jdbc驱动吗

该数据库提供了jdbc驱动,我在fillter里面不加wall的配置是支持的,但我需要wall的功能,
加了后,报
dbType not support:null,url jdbc:kingbase:192.168.8.45:54321/SAN
at com.alibaba.druid.wall.WallFilter.init(WallFilter.java:150)

能配置吗?
不能配置,我该怎么改呢,这个数据库的结构和功能和oracle类似
86 楼 yunnysunny 2014-06-23 12:53
kanghui520520 写道
请问,我要在人大金仓数据库(国产数据库)下使用druid,我该怎么操作,如果不能实现,我该怎么修改druid代码呢

没听说过这个数据库,这个数据库提供jdbc驱动吗
85 楼 kanghui520520 2014-06-23 11:47
请问,我要在人大金仓数据库(国产数据库)下使用druid,我该怎么操作,如果不能实现,我该怎么修改druid代码呢
84 楼 yunnysunny 2014-06-05 11:03
FireZHFox 写道
92748305这个群已经没法加入了

群已经满了,如果有问题,可以在github上提交
83 楼 FireZHFox 2014-05-21 09:21
92748305这个群已经没法加入了
82 楼 sunshine_bean 2014-04-15 10:38
好东西
81 楼 abc382410124 2013-11-14 18:05
小白学习了
80 楼 yunnysunny 2013-06-14 10:46
hamber 写道
引用

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。


我对druid如何实现分库、分表功能很感兴趣。求指教,求demo

druid中没有涉及到分库分表操作
79 楼 hamber 2013-06-13 15:30
引用

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。


我对druid如何实现分库、分表功能很感兴趣。求指教,求demo
78 楼 xusheng87 2013-06-13 15:13
77 楼 woaini245693140 2013-05-26 11:06
76 楼 windshome 2013-05-09 16:22
数据库连接池是一个牵涉面非常广的话题,我看到druid在效率方面的优化,的确是同类开源组件中最好的,关于password的处理以及监控的设计,都体现出设计者的经验:)。

我是做商业软件的,的确都遇到过这类需求,真实客户提出的种种需求。但是做开源连接池的,基本不会考虑这些,呵呵。

希望druid能够越做越好,如果文档和测试能跟上就非常棒了。顺便提一句的是,系统在PK时,所需体现的特性和在实际生产环境中使用的时候,需要的特性、侧重点是完全不一样的,在设计连接池这种核心组件尤其要考虑。

我关于连接池的文章:http://windshome.iteye.com/admin/blogs/1837903
75 楼 fjiis 2012-11-21 16:59
统计出错了,数据是sql server 2008,什么解决?

14:09:25,256 ERROR StatFilter:147 - merge sql error, dbType jtds, sql :
   SELECT * FROM (     SELECT ROW_NUMBER() OVER (ORDER BY FAlertDate Desc, FAlertLevel, FAlertType)  AS RowNumber, *        from monitor_business   where                                                             FRemoveAlert = ?                            ) AS temp_table   WHERE RowNumber BETWEEN ? AND ? 
com.alibaba.druid.sql.parser.SQLParseException: syntax error, expect RPAREN, actual LPAREN OVER
at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:121)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSource(SQLSelectParser.java:226)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:217)
at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:153)
at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:52)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseSelect(SQLStatementParser.java:534)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:84)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:68)
at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:40)
at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:145)
at com.alibaba.druid.filter.stat.StatFilter.createSqlStat(StatFilter.java:647)
at com.alibaba.druid.filter.stat.StatFilter.statementPrepareAfter(StatFilter.java:305)
at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:124)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:442)
at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:242)
at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:305)


74 楼 wenshao 2012-09-03 21:16
阿里巴巴开源数据库连接池Druid发布0.2.6版本。这个版本最大的增强是内置监控界面,支持web-spring-sql关联监控,引入bootstrap重写了内置监控界面。内置监控功能演示:
1) springside4 mini-web [url]hhttp://110.76.43.235:8080/mini-web/ [/url]
2) sonar http://110.76.43.235:9000/ 监控页面 http://110.76.43.235:9000/druid/index.html

文档
https://github.com/AlibabaTech/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
73 楼 picksun 2012-08-09 09:11
wenshao 写道
picksun 写道
我的意思是:
1 连接数上涨很快,而且用show full processlist(数据库是mysql)
查知状态大都是sleep,time多为个位数,
这种状况让连接池负责回收有困难
2 刚启动就再死的情况很多见。
目前解决办法:
通过禁止外网用户访问,
等启动完一会再放行,
就不会死


通过连接池回收可能有困难,但是用Druid有办法能够知道那些代码申请了连接而没有及时释放。加入Druid用户的扣扣群吧,我们为你出谋划策。 



谢谢~
72 楼 wenshao 2012-08-08 19:58
picksun 写道
我的意思是:
1 连接数上涨很快,而且用show full processlist(数据库是mysql)
查知状态大都是sleep,time多为个位数,
这种状况让连接池负责回收有困难
2 刚启动就再死的情况很多见。
目前解决办法:
通过禁止外网用户访问,
等启动完一会再放行,
就不会死


通过连接池回收可能有困难,但是用Druid有办法能够知道那些代码申请了连接而没有及时释放。加入Druid用户的扣扣群吧,我们为你出谋划策。 
71 楼 picksun 2012-08-08 14:04
我的意思是:
1 连接数上涨很快,而且用show full processlist(数据库是mysql)
查知状态大都是sleep,time多为个位数,
这种状况让连接池负责回收有困难
2 刚启动就再死的情况很多见。
目前解决办法:
通过禁止外网用户访问,
等启动完一会再放行,
就不会死
70 楼 picksun 2012-08-08 12:16
wenshao 写道
这应该是你的应用存在连接泄漏。你参考这个做配置,然后看错误日志,查找连接泄漏的来源吧:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7673683

picksun 写道
接手一个WEB项目,出现死锁:CPU为0,数据库连接为800多,线程涨到1000,凡是用到数据库的线程都locked同一个对象,DBCP死在getConnection(使用代理prepareStatement)的时候
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:748)
- locked <0x00002aaad8bdecd0> (a org.apache.commons.pool.impl.GenericObjectPool)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)

用了温少的druid-0.2.4.jar包,则死在getConnection(使用代理prepareStatement)或者close的时候


不知道什么原因,请赐教~谢谢~!



我回来晚了,温兄回复很及时,非常感谢!
服务器死掉前连接数是直线上涨很快的。
而且是启动完不久,很快就再死的可能性很高
反复n次,反复重启都是如此,
除非当时访问量很低如凌晨
(凌晨也有可能因为蜘蛛抓取过多死机的)。
我担心设置30分钟很快就死了,甚至1分钟都不够。

我目前是:先把80封了不让外网访问,
然后监测到系统启动彻底完成,再开80端口,
这样就能够启动完成。

我会尽快测试,谢谢。
69 楼 wenshao 2012-08-07 11:05
这应该是你的应用存在连接泄漏。你参考这个做配置,然后看错误日志,查找连接泄漏的来源吧:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7673683

picksun 写道
接手一个WEB项目,出现死锁:CPU为0,数据库连接为800多,线程涨到1000,凡是用到数据库的线程都locked同一个对象,DBCP死在getConnection(使用代理prepareStatement)的时候
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:748)
- locked <0x00002aaad8bdecd0> (a org.apache.commons.pool.impl.GenericObjectPool)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)

用了温少的druid-0.2.4.jar包,则死在getConnection(使用代理prepareStatement)或者close的时候


不知道什么原因,请赐教~谢谢~!
68 楼 picksun 2012-08-07 09:49
接手一个WEB项目,出现死锁:CPU为0,数据库连接为800多,线程涨到1000,凡是用到数据库的线程都locked同一个对象,DBCP死在getConnection(使用代理prepareStatement)的时候
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:748)
- locked <0x00002aaad8bdecd0> (a org.apache.commons.pool.impl.GenericObjectPool)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)

用了温少的druid-0.2.4.jar包,则死在getConnection(使用代理prepareStatement)或者close的时候


不知道什么原因,请赐教~谢谢~!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • (转载)阿里巴巴开源项目 Druid 负责人温少访谈

    http://www.iteye.com/magazines/90?page=2#111

  • 2025职业教育知识竞赛题库(含答案).pptx

    2025职业教育知识竞赛题库(含答案).pptx

  • 基于.NET Core MVC与SQL Server的在线考试管理系统:多角色操作、国际化支持、全套源码与文档附赠,.net core mvc在线考试系统 asp.net在线考试管理系统 主要技术:

    基于.NET Core MVC与SQL Server的在线考试管理系统:多角色操作、国际化支持、全套源码与文档附赠,.net core mvc在线考试系统 asp.net在线考试管理系统 主要技术: 基于.net core mvc架构和sql server数据库,数据库访问采用EF core code first,前端采用vue.js和bootstrap。 功能模块: 系统包括前台和后台两个部分,分三种角色登录。 管理员登录后台,拥有科目管理,题库管理,考试管理,成绩管理,用户管理等功能。 教师登录后台,可进行题库管理,考试管理和成绩管理。 用户登录前台,可查看考试列表,参加考试,查看已考试的结果,修改密码等。 系统实现了国际化,支持中英两种语言。 源码打包: 包含全套源码,数据库文件,需求分析和代码说明文档。 运行环境: 运行需vs2019或者以上版本,sql server2012或者以上版本。 ,核心关键词: .net core mvc; asp.net在线考试管理系统; SQL Server数据库; EF core code first; vue.js; boot

  • C++编写的资产管理系统(带SQLServer数据库文件 )

    C++编写的资产管理系统(带SQLServer数据库文件。)。

  • 递归最小二乘法在线识别轮胎前后侧偏刚度:应用sin工况效果显著,适用多种场景,附simulink模型及代码,1、基于递归最小二乘法在线识别轮胎前后侧偏刚度,图为在正弦曲线工况,估计侧偏刚度的大小,效果

    递归最小二乘法在线识别轮胎前后侧偏刚度:应用sin工况效果显著,适用多种场景,附simulink模型及代码,1、基于递归最小二乘法在线识别轮胎前后侧偏刚度,图为在正弦曲线工况,估计侧偏刚度的大小,效果较好 2、此模型也可用于其他工况下的刚度估计,有需要的朋友可以自行去尝试 3、包含simulink模型和递归最小二乘侧偏刚度估计代码 ,基于递归最小二乘法; 轮胎侧偏刚度在线识别; 正弦曲线工况估计; Simulink模型; 递归最小二乘侧偏刚度估计代码。,递归最小二乘法在正弦曲线工况下的轮胎刚度在线识别模型

  • PLL锁相环技术实现:SMIC55工艺下20MHz参考频率三阶二型CPPLL,快速锁定至1GMHz并带环形振荡器与DIV模块功能,pll锁相环 cppll cadence 三阶二型锁相环 工艺smi

    PLL锁相环技术实现:SMIC55工艺下20MHz参考频率三阶二型CPPLL,快速锁定至1GMHz并带环形振荡器与DIV模块功能,pll锁相环 cppll cadence 三阶二型锁相环 工艺smic55 参考频率20MHz 分频比50 锁定频率1GMHz 锁定时间2us 环形振荡器 ring vco PFD模块 DIV模块 45分频,ps counter CP模块 工艺smic55 ,核心关键词:PLL锁相环; CPPLL; 工艺SMIC55; 参考频率20MHz; 分频比50; 锁定频率1GHz; 锁定时间2us; 环形振荡器(Ring VCO); PFD模块; DIV模块(45分频,ps counter); CP模块。,"SMIC55工艺:PLL环及二型锁相环技术解析"

  • EKF SLAM 分析及matlab仿真源码

    EKF SLAM matlab simulation. EKF SLAM 分析及matlab仿真源码。

  • CPRI IP License支持Xilinx Vivado全版本,无MAC绑定,永久有效授权,CPRI ip license xilinx vivado 支持Vivado各版本,不绑定mac,永久有

    CPRI IP License支持Xilinx Vivado全版本,无MAC绑定,永久有效授权,CPRI ip license xilinx vivado 支持Vivado各版本,不绑定mac,永久有效 ,CPRI; IP license; Xilinx; Vivado; 不绑定Mac; 永久有效; 支持各版本。,"Xilinx Vivado支持:永久有效的CPRI IP License,不绑定MAC"

  • 机器学习 KNN算法实现鸢尾花分类 (分类算法)

    1.内容概要 通过KNN实现鸢尾花分类,即将新的数据点分配给已知类别中的某一类。该算法的核心思想是通过比较距离来确定最近邻的数据点,然后利用这些邻居的类别信息来决定待分类数据点的类别。 2.KNN算法的伪代码 对未知类别属性的数据集中的每个点依次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离; (2)按照距离递增次序排序; (3)选取与当前点距离最小的k个点; (4)确定前k个点所在类别的出现频率; (5)返回前k个点出现频率最高的类别作为当前点的预测分类。 3.数据集说明 代码使用`pandas`库加载了一个名为`iris.arff.csv`的数据集 4.学习到的知识 通过鸢尾花分类学习了KNN算法,选择样本数据集中前k个最相似的数据,就是KNN算法中k的出处。k值过大,会出现分类结果模糊的情况;k值较小,那么预测的标签比较容易受到样本的影响。在实验过程中,不同的k值也会导致分类器的错误率不同。KNN算法精度高、无数据输入的假定,可以免去训练过程。但是对于数据量较多的训练样本,KNN必须保存全部数据集,可能会存在计算的时间复杂度、空间复杂度高的情况,存在维数灾难问

  • COMSOL三维采空区通风条件下的氧气与瓦斯浓度分布研究,comsol三维采空区通风条件下,氧气,瓦斯浓度分布 ,核心关键词:comsol; 三维采空区; 通风条件; 氧气浓度分布; 瓦斯浓度分布

    COMSOL三维采空区通风条件下的氧气与瓦斯浓度分布研究,comsol三维采空区通风条件下,氧气,瓦斯浓度分布。 ,核心关键词:comsol; 三维采空区; 通风条件; 氧气浓度分布; 瓦斯浓度分布;,"三维采空区通风模拟:氧气与瓦斯浓度分布研究"

  • 基于java+ssm+mysql的公交车信息管理系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

  • DaisyDisk for Mac v4.31

    DaisyDisk for Mac是一款直观且强大的磁盘清理工具,专为Mac用户设计。它通过交互式图表直观展示磁盘空间使用情况,以彩色区块形式呈现文件和文件夹大小,帮助用户快速定位占用空间的大文件。软件支持快速扫描,可在几秒内完成磁盘分析,并提供文件预览功能,避免误删重要文件。DaisyDisk还支持多磁盘管理、云存储扫描、隐私保护和安全删除功能。其界面简洁易用,适合新手和专业人士,是优化磁盘空间、提升系统性能的必备工具。

  • 三菱FX3U伺服控制框架标准程序详解:定位控制参数设定、回原点操作、JOG手动控制及绝对与相对定位控制,FX3U和三菱伺服控制的框架标准程序,适合新手学习定位用 用 标签分层,说明了定位控制中的公共

    三菱FX3U伺服控制框架标准程序详解:定位控制参数设定、回原点操作、JOG手动控制及绝对与相对定位控制,FX3U和三菱伺服控制的框架标准程序,适合新手学习定位用。 用 标签分层,说明了定位控制中的公共参数设定、回原点、JOG手动、绝对定位、相对定位、控制等部分,有伺服驱动器的针脚接线。 ‘包括有: 1、程序一份 2、说明一份 ,核心关键词:FX3U; 三菱伺服控制; 框架标准程序; 新手学习定位; 标签分层; 公共参数设定; 回原点; JOG手动; 绝对定位; 相对定位; 控制; 伺服驱动器针脚接线。,"三菱FX3U伺服控制框架标准程序:新手定位控制指南"

  • Python自动化办公源码-40 excel处理实例(多工作表合并到单工作表)

    Python自动化办公源码-40 excel处理实例(多工作表合并到单工作表)

  • 2023-04-06-项目笔记 - 第三百八十六阶段 - 4.4.2.384全局变量的作用域-384 -2025.01.22

    2023-04-06-项目笔记-第三百八十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.384局变量的作用域_384- 2025-01-22

  • 基于MATLAB的含风光柴储微网多目标优化调度策略与模型实现,含风光柴储微网多目标优化调度 MATLAB代码 关键词:微网调度 风光柴储 粒子群算法 多目标优化 参考文档:基于多目标粒子群算法的微

    基于MATLAB的含风光柴储微网多目标优化调度策略与模型实现,含风光柴储微网多目标优化调度 MATLAB代码 关键词:微网调度 风光柴储 粒子群算法 多目标优化 参考文档:《基于多目标粒子群算法的微电网优化调度》 仿真平台:MATLAB 平台采用粒子群实现求解 优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:代码构建了含风机、光伏、柴油发电机以及储能电站在内的微网优化运行模型,并且考虑与上级电网的购电交易,综合考虑了多方经济成本以及风光新能源消纳等多方面的因素,从而实现微网系统的经济运行,求解采用的是MOPSO算法(多目标粒子群算法),求解效果极佳,具体可以看图 ,关键词:微网优化调度; 风光柴储; 粒子群算法; 多目标优化; MATLAB代码; MOPSO算法。,基于MATLAB的微网风光柴储多目标优化调度与MOPSO算法的实践研究

  • 基于java+ssm+mysql的高校就业管理系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

  • 基于java+ssm+mysql的基金交易网站 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

  • 西门子SMART 200电机控制子程序V1.6:智能管理多达7个电机,灵活设置运行参数,故障自动切换备用电机,版本升级持续优化 ,西门子SMART 200 电机控制子程序V1.6,可生成库 可控制1

    西门子SMART 200电机控制子程序V1.6:智能管理多达7个电机,灵活设置运行参数,故障自动切换备用电机,版本升级持续优化。,西门子SMART 200 电机控制子程序V1.6,可生成库 可控制1-7个电机 可设置同时运行的最大电机数量 可设置每个电机是否使用 可设置电机轮时间,当系统单次运行时间>轮时间,停止运行时间最长的电机,上累计运行时间最短的电机 可设置电机启动间隔 每次启动累计运行时间最短的电机 当有电机故障时,立即停止该电机,如果有备用电机自动切备用电机 7个电机内,可自由设置备用电机个数,使用的电机总数-最大电机数量=备用电机个数 附版本升级记录: V1.1优化:当使能被关闭后自动关闭对应电机 V1.2优化:运行中改变同时使用电机数量有效 V1.3更改:open信号上升沿直接启动1个电机(跳过启动间隔),第二个电机启动间隔才有效 轮时间改为秒,当系统单次运行时间>轮时间,停止运行时间最长的电机,上累计运行时间最短的电机 V1.4优化 V1.5满足可以运行的电机数量>同时使用电机数量 时 轮才有效,不满足时,轮计时清零 V1.6 优化某些情况下,无法正确延时 ,核心关键词

Global site tag (gtag.js) - Google Analytics