- 浏览: 1589339 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
http://www.ibm.com/developerworks/cn/web/wa-aj-dwr/index.html?ca=j
级别: 中级
Xiaobo Yang (x.yang@dl.ac.uk), 软件开发人员, STFC e-Science Centre, UK
Robert Allan (r.j.allan@dl.ac.uk), 小组负责人, STFC e-Science Centre, UK
2007 年 9 月 04 日
文件上载是当今 Web 门户的一个基本功能。在本篇文章中,作者 Xiaobo Yang 和 Rob Allan 描述了如何利用 DWR(Direct Web Remoting)开发基于 Ajax 的文件上载 portlet(遵从 JSR 168 规范)。DWR 是 Java™ 开发人员理想的 Ajax 框架,可基于服务器端已部署的 Java 类动态生成 JavaScript。您还将了解如何使用 DWR 从门户服务器检索文件上载过程。
Web 门户为用户提供了访问各种资源和服务的中心网关。与此同时,它们还为用户提供了与其他用户进行资源共享的平台。从照片到音频、视频文件再到研究用的科学数据集,用户可以共享任何内容。因此,文件上载是 Web 门户的一种基本的必备功能。
当今的 Web 门户在很大程度上依赖于 Java portlet 技术。虽然很多使用 Ajax 的开发人员都给出了各种各样的文件上载进度条解决方案,但我们还没有听说过哪个是基于 portlet 的。本文展示了如何开发基于 Ajax 的文件上载 portlet,此 portlet 能显示文件上载过程的进度条。此 portlet 对于那些想要共享大型音频、视频和科学文件的人士尤其有用。
要跟上本文的进度,您应该对使用 Java Servlets 和 JavaServer Pages (JSPs) 进行 Web 开发十分熟悉。而且,还必须了解门户和 portlet 技术的开发。当然,如果您对 portlet 技术还不怎么精通,也不要现在就放弃本文,因为您会在本文中看到对 portlet 技术的简单介绍,以及一些有用的资源可用来帮助您加快学习的进程。
![]() |
|
在测试本文给出的这个文件上载 portlet 前,可以考虑尝试使用一种遵从 JSR 168 规范的门户框架,比如 IBM® WebSphere® Portal Server、Apache Pluto、eXo 平台或 Liferay Portal。我们在本文中使用的是 Apache Pluto 1.0.1、JDK 5.0 Update 10 和 Apache Ant Version 1.6.5。
一般地,可以将 portlet 视为一种 Web 组件。Portlet 与 servlet 类似,但前者更关注于应用程序的表示层。portlet 的典型输出是 HTML 片断,这些片断可由 Web 门户随后再组装起来。Portlet 本身由 portlet 容器管理。portlet 的主要特性包括:
- 多模式:portlet 可以在不同的模式下有不同的视图。例如,除了查看 模式,portlet 还支持编辑 模式以便用户可以设置其自身的首选项。
- 多个窗口状态:portlet 可以最小化、最大化等。
- 可定制参数:portlet 可以定义参数,而这些参数可以由用户定制。
要获得有关 portlet 的更多详细信息,可以参考 Java Portlet Specification 1.0,JSR 168(JSR 168 的后续版本 JSR 286 预计会于 2007 年后半年发布,其中包含了一些改进,比如 portlet 间通信和 portlet 过滤器)。相关链接,请参看 参考资料。
文件上载 portlet 的基石是 Apache Commons FileUpload 包(本文也称之为 FileUpload)。除了支持 servlet 内的文件上载外,Apache Commons FileUpload Version 1.1 包还支持 portlet 中的文件上载。本文使用的是 Apache Commons FileUpload 版本 1.2。
基本上,开发文件上载进度条需要两步:
- 在服务器端检索文件上载过程
- 从门户服务器进行客户端的文件上载检索和显示
FileUpload 包支持使用侦听器检索文件上载过程。在文件上载 portlet 的 doUpload()
方法(称为 uk.ac.dl.esc.gtg.myportlets.fileupload.FileUploadPortlet
,包括在本文 下载 部分所提供的源文件中),通过调用 setProgressListener()
方法为 PortletFileUpload
设置过程侦听器,如 清单 1 所示:
清单 1. 为文件上载包设置过程侦听器
DiskFileItemFactory factory = new DiskFileItemFactory();
PortletFileUpload pfu = new PortletFileUpload(factory);
pfu.setSizeMax(uploadMaxSize); // Maximum upload size
pfu.setProgressListener(new FileUploadProgressListener());
|
侦听器 FileUploadProgressListener
(参见 清单 2)可实现 org.apache.commons.fileupload.ProgressListener
接口。update()
方法自动由 FileUpload 包调用以刷新有关所传输字节数的最新信息。在本文的实现中,每传输 10KB 数据则更新一次进度。这有助于防止更新进行得太频繁。 getFileUploadStatus()
方法用来计算当前文件上载进度,可由客户机通过 DWR 调用(在下一节讨论)。
清单 2. 检索文件上载过程的文件上载侦听器
package uk.ac.dl.esc.gtg.myportlets.fileupload; import java.text.NumberFormat; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class FileUploadProgressListener implements ProgressListener { private static Log log = LogFactory.getLog(FileUploadProgressListener.class); private static long bytesTransferred = 0; private static long fileSize = -100; private long tenKBRead = -1; public FileUploadProgressListener() { } public String getFileUploadStatus() { // per looks like 0% - 100%, remove % before submission String per = NumberFormat.getPercentInstance().format( (double) bytesTransferred / (double) fileSize); return per.substring(0, per.length() - 1); } public void update(long bytesRead, long contentLength, int items) { // update bytesTransferred and fileSize (if required) every 10 KB is // read long tenKB = bytesRead / 10240; if (tenKBRead == tenKB) return; tenKBRead = tenKB; bytesTransferred = bytesRead; if (fileSize != contentLength) fileSize = contentLength; } } |
服务器和客户间就文件上载过程的通信是通过使用 Ajax 实现的。我们选用 Direct Web Remoting (DWR) 来提供 portlet 中的 Ajax 支持。DWR 是一种面向 Java 开发人员的理想框架,可用来将 Ajax 引入 Web 开发过程中,原因是它可以让浏览器中的 JavaScript 与服务器端的 Java 对象互动。要在 portlet 中使用 DWR,必须执行以下步骤 (更多有关如何配置 DWR 的信息,请参看 参考资料):
![]() |
|
- 通过 WEB-INF/web.xml 配置
DwrServlet
(参见 清单 3)。 - 在 WEB-INF/dwr.xml 内定义一个或更多的客户机可与之通信的服务器端对象。在 清单 4 中,
FileUploadProgressListener
针对 DWR 定义以便客户机可以调用这个自动生成的 JavaScript。此外,只有getFileUploadStatus
方法可以被客户机调用,另一个公共方法update
则不允许被访问(请参看 清单 2)。 - 将与 DWR 有关的 JavaScript 代码包括在 fileupload-view.jsp(参看 清单 5)。
- 将 DWR 库包括在 portlet 应用程序。
清单 3. 在 WEB-INF/web.xml 中配置 DwrServlet
<!----> <servlet></servlet> <servlet-name></servlet-name>dwr-invoker <display-name></display-name>DWR Servlet <servlet-class></servlet-class>org.directwebremoting.servlet.DwrServlet <init-param></init-param> <param-name></param-name>debug <param-value></param-value>false <!----> <servlet-mapping></servlet-mapping> <servlet-name></servlet-name>dwr-invoker <url-pattern></url-pattern>/dwr/* |
清单 4. WEB-INF/dwr.xml
<!----> <dwr></dwr> <allow></allow> <create javascript="FileUploadProgressListener" creator="new"></create> <include method="getFileUploadStatus"></include> |
清单 5 所示的 JSP 文件 fileupload-view.jsp 展示了 DWR 如何有助于从服务器端检索文件上载过程。一旦选中了文件并单击了 Upload 按钮(参看 图 1),fileupload_ajax_query_upload_status()
方法会被即刻调用。此方法之后会以异步模式调用 FileUploadProgressListener
的 getFileUploadStatus()
方法(参见 清单 2)。DWR 的妙处就在于此:客户机可以和服务器端的 Java 对象交互。一旦收到响应,fileupload_ajax_show_upload_status()
方法会被调用以刷新此过程。如果文件上载没有完成,更新后的过程就会在两秒种之后检索。
清单 5. 文件上载 portlet JSP 文件 —— fileupload-view.jsp
<!----> <!----> <!----> <!----> <portlet:defineobjects></portlet:defineobjects> <script type="text/javascript" src="<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/dwr/interface/FileUploadProgressListener.js") %>"> </script> <script type="text/javascript" src="<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/dwr/engine.js") %>"> </script> <script type="text/javascript" src="<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/dwr/util.js") %>"> </script> <script type="text/javascript"> function fileupload_ajax_query_upload_status() { FileUploadProgressListener.getFileUploadStatus (fileupload_ajax_show_upload_status); return true; } function fileupload_ajax_show_upload_status(status) { if (status == "100") document.getElementById("fileupload_progress").innerHTML ="File successfully uploaded"; else { document.getElementById("progressBar").style.display = "block"; document.getElementById("fileupload_progress").innerHTML= "Uploading file: " + status + "% completed, please wait..."; document.getElementById("progressBarBoxContent").style.width = parseInt(status * 3.5) + "px"; setTimeout(fileupload_ajax_query_upload_status, 2000); } return true; } </script> <style type="text/css"> #progressBar { PADDING-TOP: 5px } #progressBarBox { BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BACKGROUND: #eee; BORDER-BOTTOM-WIDTH: 1px; WIDTH: 350px; HEIGHT: 20px; BORDER-RIGHT-WIDTH: 1px } #progressBarBoxContent { BORDER-RIGHT: #444 1px solid; BACKGROUND: #9acb34; WIDTH: 0px; HEIGHT: 20px }</style> |
用 Apache Pluto 部署和测试文件上载 portlet
此过程的下一步是用 Apache Pluto 1.0.1. 部署和测试文件上载 portlet(注意:本文使用的是二进制版本)。
本文附带的可下载的 portlet 源代码同时还提供有 Ant 脚本,以便能够编译 portlet 和构建部署所需要的 .war 文件。首先,必须将如下的二进制文件复制到源代码根目录下的 lib
目录:
- commons-fileupload-1.2/commons-fileupload-1.2.jar
- commons-io-1.3/commons-io-1.3.jar
- commons-logging-1.0.4/commons-logging-1.0.4.jar
- dwr-2.0.1/dwr.jar
- portletapi-1.0/portlet.jar
- servletapi-2.4/servletapi-2.4.jar
之后,就可以运行 ant build
和 ant war
以编译代码和相应构建部署所需的 .war 文件。如果一切顺利,myportlets-fileupload.war 就会出现在 dist
目录下。执行如下步骤以利用 Apache Pluto 1.0.1 部署 portlet:
- 启动 Apache Tomcat 并访问
http://localhost:8080/pluto/portal
。 - 单击 Pluto 屏幕左侧的 Admin 链接来部署此 portlet。
- 找到 myportlets-fileupload.war,然后单击 Submit。
- 定义 portlet 标题、描述和布局,然后单击 Submit。
- 再次单击所显示页面上的 Submit。
现在,系统会提示您或者重启 Tomcat,或者单击链接 Hot deploy myportlets-fileupload
portlet application。我们建议您单击链接 Hot deploy myportlets-fileupload
portlet application。之后,此 portlet 会被加载,如 图 1 所示:
图 1. 运行于 Apache Pluto 中的文件上载 portlet

一旦部署完此 portlet 之后,就可以上载文件了。要显示出此进度条,应该从计算机而不是从门户服务器访问此 portlet。执行如下步骤上载文件:
- 单击 Browse... 按钮选择要上载的文件。
- 单击 Upload 按钮上载选中的文件。在文件上载期间,会显示并更新进度条(参见 图 2)。
如果从安装了 Pluto 的计算机测试此 portlet,就不会看到进度条,原因是所设置的上载大小最大为 20MB。通过在 WEB-INF/portlet.xml 文件内更改 fileupload_upload_maxsize
可以改变此上载大小。
图 2. 文件上载 portlet 正在上载文件

在我们的 portlet 中,所上载的文件作为磁盘文件保存在 java.io.tmpdir 下 —— 比如,位于 $PLUTO_HOME 或 $CATALINA_HOME 下的 temp。请注意在实际的 Web 应用程序中,可能还会需要进一步的处理。比如,所上载的文件可能需要存储在数据库中以备后用;如果是图像文件,它就有可能显示在 Web 浏览器内。
![]() |
|
本文所探讨的技术已经被成功应用到文件传输 portlet,该 protlet 采用 GridFTP 协议管理两个第三方数据网格节点之间的大型数据集。
本文讨论了如何使用 Ajax 部署文件上载 portlet 以显示进度条。介绍了如何利用过程侦听器进行服务器端的文件上载过程检索,如何使用 DWR 从门户服务器进行客户端的文件上载检索,以及如何将进度条呈现给终端用户。此 portlet 对于共享诸如音频、视频文件和科学数据这类大型数据集尤其有用。本文也展示了使用 DWR 为 JSR 168 portlet 提供 Ajax 支持是多么地容易。
发表评论
-
JVM问题追查与调优
2012-03-27 14:44 1169JDK的几种分析工具 http://liudaoru ... -
NodeJs相关资料
2011-08-18 14:55 3068NodeJs获取参数: proces ... -
jprofiler追踪问题
2011-08-12 18:20 1082Jprofiler下载页: http://www.ej ... -
Linux服务器性能评估与优化【z】
2011-07-01 10:05 1587来自:http://www.itlearner.com/ ... -
Java 理论与实践: 非阻塞算法简介【z】
2011-03-26 20:39 1323From: http://www.ibm.com/develo ... -
Java Crash问题分析[z]
2011-03-23 14:41 6007参考: http://www.ibm.com/develop ... -
Berkeley DB相关
2010-09-25 22:17 1079为什么要使用Berkeley DB,它适合什么场合应用?Ber ... -
熟悉系统方法总结
2010-07-06 14:26 855了解一个陌生的系统是我们经常碰到的事情,下面总结一下自己的一些 ... -
Java缓存框架 EhCache
2010-07-06 14:09 4756From: http://www.oschina.net/p/ ... -
【nio】使用 ServerSocketChannel 实现的 File 服务器[z]
2010-05-21 17:31 4013From: http://www.java2000.net/p ... -
Memcached命令行管理
2010-03-15 11:18 4527From: http://www.exp2up.com/2 ... -
(转)Resin服务器配置指南
2010-01-21 15:35 3534From:http://blog.21cn.com/super ... -
Flickr架构
2010-01-11 09:52 1287From: http://www.cyask.com/ques ... -
JDK的几种分析工具
2009-12-04 12:13 10929From: http://blog.csdn.net/hant ... -
XMemcached——一个新的开源Java memcached客户端
2009-10-23 09:27 1913From: http://www.infoq.com/cn/ ... -
多线程任务调度学习
2009-10-16 13:58 2327昨天找到一套多线程任务调度的代码,相当的不错,先把思路总结一下 ... -
用HSCALE实现MySQL的数据分布式存储
2009-10-15 12:47 3041From:http://www.ningoo.net/ht ... -
马化腾:搜索、电子商务硬仗一定要坚持打
2009-10-15 12:09 1752From:http://www.techweb.com.c ... -
MySQL分表实现上百万上千万记录分布存储的批量查询设计模式【z】
2009-10-15 09:56 3204From:http://hi.baidu.com/jabber ... -
nginx负载均衡和lvs负载均衡的比较分析【z】
2009-10-13 20:02 1509From:http://www.shouker.com/u ...
相关推荐
内容概要:本文详细介绍了利用粒子群优化(PSO)改进BP神经网络进行多特征分类预测的方法。主要内容涵盖PSO与BP神经网络结合的技术背景、具体实现步骤以及优化效果。文中首先解释了BP神经网络初始权值和阈值选择的重要性及其随机性带来的挑战,接着引入PSO作为解决方案。随后展示了完整的代码实现流程,包括数据加载、预处理、模型构建、PSO参数设定、适应度函数定义、训练过程及最终结果可视化。实验结果显示,在特定数据集上,经过PSO优化后的BP神经网络分类准确率显著提升,从82%提高到了91%。 适合人群:对机器学习尤其是神经网络优化感兴趣的科研工作者和技术开发者。 使用场景及目标:适用于需要解决复杂分类问题的研究项目或实际应用中,旨在提高分类准确性,特别是在处理高维度特征数据时。通过本系统的应用,可以有效改善传统BP神经网络因初始参数选择不当而导致性能不佳的问题。 其他说明:文中还提供了若干实用技巧,如参数范围约束、并行计算加速、保存历代最优粒子等,帮助使用者更好地理解和运用这一方法。同时强调了数据归一化的必要性和重要性,提醒读者注意潜在陷阱。
python实现基于文本和多模态数据的风险识别项目源码.zip 字节跳动安全AI挑战赛——色情导流用户识别项目源码。内容来源于网络分享,如有侵权请联系我删除。
3000软件30000
众星捧月选股器.tni
内容概要:本文详细介绍了信捷PLC六轴标准程序在双头旋铆机上的应用。该程序采用模块化编程思想,将整个程序分为多个工位编辑,每个工位负责特定功能,确保程序结构清晰明了。程序分层合理,涵盖系统层、功能层、逻辑层和代码层,确保了设备的稳定性和效率。所有模块均配有详细注释,便于理解和维护。此外,程序已在实际设备上批量应用,证明其成熟可靠,为信捷PLC编程提供宝贵的借鉴经验。 适合人群:从事信捷PLC编程的技术人员,尤其是希望提升编程技能和了解模块化编程思想的工程师。 使用场景及目标:适用于需要对多轴控制系统进行编程的工业自动化项目。通过学习本文,可以掌握信捷PLC的编程技巧,提高编程水平,优化程序结构,增强设备性能。 其他说明:本文不仅关注具体代码实现,还强调了程序设计思路和模块化编程的优势,有助于读者全面理解信捷PLC编程的核心理念和技术细节。
内容概要:本文详细介绍了一种基于霍尔自学习与超前换相策略的电机控制解决方案。该方案利用上位机控制电机的启停、调速等操作,支持开环和闭环运行模式。系统具备实时动态绘图功能,用于分析电机启动特性、转速波动、指令响应速度等关键参数。此外,系统实现了霍尔相序的自学习和校验,支持PI参数调节并能对比不同参数的波形图,优化算法。超前换相策略通过预测电流和电压变化,提前进行换相操作,减少转矩波动和能量损失。硬件方面采用野火全套设备,确保高性能和高可靠性。文中还附有上位机使用指南和通信协议解析,帮助用户更好地开发和调试。 适合人群:从事电机控制研究和技术开发的专业人士,尤其是希望深入了解霍尔自学习和超前换相策略的应用工程师。 使用场景及目标:适用于需要精确控制电机性能和提高运行效率的工业应用场景。目标是通过先进的控制策略和技术手段,优化电机的启动特性、转速稳定性、指令响应速度等性能指标。 其他说明:本文不仅提供了详细的理论和技术背景,还给出了实际的操作指导和工具,便于用户快速上手并应用于实际项目中。
电子设计竞赛相关资源
内容概要:本文档《Swift入门实例教程.pdf》详细介绍了Swift编程语言的基础知识及其在iOS和macOS开发中的应用。首先概述了Swift的背景、特点和优势,强调其高效性、安全性、跨平台兼容性等特性。接着深入讲解了Swift的基本语法,包括变量与常量、数据类型、运算符和流程控制语句等内容。随后探讨了Swift的高级特性,如枚举、结构体、泛型、闭包和装饰器模式等。文档还结合iOS开发实例,介绍了如何使用UIKit框架、Swift与Objective-C的互操作性以及MVC模式的实现。此外,文档涵盖了Swift的性能优化技巧,如内存管理、代码优化和编译器优化指令。最后,展望了Swift语言的未来发展,指出其在跨平台、云端开发、后端服务、物联网等方面的应用前景。 适合人群:具备一定编程基础,特别是对iOS和macOS开发感兴趣的初学者和中级开发人员。 使用场景及目标:①掌握Swift语言的基本语法和高级特性;②学习如何使用Swift进行iOS和macOS应用开发;③了解Swift的性能优化方法,提高代码质量和运行效率;④探索Swift在跨平台、云端开发、后端服务和物联网等领域的应用前景。 阅读建议:建议读者从基础语法开始学习,逐步深入到高级特性和实际项目开发,同时结合性能优化技巧,实践并调试代码,以加深理解和掌握Swift编程语言。
tutorial-32-to-56-gbps-serial-link-analysis-optimization-methods-pathological-channels.pdf
内容概要:本文详细介绍了单相交交变频电路的仿真分析,特别是针对阻感负载的情况。文中首先介绍了交交变频电路的重要性和应用场景,随后详细描述了如何利用MATLAB搭建仿真环境并进行电路建模。重点讨论了负载阻感特性对电路性能的影响,并通过傅立叶分析展示了输出电压的频谱特性。此外,文章还提供了仿真过程中的一些注意事项和技术要点,帮助读者更好地理解和应用这一技术。 适合人群:电气工程及相关领域的学生、研究人员和工程师,尤其是那些对电力电子技术和电路仿真感兴趣的人群。 使用场景及目标:适用于希望通过MATLAB进行单相交交变频电路仿真的技术人员,旨在帮助他们深入理解电路原理,掌握仿真技巧,并能通过调整负载来优化电路性能。 其他说明:本文提供的仿真案例基于MATLAB 2017a版本,默认提供完整的理论说明和操作指南,方便读者自学和实践。
内容概要:本文深入浅出地介绍了用例图的概念、构成元素及其在软件开发中的重要作用。用例图作为一种描述系统功能的视图,是UML的重要组成部分,它通过参与者、用例、边界及关系清晰展示了系统的功能需求。文章详细解释了参与者(外部实体)、用例(功能需求或用户场景)、系统边界和关系(关联、包含、扩展、泛化)的定义和作用。用例图不仅有助于获取精准需求,还能指导测试和系统设计,确保开发过程有序高效。通过实际案例,如电商系统、打车软件等,文章生动地展示了用例图的应用场景,帮助读者更好地理解其在软件开发各阶段的作用。 适合人群:适合软件开发人员、项目经理、需求分析师以及所有参与软件开发流程的相关人员,尤其是初学者和有一定经验的技术人员。 使用场景及目标:① 在需求分析阶段,帮助团队梳理用户需求,确保系统功能明确;② 在系统设计阶段,为架构师和开发人员提供功能模块划分和接口设计的依据;③ 在测试阶段,为测试人员提供详细的测试用例设计参考;④ 提高团队沟通效率,确保各方对系统功能达成一致理解。 其他说明:本文通过丰富的实例和详细的解释,帮助读者掌握用例图的绘制方法和应用技巧,建议读者在实际项目中多加练习,结合具体业务场景灵活运用用例图,以提升软件开发的质量和效率。
629684565507752猎豹清理大师_6.22.3 解锁会员版_Rikkati.apk
内容概要:本文介绍了一个基于Python和Django框架的音乐推荐系统的开发过程。该系统旨在帮助用户从海量音乐中找到自己喜欢的歌曲,解决了用户选择困难的问题。系统通过记录用户的听歌次数,计算用户对歌曲的喜好度,并采用基于用户协同过滤的算法,利用余弦相似度来为用户推荐可能喜欢的歌曲。具体实现步骤包括设计数据库结构、实现用户登录功能、记录听歌次数、计算余弦相似度、构建相似度矩阵和推荐分数矩阵,最后通过界面展示推荐结果。 适合人群:对Python和Django有一定了解的研发人员,尤其是对推荐系统感兴趣的开发者。 使用场景及目标:①帮助用户在海量音乐中找到自己可能喜欢的歌曲;②提升用户体验,减少选择困难;③学习基于用户协同过滤和余弦相似度的推荐算法实现。 阅读建议:读者可以通过本文了解音乐推荐系统的完整开发流程,掌握如何使用Python和Django实现基于用户行为的个性化推荐。同时,关注实现细节如数据库设计、相似度计算等,有助于深入理解推荐系统的原理。
内容概要:本文详细介绍了在MATLAB r2018a环境下,针对冲击噪声环境下的鲁棒稀疏恢复算法的研究与应用。鲁棒稀疏恢复旨在从含噪数据中提取并重构有用信息,在信号处理领域具有重要意义。文中阐述了算法的基本概念、实现方式,特别是利用MATLAB的优化和信号处理工具箱完成具体操作。此外,还展示了该算法在多个领域的广泛应用,如金融时间序列、地震信号、机械振动、生理信号等,并给出了一段简化的MATLAB代码示例用于演示。 适合人群:从事信号处理相关工作的研究人员和技术人员,尤其关注冲击噪声下数据恢复的技术人员。 使用场景及目标:①帮助用户理解鲁棒稀疏恢复算法的工作原理;②指导用户在MATLAB环境下实现该算法;③促进该算法在不同领域的实际应用。 其他说明:文中提供的代码仅为示意,实际应用时需根据具体情况进行适当修改。
内容概要:本文深入探讨了微电网主从控制在孤岛与并网模式之间的平滑切换技术。首先介绍了孤岛模式下的VF控制,通过下垂控制维持电压和频率稳定;接着阐述了并网模式下的PQ控制,强调电流环控制的重要性。文中详细解析了模式切换的关键环节——预同步,特别是锁相环的作用。此外,还讨论了分布式发电与主动配电网的相关问题,如通信延迟的影响和容量分配算法的设计。最后,通过MATLAB模型展示了控制回路的模块化设计及其优势。 适合人群:从事电力系统研究、微电网技术研发的专业人士,以及对智能电网感兴趣的科研人员。 使用场景及目标:适用于需要理解和优化微电网控制系统的技术人员,帮助他们掌握孤岛与并网模式切换的关键技术和实现方法,提高系统的稳定性和可靠性。 其他说明:文章提供了详细的MATLAB模型和代码片段,便于读者进行实验和验证。同时,通过对实际案例的分析,为相关领域的研究提供了宝贵的实践经验。
数据集介绍:自动驾驶道路多目标检测数据集 数据集名称:自动驾驶道路多目标检测数据集 图片数量: - 训练集:2,447张图片 - 验证集:1,121张图片 - 测试集:1,126张图片 总计:4,694张道路场景图片 分类类别: 1. 坑洼道路:路面凹陷区域检测,用于车辆避障决策 2. 停止标志:交通禁令标志识别,支持车辆制动逻辑 3. 自行车:非机动车目标检测 4. 谨慎标志:预警类交通标识识别 5. 道路区域:可行驶区域划分 6. 路面坑洞:小型障碍物检测 7. 前进指示:交通引导标志识别 8. 摩托车:二轮机动车辆检测 9. 行人:行人目标识别与追踪 10. 车牌:车辆身份标识提取 11. 卡车:大型货运车辆检测 标注格式: YOLO格式标注,包含目标边界框与类别标签,支持主流检测框架直接调用。 自动驾驶系统开发: 训练车辆感知模型,实现道路障碍物、交通标志、行人等多目标实时检测。 道路安全预警系统: 集成至ADAS系统,提供坑洞预警、行人碰撞预警等功能。 交通流量分析: 通过车辆类型检测统计道路货运/客运比例。 算法研究: 支持YOLO系列模型优化,适用于复杂道路场景下的检测鲁棒性研究。 场景覆盖全面: 包含11类道路核心要素,涵盖车辆、行人、交通标志、路面异常四维检测目标。 标注专业化: YOLO格式标注经多轮质检,边界框定位精准,类别标注准确率达98.6%。 任务适配灵活: 同时支持目标检测、可行驶区域分割、特殊标志识别等多任务模型训练。 数据分布合理: 严格按6:3:1划分训练/验证/测试集,包含昼夜、多种天气条件下的道路场景。
11-16届C/C++ A组省赛题目全解(附AC代码)
内容概要:本文详细介绍了用于电机控制器的IGBT结温估算算法及其模型。该算法经过多年实际应用验证,能够精确估算IGBT内部6个三极管和6个二极管的温度,并找出最热点,从而有效保护IGBT并优化产品性能。文中提供了具体的MATLAB和C代码片段,展示了损耗计算、热阻抗模型以及温度查找的具体实现方法。此外,还介绍了Simulink模型的双模切换机制,包括直流和交流两种仿真模型,以及一些优化技巧如查表法加速指数运算。最后,通过实际案例证明了该算法的有效性和可靠性,误差控制在±3°C以内,显著延长了IGBT的使用寿命。 适合人群:从事电机控制系统设计、IGBT应用开发的技术人员,尤其是需要深入了解IGBT结温估算原理和实现细节的专业人士。 使用场景及目标:适用于需要高精度温度监控和保护的电机控制系统,特别是电动汽车等领域。目标是确保IGBT的安全运行,优化降额策略,延长设备寿命。 其他说明:提供的模型不仅支持仿真,还可以生成代码应用于实际硬件中,增强了其实用价值。同时,模型内置CRC校验,提升了系统的可靠性和安全性。
内容概要:本文档为交通银行考试准备的模拟题集,提供了5套线上模拟试题的链接,考生可以通过这些链接进行自我测试并即时查看答题结果与错题解析。模拟题覆盖了交通银行考试的关键知识点,旨在帮助考生熟悉考试形式、检验自身水平并针对性地复习薄弱环节。; 适合人群:即将参加交通银行招聘考试的求职者,特别是希望提前了解考试题型和难度的应聘者。; 使用场景及目标:①考生可以在备考期间利用这些模拟题进行练习;②通过自我检测及时发现知识盲点并加以巩固;③适应在线考试环境,减轻正式考试时的紧张感。; 阅读建议:建议考生在正式做题前先浏览一遍题目类型,做完后认真分析错误原因,结合答案解析加深对知识点的理解,反复练习以提高正确率。
实训商业源码-红色茶叶销售企业网站源码-毕业设计.zip