作业报告
文章平均质量分 83
该专栏放置我的在校期间的专业课的实验、学习报告等一系列的汇总,包括:编译原理,JavaWeb,计算机操作系统等...
慢热型网友.
顺境熬秉性 逆境熬心志.
展开
-
企业级开发环境配置(JDK、tomcat、Maven、Git、IDEA个性化界面的设定)
具体修改看这篇——>原创 2023-06-21 18:56:14 · 1012 阅读 · 0 评论 -
Docker的安装部署以及配置的操作流程(图文)
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。第二种方式:Docker 以 centos 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。配置Docker加速器,将会提升在国内获取Docker官方镜像的速度,否则后面下载镜像的过程会很慢,甚至有可能无法下载镜像。,如果从结果中看到了如下内容,说明配置成功。原创 2023-06-21 18:18:49 · 6660 阅读 · 0 评论 -
【高性能计算】监督学习之支持向量机分类实验
然后,计算测试样本与最优超平面之间的距离(距离的计算是以超平面上的支持向量计算的)。(3) 如果 kernelType 为 ‘rbf’,那么就使用径向基函数(RBF)核计算 kernelValue,这里计算每个训练样本与待计算样本之间的欧氏距离,并根据参数 sigma 计算出高斯核函数的值。总之,SVM 通过特征映射和最优超平面的选择,将不同类别的样本点分开,并在测试时,通过计算距离来对新的样本点进行分类。需要注意的是,SVM的参数设定与数据集密切相关,需要针对不同的数据集进行调整。原创 2023-06-21 17:49:15 · 1838 阅读 · 0 评论 -
【高性能计算】无监督学习之层次聚类实验
使用sklearn库中的load_iris函数生成一个鸢尾花数据集,并使用自己实现的层次聚类算法和sklearn库中的基于KMeans算法的聚类方法对该数据集进行聚类,最终将聚类结果可视化展示出来。在分裂过程中,先确定一个代表簇,然后将其他数据点与该代表簇进行距离度量,并将距离最远的点分裂出一个新的簇,直到达到预定的簇数。通过对比两种聚类方法的结果,可以看出它们对于数据集的划分存在差异,因为聚类算法的性能和效果受到很多因素的影响,选择适当的聚类算法和参数对于得到理想的聚类结果很关键。原创 2023-06-21 17:28:32 · 1565 阅读 · 0 评论 -
【高性能计算】基于K均值的划分聚类实验
将y_corrected转换为numpy数组类型,并使用sklearn.metrics模块中的accuracy_score()函数,计算真实标签Y和校正后的标签y_corrected之间的精度,并将结果存储在accuracy_corrected变量中。k均值聚类将样本集合划分为k个子集,构成k个类,将n个样本分到k个类中,每个样本到期所属类的中心的距离最小。然后更新每个类的样本的均值,作为类的新中新;对固定的类中心,计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果。原创 2023-06-21 16:47:07 · 1175 阅读 · 0 评论 -
【MongoDB大作业】MongoDB服务器的部署
(1)在/opt/servers/mongodb-demo/mongodb目录下执行“mkdir -p data/db”命令,创建数据文件存放目录。将路径“/opt/servers/mongodb-demo/mongodb/bin”添加至PATH环境变量中,使得在任何路径下都可以执行bin目录下的应用程序。(1) 登陆NoSQL_02,执行“vi /etc/sysconfig/network-scripts/ifcfg-ens33”命令编辑网卡配置文件,将IP地址修改为192.168.80.135。原创 2023-06-21 11:18:25 · 2025 阅读 · 0 评论 -
【MongoDB】五、MongoDB分片集群的部署
2、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz01)4、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz02)2、在服务器nosql01的配置服务器、分片服务器以及路由服务器的日志目录下,创建对应的日志管理文件。原创 2023-06-21 10:49:33 · 4958 阅读 · 3 评论 -
【MongoDB】四、MongoDB副本集的部署
在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。(1)分别在三台服务器XXX01、XXX02和XXX03上以副本集模式启动MongoDB服务。(1)分别在三台服务器zrz01、zrz02和zrz03上以副本集模式启动MongoDB服务。能够通过部署副本集理解副本集机制,从而解决大数据项目中数据丢失的问题。(2)在服务器XXX01的MongoDB客户端中执行副本集初始化操作。(2)在服务器zrz01的MongoDB客户端中执行副本集初始化操作。原创 2023-06-21 09:52:21 · 2116 阅读 · 0 评论 -
【MongoDB】三、使用Java连接MongoDB
在主函数中连接数据库stu,在数据库stu中新建集合course,删除新建集合course,在student集合中插入文档{_id:“1016”,name:“唐开平”,sex:“女”,age:18,major:“软件技术”,credits:42,score:74},将_id为1014的学生成绩修改为80,删除_id为1012的学生。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。4、尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。原创 2023-06-21 08:42:05 · 3650 阅读 · 1 评论 -
【高性能计算】浅析高性能计算的优点、缺点以及未来的发展方向
未来,软件技术将在高性能计算领域发挥更重要的作用,未来会有更多的开源软件和工具,以及更加灵活和可扩展的编程模型,从而降低软件的复杂度,并提高应用的效率和可靠性。通过云计算和边缘计算的融合,可以实现资源的共享和整合,从而提高数据处理和分析的效率和质量。综上所述,高性能计算未来将以芯片技术进步、软件技术创新、数据中心优化、云计算和边缘计算融合、量子计算技术发展等为重要方向,以实现更高效、可靠、安全和智能化的数据处理和分析,从而推动科学、工程和医学等领域的发展。这限制了高性能计算的普及和推广。原创 2023-06-14 10:41:46 · 1744 阅读 · 0 评论 -
【高性能计算】经典的串行排序算法和并行排序算法
快速排序也可以并行化处理,它是一种基于分治策略的排序算法,常用的方法是选取一个枢纽元素,将数组划分为两个部分,并将小于枢纽元素的元素放入左侧部分,将大于枢纽元素的元素放入右侧部分。选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。归并排序也是一种常见的排序算法,它的核心思想是将待排序数组分成若干个子数组,对每个子数组进行排序,然后再将已经有序的子数组合并成一个有序的数组。冒泡排序是一种简单的排序算法。原创 2023-06-14 10:33:33 · 2377 阅读 · 0 评论 -
【大数据处理与可视化】八、文本数据分析
词云是对网络中出现的频率比较高的“关键词”予以视觉上的突出,形成关键词渲染,从而过滤掉大量的文本信息,使得浏览网页的人一眼扫过文本就可以领略文本的主旨。首先获取某网站中用户对某卫衣的评价,然后从这些评论文本中筛选出现频率较高的一些词语,并使用词云的方式进行展示,让有意购买此商品的用户能够快速地了解其他用户对该商品的感受,并为他们提供有效的参考依据。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。4、尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。原创 2023-05-29 12:51:25 · 1661 阅读 · 2 评论 -
【大数据处理与可视化】七、时间序列分析
股票收盘价分析:本实验以“五粮液”股票数据为例,结合时间序列及ARIMA模型对股票收盘价进行分析;使用2003至2018年的股票数据,其中2014-2017年的数据为训练数据,通过对这些数据的训练,实现对2018年1月至3月的收盘价进行预测,并将预测的结果与爬到的真实股价进行绘制对比。通过本次实验,我能够熟练运用时间序列分析和ARIMA模型对数据进行分析。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。1、有疑问前,知识学习前,先用搜索。原创 2023-05-29 11:32:58 · 2680 阅读 · 3 评论 -
【大数据处理与可视化】六、数据可视化
找出河北省占地面积和游客数量位居前三的景点.这里使用了"总面积","游客量"两列数据.为了能够直观的看到这里两列数据,使用直方图.x轴: 景点的名称y轴: 表示占地面积和游客数量从生成的条形图可以看出,接待游客数量处于前三名的景点分别是:秦皇岛北戴河,西柏坡-天戴山,娲皇宫景点占地面积前三分别是:避暑山庄外八庙,野三坡,秦皇岛北戴河。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。3.能够通过借助网络资源,通过自主学习解决数据可视化中遇到的问题。原创 2023-05-29 11:18:37 · 2746 阅读 · 0 评论 -
【大数据处理与可视化】五、数据聚合与分组运算
通过本次实验,我能熟练运用groupby()方法对数据进行分组,能够熟练运用统计方法和聚合操作对数据进行聚合,及其它常用的分组级运算方法。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。4、尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。(2)统计男篮运动员的年龄、身高、体重的极差值。(1)统计篮球运动员的平均年龄、身高、体重。3、选择交流平台,如QQ群,网站论坛等。1、有疑问前,知识学习前,先用搜索。(3)统计篮球运动员的体质指数。原创 2023-05-29 11:10:48 · 1983 阅读 · 0 评论 -
浅谈国内数据安全现状及未来趋势
2019年4月8日上午,据美国科技媒体ZDNet报道,有研究人员发现中国企业2019年前3个月出现数起简历信息泄露事故,涉及5.9亿份简历。大多数简历之所以泄露,主要是因为MongoDB和ElasticSearch服务器安全措施不到位,不需要密码就能在网上看到信息,或者是因为防火墙出现错误导致。中国 企业 简历 数据库 信息泄露。数据安全的定义,是指通过采取必要措施,确保数据处于有效保护和合法利用的状态,以及具备保障持续安全状态的能力。原创 2023-05-19 09:04:28 · 1474 阅读 · 0 评论 -
【大数据处理与可视化】四、数据预处理
预处理部分地区信息:给定北京和天津地区的统计信息,这些数据中都或多或少的存在一些问题,如重复的数据、缺失的数据。请使用Pandas对爬取的数据进行预处理操作,具体包括:检查重复数据,一旦发现有重复的数据,就需要将其进行删除。检查异常,一旦发现数据中存在异常,通常先要对原始数据进一步确认,如果是错误的数值,则直接使用正确的数值进行替换。通过本次实验,我能熟练运用数据清洗的常见操作检查和处理各类有问题的数据,其中包括重复值的查询和处理,缺失值的查询和处理,基于three_sig和基于箱型图的异常值的查询处理。原创 2023-05-03 22:01:48 · 2671 阅读 · 1 评论 -
【大数据处理与可视化】三 、Pandas库的运用
1. 能够熟练运用pandas库创建Series对象和DataFrame对象;2. 能够熟练运用Series对象和DataFrame对象的索引操作和排序操作;3. 能够熟练运用pandas库,进行统计计算和统计描述;4. 能够熟练运用pandas库进行读写数据操作原创 2023-03-24 11:32:28 · 2592 阅读 · 0 评论 -
【大数据处理与可视化】二 、Numpy科学计算库
通过本次实验,我了解了数组的创建以及相关方法的使用,对数组的索引和切片有了一定的掌握。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。9、分别创建一个5x3的矩阵和一个3x2的矩阵,然后使5x3的矩阵乘以3x2的矩阵,并输出结果。5、创建一个表示国际象棋棋盘的8*8数组,其中,棋盘白格用0填充,棋盘黑格用1填充。矩阵元素值全为0,调用numpy库中zeros(行数,列数)方法。4、创建一个数组,数组的shape为(5,0),元素都是0。原创 2023-03-09 22:57:36 · 3207 阅读 · 0 评论 -
【大数据处理与可视化】一 、大数据分析环境搭建(安装 Anaconda 3 开发环境)
安装Anaconda3开发环境,根据不同的操作系统,掌握在不同系统上安装Anaconda3的不同方法,并进行实际操作,达到熟练掌握的标准;安装完成后,启动jupyter notebook,分别在code模式下输出“hello world”,和在Markdown模式输出 “一级标题”、“二级标题”、“三级标题”原创 2023-03-09 22:44:57 · 978 阅读 · 0 评论 -
【MongoDB】一、MongoDB的安装与部署
通过本次实验,我熟练地进行了MongoDB的安装及部署,以及流畅使用MongoDB图形化管理工具对数据库、集合、文档及逆行操作,并且在MongoDB安装过程中寻找相关问题的解决方案。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。原创 2023-02-26 22:19:04 · 1350 阅读 · 0 评论 -
【软件测试】针对自己开发(或常用)的一个Web系统,结合所学软件测试相关技术,评价项目的可用性、可靠性和安全性
针对自己开发(或常用)的一个Web系统,结合所学软件测试相关技术,评价项目的可用性、可靠性和安全性。要求包括:1.项目简介;2.可用性、可靠性和安全性测试时,有没有使用工具,测试了哪些内容,结果如何。本项目为本人应用所学的WebUI、JDBC和Servlet知识,结合实际场景,为某商店设计在线销售Web应用的数据管理功能,设计界面包括商品类型管理、商品管理、订单管理、会员管理等数据管理功能,能够通过Servlet更新和查询数据,更新和查询结果暂通过控制台显示。原创 2022-11-04 22:43:41 · 671 阅读 · 1 评论 -
【软件测试】使用边界值分析法和等价类划分法计算佣金
请通过黑盒测试的边界值分析法和等价类划分法来进行问题的解析并编写用例。• 某公司生产机器人及部件,机器人包含3大部件:主控模块、通信模块及执行模块。该公司的代理商负责销售机器人整机和部件;公司要求每个代理商每月最少销售一整套机器人(即三类部件至少各销售一个);受限于公司产能,公司每个月最多给每个代理商提供80个主控模块、90个通信模块以及100个执行模块。每个主控模块售价90元、每个通信模块售价60元、每个执行模块售价50元。到6月末的时候,公司会根据代理商的销售情况计算佣金。原创 2022-11-04 22:23:50 · 3464 阅读 · 3 评论 -
【已解决】Eclipse在创建Dynamic Web Project时没有web.xml文件?
今天在学习SpringMVC时,使用Eclipse创建Dynamic Web Project后发现没有自动生成的web.xml配置文件,还要自己去之前的项目粘贴,非常麻烦,所以在网上查到解决方案后来分享我知道的以下三种解决方案。原创 2022-09-08 16:22:37 · 1284 阅读 · 0 评论 -
【Python】利用字符串切片输出回文诗
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。切片的语法:[起始:结束:步长]格式: [start:end :step][:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串[start:] 从start 提取到结尾[:end] 从开头提取到end - 1[start:end] 从start 提取到end - 1[start:end:step] 从start 提取到end - 1,每step个字符提取一个。...原创 2022-08-26 11:59:24 · 2384 阅读 · 0 评论 -
【计算机导论调研报告】AI技术的发展
随着计算机技术的飞速发展,人工智能也取得了极大的发展,并且开始应用到我们生活中的方方面面。伴随着研究的深入,也许我们正要进入一个人工智能时代。原创 2022-08-08 12:37:41 · 1960 阅读 · 0 评论 -
【计算机导论调研报告】计算机从业人员的职业道德
随着计算机的发展和社会的变革,计算机这一职业变得越来越热门,并且在生活中的方方面面都可以看到计算机技术人员的身影,凡事都有两面性,计算机的从业人员在工作中是否遵循了一个从业人员应遵循的职业道德也成为了当今社会讨论的问题。......原创 2022-08-08 12:29:44 · 2348 阅读 · 0 评论 -
浅谈软件定义网络SDN
软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学clean-slate课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能,为核心网络及应用的创新提供了良好的平台。 SDN字面意思是软件定义网络,其试图摆脱硬件对网络架构的限制,这样便可以像升级、安装软件一样对网络进行修改,便于更多的APP(应用程序)能够快速部署到网络原创 2022-06-12 17:42:44 · 4338 阅读 · 0 评论 -
浅谈计算机网络的未来发展趋势
计算机网络从诞生到现在,越来越多的应用在生产、生活的方方面面,尤其是云计算、大数据、人工智能和物联网等技术的出现和迅猛发展,更是扩展了网络的功能和应用。关键词:网络,未来,发展趋势。 计算机网络是一种涉及多门学科、高科技的应用技术,它涉及超级计算机技术、网络技术、中间件技术和计算机科学研究与应用技术等。计算机网络是推动信息化、数字化和全球化的基础和核心,可实现计算资源、存储资源、数据资源、信息资源、知识资源等全面共享。...原创 2022-06-12 17:32:06 · 13466 阅读 · 1 评论 -
【数据结构】哈希表的概念及应用
哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地址,在计算机操作系统中,通过任务管理器能查看到系统为每个运行的程序(进程),分配的进程识别号(PID),假设当前系统中有7个进程处在运行状态,且它们对应的进程编号(PID)构成了一个{7,8,30,11,18,9,14}值的集合,请采用哈希函数:H(key)=(key*3) % 7,处理冲突采用线性探测法。...原创 2022-06-12 14:41:19 · 2843 阅读 · 0 评论 -
【数据结构】栈的应用之列车调度问题
某铁路进行列车调度时,常把站台设计成栈式结构,如图1所示。设有编号为1,2,3,4的4辆列车,顺序开入栈式结构的站台, 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;...原创 2022-06-12 14:19:26 · 3882 阅读 · 0 评论 -
【数据结构】图的操作算法
1. 编写一个程序,输出下面带权有向图的邻接表,并根据该邻接表,实现图的遍历运算,具体要求如下:(1)从顶点0开始的深度优先遍历序列(递归算法) (2)从顶点0开始的广度优先遍历序列2. 采用狄克斯特拉算法(Dijkstra),输出下面有向带权图G中从顶点0到其它各顶点的最短路径和最短路径长度。...原创 2022-06-12 14:10:03 · 582 阅读 · 0 评论 -
【数据结构】二叉树的操作算法
实现二叉树的如下操作,二叉树如下图所示。(采用二叉链存储结构实现)(1)输出二叉树b;(2)输出H节点的左、右孩子节点值;(3)输出二叉树的深度;(4)输出二叉树b的节点个数;(5)输出二叉树b的叶子节点个数。具体效果如下:实现二叉树的如下操作,先序遍历、中序遍历和后序遍历的递归算法,二叉树如下图所示。(采用二叉链存储结构实现)(1)采用括号表示法,构建如下二叉树,并输出二叉树b;(2)采用递归算法,输出二叉树的先序序列;(3)采用递归算法,输出二叉树的中序序列;(4)采用递归算法,原创 2022-06-12 13:34:14 · 907 阅读 · 0 评论 -
【数据结构】串和稀疏矩阵的基本运算
1. 实现顺序串(SqString.cpp)中各种基本运算的算法,具体操作要求如下: (1)初始化串并赋值 (2)串的输出 (3)串的长度 (4)串的插入,串的删除,串的替换2. 稀疏矩阵的存储及基本运算。(1)针对给出的两个稀疏矩阵a和b,分别输出各自的三元组表示形式(2)实现a,b稀疏矩阵的求和运算,并以三元组的形式表示 ...原创 2022-06-12 13:30:08 · 714 阅读 · 1 评论 -
【数据结构】栈和队列的应用
1.实现顺序栈各种基本运算的算法,具体操作要求如下: (1)初始化栈,并判断栈是否为空; (2)对a,b,c,d,f五个字符元素模拟进栈操作;并判断栈是否为空; (3)取出栈顶元素;(4)对a,b,c,d,f五个字符元素做依次出栈操作,并判断栈是否为空;(5)释放栈。 ...原创 2022-06-12 13:12:33 · 430 阅读 · 0 评论 -
【数据结构】线性表的操作算法2
(1)建立具有10个整型元素(1,3,2,9,0,4,7,6,5,8)的单链表,具体要求如下: ①采用尾插法建立单链表(推荐)②头插法建立单链表 ③删除最大值节点,并输出。(2)解决约瑟夫问题,具体要求: ①建立循环单链表 ②按照规则删除节点,并输出。(3)对单链表中的元素进行排序。...原创 2022-06-12 13:06:50 · 191 阅读 · 0 评论 -
【数据结构】线性表的操作算法
(1)创建一个线性表,将给定的含有n个元素的数组中的每个元素依次放入到顺序表中,并将n赋给顺序表的长度成员。算法如下(2)初始化线性表(3)销毁线性表,释放线性表L所占用的内存空间(4)判断是否为空表,若L为空表则返回true,否则返回false(5)求线性表的长度ListLength(L)(6)输出运算表(DispList) 该运算当线性表L不为空时,顺序显示L中各元素的值(7)求某个数据元素的值GetElem(L,i,&e)...原创 2022-06-12 12:58:27 · 3459 阅读 · 0 评论 -
【软件工程】图书馆自习室及座位管理系统的分析与设计
该系统需要解决本学校学生在图书馆盲目寻找自习室教室及座位的问题。学生通过该系统可以实时查看图书馆自习室与座位的使用情况,使学生方便、快捷地在图书馆查找空余的座位。图书馆领导及管理人员也可以通过本系统查询自习室的使用人次和座位的预定情况进行统计,及时制定行营的对策,科学合理的配置相关资源。 本系统设计的最终目的是实现对座位的有序高效管理。为此,在系统设计时,应做好用户需求调查,充分了解学生的实际需求,保证系统具有良好的易用性、稳定性和扩展性。......原创 2022-06-11 12:44:41 · 19308 阅读 · 5 评论 -
【软件工程大作业】对于一款具有个性化推荐功能的购物网站的可行性分析
可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。经过对此项目进行详细的调查研究,初步拟定系统的可行性报告,对软件开发中将要面临的问题及其解决方案进行初步设计以及合理安排,明确开发风险及其所带来的经济效益。......原创 2022-06-06 10:53:16 · 3079 阅读 · 0 评论 -
【软件工程大作业】软件项目管理之成本管理
挣值分析是一种进度测量技术、可用来估计和确定变更的程度和范围。同时,它是一种以预算和费用来衡量工程的进度。PV:计划工作量的预算费用PV(BCWS),即完成工程某阶段计划的工作量所需的预算工时(费用),即PV(BCWS)=计划工作量预算定额;EV:已完成工作量的预算费用EV(BCWP)即工程某阶段实际花费的工作量所需的工时(费用),即EV(BCWP)=实际工作量预算定额;AC:已完成工作量的实际费用AC(ACWP);【要求】......原创 2022-06-06 19:14:34 · 1382 阅读 · 0 评论