面试题目

来源:互联网 发布:java string变量 编辑:程序博客网 时间:2024/04/29 06:20
1.三层交换的特点
一次路由,多次转发.三层交换技术就是二层交换技术+三层转发技术.


2.怎么监控socket
使用select函数来监视读写描述符的变化情况


3.怎样使socket工作在非阻塞状态
设置socket为非阻塞
int flags = fcntl(SocketFd,F_GETFL,0);
fcntl(SocketFd,F_SETFL,O_NONBLOCK|flags);
恢复阻塞状态:
fcntl(SocketFd,F_SETFL,~O_NONBLOCK&flags);  /*set the socket block*/


4.http协议的工作过程
1)客户端连接到Web服务器,建立一个TCP套接字连接
2)发送HTTP请求,一个请求报文由请求行,请求头部,空行和请求数据4部分组成
3)服务器接受请求并返回HTTP响应,一个响应由状态行,响应头部,空行和响应数据4部分组成
4)释放连接TCP连接
5)客户端浏览器解析HTML内容


5.TCP和SSL的握手过程
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手. 
连接终止协议(四次挥手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接.收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送.
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1.和SYN一样,一个FIN将占用一个序号.
(3) 服务器关闭客户端的连接,发送一个FIN给客户端.
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1.


SSL握手过程:
第1步对应一条单一的握手消息,ClientHello.
第2步对应一系列SSL握手消息,服务器发送的第一条消息为ServerHello,其中包含了它所选择的算法,接着再在Certificate消息中发送其证书.最后,服务器发送ServerHelloDone消息以表示这一握手阶段的完成.需要ServerHelloDone的原因是一些更为复杂的握手变种还要在Certifacate之后发送其他一些消息.当客户端接收到ServerHelloDone消息时.它就知道不会再有其他类似的消息过来了,于是就可以继续它这一方的握手.
第3步对应ClientKeyExchange消息.
第4与第5步对应Finished消息.该消息是第一条使用刚刚磋商过的算法加以保护的消息.为了防止握手过程遭到篡改,该消息的内容是前一阶段所有握手消息的MAC值.然而,由于Finished消息是以磋商好的算法加以保护的,所以也要与新磋商的MAC密钥—起计算消息本身的MAc值.


6.调用system call的过程
所谓系统调用,就是用户在程序中调用操作系统所提供的一些子功能.它是通过系统调用命令,中段现行程序而转去执行相应的子程序,以完成特定的系统功能.完成后,控制又返回到发出系统调用命令之后的一条指令,被中断的程序将继续执行下去.
系统调用与一般过程调用不同,其主要区别是:
1.运行的状态不同.在程序中的过程一般或者都是用户程序,或者都是系统程序,即都是运行在同一个系统状态的(用户态或系统态).
2.进入的方式不同.一般的过程调用可以直接由调用过程转向被调用的过程.而执行系统调用时,由于调用过程与被调用过程是处于不同的状态,因而不允许由调用过程直接转向被调用过程,通常是通过访问管中断(即软中断)进入,先进入操作系统,经分析后,才能转向相应的命令处理程序.
3.代码层次不同.一般过程调用中的被调用程序是用户级程序,而系统调用是操作系统中的代码程序,是系统级程序.
在系统中真正被所有进程都使用的内核通信方式是系统调用.例如当进程请求内核服务时,就使用的是系统调用.一般情况下,进程是不能够存取系统内核的.它不能存取内核使用的内存段,也不能调用内核函数,CPU的硬件结构保证了这一点.只有系统调用是一个例外.进程使用寄存器中适当的值跳转到内核中事先定义好的代码中执行,(当然,这些代码是只读的).在Intel结构的计算机中,这是由中断0x80实现的.
进程可以跳转到的内核中的位置叫做system_call.在此位置的过程检查系统调用号,它将告诉内核进程请求的服务是什么.然后,它再查找系统调用表sys_call_table,找到希望调用的内核函数的地址,并调用此函数,最后返回.


7.proc文件系统的作用
/proc文件系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做 /proc).这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行中改变设置(通过改变内核参数)


8.segment fault的发生过程
产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址,以及与此相应的段限和页面交换,还有程序运行级别还有内存粒度等等的信息.一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了.


9.什么是linux signal
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达.信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了.信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息.


10.线程比进程的好处


11.线程T1,T2和T3顺序调用比起进程的好处


12.两个处理器怎么访问共享内存


13.const char * 定义一个指向字符常数的指针
   char const * 等同于const char* p
   char *const 定义一个指向字符的指针常数,即const指针


14. T *p = new T[10];
    delete p;
内存泄漏
15.什么是window message queue?线程是否也具有window message queue?


16.UNICODE和MULTI_BYTES有什么区别?
Unicode一般指的是UTF-16 UTF-32
Multi-byte 指的是UFT-8


17.switch 不能包含 string


18.x=f1(23,14,f2(12/4))*f(3)+f(4),函数的调用顺序


19.在运行过程中,怎么计算动态分配的内存的大小?


20.static是否可以用在头文件中?
在头文件中定义static变量会造成变量多次定义,造成内存空间的浪费,而且也不是真正的全局变量.应该避免使用这种定义方式.


21.
void change0(char *buffer){
buffer="6";
}


void change1(char* *buffer){
buffer="7";
}


char *change2(char *buffer){
return (buffer+1);
}


void printAll(char *buffer[]){
for(int i=0;i<5;i++){
printf("%s\n",buffer[i]);
}
}


void main(){
char *buffer[]={"1","2","3","4","5"};
change0(buffer[0]);
change1(buffer[1]);
buffer[2]=change2(buffer[2]);
printAll(buffer);
}
result:
1
2


4
5
22.
int x;
int modifyvalue(){
return (x+=10);
}


int changevalue(int x){
return (x+=1);
}


void main(){
int x=10;
x++;
changevalue(x);
x++;
modifyvalue();
printf("first:%d\n", x);


x++;
changevalue(x);
printf("second:%d\n", x);


x=modifyvalue();
printf("third:%d\n", x);
}
the result:


first:12
second:13
third:20
原创粉丝点击