1.请教这个网站的码下CSS问题,为什么查看不到CSS源文件!码下
2.CANN训练营笔记Atlas 200I DK A2体验手写数字识别模型训练&推理
3.c++he javaçå·®å«ï¼
4.UE4游戏客户端开发进阶学习指南
5.编译器龙书虎书鲸书基本抽象概念
请教这个网站的码下CSS问题,为什么查看不到CSS源文件!码下
很简单他写的码下css地址是相对地址
是不全的css地址
我先解释下他地址的意思
你就会明白怎么看了
<link href="../css/index.css" rel="stylesheet" type="text/css" />
这是你给的代码上的css地址
../css/index.css这是链接地址
没看前面部分变..了么,说明用的是相对地址
那..又代表什么含义呢
这地址的意思是,..表示和你现在读取的页面地址是一样的,也就是相对现在的页面地址路径后还多/css/index.css这么对
打个比方,你读取的页面地址是
http://www.tmcollege.org/
这个页面源代码css地址为css/style.css
那么他的地址应该是http://www.tmcollege.org/css/style.css
要是页面源代码地址是../css/style.css
说明他的上级还有文件夹,意思和css/style.css是一样的,只是书写的规范而已
我上面例子css上已经没有更高一级的文件夹了
所以可以不用写../
明白么?不明白,可以密我,问我
当然要设满意答案哦
CANN训练营笔记Atlas I DK A2体验手写数字识别模型训练&推理
在本次CANN训练营中,我们对华为Atals I DK A2开发板进行了详细的码下simplelink源码探索,该板子配备有4GB内存和Ascend B4 NPU,码下运行的码下是CANN 7.0环境。
首先,码下为了顺利进行开发,码下我们需要下载预编译的码下torch_npu,并安装PyTorch 2.1.0和torchvision 0..0。码下接着,码下配置环境变量,码下确保系统可以识别所需的码下库和文件。Ubuntu系统和欧拉系统下的安装步骤有所不同,例如,需要将opencv的头文件链接到系统默认路径。
对于ACLLite库,我们采取源码安装方式,确保动态库的delphi源码检查工具识别,并在LD.so.conf.d下添加ffmpeg.conf配置。同时,设置ffmpeg的安装路径和环境变量。接着,克隆ACLLite代码仓库并安装必要的依赖。
进入模型训练阶段,我们调整环境变量来减少算子编译时的内存占用,然后运行训练脚本来启动训练过程。在训练结束后,我们生成了mnist.pt模型,并将其转换为mnist.onnx模型,以便进行在线推理。
在线推理阶段,我们使用训练得到的模型对测试进行识别。测试展示了一次实际的推理过程,其结果直观地展示了模型的性能。
对于离线推理,我们从PyTorch框架导入ResNet模型,并转换为升腾AI处理器能识别的格式。提供了下载模型和转换命令,开源微社区源码只需简单拷贝执行。将在线推理的mnist.onnx模型复制到model目录后,我们配置AIPP,进行模型转换,然后编译样例源码并运行,得到最终的推理结果。
c++he javaçå·®å«ï¼
Javaç¨åºä¸çæ¯ä¸ªåéè¦ä¹æ¯åºæ¬æ°æ®ç±»åï¼boolean, char, byte, short, int, long, float, doubleï¼ï¼è¦ä¹æ¯å¯¹å¯¹è±¡çå¼ç¨
C++æ许å¤ç§åºæ¬ç±»åï¼é¢å¤è¿æstruct, union, enum, æ°ç»åæéï¼C++æéå¯ä»¥æå对象ï¼ä¹å¯ä»¥ä¸æå对象
Java没ææ举ãèåç±»åï¼å 为Java认为没æå¿ è¦ãå°å¯æå¯æ çè¯è¨å ç´ å»ææ¯Java对C/C++ååºçä¸å¤§æ¹åï¼å æ¤ï¼æ®é认为Javaè¾C++æ´è½»ä¾¿ï¼æ´ç²¾ç®
Javaéç¨Unicodeå符éï¼C++é常ç¨ASCIIå符éãä½ASCIIæ¯Unicodeçåéï¼å¯¹äºä¹ æ¯äºASCIIçç¨åºåæè§ä¸å°åºå«
Javaä¸çbooleanç±»åä¸è½è½¬æ¢æå ¶ä»ç±»åï¼åä¹äº¦ç¶ãC++æè¿å¼è¿äºboolç±»åï¼ä»£è¡¨å¸å°ç±»åï¼æ´åä¹ä½ä¸ºé»è¾å¤æ
模æ¿æ¯ä¸ç§âæ³åç¼ç¨ææ³âï¼å®æå«äºâé¢å对象ç¼ç¨ææ³âãC++å¨å¾å¤§ç¨åº¦ä¸å·²ç»æ¯æäºè¿ç§æ°åç¼ç¨æ¹æ³ï¼ç¹å«æ¯STLçåºç°
Javaç®åä»æªæ¯ææ³åç¼ç¨ï¼ä¸è¿æ®è¯´Sunå ¬å¸æå¨Javaä¸å¼å ¥æ¨¡æ¿ç计å
C++æ¯æâè¿ç®ç¬¦çéè½½âï¼è¿æ¯å®çä¸ä¸ªå¾éè¦çå¤æç¹å¾ï¼æ¯æ°æ®æ½è±¡åæ³åç¼ç¨çå©å¨ãå®å 许ç´æ¥å¯¹å¯¹è±¡è¿è¡ååè¿ç®ï¼æ£ååºæ¬æ°æ®ç±»åé£æ ·
Javaä¸æ¯æè¿ç§å¤ææºå¶ï¼ä¹æ¯ä¸ºéä½å¤ææ§
两ç§è¯è¨é½æ¯ææ¹æ³éè½½(overloading)
å¨C++ä¸ï¼ä¸ºäºå 许è¿è¡æ¶å¨æå³å®åªä¸ªå½æ°è¢«è°ç¨ï¼ä¸ä¸ªå½æ°å¿ é¡»ç¨virtual修饰ãvirtualå ³é®å被èªå¨ç»§æ¿ï¼ç¨ä»¥æ¯æå¤æ
å¡æ¯æ²¡æç¨virtual修饰çæåå½æ°ï¼å æ¬staticï¼é½æ¯éæç»å®çï¼å³å¨ç¼è¯æ¶å³å®è°ç¨åªä¸ªçæ¬
èå¨Javaä¸ï¼é¤äºstaticãfinalãprivateæ¯éæç»å®ä»¥å¤ï¼æææ¹æ³ä¸å¾æå¨æç»å®å¤ç
C++ä¸æâæ·è´æé å½æ°âçæ¦å¿µï¼å¨ä¸ç§æ åµä¸ï¼èªå¨è°ç¨å®
ç¨ä¸ä¸ªå¯¹è±¡åå§åå¦ä¸å¯¹è±¡
对象ä½å®åè¿è¡å½æ°è°ç¨
对象ä½å½æ°çè¿åå¼
é常ï¼å½ä¸ä¸ªå¯¹è±¡éè¦åâæ·±æ·è´â(é±è½ï¼ãC++ç¨åºè®¾è®¡æç¨ã)æ¶ï¼æ们éè¦ä¸ºå®äºå å®ä¹âæ·è´æé å½æ°âãâèµå¼è¿ç®ç¬¦çéè½½å½æ°âåâææå½æ°âï¼å¦åç¼è¯å¨å°ä»¥âæä½copyâçå½¢å¼èªå¨çæç¸åºç缺çå½æ°ãåè¥ç±»ä¸å«ææéæåæå¼ç¨æåï¼é£ä¹è¿ä¸ä¸ªé»è®¤çå½æ°å°±éå«äºé误
Javaå没æè¿ç§è¯æ³ç»æåè¯ä¹é»è¾
C++æ¯æinlineå½æ°ï¼å¯ä»¥é¿å å½æ°çå æ è°ç¨ï¼æé«è¿è¡æç
Javaæ è¿ç§è¯ä¹
C++ä¸ï¼æé å½æ°çåå§åå表æ¯è¿æ ·ä½¿ç¨çï¼é¦å æ继æ¿é¡ºåºè°ç¨åºç±»çæé å½æ°æé åºç±»å¯¹è±¡ï¼ç¶åæ声æ顺åºè°ç¨æå对象çæé å½æ°æé æå对象ï¼æå对å表ä¸åºç°çæååéååå§å
Javaä¸éç¨åå§åå表è¿ç§æé æºå¶
å®ä»¬çæé 顺åºåºæ¬ä¸è´ï¼
éæåéåå§å
éæåå§ååï¼Javaï¼
è°ç¨åºç±»çæé å½æ°æé åºç±»å¯¹è±¡
å®ä¾åéçåå§å
æé å½æ°çå ¶ä½é¨å
Java使ç¨abstractå ³é®å修饰æ½è±¡æ¹æ³ææ½è±¡ç±»
C++ç对çè¯æ³æ¯â纯èå½æ°âåâæ½è±¡ç±»â
两è é½ä½¿ç¨æ½è±¡ç±»ä½ä¸ºç»§æ¿å±æ¬¡ä¸çåºç±»ï¼æä¾ä¸è¬æ¦å¿µï¼ç±åç±»å®ç°å ¶æ½è±¡æ¹æ³ï¼ä¸æ½è±¡ç±»é½ä¸è½è¢«ç´æ¥å®ä¾å为对象
Javaä¸æfinalå ³é®åï¼ä¿®é¥°ç±»ãæ¹æ³æåé
finalç±»ä¸è½è¢«ç»§æ¿
finalæ¹æ³ä¸è½è¢«åç±»è¦ç
finalåéå°±æ¯å¸¸é
C++ä¸æ²¡æè¿ä¸ªå ³é®åï¼å¸¸éå¯ä»¥ä½¿ç¨constæ#defineå®ä¹
constè¿å¯ä»¥ä¿®é¥°æåå½æ°ï¼å³â常æåå½æ°âï¼å½ä¸ä¸ªconstæåå½æ°ä¿®æ¹æåæ°æ®ï¼æè°ç¨éconstæåå½æ°æ¶ï¼ç¼è¯å¨ä¼æ¥é
æ们åºå°ä¸ä¿®æ¹æåæ°æ®çå½æ°å£°æ为const
JavaåC++ä¸çstaticå ³é®åè¯æ³åè¯ä¹åºæ¬ç¸å
staticæååéåå«ç±»åéï¼è¢«ç±»çææå¯¹è±¡å ±äº«
A::x (C++)ï¼å¿ é¡»å¨ç±»ä½å¤åå§å
A.x (Java)ï¼å¿ é¡»å¨ç±»ä½å åå§å
staticæåæ¹æ³åå«ç±»æ¹æ³ï¼è®¿é®staticåé
A::f( ) (C++)
A.f( ) (Java)
两è é½æå é¨ç±»åå±é¨ç±»çè¯æ³åè¯ä¹
Javaä¸æ²¡æåå å½æ°ååå ç±»çæ¦å¿µï¼ä¸¥æ ¼æ¯æå°è£ ï¼ä¸å 许å¤é¨æ¹æ³è®¿é®ç±»çç§ææå
èC++æ¯æfriendå ³é®åï¼å 许å¤é¨æ¹æ³è®¿é®ç±»çç§ææåï¼å æ¤ä¸æ¯ä¸ç§çº¯é¢å对象çç¼ç¨è¯è¨
Javaä¸ç±»æinterfaceå¯ä»¥ç¨public修饰ï¼ä¹å¯ä»¥ä¸ä¿®é¥°ï¼èC++ç±»ä¸è½ä¿®é¥°
ä¸ç§è®¿é®æéçè¯ä¹ç¸åï¼è¯æ³ç¥æå·®å«
C++ä¸è¿æ继æ¿æé修饰符ï¼Javaå没æ
class A: protected B, public C (C++)
class A extends B (Java)
Javaæsuperå ³é®åï¼æ代ç¶ç±»å¯¹è±¡ï¼é常被ç¨äºè°ç¨ç¶ç±»çæé æ¹æ³æä¸è¬æ¹æ³
C++å没æsuperå ³é®å
两è é½æthisï¼æ代å½å对象
Javaæpackageçæ¦å¿µï¼å¯ä»¥å°ç±»ç»ç»èµ·æ¥ï¼ä¾¿äºæå åé¨ç½²ï¼ä¹æå©äºç±»çå®å ¨ãC++没æè¿ä¸ªæ¦å¿µï¼ä¸ä¸ªç±»å¯ä»¥è¢«ä»»æ类访é®
Java appletå¯ä»¥è¢«åµå ¥HTMLææ¡£ä¸ï¼ç¶åç±Webæµè§å¨ä¸è½½åæ§è¡
Java APIæ对ç½ç»é讯çç¹å«æ¯æ
C++åæ å ç½®ç½ç»åè½
C++ç¨åºåå¿ é¡»æ¾å¼å°å®ç°å¨æå å管çï¼å¨ææå½æ°ä¸ç¨deleteè¿ç®ç¬¦æfree( )å½æ°éæ¾å¯¹è±¡åå ¶ä»å¨æåé çæ°æ®ç©ºé´ï¼å¦åä¼é æâå åæ³é²â
èå¨Javaä¸ï¼åå¾æ¶éæ¯èªå¨çãå½å¯¹è±¡çæåä¸ä¸ªå¼ç¨åé被éæ¾æï¼è¿ä¸ªå¯¹è±¡å°±æ为åå¾æ¶éå¨çåé对象äº
å æ¤Javaä¸æ¯æææå½æ°
finalize( )æ¹æ³ä¸»è¦è¢«ç¨æ¥éæ¾å åæå¼çéå åèµæºï¼å¦æ件å¥æ
Javaæºä»£ç 被ç¼è¯æåèç ï¼.classæ件ï¼ï¼åèç æ¯ä¸ç§åªæJVMæè½è¯å«çäºè¿å¶ä½çº§ä»£ç ï¼å®ä¸å ·ä½çå¤çå¨æ å ³ï¼è¦ç±å®è£ å¨OSä¹ä¸çJVM解éæ§è¡ï¼è½¬æ¢æç¸åºå¹³å°çæºå¨ç ï¼å æ¤Javaæ¯ä½ç³»ç»æä¸ç«å跨平å°ç
èC++ç´æ¥è¢«ç¼è¯æåºå±å¹³å°çäºè¿å¶æºå¨ç ï¼ç±CPUæ§è¡ï¼æ¯å¹³å°ç¸å ³ç
å æ¤ï¼å½è§£éæ§è¡æ¶ï¼Javaç¨åºé度æ´æ ¢
Javaè¯è¨æ¯æå¤çº¿ç¨ï¼å 许并å线ç¨çåæ¥ä¸äºæ¥æä½
C++å没æè¿ç§å å¨æºå¶
UE4游戏客户端开发进阶学习指南
UE4游戏客户端开发的进阶学习指南已经更新,适合有一定基础的读者。本文将引导你深入学习,提供精心筛选的学习资源,分为必修和选修两部分。必修部分包括官方文档的编程与脚本编写、UProperty关键字全说明、GamePlay架构系列和骨骼网格动画等,这些都是开发的基础和核心内容。选修部分涵盖了蓝图开发、C++编程、Gameplay Ability System (GAS)、动画、UI、收款放款源码AI、网络架构以及编辑器扩展等进阶内容,适合根据个人兴趣和项目需求进行选择。
首先,理解UE4的整体架构是关键,官方的引擎架构图能帮助你建立框架认知。接下来,深入学习编程和蓝图开发,理解UObject类型系统,将有助于你构建游戏玩法。GamePlay模块教你如何运用GAS实现各种功能,如游戏阶段切换。动画部分,从官方文档开始,ALS高级运动系统是核心,选修内容涉及过场动画和底层源码解析。UI开发中,UMG控件、Slate和动态创建动画是基础,根据需求选择更深入的jsp源码无权限内容。
AI部分,从行为树和感知模块入手,选修内容包括行为树源码和寻路算法。网络部分,官方文档和网络同步原理是必修,ReplicationGraph插件对于大世界场景尤为重要。编辑器扩展和渲染视觉效果则适合选修学习,如Lyra工程和GameFeature框架提供了UE5新特性的学习机会。
记住,每个模块的资料都是为了帮助你提升UE4客户端开发的技能,根据实际情况选择适合的路径,持续提升你的开发能力。作者的个人博客资源供你参考和深入学习。
编译器龙书虎书鲸书基本抽象概念
在编译原理的世界里,三本堪称经典的著作犹如璀璨明珠:龙书(Aho, Sethi, Ullman合著的《编译原理技术和工具》)、虎书(Appel和Palsberg合作的《现代编译器实现:C语言版》),以及被称为“鲸书”的神秘巨著(未提及具体书名)。龙书是编译器领域的基石,涵盖了词法分析、语法分析等核心内容,虽早期版本存在一些过时技术,但后期修订版不断扩展新知识。虎书则紧跟时代步伐,融合了数据流分析等现代元素,特别适合教学,不仅有C语言版本,还有Java和ML版本,详细内容可通过参考链接获取。
深入研究现代商业编译器的关键问题,学生们通过学习基础概念,为后续深入探索奠定基础。推荐必读的《现代编译原理:C语言描述》由Steven S. Muchnick撰写,是虎书的升级版。而“鲸书”则为进阶学习者量身打造,探讨高级编译器设计与实现,涵盖了抽象层次的深入转换,如从高级语言到机器代码的优化过程,分为基础抽象、数据模型、编程语言语义和算法效率等几个核心领域。
基础抽象如同Java接口,它不仅包含操作的名称,还承载了预期的功能含义。这些抽象可以分为两类:一类是常见的操作,如字典和堆栈,提供多种实现;另一类是广泛应用于组件化的概念,如树和图。在计算思维中,抽象是灵魂,如图抽象中的“查找相邻节点”,它在图灵完备的语言中嵌入,类似于面向对象的类方法,但底层实现则更为具体,涉及有限自动机、解析器等与机器模型紧密相连的技术。声明性抽象,如正则表达式和关系代数,强调的是表达和描述而非实现,对优化性能有高要求;而计算抽象,如通用编程语言和理论模型,如RAM和并行计算模型,尽管可能非图灵完备,但其重要性不言而喻。
举例来说,当需要在声明阶段将标识符插入符号表S时,编译器会根据标识符类型进行检索。字典语言虽然不具备图灵机的复杂性,但它关注的是进程的表示,而非算法设计。字典操作的时间复杂性与集合大小相关,链表实现可能导致O(n)时间,而搜索树如AVL或红黑树则可达到O(log n)。
哈希抽象的核心是全集、哈希函数和哈希桶,操作基于计算哈希值。尽管哈希操作存在最坏情况性能问题,但通常假设平均性能。哈希桶存储结构可根据集合规模采用链表或优化存储,如调整磁盘块大小以适应主存容量。
从词法分析到后端优化,现代编译器分为前后端任务。前端涉及词法分析、句法分析、语义分析和中间代码生成,而共享符号表则用于收集源代码信息。如Lex,通过正则表达式实现标记简化,早期的磁带检索技术效率较低,但Aho-Corasick算法通过一次遍历查找多个关键字,提高了效率。句法分析器生成器基于正则表达式,产生确定性有限自动机,确保语法的有效性。
2.1.1 Lex的升级:Aho-Corasick算法通过集成多个正则表达式集合,显著提升了关键字检索的效率。
2.1.2 Lex设计关注交互复杂性,区分标识符与控制流关键字,避免混淆。
2.1.3 懒惰评估的DFA(确定性有限自动机)技术,优化了正则表达式到DFA的转换,为grep等工具的性能提升做出了贡献。
继续深入,语法分析构建了语言的结构,如表达式树。上下文无关文法(CFG)描述编程语言的句法规则,LR(k)分析法通过一次左到右扫描,处理复杂语法结构。
编译器研究涉及众多抽象层次,从关系模型在编程语言中的应用,到SQL的抽象和优化,再到分布式计算和量子计算的前沿探索。随着技术的演进,我们期待在编译器领域的知识体系中,不断发掘新的抽象理论,推动计算机科学的边界不断拓宽。
参考资料:[1] [2] [3]