皮皮网

【星球漩涡源码】【class源码代码】【量能专家源码】forward源码

来源:软件库PHP程序源码 时间:2024-11-22 15:45:04

1.AI与PDE(七):AFNO模型的源代码解析
2.Struts 2的Result Type
3.forwardJSP 语法
4.C++右值引用

forward源码

AI与PDE(七):AFNO模型的源代码解析

       本文旨在解析AFNO模型的源代码,帮助读者理解模型细节与主干结构。首先,AFNO模型的主干框架在afnonet.py文件中定义,通过类AFNONet实现。模型的星球漩涡源码核心功能封装在多个类与函数中,依据代码注释逐步解析。

       在代码中,forward_features函数负责模型的核心逻辑,包括patch切割与mixing过程。这些操作由PatchEmbed类实现。位置编码self.pos_embed通过高斯初始化得到,增加模型的表示能力。

       关键模块AFNO2d位于代码中,class源码代码它基于FNO的原理,负责处理输入数据。AFNO2d模块在forward_features函数中通过循环调用,实现数据的转换与混合。

       经过数个L layer处理后,模型进入类似解码器的结构,用于将中间结果映射为目标结果。这一过程通过self.head(x)实现,以解决特定分类问题。

       本文通过梳理代码流程与结构图,直观展示了AFNO模型的工作原理。读者可参考AFNO的GitHub源代码与论文,深入理解细节。量能专家源码后续文章将继续探讨基于AFNO模型框架的其他应用,如FourCastNet。

Struts 2的Result Type

       åœ¨é»˜è®¤æ—¶ï¼Œ<result>标签的type属性值是“dispatcher”(实际上就是转发,forward)。开发人员可以根据自己的需要指定不同的类型,如redirect、stream等。如下面代码所示:

       <result name=save type=redirect>

       /result.jsp

       </result>

       è¿™æ­¤result-type可以在struts2-core-2.0..1.jar包或struts2源代码中的struts-default.xml文件中找到,在这个文件中找到<result-types>标签,所有的result-type都在里面定义了。代码如下: <result-types><result-type name=chain class=com.opensymphony.xwork2.ActionChainResult/><result-type name=dispatcher class=org.apache.struts2.dispatcher.ServletDispatcherResult default=true/><result-type name=freemarker class=org.apache.struts2.views.freemarker.FreemarkerResult/><result-type name=.opensymphony.xwork2.ActionChainResultchain其实只是在一个action执行完毕之后,forward到另外一个action,所以他们之间是共享HttpServletRequest的。在使用chain作为Result时,往往会配合使用ChainingInterceptor。ChainingInterceptor的作用是在Action直接传递数据。事实上,源Action中ValueStack的数据会被做一次Copy,这样,2个Action中的数据都在ValueStack中,使得对于前台来说,通过ValueStack来取数据,是透明而共享的。比如说,一张页面中,你可能有许多数据要显示,而某些数据的获取方式可能被很多不同的页面共享(典型来说,“推荐文章”这个小栏目的数据获取,可能会被很多页面所共享)。这种情况下,可以把这部分逻辑抽取到一个独立Action中,并使用chain,将这个Action与主Action串联起来。这样,最后到达页面的时候,页面始终可以得到每个Action中的数据。

       ä»Žå®žæˆ˜ä¸Šè®²ï¼Œä½¿ç”¨chain作为Result也的确存在着上面所说的许多问题,我个人也是非常不推崇滥用这种Result。尤其是,对于使用Spring和Hibernate的朋友来说,如果你开启OpenSessionInView模式,那么Hibernate的session是跟随HttpServletRequest的,所以session在整个action链中共享。这会为我们的编程带来极大的麻烦。因为我们知道Hibernate的session会保留一份一级缓存,在action链中,共享一级缓存无疑会为你的调试工作带来很大的不方便。

       æ‰€ä»¥ï¼Œè°¨æ…Žä½¿ç”¨chain作为你的Result,应该成为一条最佳实践。 重定向到一个URL org.apache.struts2.dispatcher.ServletRedirectResult如果你在Action执行完毕后,希望执行另一个Action,有2种方式可供选择。一种是forward,另外一种是redirect。有关forward和redirect的区别,这里我就不再展开,这应该属于Java程序员的基本知识。在Struts2中,分别对应这两种方式的Result,就是chain和redirect。

       å…ˆæ¥è°ˆè°ˆredirect,既然是重定向,那么源地址与目标地址之间是2个不同的HttpServletRequest。所以目标地址将无法通过ValueStack等Struts2的特性来获取源Action中的数据。

       åŒæ—¶ï¼ŒRedirect的Result支持在配置文件中,读取并解析源Action中ValueStack的值,并成为参数传递到Redirect的地址中。 重定向到一个Action org.apache.struts2.dispatcher.ServletActionRedirectResult

forwardJSP 语法

       在Java Server Pages(JSP)中, 标签用于将请求转发到指定的页面。这个标签有两个基本用法,具体如下:

       第一种形式,<jsp:forward page="relativeURL | "/>。这里的 "relativeURL" 是相对于当前 JSP 页面的 URL。而 "" 是一个表达式,它可以在 JSP 页面的 Java 源代码中执行,然后将表达式的结果作为 URL 的一部分。

       第二种形式,<jsp:forward page="relativeURL | ">。netty 源码架构与第一种形式相似,这里同样使用 "" 执行表达式,将结果添加到 URL 中。

       此外, 标签还可以结合 标签使用,以传递参数到目标页面。例如:

       <jsp:forward page="relativeURL | "><jsp:param name="parameterName" value="{ parameterValue | }" />。在这里,"parameterName" 是参数的名称,"{ parameterValue | }" 是参数的值,同样执行表达式得到结果,然后将结果作为参数值传递给目标页面。

       使用 标签可以实现页面间的交易公式源码动态转发,这对于实现前后端分离的 Web 应用程序来说,是一个非常有用的功能。通过使用表达式,可以根据用户操作或其他动态条件,改变转发到的目标页面,从而提供更丰富的用户体验。

扩展资料

       forward,用法格式为,用于重定向一个HTML文件,JSP文件,或者是一个程序段.

C++右值引用

       什么是引用?

       引用可以看作是变量的一个别名,它与原变量共享同一块内存地址;这意味着对引用的修改会直接反映在原变量上。

       接下来通过测试代码和反汇编去观察它的工作流程。

       1. 右值引用

       2.1. 概念

       C++ 引入了一种新的引用类型:右值引用,它主要用于优化临时对象的资源管理。

       右值是临时的,它不具有明确的内存地址,例如:字面量、临时对象或者返回值。

       右值引用的声明方式:在类型后面使用两个 & 符号(type&&),例如:int&&。

       概念比较抽象,我们通过测试源码,先简单地去了解它使用。

       2.2. 注意

       要注意某些场景,右值引用作为左值使用。

       3. 万能引用

       万能引用是一种特殊的引用类型,它可以同时接受左值和右值。

       它的类型是 T&& 模板变量类型或 auto&&,这些须要编译器推导的类型它是万能引用;它有可能是右值引用,也可能是右值引用,取决于传递给它的实参类型。

       右值引用类型是:type&&,type 都是明确的类型,例如:int&& 并不须要编译器进行推导。

       4. 引用折叠

       引用折叠是一种语言特性,主要用于处理模板和类型推导中的引用类型。

       如果模板类型 T = A,那么 ‘T&’ 就是 ‘A&’,’T&&’ 就是 ‘A&&’ 这是正确的,然而 T = A&,那么 ‘T&&’ 就是 ‘A& &&’,显然这种类型是错误的,它需要编译器进行引用折叠,将 ‘A& &&’ 折叠成 ‘A&’ 才能正确使用。

       其它引用类型折叠场景,详细请参考下面图表。

       5. 移动语义

       5.1. 概念

       在 C++ 之前,我们通常通过复制构造函数来复制对象,但这种方式可能会导致资源浪费。

       通过使用右值引用的移动语义,我们可以将资源从一个对象移动到另一个对象,无需复制,从而提高了效率。

       例如下面的测试代码,创建 b 对象:

       其它的移动语义使用场景可以参考: [stl 源码分析] 移动语义是如何影响程序性能的(C++)

       5.2. 注意

       上面移动语义测试例子,对象间的资源转移主要做了三件事:

       因为资源移动涉及到对象资源重置,有一定危险性,特别是源对象被移动处理后,如果被再次使用是非常危险的(参考上述测试例程)。

       5.3. std::move

       std::move 是 C++ 标准库中的一个函数模板,它可以将其参数转换为右值引用,从而可以触发移动语义。

       6. 完美转发

       6.1. 概念

       完美转发 - std::forward,正常的使用方式是结合万能引用使用,将模板函数的参数类型:万能引用转换为对应的左值引用或右值引用。

       6.2. std::forward

       从 std::forward 的实现源码来看,并不复杂,结合上面的引用折叠 来理解,就能推导出对应的引用返回类型。

       7. 小结

       8. 引用

       9. 后记

       最近遇到职业生涯最硬核的(C++)笔试:指定时间内完成 道选择题。

       面试可以复盘知识,也帮我挑出了薄弱环节,例如 右值引用 等等,因此有了此文。

       —— 既来之,则安之。感恩挑战~