mode有以下几种方式:
打开方式 | 说明 |
---|---|
r | 以只读方式打开文件,该文件必须存在。 |
r+ | 以读/写方式打开文件,该文件必须存在。 |
rb+ | 以读/写方式打开一个二进制文件,只允许读/写数据。 |
rt+ | 以读/写方式打开一个文本文件,允许读和写。 |
w | 打开只写文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。 |
w+ | 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。 |
a+ | 以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。 |
wb | 以只写方式打开或新建一个二进制文件,只允许写数据。 |
wb+ | 以读/写方式打开或建立一个二进制文件,允许读和写。 |
wt+ | 以读/写方式打开或建立一个文本文件,允许读写。 |
at+ | 以读/写方式打开一个文本文件,允许读或在文本末追加数据。 |
ab+ | 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。 |
三元运算符,问号前面是表达式,如果表达式为true就返回问号后面的,否则就返回冒号后面的。 这题a=5?0:1,条件表达式为是数字5,这个数是大于0的数,为真,所以返回问号后的表达式0
对于 a[3][4],a是一个指针数组,大小为3,里面三个元素就是该二维数组的每一行第一个元素的地址。
1、*(a[2]+1), a[2]就是第三行首元素的地址,a[2]+1 则地址向右偏移1,*(a[2]+1)就是取该地址的元素,也就是a[2][1]
2、*(*(a+2)+1), *(a+2) 和a[2]是等价的。所以*(*(a+2)+1)也是表示a[2][1]
下列程序的打印结果是?
1
2
3
|
char p1[15]= "abcd" ,*p2= "ABCD" , str[50]= "xyz" ; strcpy (str+2, strcat (p1+2,p2+1)); printf ( "%s" ,str); |
strcat(p1+2,p2+1); //返回以p1+2为首的字符串,即"cdBCD"
strcpy(str+2,strcat(p1+2,p2+1)); //将"cdBCD"copy到str+2位置上,并覆盖后面的内容,此时str为"xycdBCD"
以下程序的输出结果是?
1
2
3
4
5
6
7
|
#include <stdio.h> main() { char a[10]={ '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ,0},*p; int i; i=8; p=a+i; printf ( "%s
" ,p-3); } |
1、p指向a[5]
2、“%s”输出直到' '的字符串
3、最后的0为数字而非字符‘0’,ASIIC码中0为空字符
所以输出的结果是 6789 而不是6789
++ 是一目运算符,自增运算,它只能用于一个变量,即变量值自增1, 不能用于表达式。 ++(a++) 里,小括号优先。 (a++) 是 表达式,按运算规则,不能对 表达式 作 自增运算.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
ARP -s inet_addr eth_addr [if_addr] ARP -d inet_addr [if_addr] ARP -a [inet_addr] [-N if_addr] [-v] -a 通过询问当前协议数据,显示当前 ARP 项。 如果指定 inet_addr,则只显示指定计算机 的 IP 地址和物理地址。如果不止一个网络 接口使用 ARP,则显示每个 ARP 表的项。 -g 与 -a 相同。 -v 在详细模式下显示当前 ARP 项。所有无效项 和环回接口上的项都将显示。 inet_addr 指定 Internet 地址。 -N if_addr 显示 if_addr 指定的网络接口的 ARP 项。 -d 删除 inet_addr 指定的主机。inet_addr 可 以是通配符 *,以删除所有主机。 -s 添加主机并且将 Internet 地址 inet_addr 与物理地址 eth_addr 相关联。物理地址是用 连字符分隔的 6 个十六进制字节。该项是永久的。 eth_addr 指定物理地址。 if_addr 如果存在,此项指定地址转换表应修改的接口 的 Internet 地址。如果不存在,则使用第一 个适用的接口。 示例: > arp -s 157.55.85.212 00-aa-00-62-c6-09.... 添加静态项。 > arp -a .... 显示 ARP 表。 |
虚拟内存的作用同物理内存一样,只不过是从硬盘存储空间划出的部分,来完成内存的工作,由于不是真正的内存,所以被称为虚拟内存。因为计算机所支持的最大内存是由该计算机的地址位数决定的,也就是计算机的最大寻址能力。例如,32位机的寻址能力为2的32次方,大约为4G。所以虚拟内存的大小也受计算机地址位数的限制。不过这到题单选D是由前提条件的,那就是磁盘空间足够大,否则严格意义上讲应该多一个选项A。
虚存的大小要同时满足2个条件:
1.虚存的大小 ≤ 内存容量和外存容量之和。
2.虚存的大小 ≤ 计算机的地址位数能容纳的最大容量。
在一个请求页式存储管理中,一个程序的页面走向为 4, 3, 2, 1, 3, 5, 4, 3, 2, 1, 5,并采用 LRU 算法。假设分配给该程序的存储块个数 M 分别为 3 和 4,则该访问中发生的缺页次数 F 分别是?
LRU(最近最少使用)该算法实现中最常用的是链表这个数据结构,将即将插入存储块的页面P与存储块中页面比较,如果存储块中已经存在页面P,则将链表中的页面P置于表头,不然缺页次数+1,如果这时链表长度达到目标值(存储块满),则去掉链尾的页面(也是最近最少使用的页面),并将页面P插入链表头。
例如存储块长度为3的时候,页面访问顺序为4, 3, 2, 1, 3, 5, 4, 3, 2, 1, 5
访问 链表 缺页+
4 4 1
3 34 1
2 234 1
1 123 1
3 312 0
5 531 1
4 453 1
3 345 0
2 234 1
1 123 1
5 512 1
所以当存储块为3时候,最后统计缺页次数为9次
第三范式需要确保数据表中的 每一列数据都和主键直接相关,而不能间接相关 。
第一范式:原子性,字段不可分割
第二范式:没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式:不能存在传递依赖
RSA一般为1024或2048位
运行速度:RSA<AES
安全性依赖于大数分解
RSA非对称加密算法
假设在 n 进制下,下面的等式成立,n 的值是?
567*456=150216直接看俩数最后一位,7×6=42,除以9和18都余6,所以9和18俩答案中的一个 再看,按十进制计算567×456=258552 比 150246(n进制)要大,所以n要比十进制要大,所以选择18进制。
假设n进制,则有(5*n 2 +6*n+7) * (4*n 2 +5*n+6) = n 5 +5*n 4 +2*n 2 +n+6,简化以后可以得到
15*n 4 +49*n 3 +86*n 2 +70*n+36=n 5 ,两边同时除以n 5 ,可以得到15/n+49/n 2 +86/n 3 +70/n 4 +36/n 5 =1;
要让等式成立,n肯定是大于15的,所以选D。
567*456=(5n^2+6n+7)*(4n^2+5n+6)=20n^4+49n^3+88n^2+71n+42 ....(1)
150216=n^5+5n^4+2n^2+n+6 ...............................(2)
//[x]表示对x取整
则: (1)式对n取模=42 mod n ...(3)
(2)式对n取模=6 ...........(4)
由(1)=(2),综合(3),(4)式得:
42 mod n=6 (5)
设 a=[42/n] ,则由(5)式子得:
a*n=36 (6)
由(6)可解得 n=9,12,18,36 .......(7)
[(1)/n] mod n=[(2)/n] mod n
=> [71+42/n] mod n=1.........(8)
把(7)的解代入(8),检验可得n=18.
150216=n^5+5n^4+2n^2+n+6 ...............................(2)
//[x]表示对x取整
则: (1)式对n取模=42 mod n ...(3)
(2)式对n取模=6 ...........(4)
由(1)=(2),综合(3),(4)式得:
42 mod n=6 (5)
设 a=[42/n] ,则由(5)式子得:
a*n=36 (6)
由(6)可解得 n=9,12,18,36 .......(7)
[(1)/n] mod n=[(2)/n] mod n
=> [71+42/n] mod n=1.........(8)
把(7)的解代入(8),检验可得n=18.
数据包传递过程:
在网络层IP数据包向上传递的时候会查看数据包中的协议类型
如果协议类型是TCP,则交给TCP在网络层IP数据包向上传递的时候会查看数据包中的协议类型
如果协议类型是UDP,则交给UDP
到了传输层,再根据端口号将数据传送到应用层相应的应用程序,TCP、UDP端口是独立的
所以D是错的
实际上当TCP和UDP提供相同的服务时,会选用相同的端口号(应该是为了方便吧)
说明:图片截自TCP/IP协议详解
所以D是错的
实际上当TCP和UDP提供相同的服务时,会选用相同的端口号(应该是为了方便吧)
说明:图片截自TCP/IP协议详解
TCP、UDP可以绑定同一端口来进行通信。
类似于文件描述符,每个端口都拥有一个叫端口号(port number)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。
参考:http://nigelzeng.iteye.com/blog/1209538
mac地址是物理地址,它是不会改变的;
由于IP地址包含了不同的网络段,
所以,不同的网络中ip地址要变化,
否则无法进行解析,也就无法与其他主机进行通信。
关于 Linux 系统上同一个程序的多个进程实例共享一个 TCP 监听端口的说法, 哪个不正确?
每个进程都使用 SO_REUSEPORT 选项,然后绑定同一个地址和端口
每个进程分别绑定不同的网卡地址的同一端口
第一个进程先绑定到监听地址端口, 然后 fork 子进程共享使用
每个进程分别绑定一次, 但只有最后一个调用的进程才能收到数据
在没有SO_REUSEPORT 之前都是使用fork来让多个进程监听同一端口。AC对。
D,确实只有一个进程收到数据,但是是多个进程竞争连接请求。
B正确
D是竞争调度的结果,而不是最后调用的进程收到数据。
A使用SO_REUSEPORT,绑定统一地址和端口。
B分别绑定 不同的网卡地址的同一端口,TCP的四元组并不冲突。
C使用fork创建子进程共享,也没有问题。