- 博客(275)
- 资源 (10)
- 收藏
- 关注
原创 机器学习和深度学习的简单对比
为了提高深层神经网络的训练效果,人们对神经元的连接方法以及激活函数等做出了调整,其目的在于建立、模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据,如文本、图像、声音。如果是传统机器学习方法,我们会首先定义一些特征,如有没有胡须,耳朵、鼻子、嘴巴的模样,等等。总之,首先要确定相应的“面部特征”作为机器学习的特征,以此来对对象进行分类识别。深度学习的“深”是因为它通常有较多的隐藏层,正是因为有那么多隐藏层存在,深度学习网络才拥有表达更复杂函数的能力,这样才能识别更复杂的特征,继而完成更复杂的任务。
2024-03-29 10:18:29 198
原创 PyTorch构建神经网络的简单示例
PyTorch的一个重要功能就是autograd,它是为方便用户使用,而专门开发的一套自动求导引擎,能够根据输入和前向传播过程自动构建计算图,并执行反向传播。当一个Epoch的样本(也就是训练集)数量太过庞大的时候,进行一次训练可能会消耗过多的时间,并且每次训练都使用训练集的全部数据是不必要的。人工神经网络(Artificial Neural Network,ANN)也简称为神经网络(NN),它是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型。
2024-03-29 10:09:03 486
原创 Pandas数据清洗
在下面的代码中,dropna()方法是删除包含空数据的行。Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。这个例子中,我们看到Pandas把n/a和NA当作空数据,na不是空数据,不符合我们的要求,可以指定空数据类型。数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、数据错误或数据重复的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。
2024-03-28 08:00:40 223
原创 Pandas处理CSV文件
Pandas在读取CSV文件时通过read_csv函数读取,读取CSV文件时指定的分隔符默认为逗号,代码如下。Pandas的head(n)方法用于读取前面的n行,如果不填参数n,则默认返回5行。tail(n)方法用于读取尾部的n行,如果不填参数n,则则默认返回5行。还要注意Pandas的to_string()用于返回 DataFrame 类型的数据,如果不使用该函数,则直接print(df)输出结果为数据的前面 5 行和末尾 5 行,中间部分以…运行结果如图3-7所示。运行结果如图3-8所示。
2024-03-28 07:55:53 393
原创 数据处理库Pandas数据结构DataFrame
Dataframe是一种二维数据结构,数据以表格形式(与Excel类似)存储,有对应的行和列,如图3-3所示。如下面的代码所示,Pandas可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为0,第二行索引为1,以此类推。它也可以返回多行数据,使用[[ ... ]]格式,...为各行的索引,以逗号隔开。另外,也可以只获取 dataframe 中的几列,比如当处理数据的时候series较多,我们可以只关注其中一些特定的列,代码如下,假设只关注apple和banana数据列。
2024-03-27 09:04:25 319
原创 数据处理库Pandas的数据结构Series
因为传给构造器的是一个列表,所以 index 的值是从 0 起递增的整数,如果传入的是一个类字典的键-值对结构,就会生成 index-value 对应的 Series;注意:Series 的 index 和 values 的元素之间虽然存在对应关系,但这与字典的映射不同。ndarray也有索引,但它是位置索引,Series的标签索引使用起来更加方便。Series是一种一维数据结构,每个元素都带有一个索引,与一维数组的含义相似,其中索引可以为数字或字符串,如图3-1所示。运行结果如图3-2所示。
2024-03-27 08:56:44 244
原创 Vue3中v-for循环渲染之v-for与v-if一同使用
v-for与v-if一同使用,当它们处于同一节点上时,v-for的优先级比v-if更高,这意味着v-if将分别重复运行于每个v-for循环中。当只想渲染部分列表选项时,可以使用这种组合方式。【例2.20】 v-for与v-if一同使用(源代码\ch02\2.20.html)。3.x+Element Plus从入门到精通(视频教学版)》,获出版社和作者授权发布。Vue3中v-for循环渲染之v-for与v-if一同使用。在Chrome浏览器中运行程序,结果如图2-28所示。
2024-03-26 08:24:41 254
原创 Vue3中v-for循环渲染之v-for指令遍历对象
3.x+Element Plus从入门到精通(视频教学版)》,获出版社和作者授权发布。【例2.13】 v-for指令遍历对象(源代码\ch02\2.13.html)。【例2.14】 添加第二和第三个参数(源代码\ch02\2.14.html)。要获取选项的索引,可以添加第三个参数。其中object是被迭代的对象,value是被迭代的对象属性的别名。遍历对象的语法和遍历数组的语法是一样的。在Chrome浏览器中运行程序,结果如图2-15所示。在Chrome浏览器中运行程序,结果如图2-16所示。
2024-03-26 08:21:49 349
原创 Vue3使用v-if指令进行条件渲染
在上面的示例中,使用v-if="no"的元素并没有被渲染,使用v-if="ok"的元素正常渲染了。也就是说,当表达式的值为false时,v-if指令不会创建该元素,只有当表达式的值为true时,v-if指令才会真正创建该元素。使用v-else-if和v-else指令时,它们要紧跟在v-if或者v-else-if指令之后。v-else-if指令与v-if指令一起使用,用法与JavaScript中的if…else if类似。在Vue中使用v-if、v-else-if和v-else指令实现条件判断。
2024-03-25 16:59:56 414
原创 Vue.js 3.4的新特性
无论是小型还是大型的 Vue.js 模板,新解析器都能保持2倍的性能提升,同时确保了向后兼容性。而在 Vue.js 3.4 中,优化后的系统确保只有在计算结果实际变化时,相关的效果才会被触发,从而减少了组件的不必要渲染,提升了整体的性能。(2)v-bind 的同名简写功能:Vue.js 3.4引入了 v-bind 的同名简写功能,使得开发者在模板中绑定属性时,可以省略重复的变量名。目前,Vue.js的版本已经更新到3.4,这次更新不仅带来了性能上的飞跃,还引入了许多新特性,进一步优化了开发效率。
2024-03-25 16:54:06 347
原创 Java常见的垃圾回收器GC
它采用标记-清除算法进行垃圾回收,因此很容易产生内存碎片,但是CMS回收器做了一些小的性能优化,优化措施是把未分配的内存空间汇总成一个内存地址列表,当JVM需要分配内存空间时会搜索这个列表,找到符合条件的内存空间来存储这个对象,如果寻找不到符合条件的内存空间,就会产生Full GC。这是JVM新推出的垃圾回收器,同时支持新生代和老年代回收,能充分利用多核CPU的硬件优势,可以并行来缩短用户线程停顿的时间,也可以并发让垃圾收集与用户程序同时进行。G1同时采用标记-整理和复制等多种回收算法进行垃圾回收。
2024-03-21 09:16:12 318 1
原创 如何读懂Java GC日志
(1)“Heap before GC invocations=1 (full 0)”描述了发生了一次GC垃圾回收,“full 0”表示发生了0次Full GC,在之后描述了发生GC垃圾回收之前和之后年轻代区域(PSYoungGen)、eden区域(eden space)、From Survivor空间区域(from space)、To Survivor空间区域(to space)、年老代区域(ParOldGen)、元数据区域(Metaspace)、class space 的内存空间使用情况。
2024-03-21 09:08:05 1162
原创 Vue3案例——使用组件创建树状项目分类
本文节选自《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》,获出版社和作者授权发布。树状项目分类是Web应用中心常见的信息展示方式,本案例使用组件创建树状项目分类。运行上述程序,结果如图6-23所示。
2024-03-20 08:22:06 348
原创 Vue3组件的注册
在大多数系统网页中,网页都包含header、body、footer等部分,很多情况下,同一个系统中的多个页面,可能仅仅是页面中body部分显示的内容不同,因此,这里就可以将系统中重复出现的页面元素设计成一个个组件,当需要使用的时候,引用这个组件即可。需要注意一个问题,当采用小驼峰(myCom)的方式命名组件时,在使用这个组件的时候,需要将大写字母改为小写字母,同时两个字母之间需要使用“-”进行连接,例如<my-com>。组件是Vue.js中的一个重要概念,它是一种抽象,是一个可以复用的Vue.js实例。
2024-03-20 08:18:30 573
原创 如何查看MySQL数据库的连接数
SHOW PROCESSLIST默认情况下只显示前100条记录的详情,如果需要显示超过100条的所有记录,可以通过执行SHOW FULL PROCESSLIST命令来查看,如图6-1-2所示。连接数是指用户已经创建多少个连接,也就是MySQL中通过执行 SHOW PROCESSLIST命令输出数据库中运行着的线程个数的详情,如图6-1-1所示。show global status like 'max_used_connections' 命令可以查询当前已经使用过的最大连接数,如图6-1-4所示。
2024-03-19 07:47:50 450
原创 MySQL中数据库表的监控
如果该值很高,则可能存在很多查询需要进行整表扫描,或者查询时一些表的关联连接没有正确使用主键或者索引。Handler_read_rnd_next:从数据库数据文件中读取下一行的请求数。如果越低,表示索引的利用很低。(4)查看数据库中的表被扫描的情况:show global status like 'handler_read%',如图6-1-8所示。Handler_read_rnd_deleted:从数据库数据文件中读取被删除记录行的请求数。Handler_read_last:读取索引中最后一个键的请求数。
2024-03-19 07:43:32 663
原创 Tomcat容器的I/O分析与调优
(4)I/O多路复用:在传统的I/O处理方式中,每来一个I/O请求就需要开启一个进程或者线程来处理,如果是在高并发的调用方式中,就需要开启大量的进程和线程来进行I/O处理,而大量的进程或者线程必然会需要大量的服务器硬件资源来支撑。I/O多路复用的处理方式很好地解决了这个问题,只需要开启单个进程或者线程,通过记录I/O流的状态来同时管理多个I/O,就可以有效地节省服务器资源,以及减少线程过多时带来的服务器CPU的中断和切换,从而提高资源的有效利用,也可以提高服务器的吞吐能力。
2024-03-18 10:35:10 927
原创 性能分析调优模型
(1)网络分发:网络分发是高速发展的互联网时代常用的降低网络拥塞、快速响应用户请求的一种技术手段,最常用的网络分发就是CDN(Content Delivery Network,即内容分发网络),它依靠部署在世界各地的边缘服务器,通过中心平台的负载均衡、源服务器内容分发、调度等功能模块,使世界各地用户就近获取所需内容,而不用每次都到中心平台的源服务器获取响应结果。比如,南京的用户直接访问部署在南京的边缘服务器,而不需要访问部署在遥远的北京的服务器。(2)Web服务器:Web服务器用于部署Web服务。
2024-03-18 10:25:46 486
原创 常见的软件系统性能测试指标
针对并发用户我们举例说明。每个请求或者事务对系统资源的消耗,用来衡量请求或者事务对资源的消耗程度,例如对CPU的消耗可以用占用CPU的秒数或者核数来衡量,对内存的消耗可以用内存使用率来衡量,对IO的消耗可以用每秒读写磁盘的字节数来衡量。在真实的用户操作中,用户的每个相邻操作之间都会有一定的间隔时间(在性能测试中,我们称为用户思考时间),所以,并发用户一般有绝对并发和相对并发之分,绝对并发是指某个时间点同时一起向服务器发出请求的并发用户数,相对并发是指一段时间内向服务器发出请求的并发用户总数。
2024-03-15 16:30:13 971
原创 Vue3案例——使用监听器设计购物车效果
在Chrome浏览器中运行程序,输入商品名称后多次单击“加一个”按钮,然后单击“加入购物车”按钮,结果如图5-25所示。本文节选自《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》,获出版社和作者授权发布。(2)对购物车数据进行侦听,每次单击“加入购物车”按钮,会显示商品名称和数量。【例5.18】 设计购物车效果(源代码\ch05\5.18.html)。(1)当用户每次修改预购买商品的名称的时候,都需要清空购买数量。Vue3案例——使用监听器设计购物车效果。
2024-03-14 11:04:04 433
原创 Vue3案例——设计用户注册页面
使用Vue.js设计用户注册页面比较简单。通过使用v-model指令对表单数据自动收集,从而能够轻松实现表单输入和应用状态之间的双向绑定。案例代码如例4.15所示。在Chrome浏览器中运行程序,输入注册的信息后,单击“注册”按钮,按F12键打开控制台并切换到Console选项卡,可以看到用户的注册信息,如图4-21所示。本文节选自《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》,获出版社和作者授权发布。【例4.15】 设计用户注册页面(源代码\ch4\4.15.html)。
2024-03-14 10:58:28 345
原创 Vue3案例——设计隔行变色的商品表
该案例主要是设计隔行变色的商品表,针对奇偶行应用不同的样式,然后通过v-for指令循环输出表格中的商品数据。案例代码如例3.16所示。本文节选自《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》,获出版社和作者授权发布。【例3.16】 style数组语法(源代码\ch03\3.16.html)。在Chrome浏览器中运行程序,效果如图3-19所示。案例——设计隔行变色的商品表。
2024-03-12 11:23:17 293
原创 Vue3的条件渲染
在上面的示例中,使用v-if="no"的元素并没有被渲染,使用v-if="ok"的元素正常渲染了。也就是说,当表达式的值为false时,v-if指令不会创建该元素,只有当表达式的值为true时,v-if指令才会真正创建该元素。这与v-show指令不同,v-show指令不管表达式的真假,元素本身都会被创建,显示与否是通过CSS的样式属性display来控制的。使用v-else-if和v-else指令时,它们要紧跟在v-if或者v-else-if指令之后。2. v-else-if/v-else指令。
2024-03-12 08:27:32 975
原创 Vue3案例——通过指令实现下拉菜单效果
网站主页中经常需要设计下拉菜单,当鼠标移动到某个菜单上时会弹出下拉子菜单列表,每个子菜单项可以链接到不同的页面,当鼠标离开菜单列表时,子菜单项会被隐藏掉。在Chrome浏览器中运行程序,按F12键打开控制台并切换到Elements选项卡,结果如图2-13所示。在Chrome浏览器中运行程序,当鼠标放置在“经典图书”菜单项目时,结果如图2-30 所示。【例2.12】 v-for指令遍历数组(源代码\ch02\2.12.html)。下面看一个示例,使用v-for指令循环渲染一个数组。
2024-03-12 08:21:49 382
原创 卷积神经网络的原理
采用较通俗的语言概括,卷积神经网络是一个层级递增的结构,也可以将其认为是一个人在读报纸,首先一字一句地读取,之后整段地理解,最后获得全文的意思。池化层的作用是对获取的图像特征进行缩减,从前面的例子中可以看到,使用[2,2]大小的矩阵来处理特征矩阵,使得原有的特征矩阵可以缩减到1/4大小,特征提取的池化效应如图7-10所示。需要说明的是,在这个卷积处理步骤,也就是对图片进行卷积化处理时,卷积算法对所有分解后的局部特征进行同样的计算,这个步骤称为“权值共享”。图7-7展示了一幅图片进行卷积神经网络处理的过程。
2024-03-07 16:53:52 602
原创 实战:循环神经网络与文本内容情感分类
在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能为力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再是无连接的,而是有连接的,并且隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出,这种传统的神经网络模型如图8-2所示。
2024-03-07 16:45:50 1086
原创 基于深度学习的语音识别的未来
同时,随着自然语言处理技术的不断发展,基于深度学习的语音识别技术将更加注重与自然语言处理的结合,实现更加智能的语音交互。此外,基于深度学习的语音识别技术还将促进多模态信息融合技术的发展,将语音识别与其他信息来源进行结合,提高语音识别的准确率和鲁棒性。基于深度学习的语音识别技术的优点在于,它可以自动提取语音特征,提高语音识别的准确率和鲁棒性。同时,随着自然语言处理技术和多模态信息融合技术的发展,基于深度学习的语音识别技术还将实现更加智能的语音交互,为人们的生活和工作带来更多的便利和价值。
2024-03-06 10:10:42 558
原创 实战:基于特征词的语音唤醒
本章前面介绍了纯理论知识,目的是阐述语音识别的方法。接着搭建了开发环境,让读者可以动手编写代码。下面以识别特定词为例,使用深度学习方法和Python语言实现一个实战项目——基于特征词的语音唤醒。说明:本例的目的是演示一个语音识别的Demo。如果读者已经安装开发环境,可以直接复制代码运行;如果没有,可学习完本章后再回头练习。我们会在本节中详细介绍每一步的操作过程和设计方法。
2024-03-06 10:08:09 875
原创 二进制漏洞挖掘之ret2text栈溢出
(2)执行“gcc -m32 -fno-stack-protector ret2text.c -o ret2text”命令,编译程序,再使用gdb调试程序,使程序运行到read函数,执行“cyclic 200”命令,生成200个字符。执行“python ret2text.py”命令,运行脚本,获取系统shell,再执行“ls”命令,测试shell能否正常使用,结果如图11-32所示。由图可知,ebp地址存储的字符为“eaaa”,执行“cyclic -l eaaa”,结果如图11-30所示。
2024-01-31 19:53:31 526
原创 二进制漏洞挖掘之整数溢出
因此,任何大于无符号字符型的最大上限值256都会导致整数溢出,所以,当密码长度是261,将被截断并存储为5,绕过“if (passwd_len >= 4 && passwd_len <= 8)”代码的边界检查,从而实现利用“strncpy(buf1, buf, 100)”代码实现栈溢出。结果如图11-19所示。执行“python vulInt.py”命令,运行脚本,获取系统shell,再执行“ls”命令,测试shell能否正常使用,结果如图11-25所示。(5)继续运行程序,结果如图11-22所示。
2024-01-31 17:29:49 788
原创 嵌入式Linux设备驱动的分类
另一种方法是以模块的方式动态地加载到内核中:把代码编译成模块的形式,在需要的时候才加载到内核中,在不需要的时候卸载出来,这样的设计能够保证内核代码旳纯洁性,由于模块可以单独编译,这就使得内核可以快速进行编译,此外,由于可以在不重新启动内核的情况下把一个模块加载、卸载多次,因此对模块进行调试也比对内核进行调试效率要高得多。字符设备是以字节为单位逐个进行I/O操作的设备,在对字符设备发出读写请求时,实际的硬件I/O紧接着就发生了,一般来说字符设备中的缓存是可有可无的,而且也不支持随机访问。
2023-12-23 09:15:04 103
原创 Linux设备驱动概述
要支持某种设备,就必须提供这种设备的控制代码,如果要把所有设备的驱动程序都写在操作系统内核中,就必然会使内核变得过分庞大,这不利于内核的开发和维护。现在的处理器都具有保护系统软件不受应用程序破坏的功能,实现这个功能的方法是在处理器中实现不同的操作级别,不同的级别具有不同的功能,Linux使用处理器的两种级别,应用程序运行在最低级别,即用户空间(或用户态),内核运行在最高级别,即内核空间(或内核态)。虽然驱动程序运行在内核态,但是它不能使用所有的内核服 务,可以使用的内核服务也必须定义在一个接口函数中。
2023-12-23 08:54:06 174
原创 基于ChatGLM搭建专业领域问答机器人的思路
我们的目标就是希望ChatGLM能够根据所提供的文本资料回答对应的问题,而问题的答案应该就是由文本内容所决定的。本节将考察ChatGLM在专业领域的问答水平,并尝试解决此方面的问题。这是一份最常见的生活类医学问答,问题是“小孩牙龈肿痛服用什么药”,在这里我们使用已有的ChatGLM完成此问题的回答,结果如图17-2所示(注意,在使用ChatGLM回答问题时,结果会略有不同)。一个简单的办法就是将全部文档发送给ChatGLM,然后通过Prompt的方式告诉ChatGLM需要在发送的文档中回答特定的问题。
2023-12-22 16:02:00 107
原创 大模型ChatGLM下载、安装与使用
需要注意的是,即使问题是一样的,但是回答也有可能不同,因为我们所使用的ChatGLM是生成式模型,前面的生成直接影响了后面的生成,而这一点也是生成模型不好的地方,前面的结果有了波动,后面就会发生很大的变化,会产生滚雪球效应。这是一个经典的文本抽取任务,希望通过ChatGLM抽取其中的内容,在这里我们使用了一个Prompt(中文暂时称为“提示”),Prompt是研究者为了下游任务设计出来的一种输入形式或模板,它能够帮助ChatGLM“回忆”起自己在预训练时“学习”到的东西。最终展示的结果如图16-6所示。
2023-12-22 15:56:16 741
原创 React组件的生命周期和执行时机
生命周期的概念在各个领域中都广泛存在,广义来说生命周期泛指自然界和人类社会中各种客观事物的阶段性变化及其规律,在React框架中则用来描述组件挂载(创建)、更新(存在)、卸载(销毁)3个阶段。生命周期的每个阶段总是伴随着一些方法的调用,这些方法就是生命周期的钩子函数,它们为开发人员在不同阶段操作组件提供了执行时机。
2023-12-21 13:38:32 186
原创 React组件状态管理
React组件的状态管理是一个很重要的内容。广义来讲,React组件的状态还1包括传入React的数据,例如某个组件要展示列表,列表的数据也是该组件的状态。没有数据的项目是没有实际意义的,React的状态管理就是解决组件内部、组件之间的通信。l 第28行,onCancel是antd的Modal组件自定义的属性,Modal是一个弹窗,单击弹窗中的取消按钮时调用modalCancel函数。相反,React将描述组件的不同视觉状态的UI(“初始状态"“输入状态"和“成功状态"),通过用户输入触发状态更改。
2023-12-21 13:33:45 374
原创 大模型ChatGLM简介及应用情景
标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62亿个参数的ChatGLM-6B虽然规模不及千亿模型的ChatGLM-130B,但大大降低了推理成本,提升了效率,并且已经能生成相当符合人类偏好的回答。具体来说,ChatGLM-6B具备以下特点。较低的部署门槛:在FP16半精度下,ChatGLM-6B至少需要13GB的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8)和 6GB(INT4),使得 ChatGLM-6B 可以部署在消费级显卡上。
2023-12-20 13:38:34 487
原创 ResNet实战:CIFAR-10数据集分类
注意,一个训练批中的各类图像的数量并不一定相同,总的来看,训练批每一类都有5000幅图,如图7-9所示。其他层次的模型请读者自行尝试,根据读者自己不同的硬件设备,模型的参数和训练集的batch_size都需要作出调整,具体数值请根据需要对它们进行设置。可以看到,经过5轮后,模型在训练集的准确率达到0.99,在测试集的准确率也达到0.98,这是一个较好的成绩,可以看到模型的性能达到较高水平。labels:对应的值是一个长度为10000的列表,每个数字取值范围为0~9,代表当前图片所属的类别。
2023-12-20 13:31:12 136
原创 前端开发中的webpack打包工具
但随之而来的是网站代码的体积越来越大,而且JavaScript版本不断升级,新的API层出不穷,在开发人员编写的代码类型和浏览器能够理解的代码类型方面也存在巨大差异。Gulp被设计得非常简单,只通过5种方法就可以支持几乎所有的构建场景:gulp.task用于注册一个任务,gulp.run用于执行任务,gulp.watch用于监听文件的变化,gulp.src用于读取文件,gulp.dest用于写文件。Grunt的优点是灵活,它可以执行自定义的任务,并且有大量的可复用的插件封装好了常见的构建任务。
2023-12-18 16:12:10 290
原创 三大主流前端框架介绍及选型
React是单向响应的数据流,采用单向数据绑定,即Model(数据)的更新会触发View(页面)的更新,而View的更新不会触发Model的更新,它们的作用是单向的。Angular的模板功能强大、丰富,并且还引入了Java的一些概念,是一款大而全的框架,更侧重于大型前端工程的构建,为开发人员屏蔽项目构建底层的细节提出了自己的一套解决方案。Angular诞生于2009年,其出现的时间要早于React和Vue,它是一款来自谷歌的开源的Web前端框架,Angular的官方网站如图2.3所示。
2023-12-18 16:04:29 1865 1
PHP+MySQL动态网站开发全程实例
2012-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人