选择
1、高内聚和低耦合,下列哪个耦合度最高?
A.通过函数参数传递
B.一个函数修改另一个函数数据
C.通过全局变量
D.通过指示器
解析: B
内聚:一个模块内部各个成分之间相关联程度的度量。
耦合:模块之间依赖程度的度量。模式设计追求强内聚,弱耦合。
耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:
(1) 内容耦合:有下列情形之一,两个模块就发生了内容耦合:
一个模块访问另一个模块的内部数据
一个模块不通过正常入口而转到另一个模块的内部
一个模块有多个入口
(2) 公共耦合:当两个或多个模块通过公共数据环境相互作用时,他们之间的耦合称为公共环境耦合。
(3) 控制耦合:如果两个模块通过参数交换信息,交换的信息有控制信息,那么这种耦合就是控制耦合。
(4) 特征耦合:如果被调用的模块需要使用作为参数传递进来的数据结构中的所有数据时,那么把这个数据结构作为参数整体传送是完全正确的。但是,当把整个数据结构作为参数传递而使用其中一部分数据元素时,就出现了特征耦合。在这种情况下,被调用的模块可以使用的数据多于它确实需要的数据,这将导致对数据的访问失去控制,从而给计算机犯错误提供机会。
(5) 数据耦合:如果两个模块通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合就是数据耦合。
内聚有如下的种类,它们之间的内聚度由弱到强排列如下:
(1) 偶然内聚:模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。
(2) 逻辑内聚。这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能
(3) 时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
(4) 过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。
(5) 通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
(6) 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
(7) 功能内聚:共同完成同一功能,缺一不可,模块不可再分割
2、如下四个选项中,哪些是数据库模糊查询的通配符?
A.?
B.*
C.%
D._
解析: CD
跟在where子句后面的like关键字就是模糊查询.
模糊查询还可以用通配符:1.%代表任意字符串 2._代表任意字符 3.[]匹配指定范围内的单个任意字符 4.[^]意思是除了某个字符其他字符都可以。
3、计算机对汉字信息的处理过程实际上是各种汉字编码间的转换过程,这些编码不包括( )
A.汉字输入码
B.汉字内码
C.汉字字形码
D.汉字状态码
解析: D
汉字的输入、输出和处理的过程,实际上是汉字的各种编码之间的转换过程。这些编码包括汉字输入码、汉字内码、汉字地址码和汉字字形码。
4、机器A的ip地址为202.96.128.130.子网掩码为255.255.255.128,则该ip地址的网络号为
A.202.0.0
B.202.96.0
C.202.96.128.128
D.255.255.255
解析: C
IP地址与子网掩码进行与运算得到网络号,子网掩码取反与IP地址进行与运算后得到主机号。
5、下面关于二分查找的叙述争正确的是: ( )
A.表必须有序,表可以顺序方式存储,也可以链表方式存储
B.表必须有序且表中数据必须是整型,实型或字符型
C.表必须有序,而且只能从小到大排列
D.表必须有序,且表只能以顺序方式存储
E.表不需要有序,只要符合小堆和大堆的数据排列要求即可
F.表不需要有序,但存储必须是顺序存储
解析: D
6、关于类模板的说法正确的是()
A.类模板的主要作用是生成抽象类
B.类模板实例化时,编译器根据给出的模板实参生成一个类
C.在类模板中的数据成员具有同样类型
D.类模板中的成员函数没有返回值
解析: B
A错误,可以生成非抽象类;B正确,类是对象的抽象,类模板可以说是类的抽象,用以生成一个类;C错误,类模板与普通类一样,可以使用任意数据类型;D错误,可以有返回值。
7、下面哪些是对称加密算法()
A.DES
B.AES
C.DSA
D.RSA
解析: AB
A,B为对称加密算法,C,D为非对称加密算法。
8、以下哪些算法可以检测一个有向图中是否存在环( )
A.深度优先遍历
B.广度优先遍历
C.拓扑排序
D.关键路径算法
解析: AC
编程
1、给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
import java.util.*;
public class Main{
static class LinkNode{
int val;
LinkNode next;
LinkNode(int val){
this.val = val;
this.next = null;
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] ss = sc.nextLine().split(" ");
int k = sc.nextInt();
LinkNode head = new LinkNode(-1);
LinkNode tail = head;
for (String s : ss) {
LinkNode node = new LinkNode(Integer.valueOf(s));
tail.next = node;
tail = tail.next;
}
head = head.next;
LinkNode newHead = reverseGroup(head,k);
while (newHead != null){
System.out.print(newHead.val+" ");
newHead = newHead.next;
}
}
public static LinkNode reverseGroup(LinkNode head, int k){
if(head == null || head.next == null || k <= 1){
return head;
}
LinkNode currentNode = head;
for (int i = 1; i < k; i++) {
currentNode = currentNode.next;
if(currentNode == null){
return head;
}
}
LinkNode next = currentNode.next;
reverse(head,currentNode);
head.next = reverseGroup(next,k);
return currentNode;
}
public static LinkNode reverse(LinkNode head,LinkNode tail){
if(head == null || head.next == null)
return head;
LinkNode pre = null;
LinkNode tmp = null;
while(pre != tail){
tmp = head.next;
head.next = pre;
pre = head;
head = tmp;
}
return pre;
}
}