访问控制列表综合应用实验


-
路由器访问控制列表综合应用实验,路由器访问控制列表综合应用实验
5.68MB
CCNA实验参考-路由交换
2011-08-25实验1 交换机的基本配置 实验2 在交换机上配置Telnet 实验3 跨交换机实现VLAN 实验4 利用单臂路由实现VLAN问路由 实验5 利用三层交换机实现VLAN问路由 实验6 快速生成树配置 实验7 端口聚合配置 实验8 路由器的基本操作 实验9 在路由器上配置Telnet 实验10 静态路由配置 实验11 RIP路由协议基本配置 实验12 RIPv2配置 实验13 OSPF基本配置 实验14 OSPF单区域配置 实验15 广域网协议的封装 实验16 PPP PAP认证 实验17 PPP CHAP认证 实验18 交换机的端口安全 实验19 利用IP标准访问列表进行网络流量的控制 实验20 利用IP扩展访问列表实现应用服务的访问限制 实验21 利用访问列表进行VTY访问限制 实验22 利用动态NAPT实现局域网访问互联网 实验23 利用NAT实现外网主机访问内网服务器 实验24 建立开放式的无线接入服务 实验25 配置单频多模的无线网络 实验26 搭建采用WEP加密方式的无线网络 综合实验1 交换篇 综合实验2 混合篇 扩展实验1 利用TFTP升级现有交换机操作系统 扩展实验2 利用TFTP升级现有路由器操作系统 扩展实验3 利用ROM方式重写交换机操作系统 扩展实验4 利用ROM方式重写路由器操作系统 扩展实验5 利用TFTP备份还原交换机配置文件 扩展实验6 利用TFTP备份还原路由器配置文件
1.10MB
CCNA/CCNP试验集合
2008-11-19集合了以下几个试验 EIGRP的不等价负载均衡 OSPF和NAT综合实验 PPP实验 RIP协议版本共享实验 RIP与OSPF路由再发布 访问控制列表综合应用实验 网络地址转换(NAT)实验 虚拟局域网VLAN配置实验 组播实验(完整版)
5.92MB
计算机网络实验讲义包含实验报告模板
2010-06-11实验一 组建对等以太网 - 1 - 项目1 网线的制作与测试 - 4 - 项目2 对等网 - 4 - 实验二 网络基本测试工具及应用 - 5 - 项目1 ping - 5 - 项目2 Ipconfig - 7 - 项目3 Tracert - 7 - 项目4 Netstat - 7 - 项目5 Arp - 8 - 实验三 路由器的基本配置 - 9 - 项目1 超级终端协议的设置及路由器的启动 - 9 - 项目2 路由器的命令模式设置 - 12 - 项目3 路由器的基本配置 - 18 - 项目4 路由器端口的基本配置 - 20 - 项目5 清除路由器密码 - 21 - 实验四 路由协议的配置 - 22 - 项目1 配置静态路由 - 22 - 项目2 动态路由RIP V1协议 - 23 - 实验五 交换机的基本配置 - 24 - 项目1 超级终端协议的设置及交换器的启动 - 24 - 项目2 交换机的基本配置 - 25 - 项目3 交换机的密码清除 - 26 - 实验六 虚拟局域网VLAN - 28 - 项目1 Port VLAN的配置 - 29 - 项目2 划分Port VLAN实现端口隔离 - 30 - 项目3 VLAN实验练习 - 31 - 实验七 VLAN内及VLAN间的通信 - 32 - 项目1 VLAN Trunks的配置 - 32 - 项目2 定义Trunk口的许可VLAN列表 - 33 - 项目3 配置Native VLAN - 33 - 项目4 VLAN跨交换机通信 - 34 - 项目5 VLAN间的通信 - 36 - 实验八 生成树协议与链路聚合 - 37 - 项目1 生成树协议STP - 37 - 项目2 生成树协议RSTP - 38 - 项目3 链路聚合(aggregeteport) - 39 - 项目4 路由器与交换机的互连 - 40 - 实验九 HDLC及PPP协议 - 44 - 项目1 HDLC的封装 - 44 - 项目2 PPP及认证协议的配置 - 45 - 实验十 包过滤防火墙及设置 - 47 - 项目1 标准访问控制列表(ACL)的配置 - 47 - 项目2 扩展访问控制列表(ACL) - 48 - 实验十一 TFTP管理路由器配置 - 50 - 项目1 备份路由器的配置到TFTP服务器 - 50 - 项目2 从TFTP服务器恢复路由器的配置 - 51 - 实验十二 升级路由器操作系统 - 52 - 实验十三 路由器与交换机的综合配置 - 54 - 项目1 实验练习1 - 54 - 项目2 实验练习2 - 55 - 项目3 设计实验 - 57 - 实验考试(设计) - 59 - 模拟题1 - 59 - 模拟题2 - 64 -
2.7MB
毕业设计论文:计算机网络技术与工程实验项目设计
2008-06-16本设计通过对交换机、路由器、服务器等设备的配置,概括了高校所要学习的多数网络知识和操作应用,可以作为学习网络知识的参考资料,但为了有更多的提高,读者还应通过其它途径不断加强学习,以增强自己的网络知识水平。<br> 另外通过综合布线工程知识的应用,主要使学生了解数据通信中数据传输介质的相关知识,同时以综合布线系统的国际标准和国家标准为依据,掌握综合布线工程的施工技术、施工工程管理技术、网络测试技术、工程验收和管理维护等内容。使得学生通过自己的亲身经历和实验实践,提高自己对综合布线系统的认识以及对整个综合布线系统的把控能力。<br><br><br>第一章 绪 论 1<br>第二章 总体设计 2<br>2.1 系统总体设计方案 2<br>2.1.1 系统拓扑图 2<br>2.1.2 网络设计步骤 4<br>2.2 搭建网络系统环境 4<br>2.3 网络设备及其应用技术简介 5<br>2.3.1 二层交换机(数据链路层设备) 5<br>2.3.2 三层交换机(网络层设备) 5<br>2.3.3 路由器(网络层设备) 5<br>2.3.4防火墙(应用层设备) 6<br>第三章 详细设计 7<br>3.1 有线网络设备配置 7<br>3.1.1 各设备IP地址的设置 7<br>3.1.2 缺省路由(默认路由)配置 8<br>3.1.3 静态路由配置 8<br>3.1.4 动态路由OSPF配置 9<br>3.1.5 防火墙配置(ACL访问控制列表) 10<br>3.1.6 NAT网络地址转换(静态内部地址转换) 11<br>3.1.7 备份中心 13<br>3.2 无线网络设备 14<br>3.2.1 USB无线网卡 15<br>3.2.2无线路由器(D-LINK) 15<br>3.3视频点播系统的配置 16<br>3.3.1 视频服务器设置 16<br>3.3.2 组播协议PIM-DM配置 19<br>3.3.3 接收视频 21<br>3.4 Windows 2000 Server IIS服务器配置 22<br>3.4.1 创建WEB服务器 23<br>3.4.2 创建FTP服务器 24<br>第四章 系统测试以及故障排除 27<br>4.1 系统验证测试 27<br>4.1.1 相关测试、诊断命令 27<br>4.2 实际操作中发现的问题及故障排除 28<br>第五章 综合布线工程设计 30<br>5.1 认识综合布线的6大子系统及网线制作 30<br>5.1.1 实验原理、方法 30<br>5.2 利用VISIO绘制综合布线图,包括拓扑图、路由图,信息点分布图等 32<br>5.2.1 实验内容 32<br>5.3 常用布线工程工具的使用,信息模块的制作、配线架端接、跳线架的压接与使用 33<br>5.3.1 实验内容 33<br>5.3.2 实验原理、方法和手段 33<br>5.3.3 实验条件 33<br>5.3.4 实验步骤 33<br>结 论 35<br>致 谢 36<br>参考文献 37<br>附 录 38<br><br>
30.72MB
JSP动态网站开发基础教程与实验指导(从基础到应用)光盘
2012-06-01JSP动态网站开发基础教程与实验指导(从基础到应用)光盘 作者:王晓军 田中雨 刘跃军 等 全书共分12章,介绍了,JSP开发环境配置,页面组成元素,内置对象,访问数据库技术,JavaBean,Servlet技术,以及开发JSP技术需要掌握的HTML基础知识。《JSP动态网站开发基础教程与实验指导》最后提供了三个综合开发案例。《JSP动态网站开发基础教程与实验指导》附有配套光盘,提供了书中实例的源代码和视频教学文件。 《JSP动态网站开发基础教程与实验指导》可以作为JSP职业培训教材和各级院校JSP授课培训教程,也适合作为JSP自学资料和参考资料。 目录: 上篇 基础篇 1 第1章 JSP概述 1 1.1 JSP简介 1 1.1.1 JSP的形成及发展 1 1.1.2 JSP的优势 2 1.2 Servlet技术 4 1.3 JSP与CGI、PHP、ASP/ASP.NET的比较 5 1.3.1 CGI技术 5 1.3.2 PHP技术 6 1.3.3 ASP/ASP.NET技术 7 1.3.4 各种Web技术性能比较 9 1.4 JSP技术架构 9 第2章 JSP开发环境 14 2.1 JDK开发工具包 14 2.1.1 JDK概述 14 2.1.2 JDK的安装与配置 15 2.2 Tomcat服务器 19 2.2.1 Tomcat概述 19 2.2.2 Tomcat的下载与安装 20 2.2.3 显示字体实例 23 2.3 安装与配置Eclipse 25 2.3.1 Eclipse简介 25 2.3.2 安装MyEclipse 26 2.3.3 Eclipse加载Tomcat 30 2.3.4 在Eclipse中创建JSP 31 2.4 JSP页面执行流程 36 2.5 扩展练习 37 第3章 JSP页面元素 40 3.1 JSP页面的构成 40 3.2 脚本元素 42 3.2.1 声明 42 3.2.2 表达式 44 3.2.3 脚本小程序 44 3.3 指令元素 48 3.3.1 page指令 48 3.3.2 include指令 51 3.3.3 taglib指令 52 3.4 动作元素 53 3.4.1 文件导入标签 54 3.4.2 页面转发标签 56 3.4.3 追加参数标签 59 3.4.4 标签 59 3.5 扩展练习 62 第4章 内置对象 65 4.1 Request请求对象 65 4.1.1 Request简介 65 4.1.2 Request对象应用 66 4.2 Response响应对象 69 4.2.1 response简介 69 4.2.2 Response对象应用 70 4.3 Out输出对象 74 4.3.1 Out简介 74 4.3.2 Out对象应用 76 4.4 PageContext对象 77 4.4.1 PageContext简介 77 4.4.2 PageContext对象应用 78 4.5 Session会话对象 79 4.5.1 Session简介 79 4.5.2 Session对象应用 80 4.6 Application对象 82 4.7 Execption对象 83 4.8 Config参数配置对象 84 4.9 Cookie对象 85 4.10 扩展练习 88 第5章 JSP访问文件 91 5.1 File类 91 5.1.1 File类函数介绍 91 5.1.2 File类常见操作 93 5.2 数据流概述 97 5.3 字节流 99 5.3.1 使用类FileInputStream读文件 99 5.3.2 使用类FileOutputStream写文件 101 5.4 字符流 102 5.4.1 使用类FileReader读文件 103 5.4.2 使用类FileWriter写文件 104 5.5 回压字符流 106 5.6 文件上传 109 5.7 文件下载 113 5.8 文件计数器 116 5.9 扩展练习 117 第6章 JSP访问数据库 121 6.1 JDBC技术概述 121 6.1.1 JDBC简介 121 6.1.2 JDBC连接方式 122 6.2 JDBC数据库操作核心类 124 6.2.1 JDBC核心类结构 124 6.2.2 驱动程序管理类:DriverManager 125 6.2.3 数据库连接类:Connection 128 6.2.4 SQL声明类:Statement 130 6.2.5 查询结果类:ResultSet 133 6.3 JDBC数据库操作实例 136 6.3.1 新建数据库元素 137 6.3.2 插入数据 138 6.3.3 显示数据 140 6.3.4 更新及删除数据 142 6.3.5 数据库
623KB
数据结构(C++)有关练习题
2008-01-02实验一 复习C++有关知识<br>实验目的:<br>通过实验掌握下列知识: <br>1、复习C++有关基本知识;<br>2、熟悉VC编程、编译和调试环境;<br>内容及步骤:<br>编写一个类Complex,定义复数的加法、减法、乘法和除法运算,要求在编写该类时重载这些运算操作符,并重载I/O操作符,以便输入和输出复数;<br>实验报告要求:<br>按要求写出完整的实验代码;<br><br>实验二 单链表结构及计算<br>实验目的:<br>通过实验掌握下列知识: <br>1、熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;<br>2、继续熟悉VC编程、编译和调试环境;<br>内容及步骤:<br>1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,e2,e1,e0)。<br>2、 针对带附加头结点的单链表,试编写下列函数:<br>A. 定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL;<br>B. 球最大值函数max:通过单链表的一趟遍历,在单链表中确定值最大的结点;<br>C. 统计函数number:统计单链表中具有给定值x的所有元素数量;<br>D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。<br>E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余结点。<br>实验报告要求:<br>按要求写出完整的实验代码;<br><br>实验三 堆栈结构与递归<br>实验目的:<br>通过实验掌握下列知识: <br>1、掌握堆栈的结构和运算应用;<br>2、掌握并运用递归的概念进行编程;<br>内容及步骤:<br>1、 借助堆栈实现单链表上的逆置运算;<br>要求: a. 用C++编程;<br> b. 首先用C++实现单链表编程,再基于编写好的单链表类,实现堆栈类的定义和实现。<br> c. 链表类和堆栈类都要包含必要的成员函数(按照教材要求)。<br>2、 已知a[n]为整数数组,试写出实现下列运算的递归代码(C或C++代码均可):<br>要求: a. 求数组中的最大整数;<br> b. 求n个数的和;<br> c. 利用堆栈类,将本题a和b的代码改成非递归的方式。<br>实验报告要求:<br>按要求写出完整的实验代码;<br><br>实验四 综合(课程设计)<br>内容及步骤:<br>1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素个数。<br>2、 请用C++编写一个算法,完成以下功能:<br>a. 从键盘输入一段文字,以$作结束符号;<br>b. 统计文字中的文本行数,字母,数字以及其他符号的数量,并在屏幕上显示;<br>3、 请用C++编写一个算法,完成矢量的加法与成法运算,运算规则如下:<br>a. 矢量加法:(a1,a2,……,an)+(b1,b2,……,bn)=(a1+b1,a2+b2,……,an+bn);<br>b. 矢量减法:(a1,a2,……,an)-(b1,b2,……,bn)=(a1-b1,a2-b2,……,an-bn);<br>c. 矢量点积:(a1,a2,……,an)*(b1,b2,……,bn)=(a1*b1,a2*b2,……,an*bn);<br>d. 矢量与实数相乘:a*(b1,b2,……,bn)=(a*b1,a*b2,……,a*bn);<br>4、 请用C++结合链表编写一个简单的机票订票程序,要求完成以下功能:<br>a. 允许出现多个班机;<br>b. 创建一个班机链表,每个节点都包含指向一个乘客链表的指针;<br>c. 该程序要有顾客购票,查询班机起飞降落时间,班机订票情况等3个功能,并实现菜单选项<br>5、 用C++编写一个简单的行编辑器,每个结点保存一行文本,程序以E file开始,然后显示行数和提示符,如果输入I,后面跟着一个数字n,就在第n行之前插入后续文本,如果I后面没有跟数字,就在当前行之前插入文本,如果输入D,后面跟着m,n,一个数字n或者没有数字,就分别删除m到n行,第n行或者当前行,命令L用于显示文本;<br>6、 用C++编写求多项式的和与积的算法,要求如下: <br>a. 要求从键盘分别输入2个多项式的系数以及最高次幂;<br>b. 通过重载操作符+和*,完成多项式的和与积的计算;<br>c. 输出运算结果;<br>7、 编写一个程序,将10进制数转换为其它(2-9)进制数。可以将要转换的数重复除以基数,然后讲除的余数按反方向排列来实现;<br>8、 已知A[n]为正数数组,试写出实现下列运算的递归算法;<br>a. 求数组A中的最大整数;<br>b. 求n个数的平均值;<br>c. 求n个整数的平均值;<br>9、 已知f为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法:<br>a. 求链表中的最大整数;<br>b. 求链表的结点个数;<br>c. 求所有整数的平均数;<br>告要求:<br>写出能运行的完整的代码。<br><br>实验五 二叉树(一)<br>实验目的:<br>通过实验掌握下列知识: <br>1、熟悉二叉树的存储结构和遍历算法;<br>2、通过二叉树遍历操作了解递归的本质和方法;<br>内容及步骤:<br>1、 试建立一个二叉搜索树,并实现以下成员函数:<br>a. 默认构造函数和带数据域、左子树指针、右子树指针的构造函数;<br> b. 按照二叉搜索树的要求设计插入函数Insert(int Info);<br> c. 用递归的方法设计前序遍历和后续遍历函数,遍历时要输出遍历的每个结点;<br> d. 设计一个构造函数,当对象结束时,要释放整个二叉搜索树所占的内存空间(提示,通过后序遍历算法找到叶结点,并删除叶结点,不断重复此过程,直到整科树为空);<br>2、实现1所要求的代码后,运行设计好的代码,将以下的几组整数序列建成搜索二叉树,并记录下它们的前序遍历序列和后序遍历序列:<br>a. 1、3、5、7、9;<br>b. 1、13、35、13、27;<br> c. 50、25、78、13、44、99、66。<br>实验报告要求:<br>1、 按要求记录下二叉搜索树的完整实验代码;<br>2、 按要求记录下要求的输出结果。<br><br><br>实验六 二叉树(二)<br>实验目的:<br>通过实验掌握下列知识: <br>1、继续熟悉二叉树的存储结构和遍历算法;<br>2、熟悉二叉搜索树的应用,并做一个小型的课程设计;<br>内容及步骤:<br>1、 在前一个实验的基础上,继续增加搜索函数Search(int Info)(如果找到结点,返回指向该结点的指针,如果没有,则返回空指针)和删除函数bool Delete(int Info),如果找到结点,则删除该结点,并保持二叉搜索树的基本结构,并返回true,否则返回false;<br>2、利用二叉搜索树实现一个音像商店(小型书店、小型超市、或小型药店)的交易管理系统,要求实现以下功能:<br>a. 该系统应该有一个字符型的主菜单;<br>b. 能按字母顺序显示库存商品的名称和数量;<br>c. 能添加和删除新的商品;<br>d. 当输入一个商品时,能显示该商品是否在库存中,如存在库存中,则显示其名称和数量,否则显示“未找到”。<br>e. 如有可能,请建立一个存储商品名称和数量的文本文件,并为二叉搜索树建立一个成员函数SetupInventory(),用于从该文本文件中读取库存商品的数据,<br>实验报告要求:<br>1、 按要求记录下二叉搜索树的完整实验代码;<br>2、 按要求记录下要求的输出结果。<br><br>实验六 图(课程设计)<br>实验目的:<br>通过实验掌握下列知识: <br>1、熟悉图的存储结构和遍历算法;<br>2、熟悉图的应用,并做一个小型的课程设计;<br>内容及步骤:<br>1、 设计一个图的类,采用临接表法进行存储,该图每个结点的数据类型类模板的模板参数进行定义(注:需先设计一个结点类Node);<br>2、 为该类分别设计一个实现深度优先搜索和广度优先搜索的成员函数,并要输出搜索结果;<br>注: 1、为了让你设计的图类拥有数据,可以设计一个成员函数,用于构造你自己预先设计好的图;<br> 2、要求的图如下,也可以自己构造图,但是需要注意的是,图不能是退化的单链表:<br> <br>实验报告要求:<br>1、 按要求记录下图的类的完整实验代码;<br>2、 纪录你所使用的图;<br>3、 按要求记录下要求的输出结果;<br><br><br>实验八 综合实验<br>内容及步骤:<br>1、请使用C++编写班级学生学籍管理程序<br>每个学生的信息包括:姓名、学号和英语、数学、程序设计及体育成绩。从键盘输入数据,建立数据文件student.dat,然后,利用C++编程完成如下处理:<br>(1)对学生姓名或学号进行查询,显示其信息 。<br>(2)对所有学生,按班级计算每一科平均成绩。<br>(3)分别按英语、数学、程序设计及体育成绩排序并输出到文件。<br>注:要用面向对象的方法来设计程序,每个班是一个类的实例;<br>2、用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。<br> (1)通讯录是按姓名项的字母顺序排列的;<br>(2)能查找通讯录中某人的信息;<br>(3)能添加和删除通讯录中的指定项。<br>注:要用面向对象的方法来设计程序,每个通讯录是一个类的实例;<br>3、从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权值(即字符出现的频度),建立哈夫曼树,进行编码并且输出。<br>注:可用C或C++编写。<br>4、用邻接矩阵或邻接图实现一个有向图的存储,并实现单源最短路径算法的实现(这个类的一个成员函数),并能输出该图的关键路径。<br>注:1、要用面向对象的方法设计代码;<br>2、一个图是一个类的实例;<br>3、类中要指出该图的起点。<br>实验报告要求:<br>写出完整的代码。<br><br><br><br>习题1 绪论------------------------------------------------------------------------------------6<br>习题2 线性表---------------------------------------------------------------------------------8<br>习题3 栈和队列------------------------------------------------------------------------------11<br>习题4 串---------------------------------------------------------------------------------------13<br>习题5 数组------------------------------------------------------------------------------------15<br>习题6 树与二叉树---------------------------------------------------------------------------17<br>习题7 图---------------------------------------------------------------------------------------24<br>习题8 查找------------------------------------------------------------------------------------31<br>习题9 排序------------------------------------------------------------------------------------34<br> <br>第1部分 C++基本知识<br>各种数据结构以及相应算法的描述总是要选用一种语言工具。在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的学生而编写。编写实验指导书目的为了配合理论教学。程序要求在C++ Builder开发环境之下调试运行,采用面向对象方法进行设计。典型的数据结构被设计成为类(class),典型算法设计成为类的函数成员,然后在主函数中声明创建类对象,根据实际需要调用重要的算法。<br>由于C++的使用具有一定的难度,为了同学更好的学习数据结构自身的知识内容,减轻描述工具所带来的困难,这里针对数据结构上机实验所必须的C++基本知识(结构体、类等等)做补充介绍。<br>一、 源程序组成<br><br> 这部分内容详细参见本指导书的第3部分的程序实例。<br>二、结构体及运用<br>数据结构课程所研究的问题均运用到“结构体”和“类”。在C++语言中结构体和函数又是理解和掌握“类”的语法基础。定义结构体的一般格式:<br>struct 结构体类型名<br> { 类型名1 变量名1; //数据子域<br>类型名2 变量名2;……<br>类型名n 变量名n;<br>}<br>其中struct是保留字。结构体类型名由用户自己命名。在使用时必须声明一个具体的结构体类型的变量,声明创建一个结构体变量的方法是:<br> 结构体类型名 结构体变量名;<br>一个结构体中可以包含多个数据子域。数据子域的类型名一般指基本数据类型(int char 等),也可是已经定义的另一结构体名。数据子域变量名可以是简单变量,也可以是数组。它们也可以称为结构体的数据成员,它们的访问控制具有‘公有’属性。<br>1. 通过“结构体变量名.数据子域” 可以访问数据子域。<br> // 设计Student结构体,在主程序中运用。<br>#include <iostream.h><br>#include <conio.h><br>#include <string.h><br>struct Student //定义结构体Student<br>{ long num; // 学号<br> int x; // 成绩<br> char name[10]; // 姓名<br>}<br>int main( ) <br> { Student s1; //声明创建一个结构体变量s1<br>//为s1的数据子域提供数据<br>s1.num=1001 ; <br>s1. x=83; <br>strcpy( s1.name, “ 李 明”); <br>//输出结构体变量s1 的内容<br>cout<< “ 姓名: ”<< s1.name <<endl;;<br>cout<< “ 学号: ”<< s1.num<<endl:<br>cout<< “ 成绩:”<< s1.x <<ednl; <br>_getch(); return 0;<br> }<br> 2. 设计一维数组,每个数组元素是Student结构体类型,通过以下语句段可以说明结构体数组的一般用法:通过“结构体数组名[下标].数据子域”访问数据域。<br> Student a[5]; //声明创建一个结构体数组a<br> for(int i=0, i<5, i++)<br>{ cout<<“学号:”; cin>>a[i].num; //输出数组元素a[i]的学号域<br>cout<<“姓名:”; cin>> a[i].name; //输出数组元素a[i]的姓名域<br>cout<<“成绩:”; cin>>a[i].x; //输出数组元素a[i]的成绩域 <br> } <br>以上是关于结构体的基本概念和简单运用。<br><br><br>三、 类的基本概念及运用<br>类的是面向对象程序的基本单位。类是由数据成员和相关的函数成员组成。从面向对象的角度考虑“学生”这个类,它不仅包括“学生”的一般属性:学号、姓名、成绩等等,还应包括对于这些属性的操作:输入/输出、听课、实验、等等。 <br>类定义的一般格式:<br>class 类名<br> { 若干数据成员;<br> 若干函数成员;<br> };<br>类的数据成员和函数成员均存在访问控制权限问题。访问控制分为三种:公有(public)、私有(private)和受护(protected)。<br>数据成员的定义和结构体中的数据域定义是相似的。不同的是它们必须明确访问控制。而公有数据成员,可以认为与结构体的数据域的访问权限相同。<br>成员函数的定义又和一般函数的定义基本相同。不同的是类中成员函数也必须明确访问控制权限。如果在类之中定义成员函数带函数体,并未有什么特殊之处。如果在类之中仅有成员函数的原型声明,当在类定义之外定义函数体时,需要加上类限定标识“类名::”。下面是“学生”类的定义:<br>class Students //定义类结构体Students<br> { private: //私有成员<br>long num; // 学号<br> int x; // 成绩<br> char name[10]; // 姓名<br>public: //公有成员<br> Students();<br> ~Students() { };<br> void SetDat( long n, int x0, char *na0 ) <br>{ num=n; x=x0; strcpy( name,na0);<br>}<br> void PrintOut( ); //输出函数的原型声明<br> …….;<br>};<br>void Students::PrintOut( ) // 输出函数前加Students:: <br> { cout<< “ 姓名: ”<< name <<endl;;<br>cout<< “ 学号: ”<< num<<endl:<br>cout<< “ 成绩:”<< x <<ednl; <br> }<br> 在主程序中运用类 Students。<br>int main( ) <br> { Students s; //声明创建一个类对象s,调用构造函数<br>s.PrintOut( ); //输出s的内容<br>long m; int y; char xname[10]; <br>cout<< “ 输入学号,成绩,姓名:” ;<br>cin>>m>>y>>xname;<br>s. SetDat( m, y, xname ) ; //修改对象s数据 <br>s. PrintOut(); //输出改变后s的内容<br>_getch(); return 0;<br>}<br>运行结果:<br> 姓名:O<br>学号:0<br>成绩:0 <br>输入学号,成绩,姓名:1001 90 WangMing<br>姓名:WangMing<br>学号:1001<br>成绩:90<br>这个例题中数据成员全部定义为私有(private),以便保证数据安全性。<br>而函数成员全部定义为公有(public)成员函数,可以作为类对外部的的接口。 通过s. SetDat( m, y, xname ) ; 直接访公有函数成员SetDat( ), 将实参(主函数的局部变量m, y, xname) 的数据赋给私有数据成员 num,x,name。 通过 s.PrintOut( );直接访公有函数成员PrintOut( ),间接访问输出私有成员num,x,name。<br>四、 结构体在类中的使用<br> 1.结构体数组做类的数据成员<br>const int MAXSIZE=100; // 数组的容量<br>struct ElemType // 数据元素的类型<br> { int numb;<br> char name[20];<br> long tel;<br> };<br>class Sqlist<br> { private:<br> ElemType elem[MAXSIZE]; //结构体ElemType类型的数组elem[ ]做数据成员<br> int length;<br> public:<br> Sqlist( void);<br> ~Sqlist(){ };<br>//其他函数……<br>};<br>2.结构体指针变量做类的数据成员<br>struct NodeType // 结点的结构定义<br> { int data; // 数据域 <br> NodeType *next; // 指针域 <br> };<br>class Link //类声明<br>{ private:<br> NodeType *Head; //指向结构构体NodeType的指针变量Head做数据成员 <br> public:<br> Link ( ){ Head=new NodeType; // 为头结点申请空间<br> Head->next=Head; // 头结点Head 形成空环<br> };<br> ~ Link (){ };<br> void creat();<br> void outs(); <br> };<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>第2部分 书面练习题<br>习题1 绪论<br>1.1 单项选择题<br>1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的① 、数据信息在计算机中的② 以及一组相关的运算等的课程。<br> ① A.操作对象 B.计算方法 C.逻辑结构 D.数据映象<br> ② A.存储结构 B.关系 C.运算 D.算法<br>2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是① 的有限集合,R是D上的② 有限集合。<br> ① A.算法 B.数据元素 C.数据操作 D.数据对象<br> ② A.操作 B.映象 C.存储 D.关系<br>3. 在数据结构中,从逻辑上可以把数据结构分成 。<br>A.动态结构和静态结构 B.紧凑结构和非紧凑结构 <br>C.线性结构和非线性结构 D.内部结构和外部结构<br>4. 算法分析的目的是① ,算法分析的两个主要方面是② 。<br>① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系<br>C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性<br>② A. 空间复杂性和时间复杂性 B. 正确性和简明性<br>C. 可读性和文档性 D. 数据复杂性和程序复杂性<br>5. 计算机算法指的是① ,它必具备输入、输出和② 等五个特性。<br> ① A. 计算方法 B. 排序方法<br>C. 解决问题的有限运算序列 D. 调度方法<br>② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 <br> C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性<br><br>1.2 填空题(将正确的答案填在相应的空中)<br>1. 数据逻辑结构包括 、 和 三种类型,树形结构和图形结构合称为 。<br>2. 在线性结构中,第一个结点 前驱结点,其余每个结点有且只有 个前驱结点;最后一个结点 后续结点,其余每个结点有且只有 个后续结点。<br>3. 在树形结构中,树根结点没有 结点,其余每个结点有且只有 个直接前驱结点,叶子结点没有 结点,其余每个结点的直接后续结点可以 。<br>4. 在图形结构中,每个结点的前驱结点数和后续结点数可以 。<br>5. 线性结构中元素之间存在 关系,树形结构中元素之间存在 关系,图形结构中元素之间存在 关系。<br>6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。<br>7. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。<br>for (i=0;i<n;i++)<br> for (j=0;j<n; j++)<br> A[i][j]=0;<br>8. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。<br>for (i=0;i<n;i++)<br> for (j=0; j<i; j++)<br>A[i][j]=0;<br>9. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。<br>s=0;<br>for (i=0;i<n;i++)<br> for (j=0;j<n;j++)<br> for (k=0;k<n;k++)<br> s=s+B[i][j][k];<br>sum=s;<br>10. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是__ __。<br>i=s=0;<br>while (s<n)<br>{ i++; <br> s+=i; //s=s+i <br>} <br>11. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是__ __。<br>i=1;<br>while (i<=n)<br> i=i*2;<br>1.3 算法设计题<br>1. 试写一算法,自大到小依次输出顺序读入的三个数X,Y和Z的值.<br>2. 试写一算法,求出n个数据中的最大值。写出最大语句频度,该算法的时间复杂度。<br> 习题答案<br> 1.1 1. C , A 2. B,D 3. C 4. C, A 5. C,B<br>1.2 1. 线性结构、树形结构、图形结构,非线性结构<br> 2. 没有、1、没有、1<br> 3. 前驱、1、后续、任意多个<br> 4. 任意多个<br> 5. 一对一、一对多、多对多<br> 6. 有穷性、确定性、可行性、输入、输出<br> 7. 最大语句频度:n2 , 时间复杂度:. O (n2)<br> 8. 最大语句频度:n (n+1)/2 , 时间复杂度:. O (n2)<br> 9. 最大语句频度:n3 , 时间复杂度:. O (n3)<br>10. 最大语句频度:n , 时间复杂度:. O (n ) <br>11. 最大语句频度:log2n, 时间复杂度:. O (log2n )<br><br><br><br><br>习题2 线性表<br>2.1 单项选择题<br>1. 一个向量(即一批地址连续的存储单元)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是__ __。<br> A. 110 B. 108 C. 100 D. 120<br>2. 线性表的顺序存储结构是一种__ _的存储结构,而链式存储结构是一种__ _的存储结构。<br>A.随机存取 B.索引存取 C.顺序存取 D.散列存取<br>3. 线性表的逻辑顺序与存储顺序总是一致的,这种说法__ _。<br>A. 正确 B. 不正确<br>4. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址__ _。<br>A. 必须是连续的 B. 部分地址必须是连续的<br>C. 一定是不连续的 D. 连续或不连续都可以<br>5. 在以下的叙述中,正确的是__ _。<br>A. 线性表的顺序存储结构优于链表存储结构<br>B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况<br>C. 线性表的链表存储结构适用于频繁插入/删除数据元素的情况<br>D. 线性表的链表存储结构优于顺序存储结构<br>6. 每种数据结构都具备三个基本运算:插入、删除和查找,这种说法__ _。<br>A. 正确 B. 不正确<br>7. 不带头结点的单链表head为空的判定条件是____。<br>A. head= =NULL B. head->next= =NULL<br>C. head->next= =head D. head!=NULL<br>8. 带头结点的单链表head为空的判定条件是____。<br>A. head= =NULL B. head->next= =NULL<br>C. head->next= =head D. head!=NULL<br>9. 非空的循环单链表head的尾结点(由p所指向)满足____。<br>A. p->next= =NULL B. p= =NULL<br>C. p->next= =head D. p= =head <br> 10. 在双向循环链表的p所指结点之后插入s所指结点的操作是____。<br>A. p->right=s; s->left=p; p->right->left=s; s->right=p->right;<br>B. p->right=s; p->right->left=s; s->left=p; s->right=p->right;<br>C. s->left=p; s->right=p->right; p->right=s; p->right->left=s;<br>D. s->left=p; s->right=p->right; p->right->left=s; p->right=s;<br> 11. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行____。<br>A. s->next=p->next; p->next=s; B. p->next=s->next; s->next=p;<br>B. q->next=s; s->next=p; C. p->next=s; s->next=q;<br>12. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行____。<br>A. s->next=p; p->next=s; B. s->next=p->next; p->next=s;<br>C. s->next=p->next; p=s; C. p->next=s; s->next=p;<br>13. 在一个单链表中,若删除p所指结点的后续结点,则执行____。<br>A. p->next= p->next->next; B. p= p->next; p->next= p->next->next;<br>C. p->next= p->next; D. p= p->next->next;<br>14. 从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较____个结点。<br>A. n B. n/2 C. (n-1)/2 D. (n+1)/2<br> 15. 在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是__ __。<br>A. O(1) B. O(n) C. O (n2) D. O (nlog2n)<br> 16. 给定有n个元素的向量,建立一个有序单链表的时间复杂度是__ __。<br>A. O(1)) B. O(n) C. O (n2) D. O (n*log2n)<br>2.2 填空题(将正确的答案填在相应的空中)<br>1. 单链表可以做__ __的链接存储表示。<br>2. 在双链表中,每个结点有两个指针域,一个指向____ __,另一个指向___ __。<br>3. 在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作:<br>q=head;<br>while (q->next!=p) q=q->next;<br>s= new Node; s->data=e;<br>q->next= ; //填空<br>s->next= ; //填空<br>4. 在一个单链表中删除p所指结点的后继结点时,应执行以下操作:<br>q= p->next;<br>p->next= _ ___; //填空<br>delete ; //填空<br>5. 在一个单链表中p所指结点之后插入一个s所指结点时,应执行s->next=__ __和p->next=____的操作。<br> 6. 对于一个具有n个结点的单链表,在已知p所指结点后插入一个新结点的时间复杂度是__ __;在给定值为x的结点后插入一个新结点的时间复杂度是__ __。<br>2.3 算法设计题:<br>1.设顺序表va中的数据元数递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。<br>2.试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1, a2,…. an)逆置为(an, an-1,…., a1)。<br>3. 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一算法,删除表中所有大于x且小于y的元素(若表中存在这样的元素)同时释放被删除结点空间。<br>4. 试写一算法,实现单链表的就地逆置(要求在原链表上进行)。<br> 习题答案<br> 2.1 1. B 2. A, C 3. B 4. D 5. C 6. A 7. A 8. B<br> 9. C 10. D 11.B 12.B 13.A 14.D 15.B 16.C<br> 2.2 1. 线性结表 2. 前驱结点、后继结点<br> 3. s, p 4. q->next, q<br> 5. p->next, s 6. O (1) , O (n)<br><br>习题3 栈和队列<br>3.1 单项选择题<br>1. 一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是____。<br> A. edcba B. decba C. dceab D. abcde <br>2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为____。<br> A. i B. n=i C. n-i+1 D. 不确定<br>3. 栈结构通常采用的两种存储结构是____。<br>A. 顺序存储结构和链式存储结构<br>B. 散列方式和索引方式<br>C. 链表存储结构和数组<br>D. 线性存储结构和非线性存储结构<br>4. 判定一个顺序栈ST(最多元素为m0)为空的条件是____。<br>A. top !=0 B. top= =0 C. top !=m0 D. top= =m0-1<br>5. 判定一个顺序栈ST(最多元素为m0)为栈满的条件是____。<br>A. top!=0 B. top= =0 C. top!=m0 D. top= =m0-1<br>6. 栈的特点是____,队列的特点是____。<br> A. 先进先出 B. 先进后出<br>7. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行__ __。<br>(不带空的头结点)<br>A. HS—>next=s;<br>B. s—>next= HS—>next; HS—>next=s;<br>C. s—>next= HS; HS=s;<br>D. s—>next= HS; HS= HS—>next;<br>8. 从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行__ __。(不带空的头结点) <br>A. x=HS; HS= HS—>next; B. x=HS—>data;<br>C. HS= HS—>next; x=HS—>data; D. x=HS—>data; HS= HS—>next;<br>9. 一个队列的数据入列序列是1,2,3,4,则队列的出队时输出序列是____ 。<br> A. 4,3,2,1 B. 1,2,3,4 <br> C. 1,4,3,2 D. 3,2,4,1<br>10. 判定一个循环队列QU(最多元素为m0)为空的条件是____。<br>A. rear - front= =m0 B. rear-front-1= =m0<br>C. front= = rear D. front= = rear+1<br>11. 判定一个循环队列QU(最多元素为m0, m0= =Maxsize-1)为满队列的条件是____。<br>A. ((rear- front)+ Maxsize)% Maxsize = =m0<br>B. rear-front-1= =m0 C. front= =rear <br>D. front= = rear+1<br>12. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是____。<br>A. (rear-front+m)%m B. rear-front+1<br>C. rear-front-1 D. rear-front<br>13. 栈和队列的共同点是____。<br>A. 都是先进后出 B. 都是先进先出<br>C. 只允许在端点处插入和删除元素 D. 没有共同点<br>3.2 填空题(将正确的答案填在相应的空中)<br>1. 向量、栈和队列都是____结构,可以在向量的____位置插入和删除元素;对于栈只能在____插入和删除元素;对于队列只能在____插入元素和____删除元素。<br>2. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动____个元素。<br>3. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动____个元素。<br>4. 向栈中压入元素的操作是____。<br>5. 对栈进行退栈时的操作是____。<br>6. 在一个循环队列中,队首指针指向队首元素的____。<br>7. 从循环队列中删除一个元素时,其操作是____。<br>8. 在具有n个单元的循环队列中,队满时共有____个元素。<br>9. 一个栈的输入序列是12345,则栈的输出序列43512是____。<br>10. 一个栈的输入序列是12345,则栈的输出序列12345是____。<br>3.3 算法设计题:<br>1. 输入一个任意的非负十进制整数,输出与其等值的八进值数。<br>2. 按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,并仿照教科书3.2节例3—1的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:<br>A-B*C/D+E↑F<br>3. 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。<br><br> 习题答案<br>3.1 1. C 2. C 3. A 4. B 5.D 6. BA 7.C 8. B 9. C 10. C <br>11. A 12. A 13.C <br>3.2 1. 线性、任何、栈顶、队尾、队首 2. n-i+1 3. n-i<br> 4.先移动栈顶指针,后存入元素 5. 先取出元素,后移动栈顶指针<br> 6.前一个位置 7. 先移动队首元素,后取出元素<br> 8. n-1 9. 不可能的 10. 可能的<br><br><br>习题4 串<br>4.1 单项选择题<br>1.以下叙述中正确的是 。<br>A.串是一种特殊的线性表 B.串的长度必须大于零<br>C.串中无素只能是字母 D.空串就是空白串<br>2.空串与空格串是相同的,这种说法____。<br>A. 正确 B. 不正确<br>3.串是一中特殊的线性表,其特殊性体现在____。<br>A. 可以顺序存储 B. 数据元素是一个字符<br>C. 可以链接存储 D. 数据元素可以是多个字符<br>4.设有两个串p和q,求q在p中首次出现的位置的运算称作____。<br>A. 连接 B. 模式匹配<br>C. 求子串 D. 求串长<br>5.设串s1=’ABCDEFG’,s2=’PQRST’,函数con (x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con (subs (s1,2,len (s2)), subs (s1,len (s2),2))的结果串是____。<br>A. BCDEF B. BCDEFG<br>C. BCPQRST D. BCDEFEF<br>6.设串的长度为n,则它的子串个数为 。<br>A.n B.n(n+1) C.n(n+1)/2 D.n(n+1)/2+1<br>4.2 填空题(将正确的答案填在相应的空中)<br>1.串的两种最基本的存储方式是____。<br>2.两个串相等的充分必要条件是____。<br>3.空串是____,其长度等于____。<br>4.空格串是____,其长度等于____。<br>5.设s=’I︺AM︺A︺TEACHER’,其长度是____。<br>4.3 判断题<br>1.串是由有限个字符构成的连续序列,串长度为串中字符的个数,子串是主串中<br>符构成的有限序列。 ()<br>2.子串定位函数的时间复杂度在最坏情况下为O(n*m),因此子串定位函数没有实际使用的价值。 ()<br>3.KMP算法的最大特点是指主串的指针不需要回溯。 ()<br>4.设模式串的长度为m,目标串的长度为n;当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价也可能会更为节省。 ()<br>5.如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。 ()<br>4.3 算法设计题<br>1.编写算法,从串s 中删除所有和串 t相同的子串。<br>2.编写算法,实现串的基本操作Replace(&S,T,V)。<br>3.写一个递归算法来实现字符串逆序存储,要求不另设存储空间。<br>习题答案<br>4.1 1.A 2.B 3.B 4.B 5.D 6.C<br>4.2 <br>1.顺序存储方式和链接存储方式<br> 2.两个串的长度相等且对应位置的字符相同<br> 3.零个字符的串、零<br> 4.由一个或多个空格字符组成的串、其包含的空格个数<br> 5.14<br>4.3 × × √ √ ×<br>4.4 <br>3. void reverse(char arr[])<br>{char ch;<br> int i=1; <br>do{cin>>ch;<br> reverse(arr);<br> arr[i]=ch;<br> i++;<br> }while(ch!=’#’&&i<n)<br>}<br><br>习题5 数组和广义表<br>5.1 单项选择题<br>1. 常对数组进行的两种基本操作是____。<br>A. 建立与删除 B. 索引和修改 <br> C. 对数据元素的存取和修改 D. 查找与索引<br>2. 二维数组M的成员是6个字符(每个字符占一个存储单元,即一个字节)组成的串,行下标i的范围从0到8,列下标j的范围从0到9,则存放M 至少需要①_ _个字节;M数组的第8列和第5行共占②____个字节。<br>① A. 90 B. 180 C. 240 D. 540<br>② A. 108 B. 114 C. 54 D. 60<br>3. 二维数组A中,每个元素的长度为3个字节,行下标i从0到7,列下标j从0到9,从首地址SA开始连续存放在存储器内,存放该数组至少需要的字节数是____。<br>A. 80 B. 100 C.240 D. 270<br> 4. 二维数组A中,每个元素A的长度为3个字节,行下标i从0到7,列下标j从0到9,从首地址SA开始连续存放在存储器内,该数组按行存放时,数组元素A[7][4]的起始地址为____。<br>A. SA+141 B. SA+144 C. SA+222 D. SA+225<br> 5. 二维数组A中,每个元素A的长度为3个字节,行下标i从0到7,列下标j从0到9,从首地址SA开始连续存放在存储器内,该数组按列存放时,元素A[4][7]的起始地址为____。<br>A. SA+141 B. SA+180 C. SA+222 D. SA+225<br>5.2 填空题(将正确的答案填在相应的空中)<br>1. 已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是_______。<br>2. 二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元并且A[0][0]的存储地址是200,则A[6][12]的地址是____。<br>3. 二维数组A[10..20][5..10]采用行序为主方式存储,每个元素占4个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的地址是____。<br>4.求下列广义表操作的结果:<br>(1) GetTail[GetHead[((a,b),(c,d))]];<br>(2) GetTail[GetHead[GetTail[((a,b),(c,d))]]]<br>5.利用广义表的GetHead和GetTail操作写出如上题的函数表达式,把原子banana分别从下列广义表中分离出来.<br> (1) L1=(((apple)),((pear)),(banana),orange);<br> (2) L2=(apple,(pear,(banana),orange));<br>5.3 算法设计题:<br>1. 假设稀疏矩阵A和B均以三元组顺序表作为存储结构。试写出矩阵相加的算法,另设三元组表C存放结果矩阵。<br>2. 假设系数矩阵A和B均以三元组顺序表作为存储结构。试写出满足以下条件的矩阵相加的算法:假设三元组顺序表A的空间足够大,将矩阵B加到矩阵A上,不增加A,B之外的附加空间,你的算法能否达到O(m+n)的时间复杂度?其中m和n分别为A,B矩阵中非零元的数目。<br>3.试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法。<br>习题答案<br> 5.1 1. C 2. D,A 3.C 4. C 5. B <br> 5.2 1. LOC (A[0][0])+(n*i+j)*k 2. 200+(6*20+12)= 326<br> 3. 1000+((18-10)*6 +(9-5))*4 = 1208<br> 4.(1). (b) (2). (d)<br>5. (1) GetHead [GetHead[GetTail[GetTail[L1]]]];<br>(2) GetHead [GetHead [GetHead[GetTail[L2 ]]]];<br><br>习题6 树和二叉树<br>6.1 单项选择题<br>1. 由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法____。<br>A. 正确 B. 错误<br>2. 假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为 个。 A.15 B.16 C.17 D.47<br>3. 按照二叉树的定义,具有3个结点的不同形状的二叉树有____种。<br>A. 3 B. 4 C. 5 D. 6<br>4. 按照二叉树的定义,具有3个不同数据结点的不同的二叉树有____种。<br>A. 5 B. 6 C. 30 D. 32<br>5. 深度为5的二叉树至多有____个结点。<br>A. 16 B. 32 C. 31 D. 10<br>6. 设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为_ ___。 <br>A. 2h B. 2h-1 C. 2h+1 D. h+1<br>7. 对一个满二叉树,m个树叶,n个结点,深度为h,则____ 。<br>A. n=h+m B. h+m=2n C. m=h-1 D. n=2 h-1<br>8. 任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序____。<br>A.不发生改变 B.发生改变 C.不能确定 D.以上都不对<br>9. 如果某二叉树的前根次序遍历结果为stuwv,中序遍历为uwtvs,那么该二叉树的后序为____。 A. uwvts B. vwuts C. wuvts D. wutsv<br>10. 二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法____。 A. 正确 B. 错误<br>11. 某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是____。<br>A. bdgcefha B. gdbecfha C. bdgaechf D. gdbehfca<br>12. 在一非空二叉树的中序遍历序列中,根结点的右边____。<br>A. 只有右子树上的所有结点 B. 只有右子树上的部分结点<br>C. 只有左子树上的部分结点 D. 只有左子树上的所有结点<br>13. 如图6.1所示二叉树的中序遍历序列是____。<br>A. abcdgef B. dfebagc C. dbaefcg D. defbagc<br><br><br><br><br><br><br><br><br><br><br> <br><br> 图6.1 <br>14. 一棵二叉树如图6.2所示,其中序遍历的序列为__ __。<br>A. abdgcefh B. dgbaechf C. gdbehfca D. abcdefgh<br>15.设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前的条件是 。<br>A.a在b的右方 B.a在b的左方<br>C.a是b的祖先 D.a是b的子孙<br>16. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是____。 A. acbed B. decab C. deabc D. cedba<br>17. 实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用____存储结构。<br>A. 二叉链表 B. 广义表存储结构 C. 三叉链表 D. 顺序存储结构<br>18. 如图6.3所示的4棵二叉树,____不是完全二叉树。<br><br><br><br><br><br><br><br><br>19. 如图6.4所示的4棵二叉树,____是平衡二叉树。<br><br><br><br><br><br><br><br><br><br><br>20. 在线索化二叉树中,t所指结点没有左子树的充要条件是____。<br>A. t—>left=NULL B. t—>ltag=1<br>C. t—>ltag=1且t—>left=NULL D. 以上都不对<br>21. 二叉树按某种顺序线索化后,任一结点均有指向其前驱和后续的线索,这种说法____。 A. 正确 B. 错误<br>22. 二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法____。 A. 正确 B. 错误<br>23. 具有五层结点的二叉平衡树至少有____个结点。<br>A. 10 B. 12 C. 15 D. 17<br>24. 树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这棵数对应的二叉树。结论____是正确的。<br>A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同<br>B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同<br>C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同<br>D.以上都不对<br>25. 树最适合用来表示____。<br>A. 有序数据元素 B. 无序数据元素 <br>C. 元素之间具有分支层次关系的数据 D. 元素之间无联系的数据<br>6.2 填空题(将正确的答案填在相应的空中)<br>1. 有一棵树如图6.5所示,回答下面的问题:<br>⑴ 这棵树的根结点是____;<br>⑵ 这棵树的叶子结点是____;<br>⑶ 结点k3的度是____;<br>⑷ 这棵树的度是____;<br>⑸ 这棵树的深度是____;<br>⑹ 结点k3的子女是____;<br>⑺ 结点k3的父结点是____;<br> <br>2. 指出树和二叉树的三个主要差别____、____、____。<br>3. 从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是___ _。<br><br><br><br><br><br>4. 一棵二叉树的结点数据采用顺序存储结构,存储于数组t中,如图6.6所示,则该二叉树的链接表示形式为__ __。<br>5. 深度为k的完全二叉树至少有____个结点。至多有____个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是____。<br>6. 在一棵二叉树中,度为零的结点的个数为n 0,度为2的结点的个数为 n 2,则有n0=____。<br>7. 一棵二叉树的第i(i≥1)层最多有____个结点;一棵有n(n>0)个结点的满二叉树共有____个叶子和____个非终端结点。<br>8. 结点最少的树为____,结点最少的二叉树为____。<br>9. 现有按中序遍历二叉树的结果为abc,问有____种不同形态的二叉树可以得到这一遍历结果,这些二叉树分别是____。<br>10. 由如图6.7所示的二叉树,回答以下问题:<br>⑴ 其中序遍历序列为____;<br>⑵ 其前序遍历序列为____;<br>⑶ 其后序遍历序列为____;<br><br><br><br><br>6.3 简答题<br>1. 根据二叉树的定义,具有三个结点的二叉树有5种不同的形态,请将它们分别画出。<br>2. 假设一棵 二叉树的先序序列为EBADCFHGIKJ和中序序列为ABCDEFGHIJK。<br>请画出该树。<br>3. 由如图6.7所示的二叉树,回答以下问题:<br>(1)画出该二叉树的中序线索二叉树;<br>(2)画出该二叉树的后序线索二叉树;<br>(3)画出该二叉树对应的森林。<br>4. 已知一棵树如图6.8所示,转化为一棵二叉树,表示为____。<br><br><br><br>5. 以数据集{4,5,6,7,10,12,18}为结点权值,画出构造Huffman树的每一步图示,计算其带权路径长度为。<br>6. 一棵含有N个结点的k叉树,可能达到的最大深度和最小深度各为多少?<br>7. 证明:一棵满k叉树上的叶子结点数n 和非叶子结点数n 之间满足以下关系:<br> n =(k-1)n +1<br>6.4 算法设计题<br>1. 编写按层次顺序(同一层自左至右)遍历二叉树的算法。<br>2.试编写算法,对一棵二叉树,统计叶子的个数。<br>3.试编写算法,对一棵二叉树根结点不变,将左、右子树进行交换,树中每个结点的左、右子树进行交换。<br>7. 假设用于通讯的电文仅有八个字母(a,b,c,d,e,f,g,h)组成,字母在电文中出现的频率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10。试为这八个字母设计哈夫曼编码。<br>使用0-7的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。<br>8. 试编写算法,对一棵以孩子-兄弟链表表示的树统计叶子的个数。假设一棵 二叉树的先序序列为EBADCFHGIKJ和中序序列为ABCDEFGHIJK。请画出该树。<br> 习题答案<br>6.1 1. B 2. B 3. C 4. C 5. C 6. A 7. D 8. A 9. C 10. A<br>11. D 2. A 13. B 14. B 15. B 16. D 17. C 18. C <br>19. B 20. B 21. B 22. B 23. B 24. A 25. C <br>6.2 <br> 1. ⑴ k1 ⑵ k2,k5,k7,k4 ⑶ 2 ⑷ 3 ⑸ 4 ⑹ k5,k6 ⑺ k1 <br>2. 树的结点个数至少为1(不同教材规定不同),而二叉树的结点个数可以为0;<br>树中结点的最大度数没有限制,而二叉树结点的最大度数为2;<br>树的结点无左、右之分,而二叉树的结点有左、右之分;<br>3. 树可采用孩子-兄弟链表(二叉链表)做存储结构,目的并利用二叉树的已有算法解决树的有关问题。<br>4. 如图6.9所示 <br> 5. 2 k-1 、 2 k-1 、 2 k-2+1<br> 6. n2+1<br> 7. 2 i-1 2[log2n+1]-1 2[log2n+1] –1<br> 8. 只有一个结点的树;空的二叉树<br>9. 5;如图6.10所示<br>10. dgbaechif 、abdgcefhi 、gdbeihfca 、<br>6.3 1. 5种, 图6.11<br>2. 二叉树如图6.12所示。<br><br><br><br><br><br>3. 中序线索二叉树如图6.13(左)所示;后序线索二叉树如图6.13(右)所示;<br>该二叉树转换后的的森林如图6.14所示。<br><br><br><br><br><br><br><br><br><br><br><br><br>4. 图6.8的树转化为一棵二叉树如下,图6.15:<br><br><br><br><br><br><br><br><br>5. 画出构造Huffman树如图6.16所示,计算其带权路径长度为 。<br><br><br><br><br>6. 一棵含有N个结点的k叉树,可能达到的最大深度 h=N-k+1 ,<br>最小深度各为: logkN+1。<br><br>习题7 图<br>7.1 单项选择题<br>1.在一个图中,所有顶点的度数之和等于所有边数的____倍。<br>A. 1/2 B. 1 C. 2 D. 4 <br>2.任何一个无向连通图的最小生成树 。<br>A.只有一棵 B.有一棵或多棵 C.一定有多棵 D.可能不存在<br>3.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的____倍。<br>A. 1/2 B. 1 C. 2 D. 4<br>4.一个有n个顶点的无向图最多有____条边。<br>A. n B. n(n-1) C. n(n-1)/2 D. 2n<br>5.具有4个顶点的无向完全图有____条边。<br>A. 6 B. 12 C. 16 D. 20<br>6.具有6个顶点的无向图至少应有____条边才能确保是一个连通图。<br>A. 5 B. 6 C. 7 D. 8<br>7.在一个具有n个顶点的无向图中,要连通全部顶点至少需要____条边。<br>A. n B. n+1 C. n-1 D. n/2<br>8.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是____。<br>A. n B. (n-1)2 C. n-1 D. n2<br>9.对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为_①___;所有邻接表中的接点总数是_②___。<br>① A. n B. n+1 C. n-1 D. n+e<br>② A. e/2 B. e C.2e D. n+e <br>10.已知一个图如图7.1所示,若从顶点a出发按深度搜索法进行遍历,则可能得到<br>的一种顶点序列为__①__;按宽度搜索法进行遍历,则可能得到的一种顶点序列<br>为__②__。<br>① A. a,b,e,c,d,f B. e,c,f,e,b,d C. a,e,b,c,f,d D. a,e,d,f,c,b<br>② A. a,b,c,e,d,f B. a,b,c,e,f,d C. a,e,b,c,f,d D. a,c,f,d,e,b<br><br><br><br><br> <br><br><br><br><br>11.已知一有向图的邻接表存储结构如图7.2所示。<br><br><br><br><br><br><br><br><br><br><br>⑴ 根据有向图的深度优先遍历算法,从顶点v1出发,所得到的顶点序列是____。<br>A. v1,v2,v3,v5,v4 B. v1,v2,v3,v4,v5<br>C. v1,v3,v4,v5,v2 D. v1,v4,v3,v5,v2<br>⑵ 根据有向图的宽度优先遍历算法,从顶点v1出发,所得到的顶点序列是____。<br>A. v1,v2,v3,v4,v5 B. v1,v3,v2,v4,v5<br>C. v1,v2,v3,v5,v4 D. v1,v4,v3,v5,v2<br>12.采用邻接表存储的图的深度优先遍历算法类似于二叉树的____。<br>A. 先序遍历 B. 中序遍历 C. 后序遍历 D. 按层遍历<br>13.采用邻接表存储的图的宽度优先遍历算法类似于二叉树的____。<br>A. 先序遍历 B. 中序遍历 C. 后序遍历 D. 按层遍历<br>14.判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用____。<br>A. 求关键路径的方法 B. 求最短路径的Dijkstra方法<br>C. 宽度优先遍历算法 D. 深度优先遍历算法<br>15.关键路径是事件结点网络中 。<br>A.从源点到汇点的最长路径 B.从源点到汇点的最短路径<br>C.最长的回路 D.最短的回路<br>16.下面不正确的说法是 。<br> (1)在AOE网中,减小一个关键活动上的权值后,整个工期也就相应减小;<br> (2)AOE网工程工期为关键活动上的权之和;<br> (3)在关键路径上的活动都是关键活动,而关键活动也必在关键路径上。<br>A.(1) B.(2) C.(3) D.(1)、(2)<br>17.用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印出相应的顶点,则输出的顶点序列是 。<br>A.逆拓朴有序的 B.拓朴有序的 C.无序的<br>18.在图7.3所示的拓朴排列的结果序列为 。<br>A.125634 B.516234 C.123456 D.521634<br> <br><br>19.一个有n个顶点的无向连通图,它所包含的连通分量个数为 。<br>A.0 B.1 C.n D.n+1<br>20.对于一个有向图,若一个顶点的入度为k1,、出度为k2,则对应邻接表中该顶点单链表中的结点数为 。<br>A.k1 B.k2 C.k1-k2 D.k1+k2<br>21.对于一个有向图,若一个顶点的入度为k1,、出度为k2,则对应逆邻接表中该顶点单链表中的结点数为 。<br>A.k1 B.k2 C.k1-k2 D.k1+k2<br>7.2 填空题(将正确的答案填在相应饿空中)<br>1.n个顶点的连通图至少____条边。<br>2.在无权图G的邻接矩阵A中,若(vi,vj)或<vi,vj>属于图G的边集合,则对应元素A[i][j]等于____,否则等于____。<br>3.在无向图G的邻接矩阵A中,若A[i][j]等于1,则A[j][i ]等于____。<br>4.已知图G的邻接表如图7.4所示,其从顶点v1出发的深度有限搜索序列为____,其从顶点v1出发的宽度优先搜索序列为____。<br><br><br><br><br><br><br><br><br><br><br> 图7.4 图G的邻接表<br>5.已知一个有向图的邻接矩阵表示,计算第i个结点的入度的方法是____。<br>6.已知一个图的邻接矩阵表示,删除所有从第i个结点出发的边的方法是____。<br>7.如果含n个顶点的图形成一个环,则它有 棵生成树。<br>8.一个非连通无向图,共有28条边,则该图至少有 个顶点。<br>9.遍历图的过程实质上是 。BFS遍历图的时间复杂度为 ,DFS遍历图的时间复杂度为 ,两者不同之处在于 ,反映在数据结构上的差别是 。<br>10.一个图的 表示法是唯一的,而 表示法是不唯一的。<br>11.有向图中的结点前驱后继关系的特征是 。<br>12.若无向图G的顶点度数最小值大于等于 时,G至少有一条回路。<br>13.根据图的存储结构进行某种次序的遍历,得到的顶点序列是 的。<br>7.3 综合题<br>1.已知如图7.5所示的有向图,请给出该图的:<br>(1)每个顶点的入/出度;<br>(2)邻接距阵;<br>(3)邻接表;<br>(4)逆邻接表;<br>(5)强连通分量。<br><br><br><br><br><br>2.请用克鲁斯卡尔和普里姆两种算法分别为图7.6、图7.7构造最小生成树: <br>(1)<br> <br> <br> <br> <br>图7.6<br>(2)<br> <br><br><br><br><br><br>图7.7<br>3.试列出图7.8中全部的拓扑排序序列。<br><br><br><br><br><br><br>图7.8<br><br><br>4.请用图示说明图7.9从顶点a到其余各顶点之间的最短路径。<br><br><br><br><br><br><br><br><br>图7.9<br><br><br>5.已知AOE网有9个结点:V1,V2,V3,V4,V5,V6,V7,V8,V9,其邻接矩阵如下:<br>(1)请画出该AOE图。<br>(2)计算完成整个计划需要的时间。<br>(3)求出该AOE网的关键路径。<br>∝ 6 4 5 ∝ ∝ ∝ ∝ ∝<br>∝ ∝ ∝ ∝ 1 ∝ ∝ ∝ ∝<br>∝ ∝ ∝ ∝ 1 ∝ ∝ ∝ ∝<br>∝ ∝ ∝ ∝ ∝ 2 ∝ ∝ ∝<br>∝ ∝ ∝ ∝ ∝ ∝ 9 7 ∝<br>∝ ∝ ∝ ∝ ∝ ∝ ∝ 4 ∝<br>∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ 2<br>∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ 4<br>∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝ ∝<br><br><br>习题答案<br> 7.1 1. C 2.B 3.B 4. C 5. A 6. A 7.C<br>8.D 9. AC 10.DB 11. CB 12. A 13. D 14.D 15.A 16.A 17.A 18.B 19.B 20.B 21.A <br> 7.2 1.n-1 2. 1;0 3. 1 <br>4.v1,v2,v3,v6,v5, v4;v1,v2,v5,v4,v3, v6<br>5.求矩阵第i列非零元素之和 <br>6. 将矩阵第i行全部置为零<br>7.n<br>8.9<br>9.对每个顶点查找其邻接点的过程;O(e)(e为图中的边数);O(e);<br>遍历图的顺序不同;DFS采用栈存储访问过的结点,BFS采用队列存储访问过<br>的结点。<br>10.邻接矩阵 邻接表<br>11.一个结点可能有若干个前驱,也可能有若干个后继<br>12.2<br>13.唯一<br><br>7.3 1.<br><br><br><br><br><br><br><br><br>2.<br> (1).<br><br><br><br><br><br><br><br><br><br>(2)<br> <br><br><br><br><br><br><br>3.<br>152364<br>152634<br>156234<br>561234<br>516234<br>512634<br>512364<br>4.<br><br><br><br><br><br><br><br><br><br>5.(1)该AOE图为:<br> <br>(2)完成整个计划需要18天。<br>(3)关键路径为:(V1,V2,V5,V7,V9)和(V1,V2, V5,V8,V9,)<br><br>习题8 查找<br>8.1 单项选择题<br>1.顺序查找法适合于存储结构为____的线性表。<br>A. 散列存储 B. 顺序存储或链接存储<br>C. 压缩存储 D. 索引存储<br>2.对线性表进行二分查找时,要求线性表必须____。<br>A. 以顺序方式存储 B. 以链接方式存储<br>C. 以顺序方式存储,且结点按关键字有序排序<br>D. 以链接方式存储,且结点按关键字有序排序<br>3.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为____.<br>A. n B. n/2 C. (n+1)/2 D. (n-1)/2<br>4.采用二分查找方法查找长度为n的线性表时,每个元素的平均查找长度为____。<br>A.O(n2) B. O(nlog2n) C. O(n) D. O(log2n)<br>5.二分查找和二叉排序树的时间性能____。<br>A. 相同 B. 不相同<br>6.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值82为的结点时,____次比较后查找成功。<br>A. 1 B. 2 C. 4 D. 8<br>7.设哈希表长m=14,哈希函数H(key)=key%11。表中已有4个结点:<br>addr (15)=4; addr (38)=5; addr (61)=6; addr (84)=7<br>如用二次探测再散列处理冲突,关键字为49的结点的地址是____。<br>A. 8 B. 3 C. 5 D. 9<br>8.有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为____。<br>A. 35/12 B. 37/12 C. 39/12 D. 43/12<br>9.对于静态表的顺序查找法,若在表头设置岗哨,则正确的查找方式为 。<br>A.从第0个元素往后查找该数据元素<br>B.从第1个元素往后查找该数据元素<br>C.从第n个元素往开始前查找该数据元素<br>D.与查找顺序无关<br>10.解决散列法中出现的冲突问题常采用的方法是 。<br>A.数字分析法、除余法、平方取中法<br>B.数字分析法、除余法、线性探测法<br>C.数字分析法、线性探测法、多重散列法<br>D.线性探测法、多重散列法、链地址法<br>11.采用线性探测法解决冲突问题,所产生的一系列后继散列地址 。<br>A.必须大于等于原散列地址<br>B.必须小于等于原散列地址<br>C.可以大于或小于但不能等于原散列地址<br>D.地址大小没有具体限制<br>12.对于查找表的查找过程中,若被查找的数据元素不存在,则把该数据元素插入到集合中。这种方式主要适合于 。<br>A.静态查找表 B.动态查找表 <br>C.静态查找表与动态查找表 D两种表都不适合<br>13.散列表的平均查找长度 。<br>A.与处理冲突方法有关而与表的长度无关<br>B.与处理冲突方法无关而与表的长度有关<br>C.与处理冲突方法有关而与表的长度有关<br>D.与处理冲突方法无关而与表的长度无关<br>8.2 填空题(将正确的答案填在相应的空中)<br>1.顺序查找法的平均查找长度为____;折半查找法的平均查找长度为____;哈希表查找法采用链接法处理冲突时的平均查找长度为____。<br>2.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是____。<br>3.折半查找的存储结构仅限于____,且是____。<br>4. 假设在有序线性表A[1..20]上进行折半查找,则比较一次查找成功的结点数为____,则比较二次查找成功的结点数为____,则比较三次查找成功的结点数为____,则比较四次查找成功的结点数为____,则比较五次查找成功的结点数为____,平均查找长度为____。<br>5. 对于长度为n的线性表,若进行顺序查找,则时间复杂度为____;若采用折半法查找,则时间复杂度为____;<br>6.已知有序表为(12,18,24,35,47,50,62,83,90,115,134),当用折半查找90时,需进行 次查找可确定成功;查找47时,需进行 次查找成功;查找100时,需进行 次查找才能确定不成功。<br>7.二叉排序树的查找长度不仅与 有关,也与二叉排序树的 有关。<br>8.一个无序序列可以通过构造一棵 树而变成一个有序树,构造树的过程即为对无序序列进行排序的过程。<br>9.平衡二叉排序树上任一结点的平衡因子只可能是 、 或 。<br>10. 法构造的哈希函数肯定不会发生冲突。<br>11.在散列函数H(key)=key%p中,p应取____。<br>12.在散列存储中,装填因子 的值越大,则____; 的值越小,则____。<br>8.3 综合练习题:<br>1. 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。<br>2.含九个叶子结点的3阶B-树中至少有多少个非叶子结点?含10个叶子结点的3阶B-树中至多有多少个非叶子结点?<br>3.试从空树开始,画出按以下次序向2-3树即3阶B-树中插入关键码的建树过程:20,30,50,52,60,68,70.如果此后删除50和68,画出每一步执行后2-3树的状态。<br>4. 选取哈稀函数H(k)=(3k)MOD 11。用开放定址法处理冲突,di=i((7k)MOD 10+1)(I=1,2,3,…).试在0-10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)造哈希表,并求等概率情况下查找成功时的平均查找长度。<br>5. 已知一组关键字{49,38,65,97,76,13,27,44,82,35,50},画出由此生成的二叉排序树,注意边插入边平衡。<br> 习题答案<br>8.1 1.B 2.C 3.C 4.D 5.B 6.C 7.D 8.B <br>9.C 10.D 11.C 12.B 13.C<br><br>8.2 1. (n+1)/2 、((n+1)*log2(n+1))/n-1 、1+ ( 为装填因子)<br> 2. 哈希表查找法<br> 3. 顺序存储结构、有序的<br> 4. 1、2、4、8、5、3.7<br>(依题意,构造一棵有序二叉树,共12个结点,第一层1个结点,第二层2个结点,第三层4个结点,第四层5个结点,则:ASL=(1*1+2*2+3*4+4*5)/12=37/12)<br> 5. O(n)、O(log2n)<br> 6.2、4、3<br> 7.结点个数n、生成过程<br> 8.二叉排序树<br> 9.0、1、-1<br> 10.直接定址<br>11.素数<br>12.存取元素时发生冲突的可能性就越大、存取元素时发生冲突的可能性就越小<br><br><br><br><br>习题9 排序<br>9.1 单项选择题<br>1. 在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是____。<br>A. 希尔排序 B. 起泡排序 C. 插入排序 D. 选择排序<br>2. 设有1000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用____排序法。<br>A. 起泡排序 B. 快速排序 C. 堆排序 D. 基数排序<br>3. 在待排序的元素序列基本有序的前提下,效率最高的排序方法是____。<br>A. 插入排序 B. 选择排序
13.94MB
网络工程实践教程--基于Cisco路由器与交换机 (课件)
2011-03-11本书从实战出发,按照循序渐进的方式,重点介绍了思科路由器、交换机等网络设备的配置,内容涵盖了组建局域网、广域网所需的从低级到高级的大部分知识,主要包括网络操作常用命令,思科路由器的基本配置和使用,cdp协议的配置,静态路由和默认路由的配置,rip协议、igrp协议、eigrp协议、ospf协议的配置,交换机的基本配置,vlan的配置,维护管理路由器和交换机,配置访问控制列表,配置ppp和ddr,帧中继的配置,配置nat和dhcp的实用技术等,同时为读者提供了一个网络工程综合案例,供读者参考。 本书在结构设计和内容编写上充分考虑教学和实践的需要,每一章都划分为知识准备、动手做做、活学活用、动动脑筋、学习小结五各部分,从而实现学习、理解、实践、总结、思考互相映射。 本书适合作为计算机相关专业计算机网络教材的配套实验教材,也可作为准备参加ccna认证考试的读者及从事网络研究与应用人员的参考书。
47.63MB
Android应用开发揭秘--详细书签版
2012-12-12CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Android应用开发揭秘 基本信息 作者: 杨丰盛 出版社:机械工业出版社 ISBN:9787111291954 上架时间:2010-7-29 出版日期:2011 年5月 开本:16开 页码:515 版次:1-8 编辑推荐 国内首本基于Android 2.0的经典著作,5大专业社区一致鼎力推荐! 内容简介 国内第一本基于android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑! 本书内容全面,不仅详细讲解了android框架、android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件 开发、android游戏引擎设计、android应用优化、opengl等高级知识,最重要的是还全面介绍了如何利用原生的c/c++(ndk)和python、lua等脚本语言(android scripting environment) 来开发android应用;本书实战性强,书中的每个知识点都有配精心设计的示例,尤为值得一提的是,它还以迭代的方式重现了各种常用的android应用和经典android游戏的开发全过程,既可 以以它们为范例进行实战演练,又可以将它们直接应用到实际开发中去。 windows操作系统的诞生成就了微软的霸主地位,也造就了pc时代的繁荣。然而,以android和iphone手机为代表的智能移动设备的发明却敲响了pc时代的丧钟!移动互联网时代(3g时代 )已经来临,谁会成为这些移动设备上的主宰?毫无疑问,它就是android——pc时代的windows! 移动互联网还是一个新生的婴儿,各种移动设备上的操作系统群雄争霸!与symbian、iphone os、windows mobile相比,android有着天生的优势——完全开放和免费,对广大开发者和 手机厂商而言,这是何等的诱人!此外,在google和以其为首的android手机联盟的大力支持和推广下,android不仅得到了全球开发者社区的关注,而且一大批世界一流的手机厂商都已经或 准备采用android。 拥抱android开发,拥抱移动开发的未来! ·android开发与传统的j2me开发有何相似与不同? ·如何通过shared preferences、files、network和sqlite等方式高效实现android数据的存储?又如何通过content providers轻松地实现android数据的共享? ·如何使用open core、mediaplayer、mediarecorder方便快速地开发出包含音频和视频等流媒体的丰富多媒体应用? ·如何利用android 2.0中新增的蓝牙特性开发包含蓝牙功能的应用?又如何使用蓝牙api来完善应用的网络功能? ·如何解决android网络通信中的乱码问题? ·在android中如何使用语音服务和 google map api?android如何访问摄像头、传感器等硬件的api? ·如何进行widget开发?如何用各种android组件来打造漂亮的ui界面? ·android如何解析xml数据?又如何提高解析速度和减少对内存、cpu资源的消耗? ·如何使用opengl es在android平台上开发出绚丽的3d应用?在android平台上如何更好地设计和实现游戏引擎? ·如何对android应用进行优化?如何进行程序性能测试?如何实现ui、zipalign和图片优化? ·如何通过ndk利用c、c++以及通过ase利用python等脚本语言开发android应用? 作译者 杨丰盛,国内Android领域的先驱者和布道者,资深Android开发工程师,在Android应用开发方面有丰富的实战经验。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件 开发和MTK平台软件开发方面有非常深厚的积累。他对Android的源代码进行了长达一年的系统学习和研究,对Android系统的架构设计和实现原理有非常深入的理解和认识,理论功底也十分深 厚。国内著名IT技术网站 51CTO推荐技术专家,曾多次接受《程序员》杂志采访并为其撰稿,同时他还多次应邀在国内的移动开发者大会和技术沙龙中开展讲座,深受欢迎。他还是畅销书作 家,撰写的《Android应用开发揭秘》一书是目前Android领域口碑最好、销量也最好的一本书之一,这本书自上市以来已经重印9次,而
1.90MB
Cisco最全配置命令
2018-12-13DHCP配置 4 静态路由 6 浮动静态路由 6 向网络中注入一条默认路由 7 RIP 8 RIP的基本配置 8 被动接口与单播更新 10 RIPv2的基本配置 11 RIPv 2的手动汇总 13 RIPv2认证和触发更新 13 EIGRP配置 17 Eigrp的基本配置 17 eigrp路由汇总 19 eigrp的负载均衡 21 eigrp认证 23 OSPF 26 OSPF 基本配置 26 OSPF广播多路访问 28 OSPF基本认证 29 OSPF基于MD5的认证 30 OSPF基于链路的MD5认证 31 OSPF基于链路的简单口令认证 32 ospf 注入一条默认路由 33 多区域OSPF 35 多区域OSPF基本配置 36 多区域OSPF手动汇总 38 Ospf 末节区域和完全末节区域 40 Ospf NSSA区域 42 Ospf虚链路 44 不连续区域0的虚连接 46 IS-IS 49 Is-is的基本配置 49 多区域集成的IS-IS 50 BGP 52 BGP地址聚合 57 BGP属性控制选路 60 用BGP AS-PATH属性控制选路 63 BGP LOCAL_PREF属性控制选路 66 BGP WEIGHT属性控制选路 69 路由反射器配置 71 BGP联邦配置 74 BGP团体配置 77 路由重分布 81 Rip、OSPF、eigrp之间的路由重分布 81 ISIS 和OSPF 重分布 83 Vlan间路由 86 传统的vlan间路由 86 单臂路由器vlan间路由 88 三层交换实现vlan间路由 90 ACL 91 标准ACL 91 扩展ACL1 92 扩展ACL2 95 命名ACL 97 基于时间的ACL 99 动态ACL 100 自反ACL 102 Nat地址转换 104 静态nat地址转换 104 动态Nat地址转换 105 NAT重载 107 PPP的配置实验 108 PAP验证 113 帧中继配置 115 帧中继静态映射 115 帧中继子接口单点对多点 117 帧中继点到点子接口配置 119 把一台cisco路由器配置为帧中继交换机 122 帧中继上的RIP 124 帧中继上集成IS-IS 126 帧中继上点到点子接口下集成的IS-IS 127 帧中继上的OSPF 129 IPV6 131 IPv6 静态路由 131 IPv6 RIPng 131 OSPFv3 133 IPv6 EIGRP 135 组播 136 PIM Dense 137 PIM Sparse-Dense 140 路由优化 142 分布控制列表控制路由更新 142 策略路由 144 基于报文大小的策略路由 145 基于应用的策略路由 147 网关冗余和负载均衡 148 HSRP 148 VRRP 150 GLBP 151 IOS 153 IOS更新 153 交换机的IOS恢复 154 路由器的密码恢复和ios恢复 154 计算机端口安全 155 交换机的密码恢复 156 清除交换机配置并重启 156 stp 157 STP+VTP 157 Trunk 配置 159 RSTP 160 MST 160 STP 保护 162 链路聚合 163 QOS 164 PQ 165 CQ 165 WFQ 166 CBWFQ 166 LLQ 167 WRED 168 CAR 168 NBAR 168 综合练习1 170 综合练习2 177
38.65MB
Google Android开发入门与实战(09年度畅销榜TOP50)--详细书签版
2013-02-08CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Google Android开发入门与实战(09年度畅销榜TOP50)(附赠400分钟高清教学视频 ,涵盖5大商业案例完整源代码) 基本信息 作者: 靳岩 姚尚朗 [作译者介绍] 丛书名: 移动开发系列丛书 出版社:人民邮电出版社 ISBN:9787115209306 上架时间:2009-6-24 出版日期:2009 年7月 开本:16开 页码:340 版次:1-1 编辑推荐 *《边看边读》第9期: 《Google Android开发入门与实战》 * 第一本国内开发团队原创的Android图书 * 完全基于Android最新的SDK1.5 * 著名台湾技术专家高焕堂、Google Android工程师何峰、InfoQ站长霍泰稳鼎力推荐! * 全书除了大量小型案例之外还包含了5个Android平台下的完整商业实例及源码分析,分别是RSS阅读器、基于GoogleMap的个人GPS、豆瓣客户端、在线音乐播放器、手机信息助手 * 随书附赠的光盘中包含389分钟的详细教学视频以及Android开发必备开发资源,部分教学视频免费下载地址:http://www.eoeandroid.com/viewthread.php?tid=328 * 读者对于此书内容的疑问可以访问http://www.eoeandroid.com社区,作者团队将会及时解答 内容简介 本书内容上涵盖了用android开发的大部分场景,从android基础介绍、环境搭建、sdk介绍、market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个android平台下的完整综合实例及源代码分析,分别是rss阅读器、基于google map的个人gps、豆瓣网(web 2.0)客户端、在线音乐播放器、手机信息查看助手。本书注重对实际动手能力的指导,在遵循技术研发知识体系的严密性同时,在容易产生错误、不易理解的环节配以了翔实的开发情景截图,并将重要的知识点和开发技巧以“小实验”、“小提醒”、“小知识”、“注意”等的活泼形式呈现给读者。在程序实例的讲解方面,主要将实例安插在android开发的精髓知识章节,这为初学者学习与实践结合提供了很好的指导。. 本书配套有400多分钟的全程开发视频光盘,指导读者快速、无障碍地学通android实战开发技术。.. 本书适合具备一定软件开发经验,想快速进入android开发领域的程序员;具备一些手机开发经验的开发者和android开发爱好者学习用书;也适合作为相关培训学校的android培训教材。... 作译者 本书由国内Android知名专业开发团队eoeMobile团队倾心撰写。eoeMoblie团队国内最早一批专注于Android开发的专业团队,目前团队已经在Google Market上有超过5款的作品,而且取得了可喜的下载量。国内著名网站豆瓣网的Android客户端(eoeDouban)也是由此团队制作。关于此团队的更多信息请访问:[url]http://www.eoemobile.com.[/url]关于图书的进展,可以访问[url]http: //www.eoeandroid.com[/url] 社区。 目录 封面 -19 推荐序 -18 名家推荐 -17 前言 -16 目录 -8 第1章 掀起你的盖头来——初识Android 1 1.1 认识Android 1 1.2 Android的背景 2 1.2.1 Android的历史 2 1.2.2 Android的发展 2 1.3 我的Android我做主 2 1.3.1 开发基于Android平台的应用 3 1.3.2 参加Android开发者大赛 3 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 3 1.3.4 获得应有的收益——Android Market 3 1.4 真实体验——Android模拟器 4 1.4.1 模拟器概述 4 1.4.2 模拟器和真机的区别 4 1.4.3 模拟器使用注意事项 4 1.5 更上一层楼——加入Android开发社区 5 1.6 本章小结 6 第2章 工欲善其事 必先利其器——搭建Android开发环境 7 2.1 开发Android应用前的准备 7 2.1.1 Android开发系统要求 7 2.1.2 Android软件开发包 7 2.1.3 其他注意事项 8 2.2 Windows开发环境搭建 8 2.2
10.49MB
深入体验JAVA Web开发内幕—核心基础.part1
2008-12-12第1章 XML基础 1 指点迷津:什么是配置文件 1.1 认知XML 1 1.1.1 XML的起源与作用 1 1.1.2 XML文档结构 2 1.1.3 XML与HTML的比较 4 1.1.4 XML与数据库的比较 4 1.2 XML的基本语法 5 1.2.1 文档声明 5 动手体验:加深对encoding属性的理解 1.2.2 元素定义 9 1.2.3 属性定义 10 1.2.4 注释 11 1.2.5 空格和换行的处理 11 1.2.6 CDATA区 11 1.2.7 特殊字符 12 动手体验:加深对特殊字符的了解 1.2.8 处理指令(processing instruction) 14 动手体验:使用CSS控制XML文档的显示 1.3 XML约束模式 15 1.3.1 格式良好的(Well-formed)XML 15 1.3.2 XML的约束模式 15 1.3.3 XML约束模式语言 16 1.3.4 有效的(Valid)XML 17 1.4 DTD 17 1.4.1 初识DTD 17 1.4.2 在XML文档中引入外部DTD文件 18 1.4.3 在XML文档中直接嵌入DTD定义语句 20 1.5 DTD的语法细节 21 1.5.1 元素定义 21 1.5.2 属性定义 22 1.5.3 实体定义 27 动手体验:加深对引用实体的了解 1.6 XML Schema 31 1.6.1 XML Schema与DTD的比较 31 1.6.2 一个XML Schema例子 32 1.7 名称空间 34 1.7.1 名称空间的概念 34 1.7.2 名称空间声明 34 1.7.3 默认名称空间 35 1.7.4 属性的名称空间问题 36 1.7.5 xml:space和xml:lang属性 36 1.8 引入XML Schema文档 37 1.8.1 使用名称空间引入XML Schema文档 37 1.8.2 不使用名称空间引入XML Schema文档 39 1.9 思考与实践 39 第2章 用Tomcat构建WEB站点 41 2.1 WEB应用的相关知识 41 2.1.1 HTTP协议 41 2.1.2 URL 41 2.1.3 网站系统的组成 42 2.1.4 主要的WEB服务器软件 43 2.2 安装Tomcat 44 2.2.1 Tomcat简介 44 2.2.2 获取Tomcat安装程序包 44 2.2.3 使用zip和tar.gz包安装Tomcat 44 2.2.4 使用exe程序安装Tomcat 46 2.3 Tomcat的启动与停止 50 2.3.1 使用Tomcat服务程序 50 多学两招:查找网络服务程序监听异常的问题 2.3.2 使用Tomcat程序组中的快捷菜单 53 多学两招:了解Tomcat 4.1.3的快捷启动菜单的工作原理 2.3.3 使用tomcat.exe程序 56 指点迷津:tomcat5.exe启动的tomcat程序不一定是tomcat5.exe自身所在的目录 2.3.4 startup.bat批处理文件 58 2.3.5 catalina.bat批处理文件 61 2.3.6 使用批处理程序及查找Tomcat的启动问题 65 动手体验:练习查找tomcat的启动错误 2.4 配置WEB站点的虚拟目录 68 2.4.1 虚拟WEB目录的映射关系 68 2.4.2 设置WEB站点的根目录 69 动手体验:修改WEB站点的默认根目录 2.4.3 设置WEB站点的虚拟子目录 71 动手体验:设置WEB站点的虚拟子目录 脚下留心:war文件的内部目录结构 2.4.4 部署描述符与目录的默认网页 73 动手体验:设置目录的默认网页 2.5 配置虚拟主机 75 2.5.1 浏览器访问WEB资源的过程 75 动手体验:用telnet程序分析浏览器访问WEB资源的过程 多学两招:打开telnet程序的本地回显功能 2.5.2 虚拟主机及实现原理 77 2.5.3 基于主机名的虚拟主机 78 动手体验:使用Tomcat建立基于主机名的虚拟主机 2.5.4 基于端口号的虚拟主机 82 动手体验:使用Tomcat建立基于端口号的虚拟主机 2.5.5 基于IP地址的虚拟主机 83 2.6 与专用WEB服务器的集成 83 2.6.1 集成的考虑因素 84 2.6.2集成技术的选择 85 2.6.3 JK插件 86 动手体验:下载JK插件 2.6.4 Tomcat的体系结构与JK插件的工作原理 89 动手体验:查阅JK连接器的帮助文档 2.6.5 Tomcat与IIS服务器集成 93 2.6.6 Tomcat与Windows系统下的Apache服务器集成 100 2.6.7 与专业WEB服务器集成的现实问题 103 2.7 思考与实践 103 第3章 HTTP协议详解 105 3.1 了解HTTP 105 3.1.1 HTTP简介 105 3.1.2 HTTP 1.0的会话方式 105 3.1.3 HTTP 1.1与HTTP 1.0的比较 106 3.1.4 HTTP消息的格式 108 3.2 请求行与状态行 110 3.2.1 请求行与状态行 110 动手体验:借助telnet程序直观体验请求行和状态行 3.2.2 使用GET和POST方式传递参数 112 动手体验:在telnet程序中使用GET与POST方式传递参数 3.2.3 响应状态码 117 3.3 通用信息头 120 3.3.1 Cache-Control 120 3.3.2 Connection 121 动手体验:Connection头字段的作用 3.3.3 Date 121 3.3.4 Pragma 122 3.3.5 Trailer 122 3.3.6 Transfer-Encoding 122 3.3.7 Upgrade 122 3.3.8 Via 123 3.3.9 Warning 123 3.4 请求头 123 3.4.1 Accept 123 3.4.2 Accept-Charset 123 3.4.3 Accept-Encoding 123 3.4.4 Accept-Language 124 动手体验:Accept-Language头字段的作用 3.4.5 Authorization 125 3.4.6 Expect 126 3.4.7 From 126 3.4.8 Host 126 3.4.9 If-Match 126 3.4.10 If-Modified-Since 127 3.4.11 If-None-Match 127 3.4.12 If-Range 127 3.4.13 If-Unmodified-Since 127 3.4.14 Max-Forwards 127 3.4.15 Proxy-Authorization 128 3.4.16 Range 128 3.4.17 Referer 128 3.4.18 TE 128 3.4.19 User-Agent 129 3.5 响应头 129 3.5.1 Accept-Ranges 129 3.5.2 Age 129 3.5.3 Etag 129 3.5.4 Location 130 动手体验:Location头字段的作用 3.5.5 Proxy-Authenticate 130 3.5.6 Retry-After 130 3.5.7 Server 131 3.5.8 Vary 131 3.5.9 WWW-Authenticate 131 3.6 实体头 131 3.6.1 Allow 132 3.6.2 Content-Encoding 132 3.6.3 Content-Language 132 3.6.4 Content-Length 133 3.6.5 Content-Location 133 3.6.6 Content-MD5 133 3.6.7 Content-Range 133 3.6.8 Content-Type 134 动手体验:了解WEB服务器设置实体内容的MIME类型的原理 3.6.9 Expires 135 3.6.10 Last-Modified 135 3.7 扩展头 136 3.7.1 Refresh 136 3.7.2 Content-Disposition 136 3.8 思考与实践 137 第4章 Servlet开发基础 138 4.1 Servlet的有关概念 138 4.1.1 什么是动态网页 138 指点迷津:区分动态网页与动态HTML页面的概念 4.1.2 动态网页程序与引擎 139 4.1.3 Servlet技术简介 140 4.1.4 B/S系统架构与C/S系统架构 141 4.1.5 相关知识 143 4.2 Servlet应用入门 143 4.2.1 Servlet API介绍 143 动手体验:查看Tomcat提供的Servlet API帮助文档 4.2.2 编写与编译Servlet程序 145 指点迷津:如何快速入门新技术 动手体验:编写与编译Servlet程序的过程 4.2.3 Servlet的注册与运行 146 动手体验:注册与访问Servlet程序 照猫画虎:如何编写web.xml文件 4.2.4 Servlet激活器 150 动手体验:使用Servlet激活器 4.2.5 缺省Servlet 151 动手体验:缺省Servlet的作用 4.2.6 Servlet的类装载器 152 动手体验:Tomcat如何完成类的加载 指点迷津:区分Servlet的编译和运行环境 4.2.7 编写一个自动编译工具 158 4.3 Servlet的特点及运行过程 158 4.3.1 Servlet的特点 158 4.3.2 Servlet的运行过程 160 4.3.3 Servlet的线程安全问题 164 动手体验:Servlet的并发访问与线程安全问题 指点迷津:哪些情况下要考虑线程安全问题 4.4 ServletConfig接口 167 4.4.1 getInitParameterNames方法 168 4.4.2 getInitParameter方法 168 4.4.3 getServletName方法 168 4.4.4 getServletContext方法 168 4.4.5 GenericServlet类实现ServletConfig接口的目的 169 4.4.6 ServletConfig的应用举例 169 动手体验:ServletConfig对象的应用 4.5 GenericServlet与HttpServlet类 171 4.5.1 理解回调方法 171 4.5.2 init方法 172 指点迷津:覆盖无参数的init()方法来编写初始化代码的好处 4.5.3 service方法 174 4.5.4 destroy方法 175 4.5.5 getServletConfig方法 175 4.5.6 getServletInfo方法 175 4.5.7 doXxx方法 175 动手体验:doGet方法与doPost方法的作用 指点迷津:如何理解“在自己的程序代码中不能调用回调方法” 4.5.8 浏览器缓存内幕与getLastModified方法 175 动手体验:揭开浏览器缓存的奥秘 4.6 ServletContext接口 179 4.6.1 获取WEB应用程序的初始化参数 179 动手体验:WEB应用程序的初始化参数的设置与应用 4.6.2 记录日志 181 动手体验:WEB应用程序的日志记录功能 多学两招:JDK中提供的日志记录模块 4.6.3 application域范围的属性 186 4.6.4 访问资源文件 187 动手体验:在Servlet程序中使用FileInputStream类的问题 动手体验:使用ServletContext接口和ClassLoader类中的方法访问资源文件 4.6.5 获取虚拟路径所映射的本地路径 191 4.6.6 WEB应用程序之间的访问 191 动手体验:访问其他WEB应用程序 4.6.7 ServletContext接口中的其他方法 193 4.7 思考与实践 194 第5章 HttpServletResponse的应用 196 5.1 准备实验环境 196 5.2 HttpServletResponse简介 197 5.3 产生响应状态行 197 5.3.1 状态码常量 197 5.3.2 setStatus方法 198 5.3.3 sendError方法 198 5.4 构建响应消息头 198 5.4.1 addHeader与setHeader方法 199 5.4.2 addIntHeader与setIntHeader方法 199 5.4.3 addDateHeader与setDateHeader方法 199 5.4.4 setContentLength方法 199 5.4.5 setContentType方法 200 5.4.6 setCharacterEncoding方法 200 5.4.7 setLocale方法 200 5.4.8 containsHeader方法 201 5.5 响应消息头的实用案例 201 5.5.1 Servlet的中文输出问题 201 动手体验:浏览器查看网页文档时怎样选择字符集编码 动手体验:Servlet的中文输出问题及解决之道 脚下留心:注意传递给setContentType方法的参数值的大小写 多学两招:修改某个Servlet将导致整个WEB应用程序被重新加载 5.5.2 让浏览器定时刷新网页或跳转至其他页面 210 动手体验:Refresh头字段的作用效果 5.5.3 禁止浏览器缓存当前文档内容 211 动手体验:浏览器的缓存问题和解决方案 5.5.4 使用<meta>标签模拟响应消息头 213 动手体验:使用<meta>标签解决浏览器查看网页时的中文乱码问题 多学两招:网页文档应尽量采用UTF-8编码 5.6 创建响应正文 215 5.6.1 getOutputStream与getWriter方法 215 5.6.2 getWriter方法的一些相关小疑问 216 动手体验:getWriter方法的一些相关问题 5.6.3 输出缓冲区 218 动手体验:Servlet引擎处理输出缓冲区的细节 5.6.4 实现动态文件内容的下载 221 动手体验:实现动态文件内容的下载 5.6.5 图像访问计数器 223 动手体验:使用<img>标签实现静态HTML页面的访问次数统计和显示 多学两招:如何动态产生大小可变的图像 5.7 请求重定向与请求转发 230 5.7.1 RequestDispatcher接口 231 5.7.2 用include方法实现资源包含 231 动手体验:RequestDispatcher.include方法的应用细节 5.7.3 用forward方法实现请求转发 237 动手体验:RequestDispatcher.forward方法的应用细节 动手体验:RequestDispatcher.forward方法的相对路径问题 5.7.4请求转发的运行流程 246 5.7.5 用sendRedirect方法实现请求重定向 250 动手体验:sendRedirect方法的应用 5.7.6请求重定向的运行流程 252 5.7.7 请求重定向与请求转发的比较 257 5.7.8 缺省Servlet的缓存问题 258 动手体验:缺省Servlet的缓存问题 5.8 思考与实践 261 第6章 HttpServletRequest的应用 263 6.1 HttpServletRequest简介 263 6.2 获取请求行的相关信息 263 6.2.1 getMethod方法 263 6.2.2 getRequestURI方法 263 6.2.3 getQueryString方法 264 6.2.4 getProtocol方法 264 6.2.5 getContextPath方法 264 6.2.6 getPathInfo方法 264 6.2.7 getPathTranslated方法 265 6.2.8 getServletPath方法 265 6.2.9 获取请求行信息的综合实例 265 动手体验:与请求行信息相关的各个方法的作用 6.3 获取网络连接信息 266 6.3.1 getRemoteAddr方法 266 6.3.2 getRemoteHost方法 267 6.3.3 getRemotePort方法 267 6.3.4 getLocalAddr方法 267 6.3.5 getLocalName方法 267 6.3.6 getLocalPort方法 267 6.3.7 getServerName方法 267 6.3.8 getServerPort方法 267 6.3.9 getScheme方法 267 6.3.10 getRequestURL方法 268 6.4 获取请求头信息 268 6.4.1 getHeader方法 268 6.4.2 getHeaders方法 268 6.4.3 getHeaderNames方法 268 6.4.4 getIntHeader方法 269 6.4.5 getDateHeader方法 269 6.4.6 getContentType方法 269 6.4.7 getContentLength方法 269 6.4.8 getCharacterEncoding方法 269 6.4.9 获取所有请求头的编程实例 269 动手体验:获取请求消息中的所有请求头信息 6.4.10 利用Referer请求头阻止“盗链” 272 动手体验:利用Referer请求头阻止“盗链” 6.4.11 利用Referer请求头隐藏JavaScript源码 273 动手体验:利用Referer请求头隐藏JavaScript源代码 6.4.12 BASE64编码及客户端身份认证 278 动手体验:BASIC验证的交互过程 6.5 浏览器传递参数信息的细节 284 6.5.1 使用GET方式传递参数 285 脚下留心:不要使用GET方式提交包含口令的FORM表单 6.5.2 使用POST方式传递参数 285 6.5.3 提交、重置、普通按钮如何传送参数 286 动手体验:了解提交、重置、普通按钮的参数传递细节 6.5.4 单行与多行文本输入框如何传送参数 287 动手体验:了解单行与多行文本输入框的参数传递细节 6.5.5 单选按钮与复选框如何传送参数 288 动手体验:了解单选按钮与复选框的参数传递细节 6.5.6 隐藏表单字段与图像字段如何传送参数 289 动手体验:了解隐藏表单字段元素与图像字段元素的参数传递细节 6.5.7 列表框如何传送参数 290 动手体验:了解列表框的参数传递细节 6.5.8 使用Javascript防止重复提交表单 290 动手体验:使用Javascript防止重复表单提交 6.6 获取请求参数 293 6.6.1 getParameter方法 293 6.6.2 getParameterValues方法 293 6.6.3 getParameterNames方法 293 6.6.4 getParameterMap方法 294 6.6.5 获取请求参数的编程实例 294 动手体验:获取请求消息中的所有参数 6.6.6 一次性处理多个列表项的实用案例 296 动手体验:一次性处理多个列表项 6.6.7单选列表框的处理经验 300 6.7 获取请求消息的实体内容 300 6.7.1 getInputStream与getReader方法 301 多学两招:使用ServletInputStream对象读取文本格式的实体内容 6.7.2 分析文件上传的请求消息结构 301 动手体验:分析文件上传的请求消息结构 6.8 利用请求域属性传递信息 311 6.8.1 setAttribute方法 311 6.8.2 getAttribute方法 312 6.8.3 removeAttribute方法 312 6.8.4 getAttributeNames方法 312 6.8.5 请求域属性的编程实例 312 动手体验:请求域属性的应用 多想一想:请求域属性与URL参数的应用区别 6.9 请求参数的中文读取问题 317 6.9.1 了解中文字符的URL编码 317 动手体验:中文字符的URL编码和解码 6.9.2 浏览器怎样进行URL编码 318 动手体验:浏览器怎样对FORM表单内容进行URL编码 6.9.3 getCharacterEncoding方法 319 6.9.4 setCharacterEncoding方法 319 6.9.5 getParameter方法的中文问题 319 动手体验:使用getParameter方法读取请求参数时的中文乱码问题 6.9.6 一些参考经验 332 6.10 思考与实践 333 第7章 会话与状态管理 334 7.1 WEB应用中的会话与会话状态 334 7.1.1 会话与会话状态简介 334 7.1.2 如何实现有状态的会话 334 7.2 Cookie 335 7.2.1 什么是Cookie 335 7.2.2 Set-Cookie2响应头字段 337 7.2.3 Cookie请求头字段 338 7.3 在Servlet程序中使用Cookie 339 7.3.1 Cookie类 339 7.3.2 HttpServletResponse.addCookie方法 340 7.3.3 HttpServletRequest.getCookies方法 340 7.3.4 Cookie的综合实例 341 动手体验:Cookie的工作细节 7.4 Session 354 7.4.1 什么是Session 354 7.4.2 Session的跟踪机制 354 7.4.3 Session的超时管理 355 7.4.4 HttpSession接口中的方法 356 7.4.5 HttpServletRequest接口中的Session方法 357 多想一想:什么情况下该调用request.getSession(false)方法 7.4.6 application与session域范围的属性比较 358 动手体验:application和session域范围的属性的差异 7.4.7 利用Cookie实现Session跟踪 364 动手体验:如何利用Cookie实现Session跟踪 7.4.8 利用URL重写实现Session跟踪 367 动手体验:利用URL重写实现Session跟踪 7.5 Session的典型案例 368 7.5.1 使用Session实现购物车 368 动手体验:使用Session实现购物车功能 7.5.2 利用Session防止表单重复提交 375 多学两招:MD5算法及其应用 动手体验:利用Session防止表单重复提交 7.5.3 利用Session实现一次性验证码 382 动手体验:利用Session实现一次性验证码 多学两招:用时间间隔限制用户连续发帖 7.5.4 跟踪用户上次访问站点的时间及Cookie中文问题 387 7.6 Session的持久化管理 389 7.6.1 Session的持久化 389 7.6.2 Tomcat中的Session持久化管理 390 动手体验:Tomcat的Session持久化 7.7 思考与实践 394 第8章 JSP 396 8.1 JSP入门 396 8.1.1 建立对JSP的直观认识 396 动手体验:编写最基本JSP程序 8.1.2 JSP的运行原理 399 多学两招:让JSP引擎不检测JSP页面是否发生修改 8.1.3 分析JSP所生成的Servlet代码 402 指点迷津:out.print语句与out.write语句的区别 8.1.4 JSP隐式对象 407 多学两招:使用JSP页面学习Servlet API 8.1.5 注册与配置JSP页面的访问路径 409 8.1.6 JSP与JavaScript的综合应用 409 动手体验:JSP与JavaScript的综合应用 多学两招:降低代码的嵌套层次,提高程序的易阅读性 8.1.7 JSP与Servlet的应用比较 417 8.2 JSP基本语法 418 8.2.1 JSP模版元素 418 8.2.2 JSP表达式 418 8.2.3 JSP脚本片断 418 8.2.4 JSP声明 420 8.2.5 EL表达式 422 动手体验:EL表达式将null输出为空字符串("")的好处 8.2.6 JSP注释 424 动手体验:JSP注释与JSP页面中的Java注释和HTML注释的区别 8.2.7 特殊字符序列的转义处理 425 8.2.8 如何查找JSP页面中的错误 426 动手体验:查找JSP页面中的错误 8.3 JSP指令 430 8.3.1 JSP指令简介 430 8.3.2 page指令 430 动手体验:JSP页面中的异常处理 多学两招:在web.xml文件中设置全局错误处理 多学两招:如何识别web.xml文件所遵循的Servlet规范版本 8.3.3 include指令 435 动手体验:include指令的特性 8.4 out对象 438 动手体验:out对象的应用特性 指点迷津:将请求转发给静态HTML页面的实验现象为何不稳定 8.5 pageContext对象 441 8.5.1 pageContext对象简介 441 8.5.2 获得其他隐式对象 442 8.5.3 引入和跳转到其他资源 442 动手体验:PageContext.forward方法的应用细节 8.5.4 访问各个域范围中的属性 444 动手体验:存储在pageContext对象中的属性的作用域 8.5.5 pushBody与popBody方法 446 8.6 JSP标签 448 8.6.1 <jsp:include>标签 449 动手体验:<jsp:include>标签的特性 8.6.2 <jsp:forward>标签 451 动手体验:<jsp:forward>标签的特性 8.6.3 <jsp:param>标签 452 8.6.4 <jsp:plugin>标签 453 8.6.5 脚本元素标签 454 8.6.6 指令标签 454 8.6.7 <jsp:text>标签 454 8.6.8 完全使用标签编写JSP页面 455 8.7 JSP的中文乱码问题 455 8.7.1 JSP中文乱码的根源 455 动手体验:JSP引擎翻译JSP页面时的中文乱码问题 8.7.2 静态引入的中文乱码问题 463 动手体验:静态引入时的中文乱码问题 8.7.3 <jsp:param>标签传递中文参数时的问题 464 动手体验:<jsp:param>标签传递中文参数时的问题 8.7.4 JSP中文乱码的总结 466 8.8 思考与实践 468 第9章 JavaBean在JSP中的应用 470 9.1 JavaBean简介 470 9.2 JavaBean的属性 470 9.1.1 JavaBean的属性简介 470 9.1.2 简单属性 471 9.1.3 Indexed属性 472 9.3 JavaBean在JSP中的应用 473 9.3.1 在JSP中如何使用JavaBean 473 9.3.2 <jsp:useBean>标签 474 动手体验:带标签体的<jsp:useBean>标签的执行情况 9.3.3 <jsp:setProperty>标签 477 动手体验:<jsp:setProperty>标签的应用 多学两招:利用JSP表达式对JavaBean的特殊类型的属性进行赋值 9.3.4 <jsp:getProperty>标签 481 9.3.5 使用JavaBean的注意事项 481 9.4 JSP开发模式 482 9.4.1 MVC设计模式 482 9.4.2 JSP开发模式 483 9.4.3 用模式一实现用户登录功能 484 动手体验:用JSP模式一实现用户登录功能 9.4.4 用模式二实现用户注册功能 493 动手体验:用JSP模式二实现用户注册功能 9.5 思考与实践 504
27.53MB
OCA认证考试指南(1Z0-051):Oracle Database 11g SQL Fundamentals I--详细书签版
2013-02-05CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 OCA认证考试指南(1Z0-051):Oracle Database 11g SQL Fundamentals I 基本信息 原书名: OCA Oracle Database 11g SQL Fundamentals I Exam Guide: Exam 1Z0-051 原出版社: McGraw-Hill Osborne Media 作者: (美)John Watson Roopesh Ramklass 译者: 付勇 出版社:清华大学出版社 ISBN:9787302207429 上架时间:2009-10-23 出版日期:2009 年10月 开本:16开 页码:386 版次:1-1 内容简介 本书旨在对参加oca oracle database 11g sql fundamentals i考试的读者提供帮助。每一章都配备了练习题、自测题、实践题、本章知识点回顾和小结,从各个方面使读者对本书所学内容进行充分地消化和吸收。本书是oca认证考试最权威的辅导教程,也是oracle从业人员必备的参考书。. 本书全面覆盖了oca认证考试(1z0-051)的所有要点: ●sql select语句 ●限制和排序数据 ●单行函数 ●转换函数和条件表达式.. ●分组函数 ●显示多个表中的数据 ●子查询 ●集合运算符 ●dml和ddl语句 ●模式对象... 作译者 John Watson供职于BPLC管理咨询公司,负责该公司在欧洲和非洲的教学和咨询工作。他曾在英国和欧洲的多家公司、政府部门和非政府组织供职,此后在南非的Oracle大学工作数年。他具有数据库和应用服务器管理的OCP认证资格,IT从业经历达25年之久,曾编撰多本技术书籍,发表多篇技术论文。 目录 封面 -12 封底 387 版权 -11 作者简介 -10 前言 -9 目录 -4 第1章 Oracle服务器技术与关系范例 1 1.1 定位服务器技术 2 1.1.1 Oracle服务器的体系结构 3 1.1.2 Oracle Application Server 4 1.1.3 Oracle Enterprise Manager 5 1.1.4 网格计算 6 1.1.5 开发工具和语言 6 1.2 理解关系结构 7 1.2.1 行和表 7 1.2.2 数据规范化 9 1.3 SQL语言概述 15 1.3.1 SQL标准 15 1.3.2 SQL命令 15 1.3.3 面向集合语言 16 1.4 使用客户工具 17 1.4.1 SQL*Plus 17 1.4.2 SQL Developer 22 1.5 创建演示模式 25 1.5.1 用户和模式 26 1.5.2 HR和OE模式 26 1.5.3 创建演示模式 29 1.6 认证小结 30 1.7 本章测试题 31 1.7.1 自测题 31 1.7.2 实验题 33 1.7.3 自测题答案 33 1.7.4 实验题答案 34 第2章 使用SQL SELECT语句检索数据 35 2.1 列出SQL SELECT语句的性能 36 2.1.1 SQL SELECT语句介绍 36 2.1.2 DESCRIBE表命令 36 2.1.3 SELECT语句的性能 40 2.2 执行基本的SELECT语句 40 2.2.1 基本SELECT语句的语法 41 2.2.2 必须遵守的规则 45 2.2.3 SQL表达式和运算符 48 2.2.4 NULL 57 2.3 认证小结 62 2.4 本章测试题 63 2.4.1 自测题 63 2.4.2 实验题 65 2.4.3 自测题答案 66 2.4.4 实验题答案 67 第3章 限定和排序数据 71 3.1 限制查询检索的行 72 3.1.1 WHERE子句 72 3.1.2 比较运算符 78 3.1.3 布尔运算符 88 3.2 排序查询检索的行 96 3.3 和符号(&)替换 101 3.3.1 替换变量 101 3.3.2 定义和验证 106 3.4 认证小结 111 3.5 本章测试题 112 3.5.1 自测题 112 3.5.2 实验题 114 3.5.3 自测题答案 114 3.5.4 实验题答案 115 第4章 单行函数 117 4.1 描述SQL中可用的不同类型的函数 118 4.1.1 定义函数 118 4.1.2 函数类型 120 4.2 在SELECT语句中使用字符、数字和日期函数 122 4.2.1 使用字符大小写转换函数 122 4.2.2 使用字符操作函数 127 4.2.3 使用数字函数 137 4.2.4 使用日期 141 4.2.5 使用日期函数 144 4.3 认证小结 151 4.4 本章测试题 152 4.4.1 自测题 152 4.4.2 实验题 154 4.4.3 自测题答案 154 4.4.4 实验题答案 155 第5章 使用转换函数和条件表达式 157 5.1 SQL中可用的各种类型的转换函数介绍 158 5.2 使用TO_CHAR、TO_NUMBER和TO_DATE转换函数 160 5.3 在SELECT语句中应用条件表达式 170 5.3.1 嵌套函数 170 5.3.2 一般函数 171 5.3.3 条件函数 177 5.4 认证小结 182 5.5 本章测试题 184 5.5.1 自测题 184 5.5.2 实验题 186 5.5.3 自测题答案 186 5.5.4 实验题答案 187 第6章 使用分组函数报告聚集数据 189 6.1 分组函数介绍 190 6.1.1 分组函数的定义 190 6.1.2 分组函数的类型和语法 191 6.2 确定可用的分组函数 193 6.2.1 使用分组函数 193 6.2.2 嵌套的分组函数 198 6.3 使用GROUP BY子句分组数据 199 6.3.1 创建数据组 200 6.3.2 GROUP BY子句 200 6.3.3 按多列分组 202 6.4 使用HAVING子句包含或者排除分组行 205 6.4.1 限制分组结果 205 6.4.2 HAVING子句 206 6.5 认证小结 209 6.6 本章测试题 210 6.6.1 自测题 210 6.6.2 实验题 212 6.6.3 自测题答案 212 6.6.4 实验题答案 214 第7章 显示多个表中的数据 215 7.1 使用同等连接和非同等连接编写SELECT语句访问多个表的数据 216 7.1.1 连接的类型 216 7.1.2 使用SQL:1999语法连接表 220 7.1.3 限定模糊的列名 221 7.1.4 NATURAL JOIN子句 222 7.1.5 自然JOIN USING子句 224 7.1.6 自然JOIN ON子句 225 7.1.7 N路连接和其他连接条件 227 7.1.8 非同等连接 229 7.2 使用自连接将表连接到自身 231 7.3 使用外连接查看不满足连接条件的数据 233 7.3.1 内连接和外连接 234 7.3.2 左外连接 234 7.3.3 右外连接 235 7.3.4 全外连接 237 7.4 生成两个或者更多表的笛卡尔乘积 239 7.5 认证小结 242 7.6 本章测试题 243 7.6.1 自测题 243 7.6.2 实验题 246 7.6.3 自测题答案 246 7.6.4 实验题答案 247 第8章 使用子查询解决问题 249 8.1 定义子查询 250 8.2 描述子查询能够解决的问题的类型 251 8.2.1 将子查询的结果集用于比较 251 8.2.2 星型转换(Star Transformation) 252 8.2.3 生成执行SELECT语句的表 253 8.2.4 生成投影值 253 8.2.5 生成传递给DML语句的行 253 8.3 列举子查询的类型 255 8.3.1 单行和多行子查询 255 8.3.2 关联子查询 256 8.4 写单行和多行子查询 258 8.5 认证小结 261 8.6 本章测试题 262 8.6.1 自测题 262 8.6.2 实验题 264 8.6.3 自测题答案 265 8.6.4 实验题答案 266 第9章 使用集合运算符 267 9.1 描述集合运算符 268 9.1.1 集合和维恩图 268 9.1.2 集合运算符的一般原则 269 9.2 使用集合运算符将多个查询合并为一个查询 271 9.2.1 UNION ALL运算符 271 9.2.2 UNION运算符 272 9.2.3 INTERSECT运算符 272 9.2.4 MINUS运算符 273 9.2.5 更复杂的示例 273 9.3 控制返回行的顺序 276 9.4 认证小结 277 9.5 本章测试题 278 9.5.1 自测题 278 9.5.2 实验题 279 9.5.3 自测题答案 280 9.5.4 实验题答案 280 第10章 操作数据 283 10.1 描述各种数据操作语言(Data Manipulation Language,DML)语句 284 10.1.1 INSERT 284 10.1.2 UPDATE 285 10.1.3 DELETE 286 10.1.4 MERGE 286 10.1.5 TRUNCATE 287 10.1.6 DML语句失败 287 10.2 在表中插入行 290 10.3 更新表中的行 294 10.4 从表中删除行 297 10.4.1 使用DELETE删除行 297 10.4.2 使用TRUNCAT删除行 299 10.4.3 MERGE 300 10.5 控制事务 300 10.5.1 数据库事务 301 10.5.2 事务控制语句 303 10.6 认证小结 307 10.7 本章测试题 309 10.7.1 自测题 309 10.7.2 实验题 311 10.7.3 自测题答案 312 10.7.4 实验题答案 314 第11章 使用DDL语句创建和管理表 315 11.1 分类主要的数据库对象 316 11.1.1 对象类型 316 11.1.2 用户和模式 317 11.1.3 命名模式对象 318 11.1.4 对象名称空间 319 11.2 回顾表结构 320 11.3 列举列可用的数据类型 321 11.4 创建简单的表 324 11.4.1 使用列规范创建表 324 11.4.2 从子查询创建表 326 11.4.3 在创建之后变更表定义 327 11.4.4 删除和切断表 327 11.5 讨论在创建表时如何创建约束 329 11.5.1 约束的类型 330 11.5.2 定义约束 332 11.6 认证小结 335 11.7 本章测试题 336 11.7.1 自测题 336 11.7.2 实验题 338 11.7.3 自测题答案 338 11.7.4 实验题答案 339 第12章 创建其他模式对象 341 12.1 创建简单视图与复杂视图 342 12.1.1 使用视图的原因 342 12.1.2 简单视图与复杂视图 345 12.1.3 创建、更改和删除视图 346 12.2 从视图中检索数据 348 12.3 创建私有和公有同义词 349 12.4 创建、维护和使用序列 352 12.4.1 创建序列 353 12.4.2 使用序列 354 12.5 创建和维护索引 358 12.5.1 索引的用途 358 12.5.2 索引类型 359 12.5.3 创建和使用索引 362 12.5.4 修改和删除索引 363 12.6 认证小结 365 12.7 本章测试题 366 12.7.1 自测题 366 12.7.2 实践题 370 12.7.3 自测题答案 370 12.7.4 实验题答案 372 附录A 本书提供的OCA考试资料 375 本书配套模拟试题 375 系统要求 376 MasterExam 376 卸载MasterExam 376 技术支持 376 LearnKey技术支持 376 术语表 377 前言 当今社会需要越来越多具有IT行业认证资格的员工。对于雇主来说,认证的好处是显著的:雇主能够确信自己的员工具备一定的竞争力。个人同样能够凭借认证资格享受到巨大好处。目前,许多雇主更希望雇用具有认证资格的技术人员,而且许多IT产品买主不愿购买未聘用相关认证人员的公司的产品。在众多的IT行业认证中,Oracle认证最受青睐。除了商业报酬的因素外,具备Oracle认证资格就意味着成为相对紧俏的Oracle专业人员群体中的一分子,也拥有了赢得可观收入的重要筹码。. Oracle认证具有多种类别。本书涉及专门针对Oracle数据库11g版本的Oracle Database Administration认证。DBA认证级别有以下三种:Certified Associate(OCA)、Certified Professional(OCP)以及Certified Master(OCM)。取得OCA资格需要通过两种考试,本书是为第一种考试准备的书籍。取得OCP资格需要通过第三种考试。这些考试在任一Prometric考试中心都可以进行,要求在90分钟内解答60或70个问题。取得OCM资格则还需要在Oracle测试中心完成为期两天的评估,其中涉及复杂环境的模拟以及高级技术的应用。 如果最终目的是学习Oracle PL/SQL和Oracle Forms Developer课程,也可以将第一种考试内容作为起点,不过编写本书时使用的是版本10g,因为11g版本还没有发布。 在准备第一种OCA考试时,可以参加Oracle大学举办的培训课程,可以学习Oracle大学的联机辅导资料,也可以阅读本书。无论采用哪种方式,应试者都应当参考Oracle Documentation Library来了解语法的详细信息。仅凭本书就足以帮助应试者通过认证,但如果选择了其他方式,本书也是一本珍贵的参考资料。本书围绕考试目标展开讨论,还涵盖了DBA在工作中用到的大量信息。对于从事开发工作的读者,也可以将本书的主要内容作为学习Oracle公司的这些开发工具的起点:SQL、PL/SQL及Oracle Application Server自带的Internet应用程序开发工具包。 当然,也不要一厢情愿地认为,只要购得本书,将其藏于枕下,书中的知识便可源源不断地传递到脑海中。必须通读本书、完成所有练习、解决示例问题以及试验各种命令。在进一步熟悉Oracle环境后,会悟出一句金箴:在实践中求真知。 在众多场合会发现,一个几分钟便告完成的简单测试能省下数小时的思考与手册查阅时间。若有不明之处,可以构造一个示例并查看发生的情况。本书基于Windows或Linux操作系统讨论数据库,但可以在Oracle支持的任何平台上完成练习并做更深入的研究。 从此将开始您的Oracle数据库管理学习之旅,在职业生涯余下的岁月里,可以沿着这条幽静芳香的路径步入更美妙的人生境界。请尽情品味和享受学习的乐趣吧! 本书内容 本书供Oracle专业人员全面学习OCA Oracle Database 11g:SQL Fundamentals I Exam。每章围绕考试的一个重要方面铺开描述,全书缜密论述了所有OCA官方认证目标。 本书提供的OCA考试资料 本书支持网站http://www.tupwk.com.cn/downpage提供了一个MasterExam模拟考试软件,可以真实模拟Oracle Database 11g OCA认证考试。详细介绍请参考本书附录。 准备清单 本文结尾处有一份准备清单,表中列出了官方考试目标。通览此表,一开始就能衡量自己对每个目标的掌握程度,检查自己的学习进展情况,并确保将更多时间投入较为困难和感到陌生的领域。每个目标均由Oracle公司提出,在表中可以找到其所在的章节。 编排方式 每章包含多个组成部分,以便突出显示重要条目、强化学习要点,并提供具有帮助作用的应试提示。每章的组成部分如下: “考点”突出显示考试信息和可能布设的陷阱,如下例: “练习”分布于各个章节,是助您成功闯过考试关的实用练习,能帮您熟练掌握很可能成为考试要点的技能。不要只是泛泛地读一读,而应该能熟练地完成这些实用练习。“从做中学”是有效提高产品理解能力的途径。.. “提示”描述实际设置中最常遇到的问题,是有关认证主题和产品主题的真知灼见。它们指出了常见错误,并解决提示中谈及的问题以及根据经验推断的问题。 “考点透析”部分预测考试重点,安排在每章将近结束的位置。这些是根据多次实际考试和模拟考试的经验,以及Oracle内部团队在评判试卷的过程中总结出来的重点主题。 “小结”简明扼要地回顾了整个章节,并重申考试要点。 . “本章知识点回顾”是相应章节的主题列表,安排在每章即将结束的位置。在考试前,可供读者进行快捷的总结性复习。 “自测题”模拟认证考试中的问题。可以在章末找到这些问题的答案和解释。在阅读完每章后做一做“自测题”,可以巩固所学的内容,并熟悉考题的结构。 “实践题”部分放在“自测题”之后,它提出独特的具有挑战性的问题,为了回答这些问题,需要理解多个概念。与其他问题相比,这些问题更复杂,内容更广泛,要求读者利用全章的知识,来解决实际环境中遇到的复杂问题。 学习指导 读完本书后,留出时间认真地复习一遍。在参试前,可能需要多次复习本书,并利用它所提供的方法来复习材料。 温习所有“本章知识点回顾”或请别人考考自已——可使用此练习为考试热身。 温习所有考点——请注意,这些考点都是根据OCA考试总结出来的。利用它们,可以集中精力应对考试。 重温自测题——正确的做法是:每读完一章就立即完成自测题来巩固所学内容,并最后将这些题目综合起来重做一遍。考试题不会像章末自测题那样按主题组合,必须做好这样的准备:刚做了一道关于A主题的题,接着就要做一道关于B主题的题。 完成练习——读完一章后要完成自测题和实践题吗?答案是十分肯定的。这些练习题涵盖了考试主题,没有什么方法比通过做练习来了解材料的效果更好。一定要弄清楚每个练习中每个步骤的来龙去脉。如对其中一些内容不甚明了,请重新阅读正文中的对应内容。 考题结构 OCA考试是多项选择题,但不一定都是有答案可选的题目。有些题目要求选择2~3个答案,有些题目要求“选择所有正确答案。”大多数题目是用文本描述的,但有些题目会有插图,比如用来说明问题的屏幕截图。 审题要仔细。有的题目要求一个答案,如果不仔细审题,可能以为所有答案都是错的或者有多个答案是正确的。在重新审题时,往往就会领会出题者的意图。 每道题的平均预留时间仅一分钟左右。拿到试卷后,要通篇浏览一遍,先做有把握的题,拿不准的就划上记号,然后回头琢磨(考试中的大多数时间都用在了这上面)。如果最后还有难题解不出,就猜一猜碰碰运气吧,猜不对,自然要丢分! 应试准备 对知识的掌握离不开学习和实践。认真学习本书的每一章,完成所有练习,并进行试验。如果仍有不清楚的地方,可以利用其他资源,必备参考资料是Oracle Documentation Library(可以从Oracle Corporation的网站上免费下载)。如果有机会去听Oracle大学课程,或者具有访问Oracle大学远程自学课程的权限,这也是很有价值的学习方式。 章末的自测题和本书支持网站http://www.tupwk.com.cn/downpage上的题目不是OCA真题(因为那会有欺骗性),而是您将面对的考题类型与格式的逼真模拟。它们涵盖了所有考试材料。在进考场的前一天,做一遍模拟题很有意义,可以再巩固一下不扎实的知识点。 本书不仅仅是应试指南:全书的主题是介绍如何使用SQL开发应用程序。如果知道了如何做这件事,就能通过考试。不要死记问题的答案——要学习解答所用问题的技术、原则和语法。...
3.39MB
中文版RFC,共456
2009-04-19RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 RFC4 网络时间表 RFC6 与 Bob Kahn 会话 RFC10 文档规范 RFC13 零文本长度的EOF信息 RFC16 M.I.T RFC18 IMP-IMP和主机-主机控制联接 RFC19 可用来降低有限交换节点阻塞的两条协议性的建议 RFC20 用于网络交换的 ASCII 格式 RFC21 网络会议 RFC22 主机-主机控制信息格式 RFC23 多重传送的调节信息 RFC24 文档规范 RFC25 不使用高的连接号 RFC27 文档规范 RFC28 时间标准 RFC29 响应 RFC 28 RFC30 文档规范 RFC32 关于SRI所提议的实时时钟的一些想法 RFC34 关于ARC时钟的一些初步记录摘要 RFC35 网络会议 RFC36 协议注解 RFC37 网络会议结尾等 RFC38 NWG/RFC #36 网络协议的注解 RFC40 关于未来协议的更多注解 RFC41 IMP-IMP 通讯信息 RFC42 信息数据类型 RFC43 被提议的会议 RFC45 关于未来协议的更多注解 RFC53 官方协议机构 RFC58 逻辑信息同步 RFC60 简单的 NCP 协议 RFC63 迟来的网络会议报告 RFC66 NIC - 第三级别的想法和其它噪音 RFC69 提议改变 主机/IMP 规范来消除标记 RFC71 输入错误后的再分配 RFC72 建议改变网络协议延期执行 RFC73 响应 NWG/RFC 67 RFC75 网络会议 RFC78 NCP状态报告:UCSB/RAND RFC79 圆木协议错误 RFC81 涉及信息的请求 RFC84 NWG/RFC的1-80列表 RFC85 网络工作组会议 RFC90 CCN 作为一种网络服务中心 RFC99 网络会议 RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC106 用户/服务器 站点协议的网络主机问卷 RFC107 主机-主机 协议故障清除委员会的说明 RFC108 1971年2月17-19日在 Urbana 举行的 NWG 会议的人员列表 RFC124 在 RFC 107 中有印刷错误 RFC132 RFC 107 的排版错误 RFC148 RFC 123 的注释 RFC149 最好的铺设计划 RFC154 风格显示 RFC156 伊利诺斯州站点的状态: 响应 RFC 116 RFC179 连接的数字分配 RFC185 NIC 分发手册 RFC188 数据管理会议公告 RFC198 站点证明-林肯实验室 360/67 RFC204 利用报路 RFC218 改变 IMP 状态报告设备 RFC228 澄清 RFC232 网络图形会议延缓 RFC245 预定网络工作组会议 RFC246 网络图形会议 RFC256 IMPSYS 变更通知 RFC276 NIC过程 RFC285 网络图形 RFC324 RJE 协议会议 RFC335 新界面 - IMP/360 RFC348 放弃过程 RFC404 文件迁移协议的注释 RFC405 给 TIP 用户的第二封信 RFC456 UCSB 的数据重置服务 RFC457 FTP 的服务器与服务器交互 RFC496 IMP/TIP 内存更新时间表(修订版 2) RFC516 丢失消息的检测 RFC591 在 NVT ASCII UCSB和在线系统之间的实验输入映象 RFC621 “注意圣诞节的时候要把长袜挂在烟囱下面” RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697 FTP的CWD命令 RFC698 Telnet扩展ASCII选项 RFC763 角色邮箱 RFC775 面向目录的 FTP 命令 RFC779 Telnet发送-位置选项 RFC792 Internet 控制信息协议 RFC797 位图文件格式 RFC821 简单邮件传输协议 RFC826 以太网地址转换协议或转换网络协议地址 RFC827 Exterior 网关 协议 (EGP) RFC854 Telnet协议说明书 RFC855 Telnet选项说明书 RFC856 Telnet二进制传输 RFC857 Telnet回声选项 RFC858 Telnet抑制前进选项 RFC859 Teln
3.45MB
RFC中文文档-txt
2009-09-11RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 RFC4 网络时间表 RFC6 与 Bob Kahn 会话 RFC10 文档规范 RFC13 零文本长度的EOF信息 RFC16 M.I.T RFC18 IMP-IMP和主机-主机控制联接 RFC19_可用来降低有限交换节点阻塞的两条协议性的建议 RFC20_用于网络交换的 ASCII 格式 RFC21 网络会议 RFC22 主机-主机控制信息格式 RFC23_多重传送的调节信息 RFC24 文档规范 RFC25 不使用高的连接号 RFC27 文档规范 RFC28 时间标准 RFC29 响应 RFC 28 RFC30 文档规范 RFC32 关于SRI所提议的实时时钟的一些想法 RFC34 关于ARC时钟的一些初步记录摘要 RFC35 网络会议 RFC36 协议注解 RFC37 网络会议结尾等 RFC38 NWG/RFC #36 网络协议的注解 RFC40 关于未来协议的更多注解 RFC41 IMP-IMP 通讯信息 RFC42 信息数据类型 RFC43 被提议的会议 RFC45 关于未来协议的更多注解 RFC53 官方协议机构 RFC58 逻辑信息同步 RFC60 简单的 NCP 协议 RFC63 迟来的网络会议报告 RFC66 NIC - 第三级别的想法和其它噪音 RFC69 提议改变 主机/IMP 规范来消除标记 RFC71 输入错误后的再分配 RFC72 建议改变网络协议延期执行 RFC73 响应 NWG/RFC 67 RFC75 网络会议 RFC78 NCP状态报告:UCSB/RAND RFC79 圆木协议错误 RFC81 涉及信息的请求 RFC84 NWG/RFC的1-80列表 RFC85 网络工作组会议 RFC90 CCN 作为一种网络服务中心 RFC99 网络会议 RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC106 用户/服务器 站点协议的网络主机问卷 RFC107 主机-主机 协议故障清除委员会的说明 RFC108 1971年2月17-19日在 Urbana 举行的 NWG 会议的人员列表 RFC124 在 RFC 107 中有印刷错误 RFC132 RFC 107 的排版错误 RFC148 RFC 123 的注释 RFC149 最好的铺设计划 RFC154 风格显示 RFC156 伊利诺斯州站点的状态: 响应 RFC 116 RFC179 连接的数字分配 RFC185 NIC 分发手册 RFC188 数据管理会议公告 RFC198 站点证明-林肯实验室 360/67 RFC204 利用报路 RFC218 改变 IMP 状态报告设备 RFC228 澄清 RFC232 网络图形会议延缓 RFC245 预定网络工作组会议 RFC246 网络图形会议 RFC256 IMPSYS 变更通知 RFC276 NIC过程 RFC285 网络图形 RFC324 RJE 协议会议 RFC335 新界面 - IMP/360 RFC348 放弃过程 RFC404 文件迁移协议的注释 RFC405 给 TIP 用户的第二封信 RFC456 UCSB 的数据重置服务 RFC457 FTP 的服务器与服务器交互 RFC496 IMP/TIP 内存更新时间表(修订版 2) RFC516 丢失消息的检测 RFC591 在 NVT ASCII UCSB和在线系统之间的实验输入映象 RFC621 “注意圣诞节的时候要把长袜挂在烟囱下面” RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697 FTP的CWD命令 RFC698 Telnet扩展ASCII选项 RFC763 角色邮箱 RFC775 面向目录的 FTP 命令 RFC779 Telnet发送-位置选项 RFC792 Internet 控制信息协议 RFC797 位图文件格式 RFC821 简单邮件传输协议 RFC826 以太网地址转换协议或转换网络协议地址 RFC827 Exterior 网关 协议 (EGP) RFC854 Telnet协议说明书 RFC855 Telnet选项说明书 RFC856 Telnet二进制传输 RFC857 Telnet回声选项 RFC858 Telnet抑制前进选项 RFC859 Telnet状态选项 RFC860 Telnet定时标记选项 RFC861 Telnet扩展选项列表选项 RFC862 回声协议 RFC863 废除协议 RFC864 字符产生协议 RFC865 白天协议的引用 RFC866 激活用户 RFC867 白天协议 RFC868_时间协议 RFC872 局域网上的TCP协议 RFC877 IP 数据包通过公共数据网络的传输标准 RFC888 STUB Exterior Gateway Protocol RFC890 外部网关协议执行表 RFC894 IP 数据包通过以太网网络传输标准 RFC895 IP 数据包通过试验性以太网网络的传输标准 RFC896 在IPTCP internet网络中的拥塞控制 RFC903 反向地址转换协议 RFC911 BERKELEY UNIX 4.2下的EGP网关 RFC917 因特网子网 RFC918 邮局协议 RFC925 多局域网地址解决 RFC930 Telnet终端类型选项 RFC932 子网地址分配方案 RFC937 邮局协议( 版本 2) RFC948 IP 数据包通过IEEE 802.3 网络传输的两种方法 RFC949 FTP 未公开的独特命令 RFC951 引导协议(BOOTP) RFC955 朝向一个处理过程应用的传输服务 RFC962 TCP-4 的最初 RFC968 “这是开动前的黑暗” RFC974 邮件路由与域名系统 RFC975 自治联邦 RFC976 UUCP 邮件互换格式标准 RFC985 Internet 网关要求 - 起草 RFC988 主机扩展用于IP多点传送 RFC1050 RPC远程步骤呼叫协议说明书 RFC1055 在串行线路上传输IP数据报的非标准协议 RFC1057 RPC远程步骤呼叫协议说明书版本 2 RFC1073 Telnet窗口大小选项 RFC1075 远距离矢量多播选路协议 RFC1088 IP 数据包传输通过NetBIOS网络的标准 RFC1090 SMTP在X.25 RFC1091 TelnetTELNET终端类型选项 RFC1094 NFS网络文件系统协议说明书 RFC1096 Telnet X 显示定位选项 RFC1097 Telnet潜意识-信息选项 RFC1112 主机扩展用于IP多点传送 RFC1113 Internet电子邮件秘密增强第一部分- 信息加密和身份验证步骤 RFC1131 OSPF规范 RFC1132 802.2分组在IPX网络上传输的标准 RFC1134 +PPP协议:关于在点到点链路上进行多协议包传送的建议 RFC1142 OSI IS-IS 域内路由协议 RFC1144 低速串行链路上的TCPIP头部压缩 RFC1155 基于TCPIP网络的管理结构和标记 RFC1166 Internet数字 RFC1180 TCPIP指南 RFC1191 路径MTU探索 RFC1215 为使用SNMP定义Trap的惯例 RFC1239 试验管理系统库(MIB)到标准管理系统库(MIB)的重分配 RFC1242 基准术语用于网络互连设备 RFC1258 BSD 的远程登录 RFC1287 未来的Internet 体系结构 RFC1288 Finger用户信息协议 RFC1298 基于IPX协议的SNMP RFC1321 MD5 信息-摘要算 RFC1332 PPP Internet 协议控制协议 (IPCP) RFC1333 PPP 链接质量监控 RFC1355 网络中心数据库的保密和准确性问题 RFC1365 一种IP地址扩展提议 RFC1370 OSPF适用范围声明 RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet环境选项 RFC1413 鉴定协议 RFC1418 SNMP优于OSI RFC1420 SNMP优于IPX RFC1426 SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输 RFC1428 Internet邮件从Just-Send-8到8bit-SMTPMIME的转换 RFC1433 直接ARP RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454 下一代IP提议的比较 RFC1461 通过X.25多协议互连SNMP管理系统库(MIB)扩展 RFC1469 通过令牌-环局域网的IP多点传送 RFC1483 通过ATM适应层5的多协议封装 RFC1558 LDAP研究过滤器的字符串表达 RFC1571 Telnet环境选项互用性问题 RFC1590 媒体类型注册过程 RFC1591 域名系统的结构和授权 RFC1597 私有Internet的地址分配 RFC1605 SONET to Sonnet翻译 RFC1606 用IP版本9的历史观 RFC1611 DNS服务器MIB扩展 RFC1612 DNS解析器MIB扩展 RFC1618 ISDN上的PPP(点对点)协议 RFC1628 UPS 管理信息基础 RFC1633 Internet 体系结构中的综合服务概述 RFC1635 怎样使用匿名FTP RFC1636 IAB工厂关于在Internet体系结构的安全报告 -2月8-10号, 1994 RFC1643 以太网-类似界面类型的管理对象的定义 RFC1658 字符流设备使用SMIv2管理对象的定义 RFC1661 点对点协议(PPP) RFC1671 向IPng 过渡和其他考虑的白皮书 RFC1690 Internet工程与计划组(IEPG)介绍 RFC1691 康奈尔大学数字图书馆文档体系结构 RFC1696 用SMIv2定义的调制解调器MIB RFC1713 DNS调试工具 RFC1715 地址分配效率比率H RFC1723 路由信息协议(版本2) RFC1724 RIP 版本 2 管理系统库(MIB) 扩展 RFC1738 统一资源定位器(URL) RFC1752 推荐IP下一代协议 RFC1769 简单网络时间协议(SNTP) RFC1771 边界网关协议版本4(BGP-4) RFC1776 地址是信息 RFC1777 轻量级目录访问协议 RFC1787 在多供应Internet上的软件路由 RFC1796 不是所有RFCs是标准 RFC1797 A级子网实验 RFC1810 报告MD5性能 RFC1818 最好最新的实践 RFC1822 使用具备Photuris技术的指定IBM专利的权利的授予 RFC1823 LDAP 应用程序界面 RFC1827 IP 密码安全有效载荷 (ESP) RFC1828 使用键控MD5进行IP鉴别 RFC1860 IPv4变量长度子网表 RFC1867 HTML中基于表单的文件上传 RFC1869 SMTP服务扩展 RFC1878 变量长度子网表格用于IPv4 RFC1883 Internet协议,版本6(IPv6)说明书 RFC1901 基于社区的SNMPv2介绍 RFC1904 简单网络管理协议(SNMPv2)版本 2的一致声明 RFC1918 个人Internets的地址分配 RFC1928 SOCKS V5的用户名/密码鉴定 RFC1930 自治系统(AS)创建,选择,和注册的指导方针 RFC1939 邮局办公协议-版本3 RFC1942 HTML表格 RFC1945 超文本传输协议--HTTP/1.0 RFC1957 邮局协议(POP3)执行的一些观察 RFC1962 PPP压缩控制协议 (CCP) RFC1977 PPP BSD 压缩协议 RFC1979 PPP压缩协议 RFC1981 IP 版本 6的路径MTU探索 RFC1982 序列号算法 RFC1988 有条件地授予权利给特殊的HP专利于连接Internet工程特遣队的Internet-标准网络管理框架中 RFC1993 PPP G和alf FZA 压缩 协议 RFC1994 PPP挑战握手身份验证协议 (CHAP) RFC1997 BGP 组属性 RFC1998 BGP 社区属性在多本地路由中的应用 RFC2002 IP移动性支持 RFC2003 在IP内封装IP RFC2004 IP最小封装 RFC2005 IP移动性的适用性陈述 RFC2011 SNMPv2 管理信息基础用于Internet 协议使用SMIv2 RFC2012 SNMPv2 管理信息基础 用于传输控制协议使用SMIv2 RFC2013 有关采用SMIv2用户数据报协议的SNMPv2管理信息数据库 RFC2015 多用途网际邮件扩充协议(MIME)安全具有相当好的保密性(PGP) RFC2021 远程网络监控管理信息基础 版本 2使用SMIv2 RFC2025 简单公共密钥GSS-API机制(SPKM) RFC2040 RC5, RC5-CBC, RC5-CBC-Pad,和 RC5-CTS算法 RFC2042 注册新BGP属性类型 RFC2046 多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部分:媒体类型 RFC2053 AM (美国)域 RFC2078 通用安全服务应用接口(GSS-API) V2 RFC2079 X.500 属性类型和对象类别去掌握统一资源定位器(URIs)的定义 RFC2085 具有重放预防的HMAC-MD5 IP 身份验证 RFC2088 IMAP4非同步字符 RFC2095 简单挑战/回应的IMAP/POP授权扩展 RFC2096 IP面向表格管理系统库(MIB) RFC2101 IPv4 今天地址行为 RFC2104 HMAC:键入-散列法用于信息身份验证 RFC2105 CCisco 系统的标签交换体系结构纵览 RFC2113 IP路由器警告选项 RFC2118 微软点对点压缩(MPPC)协议 RFC2119 关键字用于使用在RFCs指出要求水平 RFC2128 拨号控制MIB(SMIv2) RFC2144 CAST-128 加密算法 RFC2147 TCP和UDP通过IPv6 Jumbograms RFC2198 多余音频数据的RTP有效载荷 RFC2208 资源预留协议(RSVP)——版本1 适用性声明 关于配置的一些指导 RFC2212 有保证的质量服务说明书 RFC2217 TelnetCom端口控制选项 RFC2221 IMAP4 登陆参考 RFC2228 FTP 安全扩展 RFC2234 语法说明书的扩充BNF:ABNF RFC2236 Internet组管理协议,版本2 RFC2241 Novell目录服务的DHCP选项 RFC2245 匿名SASL机制 RFC2260 可升级支持用于多目录多供应者的连通 RFC2279 UTF-8,ISO 10646的一种转换格式 RFC2281 Cisco热备份路由协议(HSRP) RFC2283 BGP-4的多协议扩展 RFC2284 PPP可扩展认证协议 RFC2289 一种一次性密码系统 RFC2296 HTTP 远程变量选择算法--RVSA/1.0 RFC2313 PKCS#1:RSA加密 版本1.5 RFC2330 IP 执行规则的管理 RFC2343 应用于捆绑的MPEG的RTP有效载荷的格式 RFC2344 移动IP反向隧道 RFC2367 PF_KEY键管理 API,版本 2 RFC2372 处理Internet协议(TIP)-要求和补充信息 RFC2373 IPv6寻址体系结构 RFC2374 IPv6 可集聚全球单播地址格式 RFC2379 RSVP通过ATM执行的指导方针 RFC2384 POP URL 方案 RFC2393 IP有效载荷压缩协议(IPComp) RFC2394 IP有效载荷压缩使用DEFLATE RFC2401 Internet 协议的安全体系结构 RFC2403 在ESP和AH中使用HMAC-MD5-96 RFC2404 在ESP和AH中使用HMAC-SHA-1-96 RFC2406 IP 封装安全有效载荷 (ESP) RFC2407 Internet IP 用于解释ISAKMP的安全域 RFC2408 Internet 安全关联和键管理协议 (ISAKMP) RFC2409 Internet密钥交换(IKE) RFC2410 NULL加密算法及其在IPsec协议中的应用 RFC2411 IP安全文件指南 RFC2412 OAKLEY 键决定协议 RFC2435 针对JPEG压缩视频的RTP荷载格式 RFC2449 POP3 扩展机制 RFC2451 ESP CBC-模式密码算法 RFC2459 Internet X.509 公钥基础设施:证书和CRL简介 RFC2460 Internet协议,版本6(IPv6)说明书 RFC2463 针对因特网协议第六版(Ipv6)的因特网控制报文协议(ICMPv6)规范 RFC2466 IP 版本6 管理信息基础:ICMPv6组 RFC2471 IPv6检测地址分配 RFC2474 IPv4与IPv6包头中差分服务字段(DS Field)的定义 RFC2475 分类业务的体系结构 RFC2492 IPv6 通过ATM网络 RFC2495 有关 DS1,E1,DS2,E2接口类型的管理部件的定义 RFC2508 低速串行链路下IP/UDP/RTP数据包头的压缩 RFC2511 Internet X.509认证请求消息格式 RFC2516 在以太网上传输PPP的方法(PPPoE) RFC2526 IPv6保留的子网任意传送地址 RFC2541 DNS 安全操作考虑 RFC2547 BGP/MPLS VPNs RFC2554 SMTP服务认证扩展 RFC2560 x.509因特网公钥基础设施在线证书状态协议——OCSP RFC2570 标准互联网络管理框架第三版介绍 RFC2577 FTP 安全考虑 RFC2581 TCP拥塞控制 RFC2582 TCP的快速恢复算法NewReno修正 RFC2585 Internet X.509 公共键底部结构操作协议: FTP和HTTP RFC2597 确定的面向PHB组 RFC2598 面向加速PHB RFC2618 RADIUS 身份验证客户端管理系统库(MIB) RFC2629 用XML 写I-Ds 和 RFC文档 RFC2633 S/多用途网际邮件扩充协议(MIME) 版本 3 信息说明书 RFC2644 更改直接广播在路由器上的缺省值 RFC2669 DOCSIS 电缆设备管理系统库(MIB) 电缆设备管理信息基础用于DOCSIS 适应性电缆调制解调器和电缆调制解调器中断系统 RFC2670 音频频率(RF)界面管理信息基础用于MCNS/DOCSIS适应性RF界面 RFC2685 虚拟专用网标志符 RFC2702 基于MPLS的流量工程要求 RFC2706 ECML v1:电子商务字段名 RFC2713 LDAP(轻型目录存取协议)目录中JAVATM对象的表征模式 RFC2714 LDAP(轻型目录存取协议)目录中的CORBA对象参考方案 RFC2731 Dublin核心元数据在HTML上的编码 RFC2732 文本IPv6地址在URL上的格式 RFC2733 RTP有效载荷格式用于普通正向错误更正 RFC2736 RTP有效载荷格式说明书作者的指导方针 RFC2754 RPS IANA的发布 RFC2756 超文本缓存协议(HTCP/0.0) RFC2764 IP VPN的框架体系 RFC2773 使用KEA和SKIPJACK加密 RFC2774 HTTP 扩展框架 RFC2781 UTF-16,ISO 10646的一种编码 RFC2784 通用路由封装(GRE) RFC2788 网络服务监视MIB RFC2793 用于文本交谈的RTP负载 RFC2796 BGP路由映象 RFC2809 通过RADIUS的L2TP强制通道的执行 RFC2810 Internet 延迟交谈:体系结构 RFC2811 Internet延迟交谈:通道管理 RFC2813 Internet 延迟交谈:服务器协议 RFC2817 在HTTP/1.1中升级到TLS RFC2818 TLS之上的HTTP RFC2824 呼叫过程语言框架和要求 RFC2825 复杂网络:I18N的发布,域名,和其它Internet协议 RFC2829 LDAP的身份验证方法 RFC2830 轻量级目录访问协议(v3): 传输层安全扩展 RFC2833 用于DTMF数字信号、电话音和电话信号的RTP负载格式 RFC2854 text/html 媒体类型 RFC2855 IEEE 1394的DHCP RFC2861 TCP 拥塞窗口检验 RFC2862 用于实时指针的RTP负载格式 RFC2866 RADIUS(远程用户拨号认证系统)记帐协议 RFC2867 RADIUS 账目管理修改用于通道协议支持 RFC2868 RADIUS 属性用于协议支持 RFC2869 RADIUS 扩展 RFC2871 一个IP电话路由框架 RFC2873 在Ipv4优先域中的TCP过程 RFC2874 支持IPv6地址集合和重编号的DNS 扩展 RFC2882 网络访问服务要求: 扩展范围实践 RFC2887 可靠的多点传送设计空间用于大的数据传送 RFC2889 基准方法论用于局域网交换设备 RFC2890 GRE中Key和SequenceNumber扩展 RFC2893 IPv6 主机和软件路由器转换机制 RFC2898 PKCS #5: 基于密码的密码系统说明书 版本 2.0. B RFC2906 AAA 授权要求 RFC2914 拥塞控制原理 RFC2917 核心 MPLS IP VPN 体系结构 RFC2918 BGP-4(边界网关协议)的路由刷新功能 RFC2920 SMTP 针对命令流水线的服务扩展 RFC2923 TCP的路径MTU发现问题 RFC2932 IPv4 多点传送路由管理系统库(MIB) RFC2935 Internet开放贸易协议(IOTP)HTTP 补充 RFC2945 SRP身份验证和键交换系统 RFC2946 Telnet 数据加密选项 RFC2959 实时传输协议管理信息库 RFC2964 超文本传输协议(HTTP)状态管理的应用 RFC2971 Internet信息访问协议(IMAP4)的标识符扩展 RFC2976 SIP信息方法 RFC2983 有区别的协议和通道 RFC2987 字符集注册和语言媒体特征标签 RFC2988 计算TCP重传时间的定时器 RFC2991 多路径分发在Unicast上和多点传送下一路程段选择 RFC2992 等值多-路径算法的分析 RFC2994 MISTY1加密算法的描述 RFC3001 对象标识符的URN名称空间 RFC3003 audio/mpeg 媒体类型 RFC3005 IETF 讨论列表许可证 RFC3007 安全的域名系统动态更新 RFC3009 奇偶向前纠错 MIME类型的注册 RFC3014 提示日志 管理系统库(MIB) RFC3016 用于MPEG-4视听流的RTP负载格式 RFC3018 统一内存空间协议说明书 RFC3019 IP 版本 6 管理信息基础用于多点传送听众探索协议 RFC3021 在Ipv4点对点连接中使用31位前缀 RFC3022 传统IP网络地址转换(传统NAT) RFC3028 滤网:一种邮件过滤语言 RFC3029 Internet X.509 公共键下部构造数据有效性和认证服务协议 RFC3032 MPLS标记栈编码 RFC3033 信息域和协议标识符在Q.2941普通标识符和Q.2957用户对用户发送信号中的分配用于Internet 协议 RFC3034 标签转换在帧中继网络说明书中的使用 RFC3035 MPLS使用LD和ATM VC交换 RFC3037 LDP 的适用性 RFC3038 VCID提示通过ATM链接用于LDP RFC3040 Internet网复制和缓存分类法 RFC3042 使用有限传输增强TCP的丢失恢复能力 RFC3043 Network Solutions的个人网络名(PIN): 一种个人和组织的统一资源名域 RFC3044 在ISSN-URN命名空间中用ISSN作为URN RFC3046 DHCP 中继代理信息选项 RFC3048 可靠的多点传输建立阻止一对多大数据传送 RFC3051 IP有效载荷压缩使用ITU-T V.44打包方法 RFC3055 PINT服务体系结构管理信息基础. RFC3058 IDEA加密算法在CMS上的使用 RFC3059 服务定位协议的属性列表扩展 RFC3061 对象标识符的一种URN姓名空间 RFC3062 LDAP口令修改扩展操作 RFC3066 语言鉴定标签 RFC3067 TERENA'S事件对象描述和转换格式要求 RFC3069 VLAN聚合实现IP地址有效分配 RFC3070 基于帧中继的第二层隧道协议 RFC3072 结构化的数据改变格式 (SDXF) RFC3074 DHC加载平衡算法 RFC3078 微软点对点加密(MPPE)协议 RFC3081 将区块扩展交换协议(BEEP)核心映射到传输控制协议(TCP) RFC3082 服务定位协议(SLP)的预研报告 RFC3083 基线私人界面管理信息基础(MIB)用于兼容Cable Modems和Cable Modem终端系统的DOCSIS RFC3085 新闻型标记语言(NewsML)资源的URN名字空间 RFC3090 域名系统在区域状况下的安全扩展声明 RFC3091 改进数字产生协议 RFC3093_防火墙增进协议 (FEP)
3.17MB
rfc中文文档目录,包含部分翻译
2009-07-22RFC文档目录 RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 RFC4 网络时间表 RFC6 与 Bob Kahn 会话 RFC10 文档规范 RFC13 零文本长度的EOF信息 RFC16 M.I.T RFC18 IMP-IMP和主机-主机控制联接 RFC19_可用来降低有限交换节点阻塞的两条协议性的建议 RFC20_用于网络交换的 ASCII 格式 RFC21 网络会议 RFC22 主机-主机控制信息格式 RFC23_多重传送的调节信息 RFC24 文档规范 RFC25 不使用高的连接号 RFC27 文档规范 RFC28 时间标准 RFC29 响应 RFC 28 RFC30 文档规范 RFC32 关于SRI所提议的实时时钟的一些想法 RFC34 关于ARC时钟的一些初步记录摘要 RFC35 网络会议 RFC36 协议注解 RFC37 网络会议结尾等 RFC38 NWG/RFC #36 网络协议的注解 RFC40 关于未来协议的更多注解 RFC41 IMP-IMP 通讯信息 RFC42 信息数据类型 RFC43 被提议的会议 RFC45 关于未来协议的更多注解 RFC53 官方协议机构 RFC58 逻辑信息同步 RFC60 简单的 NCP 协议 RFC63 迟来的网络会议报告 RFC66 NIC - 第三级别的想法和其它噪音 RFC69 提议改变 主机/IMP 规范来消除标记 RFC71 输入错误后的再分配 RFC72 建议改变网络协议延期执行 RFC73 响应 NWG/RFC 67 RFC75 网络会议 RFC78 NCP状态报告:UCSB/RAND RFC79 圆木协议错误 RFC81 涉及信息的请求 RFC84 NWG/RFC的1-80列表 RFC85 网络工作组会议 RFC90 CCN 作为一种网络服务中心 RFC99 网络会议 RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC106 用户/服务器 站点协议的网络主机问卷 RFC107 主机-主机 协议故障清除委员会的说明 RFC108 1971年2月17-19日在 Urbana 举行的 NWG 会议的人员列表 RFC124 在 RFC 107 中有印刷错误 RFC132 RFC 107 的排版错误 RFC148 RFC 123 的注释 RFC149 最好的铺设计划 RFC154 风格显示 RFC156 伊利诺斯州站点的状态: 响应 RFC 116 RFC179 连接的数字分配 RFC185 NIC 分发手册 RFC188 数据管理会议公告 RFC198 站点证明-林肯实验室 360/67 RFC204_利用报路 RFC218 改变 IMP 状态报告设备 RFC228 澄清 RFC232 网络图形会议延缓 RFC245 预定网络工作组会议 RFC246 网络图形会议 RFC256 IMPSYS 变更通知 RFC276 NIC过程 RFC285 网络图形 RFC324 RJE 协议会议 RFC335 新界面 - IMP/360 RFC348_放弃过程 RFC404 文件迁移协议的注释 RFC405 给 TIP 用户的第二封信 RFC456 UCSB 的数据重置服务 RFC457_FTP 的服务器与服务器交互 RFC496 IMP/TIP 内存更新时间表(修订版 2) RFC516 丢失消息的检测 RFC591 在 NVT ASCII UCSB和在线系统之间的实验输入映象 RFC621 “注意圣诞节的时候要把长袜挂在烟囱下面” RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697_FTP的CWD命令 RFC698_Telnet扩展ASCII选项 RFC763 角色邮箱 RFC775_面向目录的 FTP 命令 RFC779_Telnet发送-位置选项 RFC792_Internet 控制信息协议 RFC797 位图文件格式 RFC821_简单邮件传输协议 RFC826_以太网地址转换协议或转换网络协议地址 RFC827_Exterior 网关 协议 (EGP) RFC854_Telnet协议说明书 RF
12.0MB
网页与Web程序设计 课件 ppt 机械工业出版社 part1
2010-11-28本书全面讲授网页设计与制作技术、JavaScript脚本编程和Web数据库应用技术。本书以目前最流行的网页设计三剑客Dreamweaver 8、Fireworks 8和Flash 8作为支撑平台,由浅入深,系统地介绍了网页的构思、规划、制作和网站建设的全过程。本书还着重讲解了如何使用JavaScript进行客户端编程和如何开发Web数据库应用。 本书可作为高等院校“网页设计与开发”类课程教材,也可作为网站制作、Web程序设计培训教材,还可作为网页设计与Web编程爱好者的自学参考书。 本书特点 ●构思清晰,结构合理。 ●内容全面系统,语言简洁生动。 ●图文并茂,实例新颖。 ●注重实践能力的培养,实用性和可操作性强。 ●本书为教师配有电子教案和综合模拟试卷,请登录华章网站(www.hzbook.com)免费下载或通过Email(wu@whu.edu.cn)与作者联系。 无 随着计算机网络的普及,网络应用日趋丰富,人们利用Internet足不出户就可以获取所需要的信息,实现购物、炒股、娱乐和在线学习等。Web网站是Internet的重要组成部分,对于公司和企业来说,可以利用网站来展示企业形象,宣传企业,推荐产品并进行电子商务活动,从而利用Internet带来无限商机;对于个人,可以按照爱好和兴趣建立一个具有独特风格的网站,通过它来展示自我,共享资源;对于政府机关,可以利用网站宣传政策法规和进行网络办公,实现电子政务。因此,网页设计和制作技术越来越受到重视。 目前,许多高等院校都开设了网页设计与网站开发相关课程,这一课程已成为信息管理、电子商务和计算机网络等专业的必修课,同时也深受其他专业学生的喜爱,成为选修率很高的一门课程。本书是一本全面介绍网页设计与制作技术,以及JavaScript脚本编程和Web数据库应用技术的教程。它以目前最流行的网页设计三剑客Dreamweaver 8、Fireworks 8、Flash 8作为技术支持,由浅入深,系统地介绍了网页的构思、规划、制作和网站建设的全过程。本书着重讲解了如何使用JavaScript进行客户端编程,如何开发Web数据库应用。 本书分为三个部分:第一部分为基础篇(第1~2章),介绍Internet和WWW的基本知识、网站建设概论以及制作网页的基本语言HTML;第二部分为应用篇(第3~11章),详细介绍如何利用Dreamweaver 8设计制作网页,JavaScript脚本编程,Web数据库应用,以及网站发布和维护方面的知识;第三部分为图形动画篇(第12~15章),介绍目前最常用的网页制作辅助工具Fireworks 8和Flash 8,并给出一些制作实例。 网页设计是一门实践性很强的课程,实践是学好本课程的重要环节。为此我们编写了与其配套的实验教程,供读者学习时参考。 本书由吴黎兵、熊建强、杨鏖丞拟订大纲和主编,并负责全书的统稿。各章节的具体编写分工是:第1、2章由熊建强编写,第3、4章由宋麟编写,第5、8章由黄磊编写,第6、11章由周畅和汤建琴编写,第7、10章由杨鏖丞编写,第9、12、13章由吴黎兵和熊卿编写,第14、15章由余艳霞编写。本书编写过程中得到了各级领导和机械工业出版社华章分社的大力支持,在此表示衷心的感谢。 限于作者水平,书中难免有不足与疏漏之处,敬请专家、同行及广大读者批评指正! 为便于老师教学,我们将为选用本教材的任课老师免费提供电子教案。需要者请登录华章网站(http://www.hzbook.com)免费下载,或通过电子邮件与我们联系(wufox@126.com)。 作 者 2007年1月 于武汉大学珞珈山 前言 第1章 WWW技术简介 1 1.1 WWW的特点和结构 1 1.2 Web服务器的配置 3 1.3 创建虚拟目录 7 1.4 网页浏览器IE 6.0的配置 10 本章小结 12 思考题 12 第2章 HTML基础 13 2.1 网页与HTML概述 13 2.2 文档结构标记和格式标记 14 2.3 文本标记和链接标记 16 2.4 图像标记和多媒体标记 19 2.5 表格标记和表单标记 20 2.6 其他常用标记 24 本章小结 25 思考题 25 第3章 Dreamweaver 8概述 26 3.1 网页中的基本元素 26 3.1.1 文本 26 3.1.2 图像 27 3.1.3 多媒体 27 3.1.4 超级链接 28 3.1.5 表单 28 3.1.6 导航栏 28 3.1.7 其他常见元素 28 3.2 Dreamweaver 8的界面元素介绍 29 3.2.1 工作区布局 29 3.2.2 起始页 29 3.2.3 窗口布局 30 3.3 获取帮助 37 3.3.1 帮助文档 37 3.3.2 “参考”面板 38 3.4 创建本地站点 38 3.4.1 规划站点结构 39 3.4.2 引例 39 本章小结 41 思考题 41 第4章 制作简单网页 42 4.1 文本及排版 42 4.1.1 插入文本 42 4.1.2 引例 43 4.1.3 格式化文本 43 4.1.4 创建项目列表 45 4.2 设置文件头和网页属性 47 4.2.1 设置网页的编码 47 4.2.2 设定文档标题 48 4.2.3 添加关键字 48 4.2.4 设置网页的刷新 49 4.2.5 插入meta对象 50 4.3 插入表格 50 4.3.1 引例 50 4.3.2 制作表格 51 4.3.3 编辑表格 52 4.3.4 表格属性面板的使用 56 4.4 插入多媒体对象 58 4.4.1 使用图像 58 4.4.2 插入Flash对象 63 4.4.3 插入视频对象 68 4.4.4 插入音频对象 71 4.5 插入Java Applet 72 4.6 创建超级链接 73 4.6.1 地址和链接 73 4.6.2 添加链接 74 4.6.3 书签链接和热点链接 76 本章小结 77 思考题 78 第5章 网页布局和框架 79 5.1 布局模式 79 5.1.1 引例 79 5.1.2 关于“布局”模式 80 5.2 绘制布局表格和布局单元格 80 5.2.1 绘制布局表格 80 5.2.2 绘制布局单元格 81 5.2.3 绘制嵌套布局表格 82 5.3 使用标尺与网格 82 5.3.1 使用标尺 82 5.3.2 使用网格 82 5.4 调整布局表格及布局单元格 83 5.4.1 选择布局表格和布局单元格 83 5.4.2 调整布局表格和布局单元格的大小 83 5.4.3 移动嵌套布局表格和布局单元格 84 5.4.4 设置布局表格和布局单元格的属性 84 5.4.5 设置列宽度 85 5.5 设置布局模式的首选参数 87 5.6 框架的使用 88 5.6.1 关于框架和框架集 88 5.6.2 创建框架和框架集 89 5.6.3 选择框架和框架集 93 5.6.4 保存框架和框架集文件 94 5.6.5 设置框架和框架集属性 95 5.6.6 为框架设置链接 97 5.6.7 处理不能显示框架的浏览器 98 本章小结 99 思考题 99 第6章 使用CSS样式 100 6.1 CSS样式的基本使用方法 100 6.1.1 在网页中加入CSS样式 100 6.1.2 “CSS样式”面板 101 6.1.3 CSS样式的创建和应用 102 6.2 设置CSS样式属性 105 6.2.1 设置类型属性 105 6.2.2 设置背景属性 106 6.2.3 设置区块属性 107 6.2.4 设置方框属性 108 6.2.5 设置边框属性 108 6.2.6 设置列表属性 109 6.2.7 设置定位属性 110 6.2.8 设置扩展属性 111 6.3 CSS滤镜 111 6.4 CSS样式应用实例 115 6.4.1 美化文本框与按钮 115 6.4.2 打造多彩文字链接 116 6.4.3 用CSS控制网页整体风格 117 本章小结 118 思考题 118 第7章 JavaScript 119 7.1 JavaScript概述 119 7.1.1 引例 119 7.1.2 JavaScript的特点 120 7.1.3 JavaScript与Java的区别 121 7.2 JavaScript的词法规则 122 7.2.1 大小写敏感性 122 7.2.2 语句结束符 122 7.2.3 注释 123 7.2.4 标识符 123 7.2.5 保留字 123 7.3 JavaScript的基本数据类型 124 7.3.1 数值型 124 7.3.2 字符串型 124 7.3.3 布尔型 125 7.3.4 变量 125 7.4 JavaScript的表达式和运算符 126 7.4.1 表达式 126 7.4.2 运算符 126 7.5 JavaScript基本语句 127 7.5.1 引例 127 7.5.2 表达式语句和复合语句 128 7.5.3 条件语句 128 7.5.4 循环语句 130 7.5.5 标签语句 132 7.6 JavaScript函数 133 7.6.1 引例 133 7.6.2 函数的定义和调用 133 7.6.3 函数的参数传递和返回值 134 7.6.4 函数的变量作用范围 135 7.7 JavaScript对象和数组 135 7.7.1 对象 135 7.7.2 数组 144 7.7.3 文档对象模型 147 本章小结 151 思考题 152 第8章 表单 153 8.1 插入表单 153 8.1.1 引例 153 8.1.2 插入表单方法 153 8.2 插入表单对象 154 8.2.1 添加按钮 155 8.2.2 添加文本域 155 8.2.3 添加复选框 157 8.2.4 添加单选按钮 157 8.2.5 添加列表/菜单 159 8.2.6 添加文件域 161 8.2.7 添加图像域 161 8.2.8 添加隐藏域 163 8.2.9 添加跳转菜单 164 8.2.10 添加搜索引擎 165 本章小结 168 思考题 168 第9章 层与行为 169 9.1 层的创建与基本操作 169 9.2 层的属性设置 171 9.2.1 选择层 171 9.2.2 层属性面板的使用 172 9.3 层的其他操作 173 9.3.1 吸附层到网格 173 9.3.2 层和表格的转换 174 9.3.3 嵌套层 175 9.3.4 在层中插入内容 175 9.4 时间轴概述 176 9.5 使用时间轴创建动画 177 9.5.1 使用关键帧创建动画 177 9.5.2 通过拖动路径创建动画 179 9.5.3 时间轴的其他操作 180 9.6 Dreamweaver中的行为 181 9.6.1 行为概述 182 9.6.2 添加行为 183 9.6.3 更改行为 183 9.6.4 打开浏览器窗口 184 9.6.5 显示-隐藏层 185 9.6.6 设置状态栏文本 186 9.6.7 交换图像 187 9.6.8 拖动层 187 本章小结 189 思考题 189 第10章 Web数据库应用 190 10.1 关于Web应用程序 190 10.1.1 静态网页的处理过程 190 10.1.2 动态网页的处理过程 190 10.1.3 Web数据库访问 191 10.2 数据库基础 192 10.2.1 数据库、数据库管理系统和数据库 系统 192 10.2.2 记录与字段 192 10.2.3 记录集 192 10.2.4 数据库的设计流程 193 10.2.5 数据库连接 193 10.2.6 结构化查询语言 194 10.3 设置Web数据库应用 194 10.3.1 设置Web服务器 194 10.3.2 设置应用程序服务器 194 10.3.3 连接数据库 195 10.4 定义数据源 198 10.4.1 引例 198 10.4.2 定义记录集 198 10.4.3 定义命令对象 201 10.4.4 定义服务器变量 202 10.5 添加动态内容 204 10.5.1 引例 204 10.5.2 动态文本 204 10.5.3 动态图像 205 10.5.4 动态HTML属性 207 10.6 添加服务器行为 207 10.6.1 引例 207 10.6.2 重复区域 208 10.6.3 记录集分页 208 10.6.4 显示区域 210 10.6.5 记录计数器 211 10.6.6 转到详细页面 212 10.6.7 转到相关页面 214 本章小结 215 思考题 215 第11章 站点管理 216 11.1 站点和文件夹 216 11.1.1 关于Dreamweaver站点 216 11.1.2 本地和远程文件夹的结构 216 11.1.3 设置新的Dreamweaver站点 217 11.2 远程文件夹 221 11.2.1 定义远程文件夹 221 11.2.2 解决远程文件夹设置问题 223 11.3 上传与获取文件 224 11.3.1 从本地站点上传文件到远程 站点 224 11.3.2 从远程站点获取文件到本地 站点 225 11.4 遮盖文件夹和文件类型 225 11.5 存回和取出远程站点中的文件 227 11.6 站点报告 229 11.6.1 运行报告 230 11.6.2 使用和保存报告 231 11.7 创建站点地图 231 11.8 站点测试、管理和发布 234 11.8.1 站点测试 234 11.8.2 站点管理和发布 234 本章小结 235 思考题 235 第12章 Fireworks 8入门 236 12.1 Fireworks 8概述 236 12.2 Fireworks工作环境 239 12.2.1 “工具”面板 239 12.2.2 “属性”检查器 239 12.2.3 各类面板 240 12.3 Fireworks文档操作 241 12.3.1 创建新文档 241 12.3.2 打开和导入文件 242 12.3.3 保存Fireworks文档 242 12.4 更改画布 243 12.4.1 更改画布大小、颜色和图像 大小 243 12.4.2 关于重新取样 244 12.4.3 旋转画布、修剪或符合画布 244 12.4.4 修剪文档 245 12.4.5 使用标尺、辅助线和网格 245 12.5 首选参数和快捷键 246 12.5.1 设置首选参数 246 12.5.2 更改快捷键设置 248 12.6 操作的撤消与重复 249 本章小结 250 思考题 250 第13章 Fireworks 8制作实例 251 13.1 制作环绕文字 251 13.2 文字蒙盖图像 252 13.3 制作网页按钮 254 13.4 绘制QQ企鹅卡通效果 255 13.5 制作弹出菜单 256 13.6 网页切片 258 13.7 制作动画 261 本章小结 263 思考题 263 第14章 Flash 8概述 264 14.1 Flash 8的工作环境简介 264 14.1.1 初识Flash 8 264 14.1.2 文档选项卡 265 14.1.3 时间轴 265 14.1.4 工具箱 266 14.1.5 舞台 267 14.1.6 工作区 268 14.1.7 网格 268 14.1.8 标尺 269 14.1.9 常用面板 269 14.2 基本绘图工具 273 14.2.1 选择工具 273 14.2.2 部分选取工具 274 14.2.3 直线工具 274 14.2.4 套索工具 275 14.2.5 钢笔工具 276 14.2.6 椭圆工具与矩形工具 277 14.2.7 铅笔工具 277 14.2.8 刷子工具 278 14.2.9 任意变形工具 278 14.2.10 填充变形工具 279 14.2.11 墨水瓶工具与颜料桶工具 280 14.2.12 滴管工具 280 14.2.13 橡皮擦工具 281 14.2.14 文本工具 281 本章小结 282 思考题 283 第15章 基本动画制作 284 15.1 逐帧动画 284 15.1.1 创建逐帧动画的几种方法 284 15.1.2 制作过程 284 15.2 形状补间动画 287 15.2.1 创建形状补间动画的方法 287 15.2.2 制作过程 287 15.3 动作补间动画 288 15.3.1 创建动作补间动画的方法 288 15.3.2 动作补间动画的属性面板 289 15.3.3 制作过程 289 15.4 遮罩动画 291 15.4.1 遮罩和遮罩的创建 291 15.4.2 应用遮罩时的技巧 291 15.4.3 制作过程 292 15.5 引导路径动画 293 15.5.1 创建引导路径动画的方法 293 15.5.2 应用引导路径动画的技巧 294 15.5.3 制作过程 294 15.6 动画实例 296 15.6.1 飞翔的文字 296 15.6.2 溪流效果 298 本章小结 300 思考题 300 参考文献 301
95KB
工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究
2017-02-28工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究 研究生姓名: 唐帅 导师姓名: 罗军舟 教授 苏生 教授 申请学位类别 工 程 硕 士 学位授予单位 东 南 大 学 工程领域名称 软 件 工 程 论文答辩日期 研究方向 Android+HTML5 学位授予日期 答辩委员会主席 评阅人 硕士学位论文 基于Android+HTML5的移动Web项目 高效开发探究 专业名称: 软件工程 研究生姓名: 唐帅 导师姓名: 罗军舟 校外导师: 苏生 THE RESEARCH OF EFFICIENT DEVELOPMENT OF MOBILE WEB PROJECTS BASED ON ANDROID AND HTML5 A Thesis Submitted to SoutheastUniversity For the Academic Degree of Master of Engineering BY Tang Shuai Supervised by Luo Junzhou and Su Sheng College of Software Engineering SoutheastUniversity February 2017 东南大学学位论文 独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 研究生签名: 日期: 东南大学学位论文使用 授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文和在技术保护期限内的论文外,允许论文被查阅和借阅,可以公布(包括以电子信息形式刊登)论文的全部内容或中、英文摘要等部分内容。论文的公布(包括以电子信息形式刊登)授权东南大学研究生院办理。 研究生签名: 导师签名: 日期: 摘要 目前工业市场上认证检测领域,业务流程陈旧繁琐,用户与检测机构无法便捷有效的沟通。除此之外,用户需要亲临检测机构实地送检,在检测的每一个环节用户也无法有效的进行追踪,这些都制约着认证检测领域的进一步发展。鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作。 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,因此仍存在着诸多问题亟需解决,包括:(1)多窗口类浏览器模式问题。安卓上用于加载的Webview视图窗口只是作为类浏览器而存在,在安卓上更是只能同时运行一个Webview。(2)跨域数据交互问题。不同的Webview之间无法共享数据。(3)页面自适应问题。页面难以兼容适应不同分辨率的设备和浏览器。 本文研究并设计了基于Android+HTML5的在线认证检测系统,主要工作包括以下四个方面: (1)针对多窗口类浏览器模式问题,指出并分析了该问题存在的原因,利用Activity的运行机制,通过Fragment栈对主要模块的Webview进行管理,实现对不同模块之间切换的控制。 (2)针对跨域数据交互问题,指出并分析了跨域缓存交互问题出现的原因,通过在HTML5存储技术的基础上,重写LocalStorage,用移动端本地的Sqlite进行数据维护,实现跨域数据交互。 (3)针对页面自适应问题,本文结合渐进增强以及拥抱流式布局的思想,同时研究利用了移动设备的视口特性,实现跨分辨率、跨设备的页面自适应。 (4)针对系统的功能实现问题,通过结合利用原生态框架与HTML5的跨平台性,实现了“认我测”在线认证检测系统。 综上所述,“认我测”在线认证检测系统,率先填补了认证检测领域移动端的空缺,提供了Web浏览器+移动端的双端访问模式,给用户提供了多种访问途径,真正实现了用户和检测机构的随时随地在线下单检测。 关键词:HTML5,检测与认证,Android,多窗口浏览器模式,跨域处理,页面自适应 Abstract At present business processes are old and explicit in industrial market of certification and detection filed, as well as users can not have effective and convenient communication with detection institutions. Apart from these, customers have to come to detection institutions personally to send samples, and they can not take effective trace of each process during detection. All of these limit the advanced development of certification and detection field. As the versions, types and resolution of users' mobile phones vary in current market, conditional ways depending on systems respectively cost extra time and resources. In order to develop efficiently and save cost of projects, this paper combines android with HTML5 to design and start the development of mobile web system. However, due to standard specification of W3C of HTML5 hasn't been drafted, and browser-alike webview in android has several limits itself, there are still many problems to be solved. Including: (1) Multi-window browser pattern. Webview window in android used to load pages just works like browser, as well as there is only one webview running at the same time. (2)Cross-domain data interaction. Different webviews can not share data. (3)Self-adaption of pages. It is difficult for pages to adapt to devices and browsers of different resolution. This paper researched and designed an online certification and detecting system based on Android and HTML5. Four main parts are included as following: (1) Considering multi-window browser problem, this paper pointed out and analysed reasons of it. The running mechanism of Activity was used cleverly and webiews of main modules were managed through Fragment stacks, in order to control the switch among different modules. (2)Considering cross-domain data interaction problem, reasons of it were pointed out and analysed. LocalStorage was overrided based on HTML5 storage technics, and local sqlite was used to maintain data in order to realize cross-domain data interaction. (3)Considering self-adaption of pages, the system combined the ideas of progressive enhancement and embracing flow layout, aiming at personalitites of mobile facilities viewports, and realized respective solution. (4)Considering the implementation of system functions, the system took the advanteges of native frameworks as well as HTML5 crossing platforms, and developed "Finding Me Detecting" online certification and detecting system. In summary, "Finding Me Detecting" online certification and detecting system filled up blanks of mobile market in certification and detecting field, provoding double side access pattern, that is to say web browser together with mobile side, offering users various ways to access the system, and really realized the goal of whenever and wherever ordering to detect for users and detecting companies. Keywords: HTML5; Quality Authentication; Android; Multi-window browser; Cross-domain data; Page self-adaption 专业名词清单 专业名词 名词解释 HTML5 万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改 Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的应用十分广泛 Webview WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页 Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决方案之一 LocalStorage 本地永久性存储数据,除非显式将其删除或清空 SessionStorage 存储的数据只在会话期间有效,关闭浏览器则自动删除 Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块。 NativeApp 使用传统原生态Android SDK来实现的应用 WebApp 基于浏览器来实现的一种应用 HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级 一开始就构建站点的完整功能,然后针对浏览器测试和修复。认为应该针对那些最高级、最完善的浏览器来开发网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段 渐进增强 一开始只构建站点的最少特性,然后不断针对各浏览器追加功能。先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。 Viewport 移动设备上的Viewport就是设备的屏幕上能用来显示网页的一块区域,即浏览器上用来显示网页的那部分区域。Viewport不局限于浏览器可视区域的大小,可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小。 媒体查询 CSS媒体查询允许开发者基于浏览网站的设备的特性来应用不同的样式申明,最常用的特性是视口宽度。 GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关研究现状 2 1.2.1 在线认证检测平台开发现状 2 1.2.2 HTML5 3 1.2.3 Android 3 1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法 7 1.3.3页面自适应机制,即设备自适应与浏览器自适应机制 8 1.3.4 “认我测”质检服务平台的设计和实现 8 1.4 本文的结构安排 8 第二章 多窗口类浏览器设计 11 2.1 多窗口类浏览器需求分析 11 2.1.1 Activity简介 11 2.1.2 Fragment简介 11 2.1.3 多窗口类浏览器需求 12 2.2 多窗口浏览器模式的实现机制 12 2.2.1安卓移动端多窗口浏览器框架 12 2.1.2多窗口浏览器模式实现机制 13 2.3 模块实现 13 2.3.1类浏览器模式 13 2.3.2多窗口类浏览器模式 14 2.4 本章小结 15 第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18 3.2.2页面回退管理 18 3.3 模块实现 19 3.3.1跨域缓存机制的主要实现 19 3.3.2.页面回退管理的实现 22 3.4本章小结 22 第四章 页面自适应机制设计 23 4.1页面兼容策略 23 4.2 页面自适应策略 24 4.2.1设备自适应 24 4.2.2.浏览器自适应 25 4.3 模块实现 25 4.3.1根据适口属性设计响应式布局: 26 4.3.2同分辨率范围内的流式布局设计 26 4.3.3移动端viewport属性设定 27 4.3.4组件样式的渐进增强设计 27 4.4 本章小结 27 第五章 认我测在线检测服务系统设计 29 5.1认我测在线检测服务系统需求分析 29 5.2 系统时序流程 29 5.3 系统功能模块图 30 5.4 本章小结 32 第六章 认我测在线检测服务系统实现与测试 33 6.1认我测在线检测服务框架设计 33 6.2 系统运行环境搭建及配置 34 6.2.1 AndroidManifest.xml主程序环境配置 34 6.2.2 移动端工程资源布局 35 6.3 认我测在线认证检测系统的主要功能实现 36 6.3.1用户查询 36 6.3.2订单操作 37 6.3.3个人信息维护 37 6.4.系统功能测试 38 6.4.1 首页功能模块 38 6.4.2 订单功能模块 38 6.4.3 个人信息模块 39 6.4.4页面自适应 40 6.5 本章小结 41 第七章 总结与展望 43 7.1 工作总结 43 7.2 研究展望 44 致谢 47 参考文献 49 第一章 绪论 1.1 研究背景与意义 目前市场业务中在产品以及其他项目的认证和检测方面存在诸多不便,用户需要实地考察并频繁与检测单位沟通,填写繁琐的纸质检测报告、当面送递样品,对于检测环节中存在的问题难以及时交互并处理。市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业用户需要实地地并频繁地与检测机构沟通,从而提出自己的委托乃至下委托单、等待检测报告等,设计并研发了市场上首款提供质检服务的移动端app,即“认我测”质检服务平台系统,用户只需在手机上安装轻盈小巧的系统app,即可方便快捷的进行委托服务,质检机构亦可便捷地处理请求订单,双方都可以实时追踪委托订单的状态变化。 考虑到目前市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统(如android、ios)分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本、提高项目开发效率,并迎合近年来新兴的HTML5移动页面开发技术,公司采用Android+HTML5相结合的方式进行移动端系统的研发工作。系统的主体一次开发即可在不同设备,包括不同系统、不同型号、不同分辨率设备上运行,免去了大量冗余的开发工作,提高项目的开发效率,降低项目的开发维护成本,为用户提供便捷服务。项目的封装框架只需根据系统的不同稍微改动定制即可,传统的多套系统项目现在只需一次开发,即可适应于不同机型。此外系统还可以通过微信公众号推广链接进行访问,大大的增强了系统的可扩展性和用户操作的便捷性。 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,使得结合安卓与HTML5开发移动web项目仍处在探索研发阶段,还不够成熟和完善,相应的技术支持也比较有限,因此仍存在着诸多问题亟需解决,包括: (1)多窗口浏览器模式问题。安卓用于加载的Webview视图窗口只是作为类浏览器而存在,并不等同于pc浏览器,在安卓上更是只能同时运行一个Webview,每次加载新的页面都只能覆盖掉原先的页面,无法达到网页浏览器的多窗口模式。通过常规的pc浏览器窗口的相应open、close进行新增窗口、关闭窗口等操作,在Webview类浏览器窗口中都无法正常运作,甚至会导致Webview失去响应。为此,需要研究相应的解决方案,用于模拟用户适应的网页多窗口浏览器模式。(2)跨域交互问题,即缓存机制与浏览记录管理问题。不同于网页浏览器,用户的数据可以在不同的窗口之间共享,Webview由于其模块之间无法共享数据的机制为保存用户信息以及共享其他程序数据带来了巨大难题。为此需要区分数据是同模块内部共享还是跨域共享访问,并提供相应的解决方案。Webview通过模拟多窗口浏览器模式运作后,在不断的新开页面以及不同模块之间互相切换,会导致页面回退时历史浏览地址发生覆盖,使得不同模块无法回到相应的上级页面,为此需要有效的对页面的浏览历史进行管理,并提供切实可行的方案。(3)页面自适应问题,即设备自适应与浏览器自适应问题。针对移动设备繁杂的屏幕分辨率,如何让页面进行分辨率自适应,从而发挥相对于原生态安卓开发的优势,是一个需要探索和解决的问题。考虑到高效开发设计以及便于推广应用,HTML5的界面不仅仅需要适应基于Webkit内核的Webview,还要能够方便的应用于PC端的网页,如何让HTML5的网页能够适用不同的浏览器内核,也是一个亟待解决的问题。 为此,如何使得“认我测”质检服务平台中安卓与HTML5的结合开发满足多浏览器模式,并解决跨域之间的数据交互问题,同时提高页面的设备自适应和浏览器自适应能力,成为跨平台移动web项目高效开发所亟待解决的问题。 1.2国内外相关研究现状 1.2.1 在线认证检测平台开发现状 互联网界目前在检测领域存在部分在线检测认证的平台,诸如华强认证、检测通等,可以为用户提供一些简单的检测申请,以及为检测机构提供平台发布相关信息。 图1.1 华强认证检测平台首页 如上图所示,在华强认证平台上用户可以选择认证或者检测服务,针对相应类型进行筛选。根据待检测的种类不同,选择相应的检测机构资质、证书、检测周期等查询结果,根据查询结果选择检测机构进行检测委托。检测机构与平台合作,提供负责的检测服务项目、价格等信息,在平台上开设个人站点,提供数据给平台,用于用户检索。 与时下常见的电商网站类似,此类检测平台都提供检测方设计自己的网站主页以出售检测服务,同时为用户提供检索结果、显示可购买的检测服务,用户可以选择质检服务并加入购物车、下单、查看检测方详情、与卖家(检测方)沟通检测细节等操作,但是这些平台都存在着共同的问题——流程不够清晰明了、检测服务不够个性化、用户操作繁琐等,这些问题给用户和检测机构的使用以及交流带来了很多不便。平台提供的检测项目有限,很多时候用户无法确定自己需要检测的项目所属,也不能有效地与检测方进行沟通。与此同时,认证检测领域对于移动端的涉及基础为零,目前主流移动端市场没有相应的认证检测服务产品,随着移动产品愈发便捷,在移动端研发设计相应的认证检测产品,使得用户可以随时随地进行下单咨询变得愈发重要。 1.2.2 HTML5 为了方便用户的使用,“认我测”认证检测平台的PC端基于B/S架构,其设计和研发离不开浏览器内核支持,同时移动端的Web开发也同样需要HTML5语言的支持。利用HTML5的崭新特性,能够更好地为用户提供服务。 HTML5是用于取代1999年所制定的HTML4.01和XHTML1.0标准的HTML(标准通用标记语言下的一个应用)标准版本;现在仍处于发展阶段,但大部分浏览器已经支持某些HTML5技术。HTML5有两大特点:首先,强化了Web网页的表现性能。其次,追加了本地数据库等Web应用的功能。 HTML5广义上为包括HTML、CSS和JavaScript在内的一套技术组合。减少浏览器对于需要插件的丰富性网络应用服务,如Adobe Flash、Microsoft Silverlight与Oracle JavaFX的需求,并且提供更多能有效增强网络应用的标准集。目前HTML5已向开发人员提供了很多新的标签,如section,nav,article,header和footer等。这些标签语义化程度高,被广泛使用。 HTML5逐渐为移动Web开发所采纳,主要原因在于其适用移动项目开发的八大特性,即离线缓存、音频视频自由嵌入、地理定位、Canvas绘图、丰富的交互方式、低开发维护成本、CSS支持以及调用手机硬件。其中离线缓存可以看做是加强版的cookie,不受数据大小限制,有更好的弹性以及架构,可以将数据写入到本机的ROM中,还可以在关闭浏览器后再次打开时恢复数据,以减少网络流量。音频视频方面HTML5无需拆分开混排的多媒体内容,可以将文字、图片、音频、视频等放在一起进行处理。HTML5提供地理定位的支持,无需专属导航软件,通过缓存即可加载地图数据,方便灵活。在系统开发和维护方面,打开即可使用最新版本,免去重新下载升级包的麻烦,使用过程中就直接更新了离线缓存。除此之外,HTML5增强了对CSS样式的支持,极大的增强了界面的美化和友好性,提高了用户体验。 1.2.3 Android Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。 Android是一个真正意义上的开放性移动设备综合平台。它包括操作系统、用户界面和应用程序-移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 在开发之初,Android平台就被设计成一个由一系列应用所组成的平台。所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于在应用和硬件资源间进行通讯的API。Android打破了应用之间的界限,开发人员可以把Web上的数据与本地的联系人、日历、位置信息结合起来,为用户创造全新的用户体验。此外应用程序不仅可以通过标准API 访问核心移动设备功能、互联网,应用程序还可以声明它们的功能供其他应用程序使用。 考虑到移动端市场主流操作系统的使用情况、移动领域的发展趋势以及Android操作系统的开源性,系统采用Android操作系统为研究对象,在其基础上进行设计和研发,使得认证检测产品能够为主流用户所使用,为用户带来便捷。 1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 Native app是用传统原生态Android SDK来实现的应用;Web app是基于浏览器来实现的一种应用。 Hybrid app是一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行。对用户来说,Hybrid App与Native App很难区别。二者都可以从应用程序商店或市场下载,存放在移动设备上,运行方式完全如同其他任何应用程序。但是对开发者来说,却存在巨大的差异,因为其无需为每一种移动操作系统从头开始重新编写应用程序,而是只要用HTML、CSS和JavaScript编写其中一部分应用程序代码,即可在多个设备上重复使用。 以下是三种技术各自的优缺点。 Native app Web app Hybrid app 系统特性 可以完美发挥系统特性(调用系统服务、内存管理等); 操控设备硬件(如相机、蓝牙、振动器等) 无法充分发挥系统特性(调用系统服务、内存管理等); 无法操控设备硬件(如相机、蓝牙、振动器等) 可以发挥大部分系统特性(调用系统服务、内存管理等); 可以通过JavaScript API操控设备硬件(如相机、蓝牙、振动器等) 用户体验 可提供最佳的用户体验,最优质的用户界面,最华丽的交互; 支持消息推送 用户体验较差; 图片和动画支持性不高; 不支持消息推送 可提供较好的用户体验; 支持消息推送 本地资源 可访问本地资源 不支持访问本地资源 可访问本地资源 应用更新 获得新版本时需重新下载应用更新,不够方便 跨平台开发、用户不需要下载安装App,开发速度快 可以下载新应用更新,也可在线更新 适用场景 适合制作游戏等性能要求比较高的应用 对于对界面的灵活性有较高要求的app 适用于对画面表现特别高以外的主流需求 开发成本 各平台不兼容,多平台的开发、移植比较复杂,开发成本高,开发周期长,开发成本高; 维护多个版本的成本比较高; 针对多种设备(不同分辨率、不同硬件配置等)的调试和适配较麻烦,维护成本高; 纯HTML5快速开发,较低的开发成本; 支持设备广泛,基于浏览器,跨平台性,维护成本低; Native+HTML5 针对不同系统制定系统外壳,页面部分可重用,大大降低开发成本; 可直接在线更新,更新成本低; 跨平台性,无需针对不同平台开发多个版本应用。 网络要求 支持离线使用 非常依赖网络,网络不稳定等其他环境时,用户请求页面的效率大打折扣 大部分功能依赖网络 考虑到系统需要提供较好的用户体验、用户与检测机构能够利用消息推送进行实时沟通、用户的查询和下单操作默认已具备网络环境等因素,因此为了更好地利用移动端本地硬件支持以及实现跨平台、跨设备的开发,系统采取了Hybrid混合开发模式。通过在原生态框架中嵌入Webview类浏览器,主体页面采用HTML5开发,由原生态定制系统框架,这样在更换移动端操作系统时,只需相应更换系统外壳,主体部分可以重复利用,极大地减少了研发成本,提高了系统的可复用性。系统主体部分更新时,无需在应用市场中重新下载,应用HTML5的特性在线更新缓存即可方便地获取最新版本,为用户带来了便捷。 1.2.5国内外应用现状 图1.2 智能手机操作系统分布数据 市场调研公司Kantar Worldpanel ComTech发布的智能手机操作系统数据显示,截至2016年2月末的三个月内,Android中国城市的销售份额从去年同期的73%增至76.4%。而在美国和欧洲五大市场(包括英国、德国、法国、意大利和西班牙),Android的市场占比继续保持增长态势。因此系统选取市场移动端主流操作系统Android作为基础,进行移动端认证检测产品的研发和设计。 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这时使用IOS&Andriod开发一个APP的成本相对过高,而HTML5的低成本、高效率、跨平台等特性马上被利用起来形成了一种新的开发模式:HybridAPP。 作为一种混合开发的模式,Hybrid APP底层依赖于Native提供的容器(UIWebview),上层使用Html&Css&JS做业务开发,底层透明化、上层多多样化,这种场景非常有利于前端介入,非常适合业务快速迭代。Hybdrid作为目前主流的移动端开发设计模式,能够极大的利用Native和HTML5的优势,将性能与用户体验相结合,缩短跨系统的产品研发周期,给用户和研发都带来极大的便利。混合型APP软件兼具“原生型APP软件良好用户交互体验的优势”和“网页型APP软件跨平台开发的优势”。市场上一些主流移动应用都是基于混合型APP软件的方式开发,比如工商银行、百度搜索、街旁、东方航空、微信、去哪儿等。 目前已有众多企业采用混合型APP软件技术开发APP应用,一方面是开发简单,另外一方面可以形成一种开发的标准。企业封装大量的原生型的原生插件如支付功能插件供Java调用,并且可以在今后的项目中尽可能的复用,从而大幅降低开发时间和成本。混合型APP软件的标准化给企业移动应用开发、维护、更新都带来了极高的便捷性。 混合型APP软件通常是基于第三方跨平台移动应用引擎框架进行开发,在国内开发者中比较知名的有PhoneGap、Titanium和AppCan。这些引擎框架一般使用HTML5和Java作为编程语言,调用引擎封装的底层功能如照相机、传感器、通讯录、二维码等。HTML5和Java只是作为一种解析语言,真正调用的都是原生型APP软件一样封装的底层功能,这是和网页型APP软件的最大区别和不同。因为使用了浏览器技术,所以混合型APP软件通常具有跨平台的特性,并且开发成本和网页型APP软件接近,开发效率也远高于原生型APP软件。根据国际科技媒体ReadWriteWeb 2015数据统计显示,截至2015,有80%的App全部或部分基于HTML5研发。大部分的App内容以网页的形式呈现,包括微信、Facebook、Twitter等。为此,Hybrid混合模式成为“认我测”在线检测服务平台移动端框架的开发和设计依赖。 尽管微信通过公众号的形式,使得Android+HTML5模式得以应用并推广,这项技术目前仍不够完善,利用web实现移动app存在一些瓶颈。(1)根据百度移动互联网发展趋势报告,iPhone下载一个1.407k的网页,建立连接耗时1.35s左右,传输耗时0.15s左右。这样,导致app在建立连接的时候,屏幕处于白屏状态。app在一秒多的时间内,完全处于白屏状态,加上3G、GPRS网络的不稳定,有时候等待app响应需要几秒甚至1几秒的时间,对于mobie app来说,这是个致命的缺陷。(2)难以实现本地存储。基于Android存在多版本系统,Android低版本中的Webkit对HTML5和CSS3不能够很好地支持。常用的HTML5向后兼容方案是通过Javascript+CSS+Html来模拟HTML5的一些特性,但过多的js存在于移动app中会得不偿失。 Android+HTML5的混合开发模式对于移动端Web项目开发已经成为市场的主流和趋势,与此同时这项技术还存在着一些问题,需要不断的进行改进和完善。 1.2.6 研究现状总结 总而言之,Android操作系统在移动市场仍居主流,HTML5也为用户带来崭新的特性,Hybrid混合开发模式也逐渐成为移动Web开发的主流设计模式,大量的市场应用都成功的应用和推广了Android+HTML5。正是在这种背景下,“认我测”在线认证检测系统率先填补了移动端认证检测领域的产品空缺,采取了Hybrid混合开发模式。同时,利用Android+HTML5相结合开发移动端Web项目尚处于应用阶段,仍然存在很多问题,还不够成熟和完善。如何将这二者更有效的结合使用,并解决过程中存在的问题,提高项目开发的效率以及节约开发成本,是一个需要研究探索的问题,这也是本课题的意旨。 1.3研究目标与内容 1.3.1多窗口浏览器模式的实现机制 深入挖掘Webview作为类浏览器视图窗口与传统PC端浏览器的区别,针对安卓端同一视图区域单一运行Webview的特性,通过在原生态安卓中启用Fragment视图加载不同视图页面,在外部Activity中对Fragment进行管理控制。同时调整窗口加载及操作模式,适应移动端相关操作从而实现程序中加载多个Webview视图窗口并可以随意切换,实现类浏览器多窗口加载资源并交互的模式。 1.3.2跨域交互即缓存处理方法 针对Webview不支持多窗口间跨域访问的问题,重写缓存处理方式以替代网页端会话级缓存机制,模拟web端本地存储localStorage对本地缓存的处理方法,诸如setItem()、getItem()、removeItem()以及clear(),通过将持久化数据存储在移动端本地数据库来模拟网页端数据持久化存储,实现多Webview间跨域交互访问以及缓存数据保存和处理。 通过维护Webview的历史栈,根据需求进行过滤跳转或者重新加载页面。若当前为重定向后的链接,那么回退的时候就需要忽略上一级的链接,不使用Webview自带的回退方法goBack(),相对地移除重定向和重定向后的url,获取到初始页面链接后自行进行loadUrl()操作. 1.3.3页面自适应机制,即设备自适应与浏览器自适应机制 利用Viewport来控制页面的缩放比例、页面的初始大小,针对不同分辨率的移动设备实现网页页面自适应。通过渐进增强以及优雅降级机制来控制不同版本、不同浏览器之间的兼容问题,以及利用JavaScript库辅助修正相应的样式问题,从而实现浏览器适配的机制。 1.3.4 “认我测”质检服务平台的设计和实现 移动客户端通过安卓与HTML5结合开发设计委托方和质检方app,通过原生态安卓框架外壳嵌入Webview渲染加载页面,添加Java接口与消息会话模块,通过移动端Sqlite操作数据重写localStorage来实现缓存机制,利用Fragment视图层控制Webview的切换与运行来展现主要的功能模块—委托方App:首页模块、订单模块、消息模块和个人模块;质检方App—订单模块、消息模块和个人模块。 服务器端采用J2EE的SSH框架搭建项目,通过微信公共账号链接Html页面,为用户提供多种系统访问途径,增强了系统的可扩展性,为用户带来便利。 1.4 本文的结构安排 本文共分为七个章节。 第一章是绪论部分,介绍课题的研究背景,指出课题的研究意义。然后通过对HTML5研究、Android移动Web开发技术研究以及Hybrid开发问题研究来介绍该课题在国内外的研究现状。最后说明本文的研究目标与内容,以及论文的结构安排。 第二章介绍多窗口类浏览器模式策略的设计与实现。针对现有移动端单一窗口存在的不足,提出类浏览器多窗口解决方案,并对多窗口浏览器模式进行设计 第三章其次分析Webview的跨域数据交互问题,针对移动端类浏览器内核不支持跨域数据访问的不足,提出本地持久性存储替代web端缓存的解决方案,并对跨域访问模式进行设计。同时分析了页面重定向导致的页面无法正常访问问题,提出采用页面浏览历史栈的管理方案,针对回退时目标页面解析进行相应操作。 第四章是多分辨率多设备页面自适应策略设计。首先分析现有Web页面在移动端不同分辨率和设备显示存在的问题,针对页面难以在不同设备上保持兼容适应的不足,提出页面自适应解决方案,并通过渐进增强以及媒体查询等方式进行设计。 第五章是认我测系统的设计,包括系统的功能需求分析、业务流程展示以及功能模块设计。 第六章是系统的功能测试,介绍了相关的实现环境与工具,并对系统的主要功能模块以及主要解决方案进行了功能验证测试。 第七章是总结展望部分,总结本文的主要工作内容与创新点,并对本文写作与实验过程中的不足及后续研究进行展望。 第二章 多窗口类浏览器设计 2.1 多窗口类浏览器需求分析 2.1.1 Activity简介 在Android中一个Activity是一个应用程序组件,它提供一个屏幕,用户可以为了完成某项任务用来交互,例如拍照、拨号、看地图、发送邮件等。每一个Activity被系统给予一个窗口,在该窗口上面可以绘制用户接口。一个应用程序通常由多个Activities组成,他们通常是松耦合关系。通常首次启动应用程序的时候呈现给用户的Activity被指定为"Main Activity”。为了完成不同的动作,每一个Activity可以启动另一个其他的Activity。一个新的Activity启动,前一个Activity就被终止了,但是系统将Activity保存在一个栈上。当一个新Activity启动,它被推送到栈顶,取得用户焦点。栈的管理符合“后进先出”原则,所以,当用户完成当前Activity然后点击back按钮,它被弹出栈并且被摧毁,然后恢复之前的Activity。 若一个Activity因新的Activity启动而停止,系统通过Activity的生命周期回调函数,通知其这种状态转变。一个Activity根据它自己的状态变化可能会收到许多回调函数的通知信息,诸如系统创建、停止、恢复或者摧毁Activity,每个回调都使得开发者得以完成相应状态的指定工作。例如,当停止Activity的时候,应该释放所有大的对象,如网络数据库连接。当Activity恢复时,开发人员可以重新获得必要的资源和恢复被中断的动作。这些状态转换都是Activity的生命周期的组成部分。 2.1.2 Fragment简介 Android 3.0中开始引入Fragments 的概念,可以称为:碎片、片段。其目的是为了解决不同屏幕分辨率下动态和灵活的UI设计,大屏幕如平板、小屏幕如手机。平板电脑的设计使得其有更多的空间来摆放更多的UI组件,而多出来的空间存放UI使得这些组件会产生更多的交互,从而诞生了Fragments。 Fragments 的设计不需要开发者来亲自管理视图层的复杂变化,通过将Activity 的布局分散到Fragment 中,可以在运行时修改Activity 的外观,并且由Activity 管理保存其变化。当一个片段指定了自身的布局时,它能和其他片段配置成不同的组合,在活动中为不同的屏幕尺寸修改布局配置。小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多。Fragment是Activity的界面中的一部分或一种行为。可以把多个Fragments组合到一个Activity中来创建一个多面界面并且可以在多个Activity中重用一个Fragment。除此之外,可以把Fragment认为是模块化的一段Activity,它具有自己的生命周期,接收它自己的事件,并可以在Activity运行时被添加或删除。 Fragment不能独立存在,它必须被嵌入到Activity中,而且Fragment的生命周期受到所在的Activity的影响。当Activity暂停时,它拥有的所有的Fragments都被暂停;当Activity销毁时,它拥有的所有Fragments都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),可以单独地操作每个Fragment,比如添加或删除它们。在执行上述针对Fragment的事务时,可以将事务添加到一个栈中,这个栈被Activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。 2.1.3 多窗口类浏览器需求 在Android中展现在用户面前的Activity同时只能存在一个,而由于类浏览器内核Webkit的特性,一个Activity中同时只能加载一个Webview用以渲染网页,如果用户想模仿Web浏览器新增一个浏览器标签窗口打开新页面,只能将原来的网页覆盖掉,无法在窗口间来回切换,用户也无法保持原有的浏览器使用习惯。为此,需要利用Activity栈的切换特点,将系统的主要模块分别设计在不同的Fragment上,通过各自的Webview进行加载渲染,在用户需要切换窗口时,通过管理切换Fragment达到目的的实现。 2.2 多窗口浏览器模式的实现机制 2.2.1安卓移动端多窗口浏览器框架 图2.1 多窗口浏览器模式系统框架图 如图4所示,系统安卓移动端由首页、订单、消息以及个人信息四个模块构成,每个模块对应一个视图层Fragment,在安卓Activity运行时一次加载一个视图Fragment,通过底部的原生态菜单栏BottomBar进行视图之间的切换。每个视图Fragment对应同一个位置的Webview类浏览器窗口,通过Webview加载所需要的页面,通过外部的Fragment对Webview的加载以及切换进行控制,从而实现类浏览器多窗口模式。 2.1.2多窗口浏览器模式实现机制 多窗口浏览器模式的实现原理为:安卓外部Activity控制视图层Fragment的加载和切换,Fragment内部加载和控制Webview对页面的渲染,同时调整Web端页面的窗口打开和关闭模式,通过页面重定向进行打开和关闭返回。 多窗口浏览器模式解决两个问题,一是安卓中的类浏览器窗口模式,二是浏览器多标签模式。在移动端的页面加载过程中,类浏览器内核Webview的运行机制为覆盖加载页面,一次运行期间只同时存在一个Webview,与PC端浏览器的运行模式不同,无法通过open打开一个新的浏览器标签页,也无法通过close关闭单个的标签页。为此需要通过loadUrl进行页面重定向,在关闭页面时通过loadUrl反重定向或者通过Webview本身的goBack方法进行回退。移动端的Webview在全局意义上等价于PC端的浏览器,但是通过close关闭的不是一个窗口,而是关闭了整个浏览器。安卓中Activity运行时只能加载一个Webview,因此无法同时展现不同的页面,为此需要通过外部对Webview序列的控制,模拟多窗口显示页面的模式。 在安卓Activity的视图View初始化过程中,实例化需要首次显示的视图层fragment (如首页),将其放入实例化的视图层管理容器HashMap,并通过changeFragmentFrom Menu方法控制用户对视图层Fragment的切换,将原有的视图层置为等待恢复状态,并激活新的视图层用以在Activity中展现,通过changeFragmentBack控制用户通过回退操作唤醒的首页视图层,以此来控制不同视图层,即类浏览器窗口之间的切换。在相应的Fragment视图层中,初始化视图InitView时渲染加载Webview,同时控制底部的菜单栏,通过Webview加载相应的本地网页或服务器端网页,设置Webview相应的属性进而控制页面由Webview加载,而非默认的系统浏览器加载。为Webview绑定页面与原生态安卓相交互的接口,从而可以在加载的页面内调用安卓的原生态功能。 2.3 模块实现 2.3.1类浏览器模式 该部分主要为安卓中通过Webview渲染加载网页的过程。主要包含以下过程: Fragment布局文件中声明控件Webview,绑定其资源ID,为Webview设置宽度和高度。 (1)在Fragment视图初始化initView部分,利用findViewById()通过资源ID获取到Webview控件,对其进行初始化,同时设置相关的webSettings属性,让Webview可以运行JavaScript脚本以及能与本机数据库进行交互。 (2)重写WebViewClient的shouldOverrideUrlLoading()函数,让应用程序的Webview直接加载网页内容,而不调用外部的浏览器。 (3)重写Webview网页对话框,构建一个Builder用以显示网页中的对话框,在点击确定按钮之后,继续执行网页中的操作,同时关闭Builder对话框。 (4)为JavaScript创建安卓接口。通过addJavaScriptInterface为Webview绑定底层Java接口,同时提供相应的接口方法名以及在页面中可以调用的句柄名称,通过该句柄和方法名,即可在Html5页面的JavaScript中访问该底层的Java方法,实现对页面上部和底部的系统外壳的展示管理。 (5)通过loadUrl进行对目标页面的渲染加载,可以加载访问服务器端的页面,也可访问放置在项目内部的页面文件,该模式需要将相应页面放置于系统的assets目录下。相对而言服务器端页面更加常用,也便于维护。 2.3.2多窗口类浏览器模式 图2.2 多窗口类浏览器模式原理图 (1)创建各个主功能模块的视图类Fragment,分别为主界面模块HomeFragment、订单模块OrderFragment、聊天咨询模块MessageFragment以及个人中心模块PersonalFragment,继承自基类BaseFragment。 (2)每个Fragment视图类中声明并初始化相应的Webview组件,对其进行属性设置,为其绑定JavaScript接口并覆盖渲染加载页面的方法,绑定相应的需要在页面调用的底层Java方法接口。重写默认的页面回退响应事件,对页面访问历史以及目标访问页面进行过滤判断,执行相应的处理方法。 (3)在MainActivity的初始化initView中声明并初始化Fragment管理容器HashMap<String>,初始化主页视图HomeFragment并将其加入容器,设置其为默认加载视图。获取FragmentManager用以维护管理Fragment队列,调用beginTransaction方法开启事务。 (4)重写回退按钮响应事件。当页面回到各自模块的初始页面然后按下回退键时,判断当前模块所在的Fragment,由主页模块后退时,执行确认退出系统操作,若从其他模块进行后退,则回到主页模块。通过底部菜单栏setRadioChecked方法设定当前模块的选中标识。 (5)重写模块间切换的方法changeFragmentFromMenu,开启事务,对模块标识ftag进行判断操作,根据用户点击的模块图表将相应的模块视图Fragment通过onResume()进行恢复,同时通过show()将该模块进行展示,从Fragment管理容器中将主页模块以外的Fragment移除。将带有oflag暂停标识的Fragment视图进行暂停处理,通过hide隐藏取消该视图的展示。 (6)在各自的Fragment模块视图类中重写onResume方法,用以在模块恢复时进行用户是否登录判断。对Webview渲染加载的页面进行分析,判断是否包含index初始页面标识。根据flag标识进行是否需要登录操作,flag为1表示从其他Fragment跳转到该模块的Fragment视图并需要用户登录。 以上就是多窗口类浏览器模式的实现主要环节,通过Webview加载渲染服务器资源页面,控制碎片视图Fragment展现各自模块的Webview,在MainActivity对碎片容器以及碎片视图之间的切换进行管理控制,从而完成多窗口类浏览器模式的实现。 2.4 本章小结 本章分析并介绍了安卓中Activity的基本性质,对碎片视图Fragment进行了相关阐述和引出,综合分析了多窗口类浏览器模式的设计需求。随后对多窗口类浏览器模式的框架进行了设计,通过Activity运行管理Fragment的加载和切换,各个模块的Fragment视图独自加载运行相应的Webview,补充和完善不同模块之间切换和回退的业务逻辑。在模块实现部分详细描述了两个关键部分的实现环节,即类浏览器模式和多窗口类浏览器模式,介绍了过程中主要用到的方法以及实现思想。 第三章 跨域交互缓存处理设计 3.1 跨域交互缓存处理需求 3.1.1 缓存技术WebStorage 图3.1 WebStorage示意图 WebStorage 使得网站能够把信息存储到本地的计算机上,并在以后需要的时候进行获取。WebStorage和Cookie类似,区别在于WebStorage是为了更大容量存储而进行设计。Cookie的大小是受限的,并且每次当请求一个新的页面的时候,Cookie都会被发送过去。而WebStorage则存储在计算机上,网站在页面加载完毕后可以通过Javascript来获取这些数据。 WebStorage提供两种类型的API:localStorage和sessionStorage,区别在于localStorage是本地永久性存储的数据,除非显式将其删除或清空,否则将一直保存在本地。sessionStorage存储的数据只在会话期间有效,关闭浏览器则自动删除。两个对象都有共同的操作API。 3.1.2 跨域交互缓存处理需求 WebStorage存储技术针对的是同一个类浏览器Webview,系统在各模块之间由不同的Webview加载渲染,通过不同的Fragment进行管理,因此模块之间无法共享数据。然而通过多窗口浏览器模式构建的系统模块之间经常需要进行数据交互,如用户登录信息以及产品相关信息,Webview由于其特性仅支持自身内部的缓存数据交互。同Webview内不断的覆盖加载新页面以及发生页面回退时可以对缓存数据提供便捷高效的数据保存,使得在页面加载的过程中可以便利的处理需要交互的数据;相对的不同的Webview之间无法共享数据,无论是会话级缓存还是持久化缓存。为此需要重写web端的持久化存储localStorage,将交互的数据保存到移动设备本地数据库。 3.1.3 页面回退管理需求 对于初始页面为A,点击某个链接跳转到B(http://xxx.com.cn/),B页面重定向到C页面(http://xxx.com.cn/website/index.Html),当调用webview.goBack()时,页面回退到B,然后接着会重定向回C页面。这样会导致两个问题:无法回退到Webview的初始页面A以及无法正常退出Activity或者Fragment(只有还未加载完C时进行回退才能退出页面)。为此需要引入历史记录栈,对页面访问历史进行管理,在回退事件中判断该加载页面是否需要重定向并执行相应的操作。 3.2 缓存处理机制 3.2.1 跨域缓存处理 在移动端数据库Sqlite操作类LocalStorage中定义相应的数据库连接属性、创建和更新的操作以及数据库操作单例Instance,在视图访问基类BaseFragment中定义覆盖web端持久化存储localStorage的核心交互类LocalStorageJavascriptInterface。获得数据库操作单例,并覆盖localStorage对缓存的常用处理方法取值getItem(),修改值setItem(),删除值removeItem()以及清空缓存clear()。将页面上获得的数据键值对存入数据库,对其进行更新删除以及返回给页面使用。在Webview初始化时进行页面与后台交互绑定addJavaScriptInterface,并在页面初始化init过程中将页面的默认localStorage操作更换成覆盖重写的方法,即可在页面进行跨域访问时交互相应的数据。 跨域交互的缓存处理机制如图5所示: 图3.2 缓存处理机制原理图 3.2.2页面回退管理 安卓的回退按钮一般用于返回上一级菜单,不过在浏览器页面加载过程中却不能理想地返回上一级页面,默认的回退按钮是针对Activity的回退,对于Webview来说,回退按钮会致使浏览器调用finish()而结束自身的运行,因此需要覆盖Activity的onKeyDown()事件,在方法内部重新对浏览页面进行管理。 在页面的新建关闭以及重定向时,Webview的页面回退goBack()会受到干扰,不能正常回到前一个页面,甚至会发生前后两个页面间来回切换后退的死循环,并影响模块间的后退返回。为此需要对历史访问页面进行管理,采用如下实现方案。 在Fragment视图声明时定义一个用于管理保存历史浏览记录的历史栈ArrayList<String>,将系统初始加载界面加入列表。在此后的页面加载过程中,每次加载页面都将其加入历史栈,在系统回退响应事件中,判断页面是否为重定向页面,如果为重定向页面,则移除历史栈中最后两个链接,加载操作后历史栈的最后一项;否则移除历史栈中最后一项,加载操作后历史栈的最后一项。 页面回退方案的流程图如图3.3所示: 图3.3页面回退管理机制图 3.3 模块实现 3.3.1跨域缓存机制的主要实现 图3.4 重写LocalStorage类示意图 (1)重写LocalStorage类。让LocalStorage继承自SQLiteOpenHelper类,声明LocalStorage对象实例以及其他数据库连接配置信息,如数据表名称、表中存储的数据Id与值Value、数据库名称、创建数据库语句等。通过Singleton单例模式维护LocalStorage实例,重写创建数据库和更新的相关操作。 (2)添加LocalStorage的底层JavaScriptInterface,供服务器资源页面进行访问。通过LocalStorageDBHelper对象获取到单例localStorage,声明上下文对象和SQLiteDatabase对象。重写HTML5存储技术LocalStorage的关键缓存数据操作方法getItem()、setItem()、removeItem()以及clear()。 图3.5 重写WebStorage核心方法示意图 1.重写getItem(),根据传入参数key获取相应的value值 ①判断传入的key是否为空。 ②若key不为空,通过localStorageDBHelper的getReadableDatabase()方法实例化数据库对象database。执行sqlite的数据库查询操作,返回数据库结果操作游标。 ③根据游标的moveToFirst判断查询结果是否为空,返回相应的value结果。关闭数据库连接。 2.重写setItem(),根据传入的参数key和相应值value更新数据库 ①判断传入的key和value是否为空,通过getItem()获取更新前的值。 ②实例化数据库对象database。声明ContentValues对象并将key和value相应赋值。判断更新前和key对应的值是否存在,若存在执行数据库的更新操作;若不存在,执行数据库的插入操作。关闭数据库。 3.重写remove() ①判断传入的key是否为空 ②实例化数据库操作对象,执行相应的数据库删除操作,关闭数据库 4.重写clear() 实例化数据库操作对象,执行数据库删除操作,清空整张数据库表。 在Fragment视图中初始化Webview时,通过addJavaScriptInterface为其绑定重写的底层LocalStorage操作接口,并将操作句柄设置为localStorage。设置webSettings属性,通过setDomStorageEnabled与setDatabaseEnabled启用本地存储功能。 在服务器资源页面JavaScript方法中,尝试用句柄LocalStorage替换window默认的localStorage。若发生异常,说明LocalStorage没有被添加至webview。然后即可像通常HTML5的localStorage对缓存数据进行操作。 3.3.2.页面回退管理的实现 (1)在MainActivity中覆盖模块间的回退响应事件。当模块页面回退至各自的初始页面时,点击回退按钮执行相应的模块切换策略,若该模块为主界面模块,则弹出退出系统确认框供用户选择是否退出;若为其他模块则将菜单栏切换到首页模块。 (2)在各自的Fragment中覆盖模块内部的回退响应事件。在页面初始化时定义并维护一个存放历史访问页面的历史栈loadHistoryUrls (ArrayList<String>),把初始页面url加入到历史栈中,在覆盖加载方法shouldOverrideUrlLoading中将待渲染加载的页面加入到历史栈中。 (3)在Fragment内部的回退事件处理方法中,判断是否可以执行返回操作。然后判断历史栈存存放页面的前一页是否包含初始重定向页面,若包含该页面则移除加载栈中的最后两个链接,否则移除加载栈中的最后一个链接。最后加载重定向之前的页面。 3.4本章小结 本章首先分析了HTML5标准下缓存处理策略WebStorage,其包含本地存储LocalStorage与会话存储SessionStorage,并提供了相应的介绍和说明。然后分析了跨域数据交互问题问题存在的原因以及页面回退管理存在的问题。由于Webview的数据封闭性,不同的模块Webview之间无法共享访问数据,使得不同的模块无法正常交互,为此采用重写LocalStorage的方式,通过本地Sqlite数据库操作模拟HTML5中缓存的操作,重写LocalStorage关键的操作方法setItem()、getItem()、removeItem()以及clear(),并为Webview绑定相应的底层Java方法接口,在服务器页面资源中用重写的LocalStorage替换默认的localStorage,从而完成跨域数据的调用访问操作。由于页面的重定向作用,页面回退时会反复加载到重定向后的页面,导致页面无法正常回退,因此通过维护历史栈的方式,在页面回退时对回退目标页面进行分析判断,并执行相应的回退管理方法,从而使得模块内部的页面以及模块之间可以正常地进行返回操作。 第四章 页面自适应机制设计 针对移动设备分辨率和屏幕大小、设备型号迥异的现状,本章将在分析现有页面跨浏览器兼容方案的基础上,同时结合移动端对不同分辨率设备的支持特性,分析与设计跨机型、跨分辨率、跨浏览器的页面自适应机制。 4.1页面兼容策略 为了使页面能够适应不同版本的浏览器内核,诸如IE、Chorme、Firefox等,CSS3引入了两种常用的设计策略,即优雅降级和渐进增强。 优雅降级指的是在页面设计开始即构建页面的完整功能,然后针对不同的浏览器进行测试和修复。该观点认为应该针对那些最高级、最完善的浏览器来开发网站,同时把那些被认为过时或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段。在这种设计思想下,旧版的浏览器通常被认为仅能提供简单却功能没有大碍的页面浏览体验。虽然可以做一些小的调整来适应某个特定的浏览器,但由于这些调整并非开发过程中关注的焦点,因此浏览器间呈现的差异通常将被直接忽略。 渐进增强指的是在页面设计开始只构建页面的最少特性功能,然后不断针对各高级浏览器追加额外功能。渐进增强思想认为应该先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。随着时间的推移,当更多的用户逐渐开始升级浏览器,同时浏览器本身的支持度也不断提升时,就会有越来越多的用户体验到这些增强和改进,无需为了一个已经成型的网站在旧式浏览器下正常工作而做逆向开发。渐进增强观点认为网页的开发应关注于内容本身。这使得渐进增强成为目前一种更为合理的设计范例。 图4.1 优雅降级和渐进增强图例 对于优雅降级,功能衰减的设计从复杂的功能现状开始,不断减少用户体验的供给;而渐进增强则的设计是从一个非常基础的,能够发挥作用的版本开始,并不断地进行扩充,以适应未来环境的需要。功能衰减意味着往回看;而渐进增强则意味着朝前看,同时保证其根基安全牢固。 为了能够给用户提供更好的界面交互体验,同时适应不同版本的浏览器内核,系统采用了部分渐进增强的思想,利用媒体查询为不同的浏览器版本和内核提供相应的展现效果,同时保证基本的页面展现功能。 4.2 页面自适应策略 系统采用部分渐进增强的页面适配思想,以及拥抱流式布局策略,通过视口元素的媒体查询来控制不同分辨率阈值下页面的布局规划,调整页面元素的布局为百分比方式,包括组件宽度、字体以及高度、图片的动态大小来控制相同分辨率阈值范围下不同视口中组件的平滑缩放。同时对HTML5页面的移动端适配属性进行设置控制,针对需要达到的效果设置其Viewport的属性,包括宽和高、页面最初大小、初始缩放比例、屏幕像素密度等。使得系统在Web浏览器端以及移动端都有良好的展示效果。 4.2.1设备自适应 Viewport是指用以展现手机页面的区域。尽管Viewport的可见区域和屏幕大小是匹配的,但是它有着自己的尺寸(dimensions),这一尺寸决定了页面上可见的像素点。一个web页面在扩张到整个屏幕之前占用的像素数据是由Viewport的尺寸来定义的,而不是设备屏幕的尺寸。如一个设备的屏幕宽480像素,但是Viewport宽800像素,那么这个web页面需要在800像素宽的屏幕上才能完全展现。 在HTML5中可以使用 <meta> 标签来为页面定义Viewport 的属性。可以在 <meta> 标签的content 属性中,定义多个Viewport属性。例如,Viewport的高和宽,页面的最初大小,以及目标屏幕分辨率。Content 属性中的每个Viewport性质必须以逗号相隔。通过初始缩放initial-scale和用户调整缩放来控制页面的伸张以适当地填充移动端设备的显示区域。通过target density定义屏幕像素密度来控制安卓浏览器和Webview根据不同屏幕的像素密度对页面进行的缩放。 图4.2 视口属性设置示意图 4.2.2.浏览器自适应 通过拥抱流式布局的来使得页面在不同尺寸屏幕上良好的运行。从手机到电脑,设备的屏幕尺寸层出不穷,很难用传统意义上的统一布局来适应这些变动。拥抱流式布局倡导响应式界面设计,通过媒体查询(@media screen and...)来获得设备特性信息,从而灵活的控制不同尺寸屏幕的浏览器动态的调整页面元素的布局,以适应视口特性的变化。 同时根据“目标元素宽度/上下文元素宽度=百分比宽度”的模式将传统的固定像素式布局改为百分比布局,元素的固定像素宽度转换成百分比宽度。假定整个页面布局的宽度是960px,按照1024px屏幕分辨率做参照,百分比应是960/1024 = 93.75%。其他的组件宽度也可以按照960px为参照计算。若除下来的结果是很长的小数,如340/960 = 0.3541666666666667 ,无须对结果进行四舍五入,这样可以保持最高的精确度,这些小数应尽可能完整保留。 根据“目标元素尺寸/上下文元素尺寸=百分比尺寸”将文字的固定像素大小转换为等量的相对尺寸,现代浏览器默认的字体大小是16px,字体的相对大小用em为单位来表示。若某个div的字体大小为48px,则转化后为48/16=3em。结果为小数时的处理方式同上。 给图片设置阈值以使图片随着视口平滑缩放,为不同屏幕尺寸提供不同的图片,然后针对不同视口宽度修正设计,保证在响应式设计中内容始终优先。图片不是布局元素,它里面不包含子元素。另外,图片还有失真的问题,缩放不当都会造成失真。为此,需要给图片添加样式max-width:100% 以实现弹性图片,因为图片所处的容器可以自动缩放,只需让图片限制在父级的宽度之内,就可以随父级一起缩放。弹性图片仅用max-width无法实现,除此之外还需使用百分比宽度。处理方式同计算布局元素的宽度。在此过程中需要注意图片的失真问题,当用户使用的一个超宽屏幕时,图片被放大到原大小的两倍甚至更多,图片的质量会大幅下降。所以还需为图片设置绝对阈值,即宽度上限,因此一个弹性图片的样式组合应该为:width:30%; max-width:400px。 对于一个使用超宽屏幕的用户,按照正常的页面设计比例,这张图片被放大到了500px,但是现在只能显示最大宽度400px,依然是个问题。为此可以采用另一个组合,把max-width加到图片的父级元素上,从源头上就限制放大的最大值,这样图片与它的相邻元素的比例就不会失调了。这样的设计也是个权衡的结果,因为页面结构千变万化,具体的解决办法,还得分析具体页面。 为了防止放大的过宽,可以通过媒体查询来设置不同分辨率下的阈值。在处理各种浏览器兼容问题时,可以借助Modernizr,一个用于检测浏览器功能的开源JavaScript库,通过Modernizr追加的额外类名来辅助修正样式问题,以及通过检测浏览器是否支持媒体查询来按需加载资源,让老版本IE支持HTML5等。 4.3 模块实现 页面自适应主要的实现方式包含: 4.3.1根据适口属性设计响应式布局: ①加入兼容配置代码 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">,通过chrome插件GCF(谷歌内嵌浏览器框架)控制IE以Webkit引擎及V8引擎进行样式排版,若用户未安装该插件则以IE最高文档模式进行展
33.37MB
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷3
2023-04-22C++_Primer_Plus中文第五版 C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。 全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内 容。 本书针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要 求读者有较多C语言方面的背景知识。本书可作为高等院校C++课程的教材,也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”的美誉,它经过仔细的测试,制作精细,是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册。该书阐述了包括结构化代码和自顶向下设计在内 的编程原理,涵盖了类。继承。模板。异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家,他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个概念,激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助读者消化最难以理解的概念。本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材,也可供熟悉其他语言的开发人员参考,以更深入地理解C++语言的基本知识。 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使用特性提供了概念性指南; ● 强调实践,通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使用通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础,对模板、标准模板库、字符串类、异常、RTTI和名称空间进行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工 学院,在加州大学伯克利分校获得博士学位。Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书获得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名。 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式,其中包括面向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加,C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后,已经稳定下来了。现代编译器支持该标准要求的多数或全部特性,程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的,将介绍这种成熟的C++版本。 本书在介绍C++特性的同时,讨论了基本C语言,使二者成为有机的整体。书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明,这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容。另外,还讲述了C++在C 语言的基础上新增的许多特性,其中包括: ● 类和对象。 ● 继承。 ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(或独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点。大约20年前,《C Primer Plus))一书开创了优良的初级教程传统,本书 建立在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南。 ● 初级教程不要求读者已经熟悉相关的编程概念。 ● 初级教程强调的是“实践性”学习,通过简短、容
33.37MB
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷1
2023-04-01C++_Primer_Plus中文第五版 C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。 全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内 容。 本书针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要 求读者有较多C语言方面的背景知识。本书可作为高等院校C++课程的教材,也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”的美誉,它经过仔细的测试,制作精细,是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册。该书阐述了包括结构化代码和自顶向下设计在内 的编程原理,涵盖了类。继承。模板。异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家,他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个概念,激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助读者消化最难以理解的概念。本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材,也可供熟悉其他语言的开发人员参考,以更深入地理解C++语言的基本知识。 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使用特性提供了概念性指南; ● 强调实践,通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使用通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础,对模板、标准模板库、字符串类、异常、RTTI和名称空间进行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工 学院,在加州大学伯克利分校获得博士学位。Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书获得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名。 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式,其中包括面向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加,C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后,已经稳定下来了。现代编译器支持该标准要求的多数或全部特性,程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的,将介绍这种成熟的C++版本。 本书在介绍C++特性的同时,讨论了基本C语言,使二者成为有机的整体。书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明,这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容。另外,还讲述了C++在C 语言的基础上新增的许多特性,其中包括: ● 类和对象。 ● 继承。 ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(或独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点。大约20年前,《C Primer Plus))一书开创了优良的初级教程传统,本书 建立在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南。 ● 初级教程不要求读者已经熟悉相关的编程概念。 ● 初级教程强调的是“实践性”学习,通过简短、容
-
下载
三针测量M值计算软件.exe
三针测量M值计算软件.exe
-
下载
全媒体融合教学案例平台解决方案.ppt
全媒体融合教学案例平台解决方案.ppt
-
下载
ini_json.zip
ini_json.zip
-
下载
chuankou4.rar
chuankou4.rar
-
下载
基于python开发的工商名录采集工具 v1.0.2版本
基于python开发的工商名录采集工具 v1.0.2版本
-
下载
CAD表格转成EXCEL表格软件.exe
CAD表格转成EXCEL表格软件.exe
-
下载
ipscan-v2.21.zip
ipscan-v2.21.zip
-
下载
FH接线图欧姆龙相关英文版.pdf
FH接线图欧姆龙相关英文版.pdf
-
下载
预埋件计算软件 1.0 正式版.exe
预埋件计算软件 1.0 正式版.exe
-
下载
三七网小说下载.exe
三七网小说下载.exe
