1. 以下哪个的头比较大:
Tcp,udp,ip,Ethernet
我选的ip
2. Ip广播包可以通过以下那两个主机
A.M->R
B.M->P
C.P->S
D.S->X
一、受限的广播
受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
一个未解的问题是:如果一个主机是多接口的,当一个进程向本网广播地址发送数据报时,为实现广播,是否应该将数据报发送到每个相连的接口上?如果不是这样,想对主机所有接口广播的应用必须确定主机中支持广播的所有接口,然后向每个接口发送一个数据报复制。
大多数BSD系统将255.255.255.255看作是配置后第一个接口的广播地址,并且不提供向所属具备广播能力的接口传送数据报的功能。不过,routed和rwhod(BSDrwho客户的服务器)是向每个接口发送UDP数据报的两个应用程序。这两个应用程序均用相似的启动过程来确定主机中的所有接口,并了解哪些接口具备广播能力。同时,将对应于那种接口的指向网络的广播地址作为发往该接口的数据报的目的地址。
HostRequirementsRFC没有进一步涉及多接口主机是否应当向其所有的接口发送受限的广播。
二、指向网络的广播
指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。
三、指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。
四、指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。
第三题:
Union
{
int I;
Char c[2]
}
I =0 ;
C[0] = 10;
C[1] = 200;
问printf(“%d\n”,i);
在80x86机器上 打印的值是多少:2760
低地址 10
高地址 200
如果是小端模式,高地址存的是高位:
即:200是高位,10是地位,则打印的是:200*256+10
如果是大端模式,高地址存的是地位:
即打印:10*256+200
80x86是大端模式
第四题:
求程序的复杂度:
Int bar(k)
{
…
If(k>0)
{
Do{
K=k/2;
Bar(k)
}while(K>0)
}
Else
Foo();//时间复杂度是常量;
}
Int XXX(n)
{
For(int i=1;i<=n;i++)
{
Bar(i);
}
}
请问函数XXX的复杂度是多少?
我写的是O(n2log2n)
猜的。。。。
第五题:
填Merge函数中缺少的语句
Int Merge()
{
While(i
{
C[i] =a[i]
}
While(???)// 我填i
{
C[i] = a[i++]
}
While(???)// 我填i
{
C[i] = b[i++];
}
}
第六题:
11个数中找一个不存在的数一共要查找多少次?
我填的3
第七题:
R(X)表示x是实数,Q(x)表示x是有理数。并非所有的实数都是有理数和以下哪些个等价:
~(∨x)(R(x)->Q(x))
~(∨x)(RX^Q(X))
(∈x)(RX->~Q(x))
(∈x)(RX^~Q(x))
我四个都选了。。。。
第八题:
M阶的B-树中二叉查找 ,补齐代码
第九题:java中,以下两个表示的has a关系,选的c和d
第十题:B继承了A,问以下哪个语句合法,选的b,c,d
第十一题
第十二题:python的输出:没写
第二大题
名词解释:XSS跨站脚本?
SVN,版本管理器的一种
RTT,往返时间
MVC,round Robin 轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。
,SSH:struts, spring, hibernate
第三大题:
1. c++
const char * p 和char const *p,以及char * const p的区别
再来看const修饰指针的情况.
const char* p : 因为const 修饰符在 * 号前面,因此const 修饰的是 (*p),因此p指向的字符串是const的.
char const* p : 等价于const char* p, 因为const 修饰符在 * 号前面,因此const 修饰的是 (*p),因此p指向的字符串是const的.
char* const p: const修饰的是变量p,而变量p是 char* 类型的,所以这个char* 变量本省是const,它的值初始化后就不能变了.
最近在网上找到一片好文章,引用至此:
const char*, char const* and char *const 的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。
事实上这个概念谁都有只是三种声明方式非常相似很容易记混。
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读。
char * const cp; ( * 读成 pointer to
cp is a const pointer to char
const char * p;
p is a pointer to const char;
char const * p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。
C++标准规定,const关键字放在类型或变量名之前等价的。
const int n=5;
//same as belowint const m=10;
const int *p; //same as below
const (int) * pint const *q; // (int) const *p
char ** p1;
//pointer to pointer to char
const char **p2;
//pointer to pointer to const char
char * const * p3;
//pointer to const pointer to char
const char * const * p4;
//pointer to const pointer to const char
char ** const p5;
//const pointer to pointer to char
const char ** const p6;
//const pointer to pointer to const char
char * const * const p7;
//const pointer to const pointer to char
const char * const * const p8;
//const pointer to const pointer to const char
3.c++,c#和java的templete有什么区别?
java 中的泛型与 C++ 模板的比较
2007年09月18日 星期二 17:00
泛型本质上是提供类型的"类型参数",它们也被称为参数化类型(parameterized type)或参量多态(parametric polymorphism)。其实泛型思想并不是 Java 最先引入的,C++ 中的模板就是一个运用泛型的例子。
GJ (Generic Java)是对 Java 语言的一种扩展,是一种带有参数化类型的 Java 语言。用 GJ 编写的程序看起来和普通的 Java 程序基本相同,只不过多了一些参数化的类型同时少了一些类型转换。实际上,这些 GJ 程序也是首先被转化成一般的不带泛型的 Java 程序后再进行处理的,编译器自动完成了从 Generic Java 到普通 Java 的翻译。
GJ 程序的语法在表面上与 C++ 中的模板非常类似,但是二者之间有着本质的区别。
首先,Java 语言中的泛型不能接受基本类型作为类型参数――它只能接受引用类型。这意味着可以定义 List,但是不可以定义 List。
4.strtok函数要是被多个线程同时访问会怎么样?怎么避免?
5.数据库一个join连接的两个select语句怎么改写?
Image:img_name; user-id
Reversion: Rev_id; rev_usr
6.
一个按行增长同时按列增加的MXN矩阵中如何查找一个值X
写的是先从最后一列开始查找,如果A[i][N]
用二分法的话,时间复杂度:lgm+lgn
这个题回答错误。就算是A[i][N]
最优解法:按副对角线查找,从A[0][N]开始查找,i=0;j=N 如果A[i][j]>x,i++,否则:j--,重复这个操作,知道找到为止。
复杂度:M+N
7.假设有卡车运输从北京到天津,持续不断的运输,问带宽和传输时延是多少。
假设每个卡车装k bit,速度M,距离是K,
则传输时延是:K/M
如果每秒钟到一辆卡车。则带宽就是K bps
编程题:
1.如何把一个字符串表示的16进制数转化成long型的数
2.如果A矩阵和B矩阵相乘,A的大小是:x*y, B的大小事y*z
A*B 大小事x*z 需要做乘法的次数是:x*y*z
求写一个程序,求出n个矩阵相乘需要运算的次数:
给的书
N:n个矩阵城府
Size【n+1】:第n个矩阵的大小是:size[n]*size[n+1]
返回:一个long型的数
Long char_to_long(const char * A)
{
Long m;
While(*A != ‘\0’)
{
M = M*16
Switch *A
{
Case a,b,c,d,e,f:
M+= 10+(*A-‘a’);
Break;
Case A,B,C,D,E,F:
M+=10+(*A-‘A’);
Break;
Default:
M+=*A-‘0’;
}
}
Return m;
}
总结:基本思路是对的。但是
1.switch语句写错了,要带括号:Switch (*A)
2.case语句写错了,没有这种写法,Case a,b,c,d,e,f:应该是:
3.忘了把A的地址加1了。While的值没有改变。
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
修改并且通过测试的程序如下所示:
#include
long char_to_long(const char *A)
{
int m = 0;
while(*A != '\0')
{
m = m*16;
switch (*A)
{
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
m = m+10+*A-'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
m= m+10+*A-'A';
break;
default:
m=m+*A-'0';
break;
}
*A++;
}
return m;
}
int main()
{
char *A="31";
long x = char_to_long(A);
printf("%ld",x);
}
Long conmulate(int n, int *size)
{
Int m;
Int a1=0;
Int a2=1;
Int a3=2;
if(n = 1) return 0; //只有一个矩阵就不用进行计算
While(a3
{
M1 = size[a1];
M2=size[a2];
M3=size[a3];
M += M1*M2*M3;
a1=a1;
a2=a3;
a3=a3+1;
M1 = size[a1];
M2=size[a2];
M3=size[a3];
}
Return m;
}
存在问题:1.判断条件出错,应该是:While(a3
2. M应该初始化,应为一上来就要加值给它。
修改并测试了通过如下:
long cumulate(int n, int *size)
{
int M=0;
int a1=0;
int a2=1;
int a3=2;
int M1;int M2;int M3;
if(n = 1) return 0; //只有一个矩阵就不用进行计算
while(a3<=n)
{
M1 = size[a1];
M2=size[a2];
M3=size[a3];
M += M1*M2*M3;
a1=a1;
a2=a3;
a3=a3+1;
}
return M;
}
int main()
{
int size[5] = {1,2,3,4,5};
int x = cumulate(4,size);
printf("%ld",x);
}