随着隔热网络教学平台的不断建设,新的学习模式不断兴起,传统的教学方式不再起到垄断性的作用,随之而来的是越来越强调学生的自主性,个性需求。学习是一个积极、能动的过程,不仅仅是告知学习者如何做或者做什么的问题。网上有效的学习是一个积极的信息加工、解释和综合的过程,目的是在于通过使用各种不同的策略来存储和提取信息,能够使学习环境适应自己的需求和目标,在这一点上,传统的教学模式已经不能很好地满足每个个体的需求,因此,一种基于网络的新型学习模式——自主性探索学习模式正在兴起。

针对当前知识的不断更新,信息量的不断增大,我们更觉得有必要通过新型的教学媒介开发新的教学手段作为对传统教学的补充,为此我们选择了“基于WEB的个人网络教学平台”的开发,而要实现当前提倡的“探索性”学习,网络自动答疑系统则是个人网络教学平台开发的重点。通过计算机和网络技术,将每门课程都设置知识问答库是自动答疑系统的基础,学习者可以通过这个不断更新的自我帮助系统完成最初的答疑解惑过程。当然这仅仅是第一步,更多的是利用网络的无限资源,通过此系统作为与外界的接口,实现最大化的信息整合,实现个人定制知识,个人自我解决问题,并通过个人的学习过程协同建设知识库,从而实现更大程度上的知识共享和广泛交流。

正是通过自动答疑系统的开发和应用,学生可以在最大程度上实现学习的自由化,从而推动学习的自主性。另外非常重要的一点是,通过自动答疑的过程,学习者能够清楚地明白自身存在的问题,并且还能够通过与同学、教师的交流做到对问题的深入探讨和研究,而不仅仅止步于单纯的问题解决。对于教师而言,自动答疑系统无疑帮助教师减轻了相当部分的工作量。教师可以通过系统对班级进行宏观调控,包括学生问答的统计、存在疑难点的分布、学生的学习程度等一系列的教学指标,通过对于这些指标的把握,教师可以对教学计划做出调整和改进,从而可以非常有针对性地因材施教。可以说,自动答疑系统的开发在推进“自主性探索”学习模式过程中起到了至关重要的作用,是整个个人网络教学平台开发的核心。一旦该模块建设成功,将极大地促进个人网络教学平台的整体功能的提升。

1.2 系统研究问题的提出

科技的飞速发展,全球一体化进程的加快,需要学校培养出有创新能力、操作能力、理解能力、团队协作能力等综合素质高的人才。如此,我们有必要审视传统的教育模式,是否能够跟上时代的节奏和学生新的需求。传统教学模式中,教师是教学的主体,学生往往是处于被动接受的状态。教师是知识的传播、垄断者,学生没有体现出本身的主观能动性,而教学更多的也是强调结果而非过程,强调学生的整体教学,从而忽略了学生的个性化需求。在新的需求下,现代教育起着至关重要的作用。而网络教学这一现代教育技术,借助计算机和信息学的技术,以传输量大、应用方便、受众广泛、资源丰富等特点将教学从原来的讲解、归纳、总结等单一的模式变为协作交流,资源共享等立体学习模式,同时着重教学内容的综合性以及现实性、现代性、实践性。网络的真正好处是可以做到突破教学的时空限制的同时并保留私人的自主空间,每个人可以根据自我所需对知识进行选择,从而大大提高了针对性。因此,网络个人网络教学平台的建设正在蓬勃发展中。

自主性探索学习模式在很大程度上借助于新型媒介的实现,而网络则首当其冲。因为网络提供了一种突破时空界线和异地实时交互的氛围,同时能照顾到每一个个体的特定需要,更具有针对性和积极意义。探索性学习模式的基本出发点是让学生在学习一门新的课程或知识的过程中,针对自身存在的疑惑,通过自我的不断激发和探索,自主去寻求期望的知识,而不是仅仅等着教师的灌输。对比传统教学方式,学生以班级整体出现在教学的一方,教师面对的是一个整体,那么他必然无法兼顾到所有人,而教师所传授的也仅仅是大众化的知识传播过程。虽然那样在很大程度上可以说是完成了教学任务和计划,但是对于个人的能力发展其实是一种局限,因为往往学生已经满足了这种大众化的教育。而探索性学习模式的意义在于通过学生的自我认知,自我探求,令思维的训练更加深刻,学习的范围更加广泛,不仅仅是在知识层面,还可以涉及到解决问题的能力的培养,独立思考的元认知技能等等。

基于Web的教学就是用万维网作为教学媒体,通过一系列的需求分析,针对特定的需求设计出功能各异的个人网络教学平台,从而在网上实施教学、答疑、交流、测试等等常规功能和附加功能。在实际的应用上,要完整地实施整个基于Web的教学计划,则必须要有一套易用、高效的个人网络教学平台的支持,而其教学的核心内容——答疑过程则应该是个人网络教学平台开发的重点。目前在国际市场上已经出现了类似的产品,比如Lotus公司的Learning Space,哥伦比亚大学开发的WebTV,WBT System公司的Top Class和加拿大Simon Fraser大学开发的Virtual-U等系统,而国内一些知名大学也纷纷在远程教育方面实现了实时交互个人网络教学平台的开发。其中比较著名的有上海交通大学的基于Web的自动答疑系统Answer Web和基于Web的实时交互式教学环境Web Classroom,前者专注于语义分析、数据可视化、多媒体用户界面的研究,并着手实现智能化的解答案,后者则是利用Java、ActiveX技术开发了一个多点实时的语音远程交流系统,为异地师生提供了一个基于Web的虚拟教室[4]

Web作为一种新型教学媒体,其优势不仅在于它是很好的内容载体,可以随时随地访问,还在于它提供了很多的交流渠道,方便师生之间的充分讨论和意见交流,这对于提高教学的互动性和整体质量以及在对学生的认知能力的开发上都是相当重要和有效的。目前个人网络教学平台的开发主要集中在为开发课程的教师提供课程内容的建设框架,提供方便教师针对不同学生设计不同教学路径的功能。另一方面则是针对每个学生的个性化学习的设计,主要通过系统的自动答疑功能,自动判卷功能以及自动索引工具的利用方面学生检索信息并反馈学习情况协同教师共同建设知识库。可以预见的一点是,当今的个人网络教学平台将越来越强调教学的辅助功能,提高教学支持系统的智能性,方便教师更好地管理,学生更好地学习。目前网上的课程大都还是基于HTML,很快都将基于XML,并提供课程内容的资源库管理方式,以便有效地组织和利用多门课程的资源。

1.3 本文的主要研究内容

基于探索式学习环境,学生能够更好地针对自身存在问题提出自主解决方案,他们将通过各种不同的方式去寻求答案,而网络则相当于一个广域的知识库。每个个体都相当于一个结点,他们对自己所获得的信息进行更为深入的认知加工,而教师仅仅式在学习过程中的帮助者、促进者。上文提到的个人网络教学平台就是一个很好的载体,通过网络技术,可以让处于不同地理位置的学习者与他人交互,以同步或异步的模式进行问题的讨论、信息的交互,从简单的电子邮件、邮件列表,到大型复杂的教学系统,都可以由专人进行建设,面向特定的学生对象,通过Internet向学生发布,与此同时提供大量的与问题相关的信息资源供学生在解决问题过程中查阅。同时,对于学生在学习过程中存在的疑难问题进行各种不同的方式进行指导帮助,可以是系统自动的匹配回答,也可以是学生间的协作交流,又或者是专家的点拨启发等等。这种学习模式彻底改变了传统教学过程中学生被动接受的状态,而使学生处于积极主动的地位,这样能更有效地激发学生的学习兴趣和创造性。所以,总的来说探索性学习模式的核心特点是自主学习,信息整合,协同建设。

我们的目的是通过此次的系统的开发,参与到这一场新型教育模式的探索过程,并以此作为试点,尝试探索性学习的效果。为此我们将依托实时交互个人网络教学平台,针对具体的课程开发知识问答库,利用当前较为流行的分词和搜索引擎技术,让系统可以在较大程度上满足学生提出的各式问题,并通过查找知识库进行最优化的匹配。同时,作为一个不断完善和更新的系统,我们当然要考虑其扩展性和学习者协同参与的机制开发,为此我们设置了一系列的互动功能,可以让学习者明显提高参与学习的热情,进而真正提高学习积极性和主观能动性,培养自我探索能力。

第二章 系统实现相关背景

2.1 网络自动答疑系统简介

对于探索性学习模式的推广,个人网络教学平台承载了相当的任务,可以说是这一新型学习模式的主要媒介和方法,而最能够体现探索性学习机制的核心便是实时交互个人网络教学平台中相关答疑系统的建设。网络教学的优势在于用户在任何时间任何地点都可以上网参加学习,而教师则不可能及时回答如此众多用户的问题,并且不断地回答重复或相似的问题也是低效的。而疑问对于每一个学习个体来说却是至关重要的,它甚至可以说是个体学习的聚焦点。学生只有通过不断对自己存在的疑问做出解释才可以进一步把握课程的脉络从而继续学习,因此最有效的方法是构建一个基于网络的自动答疑系统,可以完全由学生自主完成自身的解惑过程。

一个优秀的智能答疑系统应该是不断完善、不断利用新技术的系统。教师事先建立一个问答题库,当学生关于某一门课程出现问题时,可以不受时空限制地登陆到网站,利用网站自带的智能答疑系统进行提问,系统会提供一系列的相关问题的列表,学生可以根据自我的需要挑选最贴近的答案,当需要的答案不在列表中时,可以转到问题留存版面,之后教师将根据此继续构建答疑库,从而实现下一次的可搜索。在这一问答过程中,教师可以有针对性地考察该门课程对于学生存在的普遍难点,并可以通过师生间的互动达到知识库的不断更新,也就是说经过每一次的问答,对于知识库都是一种补充,对于系统的搜索功能都进行了一次加强。最终的目的是能够建立起某一门课程较为完善的知识储备和疑问解决能力,从而能够很好地服务受教育者,推进教育的信息化过程。

计算机自动地回答人所提出的问题,就其本质来说,是属于自然语言理解的范畴。而自然语言理解作为人工智能学科的一个分支,距离在实际工程中的应用尚有一定的距离。但是具体到我们的网络教学环境中,因为学生提出的问题一般情况下都是针对某一门具体的课程的,而根据学科的教学经验,课程的内容具有经典和普遍意义不会频繁地变更,不同的用户对课程的理解一般又都有相似之处,因而大量的学生所提出的问题中有相当一部分是非常类似的,实质性内容是相同的,不过表达方式上可能有偏差。因此,根据这一实际的特点,针对具体的课程,建立一个自动答疑系统,通过计算机对学生提出的问题进行分析和匹配,自动寻找问题的答案是可以实现的。

在系统的问题资源库中,存储了一定数量的问题和解答。当学生提出了一个问题后,系统将对问题自动进行词法分析,根据算法先区分出主谓宾等基本语法元素,从中确定问题的性质,再进行关键字拆分,这里关键字包括了内容关键字,然后系统再根据拆分后的关键字组在问题资源库查找与之相关联问题,这些问题/答案对按照匹配的程度进行排列以及筛选后返回给提问的用户,由用户决定是否回答了他所提出的问题。如果不能,则可以把问题提交给系统,让系统将它存入数据库,等待老师提供解答。

整合了网络通信、人工智能等高新技术的基于网络的自动答疑系统使教育答疑突破了答疑行为的时间、空间局限,并广泛扩展了问题解答的资源内容、资源呈现形式和资源获取方式,提供了高效率、高质量的学生与教育资源的交互,不但支持了网络教学的顺利进行,而且成为传统课堂教学的有益补充。但是,基于技术实现和相关的资源建设,对于自动答疑系统智能化的开发还仅仅是一个开端。目前,各大网站都开始关注到“探索性学习”这个视点,并且进行配套的功能开发。比如说百度的“知道”,新浪的“爱问”,雅虎的“知识堂”等等,都是国内做得较为出色的答疑系统,当然以上三者更多的将目光放在网民之间的交流和沟通上。而对于国外一些著名的答疑网站,比如在智能化方面做得非常出色的Ask Jeeves公司的Ask Jeeves for Kids网上答疑系统,MIT人工智能实验室Boris Katz博士组织开发的START系统等等,这些涉及到大学教育和大众教育等领域,在学术上做得较为专业。综合国内外的情况,我们不难看出,在未来的信息时代,对于知识的更新将会越来越快,对于传统的阅读方式恐怕已经不能够及时把握时代的动向与吸收最新的知识。所以非常有必要通过计算机、网络等新兴技术进行知识和信息的整合,使人们能够在最快的时间吸取到最有用的知识,这将会是一直的发展方向[2]

2.2 国内外答疑系统的现状

整合了网络通信、人工智能等高新技术的基于网络的智能答疑系统使教育答疑突破了答疑行为的时间、空间局限,并广泛扩展了问题解答的资源内容、资源呈现形式和资源获取方式,提供了高效率高质量的学生与教育资源的交互,不但支持了网络教学的顺利进行,而月成为传统课堂教学的有益补充。然而国内外智能答疑系统发展的现状是真的发挥其优势,满足了教与学的需求。对国内外的智能答疑系统进行了调研。下面基于调研对国内外智能答疑系统的发展现状和特点进行比较,希望通过比较能够发现目前网上答疑系统的问题,并借鉴国外好的经验探索建设我国网上智能答疑系统的方法。

2.2.1 国内网上答疑系统发展现状

在调研的过程中发现,有些教育网站中真正具有智能功能的答疑很少,大多数有答疑系统的教育类网站采用电子邮件、留言板和 BBS 聊天室等基于网络的人际交互方式实现答疑。可见国内大部分教育人员对网上答疑的认识还局限在传统教学中的人际交互的模式中,而忽视或者应该说回避了网络技术人工智能等先进技术给答疑提供的强大支持。

1.系统的独立性

在对国内的网上答疑系统的调研过程中,我们发现国内具有答疑功能的独立平台或系统非常少,大部分的答疑系统都嵌套在网络教学平台或系统之中。这与国内前一段网络教学和学习平台建设热潮有一定关系。这类答疑系统所履行的主要的功能是提供给学生就课程相关问题与教师或其它课程权威以及同伴进行交互的环境。

2.系统的功能

国内网上智能答疑系统中的主要功能、包括答疑功能、问题查询和浏览功能、用户信息和知识管理功能、系统统计功能,除此之外还包括了其它的附加功能,如用户个性化定制、问题操练、问题解答评价等功能。

国内答疑功能主要是通过人工答疑和基于数据库的自动答疑两种方式来实现。人工答疑通过电子邮件、网上异步讨论区和留言板、网上同步聊天室、网卜语音会议等方式来实现。然而人工答疑中没有从结构上给用户设计更有益于深入探讨问题的环境,结构比较松散讨论的内容很难控制。自动答疑是通过对知识库的自动搜索实现的,无论提问者输入关键字或是自然语言短语或句子,系统都会根据问题进行系统知识库的全文搜索,然后将与这个问题相关性较强的问题及其答案反馈给提问者。然而基于自然语言的答疑准确率和针对性对比较差,会有很多与问题中词语有关的信息被呈现出来,真正的答案需要用户自己来再次寻找。除了提问用户还可以通过浏览已回答问题列表解答问题,国内很多系统给用户设计了多个属性查询己回答的问题。

系统的统计功能提供了与答疑情况有关的数据和信息的简单处理,然而统计对象的选择缺乏对整个教学或学习系统的考虑,另外只提供了如频率统计这样的简单统计,缺乏对原始数据的深层处理,在统计数据与教学系统其它子系统数据交流方面也没有较好的渠道,这样统计功能对系统的改善意义就非常有限了。

总体而言,国内系统的功能较为全面和丰富,但许多功能质量较低,有些功能的实用意义较小,而且操作性不强。

3.系统的智能性

目前国内答疑系统的智能性主要体现在低水平的机器对人类自然语言的理解,自动的问题资源库检索和相关信息的反馈。然而利用自然语言进行查询的精确性和有效性没有得到科学的证明,经验表明其查询准确性较低,此外反馈的答案针对性和有效性也比较低。

4.系统的资源库

国内答疑系统寻求问题答案的资源库主要是基于课程章节组织的,这与国内答疑系统大多是教学系统的子系统有关。系统将每章学生提出的常见问题和教师的解答作为数据库的基本内容,有的系统将学科知识以章节为单位组织起来作为资源库的基本内容(如上海交通大学远程教育研究中心的网上答疑系统),有的系统的资源库是基于课堂的常见问题而建设,有的两者合一。这种基于课程的资源库结构在资源扩展时容易造成资源重复的现象。

国内网上答疑系统的一个主要问题是系统的资源库内容不够丰富,比起浩瀚的网络教学资源,网上答疑系统的资源非常有限,嵌入教学系统的答疑系统的资源库和教学系统本身的资源库是割裂的[6]

2.2.2 国外网上答疑系统发展现状

调研了国外网上教学平台和几家有名的提供。e-learning 解决方案的公司的网络学习平台,我们发现,国外教育网站中答疑的实现,主要通过各种网络人际交互的手段和技术来实现当我们在 Google 中输入 question answering 进行查询,会发现许多专门的答疑网站这些答疑网站,涉及 k12教育、大学教育和大众教育等领域这其中有些答疑系统在智能化方面作的非常出色如 ASk Jeeves 公司 Ask Jeeves for Kid 网上答疑系统人工智能实验室 Boris Katz 博士组织开发的 START SynTactic Analysis using Reversible Transformation 系统。下面我将对比国内的系统具体介绍这些系统的特点。

1 系统的独立性

国外出色的智能答疑系统,全部都是独立运行的系统它们不属于任何教学或学习平台。这类系统所扮演的角色更像一个专业领域资源的提供者,提问者借助系统回答他们的问题,不一定是某个完整的教学过程中的一部分,他们通过寻求答案可能是为了解决他们在相应学科的问题也可能仅仅是为了满足他们的好奇心,或者是为了寻找作业或任务中需要的资源。

2 系统的功能

相比国内答疑系统的丰富功能而言,国外答疑系统的功能更加简洁。虽然主要的功能与国内类似,但是所有的功能都是围绕答疑功能而设计,功能设计重点突出、设计精良。

答疑功能的实现也是通过人工答疑和自动答疑共同实现人工答疑的方式。与国内差异在于国外的答疑系统中人工答疑的主要方式是电子邮件和信息板,很少有讨论区或聊天室。国外在自动答疑方面作的非常有特色。有的系统如Ask Jeeves for Kids 在提问模块系统不但支持了自然语言提问,而且设计了问题的确认交互,通过这层交互,系统能够更精确地理解用户的问题,为问题的准确解答提供了保障;在问题呈现方面系统会基于问题的类型提供给用户较为简洁的答案,一般有关时间、人物、地点概念等类型的问题,其答案的简洁性和正确性较高如向START系统提问“哪个国家拥有人口最多”系统只会反馈给你国家的名字,以及关于该国家人口的详细介绍,而不是很多与“国家”和“人口”有关的信息。此外,很多解答语言的表述上会也有差异;答案的来源不像国内系统那样只是系统自身建设资源库,还会包括其它相关网站上的资源,因此答案虽然力求准确、简洁,但也具有开放性。

3 系统的智能性

国外系统的智能性也主要体现在人机理解的自然语言接口和相应的问题查询和反馈上,但是国外系统在基于自然语言的提问方面作的比国内更加准确和人性化(如带有问题确认的功能),主要原因是国外在问题处理部件增加了问题类型判断以及增加了答案处理和解释部件,因此不但保证了系统对问题的更准确地理解,也使呈现的答案简明扼要。

4 系统的相关资源库

国外答疑系统的资源库的突出特点是拥有丰富、高质量的内容,比如 Ask JoeveS for Kids 系统的所有答案是来自数万计通过查询和研究确定的和问题有关的其它网站链接(主要的来源是 YahooligansEducation World 和Federal Edllcation Rescoorces 三个网站)这些网站资源是人为建设的,而并不是软件搜索得到的,因此,每个答案链接都与问题相关。

国外系统的答案资源库不只包括知识库。还包括信息库这样答案中呈现的信息可能是对问题的解答,也包括能够解答相关问题的网上资源的信息。

与系统的独立性相关的是和国内针对学科和课本的内容体系相比,国外系统答案资源库的内容采用了内容史加丰富和广泛的主题式或专业领域式内容组织体系[4]

2.2 本系统答疑模式的确立

在确立了课题研究的大方向之后,我们需要结合实际情况对此次项目开发做一定的调研,以便选择最适合的入口进行研究和建设。经过一系列的文献查阅和了解,我们对于目前国内个人网络教学平台中的答疑系统有了大致的把握。较早开发的个人网络教学平台中没有建设专门的答疑部件,此类系统中教师与学生的信息交流仅仅局限于电子邮件的联系,或者利用系统留言版,比如北京邮电大学远程教育系统,华南理工大学远程教育中心以及一些中小学的教学系统。另一类是具备了初步的答疑部件,此类系统的特点是提供了Web BBS的讨论方式,也可进行教师主持下的WEB实时聊天讨论,较有代表性的是清华大学远程教育系统和湖南大学多媒体信息教育学院的远程教育系统。最新开发的一些网络教学平台则具备了自动答疑功能的答疑部件。此类系统的典型代表是上海交通大学的远程教育设计中心设计开发的Answer Web自动答疑系统。Answer Web自动答疑系统是一个动态的问题和答案的数据库。用户可以输入关键词在系统已有的问题和答案数据库中查找相关的材料。新的提问和答案将被增加到系统数据库中,如果没有找到答案,则会自动转发给专家请求帮助解答。以上所涉及的均为学术性较强的答疑系统,而对应于当今越来越快的信息增长速度,我们需要了解的东西太多,以至于单纯学校的教育已经远远不能满足需求。这个时候,网络的生命力再次体现,从BLOG到RSS,再到百度、新浪、雅虎各自开发的答疑系统,无不印证了一种新的学习模式的兴起,那便是自主性探索学习模式,而与之相配套的学习环境便是“网络自动搜索+全民参与”的模式环境。

考虑到以上的调研因素,我们也确定了此次系统开发的模式:即要针对教师教学的主要学术特点来建设知识库,同时也要加大学习者之间的交互作用,给人有一种共同参与的感觉,因此“搜索引擎+社区化”将是我们自动答疑系统的建设模式。以搜索引擎为工具,引入先进的算法对知识库进行智能化的搜索,让学习者能够在最短时间内找到想要的答案,还可以以此作为与万维网的接口,进入到更深层次的探求;而社区机制则旨在能充分调动学生之间的交流和学习的积极性,对于个性的问题能够一同探讨。

2.3 系统开发的可行性研究

在线答疑系统的建设 ,解决了网络教学这种非面对面教学形式中学生与教师之间交流的难题。主要就基于WEB方式的在线答疑系统的功能及实现方法进行了讨论 ,并给出了实际的解决方法。综合以上章节我们发现在现有的答疑系统中还没有一套综合解决以下问题的方案:

针对协作学习模式而专门设计的答疑支持。

提问与答疑方式和表现手段的丰富化与多媒体化。

提问与答疑的实时交互性。

自动答疑。

答疑系统的开放性。

自动答疑系统耗费的人力物力都相对较小,而且前景比较好,所以开发本系统还是比较切实可行的。本系统在开发过程中按照先底层后界面的原则,首先是对系统的分析,然后设计系统的数据库,在代码编写的时候先写接口,再写表示层的次序进行的。

2.4 开发环境及相关技术的介绍

本系统开发环境:操作系统采用WindowsXP,WEB服务器采用:Tomcat5.0,数据库:Mysql, 开发工具:Eclipse+MyEclipse的IDE开发环境,JDK1.5。

Eclipse的开发工具具有方便,快捷的特点,开发过程中引入了第三方开源框架Spring,开发过程中采用了大量的GSTL标记语言,并引用了XML文件进行信息的存贮。

本系统实用JAVA技术,下面就JAVA技术作简单的介绍。

1、Java初步

Java是由sun公司开发的一种新型的面向对象的程序设计语言,主要用于web页面的设计。

Java语言的发展颇具传奇性,它与Internet的WWW的迅猛发展是分不开的。由于其发展迅速,有人将它比喻为Internet上的世界语。前面讲到在Internet上Web页面的设计采用的是HTML语言,用户借助于Web浏览器(如Netscape,HotJava,IE等),可以访问到远程web服务器上静态的、具有超链接的Web页面。Java语言的出现改变了 Web页面的这种传统的静态模式,通过在Web页面中附加一些利用Java编写的App1et(称为小程序),可以使Web页面更具多样性和变化性,这样用户就能够访问到动态的,具有交互功能的web页面。

例如一些小的动画,实时更新的图表、声音等。总之,Web页面的设计主要采用HTML语言,利用Java则使其锦上添花。

Sun公司于1995年5月正式推出Java语言,由于其简单、高效、可移植性强等特点,一经推出,很快引起广大用户和众多厂商的普遍关注,特别是Sum公司将其定位于Internet的应用开发上,使得Java得以迅速发展。在同期推出的还有被称为HotJava(热咖啡)的浏览器,Hotjava是一个完全由Java语言编写,基于Java典型应用的web浏览器,并且第一个支持Java Applet。HotJava充分展示了Java在全球Internet网上的强大威力,同时也为Java语言编程提供了一个理想的运行平台。

Java语言推出后,各大软件厂商相继宣布支持Java。首先是Netscape公司在其Web浏览器(Netscape Navigator2.0)中支持Java,不久,sun,SGI和Macromedia三家公司制定了基于Java的开放式多媒体标准。后来许多公司,如IBM,Microsoft,Orac1e等,都宣布支持Java。Netscape公司进一步与sun公司合作,推出了类似于Java的JavaScript语言。目前,Sun公司已成立了专门的Javasoft分部,负责管理Java语言的开发、维护工作。

对于Java这一名字,较为流行的说法是它来源于印度尼西亚的一个重要岛屿,该岛屿的中文译名为"爪哇",岛上盛产咖啡,于是sun公司的开发人员将这种新语言起名为Java,寓意是使其与热气腾腾的咖啡联系起来,将它奉献给全球的计算机用户。

2、Java语言的特点

Java语言的流行除了因为它能够编制嵌入HTML文件中的Applet外,还在于Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。Java语言的结构与编写方式,与c++语言类似,因此学习Java语言,不仅要了解Java语言独有的编程特点,同时还要有程序设计基础和面向对象的概念。 <BR>Java语言的主要特点如下:

(1)简单、高效

Java语言与C++类似,如果用户了解C++和面向对象的概念,就可以很快编写出Java程序;此外,Java又不同于诸如C++语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性,例如去掉了头文件、指针变量、结构、运算符重载、多重继承等复杂特性。Java语言虽然简单,却很高效,它可以用面向对象的方法来描述用户的每一个动作。

(2)面向对象

Java语言是一种新的面向对象的程序设计语言,它除了几种基本的数据类型外,大都是类似c++中的对象和方法,程序代码大多体现了类机制,以类的形式组织,由类来定义对象的各种行为。Java同样支持类继承,这样也减少了程序设计的复杂性。

(3)平台无关性

Java语言经编译后生成与计算机硬件结构无关的字节代码(Bytecode),这些字节代码被定义为不依赖任何硬件平台和操作系统。当Java程序在运行时,需要由一个解释程序对生成的字节代码解释执行。这体现了Java语言的与平台无关性,使得Java程序可以在任何平台上运行,如MS-DOS,Windows,Unix等,因此具有很强的移植性。

(4)交互式特性

Java是面向对象的网络编程语言,由于它支持TCP/IP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。

(5)多线程机制

Java语言支持多线程机制,多线程机制使得Java程序能够并行处理多项任务。Java程序可以设计成具有多个线程,例如让一个线程负责数据的检索、查寻,另一个线程与用户进行交互,这样,两个线程得以并行执行。多线程机制可以很容易地实现网络上的交互式操作。

(6)动态的内存管理机制

Java语言采用了自动垃圾回收机制进行内存的管理。在C++语言中,程序员在编写程序时要仔细地处理内存的使用,例如当某个内存快使用完毕时,要及时释放,以供其它程序使用,一旦内存管理不当,就有可能造成内存空间浪费或程序运行故障。 <BR>在Java系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块,这样,程序员在编程时就无需担心内存的管理问题,从而使Java程序的编写变得简单,同时也减少了内存管理方面出错的可能性。
    (7)安全性

在类似Internet的这种分布式网络环境中,安全性是个不容忽视的问题。Java语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,Java语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理,如内存空间不够,程序异常中止等的处理。 <BR>以上介绍了Java语言的一些主要特点,除此之外它还具有动态性、类库丰富、高性能等特点,这些都使得Java语言在各个方面得以成熟和完善,成为大众日益青睐的程序设计语言之一。

3、Java应用程序和Java AppletJava语言是一种面向对象的程序设计语言,利用Java语言,能够编写出两大类程序:Java应用程序(Application)和Java App1et(小程序):

Java应用程序是由Java语言编写,在经过编译和解释后,可以独立运行在MS-DOS,UNIX等操作平台上。Java应用程序一般以命令行方式运行。

Java Applet是不能独立运行的,App1et必须嵌入到HTML文件中,并且需要启动浏览器才能运行。这样,指定的Applet会自动下载到用户的浏览器中运行,从而产生一些特殊的页面效果,如动画、声音、图表、图像等。通过在Web页面中嵌入Applet,可以使Web页面与用户之间进行动态交互,例如接收用户的输入,然后根据用户的需要产生不同的响应。

就Java Applet而言,它是嵌入到HTML文件中的,HTML文件呈现的内容大多为文字、图片、表格、声音等,但这些内容一般都是静态的、二维的。但当HTML文件中嵌有 Applet后,整个页面会呈现出多样性和变化性,例如交互功能、图表等。在运用方面Java语言和HTML语言的区别在于:

(1)HTML语言属于一种简单的标记语言,一般使用者均可在数小时内学会如何编写HTML文件。而Java语言的结构和编写方法更类似于c++,所以学习Java语言要有程序设计的基础和面向对象的概念。

(2)Web页面的编写主要采用HTML语言,但若想使页面更具变化性、多样性、交互性,可采用Java语言来达到这种效果,起到锦上添花的作用。

4、在HTML文件中嵌入Applet</FONT> <BR>Applet是Java在Internet的WWW中的一个重要应用,同时它的出现也促使了Java成为日益流行的程序设计语言。Applet是指由Java语言编写的,被嵌入到Web页面中,并通过浏览器执行以产生特殊页面效果的小程序。嵌入了Applet的Web页面看上去会更加丰富多彩,具有动态交互能力。

在Internet上拥有大量的App1et,这些Applet大都是由Sun等公司的Java开发人员设计出来的,对于广大用户,特别是初学者,可以将这些App1et下载到自己的计算机中,井通过将这些下载下来的App1et嵌入到自己的Web页面中来,获得自己具有相同效果的Web页面,以丰富自己的页面内容。

第三章 系统总体设计

3.1 系统设计说明

3.1.1 系统开发的主要内容

本系统是由JAVA编写的,主要运用JAVA中的HTTPSERVLET来实现客户端与服务端的链接,从而实现时时的客户端IE与服务端的通讯。

1.服务器端程序的设计

在设计的时候引用了第三方控件Spring 所以我们就不用直接去创建对象,而只要在外部配置文件中描述如何创建对象的,这样的开发结构节省了人力物力。

2.客户端程序设计

客户端IE发送请求后,会自动调用服务端相应的方法,实现客户端的需求。

3.数据库的设计

数据库用Mysql实现,把一些较典型的问题及答案收集起来,并建立索引,以备学生用户从知识库中随机地抽取问题。老师可以随时对数据库中的问题及答案进行添加,删除或者修改,以适应不同的需要。这种管理是十分必要的,它 能通过 老师对知识库的管理,使它能够及时更新内容,日臻完善。

“网上自动答疑系统”是一个各校各课的通用系统,指导教师都可以任意地添加、删除和修改。此系统的使用者有三种,他们分别进行不同的操作,实现不同的功能,最终使得在网上自动答疑得以实现。

管理员:负责管理整个答疑系统,他可以对问题和留言及问题答案进行自如地增加、删除和修改等操作。

教师:教师可通过本系统设问和答疑。他可以把问题和答案输进本系统,供学生查询,还可以对系统中的问题和答案进行修改、添加或删除,还需负责回答学生提出的而题库中又没有的问题。

学生:学生可以通过本系统解答学习中的问题,在查询不到自己所需的问题时,可以填写上自己的疑难问题,科目指导老师回答完后,同时会有相应的语句提示学生,学生可以看到自己需要的答案。同时,学生的问题 和 老师的答案也已经存储到题库中。

系统中的问题可以任意地添加,适用面比较广泛。用户提问可以带附件,即可以以不同的文件格式来拟题,如图象、声音、视频等。本系统界面友好、交互性强、操作方便。

3.1.2 系统开发的实施计划

自动答疑系统拟工作原理图如下图3.1:

图3.1 自动答疑系统拟工作原理图

由上面的结构图可以看出,系统的总体结构由四个部件和三个库组成。四个部件分别是提问部件,系统搜索部件,资源管理部件和系统管理部件。三个库分别是用户信息库,系统关键词库,领域知识库。

1. 用户信息库:包括用户注册时的基本信息。

2. 系统关键词库:实际上是系统工作日志库,记录系统工作时涉及到的系统负荷,用户来源和特点,与每个用户进行的对话等信息。系统分析工具可以分析这些信息得出有价值的结论,使系统更好的工作

3. 领域知识库:领域知识库是解答用户提问的基础,含有回答提问需要的相关领域的知识。一般包含的知识类型主要有陈述性知识,过程性知识和元知识三种。

用户可分为普通用户,专家用户,系统工程师。

1. 普通用户:是本系统服务的目标,他们通过使用系统解答自己的疑问。

2. 专家用户:是系统涉及到的专门领域的专家,负责提供系统最初始的领域知识和领域结构来创建领域知识库;用知识管理工具来帮助系统解决系统本身解决不了的用户问题等关键性的作用。

3. 系统工程师:熟悉计算机技术,负责解决与系统有关的技术问题。

提问部件的界面是WWW浏览方式,通过填写并提交问题表单来获得系统的即时解答。用户提问时,可以采取三种方式:纯粹的关键词的逻辑组合,基于模板的自然语言提问和不受任何限制的自然语言提问。以纯粹的关键词的逻辑组合方式来提交问题,就是用户自己提取出问题中的关键词信息,并使用与、或和非三种逻辑关系将之结合起来提交给系统来查询回答。此时的工作方式类似于Internet搜索引擎的工作方式。基于模板的自然语言提问方式,则是系统根据涉及的领域知识的特点和人们常用问题的格式,预先定义好一些提问语句,但这些提问语句的关键词部分空出来供用户填写。这种方式在关键词的基础上,进一步明确了关键词的语义作用,能够得到更精确的结果。而不受任何限制的自然语言问题,就是用户直接用自然语言写出提问的问题,由系统根据与领域相关的词典,从中抽取出关键词信息来回答用户的提问。

系统搜索部件在用户提问完毕并且系统已经成功的抽取用户问题中的关键词信息后,系统将利用搜索部件在系统的领域知识库中搜寻问题的答案。主要是基于关键词匹配的启发式搜索方式。系统搜索到问题的答案后把结果按照相关程度的高低呈现给用户。如果没有找到相关信息,则去掉重要程度低的关键词进一步搜索。如果仍然没有结果,则系统将问题自动通知给系统的某个专家用户,由专家用户来负责解答。专家的答案在自动转发给用户的同时,也会被系统工程师利用知识管理工具添加到系统中的领域知识库中。

系统管理部件可以完成处理新用户的申请,鉴别用户的身份等任务。最主要的任务是管理用户的基本信息和用户的个性信息。

3.2 系统概要设计

3.2.1 网站内容设计

本系统的运行环境:

客户端配置

硬件环境:单机Pentium Ⅱ300  128M 600M 以上硬盘空间 或以上

系统软件:Windows 98/NT/2000

开发语言:JAVA

服务端配置

硬件环境:

网络环境: 100M LAN 100节点

系统软件:Windows 2000 server或以上版本

DBMS: Mysql4.0

随着该信息量的不断扩大,对知识的搜集和管理的工作越来越繁重,急需一个软件系统解决这些问题。本软件应能结合当前学习传统作业的流程以及将来业务发展的需要,对相关学科的知识,社会知识的查询、维护提供完全的计算机管理。

性能需求:

页面响应时间:不超过10秒

更新处理时间:不超过15秒

数据转换与传输时间:不超过30秒。

适应性:

开发基于的平台要考虑向上兼容性,如操作系统,数据库等要考虑更高版本的兼容性。当需求发生变化时系统应具有一定的适应能力,要求系统能够为将来的变更提供以下支持:能够在系统变更用户界面和数据库设计,甚至在更换新的DBMS后,系统的现有设计和编码能够最大程度的重用,以保护现阶段的投资和保证软件系统能够在较少后续投入的情况下适应系统的扩展和更新。在设计中最好列出针对变更所需要重新设计的模块部分

本系统由前台主要是给用户提供自动搜索的功能,后台主要是管理员对网站内容进行控制,网站内容以简洁,明了为主,类似百度首页。后台主要用户是管理员,内容有层次感,操作方便。

3.2.2 数据模型及其属性

主要介绍问题表(quese和留言表(leave_word)的属性

quese表:

quese_id    问题的ID号

quese_title

quese_content

create_time

leave_word

leave_word_id

content

quesname

create

3.3 系统数据库设计

3.3.1 数据库设计原则

数据库设计是建立数据库及其应用系统的核心和基础,它要求对于指定的应用环境,构造出较优的数据库模式,建立起数据库应用系统,并使系统能有效地存储数据,满足用户的各种应用需求。一般按照规范化的设计方法,常将数据库设计分为若干阶段:

系统规划阶段

主要是确定系统的名称、范围;确定系统开发的目标功能和性能;确定系统所需的资源;估计系统开发的成本;确定系统实施计划及进度;分析估算系统可能达到的效益;确定系统设计的原则和技术路线等。对分布式数据库系统,还应分析用户环境及网络条件,以选择和建立系统的网络结构。

需求分析阶段

要在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。通过对组织、部门、企业等进行详细调查,在了解现行系统的概况、确定新系统功能的过程中,收集支持系统目标的基础数据及其处理方法。

概念设计阶段

要产生反映企业各组织信息需求的数据库概念结构,即概念模型。概念模型必须具备丰富的语义表达能力、易于交流和理解、易于变动、易于向各种数据模型转换、易于从概念模型导出与DBMS有关的逻辑模型等特点。

逻辑设计阶段

除了要把E-R图的实体和联系类型,转换成选定的DBMS支持的数据类型,还要设计子模式并对模式进行评价,最后为了使模式适应信息的不同表示,需要优化模式。

物理设计阶段

主要任务是对数据库中数据在物理设备上的存放结构和存取方法进行设计。数据库物理结构依赖于给定的计算机系统,而且与具体选用的DBMS密切相关。物理设计常常包括某些操作约束,如响应时间与存储要求等。

系统实施阶段

主要分为建立实际的数据库结构;装入试验数据对应用程序进行测试;装入实际数据建立实际数据库三个步骤。

另外,在数据库的设计过程中还包括一些其他设计,如数据库的安全性、完整性、一致性和可恢复性等方面的设计,不过,这些设计总是以牺牲效率为代价的,设计人员的任务就是要在效率和尽可能多的功能之间进行合理的权衡。

3.3.2 数据库结构设计

1.数据库设计概述

数据库具有数据结构化、最低冗余度、较高的程序与数据独立性、易于扩充、易于编制应用程序等优点。所谓数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。数据库的应用已经越来越广泛了,不仅大型计算机及中小型计算机,甚至微型计算机都用先进的数据库技术来保持系统数据的整体性、完整性和共享性。

数据库设计(database design)是将业务对象转换为表和视图等数据库对象的过程。数据库设计是数据库应用系统开发过程中首要的和基本的内容。数据库是信息系统的核心和基础。它把信息系统中的大量数据按照一定的模型组织起来,提供存储、维护、检索数据的功能,是信息系统可以方便、及时、准确从数据库中获取所需的信息。一个信息系统的各个部分能否紧密的结合在一起以及如何结合,关键在数据库。因此必须对数据库进行合理设计。

按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下六个阶段:

(1)需求分析

(2)概念结构设计

(3)逻辑结构设计

(4)物理结构设

(5)数据库实施

(6)数据库运行与维护

2.数据库需求分析

进行整个数据库设计必须准确了解与分析用户需求(包括数据和处理)。需求分析是整个设计过程的基础,是最困难、最耗费时间的一步。作为地基的需求分析是否做得充分与准确,决定了在其上构建数据库大厦的速度和质量。

需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。

需求分析调查的重点是“数据”和“处理”,通过调查、收集和分析,获得用户对数据库的如下需求:

(1)信息需求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。

(2)处理要求。指用户需要完成什么处理功能。明确用户对数据有什么样的处理要求,从而确定数据之间的相互关系。

(3)安全性与完整性要求。

3.数据库概念结构设计

概念结构设计是将分析得到的用户需求抽象为概念模型的过程。即在需求分析的基础上,设计出能够满足用户需求的各种实体以及它们之间的相互关系概念结构设计模型。这样才能更好地、更准确地用某一DBMS实现这些需求。它是整个数据库设计的关键。

概念结构的主要特点是能真实、充分地反映现实世界;易于理解;易于更改;易于向关系、网状、层次等各种数据模型转换。描述概念模型的有力工具是E-R模型。

设计概念结构通常有四类方法:

(1)自顶向下

即首先定义全局概念结构的框架,然后逐步细化;

(2)自底向上

即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构;

(3)逐步扩张

首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构;

(4)混合策略

即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。其中最经常采用的策略是自底向上方法。即自顶向下进行需求分析,然后再自底向上设计概念结构。

4.数据库逻辑结构设计

概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。

设计逻辑结构时一般要分三步进行:

(1)将概念结构转换为一般的关系、网状、层次模型;

(2)将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;(3)对数据模型进行优化。

数据库的概念结构和逻辑结构设计式数据库设计过程中最重要两个环节。

5.数据库物理结构设计

数据库在物理设备上的存储结构与存储方法称为数据库的物理结构,它依赖于给定的计算机系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结果的过程,就是数据库的物理设计。

数据库的物理结构设计通常分为两步:

(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;(2)对物理结构进行评价,评价的重点是时间和空间效率。

6.数据库实施、运行和维护

完成数据库的物理设计以后,设计人员就要用RDBMS提供的数据定义语言和其他使用程序将数据库逻辑设计和物理设计结果严格描述出来,成为DBMS可以接受的源代码,再经过调试产生目标模式,然后就可以组织数据入库了。

第四章 系统设计与实现

4.1 自动答疑引擎的设计和实现

4.1.1 本系统答疑模型的建立

随着网络技术的不断根新,现有的个人网络教学平台存在着交互性不强、无法真正调动学生学习主动性等问题。针对这一问题,本文提出了自主性探索的学习模式,并依托实时交互个人网络教学平台中自动答疑系统的开发,使该模式得以有效地实施。我们根据国内外自动答疑系统的开发现状,根据教师的实际需求建立了适合本系统的自动答疑模型。系统详细介绍了自动答疑引擎的设计和实现,以及引入知识库协同建设的系统模式,最大程度实现教学的自主性和可维护性,切实地提高了教学质量。最后对该项目的开发情况作了总结,并从自动答疑系统模式的完善性研究、答疑引擎的发展、教学“社区化”协同建设三方面对课题作了展望,以期能够深入研究。

4.1.2 关键字全文搜索的实现

本系统搜索引擎的搜索规则中的两条,关键字搜索,通过用户输入的信息,我们利用程序将结果取回,对信息进行分析,去除没有用的信息,将有用的信息返回给用户界面,就可以给其它应用程序或者人来使用了。 例如我们如果输入的是“什么是自动答疑系统”,程序就回根据“答疑系统”到数据库中进行搜索,最后把相关的信息全部返回给用户。

4.2 系统主要功能模块的实现

4.2.1 自动问答功能的实现

自动答疑系统首先接受来自用户的登录,当用户在登录页面输入了正确的用户名和密码后,页面将跳转至答疑查询页面,如果用户名或密码错误,将不能成功登录,页面部实现跳转,用户登录页面如下图4.1所示:

图4.1 用户登录页面

用户进入答疑页面后可以搜索所有系统中的记录,当用户输入关键字后,点击搜索,页面将跳转至显示记录页面,搜索页面如下图4.2:

图4.2 搜索记录页面

自动答疑模块主要实现接受成员的提问,在答疑库中查询相关答疑结果,返回给成员,返回结果如下图4.3所示

图4.3 用户查询结果返回页面

当没有疑问时自动通知辅导教师进行答疑。教师答疑完成之后将答疑或讨论记录入库。教师可以添加答疑记录,并上传相关附件,如下图4.4所示:

图4.4 添加答疑记录页面

教师并拥有编辑答疑记录的权限,对答疑记录进行规范的编辑,以便用户在查询的时候能够更准确搜索所需答案,教师可以删除重复或者过期的答疑记录,编辑删除答疑记录的页面如下图4.5 所示:

图4.5 编辑删除答疑记录的页面

在教师编辑答疑记录的过程中,如果编辑的内容或者格式不符合系统要求,提交后,页面将不实现跳转,如果按照系统要求编辑了答疑记录,页面将跳转至显示成功页面,如下图4.6:

图4.6 编辑答疑记录结果返回页面

在教师删除答疑记录时,系统将会弹出对话框,提示教师是否确定删除当前记录,如下图4.7所示:

图4.7 删除答疑记录提示页面

从上面的分析可以看出,以教师为中心教师,通过一个教室联网与学生实时通信交流,这种方式解决了学生与教师之间时空的间隔,学生可以与教师进行面对面交流,采取逐层控制,分级管理模式,使得系统能够稳定有效的进行。而要开发的Internet网络自动答疑系统,应该说具有一定智能性、开放性、主动性和使用友好方便的特点,以较少的人力物力,不受时空的局限,具有较高的实用价值,结合适当适时的实时交互答疑,效果将会更好。

自动答疑系统的数据流图如图4.8所示。

图4.8 自动答疑系统的数据流图

在本系统能中自动问答功能主要是靠系统提供的搜索机制,用户先输入需要查询的问题,当用户发出请求后,进行页面跳转,并且调用DAO文件,结合SQL语句中的模糊查询,截取用户提出问题的关键词,进行搜索,如果有相关信息则返回给用户,如果没有相关信息则提示用户进行新的问题的提交。

4.2.2 知识库查阅功能的实现

在本系统中,程序主要通过模糊查询实现知识库查阅功能,SQL语句如下:

private static final String QUERY_QUES = "select * from ques where ques_title like ?";

用户通过在主页面中输入所要查询的问题,提交到后台程序,后台程序进行判断处理,提取该问题的核心词汇,如果能够找到,则把所有问题返回,如果没有找到则返回一个空信息。

4.2.3 知识库建设的实现

知识库建设主要通过专家对提出的问题的解答,及系统用户提出问题,等呆专家进行解答,把用户提出的问题和专家的解答存入知识库。

4.3 系统界面设计

系统界面按照简洁,通俗,方便的原则设计。

第五章  总结和展望

5.1 系统开发总结

本文详细分析了自动答疑系统的构建方法,并分析了关键技术在系统中的应用,利用软件工程的方法,规范的开发设计了该系统,从系统实现构想、系统总体设计、系统软件设计等角度,详细描述了该系统得实现原理与开发流程。

自动答疑系统开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。本人结合自动答疑系统的要求主要完成了对自动答疑系统的需求分析,功能模块划分,数据库模式分析,并由此设计了数据库的结构和应用程序。系统运行结果证明,本文所设计的自动答疑系统可以满足系统用户,管理员,专家三方面的需求。

可以看到该答疑系统与传统的答疑系统相比有着以下优点:解决现有答疑系统对协作学习模式支持的欠缺;让提问与答疑方式和表现手段丰富化,加深问题答复与探讨的深度;提供自动答疑,减少教师工作量,也能让答疑资源有效的共享;当自动答疑系统不能满足要求时,与在线教师能进行实时的交流,尽可能较少学员等待答复的时间;提供一个成员与教师模型的接口,有助于将该答疑系统集成到其它远程教学系统之中。

随着网络技术的不断发展,网络应用已经成为人们生活中的一部分,网络作为一种共享的资源,贡献于教育已经成为一种社会需求。基于网络的自动答疑系统解决了学习的时间、地点等因素的限制,有效的利用了网络资源。相信在以后的学习中能够汲取更多的知识,开发出更加合理、实用的自动答疑系统。

5.2 自动答疑系统的展望

5.2.1 自动答疑系统的完善性研究

随着技术的不断更新,知识需求的程度的不断膨胀,自动答疑系统前景还是比较广泛的,目前的系统还应该根据用户特殊功能的需求而不断的改进和完善。

5.2.2 自主性探索学习引擎的发展

基于自主性学习的教学,是作为一种教学活动而存在的。在教学活动中,教师依据一定的教学目标,组织、帮助和指导学生有效地开展自主性学习。具体来说,基于自主性学习的教学活动所强调的是这样一种情形:整个教学以给予学生的自主学习时间为前提,以培养学生的自主学习能力和促进学生的自主发展为目标,以让学生自主决定、自主选择、自主控制、自主反思、自主评价、自主建构为进程,以教师的组织、帮助和指导为方式而开展的教学活动过程。这种自主性学习的教学,是一种最高理想的教学过程,它充分体现了教师的教学自主和学生的学习自主。

致  谢

本研究及学位论文是在我的导师王晨关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成, 王 老师都始终给予我细心的指导和不懈的支持。在此谨 向王 老师致以诚挚的谢意和崇高的敬意。

在此,我还要感谢在一起愉快的度过四年大学生活的638每个同学,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。

参考文献

[1] 蒋东兴 沈培华 罗念龙等. 清华大学网络教学实践与规划[J]. 新世纪网络教育研讨会. 2001年,6月,第四期.

[2] 武祥村 陶超全 周霖 一个网上共享式CAI课件点播学习系统TH-COD[J],现代教育技术研究与应用. 1999年,10月,第三期.

[3] 黄维通 黄欣 汤荷美. 基于BWD的网络考试系统的设计与实现[J]. 计算机工程. 2000年,11月, 第26卷.

[4] 周霖 武祥村 蒋东兴. 课件点播系统研究与实现[J]. 计算机工程. 2000年,11月,第26卷.

[5] 柳泉波. Internet环境下的网络自动答疑系统[J]. 教育技术通信. 1999年,3月,第七期.

[6] 吴娟. 网上协作学习策略的研究[J]. 教育技术通信. 1999年, 3月, 第七期.

[7] 顾君忠. 现代远程教育技术和CSCL[J]全国CBE学会 基于网络和计算机的教育 专题论文集. 2000年, 1月, 第6卷.

[8] 赵建华 李克东. 信息技术环境下基于协作学习的教学设计[J]. 教育技术通信. 1999年, 3月, 第七期.

[9] 张毅斌 顾君忠. VClassRoom:一个基于子空间模型的协同教学系统[J]. 通信学报. 1999年,9月,第九卷.

[10] Calms R B. Infrared spectroscopic studies on solid oxygen[M]. Berkeley: Univ.of California ,1965.

附  录

核心代码由于版面的原因主要列举了接口,接口的实现,业务逻辑的实现及模型JAVABEAN,代码如下:
    IbusinessService接口

package cc.auto.service;

import java.util.List;

import cc.auto.bean.Attachment;

import cc.auto.bean.ImageInfo;

import cc.auto.bean.LeaveWord;

import cc.auto.bean.Ques;

import cc.auto.web.util.Finder;

public interface IBusinessService {

public static final String QUES = "que";//定义一个静态的QUES常量

public List getQues(int number);

public List getLeaveWords(int number);

public Ques getQues(long quesId);

public LeaveWord getLeaveWords(long leaveWordId);

public void addLeaveWord(LeaveWord leaveWord);

public Finder getQuesePagination(int page);

public Finder getLeaveWordPagination(int page);

public Ques addQues(Ques ques);

public List<Attachment> getAttachments(String attachmentType, long useAttachmentId);//获取附件

public Attachment addAttachment(Attachment attachment);//添加附件

public ImageInfo addImageInfo(ImageInfo image);

public List<ImageInfo> getImages(String imageType, long useImageId);

public Ques updateQues(Ques ques);

public void removeQues(long quesId);

public void removeLeaveWords(long leaveWordId);

}

//定义一个Finder类实现分页

package cc.auto.web.util;

import java.util.List;

public class Finder {

private List collection;

private int totalRows = 0;

private int totalPages = 0;

private int pageSize = 10;

private int currentPage = 1;

private int toPage = 1;

private boolean hasPrevious = false;

private boolean hasNext = false;

public void setTotalRows(int totalRowsNum) {

this.totalRows = totalRowsNum;

this.totalPages = ((totalRowsNum + pageSize) - 1) / pageSize;

refresh();

}

public void first() {

this.currentPage = 1;

this.toPage = 1;

refresh();

}

public void previous() {

this.currentPage--;

this.toPage--;

refresh();

}

public void next() {

if (currentPage < totalPages) {

currentPage++;

this.toPage++;

}

refresh();

}

public void last() {

currentPage = totalPages;

refresh();

}

public boolean isHasNext() {

return hasNext;

}

public boolean isHasPrevious() {

return hasPrevious;

}

public void refresh() {

if (totalPages <= 1) {

hasPrevious = false;

hasNext = false;

} else if (currentPage == 1) {

hasPrevious = false;

hasNext = true;

} else if (currentPage == totalPages) {

hasPrevious = true;

hasNext = false;

} else {

hasPrevious = true;

hasNext = true;

}

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getToPage() {

return toPage;

}

public void setToPage(int toPage) {

this.toPage = toPage;

this.currentPage = toPage;

}

public int getTotalPages() {

return totalPages;

}

public void setTotalPages(int totalPages) {

this.totalPages = totalPages;

}

public int getTotalRows() {

return totalRows;

}

public List getCollection() {

return collection;

}

public void setCollection(List collection) {

this.collection = collection;

}

public void setHasNext(boolean hasNext) {

this.hasNext = hasNext;

}

public void setHasPrevious(boolean hasPrevious) {

this.hasPrevious = hasPrevious;

}

}

//基类BaseDao,继承了springframework下的JdbcDaoSupport

package cc.auto.dao;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class BaseDao extends JdbcDaoSupport {

}

// QuesDao继承了BaseDao实现了业务逻辑

package cc.auto.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import org.springframework.jdbc.core.PreparedStatementCreator;

import org.springframework.jdbc.core.PreparedStatementSetter;

import org.springframework.jdbc.core.RowCallbackHandler;

import org.springframework.jdbc.support.GeneratedKeyHolder;

import org.springframework.jdbc.support.KeyHolder;

import cc.auto.bean.Ques;

import cc.auto.web.util.Finder;

public class QuesDao extends BaseDao {

//定义SQL语句查询出所有的问题的信息

private static final String QUESES = "select * from ques order by create_time desc limit ?,?";

//定义SQL语句根据ID查询出某条的问题信息

private static final String QUES = "select * from ques where ques_id=?";

//定义SQL语句查询数据库中问题的总行数

private static final String QUES_COUNT = "select count(*) as ques_count from ques";

//定义SQL语句向数据库中插入问题名称,问题内容,问题提交时间

private static final String ADD_QUES = "insert ques(ques_title,ques_content,create_time) values(?,?,?)";

//定义SQL语句根据ID修改问题信息

private static final String UPDATE_QUES = "update ques set ques_title=?,ques_content=?,create_time=? where ques_id=?";

//定义SQL语句删除数据库中的某条问题信息

private static final String DELETE = "delete from ques where ques_id=?";

//定义SQL语句实现对数据库中的问题名称模糊查询

private static final String QUERY_QUES = "select * from ques where ques_title like ?";

//分页查询数据库中的问题

public List<Ques> getQuese(final Finder finder) {

final List<Ques> quese = new ArrayList<Ques>();

final int firstResult = (finder.getToPage() - 1) * finder.getPageSize();

this.getJdbcTemplate().query(QUESES, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setInt(1, firstResult);

ps.setInt(2, finder.getPageSize());

}

}, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

Ques ques = new Ques();

ques.setQuesId(rs.getLong("ques_id"));

ques.setQuesTitle(rs.getString("ques_title"));

ques.setQuesContent(rs.getString("ques_content"));

ques.setCreateTime(rs.getTimestamp("create_time"));

quese.add(ques);

}

});

return quese;

}

//根据ID查询数据库中的问题

public Ques getQues(final long quesId) {

final Ques ques = new Ques();

this.getJdbcTemplate().query(QUES, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setLong(1, quesId);

}

}, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

ques.setQuesId(rs.getLong("ques_id"));

ques.setQuesTitle(rs.getString("ques_title"));

ques.setQuesContent(rs.getString("ques_content"));

ques.setCreateTime(rs.getTimestamp("create_time"));

}

});

return ques;

}

//获得数据库中的问题总行数

public void getQuesNum(final Finder finder) {

this.getJdbcTemplate().query(QUES_COUNT, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

finder.setTotalRows(rs.getInt("ques_count"));

}

});

}

//根据问题名称实现对数据库的模糊查询

public List< Ques > get Ques (final String quesTitle) {

final List< Ques > ques = new ArrayList< Ques >();

this.getJdbcTemplate().query(QUERY_ QUES, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setString(1, "%"+ quesTitle.trim()+"%");

}

}, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

Ques qe = new Ques ();

qe.setQuesId(rs.getLong("ques_id"));

qe. setQuesTitle(rs.getString("ques_title"));

qe.setQuesContent (rs.getString("ques_content"));

pd.setCreateTime(rs.getTimestamp("create_time"));

ques.add(qe);

}

});

return products;

}

//提交保存问题

public Ques save(final Ques ques) {

KeyHolder keyHolder = new GeneratedKeyHolder();// 创建一个主键执有者

getJdbcTemplate().update(new PreparedStatementCreator() {

public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {

PreparedStatement ps = conn.prepareStatement(ADD_QUES); ps.setString(1, ques.getQuesTitle());

ps.setString(2, ques.getQuesContent());

ps.setTimestamp(3, new java.sql.Timestamp(ques.getCreateTime().getTime()));

return ps;

}

}, keyHolder);

ques.setQuesId(keyHolder.getKey().longValue());// 从主键执有者中获取主键

return ques;

}

//修改问题

public Ques update(final Ques ques) {

this.getJdbcTemplate().update(UPDATE_QUES, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setString(1, ques.getQuesTitle());

ps.setString(2, ques.getQuesContent());

ps.setTimestamp(3, new java.sql.Timestamp(ques.getCreateTime().getTime()));

ps.setLong(4, ques.getQuesId());

}

});

return ques;

}

//删除问题

public void delete(final long quesId) {

this.getJdbcTemplate().update(DELETE, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setLong(1, quesId);

}

});

}

}

// LeaveWordDao继承BaseDao实现提交问题业务逻辑

package cc.auto.dao;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import org.springframework.jdbc.core.PreparedStatementSetter;

import org.springframework.jdbc.core.RowCallbackHandler;

import cc.auto.bean.LeaveWord;

import cc.auto.web.util.Finder;

public class LeaveWordDao extends BaseDao {

//定义SQL语句查询所有的留言信息

private static final String SELECT_LEAVEWORDS = "select * from leave_word order by create_time desc limit ?,?";

//定义SQL语句实现根据ID查询某条的留言信息

private static final String SELECT_LEAVEWORD = "select * from leave_word where leave_word_id=?";

//定义SQL语句向数据库中插入留言者问题名称,问题内容,提交时间

private static final String INSERT_LEAVEWORD = "insert into leave_word (quesName,content,create_time) values(?,?,?)";

//定义SQL语句查询数据库中的留言信息总行数

private static final String LEAVEWORD_COUNT = "select count(*) as leaveword_count from leave_word";

//定义SQL语句,根据ID删除数据库中的某条留言

private static final String DELETE = "delete from leave_word where leave_word_id=?";

//分页查询留言信息

public List<LeaveWord> getLeaveWord(final Finder finder) {

final List<LeaveWord> leaveWord = new ArrayList<LeaveWord>();

final int firstResult = (finder.getToPage() - 1) * finder.getPageSize();

this.getJdbcTemplate().query(SELECT_LEAVEWORDS,

new PreparedStatementSetter() {

public void setValues(PreparedStatement ps)

throws SQLException {

ps.setInt(1, firstResult);

ps.setInt(2, finder.getPageSize());

}

}, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

LeaveWord lw = new LeaveWord();

lw.setLeaveWordId(rs.getLong("leave_word_id"));

lw.setQuesName(rs.getString("ques_name"));

lw.setContent(rs.getString("content"));

lw.setCreateTime(rs.getTime("create_time"));

leaveWord.add(lw);

}

});

return leaveWord;

}

//根据ID查询某条留言的详细信息

public LeaveWord getLeavewords(final long leaveWordId) {

final LeaveWord lw = new LeaveWord();

this.getJdbcTemplate().query(SELECT_LEAVEWORD, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setLong(1, leaveWordId);

}

}, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

lw.setLeaveWordId(rs.getLong("leave_word_id"));

lw.setQuesName(rs.getString("ques_name"));

lw.setContent(rs.getString("content"));

lw.setCreateTime(rs.getTimestamp("create_time"));

}

});

return lw;

}

//获得数据库中的留言总行数

public void getLeavewordNum(final Finder finder) {

this.getJdbcTemplate().query(LEAVEWORD_COUNT, new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

finder.setTotalRows(rs.getInt("leaveword_count"));

}

});

}

//添加留言

public void addLeaveWord(final LeaveWord leaveWord) {

this.getJdbcTemplate().update(INSERT_LEAVEWORD, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setString(1, leaveWord.getQuesName());

ps.setString(2, leaveWord.getContent());

ps.setTimestamp(3, new java.sql.Timestamp(leaveWord.getCreateTime().getTime()));

}

});

}

//根据ID删除数据库中的某条留言

public void delete(final long leaveWordId) {

this.getJdbcTemplate().update(DELETE, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setLong(1, leaveWordId);

}

});

}

}

实现IbusinessService接口

package cc.auto.service;

import java.util.List;

import cc.auto.bean.Attachment;

import cc.auto.bean.ImageInfo;

import cc.auto.bean.LeaveWord;

import cc.auto.bean.Ques;

import cc.auto.dao.AttachmentDao;

import cc.auto.dao.ImageDao;

import cc.auto.dao.LeaveWordDao;

import cc.auto.dao.QuesDao;

import cc.auto.web.util.Finder;

public class BusinessService implements IBusinessService {

private QuesDao quesDao;

private LeaveWordDao leaveWordDao;

private AttachmentDao attachmentDao;

private ImageDao imageDao;

//查询指定数目的问题

public List getQues(int number) {

Finder finder = new Finder();

finder.setToPage(1);

finder.setPageSize(number);

return quesDao.getQuese(finder);

}

//查询指定数目的留言

public List getLeaveWords(int number) {

Finder finder = new Finder();

finder.setToPage(1);

finder.setPageSize(number);

return leaveWordDao.getLeaveWord(finder);

}

//注入QuesDao

public final void setQuesDao(QuesDao quesDao) {

this.quesDao = quesDao;

}

//注入LeaveWordDao

public final void setLeaveWordDao(LeaveWordDao leaveWordDao) {

this.leaveWordDao = leaveWordDao;

}

//根据ID查询问题

public Ques getQues(long quesId) {

return quesDao.getQues(quesId);

}

//根据ID查询留言

public LeaveWord getLeaveWords(long leaveWordId) {

return leaveWordDao.getLeavewords(leaveWordId);

}

//添加留言

public void addLeaveWord(LeaveWord leaveWord) {

this.leaveWordDao.addLeaveWord(leaveWord);

}

//分页

public Finder getQuesePagination(int page) {

Finder finder = new Finder();

finder.setToPage(page);

quesDao.getQuesNum(finder);

finder.setCollection(quesDao.getQuese(finder));

return finder;

}

//分页

public Finder getLeaveWordPagination(int page) {

Finder finder = new Finder();

finder.setToPage(page);

leaveWordDao.getLeavewordNum(finder);

finder.setCollection(leaveWordDao.getLeaveWord(finder));

return finder;

}

//问题

public Ques addQues(Ques ques) {

return quesDao.save(ques);

}

//获取附件

public List<Attachment> getAttachments(String attachmentType, long useAttachmentId) {

return attachmentDao.getAttachments(attachmentType, useAttachmentId);

}

//注入AttachmentDao

public final void setAttachmentDao(AttachmentDao attachmentDao) {

this.attachmentDao = attachmentDao;

}

//添加附件

public Attachment addAttachment(Attachment attachment) {

return attachmentDao.save(attachment);

}

//添加图片

public ImageInfo addImageInfo(ImageInfo image) {

return imageDao.save(image);

}

//修改问题

public Ques updateQues(Ques ques) {

return quesDao.update(ques);

}

//删除问题

public void removeQues(long quesId) {

attachmentDao.removeAttachments(QUES, quesId);

imageDao.removeImages(QUES, quesId);

quesDao.delete(quesId);

}

//删除留言

public void removeLeaveWords(long leaveWordId) {

leaveWordDao.delete(leaveWordId);

}

}

//提问模型JAVABEAN

package cc.auto.bean;

import java.util.Date;

public class Ques  implements java.io.Serializable {

private long quesId;

private String quesTitle;

private String quesContent;

private Date createTime;

/** default constructor */

public Ques() {

}

/** minimal constructor */

public Ques(long quesId) {

this.quesId = quesId;

}

/** full constructor */

public Ques(long quesId, String quesTitle,String quesContent, Date createTime) {

this.quesId = quesId;

this.quesTitle = quesTitle;

this.quesContent = quesContent;

this.createTime = createTime;

}

// Property accessors

public String getQuesTitle() {

return this.quesTitle;

}

public void setQuesTitle(String quesTitle) {

this.quesTitle = quesTitle;

}

public String getQuesContent() {

return this.quesContent;

}

public void setQuesContent(String quesContent) {

this.quesContent = quesContent;

}

public Date getCreateTime() {

return this.createTime;

}

public void setCreateTime(Date createTime) {

this.createTime = createTime;

}

public long getQuesId() {

return quesId;

}

public void setQuesId(long quesId) {

this.quesId = quesId;

}

}

//留言本模型JAVABEAN

package cc.auto.bean;

import java.util.Date;

public class LeaveWord  implements java.io.Serializable {

private long leaveWordId;

private String quesName;

private String content;

private Date createTime;

/** default constructor */

public LeaveWord() {

}

/** minimal constructor */

public LeaveWord(long leaveWordId) {

this.leaveWordId = leaveWordId;

}

/** full constructor */

public LeaveWord(long leaveWordId,String quesName, String content, Date createTime) {

this.leaveWordId = leaveWordId;

this.quesName = quesName;

this.content = content;

this.createTime = createTime;

}

public String getContent() {

return this.content;

}

public void setContent(String content) {

this.content = content;

}

public Date getCreateTime() {

return this.createTime;

}

public void setCreateTime(Date createTime) {

this.createTime = createTime;

}

public long getLeaveWordId() {

return leaveWordId;

}

public void setLeaveWordId(long leaveWordId) {

this.leaveWordId = leaveWordId;

}

public String getQuesName() {

return this.quesName;

}

public void setQuesName(String quesName) {

this.quesName = quesName;

}

技术文章(自动答疑系统)相关推荐

  1. 自动仓储系统(AS/RS)技术与装备

    4.1自动仓储系统(AS/RS)概述 自动仓储系统即AS/RS(Automated Storage and Retrieval System)是指不用人工直接处理.能自动存储和取出物料的系统.自动化仓 ...

  2. 基于SSH架构的在线答疑系统

    摘要 答疑是教学一个重要环节,在传统的教学模式下,答疑通常是通过老师和学生面对面进行交流,此模式使得答疑在实际教学难以执行.而网络教学模式就打破了传统模式在时间和空间上的限制,同学们可以自主安排时间和 ...

  3. 双网卡上网冲突解决_【技术文章】局域网IP地址冲突罪魁祸首是什么?这几点要注意!(附高手处理方法)...

    现如今,人们的生活处处离不开网络.单位办公信息化对网络的依赖则更大.为了提升安全管理和信息化水平,很多单位不仅建设了完善的办公信息系统,还部署了视频监控.但由于缺乏整体规划,或选择网络产品时考虑欠周, ...

  4. 基于web的教学答疑系统

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye2 第一章 绪 论 1.1基于Struts和Hibernate的教学答疑系统的优势 目前随着Int ...

  5. 基于量产的乘用车高速自动驾驶系统开发

    近日,深圳通过了<深圳经济特区智能网联汽车管理条例>,成为全国首个支持全域L3级自动驾驶的城市,为全国其他城市的L3级自动驾驶准入政策,提供了标准和模板. 在此之前,乘用车高速自动驾驶早已 ...

  6. 卡车自动装载系统(ATLS)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

    本文研究全球与中国市场卡车自动装载系统(ATLS)的发展现状及未来发展趋势,分别从生产和消费的角度分析卡车自动装载系统(ATLS)的主要生产地区.主要消费地区以及主要的生产商.重点分析全球与中国市场的 ...

  7. 自动驾驶系统入门(八)- 自动驾驶仿真技术

    1.什么是自动驾驶汽车 1.1 基本概念定义 1)自动驾驶汽车是通过搭载先进的车载传感器.控制器和数据处理器.执行机构等装置,借助车联网.5G和V2X等现代移动通信与网络技术实现交通参与物与彼此间的互 ...

  8. 【转】自动驾驶系统入门(八)- 自动驾驶仿真技术

    1.什么是自动驾驶汽车 1.1 基本概念定义 1)自动驾驶汽车是通过搭载先进的车载传感器.控制器和数据处理器.执行机构等装置,借助车联网.5G和V2X等现代移动通信与网络技术实现交通参与物与彼此间的互 ...

  9. 最新WordPress系统文章自动采集插件Auto Post完美运行版

    源码介绍: 今天有用户咨询wp的采集插件,找了一个WordPress文章采集插件Auto Post Pro3.6.2版本,可以多线程采集.自动采集免授权学习版,目前完美运行于的WordPress各个版 ...

最新文章

  1. MySQL 常见操作指令
  2. C++编程优化——让你的代码飞起来
  3. 单片机温度控制系统DS18B20
  4. Linux内核中断底半部处理--工作队列
  5. fasttext简单理解及应用
  6. java-List集合的源码分析(数据结构方面,源码注释方面),迭代器快速失败机制
  7. 南邮CTF-MISC-Remove Boyfriend
  8. openoffice转化太慢且不能多线程_职场新人众多工作要处理,手足无措咋办?“多线程工作法”来救急...
  9. java窗体实现射击_java_Java基于Swing实现的打猎射击游戏代码,本文实例讲述了Java基于Swing实 - phpStudy...
  10. 【动态规划】路径dp:蓝桥2020: 数字三角形
  11. 毕业设计-医院药品出入库管理系统
  12. 面试必备(背)-Linux八股文系列!
  13. java layoutinflater_安卓 LayoutInflater详解
  14. 魏俊妮《支持业务发展为核心的HR六大模块体系构建》课程大纲
  15. 使用 {}.format 对字符串进行格式(一)
  16. 进阶篇:5.1.1)确认公差分析的目标尺寸和判断标准
  17. 程序员离职后跳到国企,每天主动加班到10点,结果试用期没过?
  18. 微信又因夜间模式上热搜,我们又成为了谣言的传播者
  19. 企业微信2020年翻倍增长背后:更新27个版本、迭代1000多次
  20. asp.net 调试 无法显示该网页

热门文章

  1. 六款大数据采集平台的架构分析
  2. Matlab之时间函数datetime
  3. 修改Ubuntu镜像源
  4. PCB设计(四层板初步)
  5. PaperWeekly 第35期 | 如何让聊天机器人懂情感
  6. c++实验2-标准体重
  7. 物联网小白入门式教学,如何快速接入一个云平台② 机智云物联网云服务(重点讲解小白学习思路,高手忽略)
  8. 第一次注册机破解,Secure CRT
  9. java后台识别二维码的方法
  10. Kingfisher 5.13~ UIImageView、UIButton类扩展加载 网络图片