正确率12/25
1.Windows 下进程和线程的描述,哪些是对的:
正确答案 :C
您的答案 :C
窗体顶端
A操作系统的一个程序必须有一个进程,但是不必须有一个线程
B进程有自己的栈空间,而线程只共享父进程的栈空间
C线程必从属于一个进程
D线程可以更改从属的进程
本题注意:1进程必须有一个线程,在现代操作系统中,调度的主要单位已经是线程而非进程。
2进程有自己的栈空间,要是和父进程共享则会出现覆盖之类的。
4进程不能更改从属的进程。
2.Which of the following can be referred to as attack method(s)? Select all that apply
正确答案 :ABCD
您的答案 :C
AVulnerability scan
BSQL Injection
CDrive-by downloading
DBrute force
窗体底端
本题首先理清题意下面哪些是攻击方法:
A. Vulnerability scan,缺陷/弱点 扫描肯定是攻击方法啦比如说端口扫描之类,网安课上有讲过。
B.SQL Injection SQL注入攻击例如:某个网站的登录验证的SQL查询代码为:
|
strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');" |
恶意填入
|
userName = "1' OR '1'='1"; |
与
|
passWord = "1' OR '1'='1"; |
时,将导致原本的SQL字符串被填为
|
strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');" |
也就是实际上运行的SQL命令会变成下面这样的
|
strSQL = "SELECT * FROM users;" |
因此达到无账号密码,亦可登录网站。所以SQL注入攻击被俗称为黑客的填空游
C.下载造成的攻击~
D暴力破解
3.When a dll is loaded into memory, which part(s) can be shared between processes?
正确答案 :AC
您的答案 :BC
窗体顶端
Acode segment
Bstatic variable global variable
Cexternal difinitions and references for linking
DBSS segment
本题注意是问dll,动态链接库dll的共享部分包括代码段和外部定义的引用
4.Asume you have an object to describe customer data:{ ID(7 digit numeric) Family Name(string) Account Balance(currency) } If you have 500,000 Chinese customers records represented by instances of this object type , what set of data structures is best to get fast retrieval of customers (1) get IDs from Name and (2) get Name from ID?
A (1)Tree with Hash(100 bucket) at leaves(2) Tree with linked list at leaves.
B(1) Tree with linked list at leaves(2) Array.
C (1)Tree with linked list at leaves(2) Hash(10,000 buckets)
D (1)Sort linked list(2) Array.
Name -> ID 就是 string -> int,字符串最好用 Hash 或 Tree 来索引,不过由于 Name 不是唯一的,一个 Name 可能对应多个 ID,要用 Linked List 做对应过来的结构。所以可以是 Hash + Linked List 或 Tree + Linked List。(Tree 可以用 Trie,复杂度是 O(length(name)),其实 Hash 会更好,理论上复杂度是 O(1))。
ID -> Name 就是 int(7 digit) -> string,7 位数也就是 1000 w,可以开得下(人家机子好),所以就可以随机查了。
5.Which of the following method(s) CANNOT be used for Text-encryption:
A.MD5
B.RSA
C.RC4
D.DES
选择A,解析:MD5是不可逆加密,不可以用来加密文本,DES和RC4是对称加密,RSA是不对称加密,都可以用于文本加密。
6.To speed up data access , we build cache system. In one system , The L1 cache access time is 5 ns , the L2 cache access time is 50 ns and the memory access time is 400 ns. The L1 cache miss rate is 50% , the L2 cache miss rate is 10%. The average data access time of this system is:
5
30
45
50
55
解析:注意访问缓存和访问内存同时进行。
7.下面哪些调用转换支持可变长度参数
正确答案: A 你的答案: 空 (错误)
cdecl
stdcall
pascal
fastcal
解析:
cdecl 是 C 语言的调用方式,函数参数从右到左求值,然后入栈,参数由调用方负责清理,传多少参数其实都无所谓的,于是就支持所谓的可变长度的参数;stdcall 是 C++ 的调用方式,参数从右到左求值,入栈,由被调用方处理参数,所以参数个数类型都必须匹配;pascal 是对 PASCAL 函数的调用方式,参数自左向右求值,其他类似于 stdcall;而 fastcall 的情况忽略。
8.下面程序的执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class A{ public: long a; }; class B : public A { public: long b; }; void seta(A* data, int idx) { data[idx].a = 2; } int main(int argc, char *argv[]) { B data[4]; for(int i=0; i<4; ++i){ data[i].a = 1; data[i].b = 1; seta(data, i); } for(int i=0; i<4; ++i){ std::cout << data[i].a << data[i].b; } return 0; } |
正确答案: E 你的答案: D (错误)
11111111
12121212
11112222
21212121
22221111
解析:这道题应该注意 指针类型加减 时步长的问题。
A 大小为 4
B 大小为 8
那么:
void seta(A* data, int idx) {
data[idx].a = 2;
}
由于传入的实参为B类型,大小为8,而形参为A类型,大小为4
data[idx] 取 data + idx 处的元素,这时指针 data加1 的长度不是一个B长度,而是一个A长度,或者说是1/2个B长度。这时该函数中 data[0~3] 指向的是原 data[0].a,data[0].b,data[1].a,data[1].b,
由于隐式类型转换的缘故,data[0].a, data[0].b,data[1].a,data[1].b 处的值全部由于 data[idx].a = 2; 操作变为 2。
这道题如果改为void seta(B* data, int idx),那么形参中data指针加1步长为8,结果就是21212121。但是由于步长为4,所以结果就是 22221111。
9.1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
正确答案: B 你的答案: D (错误)
8
10
32
999
解析:1000个瓶子编号1-1000, 每个编号会有一个10位的二进制数字。 10只老鼠,依次喝掉所有二进制第一位是1的瓶子,第二位是1的瓶子。。。第十位是1的瓶子。 一周之后,死掉的老鼠说明毒药瓶子编号在对应二进制位置是1,否则是0。可以组合出毒药的编号。
9.下面说法哪些正确:
正确答案: A B C 你的答案: B C D (错误)
const int a; // a 是常数
int const a; // a 是常数
int const *a; // a 是常量指针
const int *a; // a 是指针常量
int const *a; // a 是指针常量
解析:A,B,const int a; int const a; 这两个写法是等同的,表示a是一个int常量。
C,D,E,const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。
const只对它左边的东西起作用 , 唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用。