频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

1.2.2 要点解析(试题1-试题5)

作者: 郭春柱编著 出处:电子工业出版社  2008-06-15 15:00    砖    好    评论   进入论坛
阅读提示:《程序员考试考前冲刺预测卷及考点解析》第4章主要为大家提供的是考前冲刺预测卷,本节为大家提供下午试题的要点解析(试题1-试题5)。

1.2.2  要点解析

试题1要点解析

这是一道要求读者掌握数组应用的程序设计题。本题的解答思路如下。

阅读程序说明后可知,本程序可将一个给定汉字的点阵逆转90°后输出。用16个元素的元素数组表示汉字点阵,每个无符号整数有16位,0表示空白位置,为1表示非空白位置。该C程序的功能是将上述表示形式的汉字点阵(“会”字)逆时针旋转90°后存储在数组new中,并输出旋转前后的十六进制点阵数据和字形。

函数turnleft完成点阵数据逆时针旋转90°,并将旋转后的点阵数据存放在数组new中。在函数turnleft的for循环中,语句“new[row]|=(( old[k]>>   (2)    ) &1) <<    (3)    ;”用于实现“将一个汉字逆时针旋转90°,就是把该汉字点阵的最右列作为旋转后新点阵的第1行,次最右列作为旋转后新点阵的第2行……”,即装配新点阵中的第row行。其中,地址运算符“&”是一个返回操作数地址的单目操作符,运算符“|=”是进行位逻辑或赋值运算。

由于新点阵的第row行的各位来自原点阵中各行的第(15-row)位,而且此处用&1运算来取出该位,因此(2)空缺处所补充的内容是“row”,
(3)空缺处所填写的内容是“15-k”。

由于(1)空缺处是内循环初始化的部分,且内循环的结束条件是“k<16”,而每个汉字是16×16点阵字形,因此该空缺处所填写的内容是“k=0,new[row]=0”。

函数display把旋转后的汉字点阵与原点阵一同输出,也是通过使用双重for循环语句来实现输出。由于输出是一行一行进行的,可知out数组中存放的是每次输出的原点阵和新点阵的一行数据,而输出时

printf语句中使用“%s”格式的out[LEFT]和out[RIGHT]是两个字符串;在C语言中规定,一个字符串数据总是以‘\0’为结束标志。因此(4)空缺处所补充的内容是“'\0'”。

函数display能将旋转前后的点阵数据加以编辑,用字符“.”表示值为0的位,用字符“x”表示值为1的位。换言之,函数display输出的符号是'.'和'x',即为数组letter中的2个元素。由此可知(5)、(6)空缺处所在的语句是对汉字点阵进行输出转换。由于输出时是高位在前、低位在后,因此在输出时排在第col位的是点阵中每一行的第col位。而外循环中有“old++”和“new++”的赋值,&1运算只表示判断(5)、(6)空缺处第15位上的值为0或1。而要区分第0位至第14位是0还是1,只要将old[row]右移15-col位就能对其进行判断。因此(5)空缺处所填写的内容是“*old>>(15-col)”或“old[row]>>(15-col)”。同理,只要将new[row]右移15-col位就能对adw 进行判断,即(6)空缺处所填写的内容是“*new>>(15-col)”或“new[row]>>(15-col)”。

试题2要点解析

【问题1】(12分)

本试题的题干说明中已将无线网卡分布问题建模(如图1-16所示)。其中,直线表示无线网卡所在的直线,实心正方形表示无线网卡。而要求解的问题是要求如何在该直线上布局无线AP,使其能覆盖所有的无线网卡,并且所用无线AP的数量要尽可能的少。这是一个通过进行一系列选择求最优解的问题。

分析该问题,发现其具有最优子结构,并且具有贪心选择性质,故该问题可以用贪心算法来求解。贪心算法思想是:问题的规模为N,从第1个无线网卡(最左端)开始布局无线AP,把第1个无线AP放置在该无线网卡右方的6m处,此时该无线AP会覆盖从第1个无线网卡到该无线网卡右方直线长度为12m的所有无线网卡,假设覆盖了N1个无线网卡。此时问题规模变成了N-N1,接着把第1个无线AP覆盖的无线网卡去掉,再从N-N1中选择第1个(最左端)无线网卡开始布局无线AP,将第2个无线AP放置在该无线网卡右方的6m处。依此布局,直到覆盖所有的无线网卡。
图1-20是问题解的模型。其中,直线表示无线网卡所在的直线,实心正方形表示无线网卡,实心圆形表示无线AP,虚线圆以对应无线AP为圆心,直径为无线AP的覆盖范围,即对应无线AP的覆盖范围(12米)。

 
图1-20  问题解模型图

实现贪心算法的流程见图1-17。由于“算法结束后k的值为无线AP的总数”,因此在算法开始处需要对变量k赋初值,即(1)空缺处所填写的内容是“k=0”。

该贪心算法中,N表示无线网卡的总数,且无线网卡的编号按照无线网卡到通道A端的距离从小到大进行编号,d[i](1≤ i ≤N)表示第i个无线网卡到通道A端的距离。当判断第i个无线网卡未超过无线网卡总数N,而求解下一个无线网卡(即第i+1个无线网卡,或第j个无线网卡)所归属的无线AP时,也需要判断第j个无线网卡是否超过无线网卡总数N,以及第j个无线网卡与第i个无线网卡之间的距离是否超过12米,因此(2)空缺处所在的判断条件是“j<=N && d[j]-d[i] <=12”,即该空缺处所填写的内容是“j<=N”或其等价形式。

若第j个无线网卡未超过无线网卡总数N,且第j个无线网卡与第i个无线网卡之间的距离未超过12米,则可以求解再下一个无线网卡(即第i+2个无线网卡,或第j+1个无线网卡)所归属的无线AP。反之,则需要记录无线AP的总数k,即(3)空缺处所填写的内容是“k=k+1”或其等价形式;以及记录第k(k ≥1)个无线AP到通道A端的距离,即(4)空缺处所填写的内容是“d[i] + 6”或其等价形式。

当求解完第k个无线AP(覆盖了N1个无线网卡)的布局后,需要把第k个无线AP覆盖的无线网卡去掉,再从N-N1中选择第1个(最左端)无线网卡开始布局第k+1个无线AP。依此不断求解,直到覆盖所有的无线网卡。

【问题2】(3分)

虽然该贪心算法中包含两个循环,但实际上只是遍历所有无线网卡一次,因此算法复杂度是O(N)。
试题3要点解析

【问题2】(分)

这是一道要求读者掌握二叉树应用的程序设计题。本题的解答思路如下。

对于以下结构体定义语句。

 typedef struct treenode {
char *word;
int count;
struct treenode *left, *right;
}BNODE;


显然,这是定义了一个用于构造二叉树的数据结构,从结构成员的名字上看,字符指针成员word是用来保存单词的,整型成员count是用来保存该单词在文章中出现次数的。

通过快速浏览程序,不难发现函数binary_tree()大体上是在二叉树中为单词寻找位置并插入,由于没有其他函数进行显式的二叉树创建工作,因此该函数可能还要承担创建二叉树的任务。函数midorder是一个典型的递归算法的中序遍历二叉树,对函数binary_tree()处理的结果进行中序遍历,并将每一个节点的内容写入文件word_xml.out中。而函数mam()则调用这两个函数完成全部处理工作。

首先从main()函数读起。(7)空缺处所在的语句是一个循环的循环体,是对函数binary_tree()的调用。我们看,在这个循环体中,函数getword()每从文章中抽取一个单词,便由函数binary_tree()插入二叉树中,循环结束时已经完成了创建二叉树以及把所有单词都插入二叉树的工作。因为此后已经是对二叉树的中序遍历了。

由于已经明确(7)空缺处需要填写的是函数binary_tree()调用的实际参数表,因此就需要研究函数binary_tree()的形式参数——“BNODE **t,char *word”。首先,该函数的第2个参数(即char *word)是要插入的单词(这从函数对该参数的使用中也可以看出)。考虑到实际参数是一个数组(即char word[40];),而形式参数需要的是一个字符串指针,只要把数组首地址传入即可。因此(7)空缺处所填写的实际参数就应该是“word”。

函数binary_tree()的第1个参数要求是BNODE类型的,通读函数main(),只有一个BNODE类型的变量root(即BNODE *root = NULL;),那么在(7)空缺处是以何种方式将root传入函数binary_tree() 中的()呢?由于形式参数需要一个二级指针,而实际参数是一个指针,因此(7)空缺处所对应的实际参数只能填写“&root”,即把root的地址作为一个常量二级指针传递给函数binary_tree()。
综上所述,(7)空缺处所填写的实际参数是“&root,word”。

阅读函数binary_tree()可知,所传入的BNODE类型变量(*root)需要被函数中的BNODE型变量(*prt)接收。那么这个操作应该在何处完成?由于语句“ptr = cmpres > 0 ? ptr->right : ptr->left;”是在二叉树中查找的典型算法。因此BNODE类型变量接收问题是在进入while循环之前完成的,即(1)空缺处所填写的内容是完成该BNODE类型变量接收任务的语句。综合考虑形式参数中所传入变量的类型和ptr的类型可知,(1)空缺处所填写的语句是“ptr =*t”。

在C语言中,如果要比较两个字符串,则可以使用库函数Strcmp()。该函数可以比较两个字符串并根据结果返回一个整数值,具体语法如下:

int strcmp(string str1, string str2);

其中,str1和str2是两个已声明并已初始化的字符数组,该函数返回负数表示str1小于str2;返回正数表示str1大于str2;返回0表示两个字符串相同。

(2)空缺处所在的语句中“word”要和谁比较,当然是ptr->word了,即(2)空缺处所填写的内容是“ptr->word”。若比较结果相同时,则需要把该单词的计数加1,即(3)空缺处所填写的语句是“ptr->count++”或其等价形式。

(4)空缺处所填写的语句作用比较模糊,可以暂时跳过,继续阅读之后的程序。很明显,(4)、(5)空缺处之间的语句是建立了一个新节点,并将左右链接置空,写入word,写入计数1。

对于(5)空缺处所在的条件判断语句,即

if (p == NULL)     (5)    ;
else  if (cmpres > 0)  p->right = ptr;
else  p->left = ptr;
其中,(5)空缺处所在的这个if判断也比较难理解。而else部分的if…else体(即p->right = ptr;和p->left = ptr;),显然是将新建节点接入二叉树的操作,指针p到底指向哪里?从该句可以判断指针p是查找位置而未找到时的最后一个节点,即ptr由此执行p->right = ptr或者p->left = ptr,操作后ptr值为NULL,然后退出while循环。那么指针p和ptr的这种关系是怎样建立起来的?从程序的流程来看,只能是在遍历二叉树的过程中建立起来的,因为p需要随时跟踪ptr的变化。而遍历二叉树部分的C代码并没有实现这样的功能,因此需要在(4)空缺处填写完成这个任务的语句,即“p = ptr”。

有了以上的理解,就不难理解条件判断“p==NULL”的含义了。因为只有在没有进入while循环而直接执行循环以后的语句才会形成这种情况。换言之,p==NULL表示这是第一次调用函数,即ptr是新建的树。此时就需要将新建树的树根回传,以便以后程序调用时使用,因此(5)空缺处所填写的语句是“*t=ptr”(提醒读者想一想,为什么不是t = ptr?)。

(6)空缺处是判断一个条件,以结束对递归函数midorder()的调用。递归函数midorder()何时结束呢?显然当传入的t为空时结束,因为这包含以下两种可能要求结束调用的条件:

1)首次传入的二叉树为空。对于一棵空的二叉树,自然是无须遍历的。

2)遍历结束。遍历结束后再调用递归函数midorder()时,传入的t->left或者t->right为空,自然遍历就应该就此结束。

其实以上两个条件表达的意思一样,即(6)空缺处所填写的判断条件是“t==NULL”或“!t”。

试题4要点解析

这是一道要求读者用创建Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。

通常把限定只能在一端进行插入和删除操作的线性表称为栈,所以栈又称为运算受限的线性表。把可以进行插入和删除操作的一端称为栈顶(习惯用top指针指示),而另一端称为栈底。当栈中不包含任何数据元素时,这个栈就为空栈。

由于栈具有“后进先出”的运算特点,因此在程序设计中应用十分广泛。例如进制转换、括号匹配的检验、表达式求值及迷宫求解等。

【算法4-1】的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出图1-18所示的提示信息。从图1-18给出的信息可知,程序不但要求检查出是否有括号匹配错误,而且还需要给出具体的出错位置。通常,括号匹配的规则是把最近的左右括号配成一对,所以括号匹配最常用的方法是遇到左括号则入栈,遇到右括号则出栈。这样,出栈的左括号与当前的右括号是匹配的。

【算法4-1】分析:

1)栈置空,置EOF为FALSE,并从文件中读取第一个字符到ch,然后进入循环。循环体执行一次处理一个ch。进入循环,利用kind函数算出ch的类型k。

2)虽然【算法4-1】中有(1)~(4)空缺处,但其基本结构却很明显,大致流程如下。

当k等于什么的时候把什么入栈;

当k等于什么且栈不为空的时候,进行出栈操作。如果栈为空,则打印错误信息;如果都不是,则读文件的下一个字符再次进入循环。
根据以上所提到的算法可知,入栈操作应该发生在类型k为1(即ch为左括号)时,而出栈操作应该发生在类型k为2(即ch为右括号)时。因此(1)空缺处所填写的内容是“1”,(4)空缺处所填写的内容是“2”。

由于在(4)空缺处之后的出栈操作中,并没有用到栈的内容。因此可能有些读者理所当然地认为栈中的内容没有什么用,可以在(2)、(3)空缺处随便压个ch,即两个空缺处均填写“ch”。但换个角度思考,从逻辑上就可以推翻这种解答。如果(2)、(3)空缺处压的是同样的数据,又是在同一位置出栈,算法大可只用一个push、pop就可以了。

由语句“row <-pop();col <-pop();”可知,(2)、(3)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col,并且根据栈的“后进先出”规则可知,应先将col压入栈,再压入row。因此(2)空缺处所填写的内容是“col”,(3)空缺处所填写的内容是“row”。
【算法4-2】分析:

同理,由【算法4-2】中的语句“row <-pop根据栈的“后进先出”规则可知,();col <-pop();”可知,(5)、(6)空缺处应该把row和col压入堆栈。应先将col压入栈,再压入row,即(5)空缺处所填写的内容是“col”,(6)空缺处所填写的内容是“row”。
由于判断条件1为真时,需要进行入栈操作,因此判断条件1应是判断字符是不是左括号,如果是就入栈,即(8)空缺处应选择选项C的“字符是左括号”。

判断条件2和判断条件3是相关联的,当两个判断条件都为真时,要进行出栈操作,因此要判断栈是否为空。由此可以得出在判断条件2和判断条件3中,至少有一个必定是用来判断栈是否为空的。可以用判断栈顶元素来确定当前括号是否和栈中压入括号是同一类型的,但前提是左括号类型入了栈,而且要在栈顶。如果(7)空缺处压入的是k,则正好符合这一条件。所以(7)空缺处所填写的内容是“k”。
同时,判断括号是否匹配的条件也就可以确定了,如果当前ch是右括号且当前栈顶的左括号(只有左括号入了栈)类型与ch匹配,则匹配成功。根据试题说明中的提示信息:若“判断条件2”的逻辑判断结果为假,就无须对“判断条件3”进行判断,所以应把“栈不空”作为判断条件2,“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3,即(9)空缺处应选择选项E的“栈不空”,(10)空缺处应选择选项A的“栈顶元素表示的是与当前字符匹配的左括号”。

试题5要点解析

【问题1】(9分)

这是一道要求读者掌握用Data数据控件访问数据库的综合应用题。本题的解答思路如下。

Data数据控件是Visual Basic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,并实现对数据资源的访问。为了在程序运行时,使Data数据控件能够访问指定表中的记录信息,应设置该控件的DatabaseName属性和RecordSource属性。要在图1-19各文本框中显示Data控件所连接的数据表中的数据,必须将文本框与Data数据控件进行绑定。

本程序开始部分,通过以下语句设置文本框不可编辑,使某条记录成为当前记录后,触发此事件。

For i = 0 To 5 
txtStu(i).Locked = True
Next i

在程序运行中,应注意各命令按钮之间的互相制约关系。例如,单击【添加】按钮后,不允许再单击【修改】、【删除】等按钮。因此本案例在【添加】按钮的Click事件中,用“cmdEdit.Enabled = Not cmdEdit.Enabled”、“cmdDelete.Enabled = Not cmdDelete.Enabled”等语句分别实现【修改】、【删除】按钮不可用状态的设置。因此(1)空缺处所选择的语句是选项H的“cmdDelete.Enabled = Not cmdDelete.Enabled”。

对于添加记录的操作,需单击两次【添加】按钮才能完成。第1次单击该按钮时,执行(1)空缺处的语句。而该语句所要完成的功能是将一条空记录添加到记录集的末尾,因此(2)空缺处所选择的语句是选项E的“Data1.Recordset.AddNew”。由语句“txtStu(i).Locked = Not txtStu(i).Locked”可知,第1次单击【添加】按钮后,就可以在文本框(txtStu(i),i=0,1,2,3,4,5)中输入各字段的数值。

第2次单击【添加】按钮时,执行语句“Data1.Recordset.Update”,其作用是确认添加操作后,再将新记录添加到数据库中。通常,新添加的记录是数据表中的最后一条记录,因此(3)空缺处语句所要完成的功能是,将记录指针移到最后一条记录上,即该空缺处所选择的语句是选项G的“Data1.Recordset.MoveLast”。

对于修改记录中的语句“Data1.Recordset.Edit”,其作用是调用Recordset的Edit方法,使当前记录成为可编辑的状态。在完成修改操作后,还需执行语句“Data1.Recordset.Update”,以确认所要做的修改操作,即(4)空缺处所选择的语句是选项B的“Data1.Recordset.Update”。

对于删除记录的操作,删除当前记录的语句是“Data1.Recordset.Delete”。删除当前记录后应使下一条记录成为当前记录,因此(5)空缺处所选择的语句是选项F的“Data1.Recordset.MoveNext”。

删除当前记录后,如果记录指针指向最后一条记录的后面,则需要重新将记录指针移动到最后一条记录上,使之成为当前记录。语句“If Data1.Recordset.EOF Then”用于判断记录指针是否指向最后一条记录的后面。其中,EOF是Recordset的一个属性,当值为True时,表明记录指针已移到最后一条记录的后面。(6)空缺处语句所要完成的功能是,使最后一条记录成为当前记录,即该空缺处所选择的语句是选项G的“Data1.Recordset.MoveLast”。

(7)空缺处语句所要完成的功能是放弃添加的新记录(或对数据的修改),选择的语句是选项D的“Data1.Recordset.CancelUpdate”。取消所添加的新记录(或对数据修改)的操作后,还需要刷新与Data1相连接的记录集,同时把记录集中的第一条记录设置为当前记录。因此,(8)空缺处所选择的语句是选项A的“Data1.Refresh”。

最后(9)空缺处所选择的语句用于设置当前记录数,即选项C的“Data1.Recordset”。在Data1的Reposition事件中,Recordset是Data1控件所控制的记录集对象,通过此对象对数据表中的记录进行浏览和操作。访问数据库的记录集可用Data1.Recordset实现。

另外补充说明一点,对于本试题中,学生成绩表的建立步骤如下。

1)启动数据管理器,选择【外接程序】→【可视化数据管理器】命令。

2)建立数据库,即单击工具栏中的【数据库窗口】按钮。

3)建立数据表结构。在数据库窗口中单击鼠标右键,从弹出的快捷菜单中选择【新建表】命令,打开如图1-21所示的“表结构”对话框。“表名称”栏输入:学生成绩表。按表1-13给出的学生成绩表结构定义表中的各个字段。

4)编辑数据表中的数据。在数据库窗口的数据表名处单击鼠标右键,从弹出的快捷菜单中选择【打开】命令。在打开的记录操作对话框按表1-14所给出的信息添加各个学生的成绩。

【问题2】(1分)

Visual Basic应用程序有4种类型的文件,包括单独的窗体文件、标准模块文件、类模块文件和工程文件。单独的窗体文件的扩展名为frm;公用标准模块文件的扩展名为bas;类模块文件的扩展名为cls;工程文件的扩展名为vbp。工程文件由若干个窗体和模块组成。

【问题3】(2分)

Visual Basic的任何一个控件,只要它有Caption属性,就可以为其指定访问热键。对于一般控件(非菜单项),可以在设计阶段通过属性窗口,在Caption属性中加符号“&”设置访问热键。访问键只能是一个字符,通常用键盘上存在的西文字符作为访问键,否则就没有实际意义。如果用汉字作为菜单项或控件的标题,则通常把访问键放在标题后面的括号中。

若要使图1-19对话框中的【退出】按钮新增如下的功能:运行时该按钮上显示有“退出(C)”字样的信息,按【Alt+C】组合键或按【ESC】键都相当于单击该按钮,则需要在开发时,将命令按钮“退出”的Caption属性设置为“退出(&C)”,将Cancel属性由默认的“False”更改为“True”。

【问题4】(3分)

MsgBox语句的语法格式如下。

 MsgBox Msg $[,type%][,title$][,helpfile,context]


其中,Msg是在对话框内显示的字符串;type是一个整数值或符号常量,用来控制在对话框内显示的按钮、图标的种类和数量;title是在对话框上显示的标题。

因此,执行所本试题所给出的MsgBox语句时,将弹出一个消息框,该消息框的标题为“数据错”,该消息框内的正文为“请检查修改输入数据!”,该消息框中有一个错误图标,有一个【OK】按钮,如果用户按【Enter】键,则相当于单击【OK】按钮。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
2008年4月全国计算机等级考试最新试题及答案
程序员如何成长?
网管员考试模拟试题
Oracle 11 RAC生存指南
程序员考试考前冲刺预测卷及考点解析
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
浏览器的战国时代
浏览器的战国时代
运营商封堵ADSL共享 中小企业如何应对
运营商封堵ADSL共享 中小企业..
微软出价446亿美元收购雅虎
微软出价446亿美元收购雅虎
· 微软出价446亿美元收购..
· 技术人求职简历完备手册
· 开源虚拟化技术Xen
· Windows Server 2008专..
· 隐私保护技术探讨
· 绿色IT人健康生存手册
· 网络工程师职业规划与..
· 杀毒软件评测专题
· 访问控制列表(ACL)介绍
· Vista SP1对决XP SP3
· 华为员工自杀频频拷问..
· 2008中国互联网大会
· 勇闯IT培训黑色围城
· CISSP认证成长之路
· 解析35岁技术人的价值..
· LAMP技术精解
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
· 专题:AIX操作系统管理..
· 访问控制列表(ACL)介绍
· 反垃圾邮件技术应用
· ASP.NET 2.0基础开发指..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册
· 专题:AIX操作系统管理..
· 交换机故障解决指南
· 三层交换技术专题