宁波网站设计价格,北京微信网站建设费用,做网站多长时间,怎么查询网站建设时间最近又参加了一些校招#xff0c;真是马不停蹄啊。多参加考试是好的#xff0c;可以不断发现一些新的问题。下面摘录一些我不太会的题。
1.volatile的作用是什么#xff1f;
答案#xff1a;volatile是类型修饰符#xff0c;用它修饰的类型变量可能会被编译器未知的因素…最近又参加了一些校招真是马不停蹄啊。多参加考试是好的可以不断发现一些新的问题。下面摘录一些我不太会的题。
1.volatile的作用是什么
答案volatile是类型修饰符用它修饰的类型变量可能会被编译器未知的因素更改比如操作系统、硬件、线程等。遇到这个关键字修饰的变量编译器对访问该变量的代码就不再进行优化从而可以提供对特殊地址的稳定访问。
参考文献
《C/C volatile让你看的更明白》
《讲讲C中的volatile关键字》 2.位运算给定一个整形变量a写两段代码第一个设置a的bit 3为1第二个清除a的bit 3为0在以上两操作中要求保持其它位不变。
答案 #define BIT3 (0x13)
static int a;
void set_bit3()
{a | BIT3;
}
void claer_bit3()
{a ~BIT3;
}3.TCP/IP协议中端口号的作用
答案
参考《 TCP/IP协议号和端口 》《端口号的作用及常见端口号用途说明》
端口号的作用主要是区分服务类别和在同一时间进行多个会话。
举例来说有主机A需要对外提供FTP和WWW两种服务如果没有端口号存在的 话这两种服务是无法区分的。实际上当网络上某主机B需要访问A的FTP服务时就要指定目的端口号为21当需要访问A的WWW服务时则需要将目的 端口号设为80这时A根据B访问的端口号就可以区分B的两种不同请求。这就是端口号区分服务类别的作用。再举个例子主机A需要同时下载网络上某FTP服务器B上的两个文件那么A需要 与B同时建立两个会话而这两个传输会话就是靠源端口号来区分的。在这种情况下如果没有源端口号的概念那么A就无法区分B传回的数据究竟是属于哪个会话属于哪个文件。而实际上的通信过程是A使用本机的1025号端口请求B的21号端口上的文件1同时又使用1026号端口请求文件2。对于返回的数 据发现是传回给1025号端口的就认为是属于文件1传回给1026号端口的则认为是属于文件2。这就是端口号区分多个会话的作用。TCP 21端口FTP 文件传输服务UDP 53端口DNS 域名解析服务TCP 80端口HTTP 超文本传输服务TCP 443端口HTTPS 加密的超文本传输服务4.当我们在浏览器中键入“facebook.com”时然后浏览器就显示百度主页请问在这个过程中发生了什么
答案
参考《百度面试题从输入url到显示网页后台发生了什么》
基本步骤1).在浏览器中键入域名 2).浏览器通过DNS查找域名的IP地址 3).浏览器给web服务器发送一个HTTP请求 4). facebook服务的301永久重定向响应
5). 浏览器跟踪重定向地址 6). 服务器“处理”请求 7).服务器发回一个HTML响应 8).浏览器开始显示HTML 5. 如下 #include iostream
using namespace std;
int main()
{unsigned short a 10;printf(%u\n, ~a);printf(%d\n, ~a);unsigned char b 125;printf(%d, b);return 0;
}请问输出结果是___________________ 答案 4294967285 -11 125 解析short的字节数是2也就是16位当a10时二进制表示0000 0000 0000 1010~a若是表示为%u即unsigned int 由于
它的字节数是4所以共32位。所以先将a补成32位即0000 0000 0000 0000 0000 0000 0000 1010,然后取反~a即表示为1111 1111 1111 1111 1111 1111 1111 0101
由于是unsigned所以首位是1不表示符号位直接计算就知道2^312^30.......2^42^214294967285.
但是如果是%d呢则首位表示符号位代表是负数将其表示为10进制方法是1.二进制减1,然后取反得0000 0000 0000 0000 0000 0000 0000 1011,所以应该是-11
而char同理直接转为int由于unsigned char为1个字节表示范围0——255,125在其中所以直接转为int,仍然是125。
那么如果上题附加 #include iostream
using namespace std;int main()
{unsigned char b 259;printf(%d\n, b);unsigned char i -1;int p (int)i;printf(p%d\n, p);char j -1;int q (int)j;printf(q%d\n,q);return 0;
}
答案 3 p255 q-1 .解析
1、首先259转为二进制即为1 0000 0011然后由于unsigned char为1个字节8位故要截去最前面的1,剩下的就是0000 0011即为3.或者也可以从另外一个角度来看unsigened char的范围是0-255,259大于255所以溢出反向循环过去为259-255-13 .(PS:256-0,257-1,258-2,259-3)。 2)、-1的二进制表示为1111 1111取8位,由于-1赋给unsigned char所以首位不是符号位因此转化为十进制前面补000000000 00000000 00000000 11111111,即为255或者unsigned char的范围0-255因此-1溢出变为255. 3、-1的二进制表示为1111 1111取8位,由于-1赋给char所以首位是符号位因此转化为十进制前面补111111111 11111111 11111111 11111111,即为-1或者char的范围-128-127因此-1没有溢出因此还是-1. 6. 寄存器变量的作用
答当对一个变量频繁被读写时需要反复访问内存从而花费大量的存取时间。为此C语言提供了一种变量即寄存器变量。这种变量存放在CPU的寄存器中使用时不需要访问内存而直接从寄存器中读写从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量而循环计数是应用寄存器变量的最好候选者。
参考《 c语言性能优化—使用寄存器变量》 《静态变量和寄存器变量》
7.
有3个文件A,B,C,其中A定义了一个全局变量BC都包含了A这个头文件问是否可行
若改为其中A定义了一个静态全局变量BC都包含了A这个头文件问又是否可行
答案第一个可行第二个不可行。可以参考《静态变量和寄存器变量》。主要原因是第一个默认全局变量的作用域是整个源程序。 当一个源程序由多个源文件组成时非静态的全局变量在各个源文件中都是有效的。 而第二个静态全局变量则限制了其作用域 即只在定义该变量的源文件内有效 在同一源程序的其它源文件中不能使用它。